1var __create = Object.create; 2var __defProp = Object.defineProperty; 3var __getOwnPropDesc = Object.getOwnPropertyDescriptor; 4var __getOwnPropNames = Object.getOwnPropertyNames; 5var __getProtoOf = Object.getPrototypeOf; 6var __hasOwnProp = Object.prototype.hasOwnProperty; 7var __esm = (fn3, res) => function __init() { 8 return fn3 && (res = (0, fn3[__getOwnPropNames(fn3)[0]])(fn3 = 0)), res; 9}; 10var __commonJS = (cb, mod) => function __require() { 11 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; 12}; 13var __export = (target, all) => { 14 for (var name in all) 15 __defProp(target, name, { get: all[name], enumerable: true }); 16}; 17var __copyProps = (to3, from, except, desc) => { 18 if (from && typeof from === "object" || typeof from === "function") { 19 for (let key of __getOwnPropNames(from)) 20 if (!__hasOwnProp.call(to3, key) && key !== except) 21 __defProp(to3, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); 22 } 23 return to3; 24}; 25var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( 26 // If the importer is in node compatibility mode or this is not an ESM 27 // file that has been converted to a CommonJS file using a Babel- 28 // compatible transform (i.e. "__esModule" has not been set), then set 29 // "default" to the CommonJS "module.exports" for node compatibility. 30 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, 31 mod 32)); 33
vendor: 334 bytes, lines 34-44
34// node_modules/@rails/actioncable/src/adapters.js 35var adapters_default; 36var init_adapters = __esm({ 37 "node_modules/@rails/actioncable/src/adapters.js"() { 38 adapters_default = { 39 logger: typeof console !== "undefined" ? console : void 0, 40 WebSocket: typeof WebSocket !== "undefined" ? WebSocket : void 0 41 }; 42 } 43}); 44
vendor: 386 bytes, lines 45-60
45// node_modules/@rails/actioncable/src/logger.js 46var logger_default; 47var init_logger = __esm({ 48 "node_modules/@rails/actioncable/src/logger.js"() { 49 init_adapters(); 50 logger_default = { 51 log(...messages) { 52 if (this.enabled) { 53 messages.push(Date.now()); 54 adapters_default.logger.log("[ActionCable]", ...messages); 55 } 56 } 57 }; 58 } 59}); 60
vendor: 4,101 bytes, lines 61-170
61// node_modules/@rails/actioncable/src/connection_monitor.js 62var now, secondsSince, ConnectionMonitor, connection_monitor_default; 63var init_connection_monitor = __esm({ 64 "node_modules/@rails/actioncable/src/connection_monitor.js"() { 65 init_logger(); 66 now = () => (/* @__PURE__ */ new Date()).getTime(); 67 secondsSince = (time) => (now() - time) / 1e3; 68 ConnectionMonitor = class { 69 constructor(connection) { 70 this.visibilityDidChange = this.visibilityDidChange.bind(this); 71 this.connection = connection; 72 this.reconnectAttempts = 0; 73 } 74 start() { 75 if (!this.isRunning()) { 76 this.startedAt = now(); 77 delete this.stoppedAt; 78 this.startPolling(); 79 addEventListener("visibilitychange", this.visibilityDidChange); 80 logger_default.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`); 81 } 82 } 83 stop() { 84 if (this.isRunning()) { 85 this.stoppedAt = now(); 86 this.stopPolling(); 87 removeEventListener("visibilitychange", this.visibilityDidChange); 88 logger_default.log("ConnectionMonitor stopped"); 89 } 90 } 91 isRunning() { 92 return this.startedAt && !this.stoppedAt; 93 } 94 recordMessage() { 95 this.pingedAt = now(); 96 } 97 recordConnect() { 98 this.reconnectAttempts = 0; 99 delete this.disconnectedAt; 100 logger_default.log("ConnectionMonitor recorded connect"); 101 } 102 recordDisconnect() { 103 this.disconnectedAt = now(); 104 logger_default.log("ConnectionMonitor recorded disconnect"); 105 } 106 // Private 107 startPolling() { 108 this.stopPolling(); 109 this.poll(); 110 } 111 stopPolling() { 112 clearTimeout(this.pollTimeout); 113 } 114 poll() { 115 this.pollTimeout = setTimeout( 116 () => { 117 this.reconnectIfStale(); 118 this.poll(); 119 }, 120 this.getPollInterval() 121 ); 122 } 123 getPollInterval() { 124 const { staleThreshold, reconnectionBackoffRate } = this.constructor; 125 const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10)); 126 const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate; 127 const jitter = jitterMax * Math.random(); 128 return staleThreshold * 1e3 * backoff * (1 + jitter); 129 } 130 reconnectIfStale() { 131 if (this.connectionIsStale()) { 132 logger_default.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`); 133 this.reconnectAttempts++; 134 if (this.disconnectedRecently()) { 135 logger_default.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`); 136 } else { 137 logger_default.log("ConnectionMonitor reopening"); 138 this.connection.reopen(); 139 } 140 } 141 } 142 get refreshedAt() { 143 return this.pingedAt ? this.pingedAt : this.startedAt; 144 } 145 connectionIsStale() { 146 return secondsSince(this.refreshedAt) > this.constructor.staleThreshold; 147 } 148 disconnectedRecently() { 149 return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold; 150 } 151 visibilityDidChange() { 152 if (document.visibilityState === "visible") { 153 setTimeout( 154 () => { 155 if (this.connectionIsStale() || !this.connection.isOpen()) { 156 logger_default.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`); 157 this.connection.reopen(); 158 } 159 }, 160 200 161 ); 162 } 163 } 164 }; 165 ConnectionMonitor.staleThreshold = 6; 166 ConnectionMonitor.reconnectionBackoffRate = 0.15; 167 connection_monitor_default = ConnectionMonitor; 168 } 169}); 170
vendor: 741 bytes, lines 171-197
171// node_modules/@rails/actioncable/src/internal.js 172var internal_default; 173var init_internal = __esm({ 174 "node_modules/@rails/actioncable/src/internal.js"() { 175 internal_default = { 176 "message_types": { 177 "welcome": "welcome", 178 "disconnect": "disconnect", 179 "ping": "ping", 180 "confirmation": "confirm_subscription", 181 "rejection": "reject_subscription" 182 }, 183 "disconnect_reasons": { 184 "unauthorized": "unauthorized", 185 "invalid_request": "invalid_request", 186 "server_restart": "server_restart", 187 "remote": "remote" 188 }, 189 "default_mount_path": "/cable", 190 "protocols": [ 191 "actioncable-v1-json", 192 "actioncable-unsupported" 193 ] 194 }; 195 } 196}); 197
vendor: 5,887 bytes, lines 198-366
198// node_modules/@rails/actioncable/src/connection.js 199var message_types, protocols, supportedProtocols, indexOf, Connection, connection_default; 200var init_connection = __esm({ 201 "node_modules/@rails/actioncable/src/connection.js"() { 202 init_adapters(); 203 init_connection_monitor(); 204 init_internal(); 205 init_logger(); 206 ({ message_types, protocols } = internal_default); 207 supportedProtocols = protocols.slice(0, protocols.length - 1); 208 indexOf = [].indexOf; 209 Connection = class { 210 constructor(consumer2) { 211 this.open = this.open.bind(this); 212 this.consumer = consumer2; 213 this.subscriptions = this.consumer.subscriptions; 214 this.monitor = new connection_monitor_default(this); 215 this.disconnected = true; 216 } 217 send(data) { 218 if (this.isOpen()) { 219 this.webSocket.send(JSON.stringify(data)); 220 return true; 221 } else { 222 return false; 223 } 224 } 225 open() { 226 if (this.isActive()) { 227 logger_default.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`); 228 return false; 229 } else { 230 const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]; 231 logger_default.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`); 232 if (this.webSocket) { 233 this.uninstallEventHandlers(); 234 } 235 this.webSocket = new adapters_default.WebSocket(this.consumer.url, socketProtocols); 236 this.installEventHandlers(); 237 this.monitor.start(); 238 return true; 239 } 240 } 241 close({ allowReconnect } = { allowReconnect: true }) { 242 if (!allowReconnect) { 243 this.monitor.stop(); 244 } 245 if (this.isOpen()) { 246 return this.webSocket.close(); 247 } 248 } 249 reopen() { 250 logger_default.log(`Reopening WebSocket, current state is ${this.getState()}`); 251 if (this.isActive()) { 252 try { 253 return this.close(); 254 } catch (error2) { 255 logger_default.log("Failed to reopen WebSocket", error2); 256 } finally { 257 logger_default.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`); 258 setTimeout(this.open, this.constructor.reopenDelay); 259 } 260 } else { 261 return this.open(); 262 } 263 } 264 getProtocol() { 265 if (this.webSocket) { 266 return this.webSocket.protocol; 267 } 268 } 269 isOpen() { 270 return this.isState("open"); 271 } 272 isActive() { 273 return this.isState("open", "connecting"); 274 } 275 triedToReconnect() { 276 return this.monitor.reconnectAttempts > 0; 277 } 278 // Private 279 isProtocolSupported() { 280 return indexOf.call(supportedProtocols, this.getProtocol()) >= 0; 281 } 282 isState(...states) { 283 return indexOf.call(states, this.getState()) >= 0; 284 } 285 getState() { 286 if (this.webSocket) { 287 for (let state in adapters_default.WebSocket) { 288 if (adapters_default.WebSocket[state] === this.webSocket.readyState) { 289 return state.toLowerCase(); 290 } 291 } 292 } 293 return null; 294 } 295 installEventHandlers() { 296 for (let eventName in this.events) { 297 const handler = this.events[eventName].bind(this); 298 this.webSocket[`on${eventName}`] = handler; 299 } 300 } 301 uninstallEventHandlers() { 302 for (let eventName in this.events) { 303 this.webSocket[`on${eventName}`] = function() { 304 }; 305 } 306 } 307 }; 308 Connection.reopenDelay = 500; 309 Connection.prototype.events = { 310 message(event) { 311 if (!this.isProtocolSupported()) { 312 return; 313 } 314 const { identifier, message, reason, reconnect, type } = JSON.parse(event.data); 315 this.monitor.recordMessage(); 316 switch (type) { 317 case message_types.welcome: 318 if (this.triedToReconnect()) { 319 this.reconnectAttempted = true; 320 } 321 this.monitor.recordConnect(); 322 return this.subscriptions.reload(); 323 case message_types.disconnect: 324 logger_default.log(`Disconnecting. Reason: ${reason}`); 325 return this.close({ allowReconnect: reconnect }); 326 case message_types.ping: 327 return null; 328 case message_types.confirmation: 329 this.subscriptions.confirmSubscription(identifier); 330 if (this.reconnectAttempted) { 331 this.reconnectAttempted = false; 332 return this.subscriptions.notify(identifier, "connected", { reconnected: true }); 333 } else { 334 return this.subscriptions.notify(identifier, "connected", { reconnected: false }); 335 } 336 case message_types.rejection: 337 return this.subscriptions.reject(identifier); 338 default: 339 return this.subscriptions.notify(identifier, "received", message); 340 } 341 }, 342 open() { 343 logger_default.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`); 344 this.disconnected = false; 345 if (!this.isProtocolSupported()) { 346 logger_default.log("Protocol is unsupported. Stopping monitor and disconnecting."); 347 return this.close({ allowReconnect: false }); 348 } 349 }, 350 close(event) { 351 logger_default.log("WebSocket onclose event"); 352 if (this.disconnected) { 353 return; 354 } 355 this.disconnected = true; 356 this.monitor.recordDisconnect(); 357 return this.subscriptions.notifyAll("disconnected", { willAttemptReconnect: this.monitor.isRunning() }); 358 }, 359 error() { 360 logger_default.log("WebSocket onerror event"); 361 } 362 }; 363 connection_default = Connection; 364 } 365}); 366
vendor: 1,036 bytes, lines 367-400
367// node_modules/@rails/actioncable/src/subscription.js 368var extend, Subscription; 369var init_subscription = __esm({ 370 "node_modules/@rails/actioncable/src/subscription.js"() { 371 extend = function(object, properties) { 372 if (properties != null) { 373 for (let key in properties) { 374 const value = properties[key]; 375 object[key] = value; 376 } 377 } 378 return object; 379 }; 380 Subscription = class { 381 constructor(consumer2, params = {}, mixin) { 382 this.consumer = consumer2; 383 this.identifier = JSON.stringify(params); 384 extend(this, mixin); 385 } 386 // Perform a channel action with the optional data passed as an attribute 387 perform(action, data = {}) { 388 data.action = action; 389 return this.send(data); 390 } 391 send(data) { 392 return this.consumer.send({ command: "message", identifier: this.identifier, data: JSON.stringify(data) }); 393 } 394 unsubscribe() { 395 return this.consumer.subscriptions.remove(this); 396 } 397 }; 398 } 399}); 400
vendor: 1,804 bytes, lines 401-448
401// node_modules/@rails/actioncable/src/subscription_guarantor.js 402var SubscriptionGuarantor, subscription_guarantor_default; 403var init_subscription_guarantor = __esm({ 404 "node_modules/@rails/actioncable/src/subscription_guarantor.js"() { 405 init_logger(); 406 SubscriptionGuarantor = class { 407 constructor(subscriptions) { 408 this.subscriptions = subscriptions; 409 this.pendingSubscriptions = []; 410 } 411 guarantee(subscription) { 412 if (this.pendingSubscriptions.indexOf(subscription) == -1) { 413 logger_default.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`); 414 this.pendingSubscriptions.push(subscription); 415 } else { 416 logger_default.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`); 417 } 418 this.startGuaranteeing(); 419 } 420 forget(subscription) { 421 logger_default.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`); 422 this.pendingSubscriptions = this.pendingSubscriptions.filter((s3) => s3 !== subscription); 423 } 424 startGuaranteeing() { 425 this.stopGuaranteeing(); 426 this.retrySubscribing(); 427 } 428 stopGuaranteeing() { 429 clearTimeout(this.retryTimeout); 430 } 431 retrySubscribing() { 432 this.retryTimeout = setTimeout( 433 () => { 434 if (this.subscriptions && typeof this.subscriptions.subscribe === "function") { 435 this.pendingSubscriptions.map((subscription) => { 436 logger_default.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`); 437 this.subscriptions.subscribe(subscription); 438 }); 439 } 440 }, 441 500 442 ); 443 } 444 }; 445 subscription_guarantor_default = SubscriptionGuarantor; 446 } 447}); 448
vendor: 2,972 bytes, lines 449-529
449// node_modules/@rails/actioncable/src/subscriptions.js 450var Subscriptions; 451var init_subscriptions = __esm({ 452 "node_modules/@rails/actioncable/src/subscriptions.js"() { 453 init_logger(); 454 init_subscription(); 455 init_subscription_guarantor(); 456 Subscriptions = class { 457 constructor(consumer2) { 458 this.consumer = consumer2; 459 this.guarantor = new subscription_guarantor_default(this); 460 this.subscriptions = []; 461 } 462 create(channelName, mixin) { 463 const channel = channelName; 464 const params = typeof channel === "object" ? channel : { channel }; 465 const subscription = new Subscription(this.consumer, params, mixin); 466 return this.add(subscription); 467 } 468 // Private 469 add(subscription) { 470 this.subscriptions.push(subscription); 471 this.consumer.ensureActiveConnection(); 472 this.notify(subscription, "initialized"); 473 this.subscribe(subscription); 474 return subscription; 475 } 476 remove(subscription) { 477 this.forget(subscription); 478 if (!this.findAll(subscription.identifier).length) { 479 this.sendCommand(subscription, "unsubscribe"); 480 } 481 return subscription; 482 } 483 reject(identifier) { 484 return this.findAll(identifier).map((subscription) => { 485 this.forget(subscription); 486 this.notify(subscription, "rejected"); 487 return subscription; 488 }); 489 } 490 forget(subscription) { 491 this.guarantor.forget(subscription); 492 this.subscriptions = this.subscriptions.filter((s3) => s3 !== subscription); 493 return subscription; 494 } 495 findAll(identifier) { 496 return this.subscriptions.filter((s3) => s3.identifier === identifier); 497 } 498 reload() { 499 return this.subscriptions.map((subscription) => this.subscribe(subscription)); 500 } 501 notifyAll(callbackName, ...args) { 502 return this.subscriptions.map((subscription) => this.notify(subscription, callbackName, ...args)); 503 } 504 notify(subscription, callbackName, ...args) { 505 let subscriptions; 506 if (typeof subscription === "string") { 507 subscriptions = this.findAll(subscription); 508 } else { 509 subscriptions = [subscription]; 510 } 511 return subscriptions.map((subscription2) => typeof subscription2[callbackName] === "function" ? subscription2[callbackName](...args) : void 0); 512 } 513 subscribe(subscription) { 514 if (this.sendCommand(subscription, "subscribe")) { 515 this.guarantor.guarantee(subscription); 516 } 517 } 518 confirmSubscription(identifier) { 519 logger_default.log(`Subscription confirmed ${identifier}`); 520 this.findAll(identifier).map((subscription) => this.guarantor.forget(subscription)); 521 } 522 sendCommand(subscription, command) { 523 const { identifier } = subscription; 524 return this.consumer.send({ command, identifier }); 525 } 526 }; 527 } 528}); 529
vendor: 1,302 bytes, lines 530-580
530// node_modules/@rails/actioncable/src/consumer.js 531function createWebSocketURL(url) { 532 if (typeof url === "function") { 533 url = url(); 534 } 535 if (url && !/^wss?:/i.test(url)) { 536 const a3 = document.createElement("a"); 537 a3.href = url; 538 a3.href = a3.href; 539 a3.protocol = a3.protocol.replace("http", "ws"); 540 return a3.href; 541 } else { 542 return url; 543 } 544} 545var Consumer; 546var init_consumer = __esm({ 547 "node_modules/@rails/actioncable/src/consumer.js"() { 548 init_connection(); 549 init_subscriptions(); 550 Consumer = class { 551 constructor(url) { 552 this._url = url; 553 this.subscriptions = new Subscriptions(this); 554 this.connection = new connection_default(this); 555 this.subprotocols = []; 556 } 557 get url() { 558 return createWebSocketURL(this._url); 559 } 560 send(data) { 561 return this.connection.send(data); 562 } 563 connect() { 564 return this.connection.open(); 565 } 566 disconnect() { 567 return this.connection.close({ allowReconnect: false }); 568 } 569 ensureActiveConnection() { 570 if (!this.connection.isActive()) { 571 return this.connection.open(); 572 } 573 } 574 addSubProtocol(subprotocol) { 575 this.subprotocols = [...this.subprotocols, subprotocol]; 576 } 577 }; 578 } 579}); 580
vendor: 1,183 bytes, lines 581-619
581// node_modules/@rails/actioncable/src/index.js 582var src_exports = {}; 583__export(src_exports, { 584 Connection: () => connection_default, 585 ConnectionMonitor: () => connection_monitor_default, 586 Consumer: () => Consumer, 587 INTERNAL: () => internal_default, 588 Subscription: () => Subscription, 589 SubscriptionGuarantor: () => subscription_guarantor_default, 590 Subscriptions: () => Subscriptions, 591 adapters: () => adapters_default, 592 createConsumer: () => createConsumer, 593 createWebSocketURL: () => createWebSocketURL, 594 getConfig: () => getConfig, 595 logger: () => logger_default 596}); 597function createConsumer(url = getConfig("url") || internal_default.default_mount_path) { 598 return new Consumer(url); 599} 600function getConfig(name) { 601 const element = document.head.querySelector(`meta[name='action-cable-${name}']`); 602 if (element) { 603 return element.getAttribute("content"); 604 } 605} 606var init_src = __esm({ 607 "node_modules/@rails/actioncable/src/index.js"() { 608 init_adapters(); 609 init_connection(); 610 init_connection_monitor(); 611 init_consumer(); 612 init_internal(); 613 init_logger(); 614 init_subscription(); 615 init_subscription_guarantor(); 616 init_subscriptions(); 617 } 618}); 619
vendor: 45,280 bytes, lines 620-1591
620// node_modules/react/cjs/react.development.js 621var require_react_development = __commonJS({ 622 "node_modules/react/cjs/react.development.js"(exports, module) { 623 "use strict"; 624 (function() { 625 function defineDeprecationWarning(methodName, info) { 626 Object.defineProperty(Component.prototype, methodName, { 627 get: function() { 628 console.warn( 629 "%s(...) is deprecated in plain JavaScript React classes. %s", 630 info[0], 631 info[1] 632 ); 633 } 634 }); 635 } 636 function getIteratorFn(maybeIterable) { 637 if (null === maybeIterable || "object" !== typeof maybeIterable) 638 return null; 639 maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"]; 640 return "function" === typeof maybeIterable ? maybeIterable : null; 641 } 642 function warnNoop(publicInstance, callerName) { 643 publicInstance = (publicInstance = publicInstance.constructor) && (publicInstance.displayName || publicInstance.name) || "ReactClass"; 644 var warningKey = publicInstance + "." + callerName; 645 didWarnStateUpdateForUnmountedComponent[warningKey] || (console.error( 646 "Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", 647 callerName, 648 publicInstance 649 ), didWarnStateUpdateForUnmountedComponent[warningKey] = true); 650 } 651 function Component(props, context, updater) { 652 this.props = props; 653 this.context = context; 654 this.refs = emptyObject; 655 this.updater = updater || ReactNoopUpdateQueue; 656 } 657 function ComponentDummy() { 658 } 659 function PureComponent(props, context, updater) { 660 this.props = props; 661 this.context = context; 662 this.refs = emptyObject; 663 this.updater = updater || ReactNoopUpdateQueue; 664 } 665 function noop() { 666 } 667 function testStringCoercion(value) { 668 return "" + value; 669 } 670 function checkKeyStringCoercion(value) { 671 try { 672 testStringCoercion(value); 673 var JSCompiler_inline_result = false; 674 } catch (e3) { 675 JSCompiler_inline_result = true; 676 } 677 if (JSCompiler_inline_result) { 678 JSCompiler_inline_result = console; 679 var JSCompiler_temp_const = JSCompiler_inline_result.error; 680 var JSCompiler_inline_result$jscomp$0 = "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; 681 JSCompiler_temp_const.call( 682 JSCompiler_inline_result, 683 "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", 684 JSCompiler_inline_result$jscomp$0 685 ); 686 return testStringCoercion(value); 687 } 688 } 689 function getComponentNameFromType(type) { 690 if (null == type) return null; 691 if ("function" === typeof type) 692 return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; 693 if ("string" === typeof type) return type; 694 switch (type) { 695 case REACT_FRAGMENT_TYPE: 696 return "Fragment"; 697 case REACT_PROFILER_TYPE: 698 return "Profiler"; 699 case REACT_STRICT_MODE_TYPE: 700 return "StrictMode"; 701 case REACT_SUSPENSE_TYPE: 702 return "Suspense"; 703 case REACT_SUSPENSE_LIST_TYPE: 704 return "SuspenseList"; 705 case REACT_ACTIVITY_TYPE: 706 return "Activity"; 707 } 708 if ("object" === typeof type) 709 switch ("number" === typeof type.tag && console.error( 710 "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." 711 ), type.$$typeof) { 712 case REACT_PORTAL_TYPE: 713 return "Portal"; 714 case REACT_CONTEXT_TYPE: 715 return type.displayName || "Context"; 716 case REACT_CONSUMER_TYPE: 717 return (type._context.displayName || "Context") + ".Consumer"; 718 case REACT_FORWARD_REF_TYPE: 719 var innerType = type.render; 720 type = type.displayName; 721 type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); 722 return type; 723 case REACT_MEMO_TYPE: 724 return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; 725 case REACT_LAZY_TYPE: 726 innerType = type._payload; 727 type = type._init; 728 try { 729 return getComponentNameFromType(type(innerType)); 730 } catch (x3) { 731 } 732 } 733 return null; 734 } 735 function getTaskName(type) { 736 if (type === REACT_FRAGMENT_TYPE) return "<>"; 737 if ("object" === typeof type && null !== type && type.$$typeof === REACT_LAZY_TYPE) 738 return "<...>"; 739 try { 740 var name = getComponentNameFromType(type); 741 return name ? "<" + name + ">" : "<...>"; 742 } catch (x3) { 743 return "<...>"; 744 } 745 } 746 function getOwner() { 747 var dispatcher = ReactSharedInternals.A; 748 return null === dispatcher ? null : dispatcher.getOwner(); 749 } 750 function UnknownOwner() { 751 return Error("react-stack-top-frame"); 752 } 753 function hasValidKey(config2) { 754 if (hasOwnProperty.call(config2, "key")) { 755 var getter = Object.getOwnPropertyDescriptor(config2, "key").get; 756 if (getter && getter.isReactWarning) return false; 757 } 758 return void 0 !== config2.key; 759 } 760 function defineKeyPropWarningGetter(props, displayName) { 761 function warnAboutAccessingKey() { 762 specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error( 763 "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", 764 displayName 765 )); 766 } 767 warnAboutAccessingKey.isReactWarning = true; 768 Object.defineProperty(props, "key", { 769 get: warnAboutAccessingKey, 770 configurable: true 771 }); 772 } 773 function elementRefGetterWithDeprecationWarning() { 774 var componentName = getComponentNameFromType(this.type); 775 didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error( 776 "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release." 777 )); 778 componentName = this.props.ref; 779 return void 0 !== componentName ? componentName : null; 780 } 781 function ReactElement(type, key, props, owner, debugStack, debugTask) { 782 var refProp = props.ref; 783 type = { 784 $$typeof: REACT_ELEMENT_TYPE, 785 type, 786 key, 787 props, 788 _owner: owner 789 }; 790 null !== (void 0 !== refProp ? refProp : null) ? Object.defineProperty(type, "ref", { 791 enumerable: false, 792 get: elementRefGetterWithDeprecationWarning 793 }) : Object.defineProperty(type, "ref", { enumerable: false, value: null }); 794 type._store = {}; 795 Object.defineProperty(type._store, "validated", { 796 configurable: false, 797 enumerable: false, 798 writable: true, 799 value: 0 800 }); 801 Object.defineProperty(type, "_debugInfo", { 802 configurable: false, 803 enumerable: false, 804 writable: true, 805 value: null 806 }); 807 Object.defineProperty(type, "_debugStack", { 808 configurable: false, 809 enumerable: false, 810 writable: true, 811 value: debugStack 812 }); 813 Object.defineProperty(type, "_debugTask", { 814 configurable: false, 815 enumerable: false, 816 writable: true, 817 value: debugTask 818 }); 819 Object.freeze && (Object.freeze(type.props), Object.freeze(type)); 820 return type; 821 } 822 function cloneAndReplaceKey(oldElement, newKey) { 823 newKey = ReactElement( 824 oldElement.type, 825 newKey, 826 oldElement.props, 827 oldElement._owner, 828 oldElement._debugStack, 829 oldElement._debugTask 830 ); 831 oldElement._store && (newKey._store.validated = oldElement._store.validated); 832 return newKey; 833 } 834 function validateChildKeys(node) { 835 isValidElement(node) ? node._store && (node._store.validated = 1) : "object" === typeof node && null !== node && node.$$typeof === REACT_LAZY_TYPE && ("fulfilled" === node._payload.status ? isValidElement(node._payload.value) && node._payload.value._store && (node._payload.value._store.validated = 1) : node._store && (node._store.validated = 1)); 836 } 837 function isValidElement(object) { 838 return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE; 839 } 840 function escape(key) { 841 var escaperLookup = { "=": "=0", ":": "=2" }; 842 return "$" + key.replace(/[=:]/g, function(match) { 843 return escaperLookup[match]; 844 }); 845 } 846 function getElementKey(element, index) { 847 return "object" === typeof element && null !== element && null != element.key ? (checkKeyStringCoercion(element.key), escape("" + element.key)) : index.toString(36); 848 } 849 function resolveThenable(thenable) { 850 switch (thenable.status) { 851 case "fulfilled": 852 return thenable.value; 853 case "rejected": 854 throw thenable.reason; 855 default: 856 switch ("string" === typeof thenable.status ? thenable.then(noop, noop) : (thenable.status = "pending", thenable.then( 857 function(fulfilledValue) { 858 "pending" === thenable.status && (thenable.status = "fulfilled", thenable.value = fulfilledValue); 859 }, 860 function(error2) { 861 "pending" === thenable.status && (thenable.status = "rejected", thenable.reason = error2); 862 } 863 )), thenable.status) { 864 case "fulfilled": 865 return thenable.value; 866 case "rejected": 867 throw thenable.reason; 868 } 869 } 870 throw thenable; 871 } 872 function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) { 873 var type = typeof children; 874 if ("undefined" === type || "boolean" === type) children = null; 875 var invokeCallback = false; 876 if (null === children) invokeCallback = true; 877 else 878 switch (type) { 879 case "bigint": 880 case "string": 881 case "number": 882 invokeCallback = true; 883 break; 884 case "object": 885 switch (children.$$typeof) { 886 case REACT_ELEMENT_TYPE: 887 case REACT_PORTAL_TYPE: 888 invokeCallback = true; 889 break; 890 case REACT_LAZY_TYPE: 891 return invokeCallback = children._init, mapIntoArray( 892 invokeCallback(children._payload), 893 array, 894 escapedPrefix, 895 nameSoFar, 896 callback 897 ); 898 } 899 } 900 if (invokeCallback) { 901 invokeCallback = children; 902 callback = callback(invokeCallback); 903 var childKey = "" === nameSoFar ? "." + getElementKey(invokeCallback, 0) : nameSoFar; 904 isArrayImpl(callback) ? (escapedPrefix = "", null != childKey && (escapedPrefix = childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), mapIntoArray(callback, array, escapedPrefix, "", function(c3) { 905 return c3; 906 })) : null != callback && (isValidElement(callback) && (null != callback.key && (invokeCallback && invokeCallback.key === callback.key || checkKeyStringCoercion(callback.key)), escapedPrefix = cloneAndReplaceKey( 907 callback, 908 escapedPrefix + (null == callback.key || invokeCallback && invokeCallback.key === callback.key ? "" : ("" + callback.key).replace( 909 userProvidedKeyEscapeRegex, 910 "$&/" 911 ) + "/") + childKey 912 ), "" !== nameSoFar && null != invokeCallback && isValidElement(invokeCallback) && null == invokeCallback.key && invokeCallback._store && !invokeCallback._store.validated && (escapedPrefix._store.validated = 2), callback = escapedPrefix), array.push(callback)); 913 return 1; 914 } 915 invokeCallback = 0; 916 childKey = "" === nameSoFar ? "." : nameSoFar + ":"; 917 if (isArrayImpl(children)) 918 for (var i3 = 0; i3 < children.length; i3++) 919 nameSoFar = children[i3], type = childKey + getElementKey(nameSoFar, i3), invokeCallback += mapIntoArray( 920 nameSoFar, 921 array, 922 escapedPrefix, 923 type, 924 callback 925 ); 926 else if (i3 = getIteratorFn(children), "function" === typeof i3) 927 for (i3 === children.entries && (didWarnAboutMaps || console.warn( 928 "Using Maps as children is not supported. Use an array of keyed ReactElements instead." 929 ), didWarnAboutMaps = true), children = i3.call(children), i3 = 0; !(nameSoFar = children.next()).done; ) 930 nameSoFar = nameSoFar.value, type = childKey + getElementKey(nameSoFar, i3++), invokeCallback += mapIntoArray( 931 nameSoFar, 932 array, 933 escapedPrefix, 934 type, 935 callback 936 ); 937 else if ("object" === type) { 938 if ("function" === typeof children.then) 939 return mapIntoArray( 940 resolveThenable(children), 941 array, 942 escapedPrefix, 943 nameSoFar, 944 callback 945 ); 946 array = String(children); 947 throw Error( 948 "Objects are not valid as a React child (found: " + ("[object Object]" === array ? "object with keys {" + Object.keys(children).join(", ") + "}" : array) + "). If you meant to render a collection of children, use an array instead." 949 ); 950 } 951 return invokeCallback; 952 } 953 function mapChildren(children, func, context) { 954 if (null == children) return children; 955 var result = [], count = 0; 956 mapIntoArray(children, result, "", "", function(child) { 957 return func.call(context, child, count++); 958 }); 959 return result; 960 } 961 function lazyInitializer(payload) { 962 if (-1 === payload._status) { 963 var ioInfo = payload._ioInfo; 964 null != ioInfo && (ioInfo.start = ioInfo.end = performance.now()); 965 ioInfo = payload._result; 966 var thenable = ioInfo(); 967 thenable.then( 968 function(moduleObject) { 969 if (0 === payload._status || -1 === payload._status) { 970 payload._status = 1; 971 payload._result = moduleObject; 972 var _ioInfo = payload._ioInfo; 973 null != _ioInfo && (_ioInfo.end = performance.now()); 974 void 0 === thenable.status && (thenable.status = "fulfilled", thenable.value = moduleObject); 975 } 976 }, 977 function(error2) { 978 if (0 === payload._status || -1 === payload._status) { 979 payload._status = 2; 980 payload._result = error2; 981 var _ioInfo2 = payload._ioInfo; 982 null != _ioInfo2 && (_ioInfo2.end = performance.now()); 983 void 0 === thenable.status && (thenable.status = "rejected", thenable.reason = error2); 984 } 985 } 986 ); 987 ioInfo = payload._ioInfo; 988 if (null != ioInfo) { 989 ioInfo.value = thenable; 990 var displayName = thenable.displayName; 991 "string" === typeof displayName && (ioInfo.name = displayName); 992 } 993 -1 === payload._status && (payload._status = 0, payload._result = thenable); 994 } 995 if (1 === payload._status) 996 return ioInfo = payload._result, void 0 === ioInfo && console.error( 997 "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", 998 ioInfo 999 ), "default" in ioInfo || console.error( 1000 "lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", 1001 ioInfo 1002 ), ioInfo.default; 1003 throw payload._result; 1004 } 1005 function resolveDispatcher() { 1006 var dispatcher = ReactSharedInternals.H; 1007 null === dispatcher && console.error( 1008 "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." 1009 ); 1010 return dispatcher; 1011 } 1012 function releaseAsyncTransition() { 1013 ReactSharedInternals.asyncTransitions--; 1014 } 1015 function enqueueTask(task) { 1016 if (null === enqueueTaskImpl) 1017 try { 1018 var requireString = ("require" + Math.random()).slice(0, 7); 1019 enqueueTaskImpl = (module && module[requireString]).call( 1020 module, 1021 "timers" 1022 ).setImmediate; 1023 } catch (_err) { 1024 enqueueTaskImpl = function(callback) { 1025 false === didWarnAboutMessageChannel && (didWarnAboutMessageChannel = true, "undefined" === typeof MessageChannel && console.error( 1026 "This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning." 1027 )); 1028 var channel = new MessageChannel(); 1029 channel.port1.onmessage = callback; 1030 channel.port2.postMessage(void 0); 1031 }; 1032 } 1033 return enqueueTaskImpl(task); 1034 } 1035 function aggregateErrors(errors) { 1036 return 1 < errors.length && "function" === typeof AggregateError ? new AggregateError(errors) : errors[0]; 1037 } 1038 function popActScope(prevActQueue, prevActScopeDepth) { 1039 prevActScopeDepth !== actScopeDepth - 1 && console.error( 1040 "You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. " 1041 ); 1042 actScopeDepth = prevActScopeDepth; 1043 } 1044 function recursivelyFlushAsyncActWork(returnValue, resolve, reject) { 1045 var queue = ReactSharedInternals.actQueue; 1046 if (null !== queue) 1047 if (0 !== queue.length) 1048 try { 1049 flushActQueue(queue); 1050 enqueueTask(function() { 1051 return recursivelyFlushAsyncActWork(returnValue, resolve, reject); 1052 }); 1053 return; 1054 } catch (error2) { 1055 ReactSharedInternals.thrownErrors.push(error2); 1056 } 1057 else ReactSharedInternals.actQueue = null; 1058 0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve(returnValue); 1059 } 1060 function flushActQueue(queue) { 1061 if (!isFlushing) { 1062 isFlushing = true; 1063 var i3 = 0; 1064 try { 1065 for (; i3 < queue.length; i3++) { 1066 var callback = queue[i3]; 1067 do { 1068 ReactSharedInternals.didUsePromise = false; 1069 var continuation = callback(false); 1070 if (null !== continuation) { 1071 if (ReactSharedInternals.didUsePromise) { 1072 queue[i3] = callback; 1073 queue.splice(0, i3); 1074 return; 1075 } 1076 callback = continuation; 1077 } else break; 1078 } while (1); 1079 } 1080 queue.length = 0; 1081 } catch (error2) { 1082 queue.splice(0, i3 + 1), ReactSharedInternals.thrownErrors.push(error2); 1083 } finally { 1084 isFlushing = false; 1085 } 1086 } 1087 } 1088 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 1089 var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo"), REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"), REACT_ACTIVITY_TYPE = /* @__PURE__ */ Symbol.for("react.activity"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, didWarnStateUpdateForUnmountedComponent = {}, ReactNoopUpdateQueue = { 1090 isMounted: function() { 1091 return false; 1092 }, 1093 enqueueForceUpdate: function(publicInstance) { 1094 warnNoop(publicInstance, "forceUpdate"); 1095 }, 1096 enqueueReplaceState: function(publicInstance) { 1097 warnNoop(publicInstance, "replaceState"); 1098 }, 1099 enqueueSetState: function(publicInstance) { 1100 warnNoop(publicInstance, "setState"); 1101 } 1102 }, assign = Object.assign, emptyObject = {}; 1103 Object.freeze(emptyObject); 1104 Component.prototype.isReactComponent = {}; 1105 Component.prototype.setState = function(partialState, callback) { 1106 if ("object" !== typeof partialState && "function" !== typeof partialState && null != partialState) 1107 throw Error( 1108 "takes an object of state variables to update or a function which returns an object of state variables." 1109 ); 1110 this.updater.enqueueSetState(this, partialState, callback, "setState"); 1111 }; 1112 Component.prototype.forceUpdate = function(callback) { 1113 this.updater.enqueueForceUpdate(this, callback, "forceUpdate"); 1114 }; 1115 var deprecatedAPIs = { 1116 isMounted: [ 1117 "isMounted", 1118 "Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks." 1119 ], 1120 replaceState: [ 1121 "replaceState", 1122 "Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)." 1123 ] 1124 }; 1125 for (fnName in deprecatedAPIs) 1126 deprecatedAPIs.hasOwnProperty(fnName) && defineDeprecationWarning(fnName, deprecatedAPIs[fnName]); 1127 ComponentDummy.prototype = Component.prototype; 1128 deprecatedAPIs = PureComponent.prototype = new ComponentDummy(); 1129 deprecatedAPIs.constructor = PureComponent; 1130 assign(deprecatedAPIs, Component.prototype); 1131 deprecatedAPIs.isPureReactComponent = true; 1132 var isArrayImpl = Array.isArray, REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for("react.client.reference"), ReactSharedInternals = { 1133 H: null, 1134 A: null, 1135 T: null, 1136 S: null, 1137 actQueue: null, 1138 asyncTransitions: 0, 1139 isBatchingLegacy: false, 1140 didScheduleLegacyUpdate: false, 1141 didUsePromise: false, 1142 thrownErrors: [], 1143 getCurrentStack: null, 1144 recentlyCreatedOwnerStacks: 0 1145 }, hasOwnProperty = Object.prototype.hasOwnProperty, createTask = console.createTask ? console.createTask : function() { 1146 return null; 1147 }; 1148 deprecatedAPIs = { 1149 react_stack_bottom_frame: function(callStackForError) { 1150 return callStackForError(); 1151 } 1152 }; 1153 var specialPropKeyWarningShown, didWarnAboutOldJSXRuntime; 1154 var didWarnAboutElementRef = {}; 1155 var unknownOwnerDebugStack = deprecatedAPIs.react_stack_bottom_frame.bind( 1156 deprecatedAPIs, 1157 UnknownOwner 1158 )(); 1159 var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner)); 1160 var didWarnAboutMaps = false, userProvidedKeyEscapeRegex = /\/+/g, reportGlobalError = "function" === typeof reportError ? reportError : function(error2) { 1161 if ("object" === typeof window && "function" === typeof window.ErrorEvent) { 1162 var event = new window.ErrorEvent("error", { 1163 bubbles: true, 1164 cancelable: true, 1165 message: "object" === typeof error2 && null !== error2 && "string" === typeof error2.message ? String(error2.message) : String(error2), 1166 error: error2 1167 }); 1168 if (!window.dispatchEvent(event)) return; 1169 } else if ("object" === typeof process && "function" === typeof process.emit) { 1170 process.emit("uncaughtException", error2); 1171 return; 1172 } 1173 console.error(error2); 1174 }, didWarnAboutMessageChannel = false, enqueueTaskImpl = null, actScopeDepth = 0, didWarnNoAwaitAct = false, isFlushing = false, queueSeveralMicrotasks = "function" === typeof queueMicrotask ? function(callback) { 1175 queueMicrotask(function() { 1176 return queueMicrotask(callback); 1177 }); 1178 } : enqueueTask; 1179 deprecatedAPIs = Object.freeze({ 1180 __proto__: null, 1181 c: function(size) { 1182 return resolveDispatcher().useMemoCache(size); 1183 } 1184 }); 1185 var fnName = { 1186 map: mapChildren, 1187 forEach: function(children, forEachFunc, forEachContext) { 1188 mapChildren( 1189 children, 1190 function() { 1191 forEachFunc.apply(this, arguments); 1192 }, 1193 forEachContext 1194 ); 1195 }, 1196 count: function(children) { 1197 var n3 = 0; 1198 mapChildren(children, function() { 1199 n3++; 1200 }); 1201 return n3; 1202 }, 1203 toArray: function(children) { 1204 return mapChildren(children, function(child) { 1205 return child; 1206 }) || []; 1207 }, 1208 only: function(children) { 1209 if (!isValidElement(children)) 1210 throw Error( 1211 "React.Children.only expected to receive a single React element child." 1212 ); 1213 return children; 1214 } 1215 }; 1216 exports.Activity = REACT_ACTIVITY_TYPE; 1217 exports.Children = fnName; 1218 exports.Component = Component; 1219 exports.Fragment = REACT_FRAGMENT_TYPE; 1220 exports.Profiler = REACT_PROFILER_TYPE; 1221 exports.PureComponent = PureComponent; 1222 exports.StrictMode = REACT_STRICT_MODE_TYPE; 1223 exports.Suspense = REACT_SUSPENSE_TYPE; 1224 exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals; 1225 exports.__COMPILER_RUNTIME = deprecatedAPIs; 1226 exports.act = function(callback) { 1227 var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth; 1228 actScopeDepth++; 1229 var queue = ReactSharedInternals.actQueue = null !== prevActQueue ? prevActQueue : [], didAwaitActCall = false; 1230 try { 1231 var result = callback(); 1232 } catch (error2) { 1233 ReactSharedInternals.thrownErrors.push(error2); 1234 } 1235 if (0 < ReactSharedInternals.thrownErrors.length) 1236 throw popActScope(prevActQueue, prevActScopeDepth), callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback; 1237 if (null !== result && "object" === typeof result && "function" === typeof result.then) { 1238 var thenable = result; 1239 queueSeveralMicrotasks(function() { 1240 didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error( 1241 "You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);" 1242 )); 1243 }); 1244 return { 1245 then: function(resolve, reject) { 1246 didAwaitActCall = true; 1247 thenable.then( 1248 function(returnValue) { 1249 popActScope(prevActQueue, prevActScopeDepth); 1250 if (0 === prevActScopeDepth) { 1251 try { 1252 flushActQueue(queue), enqueueTask(function() { 1253 return recursivelyFlushAsyncActWork( 1254 returnValue, 1255 resolve, 1256 reject 1257 ); 1258 }); 1259 } catch (error$0) { 1260 ReactSharedInternals.thrownErrors.push(error$0); 1261 } 1262 if (0 < ReactSharedInternals.thrownErrors.length) { 1263 var _thrownError = aggregateErrors( 1264 ReactSharedInternals.thrownErrors 1265 ); 1266 ReactSharedInternals.thrownErrors.length = 0; 1267 reject(_thrownError); 1268 } 1269 } else resolve(returnValue); 1270 }, 1271 function(error2) { 1272 popActScope(prevActQueue, prevActScopeDepth); 1273 0 < ReactSharedInternals.thrownErrors.length ? (error2 = aggregateErrors( 1274 ReactSharedInternals.thrownErrors 1275 ), ReactSharedInternals.thrownErrors.length = 0, reject(error2)) : reject(error2); 1276 } 1277 ); 1278 } 1279 }; 1280 } 1281 var returnValue$jscomp$0 = result; 1282 popActScope(prevActQueue, prevActScopeDepth); 1283 0 === prevActScopeDepth && (flushActQueue(queue), 0 !== queue.length && queueSeveralMicrotasks(function() { 1284 didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error( 1285 "A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)" 1286 )); 1287 }), ReactSharedInternals.actQueue = null); 1288 if (0 < ReactSharedInternals.thrownErrors.length) 1289 throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback; 1290 return { 1291 then: function(resolve, reject) { 1292 didAwaitActCall = true; 1293 0 === prevActScopeDepth ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() { 1294 return recursivelyFlushAsyncActWork( 1295 returnValue$jscomp$0, 1296 resolve, 1297 reject 1298 ); 1299 })) : resolve(returnValue$jscomp$0); 1300 } 1301 }; 1302 }; 1303 exports.cache = function(fn3) { 1304 return function() { 1305 return fn3.apply(null, arguments); 1306 }; 1307 }; 1308 exports.cacheSignal = function() { 1309 return null; 1310 }; 1311 exports.captureOwnerStack = function() { 1312 var getCurrentStack = ReactSharedInternals.getCurrentStack; 1313 return null === getCurrentStack ? null : getCurrentStack(); 1314 }; 1315 exports.cloneElement = function(element, config2, children) { 1316 if (null === element || void 0 === element) 1317 throw Error( 1318 "The argument must be a React element, but you passed " + element + "." 1319 ); 1320 var props = assign({}, element.props), key = element.key, owner = element._owner; 1321 if (null != config2) { 1322 var JSCompiler_inline_result; 1323 a: { 1324 if (hasOwnProperty.call(config2, "ref") && (JSCompiler_inline_result = Object.getOwnPropertyDescriptor( 1325 config2, 1326 "ref" 1327 ).get) && JSCompiler_inline_result.isReactWarning) { 1328 JSCompiler_inline_result = false; 1329 break a; 1330 } 1331 JSCompiler_inline_result = void 0 !== config2.ref; 1332 } 1333 JSCompiler_inline_result && (owner = getOwner()); 1334 hasValidKey(config2) && (checkKeyStringCoercion(config2.key), key = "" + config2.key); 1335 for (propName in config2) 1336 !hasOwnProperty.call(config2, propName) || "key" === propName || "__self" === propName || "__source" === propName || "ref" === propName && void 0 === config2.ref || (props[propName] = config2[propName]); 1337 } 1338 var propName = arguments.length - 2; 1339 if (1 === propName) props.children = children; 1340 else if (1 < propName) { 1341 JSCompiler_inline_result = Array(propName); 1342 for (var i3 = 0; i3 < propName; i3++) 1343 JSCompiler_inline_result[i3] = arguments[i3 + 2]; 1344 props.children = JSCompiler_inline_result; 1345 } 1346 props = ReactElement( 1347 element.type, 1348 key, 1349 props, 1350 owner, 1351 element._debugStack, 1352 element._debugTask 1353 ); 1354 for (key = 2; key < arguments.length; key++) 1355 validateChildKeys(arguments[key]); 1356 return props; 1357 }; 1358 exports.createContext = function(defaultValue) { 1359 defaultValue = { 1360 $$typeof: REACT_CONTEXT_TYPE, 1361 _currentValue: defaultValue, 1362 _currentValue2: defaultValue, 1363 _threadCount: 0, 1364 Provider: null, 1365 Consumer: null 1366 }; 1367 defaultValue.Provider = defaultValue; 1368 defaultValue.Consumer = { 1369 $$typeof: REACT_CONSUMER_TYPE, 1370 _context: defaultValue 1371 }; 1372 defaultValue._currentRenderer = null; 1373 defaultValue._currentRenderer2 = null; 1374 return defaultValue; 1375 }; 1376 exports.createElement = function(type, config2, children) { 1377 for (var i3 = 2; i3 < arguments.length; i3++) 1378 validateChildKeys(arguments[i3]); 1379 i3 = {}; 1380 var key = null; 1381 if (null != config2) 1382 for (propName in didWarnAboutOldJSXRuntime || !("__self" in config2) || "key" in config2 || (didWarnAboutOldJSXRuntime = true, console.warn( 1383 "Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform" 1384 )), hasValidKey(config2) && (checkKeyStringCoercion(config2.key), key = "" + config2.key), config2) 1385 hasOwnProperty.call(config2, propName) && "key" !== propName && "__self" !== propName && "__source" !== propName && (i3[propName] = config2[propName]); 1386 var childrenLength = arguments.length - 2; 1387 if (1 === childrenLength) i3.children = children; 1388 else if (1 < childrenLength) { 1389 for (var childArray = Array(childrenLength), _i3 = 0; _i3 < childrenLength; _i3++) 1390 childArray[_i3] = arguments[_i3 + 2]; 1391 Object.freeze && Object.freeze(childArray); 1392 i3.children = childArray; 1393 } 1394 if (type && type.defaultProps) 1395 for (propName in childrenLength = type.defaultProps, childrenLength) 1396 void 0 === i3[propName] && (i3[propName] = childrenLength[propName]); 1397 key && defineKeyPropWarningGetter( 1398 i3, 1399 "function" === typeof type ? type.displayName || type.name || "Unknown" : type 1400 ); 1401 var propName = 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++; 1402 return ReactElement( 1403 type, 1404 key, 1405 i3, 1406 getOwner(), 1407 propName ? Error("react-stack-top-frame") : unknownOwnerDebugStack, 1408 propName ? createTask(getTaskName(type)) : unknownOwnerDebugTask 1409 ); 1410 }; 1411 exports.createRef = function() { 1412 var refObject = { current: null }; 1413 Object.seal(refObject); 1414 return refObject; 1415 }; 1416 exports.forwardRef = function(render) { 1417 null != render && render.$$typeof === REACT_MEMO_TYPE ? console.error( 1418 "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))." 1419 ) : "function" !== typeof render ? console.error( 1420 "forwardRef requires a render function but was given %s.", 1421 null === render ? "null" : typeof render 1422 ) : 0 !== render.length && 2 !== render.length && console.error( 1423 "forwardRef render functions accept exactly two parameters: props and ref. %s", 1424 1 === render.length ? "Did you forget to use the ref parameter?" : "Any additional parameter will be undefined." 1425 ); 1426 null != render && null != render.defaultProps && console.error( 1427 "forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?" 1428 ); 1429 var elementType2 = { $$typeof: REACT_FORWARD_REF_TYPE, render }, ownName; 1430 Object.defineProperty(elementType2, "displayName", { 1431 enumerable: false, 1432 configurable: true, 1433 get: function() { 1434 return ownName; 1435 }, 1436 set: function(name) { 1437 ownName = name; 1438 render.name || render.displayName || (Object.defineProperty(render, "name", { value: name }), render.displayName = name); 1439 } 1440 }); 1441 return elementType2; 1442 }; 1443 exports.isValidElement = isValidElement; 1444 exports.lazy = function(ctor) { 1445 ctor = { _status: -1, _result: ctor }; 1446 var lazyType = { 1447 $$typeof: REACT_LAZY_TYPE, 1448 _payload: ctor, 1449 _init: lazyInitializer 1450 }, ioInfo = { 1451 name: "lazy", 1452 start: -1, 1453 end: -1, 1454 value: null, 1455 owner: null, 1456 debugStack: Error("react-stack-top-frame"), 1457 debugTask: console.createTask ? console.createTask("lazy()") : null 1458 }; 1459 ctor._ioInfo = ioInfo; 1460 lazyType._debugInfo = [{ awaited: ioInfo }]; 1461 return lazyType; 1462 }; 1463 exports.memo = function(type, compare) { 1464 null == type && console.error( 1465 "memo: The first argument must be a component. Instead received: %s", 1466 null === type ? "null" : typeof type 1467 ); 1468 compare = { 1469 $$typeof: REACT_MEMO_TYPE, 1470 type, 1471 compare: void 0 === compare ? null : compare 1472 }; 1473 var ownName; 1474 Object.defineProperty(compare, "displayName", { 1475 enumerable: false, 1476 configurable: true, 1477 get: function() { 1478 return ownName; 1479 }, 1480 set: function(name) { 1481 ownName = name; 1482 type.name || type.displayName || (Object.defineProperty(type, "name", { value: name }), type.displayName = name); 1483 } 1484 }); 1485 return compare; 1486 }; 1487 exports.startTransition = function(scope) { 1488 var prevTransition = ReactSharedInternals.T, currentTransition = {}; 1489 currentTransition._updatedFibers = /* @__PURE__ */ new Set(); 1490 ReactSharedInternals.T = currentTransition; 1491 try { 1492 var returnValue = scope(), onStartTransitionFinish = ReactSharedInternals.S; 1493 null !== onStartTransitionFinish && onStartTransitionFinish(currentTransition, returnValue); 1494 "object" === typeof returnValue && null !== returnValue && "function" === typeof returnValue.then && (ReactSharedInternals.asyncTransitions++, returnValue.then(releaseAsyncTransition, releaseAsyncTransition), returnValue.then(noop, reportGlobalError)); 1495 } catch (error2) { 1496 reportGlobalError(error2); 1497 } finally { 1498 null === prevTransition && currentTransition._updatedFibers && (scope = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < scope && console.warn( 1499 "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." 1500 )), null !== prevTransition && null !== currentTransition.types && (null !== prevTransition.types && prevTransition.types !== currentTransition.types && console.error( 1501 "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." 1502 ), prevTransition.types = currentTransition.types), ReactSharedInternals.T = prevTransition; 1503 } 1504 }; 1505 exports.unstable_useCacheRefresh = function() { 1506 return resolveDispatcher().useCacheRefresh(); 1507 }; 1508 exports.use = function(usable) { 1509 return resolveDispatcher().use(usable); 1510 }; 1511 exports.useActionState = function(action, initialState, permalink) { 1512 return resolveDispatcher().useActionState( 1513 action, 1514 initialState, 1515 permalink 1516 ); 1517 }; 1518 exports.useCallback = function(callback, deps) { 1519 return resolveDispatcher().useCallback(callback, deps); 1520 }; 1521 exports.useContext = function(Context2) { 1522 var dispatcher = resolveDispatcher(); 1523 Context2.$$typeof === REACT_CONSUMER_TYPE && console.error( 1524 "Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?" 1525 ); 1526 return dispatcher.useContext(Context2); 1527 }; 1528 exports.useDebugValue = function(value, formatterFn) { 1529 return resolveDispatcher().useDebugValue(value, formatterFn); 1530 }; 1531 exports.useDeferredValue = function(value, initialValue) { 1532 return resolveDispatcher().useDeferredValue(value, initialValue); 1533 }; 1534 exports.useEffect = function(create, deps) { 1535 null == create && console.warn( 1536 "React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?" 1537 ); 1538 return resolveDispatcher().useEffect(create, deps); 1539 }; 1540 exports.useEffectEvent = function(callback) { 1541 return resolveDispatcher().useEffectEvent(callback); 1542 }; 1543 exports.useId = function() { 1544 return resolveDispatcher().useId(); 1545 }; 1546 exports.useImperativeHandle = function(ref, create, deps) { 1547 return resolveDispatcher().useImperativeHandle(ref, create, deps); 1548 }; 1549 exports.useInsertionEffect = function(create, deps) { 1550 null == create && console.warn( 1551 "React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?" 1552 ); 1553 return resolveDispatcher().useInsertionEffect(create, deps); 1554 }; 1555 exports.useLayoutEffect = function(create, deps) { 1556 null == create && console.warn( 1557 "React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?" 1558 ); 1559 return resolveDispatcher().useLayoutEffect(create, deps); 1560 }; 1561 exports.useMemo = function(create, deps) { 1562 return resolveDispatcher().useMemo(create, deps); 1563 }; 1564 exports.useOptimistic = function(passthrough, reducer) { 1565 return resolveDispatcher().useOptimistic(passthrough, reducer); 1566 }; 1567 exports.useReducer = function(reducer, initialArg, init) { 1568 return resolveDispatcher().useReducer(reducer, initialArg, init); 1569 }; 1570 exports.useRef = function(initialValue) { 1571 return resolveDispatcher().useRef(initialValue); 1572 }; 1573 exports.useState = function(initialState) { 1574 return resolveDispatcher().useState(initialState); 1575 }; 1576 exports.useSyncExternalStore = function(subscribe, getSnapshot, getServerSnapshot) { 1577 return resolveDispatcher().useSyncExternalStore( 1578 subscribe, 1579 getSnapshot, 1580 getServerSnapshot 1581 ); 1582 }; 1583 exports.useTransition = function() { 1584 return resolveDispatcher().useTransition(); 1585 }; 1586 exports.version = "19.2.4"; 1587 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 1588 })(); 1589 } 1590}); 1591
vendor: 259 bytes, lines 1592-1603
1592// node_modules/react/index.js 1593var require_react = __commonJS({ 1594 "node_modules/react/index.js"(exports, module) { 1595 "use strict"; 1596 if (false) { 1597 module.exports = null; 1598 } else { 1599 module.exports = require_react_development(); 1600 } 1601 } 1602}); 1603
vendor: 11,450 bytes, lines 1604-1862
1604// node_modules/scheduler/cjs/scheduler.development.js 1605var require_scheduler_development = __commonJS({ 1606 "node_modules/scheduler/cjs/scheduler.development.js"(exports) { 1607 "use strict"; 1608 (function() { 1609 function performWorkUntilDeadline() { 1610 needsPaint = false; 1611 if (isMessageLoopRunning) { 1612 var currentTime = exports.unstable_now(); 1613 startTime = currentTime; 1614 var hasMoreWork = true; 1615 try { 1616 a: { 1617 isHostCallbackScheduled = false; 1618 isHostTimeoutScheduled && (isHostTimeoutScheduled = false, localClearTimeout(taskTimeoutID), taskTimeoutID = -1); 1619 isPerformingWork = true; 1620 var previousPriorityLevel = currentPriorityLevel; 1621 try { 1622 b: { 1623 advanceTimers(currentTime); 1624 for (currentTask = peek(taskQueue); null !== currentTask && !(currentTask.expirationTime > currentTime && shouldYieldToHost()); ) { 1625 var callback = currentTask.callback; 1626 if ("function" === typeof callback) { 1627 currentTask.callback = null; 1628 currentPriorityLevel = currentTask.priorityLevel; 1629 var continuationCallback = callback( 1630 currentTask.expirationTime <= currentTime 1631 ); 1632 currentTime = exports.unstable_now(); 1633 if ("function" === typeof continuationCallback) { 1634 currentTask.callback = continuationCallback; 1635 advanceTimers(currentTime); 1636 hasMoreWork = true; 1637 break b; 1638 } 1639 currentTask === peek(taskQueue) && pop(taskQueue); 1640 advanceTimers(currentTime); 1641 } else pop(taskQueue); 1642 currentTask = peek(taskQueue); 1643 } 1644 if (null !== currentTask) hasMoreWork = true; 1645 else { 1646 var firstTimer = peek(timerQueue); 1647 null !== firstTimer && requestHostTimeout( 1648 handleTimeout, 1649 firstTimer.startTime - currentTime 1650 ); 1651 hasMoreWork = false; 1652 } 1653 } 1654 break a; 1655 } finally { 1656 currentTask = null, currentPriorityLevel = previousPriorityLevel, isPerformingWork = false; 1657 } 1658 hasMoreWork = void 0; 1659 } 1660 } finally { 1661 hasMoreWork ? schedulePerformWorkUntilDeadline() : isMessageLoopRunning = false; 1662 } 1663 } 1664 } 1665 function push(heap, node) { 1666 var index = heap.length; 1667 heap.push(node); 1668 a: for (; 0 < index; ) { 1669 var parentIndex = index - 1 >>> 1, parent = heap[parentIndex]; 1670 if (0 < compare(parent, node)) 1671 heap[parentIndex] = node, heap[index] = parent, index = parentIndex; 1672 else break a; 1673 } 1674 } 1675 function peek(heap) { 1676 return 0 === heap.length ? null : heap[0]; 1677 } 1678 function pop(heap) { 1679 if (0 === heap.length) return null; 1680 var first = heap[0], last = heap.pop(); 1681 if (last !== first) { 1682 heap[0] = last; 1683 a: for (var index = 0, length = heap.length, halfLength = length >>> 1; index < halfLength; ) { 1684 var leftIndex = 2 * (index + 1) - 1, left = heap[leftIndex], rightIndex = leftIndex + 1, right = heap[rightIndex]; 1685 if (0 > compare(left, last)) 1686 rightIndex < length && 0 > compare(right, left) ? (heap[index] = right, heap[rightIndex] = last, index = rightIndex) : (heap[index] = left, heap[leftIndex] = last, index = leftIndex); 1687 else if (rightIndex < length && 0 > compare(right, last)) 1688 heap[index] = right, heap[rightIndex] = last, index = rightIndex; 1689 else break a; 1690 } 1691 } 1692 return first; 1693 } 1694 function compare(a3, b3) { 1695 var diff = a3.sortIndex - b3.sortIndex; 1696 return 0 !== diff ? diff : a3.id - b3.id; 1697 } 1698 function advanceTimers(currentTime) { 1699 for (var timer = peek(timerQueue); null !== timer; ) { 1700 if (null === timer.callback) pop(timerQueue); 1701 else if (timer.startTime <= currentTime) 1702 pop(timerQueue), timer.sortIndex = timer.expirationTime, push(taskQueue, timer); 1703 else break; 1704 timer = peek(timerQueue); 1705 } 1706 } 1707 function handleTimeout(currentTime) { 1708 isHostTimeoutScheduled = false; 1709 advanceTimers(currentTime); 1710 if (!isHostCallbackScheduled) 1711 if (null !== peek(taskQueue)) 1712 isHostCallbackScheduled = true, isMessageLoopRunning || (isMessageLoopRunning = true, schedulePerformWorkUntilDeadline()); 1713 else { 1714 var firstTimer = peek(timerQueue); 1715 null !== firstTimer && requestHostTimeout( 1716 handleTimeout, 1717 firstTimer.startTime - currentTime 1718 ); 1719 } 1720 } 1721 function shouldYieldToHost() { 1722 return needsPaint ? true : exports.unstable_now() - startTime < frameInterval ? false : true; 1723 } 1724 function requestHostTimeout(callback, ms3) { 1725 taskTimeoutID = localSetTimeout(function() { 1726 callback(exports.unstable_now()); 1727 }, ms3); 1728 } 1729 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 1730 exports.unstable_now = void 0; 1731 if ("object" === typeof performance && "function" === typeof performance.now) { 1732 var localPerformance = performance; 1733 exports.unstable_now = function() { 1734 return localPerformance.now(); 1735 }; 1736 } else { 1737 var localDate = Date, initialTime = localDate.now(); 1738 exports.unstable_now = function() { 1739 return localDate.now() - initialTime; 1740 }; 1741 } 1742 var taskQueue = [], timerQueue = [], taskIdCounter = 1, currentTask = null, currentPriorityLevel = 3, isPerformingWork = false, isHostCallbackScheduled = false, isHostTimeoutScheduled = false, needsPaint = false, localSetTimeout = "function" === typeof setTimeout ? setTimeout : null, localClearTimeout = "function" === typeof clearTimeout ? clearTimeout : null, localSetImmediate = "undefined" !== typeof setImmediate ? setImmediate : null, isMessageLoopRunning = false, taskTimeoutID = -1, frameInterval = 5, startTime = -1; 1743 if ("function" === typeof localSetImmediate) 1744 var schedulePerformWorkUntilDeadline = function() { 1745 localSetImmediate(performWorkUntilDeadline); 1746 }; 1747 else if ("undefined" !== typeof MessageChannel) { 1748 var channel = new MessageChannel(), port = channel.port2; 1749 channel.port1.onmessage = performWorkUntilDeadline; 1750 schedulePerformWorkUntilDeadline = function() { 1751 port.postMessage(null); 1752 }; 1753 } else 1754 schedulePerformWorkUntilDeadline = function() { 1755 localSetTimeout(performWorkUntilDeadline, 0); 1756 }; 1757 exports.unstable_IdlePriority = 5; 1758 exports.unstable_ImmediatePriority = 1; 1759 exports.unstable_LowPriority = 4; 1760 exports.unstable_NormalPriority = 3; 1761 exports.unstable_Profiling = null; 1762 exports.unstable_UserBlockingPriority = 2; 1763 exports.unstable_cancelCallback = function(task) { 1764 task.callback = null; 1765 }; 1766 exports.unstable_forceFrameRate = function(fps) { 1767 0 > fps || 125 < fps ? console.error( 1768 "forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported" 1769 ) : frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5; 1770 }; 1771 exports.unstable_getCurrentPriorityLevel = function() { 1772 return currentPriorityLevel; 1773 }; 1774 exports.unstable_next = function(eventHandler) { 1775 switch (currentPriorityLevel) { 1776 case 1: 1777 case 2: 1778 case 3: 1779 var priorityLevel = 3; 1780 break; 1781 default: 1782 priorityLevel = currentPriorityLevel; 1783 } 1784 var previousPriorityLevel = currentPriorityLevel; 1785 currentPriorityLevel = priorityLevel; 1786 try { 1787 return eventHandler(); 1788 } finally { 1789 currentPriorityLevel = previousPriorityLevel; 1790 } 1791 }; 1792 exports.unstable_requestPaint = function() { 1793 needsPaint = true; 1794 }; 1795 exports.unstable_runWithPriority = function(priorityLevel, eventHandler) { 1796 switch (priorityLevel) { 1797 case 1: 1798 case 2: 1799 case 3: 1800 case 4: 1801 case 5: 1802 break; 1803 default: 1804 priorityLevel = 3; 1805 } 1806 var previousPriorityLevel = currentPriorityLevel; 1807 currentPriorityLevel = priorityLevel; 1808 try { 1809 return eventHandler(); 1810 } finally { 1811 currentPriorityLevel = previousPriorityLevel; 1812 } 1813 }; 1814 exports.unstable_scheduleCallback = function(priorityLevel, callback, options) { 1815 var currentTime = exports.unstable_now(); 1816 "object" === typeof options && null !== options ? (options = options.delay, options = "number" === typeof options && 0 < options ? currentTime + options : currentTime) : options = currentTime; 1817 switch (priorityLevel) { 1818 case 1: 1819 var timeout = -1; 1820 break; 1821 case 2: 1822 timeout = 250; 1823 break; 1824 case 5: 1825 timeout = 1073741823; 1826 break; 1827 case 4: 1828 timeout = 1e4; 1829 break; 1830 default: 1831 timeout = 5e3; 1832 } 1833 timeout = options + timeout; 1834 priorityLevel = { 1835 id: taskIdCounter++, 1836 callback, 1837 priorityLevel, 1838 startTime: options, 1839 expirationTime: timeout, 1840 sortIndex: -1 1841 }; 1842 options > currentTime ? (priorityLevel.sortIndex = options, push(timerQueue, priorityLevel), null === peek(taskQueue) && priorityLevel === peek(timerQueue) && (isHostTimeoutScheduled ? (localClearTimeout(taskTimeoutID), taskTimeoutID = -1) : isHostTimeoutScheduled = true, requestHostTimeout(handleTimeout, options - currentTime))) : (priorityLevel.sortIndex = timeout, push(taskQueue, priorityLevel), isHostCallbackScheduled || isPerformingWork || (isHostCallbackScheduled = true, isMessageLoopRunning || (isMessageLoopRunning = true, schedulePerformWorkUntilDeadline()))); 1843 return priorityLevel; 1844 }; 1845 exports.unstable_shouldYield = shouldYieldToHost; 1846 exports.unstable_wrapCallback = function(callback) { 1847 var parentPriorityLevel = currentPriorityLevel; 1848 return function() { 1849 var previousPriorityLevel = currentPriorityLevel; 1850 currentPriorityLevel = parentPriorityLevel; 1851 try { 1852 return callback.apply(this, arguments); 1853 } finally { 1854 currentPriorityLevel = previousPriorityLevel; 1855 } 1856 }; 1857 }; 1858 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 1859 })(); 1860 } 1861}); 1862
vendor: 275 bytes, lines 1863-1874
1863// node_modules/scheduler/index.js 1864var require_scheduler = __commonJS({ 1865 "node_modules/scheduler/index.js"(exports, module) { 1866 "use strict"; 1867 if (false) { 1868 module.exports = null; 1869 } else { 1870 module.exports = require_scheduler_development(); 1871 } 1872 } 1873}); 1874
vendor: 15,706 bytes, lines 1875-2118
1875// node_modules/react-dom/cjs/react-dom.development.js 1876var require_react_dom_development = __commonJS({ 1877 "node_modules/react-dom/cjs/react-dom.development.js"(exports) { 1878 "use strict"; 1879 (function() { 1880 function noop() { 1881 } 1882 function testStringCoercion(value) { 1883 return "" + value; 1884 } 1885 function createPortal$1(children, containerInfo, implementation) { 1886 var key = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null; 1887 try { 1888 testStringCoercion(key); 1889 var JSCompiler_inline_result = false; 1890 } catch (e3) { 1891 JSCompiler_inline_result = true; 1892 } 1893 JSCompiler_inline_result && (console.error( 1894 "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", 1895 "function" === typeof Symbol && Symbol.toStringTag && key[Symbol.toStringTag] || key.constructor.name || "Object" 1896 ), testStringCoercion(key)); 1897 return { 1898 $$typeof: REACT_PORTAL_TYPE, 1899 key: null == key ? null : "" + key, 1900 children, 1901 containerInfo, 1902 implementation 1903 }; 1904 } 1905 function getCrossOriginStringAs(as3, input) { 1906 if ("font" === as3) return ""; 1907 if ("string" === typeof input) 1908 return "use-credentials" === input ? input : ""; 1909 } 1910 function getValueDescriptorExpectingObjectForWarning(thing) { 1911 return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : 'something with type "' + typeof thing + '"'; 1912 } 1913 function getValueDescriptorExpectingEnumForWarning(thing) { 1914 return null === thing ? "`null`" : void 0 === thing ? "`undefined`" : "" === thing ? "an empty string" : "string" === typeof thing ? JSON.stringify(thing) : "number" === typeof thing ? "`" + thing + "`" : 'something with type "' + typeof thing + '"'; 1915 } 1916 function resolveDispatcher() { 1917 var dispatcher = ReactSharedInternals.H; 1918 null === dispatcher && console.error( 1919 "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." 1920 ); 1921 return dispatcher; 1922 } 1923 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 1924 var React19 = require_react(), Internals = { 1925 d: { 1926 f: noop, 1927 r: function() { 1928 throw Error( 1929 "Invalid form element. requestFormReset must be passed a form that was rendered by React." 1930 ); 1931 }, 1932 D: noop, 1933 C: noop, 1934 L: noop, 1935 m: noop, 1936 X: noop, 1937 S: noop, 1938 M: noop 1939 }, 1940 p: 0, 1941 findDOMNode: null 1942 }, REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), ReactSharedInternals = React19.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; 1943 "function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error( 1944 "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills" 1945 ); 1946 exports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = Internals; 1947 exports.createPortal = function(children, container) { 1948 var key = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null; 1949 if (!container || 1 !== container.nodeType && 9 !== container.nodeType && 11 !== container.nodeType) 1950 throw Error("Target container is not a DOM element."); 1951 return createPortal$1(children, container, null, key); 1952 }; 1953 exports.flushSync = function(fn3) { 1954 var previousTransition = ReactSharedInternals.T, previousUpdatePriority = Internals.p; 1955 try { 1956 if (ReactSharedInternals.T = null, Internals.p = 2, fn3) 1957 return fn3(); 1958 } finally { 1959 ReactSharedInternals.T = previousTransition, Internals.p = previousUpdatePriority, Internals.d.f() && console.error( 1960 "flushSync was called from inside a lifecycle method. React cannot flush when React is already rendering. Consider moving this call to a scheduler task or micro task." 1961 ); 1962 } 1963 }; 1964 exports.preconnect = function(href, options) { 1965 "string" === typeof href && href ? null != options && "object" !== typeof options ? console.error( 1966 "ReactDOM.preconnect(): Expected the `options` argument (second) to be an object but encountered %s instead. The only supported option at this time is `crossOrigin` which accepts a string.", 1967 getValueDescriptorExpectingEnumForWarning(options) 1968 ) : null != options && "string" !== typeof options.crossOrigin && console.error( 1969 "ReactDOM.preconnect(): Expected the `crossOrigin` option (second argument) to be a string but encountered %s instead. Try removing this option or passing a string value instead.", 1970 getValueDescriptorExpectingObjectForWarning(options.crossOrigin) 1971 ) : console.error( 1972 "ReactDOM.preconnect(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", 1973 getValueDescriptorExpectingObjectForWarning(href) 1974 ); 1975 "string" === typeof href && (options ? (options = options.crossOrigin, options = "string" === typeof options ? "use-credentials" === options ? options : "" : void 0) : options = null, Internals.d.C(href, options)); 1976 }; 1977 exports.prefetchDNS = function(href) { 1978 if ("string" !== typeof href || !href) 1979 console.error( 1980 "ReactDOM.prefetchDNS(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", 1981 getValueDescriptorExpectingObjectForWarning(href) 1982 ); 1983 else if (1 < arguments.length) { 1984 var options = arguments[1]; 1985 "object" === typeof options && options.hasOwnProperty("crossOrigin") ? console.error( 1986 "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. It looks like the you are attempting to set a crossOrigin property for this DNS lookup hint. Browsers do not perform DNS queries using CORS and setting this attribute on the resource hint has no effect. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", 1987 getValueDescriptorExpectingEnumForWarning(options) 1988 ) : console.error( 1989 "ReactDOM.prefetchDNS(): Expected only one argument, `href`, but encountered %s as a second argument instead. This argument is reserved for future options and is currently disallowed. Try calling ReactDOM.prefetchDNS() with just a single string argument, `href`.", 1990 getValueDescriptorExpectingEnumForWarning(options) 1991 ); 1992 } 1993 "string" === typeof href && Internals.d.D(href); 1994 }; 1995 exports.preinit = function(href, options) { 1996 "string" === typeof href && href ? null == options || "object" !== typeof options ? console.error( 1997 "ReactDOM.preinit(): Expected the `options` argument (second) to be an object with an `as` property describing the type of resource to be preinitialized but encountered %s instead.", 1998 getValueDescriptorExpectingEnumForWarning(options) 1999 ) : "style" !== options.as && "script" !== options.as && console.error( 2000 'ReactDOM.preinit(): Expected the `as` property in the `options` argument (second) to contain a valid value describing the type of resource to be preinitialized but encountered %s instead. Valid values for `as` are "style" and "script".', 2001 getValueDescriptorExpectingEnumForWarning(options.as) 2002 ) : console.error( 2003 "ReactDOM.preinit(): Expected the `href` argument (first) to be a non-empty string but encountered %s instead.", 2004 getValueDescriptorExpectingObjectForWarning(href) 2005 ); 2006 if ("string" === typeof href && options && "string" === typeof options.as) { 2007 var as3 = options.as, crossOrigin = getCrossOriginStringAs(as3, options.crossOrigin), integrity = "string" === typeof options.integrity ? options.integrity : void 0, fetchPriority = "string" === typeof options.fetchPriority ? options.fetchPriority : void 0; 2008 "style" === as3 ? Internals.d.S( 2009 href, 2010 "string" === typeof options.precedence ? options.precedence : void 0, 2011 { 2012 crossOrigin, 2013 integrity, 2014 fetchPriority 2015 } 2016 ) : "script" === as3 && Internals.d.X(href, { 2017 crossOrigin, 2018 integrity, 2019 fetchPriority, 2020 nonce: "string" === typeof options.nonce ? options.nonce : void 0 2021 }); 2022 } 2023 }; 2024 exports.preinitModule = function(href, options) { 2025 var encountered = ""; 2026 "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); 2027 void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "script" !== options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingEnumForWarning(options.as) + "."); 2028 if (encountered) 2029 console.error( 2030 "ReactDOM.preinitModule(): Expected up to two arguments, a non-empty `href` string and, optionally, an `options` object with a valid `as` property.%s", 2031 encountered 2032 ); 2033 else 2034 switch (encountered = options && "string" === typeof options.as ? options.as : "script", encountered) { 2035 case "script": 2036 break; 2037 default: 2038 encountered = getValueDescriptorExpectingEnumForWarning(encountered), console.error( 2039 'ReactDOM.preinitModule(): Currently the only supported "as" type for this function is "script" but received "%s" instead. This warning was generated for `href` "%s". In the future other module types will be supported, aligning with the import-attributes proposal. Learn more here: (https://github.com/tc39/proposal-import-attributes)', 2040 encountered, 2041 href 2042 ); 2043 } 2044 if ("string" === typeof href) 2045 if ("object" === typeof options && null !== options) { 2046 if (null == options.as || "script" === options.as) 2047 encountered = getCrossOriginStringAs( 2048 options.as, 2049 options.crossOrigin 2050 ), Internals.d.M(href, { 2051 crossOrigin: encountered, 2052 integrity: "string" === typeof options.integrity ? options.integrity : void 0, 2053 nonce: "string" === typeof options.nonce ? options.nonce : void 0 2054 }); 2055 } else null == options && Internals.d.M(href); 2056 }; 2057 exports.preload = function(href, options) { 2058 var encountered = ""; 2059 "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); 2060 null == options || "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : "string" === typeof options.as && options.as || (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + "."); 2061 encountered && console.error( 2062 'ReactDOM.preload(): Expected two arguments, a non-empty `href` string and an `options` object with an `as` property valid for a `<link rel="preload" as="..." />` tag.%s', 2063 encountered 2064 ); 2065 if ("string" === typeof href && "object" === typeof options && null !== options && "string" === typeof options.as) { 2066 encountered = options.as; 2067 var crossOrigin = getCrossOriginStringAs( 2068 encountered, 2069 options.crossOrigin 2070 ); 2071 Internals.d.L(href, encountered, { 2072 crossOrigin, 2073 integrity: "string" === typeof options.integrity ? options.integrity : void 0, 2074 nonce: "string" === typeof options.nonce ? options.nonce : void 0, 2075 type: "string" === typeof options.type ? options.type : void 0, 2076 fetchPriority: "string" === typeof options.fetchPriority ? options.fetchPriority : void 0, 2077 referrerPolicy: "string" === typeof options.referrerPolicy ? options.referrerPolicy : void 0, 2078 imageSrcSet: "string" === typeof options.imageSrcSet ? options.imageSrcSet : void 0, 2079 imageSizes: "string" === typeof options.imageSizes ? options.imageSizes : void 0, 2080 media: "string" === typeof options.media ? options.media : void 0 2081 }); 2082 } 2083 }; 2084 exports.preloadModule = function(href, options) { 2085 var encountered = ""; 2086 "string" === typeof href && href || (encountered += " The `href` argument encountered was " + getValueDescriptorExpectingObjectForWarning(href) + "."); 2087 void 0 !== options && "object" !== typeof options ? encountered += " The `options` argument encountered was " + getValueDescriptorExpectingObjectForWarning(options) + "." : options && "as" in options && "string" !== typeof options.as && (encountered += " The `as` option encountered was " + getValueDescriptorExpectingObjectForWarning(options.as) + "."); 2088 encountered && console.error( 2089 'ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `<link rel="modulepreload" as="..." />` tag.%s', 2090 encountered 2091 ); 2092 "string" === typeof href && (options ? (encountered = getCrossOriginStringAs( 2093 options.as, 2094 options.crossOrigin 2095 ), Internals.d.m(href, { 2096 as: "string" === typeof options.as && "script" !== options.as ? options.as : void 0, 2097 crossOrigin: encountered, 2098 integrity: "string" === typeof options.integrity ? options.integrity : void 0 2099 })) : Internals.d.m(href)); 2100 }; 2101 exports.requestFormReset = function(form) { 2102 Internals.d.r(form); 2103 }; 2104 exports.unstable_batchedUpdates = function(fn3, a3) { 2105 return fn3(a3); 2106 }; 2107 exports.useFormState = function(action, initialState, permalink) { 2108 return resolveDispatcher().useFormState(action, initialState, permalink); 2109 }; 2110 exports.useFormStatus = function() { 2111 return resolveDispatcher().useHostTransitionStatus(); 2112 }; 2113 exports.version = "19.2.4"; 2114 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 2115 })(); 2116 } 2117}); 2118
vendor: 293 bytes, lines 2119-2131
2119// node_modules/react-dom/index.js 2120var require_react_dom = __commonJS({ 2121 "node_modules/react-dom/index.js"(exports, module) { 2122 "use strict"; 2123 if (false) { 2124 checkDCE(); 2125 module.exports = null; 2126 } else { 2127 module.exports = require_react_dom_development(); 2128 } 2129 } 2130}); 2131
vendor: 993,841 bytes, lines 2132-22030
2132// node_modules/react-dom/cjs/react-dom-client.development.js 2133var require_react_dom_client_development = __commonJS({ 2134 "node_modules/react-dom/cjs/react-dom-client.development.js"(exports) { 2135 "use strict"; 2136 (function() { 2137 function findHook(fiber, id) { 2138 for (fiber = fiber.memoizedState; null !== fiber && 0 < id; ) 2139 fiber = fiber.next, id--; 2140 return fiber; 2141 } 2142 function copyWithSetImpl(obj, path, index, value) { 2143 if (index >= path.length) return value; 2144 var key = path[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); 2145 updated[key] = copyWithSetImpl(obj[key], path, index + 1, value); 2146 return updated; 2147 } 2148 function copyWithRename(obj, oldPath, newPath) { 2149 if (oldPath.length !== newPath.length) 2150 console.warn("copyWithRename() expects paths of the same length"); 2151 else { 2152 for (var i3 = 0; i3 < newPath.length - 1; i3++) 2153 if (oldPath[i3] !== newPath[i3]) { 2154 console.warn( 2155 "copyWithRename() expects paths to be the same except for the deepest key" 2156 ); 2157 return; 2158 } 2159 return copyWithRenameImpl(obj, oldPath, newPath, 0); 2160 } 2161 } 2162 function copyWithRenameImpl(obj, oldPath, newPath, index) { 2163 var oldKey = oldPath[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); 2164 index + 1 === oldPath.length ? (updated[newPath[index]] = updated[oldKey], isArrayImpl(updated) ? updated.splice(oldKey, 1) : delete updated[oldKey]) : updated[oldKey] = copyWithRenameImpl( 2165 obj[oldKey], 2166 oldPath, 2167 newPath, 2168 index + 1 2169 ); 2170 return updated; 2171 } 2172 function copyWithDeleteImpl(obj, path, index) { 2173 var key = path[index], updated = isArrayImpl(obj) ? obj.slice() : assign({}, obj); 2174 if (index + 1 === path.length) 2175 return isArrayImpl(updated) ? updated.splice(key, 1) : delete updated[key], updated; 2176 updated[key] = copyWithDeleteImpl(obj[key], path, index + 1); 2177 return updated; 2178 } 2179 function shouldSuspendImpl() { 2180 return false; 2181 } 2182 function shouldErrorImpl() { 2183 return null; 2184 } 2185 function warnInvalidHookAccess() { 2186 console.error( 2187 "Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks" 2188 ); 2189 } 2190 function warnInvalidContextAccess() { 2191 console.error( 2192 "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." 2193 ); 2194 } 2195 function noop() { 2196 } 2197 function warnForMissingKey() { 2198 } 2199 function setToSortedString(set) { 2200 var array = []; 2201 set.forEach(function(value) { 2202 array.push(value); 2203 }); 2204 return array.sort().join(", "); 2205 } 2206 function createFiber(tag, pendingProps, key, mode2) { 2207 return new FiberNode(tag, pendingProps, key, mode2); 2208 } 2209 function scheduleRoot(root3, element) { 2210 root3.context === emptyContextObject && (updateContainerImpl(root3.current, 2, element, root3, null, null), flushSyncWork$1()); 2211 } 2212 function scheduleRefresh(root3, update) { 2213 if (null !== resolveFamily) { 2214 var staleFamilies = update.staleFamilies; 2215 update = update.updatedFamilies; 2216 flushPendingEffects(); 2217 scheduleFibersWithFamiliesRecursively( 2218 root3.current, 2219 update, 2220 staleFamilies 2221 ); 2222 flushSyncWork$1(); 2223 } 2224 } 2225 function setRefreshHandler(handler) { 2226 resolveFamily = handler; 2227 } 2228 function isValidContainer(node) { 2229 return !(!node || 1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType); 2230 } 2231 function getNearestMountedFiber(fiber) { 2232 var node = fiber, nearestMounted = fiber; 2233 if (fiber.alternate) for (; node.return; ) node = node.return; 2234 else { 2235 fiber = node; 2236 do 2237 node = fiber, 0 !== (node.flags & 4098) && (nearestMounted = node.return), fiber = node.return; 2238 while (fiber); 2239 } 2240 return 3 === node.tag ? nearestMounted : null; 2241 } 2242 function getSuspenseInstanceFromFiber(fiber) { 2243 if (13 === fiber.tag) { 2244 var suspenseState = fiber.memoizedState; 2245 null === suspenseState && (fiber = fiber.alternate, null !== fiber && (suspenseState = fiber.memoizedState)); 2246 if (null !== suspenseState) return suspenseState.dehydrated; 2247 } 2248 return null; 2249 } 2250 function getActivityInstanceFromFiber(fiber) { 2251 if (31 === fiber.tag) { 2252 var activityState = fiber.memoizedState; 2253 null === activityState && (fiber = fiber.alternate, null !== fiber && (activityState = fiber.memoizedState)); 2254 if (null !== activityState) return activityState.dehydrated; 2255 } 2256 return null; 2257 } 2258 function assertIsMounted(fiber) { 2259 if (getNearestMountedFiber(fiber) !== fiber) 2260 throw Error("Unable to find node on an unmounted component."); 2261 } 2262 function findCurrentFiberUsingSlowPath(fiber) { 2263 var alternate = fiber.alternate; 2264 if (!alternate) { 2265 alternate = getNearestMountedFiber(fiber); 2266 if (null === alternate) 2267 throw Error("Unable to find node on an unmounted component."); 2268 return alternate !== fiber ? null : fiber; 2269 } 2270 for (var a3 = fiber, b3 = alternate; ; ) { 2271 var parentA = a3.return; 2272 if (null === parentA) break; 2273 var parentB = parentA.alternate; 2274 if (null === parentB) { 2275 b3 = parentA.return; 2276 if (null !== b3) { 2277 a3 = b3; 2278 continue; 2279 } 2280 break; 2281 } 2282 if (parentA.child === parentB.child) { 2283 for (parentB = parentA.child; parentB; ) { 2284 if (parentB === a3) return assertIsMounted(parentA), fiber; 2285 if (parentB === b3) return assertIsMounted(parentA), alternate; 2286 parentB = parentB.sibling; 2287 } 2288 throw Error("Unable to find node on an unmounted component."); 2289 } 2290 if (a3.return !== b3.return) a3 = parentA, b3 = parentB; 2291 else { 2292 for (var didFindChild = false, _child = parentA.child; _child; ) { 2293 if (_child === a3) { 2294 didFindChild = true; 2295 a3 = parentA; 2296 b3 = parentB; 2297 break; 2298 } 2299 if (_child === b3) { 2300 didFindChild = true; 2301 b3 = parentA; 2302 a3 = parentB; 2303 break; 2304 } 2305 _child = _child.sibling; 2306 } 2307 if (!didFindChild) { 2308 for (_child = parentB.child; _child; ) { 2309 if (_child === a3) { 2310 didFindChild = true; 2311 a3 = parentB; 2312 b3 = parentA; 2313 break; 2314 } 2315 if (_child === b3) { 2316 didFindChild = true; 2317 b3 = parentB; 2318 a3 = parentA; 2319 break; 2320 } 2321 _child = _child.sibling; 2322 } 2323 if (!didFindChild) 2324 throw Error( 2325 "Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue." 2326 ); 2327 } 2328 } 2329 if (a3.alternate !== b3) 2330 throw Error( 2331 "Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue." 2332 ); 2333 } 2334 if (3 !== a3.tag) 2335 throw Error("Unable to find node on an unmounted component."); 2336 return a3.stateNode.current === a3 ? fiber : alternate; 2337 } 2338 function findCurrentHostFiberImpl(node) { 2339 var tag = node.tag; 2340 if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node; 2341 for (node = node.child; null !== node; ) { 2342 tag = findCurrentHostFiberImpl(node); 2343 if (null !== tag) return tag; 2344 node = node.sibling; 2345 } 2346 return null; 2347 } 2348 function getIteratorFn(maybeIterable) { 2349 if (null === maybeIterable || "object" !== typeof maybeIterable) 2350 return null; 2351 maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"]; 2352 return "function" === typeof maybeIterable ? maybeIterable : null; 2353 } 2354 function getComponentNameFromType(type) { 2355 if (null == type) return null; 2356 if ("function" === typeof type) 2357 return type.$$typeof === REACT_CLIENT_REFERENCE ? null : type.displayName || type.name || null; 2358 if ("string" === typeof type) return type; 2359 switch (type) { 2360 case REACT_FRAGMENT_TYPE: 2361 return "Fragment"; 2362 case REACT_PROFILER_TYPE: 2363 return "Profiler"; 2364 case REACT_STRICT_MODE_TYPE: 2365 return "StrictMode"; 2366 case REACT_SUSPENSE_TYPE: 2367 return "Suspense"; 2368 case REACT_SUSPENSE_LIST_TYPE: 2369 return "SuspenseList"; 2370 case REACT_ACTIVITY_TYPE: 2371 return "Activity"; 2372 } 2373 if ("object" === typeof type) 2374 switch ("number" === typeof type.tag && console.error( 2375 "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue." 2376 ), type.$$typeof) { 2377 case REACT_PORTAL_TYPE: 2378 return "Portal"; 2379 case REACT_CONTEXT_TYPE: 2380 return type.displayName || "Context"; 2381 case REACT_CONSUMER_TYPE: 2382 return (type._context.displayName || "Context") + ".Consumer"; 2383 case REACT_FORWARD_REF_TYPE: 2384 var innerType = type.render; 2385 type = type.displayName; 2386 type || (type = innerType.displayName || innerType.name || "", type = "" !== type ? "ForwardRef(" + type + ")" : "ForwardRef"); 2387 return type; 2388 case REACT_MEMO_TYPE: 2389 return innerType = type.displayName || null, null !== innerType ? innerType : getComponentNameFromType(type.type) || "Memo"; 2390 case REACT_LAZY_TYPE: 2391 innerType = type._payload; 2392 type = type._init; 2393 try { 2394 return getComponentNameFromType(type(innerType)); 2395 } catch (x3) { 2396 } 2397 } 2398 return null; 2399 } 2400 function getComponentNameFromOwner(owner) { 2401 return "number" === typeof owner.tag ? getComponentNameFromFiber(owner) : "string" === typeof owner.name ? owner.name : null; 2402 } 2403 function getComponentNameFromFiber(fiber) { 2404 var type = fiber.type; 2405 switch (fiber.tag) { 2406 case 31: 2407 return "Activity"; 2408 case 24: 2409 return "Cache"; 2410 case 9: 2411 return (type._context.displayName || "Context") + ".Consumer"; 2412 case 10: 2413 return type.displayName || "Context"; 2414 case 18: 2415 return "DehydratedFragment"; 2416 case 11: 2417 return fiber = type.render, fiber = fiber.displayName || fiber.name || "", type.displayName || ("" !== fiber ? "ForwardRef(" + fiber + ")" : "ForwardRef"); 2418 case 7: 2419 return "Fragment"; 2420 case 26: 2421 case 27: 2422 case 5: 2423 return type; 2424 case 4: 2425 return "Portal"; 2426 case 3: 2427 return "Root"; 2428 case 6: 2429 return "Text"; 2430 case 16: 2431 return getComponentNameFromType(type); 2432 case 8: 2433 return type === REACT_STRICT_MODE_TYPE ? "StrictMode" : "Mode"; 2434 case 22: 2435 return "Offscreen"; 2436 case 12: 2437 return "Profiler"; 2438 case 21: 2439 return "Scope"; 2440 case 13: 2441 return "Suspense"; 2442 case 19: 2443 return "SuspenseList"; 2444 case 25: 2445 return "TracingMarker"; 2446 case 1: 2447 case 0: 2448 case 14: 2449 case 15: 2450 if ("function" === typeof type) 2451 return type.displayName || type.name || null; 2452 if ("string" === typeof type) return type; 2453 break; 2454 case 29: 2455 type = fiber._debugInfo; 2456 if (null != type) { 2457 for (var i3 = type.length - 1; 0 <= i3; i3--) 2458 if ("string" === typeof type[i3].name) return type[i3].name; 2459 } 2460 if (null !== fiber.return) 2461 return getComponentNameFromFiber(fiber.return); 2462 } 2463 return null; 2464 } 2465 function createCursor(defaultValue) { 2466 return { current: defaultValue }; 2467 } 2468 function pop(cursor, fiber) { 2469 0 > index$jscomp$0 ? console.error("Unexpected pop.") : (fiber !== fiberStack[index$jscomp$0] && console.error("Unexpected Fiber popped."), cursor.current = valueStack[index$jscomp$0], valueStack[index$jscomp$0] = null, fiberStack[index$jscomp$0] = null, index$jscomp$0--); 2470 } 2471 function push(cursor, value, fiber) { 2472 index$jscomp$0++; 2473 valueStack[index$jscomp$0] = cursor.current; 2474 fiberStack[index$jscomp$0] = fiber; 2475 cursor.current = value; 2476 } 2477 function requiredContext(c3) { 2478 null === c3 && console.error( 2479 "Expected host context to exist. This error is likely caused by a bug in React. Please file an issue." 2480 ); 2481 return c3; 2482 } 2483 function pushHostContainer(fiber, nextRootInstance) { 2484 push(rootInstanceStackCursor, nextRootInstance, fiber); 2485 push(contextFiberStackCursor, fiber, fiber); 2486 push(contextStackCursor, null, fiber); 2487 var nextRootContext = nextRootInstance.nodeType; 2488 switch (nextRootContext) { 2489 case 9: 2490 case 11: 2491 nextRootContext = 9 === nextRootContext ? "#document" : "#fragment"; 2492 nextRootInstance = (nextRootInstance = nextRootInstance.documentElement) ? (nextRootInstance = nextRootInstance.namespaceURI) ? getOwnHostContext(nextRootInstance) : HostContextNamespaceNone : HostContextNamespaceNone; 2493 break; 2494 default: 2495 if (nextRootContext = nextRootInstance.tagName, nextRootInstance = nextRootInstance.namespaceURI) 2496 nextRootInstance = getOwnHostContext(nextRootInstance), nextRootInstance = getChildHostContextProd( 2497 nextRootInstance, 2498 nextRootContext 2499 ); 2500 else 2501 switch (nextRootContext) { 2502 case "svg": 2503 nextRootInstance = HostContextNamespaceSvg; 2504 break; 2505 case "math": 2506 nextRootInstance = HostContextNamespaceMath; 2507 break; 2508 default: 2509 nextRootInstance = HostContextNamespaceNone; 2510 } 2511 } 2512 nextRootContext = nextRootContext.toLowerCase(); 2513 nextRootContext = updatedAncestorInfoDev(null, nextRootContext); 2514 nextRootContext = { 2515 context: nextRootInstance, 2516 ancestorInfo: nextRootContext 2517 }; 2518 pop(contextStackCursor, fiber); 2519 push(contextStackCursor, nextRootContext, fiber); 2520 } 2521 function popHostContainer(fiber) { 2522 pop(contextStackCursor, fiber); 2523 pop(contextFiberStackCursor, fiber); 2524 pop(rootInstanceStackCursor, fiber); 2525 } 2526 function getHostContext() { 2527 return requiredContext(contextStackCursor.current); 2528 } 2529 function pushHostContext(fiber) { 2530 null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber, fiber); 2531 var context = requiredContext(contextStackCursor.current); 2532 var type = fiber.type; 2533 var nextContext = getChildHostContextProd(context.context, type); 2534 type = updatedAncestorInfoDev(context.ancestorInfo, type); 2535 nextContext = { context: nextContext, ancestorInfo: type }; 2536 context !== nextContext && (push(contextFiberStackCursor, fiber, fiber), push(contextStackCursor, nextContext, fiber)); 2537 } 2538 function popHostContext(fiber) { 2539 contextFiberStackCursor.current === fiber && (pop(contextStackCursor, fiber), pop(contextFiberStackCursor, fiber)); 2540 hostTransitionProviderCursor.current === fiber && (pop(hostTransitionProviderCursor, fiber), HostTransitionContext._currentValue = NotPendingTransition); 2541 } 2542 function disabledLog() { 2543 } 2544 function disableLogs() { 2545 if (0 === disabledDepth) { 2546 prevLog = console.log; 2547 prevInfo = console.info; 2548 prevWarn = console.warn; 2549 prevError = console.error; 2550 prevGroup = console.group; 2551 prevGroupCollapsed = console.groupCollapsed; 2552 prevGroupEnd = console.groupEnd; 2553 var props = { 2554 configurable: true, 2555 enumerable: true, 2556 value: disabledLog, 2557 writable: true 2558 }; 2559 Object.defineProperties(console, { 2560 info: props, 2561 log: props, 2562 warn: props, 2563 error: props, 2564 group: props, 2565 groupCollapsed: props, 2566 groupEnd: props 2567 }); 2568 } 2569 disabledDepth++; 2570 } 2571 function reenableLogs() { 2572 disabledDepth--; 2573 if (0 === disabledDepth) { 2574 var props = { configurable: true, enumerable: true, writable: true }; 2575 Object.defineProperties(console, { 2576 log: assign({}, props, { value: prevLog }), 2577 info: assign({}, props, { value: prevInfo }), 2578 warn: assign({}, props, { value: prevWarn }), 2579 error: assign({}, props, { value: prevError }), 2580 group: assign({}, props, { value: prevGroup }), 2581 groupCollapsed: assign({}, props, { value: prevGroupCollapsed }), 2582 groupEnd: assign({}, props, { value: prevGroupEnd }) 2583 }); 2584 } 2585 0 > disabledDepth && console.error( 2586 "disabledDepth fell below zero. This is a bug in React. Please file an issue." 2587 ); 2588 } 2589 function formatOwnerStack(error2) { 2590 var prevPrepareStackTrace = Error.prepareStackTrace; 2591 Error.prepareStackTrace = void 0; 2592 error2 = error2.stack; 2593 Error.prepareStackTrace = prevPrepareStackTrace; 2594 error2.startsWith("Error: react-stack-top-frame\n") && (error2 = error2.slice(29)); 2595 prevPrepareStackTrace = error2.indexOf("\n"); 2596 -1 !== prevPrepareStackTrace && (error2 = error2.slice(prevPrepareStackTrace + 1)); 2597 prevPrepareStackTrace = error2.indexOf("react_stack_bottom_frame"); 2598 -1 !== prevPrepareStackTrace && (prevPrepareStackTrace = error2.lastIndexOf( 2599 "\n", 2600 prevPrepareStackTrace 2601 )); 2602 if (-1 !== prevPrepareStackTrace) 2603 error2 = error2.slice(0, prevPrepareStackTrace); 2604 else return ""; 2605 return error2; 2606 } 2607 function describeBuiltInComponentFrame(name) { 2608 if (void 0 === prefix) 2609 try { 2610 throw Error(); 2611 } catch (x3) { 2612 var match = x3.stack.trim().match(/\n( *(at )?)/); 2613 prefix = match && match[1] || ""; 2614 suffix = -1 < x3.stack.indexOf("\n at") ? " (<anonymous>)" : -1 < x3.stack.indexOf("@") ? "@unknown:0:0" : ""; 2615 } 2616 return "\n" + prefix + name + suffix; 2617 } 2618 function describeNativeComponentFrame(fn3, construct) { 2619 if (!fn3 || reentry) return ""; 2620 var frame = componentFrameCache.get(fn3); 2621 if (void 0 !== frame) return frame; 2622 reentry = true; 2623 frame = Error.prepareStackTrace; 2624 Error.prepareStackTrace = void 0; 2625 var previousDispatcher2 = null; 2626 previousDispatcher2 = ReactSharedInternals.H; 2627 ReactSharedInternals.H = null; 2628 disableLogs(); 2629 try { 2630 var RunInRootFrame = { 2631 DetermineComponentFrameRoot: function() { 2632 try { 2633 if (construct) { 2634 var Fake = function() { 2635 throw Error(); 2636 }; 2637 Object.defineProperty(Fake.prototype, "props", { 2638 set: function() { 2639 throw Error(); 2640 } 2641 }); 2642 if ("object" === typeof Reflect && Reflect.construct) { 2643 try { 2644 Reflect.construct(Fake, []); 2645 } catch (x3) { 2646 var control = x3; 2647 } 2648 Reflect.construct(fn3, [], Fake); 2649 } else { 2650 try { 2651 Fake.call(); 2652 } catch (x$0) { 2653 control = x$0; 2654 } 2655 fn3.call(Fake.prototype); 2656 } 2657 } else { 2658 try { 2659 throw Error(); 2660 } catch (x$1) { 2661 control = x$1; 2662 } 2663 (Fake = fn3()) && "function" === typeof Fake.catch && Fake.catch(function() { 2664 }); 2665 } 2666 } catch (sample) { 2667 if (sample && control && "string" === typeof sample.stack) 2668 return [sample.stack, control.stack]; 2669 } 2670 return [null, null]; 2671 } 2672 }; 2673 RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; 2674 var namePropDescriptor = Object.getOwnPropertyDescriptor( 2675 RunInRootFrame.DetermineComponentFrameRoot, 2676 "name" 2677 ); 2678 namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty( 2679 RunInRootFrame.DetermineComponentFrameRoot, 2680 "name", 2681 { value: "DetermineComponentFrameRoot" } 2682 ); 2683 var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1]; 2684 if (sampleStack && controlStack) { 2685 var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n"); 2686 for (_RunInRootFrame$Deter = namePropDescriptor = 0; namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes( 2687 "DetermineComponentFrameRoot" 2688 ); ) 2689 namePropDescriptor++; 2690 for (; _RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes( 2691 "DetermineComponentFrameRoot" 2692 ); ) 2693 _RunInRootFrame$Deter++; 2694 if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length) 2695 for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; ) 2696 _RunInRootFrame$Deter--; 2697 for (; 1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--) 2698 if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) { 2699 if (1 !== namePropDescriptor || 1 !== _RunInRootFrame$Deter) { 2700 do 2701 if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) { 2702 var _frame = "\n" + sampleLines[namePropDescriptor].replace( 2703 " at new ", 2704 " at " 2705 ); 2706 fn3.displayName && _frame.includes("<anonymous>") && (_frame = _frame.replace("<anonymous>", fn3.displayName)); 2707 "function" === typeof fn3 && componentFrameCache.set(fn3, _frame); 2708 return _frame; 2709 } 2710 while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter); 2711 } 2712 break; 2713 } 2714 } 2715 } finally { 2716 reentry = false, ReactSharedInternals.H = previousDispatcher2, reenableLogs(), Error.prepareStackTrace = frame; 2717 } 2718 sampleLines = (sampleLines = fn3 ? fn3.displayName || fn3.name : "") ? describeBuiltInComponentFrame(sampleLines) : ""; 2719 "function" === typeof fn3 && componentFrameCache.set(fn3, sampleLines); 2720 return sampleLines; 2721 } 2722 function describeFiber(fiber, childFiber) { 2723 switch (fiber.tag) { 2724 case 26: 2725 case 27: 2726 case 5: 2727 return describeBuiltInComponentFrame(fiber.type); 2728 case 16: 2729 return describeBuiltInComponentFrame("Lazy"); 2730 case 13: 2731 return fiber.child !== childFiber && null !== childFiber ? describeBuiltInComponentFrame("Suspense Fallback") : describeBuiltInComponentFrame("Suspense"); 2732 case 19: 2733 return describeBuiltInComponentFrame("SuspenseList"); 2734 case 0: 2735 case 15: 2736 return describeNativeComponentFrame(fiber.type, false); 2737 case 11: 2738 return describeNativeComponentFrame(fiber.type.render, false); 2739 case 1: 2740 return describeNativeComponentFrame(fiber.type, true); 2741 case 31: 2742 return describeBuiltInComponentFrame("Activity"); 2743 default: 2744 return ""; 2745 } 2746 } 2747 function getStackByFiberInDevAndProd(workInProgress2) { 2748 try { 2749 var info = "", previous = null; 2750 do { 2751 info += describeFiber(workInProgress2, previous); 2752 var debugInfo = workInProgress2._debugInfo; 2753 if (debugInfo) 2754 for (var i3 = debugInfo.length - 1; 0 <= i3; i3--) { 2755 var entry = debugInfo[i3]; 2756 if ("string" === typeof entry.name) { 2757 var JSCompiler_temp_const = info; 2758 a: { 2759 var name = entry.name, env = entry.env, location2 = entry.debugLocation; 2760 if (null != location2) { 2761 var childStack = formatOwnerStack(location2), idx = childStack.lastIndexOf("\n"), lastLine = -1 === idx ? childStack : childStack.slice(idx + 1); 2762 if (-1 !== lastLine.indexOf(name)) { 2763 var JSCompiler_inline_result = "\n" + lastLine; 2764 break a; 2765 } 2766 } 2767 JSCompiler_inline_result = describeBuiltInComponentFrame( 2768 name + (env ? " [" + env + "]" : "") 2769 ); 2770 } 2771 info = JSCompiler_temp_const + JSCompiler_inline_result; 2772 } 2773 } 2774 previous = workInProgress2; 2775 workInProgress2 = workInProgress2.return; 2776 } while (workInProgress2); 2777 return info; 2778 } catch (x3) { 2779 return "\nError generating stack: " + x3.message + "\n" + x3.stack; 2780 } 2781 } 2782 function describeFunctionComponentFrameWithoutLineNumber(fn3) { 2783 return (fn3 = fn3 ? fn3.displayName || fn3.name : "") ? describeBuiltInComponentFrame(fn3) : ""; 2784 } 2785 function getCurrentFiberOwnerNameInDevOrNull() { 2786 if (null === current) return null; 2787 var owner = current._debugOwner; 2788 return null != owner ? getComponentNameFromOwner(owner) : null; 2789 } 2790 function getCurrentFiberStackInDev() { 2791 if (null === current) return ""; 2792 var workInProgress2 = current; 2793 try { 2794 var info = ""; 2795 6 === workInProgress2.tag && (workInProgress2 = workInProgress2.return); 2796 switch (workInProgress2.tag) { 2797 case 26: 2798 case 27: 2799 case 5: 2800 info += describeBuiltInComponentFrame(workInProgress2.type); 2801 break; 2802 case 13: 2803 info += describeBuiltInComponentFrame("Suspense"); 2804 break; 2805 case 19: 2806 info += describeBuiltInComponentFrame("SuspenseList"); 2807 break; 2808 case 31: 2809 info += describeBuiltInComponentFrame("Activity"); 2810 break; 2811 case 30: 2812 case 0: 2813 case 15: 2814 case 1: 2815 workInProgress2._debugOwner || "" !== info || (info += describeFunctionComponentFrameWithoutLineNumber( 2816 workInProgress2.type 2817 )); 2818 break; 2819 case 11: 2820 workInProgress2._debugOwner || "" !== info || (info += describeFunctionComponentFrameWithoutLineNumber( 2821 workInProgress2.type.render 2822 )); 2823 } 2824 for (; workInProgress2; ) 2825 if ("number" === typeof workInProgress2.tag) { 2826 var fiber = workInProgress2; 2827 workInProgress2 = fiber._debugOwner; 2828 var debugStack = fiber._debugStack; 2829 if (workInProgress2 && debugStack) { 2830 var formattedStack = formatOwnerStack(debugStack); 2831 "" !== formattedStack && (info += "\n" + formattedStack); 2832 } 2833 } else if (null != workInProgress2.debugStack) { 2834 var ownerStack = workInProgress2.debugStack; 2835 (workInProgress2 = workInProgress2.owner) && ownerStack && (info += "\n" + formatOwnerStack(ownerStack)); 2836 } else break; 2837 var JSCompiler_inline_result = info; 2838 } catch (x3) { 2839 JSCompiler_inline_result = "\nError generating stack: " + x3.message + "\n" + x3.stack; 2840 } 2841 return JSCompiler_inline_result; 2842 } 2843 function runWithFiberInDEV(fiber, callback, arg0, arg1, arg2, arg3, arg4) { 2844 var previousFiber = current; 2845 setCurrentFiber(fiber); 2846 try { 2847 return null !== fiber && fiber._debugTask ? fiber._debugTask.run( 2848 callback.bind(null, arg0, arg1, arg2, arg3, arg4) 2849 ) : callback(arg0, arg1, arg2, arg3, arg4); 2850 } finally { 2851 setCurrentFiber(previousFiber); 2852 } 2853 throw Error( 2854 "runWithFiberInDEV should never be called in production. This is a bug in React." 2855 ); 2856 } 2857 function setCurrentFiber(fiber) { 2858 ReactSharedInternals.getCurrentStack = null === fiber ? null : getCurrentFiberStackInDev; 2859 isRendering = false; 2860 current = fiber; 2861 } 2862 function typeName(value) { 2863 return "function" === typeof Symbol && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object"; 2864 } 2865 function willCoercionThrow(value) { 2866 try { 2867 return testStringCoercion(value), false; 2868 } catch (e3) { 2869 return true; 2870 } 2871 } 2872 function testStringCoercion(value) { 2873 return "" + value; 2874 } 2875 function checkAttributeStringCoercion(value, attributeName) { 2876 if (willCoercionThrow(value)) 2877 return console.error( 2878 "The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.", 2879 attributeName, 2880 typeName(value) 2881 ), testStringCoercion(value); 2882 } 2883 function checkCSSPropertyStringCoercion(value, propName) { 2884 if (willCoercionThrow(value)) 2885 return console.error( 2886 "The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.", 2887 propName, 2888 typeName(value) 2889 ), testStringCoercion(value); 2890 } 2891 function checkFormFieldValueStringCoercion(value) { 2892 if (willCoercionThrow(value)) 2893 return console.error( 2894 "Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.", 2895 typeName(value) 2896 ), testStringCoercion(value); 2897 } 2898 function injectInternals(internals) { 2899 if ("undefined" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return false; 2900 var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__; 2901 if (hook.isDisabled) return true; 2902 if (!hook.supportsFiber) 2903 return console.error( 2904 "The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools" 2905 ), true; 2906 try { 2907 rendererID = hook.inject(internals), injectedHook = hook; 2908 } catch (err) { 2909 console.error("React instrumentation encountered an error: %o.", err); 2910 } 2911 return hook.checkDCE ? true : false; 2912 } 2913 function setIsStrictModeForDevtools(newIsStrictMode) { 2914 "function" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode); 2915 if (injectedHook && "function" === typeof injectedHook.setStrictMode) 2916 try { 2917 injectedHook.setStrictMode(rendererID, newIsStrictMode); 2918 } catch (err) { 2919 hasLoggedError || (hasLoggedError = true, console.error( 2920 "React instrumentation encountered an error: %o", 2921 err 2922 )); 2923 } 2924 } 2925 function clz32Fallback(x3) { 2926 x3 >>>= 0; 2927 return 0 === x3 ? 32 : 31 - (log(x3) / LN2 | 0) | 0; 2928 } 2929 function getHighestPriorityLanes(lanes) { 2930 var pendingSyncLanes = lanes & 42; 2931 if (0 !== pendingSyncLanes) return pendingSyncLanes; 2932 switch (lanes & -lanes) { 2933 case 1: 2934 return 1; 2935 case 2: 2936 return 2; 2937 case 4: 2938 return 4; 2939 case 8: 2940 return 8; 2941 case 16: 2942 return 16; 2943 case 32: 2944 return 32; 2945 case 64: 2946 return 64; 2947 case 128: 2948 return 128; 2949 case 256: 2950 case 512: 2951 case 1024: 2952 case 2048: 2953 case 4096: 2954 case 8192: 2955 case 16384: 2956 case 32768: 2957 case 65536: 2958 case 131072: 2959 return lanes & 261888; 2960 case 262144: 2961 case 524288: 2962 case 1048576: 2963 case 2097152: 2964 return lanes & 3932160; 2965 case 4194304: 2966 case 8388608: 2967 case 16777216: 2968 case 33554432: 2969 return lanes & 62914560; 2970 case 67108864: 2971 return 67108864; 2972 case 134217728: 2973 return 134217728; 2974 case 268435456: 2975 return 268435456; 2976 case 536870912: 2977 return 536870912; 2978 case 1073741824: 2979 return 0; 2980 default: 2981 return console.error( 2982 "Should have found matching lanes. This is a bug in React." 2983 ), lanes; 2984 } 2985 } 2986 function getNextLanes(root3, wipLanes, rootHasPendingCommit) { 2987 var pendingLanes = root3.pendingLanes; 2988 if (0 === pendingLanes) return 0; 2989 var nextLanes = 0, suspendedLanes = root3.suspendedLanes, pingedLanes = root3.pingedLanes; 2990 root3 = root3.warmLanes; 2991 var nonIdlePendingLanes = pendingLanes & 134217727; 2992 0 !== nonIdlePendingLanes ? (pendingLanes = nonIdlePendingLanes & ~suspendedLanes, 0 !== pendingLanes ? nextLanes = getHighestPriorityLanes(pendingLanes) : (pingedLanes &= nonIdlePendingLanes, 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : rootHasPendingCommit || (rootHasPendingCommit = nonIdlePendingLanes & ~root3, 0 !== rootHasPendingCommit && (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))))) : (nonIdlePendingLanes = pendingLanes & ~suspendedLanes, 0 !== nonIdlePendingLanes ? nextLanes = getHighestPriorityLanes(nonIdlePendingLanes) : 0 !== pingedLanes ? nextLanes = getHighestPriorityLanes(pingedLanes) : rootHasPendingCommit || (rootHasPendingCommit = pendingLanes & ~root3, 0 !== rootHasPendingCommit && (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))); 2993 return 0 === nextLanes ? 0 : 0 !== wipLanes && wipLanes !== nextLanes && 0 === (wipLanes & suspendedLanes) && (suspendedLanes = nextLanes & -nextLanes, rootHasPendingCommit = wipLanes & -wipLanes, suspendedLanes >= rootHasPendingCommit || 32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)) ? wipLanes : nextLanes; 2994 } 2995 function checkIfRootIsPrerendering(root3, renderLanes2) { 2996 return 0 === (root3.pendingLanes & ~(root3.suspendedLanes & ~root3.pingedLanes) & renderLanes2); 2997 } 2998 function computeExpirationTime(lane, currentTime) { 2999 switch (lane) { 3000 case 1: 3001 case 2: 3002 case 4: 3003 case 8: 3004 case 64: 3005 return currentTime + 250; 3006 case 16: 3007 case 32: 3008 case 128: 3009 case 256: 3010 case 512: 3011 case 1024: 3012 case 2048: 3013 case 4096: 3014 case 8192: 3015 case 16384: 3016 case 32768: 3017 case 65536: 3018 case 131072: 3019 case 262144: 3020 case 524288: 3021 case 1048576: 3022 case 2097152: 3023 return currentTime + 5e3; 3024 case 4194304: 3025 case 8388608: 3026 case 16777216: 3027 case 33554432: 3028 return -1; 3029 case 67108864: 3030 case 134217728: 3031 case 268435456: 3032 case 536870912: 3033 case 1073741824: 3034 return -1; 3035 default: 3036 return console.error( 3037 "Should have found matching lanes. This is a bug in React." 3038 ), -1; 3039 } 3040 } 3041 function claimNextRetryLane() { 3042 var lane = nextRetryLane; 3043 nextRetryLane <<= 1; 3044 0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304); 3045 return lane; 3046 } 3047 function createLaneMap(initial) { 3048 for (var laneMap = [], i3 = 0; 31 > i3; i3++) laneMap.push(initial); 3049 return laneMap; 3050 } 3051 function markRootUpdated$1(root3, updateLane) { 3052 root3.pendingLanes |= updateLane; 3053 268435456 !== updateLane && (root3.suspendedLanes = 0, root3.pingedLanes = 0, root3.warmLanes = 0); 3054 } 3055 function markRootFinished(root3, finishedLanes, remainingLanes, spawnedLane, updatedLanes, suspendedRetryLanes) { 3056 var previouslyPendingLanes = root3.pendingLanes; 3057 root3.pendingLanes = remainingLanes; 3058 root3.suspendedLanes = 0; 3059 root3.pingedLanes = 0; 3060 root3.warmLanes = 0; 3061 root3.expiredLanes &= remainingLanes; 3062 root3.entangledLanes &= remainingLanes; 3063 root3.errorRecoveryDisabledLanes &= remainingLanes; 3064 root3.shellSuspendCounter = 0; 3065 var entanglements = root3.entanglements, expirationTimes = root3.expirationTimes, hiddenUpdates = root3.hiddenUpdates; 3066 for (remainingLanes = previouslyPendingLanes & ~remainingLanes; 0 < remainingLanes; ) { 3067 var index = 31 - clz32(remainingLanes), lane = 1 << index; 3068 entanglements[index] = 0; 3069 expirationTimes[index] = -1; 3070 var hiddenUpdatesForLane = hiddenUpdates[index]; 3071 if (null !== hiddenUpdatesForLane) 3072 for (hiddenUpdates[index] = null, index = 0; index < hiddenUpdatesForLane.length; index++) { 3073 var update = hiddenUpdatesForLane[index]; 3074 null !== update && (update.lane &= -536870913); 3075 } 3076 remainingLanes &= ~lane; 3077 } 3078 0 !== spawnedLane && markSpawnedDeferredLane(root3, spawnedLane, 0); 3079 0 !== suspendedRetryLanes && 0 === updatedLanes && 0 !== root3.tag && (root3.suspendedLanes |= suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes)); 3080 } 3081 function markSpawnedDeferredLane(root3, spawnedLane, entangledLanes) { 3082 root3.pendingLanes |= spawnedLane; 3083 root3.suspendedLanes &= ~spawnedLane; 3084 var spawnedLaneIndex = 31 - clz32(spawnedLane); 3085 root3.entangledLanes |= spawnedLane; 3086 root3.entanglements[spawnedLaneIndex] = root3.entanglements[spawnedLaneIndex] | 1073741824 | entangledLanes & 261930; 3087 } 3088 function markRootEntangled(root3, entangledLanes) { 3089 var rootEntangledLanes = root3.entangledLanes |= entangledLanes; 3090 for (root3 = root3.entanglements; rootEntangledLanes; ) { 3091 var index = 31 - clz32(rootEntangledLanes), lane = 1 << index; 3092 lane & entangledLanes | root3[index] & entangledLanes && (root3[index] |= entangledLanes); 3093 rootEntangledLanes &= ~lane; 3094 } 3095 } 3096 function getBumpedLaneForHydration(root3, renderLanes2) { 3097 var renderLane = renderLanes2 & -renderLanes2; 3098 renderLane = 0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane); 3099 return 0 !== (renderLane & (root3.suspendedLanes | renderLanes2)) ? 0 : renderLane; 3100 } 3101 function getBumpedLaneForHydrationByLane(lane) { 3102 switch (lane) { 3103 case 2: 3104 lane = 1; 3105 break; 3106 case 8: 3107 lane = 4; 3108 break; 3109 case 32: 3110 lane = 16; 3111 break; 3112 case 256: 3113 case 512: 3114 case 1024: 3115 case 2048: 3116 case 4096: 3117 case 8192: 3118 case 16384: 3119 case 32768: 3120 case 65536: 3121 case 131072: 3122 case 262144: 3123 case 524288: 3124 case 1048576: 3125 case 2097152: 3126 case 4194304: 3127 case 8388608: 3128 case 16777216: 3129 case 33554432: 3130 lane = 128; 3131 break; 3132 case 268435456: 3133 lane = 134217728; 3134 break; 3135 default: 3136 lane = 0; 3137 } 3138 return lane; 3139 } 3140 function addFiberToLanesMap(root3, fiber, lanes) { 3141 if (isDevToolsPresent) 3142 for (root3 = root3.pendingUpdatersLaneMap; 0 < lanes; ) { 3143 var index = 31 - clz32(lanes), lane = 1 << index; 3144 root3[index].add(fiber); 3145 lanes &= ~lane; 3146 } 3147 } 3148 function movePendingFibersToMemoized(root3, lanes) { 3149 if (isDevToolsPresent) 3150 for (var pendingUpdatersLaneMap = root3.pendingUpdatersLaneMap, memoizedUpdaters = root3.memoizedUpdaters; 0 < lanes; ) { 3151 var index = 31 - clz32(lanes); 3152 root3 = 1 << index; 3153 index = pendingUpdatersLaneMap[index]; 3154 0 < index.size && (index.forEach(function(fiber) { 3155 var alternate = fiber.alternate; 3156 null !== alternate && memoizedUpdaters.has(alternate) || memoizedUpdaters.add(fiber); 3157 }), index.clear()); 3158 lanes &= ~root3; 3159 } 3160 } 3161 function lanesToEventPriority(lanes) { 3162 lanes &= -lanes; 3163 return 0 !== DiscreteEventPriority && DiscreteEventPriority < lanes ? 0 !== ContinuousEventPriority && ContinuousEventPriority < lanes ? 0 !== (lanes & 134217727) ? DefaultEventPriority : IdleEventPriority : ContinuousEventPriority : DiscreteEventPriority; 3164 } 3165 function resolveUpdatePriority() { 3166 var updatePriority = ReactDOMSharedInternals.p; 3167 if (0 !== updatePriority) return updatePriority; 3168 updatePriority = window.event; 3169 return void 0 === updatePriority ? DefaultEventPriority : getEventPriority(updatePriority.type); 3170 } 3171 function runWithPriority(priority, fn3) { 3172 var previousPriority = ReactDOMSharedInternals.p; 3173 try { 3174 return ReactDOMSharedInternals.p = priority, fn3(); 3175 } finally { 3176 ReactDOMSharedInternals.p = previousPriority; 3177 } 3178 } 3179 function detachDeletedInstance(node) { 3180 delete node[internalInstanceKey]; 3181 delete node[internalPropsKey]; 3182 delete node[internalEventHandlersKey]; 3183 delete node[internalEventHandlerListenersKey]; 3184 delete node[internalEventHandlesSetKey]; 3185 } 3186 function getClosestInstanceFromNode(targetNode) { 3187 var targetInst = targetNode[internalInstanceKey]; 3188 if (targetInst) return targetInst; 3189 for (var parentNode = targetNode.parentNode; parentNode; ) { 3190 if (targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey]) { 3191 parentNode = targetInst.alternate; 3192 if (null !== targetInst.child || null !== parentNode && null !== parentNode.child) 3193 for (targetNode = getParentHydrationBoundary(targetNode); null !== targetNode; ) { 3194 if (parentNode = targetNode[internalInstanceKey]) 3195 return parentNode; 3196 targetNode = getParentHydrationBoundary(targetNode); 3197 } 3198 return targetInst; 3199 } 3200 targetNode = parentNode; 3201 parentNode = targetNode.parentNode; 3202 } 3203 return null; 3204 } 3205 function getInstanceFromNode(node) { 3206 if (node = node[internalInstanceKey] || node[internalContainerInstanceKey]) { 3207 var tag = node.tag; 3208 if (5 === tag || 6 === tag || 13 === tag || 31 === tag || 26 === tag || 27 === tag || 3 === tag) 3209 return node; 3210 } 3211 return null; 3212 } 3213 function getNodeFromInstance(inst) { 3214 var tag = inst.tag; 3215 if (5 === tag || 26 === tag || 27 === tag || 6 === tag) 3216 return inst.stateNode; 3217 throw Error("getNodeFromInstance: Invalid argument."); 3218 } 3219 function getResourcesFromRoot(root3) { 3220 var resources = root3[internalRootNodeResourcesKey]; 3221 resources || (resources = root3[internalRootNodeResourcesKey] = { hoistableStyles: /* @__PURE__ */ new Map(), hoistableScripts: /* @__PURE__ */ new Map() }); 3222 return resources; 3223 } 3224 function markNodeAsHoistable(node) { 3225 node[internalHoistableMarker] = true; 3226 } 3227 function registerTwoPhaseEvent(registrationName, dependencies) { 3228 registerDirectEvent(registrationName, dependencies); 3229 registerDirectEvent(registrationName + "Capture", dependencies); 3230 } 3231 function registerDirectEvent(registrationName, dependencies) { 3232 registrationNameDependencies[registrationName] && console.error( 3233 "EventRegistry: More than one plugin attempted to publish the same registration name, `%s`.", 3234 registrationName 3235 ); 3236 registrationNameDependencies[registrationName] = dependencies; 3237 var lowerCasedName = registrationName.toLowerCase(); 3238 possibleRegistrationNames[lowerCasedName] = registrationName; 3239 "onDoubleClick" === registrationName && (possibleRegistrationNames.ondblclick = registrationName); 3240 for (registrationName = 0; registrationName < dependencies.length; registrationName++) 3241 allNativeEvents.add(dependencies[registrationName]); 3242 } 3243 function checkControlledValueProps(tagName, props) { 3244 hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || null == props.value || ("select" === tagName ? console.error( 3245 "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set `onChange`." 3246 ) : console.error( 3247 "You provided a `value` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultValue`. Otherwise, set either `onChange` or `readOnly`." 3248 )); 3249 props.onChange || props.readOnly || props.disabled || null == props.checked || console.error( 3250 "You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`." 3251 ); 3252 } 3253 function isAttributeNameSafe(attributeName) { 3254 if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) 3255 return true; 3256 if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) 3257 return false; 3258 if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) 3259 return validatedAttributeNameCache[attributeName] = true; 3260 illegalAttributeNameCache[attributeName] = true; 3261 console.error("Invalid attribute name: `%s`", attributeName); 3262 return false; 3263 } 3264 function getValueForAttributeOnCustomComponent(node, name, expected) { 3265 if (isAttributeNameSafe(name)) { 3266 if (!node.hasAttribute(name)) { 3267 switch (typeof expected) { 3268 case "symbol": 3269 case "object": 3270 return expected; 3271 case "function": 3272 return expected; 3273 case "boolean": 3274 if (false === expected) return expected; 3275 } 3276 return void 0 === expected ? void 0 : null; 3277 } 3278 node = node.getAttribute(name); 3279 if ("" === node && true === expected) return true; 3280 checkAttributeStringCoercion(expected, name); 3281 return node === "" + expected ? expected : node; 3282 } 3283 } 3284 function setValueForAttribute(node, name, value) { 3285 if (isAttributeNameSafe(name)) 3286 if (null === value) node.removeAttribute(name); 3287 else { 3288 switch (typeof value) { 3289 case "undefined": 3290 case "function": 3291 case "symbol": 3292 node.removeAttribute(name); 3293 return; 3294 case "boolean": 3295 var prefix2 = name.toLowerCase().slice(0, 5); 3296 if ("data-" !== prefix2 && "aria-" !== prefix2) { 3297 node.removeAttribute(name); 3298 return; 3299 } 3300 } 3301 checkAttributeStringCoercion(value, name); 3302 node.setAttribute(name, "" + value); 3303 } 3304 } 3305 function setValueForKnownAttribute(node, name, value) { 3306 if (null === value) node.removeAttribute(name); 3307 else { 3308 switch (typeof value) { 3309 case "undefined": 3310 case "function": 3311 case "symbol": 3312 case "boolean": 3313 node.removeAttribute(name); 3314 return; 3315 } 3316 checkAttributeStringCoercion(value, name); 3317 node.setAttribute(name, "" + value); 3318 } 3319 } 3320 function setValueForNamespacedAttribute(node, namespace, name, value) { 3321 if (null === value) node.removeAttribute(name); 3322 else { 3323 switch (typeof value) { 3324 case "undefined": 3325 case "function": 3326 case "symbol": 3327 case "boolean": 3328 node.removeAttribute(name); 3329 return; 3330 } 3331 checkAttributeStringCoercion(value, name); 3332 node.setAttributeNS(namespace, name, "" + value); 3333 } 3334 } 3335 function getToStringValue(value) { 3336 switch (typeof value) { 3337 case "bigint": 3338 case "boolean": 3339 case "number": 3340 case "string": 3341 case "undefined": 3342 return value; 3343 case "object": 3344 return checkFormFieldValueStringCoercion(value), value; 3345 default: 3346 return ""; 3347 } 3348 } 3349 function isCheckable(elem) { 3350 var type = elem.type; 3351 return (elem = elem.nodeName) && "input" === elem.toLowerCase() && ("checkbox" === type || "radio" === type); 3352 } 3353 function trackValueOnNode(node, valueField, currentValue) { 3354 var descriptor = Object.getOwnPropertyDescriptor( 3355 node.constructor.prototype, 3356 valueField 3357 ); 3358 if (!node.hasOwnProperty(valueField) && "undefined" !== typeof descriptor && "function" === typeof descriptor.get && "function" === typeof descriptor.set) { 3359 var get = descriptor.get, set = descriptor.set; 3360 Object.defineProperty(node, valueField, { 3361 configurable: true, 3362 get: function() { 3363 return get.call(this); 3364 }, 3365 set: function(value) { 3366 checkFormFieldValueStringCoercion(value); 3367 currentValue = "" + value; 3368 set.call(this, value); 3369 } 3370 }); 3371 Object.defineProperty(node, valueField, { 3372 enumerable: descriptor.enumerable 3373 }); 3374 return { 3375 getValue: function() { 3376 return currentValue; 3377 }, 3378 setValue: function(value) { 3379 checkFormFieldValueStringCoercion(value); 3380 currentValue = "" + value; 3381 }, 3382 stopTracking: function() { 3383 node._valueTracker = null; 3384 delete node[valueField]; 3385 } 3386 }; 3387 } 3388 } 3389 function track2(node) { 3390 if (!node._valueTracker) { 3391 var valueField = isCheckable(node) ? "checked" : "value"; 3392 node._valueTracker = trackValueOnNode( 3393 node, 3394 valueField, 3395 "" + node[valueField] 3396 ); 3397 } 3398 } 3399 function updateValueIfChanged(node) { 3400 if (!node) return false; 3401 var tracker = node._valueTracker; 3402 if (!tracker) return true; 3403 var lastValue = tracker.getValue(); 3404 var value = ""; 3405 node && (value = isCheckable(node) ? node.checked ? "true" : "false" : node.value); 3406 node = value; 3407 return node !== lastValue ? (tracker.setValue(node), true) : false; 3408 } 3409 function getActiveElement(doc) { 3410 doc = doc || ("undefined" !== typeof document ? document : void 0); 3411 if ("undefined" === typeof doc) return null; 3412 try { 3413 return doc.activeElement || doc.body; 3414 } catch (e3) { 3415 return doc.body; 3416 } 3417 } 3418 function escapeSelectorAttributeValueInsideDoubleQuotes(value) { 3419 return value.replace( 3420 escapeSelectorAttributeValueInsideDoubleQuotesRegex, 3421 function(ch) { 3422 return "\\" + ch.charCodeAt(0).toString(16) + " "; 3423 } 3424 ); 3425 } 3426 function validateInputProps(element, props) { 3427 void 0 === props.checked || void 0 === props.defaultChecked || didWarnCheckedDefaultChecked || (console.error( 3428 "%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", 3429 getCurrentFiberOwnerNameInDevOrNull() || "A component", 3430 props.type 3431 ), didWarnCheckedDefaultChecked = true); 3432 void 0 === props.value || void 0 === props.defaultValue || didWarnValueDefaultValue$1 || (console.error( 3433 "%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components", 3434 getCurrentFiberOwnerNameInDevOrNull() || "A component", 3435 props.type 3436 ), didWarnValueDefaultValue$1 = true); 3437 } 3438 function updateInput(element, value, defaultValue, lastDefaultValue, checked, defaultChecked, type, name) { 3439 element.name = ""; 3440 null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type ? (checkAttributeStringCoercion(type, "type"), element.type = type) : element.removeAttribute("type"); 3441 if (null != value) 3442 if ("number" === type) { 3443 if (0 === value && "" === element.value || element.value != value) 3444 element.value = "" + getToStringValue(value); 3445 } else 3446 element.value !== "" + getToStringValue(value) && (element.value = "" + getToStringValue(value)); 3447 else 3448 "submit" !== type && "reset" !== type || element.removeAttribute("value"); 3449 null != value ? setDefaultValue(element, type, getToStringValue(value)) : null != defaultValue ? setDefaultValue(element, type, getToStringValue(defaultValue)) : null != lastDefaultValue && element.removeAttribute("value"); 3450 null == checked && null != defaultChecked && (element.defaultChecked = !!defaultChecked); 3451 null != checked && (element.checked = checked && "function" !== typeof checked && "symbol" !== typeof checked); 3452 null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name ? (checkAttributeStringCoercion(name, "name"), element.name = "" + getToStringValue(name)) : element.removeAttribute("name"); 3453 } 3454 function initInput(element, value, defaultValue, checked, defaultChecked, type, name, isHydrating2) { 3455 null != type && "function" !== typeof type && "symbol" !== typeof type && "boolean" !== typeof type && (checkAttributeStringCoercion(type, "type"), element.type = type); 3456 if (null != value || null != defaultValue) { 3457 if (!("submit" !== type && "reset" !== type || void 0 !== value && null !== value)) { 3458 track2(element); 3459 return; 3460 } 3461 defaultValue = null != defaultValue ? "" + getToStringValue(defaultValue) : ""; 3462 value = null != value ? "" + getToStringValue(value) : defaultValue; 3463 isHydrating2 || value === element.value || (element.value = value); 3464 element.defaultValue = value; 3465 } 3466 checked = null != checked ? checked : defaultChecked; 3467 checked = "function" !== typeof checked && "symbol" !== typeof checked && !!checked; 3468 element.checked = isHydrating2 ? element.checked : !!checked; 3469 element.defaultChecked = !!checked; 3470 null != name && "function" !== typeof name && "symbol" !== typeof name && "boolean" !== typeof name && (checkAttributeStringCoercion(name, "name"), element.name = name); 3471 track2(element); 3472 } 3473 function setDefaultValue(node, type, value) { 3474 "number" === type && getActiveElement(node.ownerDocument) === node || node.defaultValue === "" + value || (node.defaultValue = "" + value); 3475 } 3476 function validateOptionProps(element, props) { 3477 null == props.value && ("object" === typeof props.children && null !== props.children ? React19.Children.forEach(props.children, function(child) { 3478 null == child || "string" === typeof child || "number" === typeof child || "bigint" === typeof child || didWarnInvalidChild || (didWarnInvalidChild = true, console.error( 3479 "Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to <option>." 3480 )); 3481 }) : null == props.dangerouslySetInnerHTML || didWarnInvalidInnerHTML || (didWarnInvalidInnerHTML = true, console.error( 3482 "Pass a `value` prop if you set dangerouslyInnerHTML so React knows which value should be selected." 3483 ))); 3484 null == props.selected || didWarnSelectedSetOnOption || (console.error( 3485 "Use the `defaultValue` or `value` props on <select> instead of setting `selected` on <option>." 3486 ), didWarnSelectedSetOnOption = true); 3487 } 3488 function getDeclarationErrorAddendum() { 3489 var ownerName = getCurrentFiberOwnerNameInDevOrNull(); 3490 return ownerName ? "\n\nCheck the render method of `" + ownerName + "`." : ""; 3491 } 3492 function updateOptions(node, multiple, propValue, setDefaultSelected) { 3493 node = node.options; 3494 if (multiple) { 3495 multiple = {}; 3496 for (var i3 = 0; i3 < propValue.length; i3++) 3497 multiple["$" + propValue[i3]] = true; 3498 for (propValue = 0; propValue < node.length; propValue++) 3499 i3 = multiple.hasOwnProperty("$" + node[propValue].value), node[propValue].selected !== i3 && (node[propValue].selected = i3), i3 && setDefaultSelected && (node[propValue].defaultSelected = true); 3500 } else { 3501 propValue = "" + getToStringValue(propValue); 3502 multiple = null; 3503 for (i3 = 0; i3 < node.length; i3++) { 3504 if (node[i3].value === propValue) { 3505 node[i3].selected = true; 3506 setDefaultSelected && (node[i3].defaultSelected = true); 3507 return; 3508 } 3509 null !== multiple || node[i3].disabled || (multiple = node[i3]); 3510 } 3511 null !== multiple && (multiple.selected = true); 3512 } 3513 } 3514 function validateSelectProps(element, props) { 3515 for (element = 0; element < valuePropNames.length; element++) { 3516 var propName = valuePropNames[element]; 3517 if (null != props[propName]) { 3518 var propNameIsArray = isArrayImpl(props[propName]); 3519 props.multiple && !propNameIsArray ? console.error( 3520 "The `%s` prop supplied to <select> must be an array if `multiple` is true.%s", 3521 propName, 3522 getDeclarationErrorAddendum() 3523 ) : !props.multiple && propNameIsArray && console.error( 3524 "The `%s` prop supplied to <select> must be a scalar value if `multiple` is false.%s", 3525 propName, 3526 getDeclarationErrorAddendum() 3527 ); 3528 } 3529 } 3530 void 0 === props.value || void 0 === props.defaultValue || didWarnValueDefaultValue || (console.error( 3531 "Select elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled select element and remove one of these props. More info: https://react.dev/link/controlled-components" 3532 ), didWarnValueDefaultValue = true); 3533 } 3534 function validateTextareaProps(element, props) { 3535 void 0 === props.value || void 0 === props.defaultValue || didWarnValDefaultVal || (console.error( 3536 "%s contains a textarea with both value and defaultValue props. Textarea elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled textarea and remove one of these props. More info: https://react.dev/link/controlled-components", 3537 getCurrentFiberOwnerNameInDevOrNull() || "A component" 3538 ), didWarnValDefaultVal = true); 3539 null != props.children && null == props.value && console.error( 3540 "Use the `defaultValue` or `value` props instead of setting children on <textarea>." 3541 ); 3542 } 3543 function updateTextarea(element, value, defaultValue) { 3544 if (null != value && (value = "" + getToStringValue(value), value !== element.value && (element.value = value), null == defaultValue)) { 3545 element.defaultValue !== value && (element.defaultValue = value); 3546 return; 3547 } 3548 element.defaultValue = null != defaultValue ? "" + getToStringValue(defaultValue) : ""; 3549 } 3550 function initTextarea(element, value, defaultValue, children) { 3551 if (null == value) { 3552 if (null != children) { 3553 if (null != defaultValue) 3554 throw Error( 3555 "If you supply `defaultValue` on a <textarea>, do not pass children." 3556 ); 3557 if (isArrayImpl(children)) { 3558 if (1 < children.length) 3559 throw Error("<textarea> can only have at most one child."); 3560 children = children[0]; 3561 } 3562 defaultValue = children; 3563 } 3564 null == defaultValue && (defaultValue = ""); 3565 value = defaultValue; 3566 } 3567 defaultValue = getToStringValue(value); 3568 element.defaultValue = defaultValue; 3569 children = element.textContent; 3570 children === defaultValue && "" !== children && null !== children && (element.value = children); 3571 track2(element); 3572 } 3573 function findNotableNode(node, indent) { 3574 return void 0 === node.serverProps && 0 === node.serverTail.length && 1 === node.children.length && 3 < node.distanceFromLeaf && node.distanceFromLeaf > 15 - indent ? findNotableNode(node.children[0], indent) : node; 3575 } 3576 function indentation(indent) { 3577 return " " + " ".repeat(indent); 3578 } 3579 function added(indent) { 3580 return "+ " + " ".repeat(indent); 3581 } 3582 function removed(indent) { 3583 return "- " + " ".repeat(indent); 3584 } 3585 function describeFiberType(fiber) { 3586 switch (fiber.tag) { 3587 case 26: 3588 case 27: 3589 case 5: 3590 return fiber.type; 3591 case 16: 3592 return "Lazy"; 3593 case 31: 3594 return "Activity"; 3595 case 13: 3596 return "Suspense"; 3597 case 19: 3598 return "SuspenseList"; 3599 case 0: 3600 case 15: 3601 return fiber = fiber.type, fiber.displayName || fiber.name || null; 3602 case 11: 3603 return fiber = fiber.type.render, fiber.displayName || fiber.name || null; 3604 case 1: 3605 return fiber = fiber.type, fiber.displayName || fiber.name || null; 3606 default: 3607 return null; 3608 } 3609 } 3610 function describeTextNode(content, maxLength) { 3611 return needsEscaping.test(content) ? (content = JSON.stringify(content), content.length > maxLength - 2 ? 8 > maxLength ? '{"..."}' : "{" + content.slice(0, maxLength - 7) + '..."}' : "{" + content + "}") : content.length > maxLength ? 5 > maxLength ? '{"..."}' : content.slice(0, maxLength - 3) + "..." : content; 3612 } 3613 function describeTextDiff(clientText, serverProps, indent) { 3614 var maxLength = 120 - 2 * indent; 3615 if (null === serverProps) 3616 return added(indent) + describeTextNode(clientText, maxLength) + "\n"; 3617 if ("string" === typeof serverProps) { 3618 for (var firstDiff = 0; firstDiff < serverProps.length && firstDiff < clientText.length && serverProps.charCodeAt(firstDiff) === clientText.charCodeAt(firstDiff); firstDiff++) ; 3619 firstDiff > maxLength - 8 && 10 < firstDiff && (clientText = "..." + clientText.slice(firstDiff - 8), serverProps = "..." + serverProps.slice(firstDiff - 8)); 3620 return added(indent) + describeTextNode(clientText, maxLength) + "\n" + removed(indent) + describeTextNode(serverProps, maxLength) + "\n"; 3621 } 3622 return indentation(indent) + describeTextNode(clientText, maxLength) + "\n"; 3623 } 3624 function objectName(object) { 3625 return Object.prototype.toString.call(object).replace(/^\[object (.*)\]$/, function(m3, p0) { 3626 return p0; 3627 }); 3628 } 3629 function describeValue(value, maxLength) { 3630 switch (typeof value) { 3631 case "string": 3632 return value = JSON.stringify(value), value.length > maxLength ? 5 > maxLength ? '"..."' : value.slice(0, maxLength - 4) + '..."' : value; 3633 case "object": 3634 if (null === value) return "null"; 3635 if (isArrayImpl(value)) return "[...]"; 3636 if (value.$$typeof === REACT_ELEMENT_TYPE) 3637 return (maxLength = getComponentNameFromType(value.type)) ? "<" + maxLength + ">" : "<...>"; 3638 var name = objectName(value); 3639 if ("Object" === name) { 3640 name = ""; 3641 maxLength -= 2; 3642 for (var propName in value) 3643 if (value.hasOwnProperty(propName)) { 3644 var jsonPropName = JSON.stringify(propName); 3645 jsonPropName !== '"' + propName + '"' && (propName = jsonPropName); 3646 maxLength -= propName.length - 2; 3647 jsonPropName = describeValue( 3648 value[propName], 3649 15 > maxLength ? maxLength : 15 3650 ); 3651 maxLength -= jsonPropName.length; 3652 if (0 > maxLength) { 3653 name += "" === name ? "..." : ", ..."; 3654 break; 3655 } 3656 name += ("" === name ? "" : ",") + propName + ":" + jsonPropName; 3657 } 3658 return "{" + name + "}"; 3659 } 3660 return name; 3661 case "function": 3662 return (maxLength = value.displayName || value.name) ? "function " + maxLength : "function"; 3663 default: 3664 return String(value); 3665 } 3666 } 3667 function describePropValue(value, maxLength) { 3668 return "string" !== typeof value || needsEscaping.test(value) ? "{" + describeValue(value, maxLength - 2) + "}" : value.length > maxLength - 2 ? 5 > maxLength ? '"..."' : '"' + value.slice(0, maxLength - 5) + '..."' : '"' + value + '"'; 3669 } 3670 function describeExpandedElement(type, props, rowPrefix) { 3671 var remainingRowLength = 120 - rowPrefix.length - type.length, properties = [], propName; 3672 for (propName in props) 3673 if (props.hasOwnProperty(propName) && "children" !== propName) { 3674 var propValue = describePropValue( 3675 props[propName], 3676 120 - rowPrefix.length - propName.length - 1 3677 ); 3678 remainingRowLength -= propName.length + propValue.length + 2; 3679 properties.push(propName + "=" + propValue); 3680 } 3681 return 0 === properties.length ? rowPrefix + "<" + type + ">\n" : 0 < remainingRowLength ? rowPrefix + "<" + type + " " + properties.join(" ") + ">\n" : rowPrefix + "<" + type + "\n" + rowPrefix + " " + properties.join("\n" + rowPrefix + " ") + "\n" + rowPrefix + ">\n"; 3682 } 3683 function describePropertiesDiff(clientObject, serverObject, indent) { 3684 var properties = "", remainingServerProperties = assign({}, serverObject), propName; 3685 for (propName in clientObject) 3686 if (clientObject.hasOwnProperty(propName)) { 3687 delete remainingServerProperties[propName]; 3688 var maxLength = 120 - 2 * indent - propName.length - 2, clientPropValue = describeValue(clientObject[propName], maxLength); 3689 serverObject.hasOwnProperty(propName) ? (maxLength = describeValue(serverObject[propName], maxLength), properties += added(indent) + propName + ": " + clientPropValue + "\n", properties += removed(indent) + propName + ": " + maxLength + "\n") : properties += added(indent) + propName + ": " + clientPropValue + "\n"; 3690 } 3691 for (var _propName in remainingServerProperties) 3692 remainingServerProperties.hasOwnProperty(_propName) && (clientObject = describeValue( 3693 remainingServerProperties[_propName], 3694 120 - 2 * indent - _propName.length - 2 3695 ), properties += removed(indent) + _propName + ": " + clientObject + "\n"); 3696 return properties; 3697 } 3698 function describeElementDiff(type, clientProps, serverProps, indent) { 3699 var content = "", serverPropNames = /* @__PURE__ */ new Map(); 3700 for (propName$jscomp$0 in serverProps) 3701 serverProps.hasOwnProperty(propName$jscomp$0) && serverPropNames.set( 3702 propName$jscomp$0.toLowerCase(), 3703 propName$jscomp$0 3704 ); 3705 if (1 === serverPropNames.size && serverPropNames.has("children")) 3706 content += describeExpandedElement( 3707 type, 3708 clientProps, 3709 indentation(indent) 3710 ); 3711 else { 3712 for (var _propName2 in clientProps) 3713 if (clientProps.hasOwnProperty(_propName2) && "children" !== _propName2) { 3714 var maxLength$jscomp$0 = 120 - 2 * (indent + 1) - _propName2.length - 1, serverPropName = serverPropNames.get(_propName2.toLowerCase()); 3715 if (void 0 !== serverPropName) { 3716 serverPropNames.delete(_propName2.toLowerCase()); 3717 var propName$jscomp$0 = clientProps[_propName2]; 3718 serverPropName = serverProps[serverPropName]; 3719 var clientPropValue = describePropValue( 3720 propName$jscomp$0, 3721 maxLength$jscomp$0 3722 ); 3723 maxLength$jscomp$0 = describePropValue( 3724 serverPropName, 3725 maxLength$jscomp$0 3726 ); 3727 "object" === typeof propName$jscomp$0 && null !== propName$jscomp$0 && "object" === typeof serverPropName && null !== serverPropName && "Object" === objectName(propName$jscomp$0) && "Object" === objectName(serverPropName) && (2 < Object.keys(propName$jscomp$0).length || 2 < Object.keys(serverPropName).length || -1 < clientPropValue.indexOf("...") || -1 < maxLength$jscomp$0.indexOf("...")) ? content += indentation(indent + 1) + _propName2 + "={{\n" + describePropertiesDiff( 3728 propName$jscomp$0, 3729 serverPropName, 3730 indent + 2 3731 ) + indentation(indent + 1) + "}}\n" : (content += added(indent + 1) + _propName2 + "=" + clientPropValue + "\n", content += removed(indent + 1) + _propName2 + "=" + maxLength$jscomp$0 + "\n"); 3732 } else 3733 content += indentation(indent + 1) + _propName2 + "=" + describePropValue(clientProps[_propName2], maxLength$jscomp$0) + "\n"; 3734 } 3735 serverPropNames.forEach(function(propName) { 3736 if ("children" !== propName) { 3737 var maxLength = 120 - 2 * (indent + 1) - propName.length - 1; 3738 content += removed(indent + 1) + propName + "=" + describePropValue(serverProps[propName], maxLength) + "\n"; 3739 } 3740 }); 3741 content = "" === content ? indentation(indent) + "<" + type + ">\n" : indentation(indent) + "<" + type + "\n" + content + indentation(indent) + ">\n"; 3742 } 3743 type = serverProps.children; 3744 clientProps = clientProps.children; 3745 if ("string" === typeof type || "number" === typeof type || "bigint" === typeof type) { 3746 serverPropNames = ""; 3747 if ("string" === typeof clientProps || "number" === typeof clientProps || "bigint" === typeof clientProps) 3748 serverPropNames = "" + clientProps; 3749 content += describeTextDiff(serverPropNames, "" + type, indent + 1); 3750 } else if ("string" === typeof clientProps || "number" === typeof clientProps || "bigint" === typeof clientProps) 3751 content = null == type ? content + describeTextDiff("" + clientProps, null, indent + 1) : content + describeTextDiff("" + clientProps, void 0, indent + 1); 3752 return content; 3753 } 3754 function describeSiblingFiber(fiber, indent) { 3755 var type = describeFiberType(fiber); 3756 if (null === type) { 3757 type = ""; 3758 for (fiber = fiber.child; fiber; ) 3759 type += describeSiblingFiber(fiber, indent), fiber = fiber.sibling; 3760 return type; 3761 } 3762 return indentation(indent) + "<" + type + ">\n"; 3763 } 3764 function describeNode(node, indent) { 3765 var skipToNode = findNotableNode(node, indent); 3766 if (skipToNode !== node && (1 !== node.children.length || node.children[0] !== skipToNode)) 3767 return indentation(indent) + "...\n" + describeNode(skipToNode, indent + 1); 3768 skipToNode = ""; 3769 var debugInfo = node.fiber._debugInfo; 3770 if (debugInfo) 3771 for (var i3 = 0; i3 < debugInfo.length; i3++) { 3772 var serverComponentName = debugInfo[i3].name; 3773 "string" === typeof serverComponentName && (skipToNode += indentation(indent) + "<" + serverComponentName + ">\n", indent++); 3774 } 3775 debugInfo = ""; 3776 i3 = node.fiber.pendingProps; 3777 if (6 === node.fiber.tag) 3778 debugInfo = describeTextDiff(i3, node.serverProps, indent), indent++; 3779 else if (serverComponentName = describeFiberType(node.fiber), null !== serverComponentName) 3780 if (void 0 === node.serverProps) { 3781 debugInfo = indent; 3782 var maxLength = 120 - 2 * debugInfo - serverComponentName.length - 2, content = ""; 3783 for (propName in i3) 3784 if (i3.hasOwnProperty(propName) && "children" !== propName) { 3785 var propValue = describePropValue(i3[propName], 15); 3786 maxLength -= propName.length + propValue.length + 2; 3787 if (0 > maxLength) { 3788 content += " ..."; 3789 break; 3790 } 3791 content += " " + propName + "=" + propValue; 3792 } 3793 debugInfo = indentation(debugInfo) + "<" + serverComponentName + content + ">\n"; 3794 indent++; 3795 } else 3796 null === node.serverProps ? (debugInfo = describeExpandedElement( 3797 serverComponentName, 3798 i3, 3799 added(indent) 3800 ), indent++) : "string" === typeof node.serverProps ? console.error( 3801 "Should not have matched a non HostText fiber to a Text node. This is a bug in React." 3802 ) : (debugInfo = describeElementDiff( 3803 serverComponentName, 3804 i3, 3805 node.serverProps, 3806 indent 3807 ), indent++); 3808 var propName = ""; 3809 i3 = node.fiber.child; 3810 for (serverComponentName = 0; i3 && serverComponentName < node.children.length; ) 3811 maxLength = node.children[serverComponentName], maxLength.fiber === i3 ? (propName += describeNode(maxLength, indent), serverComponentName++) : propName += describeSiblingFiber(i3, indent), i3 = i3.sibling; 3812 i3 && 0 < node.children.length && (propName += indentation(indent) + "...\n"); 3813 i3 = node.serverTail; 3814 null === node.serverProps && indent--; 3815 for (node = 0; node < i3.length; node++) 3816 serverComponentName = i3[node], propName = "string" === typeof serverComponentName ? propName + (removed(indent) + describeTextNode(serverComponentName, 120 - 2 * indent) + "\n") : propName + describeExpandedElement( 3817 serverComponentName.type, 3818 serverComponentName.props, 3819 removed(indent) 3820 ); 3821 return skipToNode + debugInfo + propName; 3822 } 3823 function describeDiff(rootNode) { 3824 try { 3825 return "\n\n" + describeNode(rootNode, 0); 3826 } catch (x3) { 3827 return ""; 3828 } 3829 } 3830 function describeAncestors(ancestor, child, props) { 3831 for (var fiber = child, node = null, distanceFromLeaf = 0; fiber; ) 3832 fiber === ancestor && (distanceFromLeaf = 0), node = { 3833 fiber, 3834 children: null !== node ? [node] : [], 3835 serverProps: fiber === child ? props : fiber === ancestor ? null : void 0, 3836 serverTail: [], 3837 distanceFromLeaf 3838 }, distanceFromLeaf++, fiber = fiber.return; 3839 return null !== node ? describeDiff(node).replaceAll(/^[+-]/gm, ">") : ""; 3840 } 3841 function updatedAncestorInfoDev(oldInfo, tag) { 3842 var ancestorInfo = assign({}, oldInfo || emptyAncestorInfoDev), info = { tag }; 3843 -1 !== inScopeTags.indexOf(tag) && (ancestorInfo.aTagInScope = null, ancestorInfo.buttonTagInScope = null, ancestorInfo.nobrTagInScope = null); 3844 -1 !== buttonScopeTags.indexOf(tag) && (ancestorInfo.pTagInButtonScope = null); 3845 -1 !== specialTags.indexOf(tag) && "address" !== tag && "div" !== tag && "p" !== tag && (ancestorInfo.listItemTagAutoclosing = null, ancestorInfo.dlItemTagAutoclosing = null); 3846 ancestorInfo.current = info; 3847 "form" === tag && (ancestorInfo.formTag = info); 3848 "a" === tag && (ancestorInfo.aTagInScope = info); 3849 "button" === tag && (ancestorInfo.buttonTagInScope = info); 3850 "nobr" === tag && (ancestorInfo.nobrTagInScope = info); 3851 "p" === tag && (ancestorInfo.pTagInButtonScope = info); 3852 "li" === tag && (ancestorInfo.listItemTagAutoclosing = info); 3853 if ("dd" === tag || "dt" === tag) 3854 ancestorInfo.dlItemTagAutoclosing = info; 3855 "#document" === tag || "html" === tag ? ancestorInfo.containerTagInScope = null : ancestorInfo.containerTagInScope || (ancestorInfo.containerTagInScope = info); 3856 null !== oldInfo || "#document" !== tag && "html" !== tag && "body" !== tag ? true === ancestorInfo.implicitRootScope && (ancestorInfo.implicitRootScope = false) : ancestorInfo.implicitRootScope = true; 3857 return ancestorInfo; 3858 } 3859 function isTagValidWithParent(tag, parentTag, implicitRootScope) { 3860 switch (parentTag) { 3861 case "select": 3862 return "hr" === tag || "option" === tag || "optgroup" === tag || "script" === tag || "template" === tag || "#text" === tag; 3863 case "optgroup": 3864 return "option" === tag || "#text" === tag; 3865 case "option": 3866 return "#text" === tag; 3867 case "tr": 3868 return "th" === tag || "td" === tag || "style" === tag || "script" === tag || "template" === tag; 3869 case "tbody": 3870 case "thead": 3871 case "tfoot": 3872 return "tr" === tag || "style" === tag || "script" === tag || "template" === tag; 3873 case "colgroup": 3874 return "col" === tag || "template" === tag; 3875 case "table": 3876 return "caption" === tag || "colgroup" === tag || "tbody" === tag || "tfoot" === tag || "thead" === tag || "style" === tag || "script" === tag || "template" === tag; 3877 case "head": 3878 return "base" === tag || "basefont" === tag || "bgsound" === tag || "link" === tag || "meta" === tag || "title" === tag || "noscript" === tag || "noframes" === tag || "style" === tag || "script" === tag || "template" === tag; 3879 case "html": 3880 if (implicitRootScope) break; 3881 return "head" === tag || "body" === tag || "frameset" === tag; 3882 case "frameset": 3883 return "frame" === tag; 3884 case "#document": 3885 if (!implicitRootScope) return "html" === tag; 3886 } 3887 switch (tag) { 3888 case "h1": 3889 case "h2": 3890 case "h3": 3891 case "h4": 3892 case "h5": 3893 case "h6": 3894 return "h1" !== parentTag && "h2" !== parentTag && "h3" !== parentTag && "h4" !== parentTag && "h5" !== parentTag && "h6" !== parentTag; 3895 case "rp": 3896 case "rt": 3897 return -1 === impliedEndTags.indexOf(parentTag); 3898 case "caption": 3899 case "col": 3900 case "colgroup": 3901 case "frameset": 3902 case "frame": 3903 case "tbody": 3904 case "td": 3905 case "tfoot": 3906 case "th": 3907 case "thead": 3908 case "tr": 3909 return null == parentTag; 3910 case "head": 3911 return implicitRootScope || null === parentTag; 3912 case "html": 3913 return implicitRootScope && "#document" === parentTag || null === parentTag; 3914 case "body": 3915 return implicitRootScope && ("#document" === parentTag || "html" === parentTag) || null === parentTag; 3916 } 3917 return true; 3918 } 3919 function findInvalidAncestorForTag(tag, ancestorInfo) { 3920 switch (tag) { 3921 case "address": 3922 case "article": 3923 case "aside": 3924 case "blockquote": 3925 case "center": 3926 case "details": 3927 case "dialog": 3928 case "dir": 3929 case "div": 3930 case "dl": 3931 case "fieldset": 3932 case "figcaption": 3933 case "figure": 3934 case "footer": 3935 case "header": 3936 case "hgroup": 3937 case "main": 3938 case "menu": 3939 case "nav": 3940 case "ol": 3941 case "p": 3942 case "section": 3943 case "summary": 3944 case "ul": 3945 case "pre": 3946 case "listing": 3947 case "table": 3948 case "hr": 3949 case "xmp": 3950 case "h1": 3951 case "h2": 3952 case "h3": 3953 case "h4": 3954 case "h5": 3955 case "h6": 3956 return ancestorInfo.pTagInButtonScope; 3957 case "form": 3958 return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope; 3959 case "li": 3960 return ancestorInfo.listItemTagAutoclosing; 3961 case "dd": 3962 case "dt": 3963 return ancestorInfo.dlItemTagAutoclosing; 3964 case "button": 3965 return ancestorInfo.buttonTagInScope; 3966 case "a": 3967 return ancestorInfo.aTagInScope; 3968 case "nobr": 3969 return ancestorInfo.nobrTagInScope; 3970 } 3971 return null; 3972 } 3973 function findAncestor(parent, tagName) { 3974 for (; parent; ) { 3975 switch (parent.tag) { 3976 case 5: 3977 case 26: 3978 case 27: 3979 if (parent.type === tagName) return parent; 3980 } 3981 parent = parent.return; 3982 } 3983 return null; 3984 } 3985 function validateDOMNesting(childTag, ancestorInfo) { 3986 ancestorInfo = ancestorInfo || emptyAncestorInfoDev; 3987 var parentInfo = ancestorInfo.current; 3988 ancestorInfo = (parentInfo = isTagValidWithParent( 3989 childTag, 3990 parentInfo && parentInfo.tag, 3991 ancestorInfo.implicitRootScope 3992 ) ? null : parentInfo) ? null : findInvalidAncestorForTag(childTag, ancestorInfo); 3993 ancestorInfo = parentInfo || ancestorInfo; 3994 if (!ancestorInfo) return true; 3995 var ancestorTag = ancestorInfo.tag; 3996 ancestorInfo = String(!!parentInfo) + "|" + childTag + "|" + ancestorTag; 3997 if (didWarn[ancestorInfo]) return false; 3998 didWarn[ancestorInfo] = true; 3999 var ancestor = (ancestorInfo = current) ? findAncestor(ancestorInfo.return, ancestorTag) : null, ancestorDescription = null !== ancestorInfo && null !== ancestor ? describeAncestors(ancestor, ancestorInfo, null) : "", tagDisplayName = "<" + childTag + ">"; 4000 parentInfo ? (parentInfo = "", "table" === ancestorTag && "tr" === childTag && (parentInfo += " Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by the browser."), console.error( 4001 "In HTML, %s cannot be a child of <%s>.%s\nThis will cause a hydration error.%s", 4002 tagDisplayName, 4003 ancestorTag, 4004 parentInfo, 4005 ancestorDescription 4006 )) : console.error( 4007 "In HTML, %s cannot be a descendant of <%s>.\nThis will cause a hydration error.%s", 4008 tagDisplayName, 4009 ancestorTag, 4010 ancestorDescription 4011 ); 4012 ancestorInfo && (childTag = ancestorInfo.return, null === ancestor || null === childTag || ancestor === childTag && childTag._debugOwner === ancestorInfo._debugOwner || runWithFiberInDEV(ancestor, function() { 4013 console.error( 4014 "<%s> cannot contain a nested %s.\nSee this log for the ancestor stack trace.", 4015 ancestorTag, 4016 tagDisplayName 4017 ); 4018 })); 4019 return false; 4020 } 4021 function validateTextNesting(childText, parentTag, implicitRootScope) { 4022 if (implicitRootScope || isTagValidWithParent("#text", parentTag, false)) 4023 return true; 4024 implicitRootScope = "#text|" + parentTag; 4025 if (didWarn[implicitRootScope]) return false; 4026 didWarn[implicitRootScope] = true; 4027 var ancestor = (implicitRootScope = current) ? findAncestor(implicitRootScope, parentTag) : null; 4028 implicitRootScope = null !== implicitRootScope && null !== ancestor ? describeAncestors( 4029 ancestor, 4030 implicitRootScope, 4031 6 !== implicitRootScope.tag ? { children: null } : null 4032 ) : ""; 4033 /\S/.test(childText) ? console.error( 4034 "In HTML, text nodes cannot be a child of <%s>.\nThis will cause a hydration error.%s", 4035 parentTag, 4036 implicitRootScope 4037 ) : console.error( 4038 "In HTML, whitespace text nodes cannot be a child of <%s>. Make sure you don't have any extra whitespace between tags on each line of your source code.\nThis will cause a hydration error.%s", 4039 parentTag, 4040 implicitRootScope 4041 ); 4042 return false; 4043 } 4044 function setTextContent(node, text) { 4045 if (text) { 4046 var firstChild = node.firstChild; 4047 if (firstChild && firstChild === node.lastChild && 3 === firstChild.nodeType) { 4048 firstChild.nodeValue = text; 4049 return; 4050 } 4051 } 4052 node.textContent = text; 4053 } 4054 function camelize2(string) { 4055 return string.replace(hyphenPattern, function(_3, character) { 4056 return character.toUpperCase(); 4057 }); 4058 } 4059 function setValueForStyle(style2, styleName, value) { 4060 var isCustomProperty = 0 === styleName.indexOf("--"); 4061 isCustomProperty || (-1 < styleName.indexOf("-") ? warnedStyleNames.hasOwnProperty(styleName) && warnedStyleNames[styleName] || (warnedStyleNames[styleName] = true, console.error( 4062 "Unsupported style property %s. Did you mean %s?", 4063 styleName, 4064 camelize2(styleName.replace(msPattern, "ms-")) 4065 )) : badVendoredStyleNamePattern.test(styleName) ? warnedStyleNames.hasOwnProperty(styleName) && warnedStyleNames[styleName] || (warnedStyleNames[styleName] = true, console.error( 4066 "Unsupported vendor-prefixed style property %s. Did you mean %s?", 4067 styleName, 4068 styleName.charAt(0).toUpperCase() + styleName.slice(1) 4069 )) : !badStyleValueWithSemicolonPattern.test(value) || warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value] || (warnedStyleValues[value] = true, console.error( 4070 `Style property values shouldn't contain a semicolon. Try "%s: %s" instead.`, 4071 styleName, 4072 value.replace(badStyleValueWithSemicolonPattern, "") 4073 )), "number" === typeof value && (isNaN(value) ? warnedForNaNValue || (warnedForNaNValue = true, console.error( 4074 "`NaN` is an invalid value for the `%s` css style property.", 4075 styleName 4076 )) : isFinite(value) || warnedForInfinityValue || (warnedForInfinityValue = true, console.error( 4077 "`Infinity` is an invalid value for the `%s` css style property.", 4078 styleName 4079 )))); 4080 null == value || "boolean" === typeof value || "" === value ? isCustomProperty ? style2.setProperty(styleName, "") : "float" === styleName ? style2.cssFloat = "" : style2[styleName] = "" : isCustomProperty ? style2.setProperty(styleName, value) : "number" !== typeof value || 0 === value || unitlessNumbers.has(styleName) ? "float" === styleName ? style2.cssFloat = value : (checkCSSPropertyStringCoercion(value, styleName), style2[styleName] = ("" + value).trim()) : style2[styleName] = value + "px"; 4081 } 4082 function setValueForStyles(node, styles, prevStyles) { 4083 if (null != styles && "object" !== typeof styles) 4084 throw Error( 4085 "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." 4086 ); 4087 styles && Object.freeze(styles); 4088 node = node.style; 4089 if (null != prevStyles) { 4090 if (styles) { 4091 var expandedUpdates = {}; 4092 if (prevStyles) { 4093 for (var key in prevStyles) 4094 if (prevStyles.hasOwnProperty(key) && !styles.hasOwnProperty(key)) 4095 for (var longhands = shorthandToLonghand[key] || [key], i3 = 0; i3 < longhands.length; i3++) 4096 expandedUpdates[longhands[i3]] = key; 4097 } 4098 for (var _key in styles) 4099 if (styles.hasOwnProperty(_key) && (!prevStyles || prevStyles[_key] !== styles[_key])) 4100 for (key = shorthandToLonghand[_key] || [_key], longhands = 0; longhands < key.length; longhands++) 4101 expandedUpdates[key[longhands]] = _key; 4102 _key = {}; 4103 for (var key$jscomp$0 in styles) 4104 for (key = shorthandToLonghand[key$jscomp$0] || [key$jscomp$0], longhands = 0; longhands < key.length; longhands++) 4105 _key[key[longhands]] = key$jscomp$0; 4106 key$jscomp$0 = {}; 4107 for (var _key2 in expandedUpdates) 4108 if (key = expandedUpdates[_key2], (longhands = _key[_key2]) && key !== longhands && (i3 = key + "," + longhands, !key$jscomp$0[i3])) { 4109 key$jscomp$0[i3] = true; 4110 i3 = console; 4111 var value = styles[key]; 4112 i3.error.call( 4113 i3, 4114 "%s a style property during rerender (%s) when a conflicting property is set (%s) can lead to styling bugs. To avoid this, don't mix shorthand and non-shorthand properties for the same value; instead, replace the shorthand with separate values.", 4115 null == value || "boolean" === typeof value || "" === value ? "Removing" : "Updating", 4116 key, 4117 longhands 4118 ); 4119 } 4120 } 4121 for (var styleName in prevStyles) 4122 !prevStyles.hasOwnProperty(styleName) || null != styles && styles.hasOwnProperty(styleName) || (0 === styleName.indexOf("--") ? node.setProperty(styleName, "") : "float" === styleName ? node.cssFloat = "" : node[styleName] = ""); 4123 for (var _styleName in styles) 4124 _key2 = styles[_styleName], styles.hasOwnProperty(_styleName) && prevStyles[_styleName] !== _key2 && setValueForStyle(node, _styleName, _key2); 4125 } else 4126 for (expandedUpdates in styles) 4127 styles.hasOwnProperty(expandedUpdates) && setValueForStyle(node, expandedUpdates, styles[expandedUpdates]); 4128 } 4129 function isCustomElement(tagName) { 4130 if (-1 === tagName.indexOf("-")) return false; 4131 switch (tagName) { 4132 case "annotation-xml": 4133 case "color-profile": 4134 case "font-face": 4135 case "font-face-src": 4136 case "font-face-uri": 4137 case "font-face-format": 4138 case "font-face-name": 4139 case "missing-glyph": 4140 return false; 4141 default: 4142 return true; 4143 } 4144 } 4145 function getAttributeAlias(name) { 4146 return aliases.get(name) || name; 4147 } 4148 function validateProperty$1(tagName, name) { 4149 if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) 4150 return true; 4151 if (rARIACamel$1.test(name)) { 4152 tagName = "aria-" + name.slice(4).toLowerCase(); 4153 tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null; 4154 if (null == tagName) 4155 return console.error( 4156 "Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.", 4157 name 4158 ), warnedProperties$1[name] = true; 4159 if (name !== tagName) 4160 return console.error( 4161 "Invalid ARIA attribute `%s`. Did you mean `%s`?", 4162 name, 4163 tagName 4164 ), warnedProperties$1[name] = true; 4165 } 4166 if (rARIA$1.test(name)) { 4167 tagName = name.toLowerCase(); 4168 tagName = ariaProperties.hasOwnProperty(tagName) ? tagName : null; 4169 if (null == tagName) return warnedProperties$1[name] = true, false; 4170 name !== tagName && (console.error( 4171 "Unknown ARIA attribute `%s`. Did you mean `%s`?", 4172 name, 4173 tagName 4174 ), warnedProperties$1[name] = true); 4175 } 4176 return true; 4177 } 4178 function validateProperties$2(type, props) { 4179 var invalidProps = [], key; 4180 for (key in props) 4181 validateProperty$1(type, key) || invalidProps.push(key); 4182 props = invalidProps.map(function(prop) { 4183 return "`" + prop + "`"; 4184 }).join(", "); 4185 1 === invalidProps.length ? console.error( 4186 "Invalid aria prop %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props", 4187 props, 4188 type 4189 ) : 1 < invalidProps.length && console.error( 4190 "Invalid aria props %s on <%s> tag. For details, see https://react.dev/link/invalid-aria-props", 4191 props, 4192 type 4193 ); 4194 } 4195 function validateProperty(tagName, name, value, eventRegistry) { 4196 if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) 4197 return true; 4198 var lowerCasedName = name.toLowerCase(); 4199 if ("onfocusin" === lowerCasedName || "onfocusout" === lowerCasedName) 4200 return console.error( 4201 "React uses onFocus and onBlur instead of onFocusIn and onFocusOut. All React events are normalized to bubble, so onFocusIn and onFocusOut are not needed/supported by React." 4202 ), warnedProperties[name] = true; 4203 if ("function" === typeof value && ("form" === tagName && "action" === name || "input" === tagName && "formAction" === name || "button" === tagName && "formAction" === name)) 4204 return true; 4205 if (null != eventRegistry) { 4206 tagName = eventRegistry.possibleRegistrationNames; 4207 if (eventRegistry.registrationNameDependencies.hasOwnProperty(name)) 4208 return true; 4209 eventRegistry = tagName.hasOwnProperty(lowerCasedName) ? tagName[lowerCasedName] : null; 4210 if (null != eventRegistry) 4211 return console.error( 4212 "Invalid event handler property `%s`. Did you mean `%s`?", 4213 name, 4214 eventRegistry 4215 ), warnedProperties[name] = true; 4216 if (EVENT_NAME_REGEX.test(name)) 4217 return console.error( 4218 "Unknown event handler property `%s`. It will be ignored.", 4219 name 4220 ), warnedProperties[name] = true; 4221 } else if (EVENT_NAME_REGEX.test(name)) 4222 return INVALID_EVENT_NAME_REGEX.test(name) && console.error( 4223 "Invalid event handler property `%s`. React events use the camelCase naming convention, for example `onClick`.", 4224 name 4225 ), warnedProperties[name] = true; 4226 if (rARIA.test(name) || rARIACamel.test(name)) return true; 4227 if ("innerhtml" === lowerCasedName) 4228 return console.error( 4229 "Directly setting property `innerHTML` is not permitted. For more information, lookup documentation on `dangerouslySetInnerHTML`." 4230 ), warnedProperties[name] = true; 4231 if ("aria" === lowerCasedName) 4232 return console.error( 4233 "The `aria` attribute is reserved for future use in React. Pass individual `aria-` attributes instead." 4234 ), warnedProperties[name] = true; 4235 if ("is" === lowerCasedName && null !== value && void 0 !== value && "string" !== typeof value) 4236 return console.error( 4237 "Received a `%s` for a string attribute `is`. If this is expected, cast the value to a string.", 4238 typeof value 4239 ), warnedProperties[name] = true; 4240 if ("number" === typeof value && isNaN(value)) 4241 return console.error( 4242 "Received NaN for the `%s` attribute. If this is expected, cast the value to a string.", 4243 name 4244 ), warnedProperties[name] = true; 4245 if (possibleStandardNames.hasOwnProperty(lowerCasedName)) { 4246 if (lowerCasedName = possibleStandardNames[lowerCasedName], lowerCasedName !== name) 4247 return console.error( 4248 "Invalid DOM property `%s`. Did you mean `%s`?", 4249 name, 4250 lowerCasedName 4251 ), warnedProperties[name] = true; 4252 } else if (name !== lowerCasedName) 4253 return console.error( 4254 "React does not recognize the `%s` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `%s` instead. If you accidentally passed it from a parent component, remove it from the DOM element.", 4255 name, 4256 lowerCasedName 4257 ), warnedProperties[name] = true; 4258 switch (name) { 4259 case "dangerouslySetInnerHTML": 4260 case "children": 4261 case "style": 4262 case "suppressContentEditableWarning": 4263 case "suppressHydrationWarning": 4264 case "defaultValue": 4265 case "defaultChecked": 4266 case "innerHTML": 4267 case "ref": 4268 return true; 4269 case "innerText": 4270 case "textContent": 4271 return true; 4272 } 4273 switch (typeof value) { 4274 case "boolean": 4275 switch (name) { 4276 case "autoFocus": 4277 case "checked": 4278 case "multiple": 4279 case "muted": 4280 case "selected": 4281 case "contentEditable": 4282 case "spellCheck": 4283 case "draggable": 4284 case "value": 4285 case "autoReverse": 4286 case "externalResourcesRequired": 4287 case "focusable": 4288 case "preserveAlpha": 4289 case "allowFullScreen": 4290 case "async": 4291 case "autoPlay": 4292 case "controls": 4293 case "default": 4294 case "defer": 4295 case "disabled": 4296 case "disablePictureInPicture": 4297 case "disableRemotePlayback": 4298 case "formNoValidate": 4299 case "hidden": 4300 case "loop": 4301 case "noModule": 4302 case "noValidate": 4303 case "open": 4304 case "playsInline": 4305 case "readOnly": 4306 case "required": 4307 case "reversed": 4308 case "scoped": 4309 case "seamless": 4310 case "itemScope": 4311 case "capture": 4312 case "download": 4313 case "inert": 4314 return true; 4315 default: 4316 lowerCasedName = name.toLowerCase().slice(0, 5); 4317 if ("data-" === lowerCasedName || "aria-" === lowerCasedName) 4318 return true; 4319 value ? console.error( 4320 'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.', 4321 value, 4322 name, 4323 name, 4324 value, 4325 name 4326 ) : console.error( 4327 'Received `%s` for a non-boolean attribute `%s`.\n\nIf you want to write it to the DOM, pass a string instead: %s="%s" or %s={value.toString()}.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.', 4328 value, 4329 name, 4330 name, 4331 value, 4332 name, 4333 name, 4334 name 4335 ); 4336 return warnedProperties[name] = true; 4337 } 4338 case "function": 4339 case "symbol": 4340 return warnedProperties[name] = true, false; 4341 case "string": 4342 if ("false" === value || "true" === value) { 4343 switch (name) { 4344 case "checked": 4345 case "selected": 4346 case "multiple": 4347 case "muted": 4348 case "allowFullScreen": 4349 case "async": 4350 case "autoPlay": 4351 case "controls": 4352 case "default": 4353 case "defer": 4354 case "disabled": 4355 case "disablePictureInPicture": 4356 case "disableRemotePlayback": 4357 case "formNoValidate": 4358 case "hidden": 4359 case "loop": 4360 case "noModule": 4361 case "noValidate": 4362 case "open": 4363 case "playsInline": 4364 case "readOnly": 4365 case "required": 4366 case "reversed": 4367 case "scoped": 4368 case "seamless": 4369 case "itemScope": 4370 case "inert": 4371 break; 4372 default: 4373 return true; 4374 } 4375 console.error( 4376 "Received the string `%s` for the boolean attribute `%s`. %s Did you mean %s={%s}?", 4377 value, 4378 name, 4379 "false" === value ? "The browser will interpret it as a truthy value." : 'Although this works, it will not work as expected if you pass the string "false".', 4380 name, 4381 value 4382 ); 4383 warnedProperties[name] = true; 4384 } 4385 } 4386 return true; 4387 } 4388 function warnUnknownProperties(type, props, eventRegistry) { 4389 var unknownProps = [], key; 4390 for (key in props) 4391 validateProperty(type, key, props[key], eventRegistry) || unknownProps.push(key); 4392 props = unknownProps.map(function(prop) { 4393 return "`" + prop + "`"; 4394 }).join(", "); 4395 1 === unknownProps.length ? console.error( 4396 "Invalid value for prop %s on <%s> tag. Either remove it from the element, or pass a string or number value to keep it in the DOM. For details, see https://react.dev/link/attribute-behavior ", 4397 props, 4398 type 4399 ) : 1 < unknownProps.length && console.error( 4400 "Invalid values for props %s on <%s> tag. Either remove them from the element, or pass a string or number value to keep them in the DOM. For details, see https://react.dev/link/attribute-behavior ", 4401 props, 4402 type 4403 ); 4404 } 4405 function sanitizeURL(url) { 4406 return isJavaScriptProtocol.test("" + url) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : url; 4407 } 4408 function noop$1() { 4409 } 4410 function getEventTarget(nativeEvent) { 4411 nativeEvent = nativeEvent.target || nativeEvent.srcElement || window; 4412 nativeEvent.correspondingUseElement && (nativeEvent = nativeEvent.correspondingUseElement); 4413 return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent; 4414 } 4415 function restoreStateOfTarget(target) { 4416 var internalInstance = getInstanceFromNode(target); 4417 if (internalInstance && (target = internalInstance.stateNode)) { 4418 var props = target[internalPropsKey] || null; 4419 a: switch (target = internalInstance.stateNode, internalInstance.type) { 4420 case "input": 4421 updateInput( 4422 target, 4423 props.value, 4424 props.defaultValue, 4425 props.defaultValue, 4426 props.checked, 4427 props.defaultChecked, 4428 props.type, 4429 props.name 4430 ); 4431 internalInstance = props.name; 4432 if ("radio" === props.type && null != internalInstance) { 4433 for (props = target; props.parentNode; ) props = props.parentNode; 4434 checkAttributeStringCoercion(internalInstance, "name"); 4435 props = props.querySelectorAll( 4436 'input[name="' + escapeSelectorAttributeValueInsideDoubleQuotes( 4437 "" + internalInstance 4438 ) + '"][type="radio"]' 4439 ); 4440 for (internalInstance = 0; internalInstance < props.length; internalInstance++) { 4441 var otherNode = props[internalInstance]; 4442 if (otherNode !== target && otherNode.form === target.form) { 4443 var otherProps = otherNode[internalPropsKey] || null; 4444 if (!otherProps) 4445 throw Error( 4446 "ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported." 4447 ); 4448 updateInput( 4449 otherNode, 4450 otherProps.value, 4451 otherProps.defaultValue, 4452 otherProps.defaultValue, 4453 otherProps.checked, 4454 otherProps.defaultChecked, 4455 otherProps.type, 4456 otherProps.name 4457 ); 4458 } 4459 } 4460 for (internalInstance = 0; internalInstance < props.length; internalInstance++) 4461 otherNode = props[internalInstance], otherNode.form === target.form && updateValueIfChanged(otherNode); 4462 } 4463 break a; 4464 case "textarea": 4465 updateTextarea(target, props.value, props.defaultValue); 4466 break a; 4467 case "select": 4468 internalInstance = props.value, null != internalInstance && updateOptions(target, !!props.multiple, internalInstance, false); 4469 } 4470 } 4471 } 4472 function batchedUpdates$1(fn3, a3, b3) { 4473 if (isInsideEventHandler) return fn3(a3, b3); 4474 isInsideEventHandler = true; 4475 try { 4476 var JSCompiler_inline_result = fn3(a3); 4477 return JSCompiler_inline_result; 4478 } finally { 4479 if (isInsideEventHandler = false, null !== restoreTarget || null !== restoreQueue) { 4480 if (flushSyncWork$1(), restoreTarget && (a3 = restoreTarget, fn3 = restoreQueue, restoreQueue = restoreTarget = null, restoreStateOfTarget(a3), fn3)) 4481 for (a3 = 0; a3 < fn3.length; a3++) restoreStateOfTarget(fn3[a3]); 4482 } 4483 } 4484 } 4485 function getListener(inst, registrationName) { 4486 var stateNode = inst.stateNode; 4487 if (null === stateNode) return null; 4488 var props = stateNode[internalPropsKey] || null; 4489 if (null === props) return null; 4490 stateNode = props[registrationName]; 4491 a: switch (registrationName) { 4492 case "onClick": 4493 case "onClickCapture": 4494 case "onDoubleClick": 4495 case "onDoubleClickCapture": 4496 case "onMouseDown": 4497 case "onMouseDownCapture": 4498 case "onMouseMove": 4499 case "onMouseMoveCapture": 4500 case "onMouseUp": 4501 case "onMouseUpCapture": 4502 case "onMouseEnter": 4503 (props = !props.disabled) || (inst = inst.type, props = !("button" === inst || "input" === inst || "select" === inst || "textarea" === inst)); 4504 inst = !props; 4505 break a; 4506 default: 4507 inst = false; 4508 } 4509 if (inst) return null; 4510 if (stateNode && "function" !== typeof stateNode) 4511 throw Error( 4512 "Expected `" + registrationName + "` listener to be a function, instead got a value of `" + typeof stateNode + "` type." 4513 ); 4514 return stateNode; 4515 } 4516 function getData() { 4517 if (fallbackText) return fallbackText; 4518 var start2, startValue = startText, startLength = startValue.length, end, endValue = "value" in root2 ? root2.value : root2.textContent, endLength = endValue.length; 4519 for (start2 = 0; start2 < startLength && startValue[start2] === endValue[start2]; start2++) ; 4520 var minEnd = startLength - start2; 4521 for (end = 1; end <= minEnd && startValue[startLength - end] === endValue[endLength - end]; end++) ; 4522 return fallbackText = endValue.slice(start2, 1 < end ? 1 - end : void 0); 4523 } 4524 function getEventCharCode(nativeEvent) { 4525 var keyCode = nativeEvent.keyCode; 4526 "charCode" in nativeEvent ? (nativeEvent = nativeEvent.charCode, 0 === nativeEvent && 13 === keyCode && (nativeEvent = 13)) : nativeEvent = keyCode; 4527 10 === nativeEvent && (nativeEvent = 13); 4528 return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0; 4529 } 4530 function functionThatReturnsTrue() { 4531 return true; 4532 } 4533 function functionThatReturnsFalse() { 4534 return false; 4535 } 4536 function createSyntheticEvent(Interface) { 4537 function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) { 4538 this._reactName = reactName; 4539 this._targetInst = targetInst; 4540 this.type = reactEventType; 4541 this.nativeEvent = nativeEvent; 4542 this.target = nativeEventTarget; 4543 this.currentTarget = null; 4544 for (var propName in Interface) 4545 Interface.hasOwnProperty(propName) && (reactName = Interface[propName], this[propName] = reactName ? reactName(nativeEvent) : nativeEvent[propName]); 4546 this.isDefaultPrevented = (null != nativeEvent.defaultPrevented ? nativeEvent.defaultPrevented : false === nativeEvent.returnValue) ? functionThatReturnsTrue : functionThatReturnsFalse; 4547 this.isPropagationStopped = functionThatReturnsFalse; 4548 return this; 4549 } 4550 assign(SyntheticBaseEvent.prototype, { 4551 preventDefault: function() { 4552 this.defaultPrevented = true; 4553 var event = this.nativeEvent; 4554 event && (event.preventDefault ? event.preventDefault() : "unknown" !== typeof event.returnValue && (event.returnValue = false), this.isDefaultPrevented = functionThatReturnsTrue); 4555 }, 4556 stopPropagation: function() { 4557 var event = this.nativeEvent; 4558 event && (event.stopPropagation ? event.stopPropagation() : "unknown" !== typeof event.cancelBubble && (event.cancelBubble = true), this.isPropagationStopped = functionThatReturnsTrue); 4559 }, 4560 persist: function() { 4561 }, 4562 isPersistent: functionThatReturnsTrue 4563 }); 4564 return SyntheticBaseEvent; 4565 } 4566 function modifierStateGetter(keyArg) { 4567 var nativeEvent = this.nativeEvent; 4568 return nativeEvent.getModifierState ? nativeEvent.getModifierState(keyArg) : (keyArg = modifierKeyToProp[keyArg]) ? !!nativeEvent[keyArg] : false; 4569 } 4570 function getEventModifierState() { 4571 return modifierStateGetter; 4572 } 4573 function isFallbackCompositionEnd(domEventName, nativeEvent) { 4574 switch (domEventName) { 4575 case "keyup": 4576 return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode); 4577 case "keydown": 4578 return nativeEvent.keyCode !== START_KEYCODE; 4579 case "keypress": 4580 case "mousedown": 4581 case "focusout": 4582 return true; 4583 default: 4584 return false; 4585 } 4586 } 4587 function getDataFromCustomEvent(nativeEvent) { 4588 nativeEvent = nativeEvent.detail; 4589 return "object" === typeof nativeEvent && "data" in nativeEvent ? nativeEvent.data : null; 4590 } 4591 function getNativeBeforeInputChars(domEventName, nativeEvent) { 4592 switch (domEventName) { 4593 case "compositionend": 4594 return getDataFromCustomEvent(nativeEvent); 4595 case "keypress": 4596 if (nativeEvent.which !== SPACEBAR_CODE) return null; 4597 hasSpaceKeypress = true; 4598 return SPACEBAR_CHAR; 4599 case "textInput": 4600 return domEventName = nativeEvent.data, domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName; 4601 default: 4602 return null; 4603 } 4604 } 4605 function getFallbackBeforeInputChars(domEventName, nativeEvent) { 4606 if (isComposing) 4607 return "compositionend" === domEventName || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent) ? (domEventName = getData(), fallbackText = startText = root2 = null, isComposing = false, domEventName) : null; 4608 switch (domEventName) { 4609 case "paste": 4610 return null; 4611 case "keypress": 4612 if (!(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) || nativeEvent.ctrlKey && nativeEvent.altKey) { 4613 if (nativeEvent.char && 1 < nativeEvent.char.length) 4614 return nativeEvent.char; 4615 if (nativeEvent.which) 4616 return String.fromCharCode(nativeEvent.which); 4617 } 4618 return null; 4619 case "compositionend": 4620 return useFallbackCompositionData && "ko" !== nativeEvent.locale ? null : nativeEvent.data; 4621 default: 4622 return null; 4623 } 4624 } 4625 function isTextInputElement(elem) { 4626 var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); 4627 return "input" === nodeName ? !!supportedInputTypes[elem.type] : "textarea" === nodeName ? true : false; 4628 } 4629 function isEventSupported(eventNameSuffix) { 4630 if (!canUseDOM) return false; 4631 eventNameSuffix = "on" + eventNameSuffix; 4632 var isSupported = eventNameSuffix in document; 4633 isSupported || (isSupported = document.createElement("div"), isSupported.setAttribute(eventNameSuffix, "return;"), isSupported = "function" === typeof isSupported[eventNameSuffix]); 4634 return isSupported; 4635 } 4636 function createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) { 4637 restoreTarget ? restoreQueue ? restoreQueue.push(target) : restoreQueue = [target] : restoreTarget = target; 4638 inst = accumulateTwoPhaseListeners(inst, "onChange"); 4639 0 < inst.length && (nativeEvent = new SyntheticEvent( 4640 "onChange", 4641 "change", 4642 null, 4643 nativeEvent, 4644 target 4645 ), dispatchQueue.push({ event: nativeEvent, listeners: inst })); 4646 } 4647 function runEventInBatch(dispatchQueue) { 4648 processDispatchQueue(dispatchQueue, 0); 4649 } 4650 function getInstIfValueChanged(targetInst) { 4651 var targetNode = getNodeFromInstance(targetInst); 4652 if (updateValueIfChanged(targetNode)) return targetInst; 4653 } 4654 function getTargetInstForChangeEvent(domEventName, targetInst) { 4655 if ("change" === domEventName) return targetInst; 4656 } 4657 function stopWatchingForValueChange() { 4658 activeElement$1 && (activeElement$1.detachEvent("onpropertychange", handlePropertyChange), activeElementInst$1 = activeElement$1 = null); 4659 } 4660 function handlePropertyChange(nativeEvent) { 4661 if ("value" === nativeEvent.propertyName && getInstIfValueChanged(activeElementInst$1)) { 4662 var dispatchQueue = []; 4663 createAndAccumulateChangeEvent( 4664 dispatchQueue, 4665 activeElementInst$1, 4666 nativeEvent, 4667 getEventTarget(nativeEvent) 4668 ); 4669 batchedUpdates$1(runEventInBatch, dispatchQueue); 4670 } 4671 } 4672 function handleEventsForInputEventPolyfill(domEventName, target, targetInst) { 4673 "focusin" === domEventName ? (stopWatchingForValueChange(), activeElement$1 = target, activeElementInst$1 = targetInst, activeElement$1.attachEvent("onpropertychange", handlePropertyChange)) : "focusout" === domEventName && stopWatchingForValueChange(); 4674 } 4675 function getTargetInstForInputEventPolyfill(domEventName) { 4676 if ("selectionchange" === domEventName || "keyup" === domEventName || "keydown" === domEventName) 4677 return getInstIfValueChanged(activeElementInst$1); 4678 } 4679 function getTargetInstForClickEvent(domEventName, targetInst) { 4680 if ("click" === domEventName) return getInstIfValueChanged(targetInst); 4681 } 4682 function getTargetInstForInputOrChangeEvent(domEventName, targetInst) { 4683 if ("input" === domEventName || "change" === domEventName) 4684 return getInstIfValueChanged(targetInst); 4685 } 4686 function is3(x3, y3) { 4687 return x3 === y3 && (0 !== x3 || 1 / x3 === 1 / y3) || x3 !== x3 && y3 !== y3; 4688 } 4689 function shallowEqual(objA, objB) { 4690 if (objectIs(objA, objB)) return true; 4691 if ("object" !== typeof objA || null === objA || "object" !== typeof objB || null === objB) 4692 return false; 4693 var keysA = Object.keys(objA), keysB = Object.keys(objB); 4694 if (keysA.length !== keysB.length) return false; 4695 for (keysB = 0; keysB < keysA.length; keysB++) { 4696 var currentKey = keysA[keysB]; 4697 if (!hasOwnProperty.call(objB, currentKey) || !objectIs(objA[currentKey], objB[currentKey])) 4698 return false; 4699 } 4700 return true; 4701 } 4702 function getLeafNode(node) { 4703 for (; node && node.firstChild; ) node = node.firstChild; 4704 return node; 4705 } 4706 function getNodeForCharacterOffset(root3, offset) { 4707 var node = getLeafNode(root3); 4708 root3 = 0; 4709 for (var nodeEnd; node; ) { 4710 if (3 === node.nodeType) { 4711 nodeEnd = root3 + node.textContent.length; 4712 if (root3 <= offset && nodeEnd >= offset) 4713 return { node, offset: offset - root3 }; 4714 root3 = nodeEnd; 4715 } 4716 a: { 4717 for (; node; ) { 4718 if (node.nextSibling) { 4719 node = node.nextSibling; 4720 break a; 4721 } 4722 node = node.parentNode; 4723 } 4724 node = void 0; 4725 } 4726 node = getLeafNode(node); 4727 } 4728 } 4729 function containsNode(outerNode, innerNode) { 4730 return outerNode && innerNode ? outerNode === innerNode ? true : outerNode && 3 === outerNode.nodeType ? false : innerNode && 3 === innerNode.nodeType ? containsNode(outerNode, innerNode.parentNode) : "contains" in outerNode ? outerNode.contains(innerNode) : outerNode.compareDocumentPosition ? !!(outerNode.compareDocumentPosition(innerNode) & 16) : false : false; 4731 } 4732 function getActiveElementDeep(containerInfo) { 4733 containerInfo = null != containerInfo && null != containerInfo.ownerDocument && null != containerInfo.ownerDocument.defaultView ? containerInfo.ownerDocument.defaultView : window; 4734 for (var element = getActiveElement(containerInfo.document); element instanceof containerInfo.HTMLIFrameElement; ) { 4735 try { 4736 var JSCompiler_inline_result = "string" === typeof element.contentWindow.location.href; 4737 } catch (err) { 4738 JSCompiler_inline_result = false; 4739 } 4740 if (JSCompiler_inline_result) containerInfo = element.contentWindow; 4741 else break; 4742 element = getActiveElement(containerInfo.document); 4743 } 4744 return element; 4745 } 4746 function hasSelectionCapabilities(elem) { 4747 var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase(); 4748 return nodeName && ("input" === nodeName && ("text" === elem.type || "search" === elem.type || "tel" === elem.type || "url" === elem.type || "password" === elem.type) || "textarea" === nodeName || "true" === elem.contentEditable); 4749 } 4750 function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) { 4751 var doc = nativeEventTarget.window === nativeEventTarget ? nativeEventTarget.document : 9 === nativeEventTarget.nodeType ? nativeEventTarget : nativeEventTarget.ownerDocument; 4752 mouseDown || null == activeElement || activeElement !== getActiveElement(doc) || (doc = activeElement, "selectionStart" in doc && hasSelectionCapabilities(doc) ? doc = { start: doc.selectionStart, end: doc.selectionEnd } : (doc = (doc.ownerDocument && doc.ownerDocument.defaultView || window).getSelection(), doc = { 4753 anchorNode: doc.anchorNode, 4754 anchorOffset: doc.anchorOffset, 4755 focusNode: doc.focusNode, 4756 focusOffset: doc.focusOffset 4757 }), lastSelection && shallowEqual(lastSelection, doc) || (lastSelection = doc, doc = accumulateTwoPhaseListeners(activeElementInst, "onSelect"), 0 < doc.length && (nativeEvent = new SyntheticEvent( 4758 "onSelect", 4759 "select", 4760 null, 4761 nativeEvent, 4762 nativeEventTarget 4763 ), dispatchQueue.push({ event: nativeEvent, listeners: doc }), nativeEvent.target = activeElement))); 4764 } 4765 function makePrefixMap(styleProp, eventName) { 4766 var prefixes = {}; 4767 prefixes[styleProp.toLowerCase()] = eventName.toLowerCase(); 4768 prefixes["Webkit" + styleProp] = "webkit" + eventName; 4769 prefixes["Moz" + styleProp] = "moz" + eventName; 4770 return prefixes; 4771 } 4772 function getVendorPrefixedEventName(eventName) { 4773 if (prefixedEventNames[eventName]) return prefixedEventNames[eventName]; 4774 if (!vendorPrefixes[eventName]) return eventName; 4775 var prefixMap = vendorPrefixes[eventName], styleProp; 4776 for (styleProp in prefixMap) 4777 if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) 4778 return prefixedEventNames[eventName] = prefixMap[styleProp]; 4779 return eventName; 4780 } 4781 function registerSimpleEvent(domEventName, reactName) { 4782 topLevelEventsToReactNames.set(domEventName, reactName); 4783 registerTwoPhaseEvent(reactName, [domEventName]); 4784 } 4785 function getArrayKind(array) { 4786 for (var kind = EMPTY_ARRAY, i3 = 0; i3 < array.length; i3++) { 4787 var value = array[i3]; 4788 if ("object" === typeof value && null !== value) 4789 if (isArrayImpl(value) && 2 === value.length && "string" === typeof value[0]) { 4790 if (kind !== EMPTY_ARRAY && kind !== ENTRIES_ARRAY) 4791 return COMPLEX_ARRAY; 4792 kind = ENTRIES_ARRAY; 4793 } else return COMPLEX_ARRAY; 4794 else { 4795 if ("function" === typeof value || "string" === typeof value && 50 < value.length || kind !== EMPTY_ARRAY && kind !== PRIMITIVE_ARRAY) 4796 return COMPLEX_ARRAY; 4797 kind = PRIMITIVE_ARRAY; 4798 } 4799 } 4800 return kind; 4801 } 4802 function addObjectToProperties(object, properties, indent, prefix2) { 4803 for (var key in object) 4804 hasOwnProperty.call(object, key) && "_" !== key[0] && addValueToProperties(key, object[key], properties, indent, prefix2); 4805 } 4806 function addValueToProperties(propertyName, value, properties, indent, prefix2) { 4807 switch (typeof value) { 4808 case "object": 4809 if (null === value) { 4810 value = "null"; 4811 break; 4812 } else { 4813 if (value.$$typeof === REACT_ELEMENT_TYPE) { 4814 var typeName2 = getComponentNameFromType(value.type) || "\u2026", key = value.key; 4815 value = value.props; 4816 var propsKeys = Object.keys(value), propsLength = propsKeys.length; 4817 if (null == key && 0 === propsLength) { 4818 value = "<" + typeName2 + " />"; 4819 break; 4820 } 4821 if (3 > indent || 1 === propsLength && "children" === propsKeys[0] && null == key) { 4822 value = "<" + typeName2 + " \u2026 />"; 4823 break; 4824 } 4825 properties.push([ 4826 prefix2 + "\xA0\xA0".repeat(indent) + propertyName, 4827 "<" + typeName2 4828 ]); 4829 null !== key && addValueToProperties( 4830 "key", 4831 key, 4832 properties, 4833 indent + 1, 4834 prefix2 4835 ); 4836 propertyName = false; 4837 for (var propKey in value) 4838 "children" === propKey ? null != value.children && (!isArrayImpl(value.children) || 0 < value.children.length) && (propertyName = true) : hasOwnProperty.call(value, propKey) && "_" !== propKey[0] && addValueToProperties( 4839 propKey, 4840 value[propKey], 4841 properties, 4842 indent + 1, 4843 prefix2 4844 ); 4845 properties.push([ 4846 "", 4847 propertyName ? ">\u2026</" + typeName2 + ">" : "/>" 4848 ]); 4849 return; 4850 } 4851 typeName2 = Object.prototype.toString.call(value); 4852 typeName2 = typeName2.slice(8, typeName2.length - 1); 4853 if ("Array" === typeName2) { 4854 if (propKey = getArrayKind(value), propKey === PRIMITIVE_ARRAY || propKey === EMPTY_ARRAY) { 4855 value = JSON.stringify(value); 4856 break; 4857 } else if (propKey === ENTRIES_ARRAY) { 4858 properties.push([ 4859 prefix2 + "\xA0\xA0".repeat(indent) + propertyName, 4860 "" 4861 ]); 4862 for (propertyName = 0; propertyName < value.length; propertyName++) 4863 typeName2 = value[propertyName], addValueToProperties( 4864 typeName2[0], 4865 typeName2[1], 4866 properties, 4867 indent + 1, 4868 prefix2 4869 ); 4870 return; 4871 } 4872 } 4873 if ("Promise" === typeName2) { 4874 if ("fulfilled" === value.status) { 4875 if (typeName2 = properties.length, addValueToProperties( 4876 propertyName, 4877 value.value, 4878 properties, 4879 indent, 4880 prefix2 4881 ), properties.length > typeName2) { 4882 properties = properties[typeName2]; 4883 properties[1] = "Promise<" + (properties[1] || "Object") + ">"; 4884 return; 4885 } 4886 } else if ("rejected" === value.status && (typeName2 = properties.length, addValueToProperties( 4887 propertyName, 4888 value.reason, 4889 properties, 4890 indent, 4891 prefix2 4892 ), properties.length > typeName2)) { 4893 properties = properties[typeName2]; 4894 properties[1] = "Rejected Promise<" + properties[1] + ">"; 4895 return; 4896 } 4897 properties.push([ 4898 "\xA0\xA0".repeat(indent) + propertyName, 4899 "Promise" 4900 ]); 4901 return; 4902 } 4903 "Object" === typeName2 && (propKey = Object.getPrototypeOf(value)) && "function" === typeof propKey.constructor && (typeName2 = propKey.constructor.name); 4904 properties.push([ 4905 prefix2 + "\xA0\xA0".repeat(indent) + propertyName, 4906 "Object" === typeName2 ? 3 > indent ? "" : "\u2026" : typeName2 4907 ]); 4908 3 > indent && addObjectToProperties(value, properties, indent + 1, prefix2); 4909 return; 4910 } 4911 case "function": 4912 value = "" === value.name ? "() => {}" : value.name + "() {}"; 4913 break; 4914 case "string": 4915 value = value === OMITTED_PROP_ERROR ? "\u2026" : JSON.stringify(value); 4916 break; 4917 case "undefined": 4918 value = "undefined"; 4919 break; 4920 case "boolean": 4921 value = value ? "true" : "false"; 4922 break; 4923 default: 4924 value = String(value); 4925 } 4926 properties.push([ 4927 prefix2 + "\xA0\xA0".repeat(indent) + propertyName, 4928 value 4929 ]); 4930 } 4931 function addObjectDiffToProperties(prev, next, properties, indent) { 4932 var isDeeplyEqual = true; 4933 for (key in prev) 4934 key in next || (properties.push([ 4935 REMOVED + "\xA0\xA0".repeat(indent) + key, 4936 "\u2026" 4937 ]), isDeeplyEqual = false); 4938 for (var _key in next) 4939 if (_key in prev) { 4940 var key = prev[_key]; 4941 var nextValue = next[_key]; 4942 if (key !== nextValue) { 4943 if (0 === indent && "children" === _key) 4944 isDeeplyEqual = "\xA0\xA0".repeat(indent) + _key, properties.push( 4945 [REMOVED + isDeeplyEqual, "\u2026"], 4946 [ADDED + isDeeplyEqual, "\u2026"] 4947 ); 4948 else { 4949 if (!(3 <= indent)) { 4950 if ("object" === typeof key && "object" === typeof nextValue && null !== key && null !== nextValue && key.$$typeof === nextValue.$$typeof) 4951 if (nextValue.$$typeof === REACT_ELEMENT_TYPE) { 4952 if (key.type === nextValue.type && key.key === nextValue.key) { 4953 key = getComponentNameFromType(nextValue.type) || "\u2026"; 4954 isDeeplyEqual = "\xA0\xA0".repeat(indent) + _key; 4955 key = "<" + key + " \u2026 />"; 4956 properties.push( 4957 [REMOVED + isDeeplyEqual, key], 4958 [ADDED + isDeeplyEqual, key] 4959 ); 4960 isDeeplyEqual = false; 4961 continue; 4962 } 4963 } else { 4964 var prevKind = Object.prototype.toString.call(key), nextKind = Object.prototype.toString.call(nextValue); 4965 if (prevKind === nextKind && ("[object Object]" === nextKind || "[object Array]" === nextKind)) { 4966 prevKind = [ 4967 UNCHANGED + "\xA0\xA0".repeat(indent) + _key, 4968 "[object Array]" === nextKind ? "Array" : "" 4969 ]; 4970 properties.push(prevKind); 4971 nextKind = properties.length; 4972 addObjectDiffToProperties( 4973 key, 4974 nextValue, 4975 properties, 4976 indent + 1 4977 ) ? nextKind === properties.length && (prevKind[1] = "Referentially unequal but deeply equal objects. Consider memoization.") : isDeeplyEqual = false; 4978 continue; 4979 } 4980 } 4981 else if ("function" === typeof key && "function" === typeof nextValue && key.name === nextValue.name && key.length === nextValue.length && (prevKind = Function.prototype.toString.call(key), nextKind = Function.prototype.toString.call(nextValue), prevKind === nextKind)) { 4982 key = "" === nextValue.name ? "() => {}" : nextValue.name + "() {}"; 4983 properties.push([ 4984 UNCHANGED + "\xA0\xA0".repeat(indent) + _key, 4985 key + " Referentially unequal function closure. Consider memoization." 4986 ]); 4987 continue; 4988 } 4989 } 4990 addValueToProperties(_key, key, properties, indent, REMOVED); 4991 addValueToProperties(_key, nextValue, properties, indent, ADDED); 4992 } 4993 isDeeplyEqual = false; 4994 } 4995 } else 4996 properties.push([ 4997 ADDED + "\xA0\xA0".repeat(indent) + _key, 4998 "\u2026" 4999 ]), isDeeplyEqual = false; 5000 return isDeeplyEqual; 5001 } 5002 function setCurrentTrackFromLanes(lanes) { 5003 currentTrack = lanes & 63 ? "Blocking" : lanes & 64 ? "Gesture" : lanes & 4194176 ? "Transition" : lanes & 62914560 ? "Suspense" : lanes & 2080374784 ? "Idle" : "Other"; 5004 } 5005 function logComponentTrigger(fiber, startTime, endTime, trigger) { 5006 supportsUserTiming && (reusableComponentOptions.start = startTime, reusableComponentOptions.end = endTime, reusableComponentDevToolDetails.color = "warning", reusableComponentDevToolDetails.tooltipText = trigger, reusableComponentDevToolDetails.properties = null, (fiber = fiber._debugTask) ? fiber.run( 5007 performance.measure.bind( 5008 performance, 5009 trigger, 5010 reusableComponentOptions 5011 ) 5012 ) : performance.measure(trigger, reusableComponentOptions)); 5013 } 5014 function logComponentReappeared(fiber, startTime, endTime) { 5015 logComponentTrigger(fiber, startTime, endTime, "Reconnect"); 5016 } 5017 function logComponentRender(fiber, startTime, endTime, wasHydrated, committedLanes) { 5018 var name = getComponentNameFromFiber(fiber); 5019 if (null !== name && supportsUserTiming) { 5020 var alternate = fiber.alternate, selfTime = fiber.actualDuration; 5021 if (null === alternate || alternate.child !== fiber.child) 5022 for (var child = fiber.child; null !== child; child = child.sibling) 5023 selfTime -= child.actualDuration; 5024 wasHydrated = 0.5 > selfTime ? wasHydrated ? "tertiary-light" : "primary-light" : 10 > selfTime ? wasHydrated ? "tertiary" : "primary" : 100 > selfTime ? wasHydrated ? "tertiary-dark" : "primary-dark" : "error"; 5025 var props = fiber.memoizedProps; 5026 selfTime = fiber._debugTask; 5027 null !== props && null !== alternate && alternate.memoizedProps !== props ? (child = [resuableChangedPropsEntry], props = addObjectDiffToProperties( 5028 alternate.memoizedProps, 5029 props, 5030 child, 5031 0 5032 ), 1 < child.length && (props && !alreadyWarnedForDeepEquality && 0 === (alternate.lanes & committedLanes) && 100 < fiber.actualDuration ? (alreadyWarnedForDeepEquality = true, child[0] = reusableDeeplyEqualPropsEntry, reusableComponentDevToolDetails.color = "warning", reusableComponentDevToolDetails.tooltipText = DEEP_EQUALITY_WARNING) : (reusableComponentDevToolDetails.color = wasHydrated, reusableComponentDevToolDetails.tooltipText = name), reusableComponentDevToolDetails.properties = child, reusableComponentOptions.start = startTime, reusableComponentOptions.end = endTime, null != selfTime ? selfTime.run( 5033 performance.measure.bind( 5034 performance, 5035 "\u200B" + name, 5036 reusableComponentOptions 5037 ) 5038 ) : performance.measure( 5039 "\u200B" + name, 5040 reusableComponentOptions 5041 ))) : null != selfTime ? selfTime.run( 5042 console.timeStamp.bind( 5043 console, 5044 name, 5045 startTime, 5046 endTime, 5047 COMPONENTS_TRACK, 5048 void 0, 5049 wasHydrated 5050 ) 5051 ) : console.timeStamp( 5052 name, 5053 startTime, 5054 endTime, 5055 COMPONENTS_TRACK, 5056 void 0, 5057 wasHydrated 5058 ); 5059 } 5060 } 5061 function logComponentErrored(fiber, startTime, endTime, errors) { 5062 if (supportsUserTiming) { 5063 var name = getComponentNameFromFiber(fiber); 5064 if (null !== name) { 5065 for (var debugTask = null, properties = [], i3 = 0; i3 < errors.length; i3++) { 5066 var capturedValue = errors[i3]; 5067 null == debugTask && null !== capturedValue.source && (debugTask = capturedValue.source._debugTask); 5068 capturedValue = capturedValue.value; 5069 properties.push([ 5070 "Error", 5071 "object" === typeof capturedValue && null !== capturedValue && "string" === typeof capturedValue.message ? String(capturedValue.message) : String(capturedValue) 5072 ]); 5073 } 5074 null !== fiber.key && addValueToProperties("key", fiber.key, properties, 0, ""); 5075 null !== fiber.memoizedProps && addObjectToProperties(fiber.memoizedProps, properties, 0, ""); 5076 null == debugTask && (debugTask = fiber._debugTask); 5077 fiber = { 5078 start: startTime, 5079 end: endTime, 5080 detail: { 5081 devtools: { 5082 color: "error", 5083 track: COMPONENTS_TRACK, 5084 tooltipText: 13 === fiber.tag ? "Hydration failed" : "Error boundary caught an error", 5085 properties 5086 } 5087 } 5088 }; 5089 debugTask ? debugTask.run( 5090 performance.measure.bind(performance, "\u200B" + name, fiber) 5091 ) : performance.measure("\u200B" + name, fiber); 5092 } 5093 } 5094 } 5095 function logComponentEffect(fiber, startTime, endTime, selfTime, errors) { 5096 if (null !== errors) { 5097 if (supportsUserTiming) { 5098 var name = getComponentNameFromFiber(fiber); 5099 if (null !== name) { 5100 selfTime = []; 5101 for (var i3 = 0; i3 < errors.length; i3++) { 5102 var error2 = errors[i3].value; 5103 selfTime.push([ 5104 "Error", 5105 "object" === typeof error2 && null !== error2 && "string" === typeof error2.message ? String(error2.message) : String(error2) 5106 ]); 5107 } 5108 null !== fiber.key && addValueToProperties("key", fiber.key, selfTime, 0, ""); 5109 null !== fiber.memoizedProps && addObjectToProperties(fiber.memoizedProps, selfTime, 0, ""); 5110 startTime = { 5111 start: startTime, 5112 end: endTime, 5113 detail: { 5114 devtools: { 5115 color: "error", 5116 track: COMPONENTS_TRACK, 5117 tooltipText: "A lifecycle or effect errored", 5118 properties: selfTime 5119 } 5120 } 5121 }; 5122 (fiber = fiber._debugTask) ? fiber.run( 5123 performance.measure.bind( 5124 performance, 5125 "\u200B" + name, 5126 startTime 5127 ) 5128 ) : performance.measure("\u200B" + name, startTime); 5129 } 5130 } 5131 } else 5132 name = getComponentNameFromFiber(fiber), null !== name && supportsUserTiming && (errors = 1 > selfTime ? "secondary-light" : 100 > selfTime ? "secondary" : 500 > selfTime ? "secondary-dark" : "error", (fiber = fiber._debugTask) ? fiber.run( 5133 console.timeStamp.bind( 5134 console, 5135 name, 5136 startTime, 5137 endTime, 5138 COMPONENTS_TRACK, 5139 void 0, 5140 errors 5141 ) 5142 ) : console.timeStamp( 5143 name, 5144 startTime, 5145 endTime, 5146 COMPONENTS_TRACK, 5147 void 0, 5148 errors 5149 )); 5150 } 5151 function logRenderPhase(startTime, endTime, lanes, debugTask) { 5152 if (supportsUserTiming && !(endTime <= startTime)) { 5153 var color = (lanes & 738197653) === lanes ? "tertiary-dark" : "primary-dark"; 5154 lanes = (lanes & 536870912) === lanes ? "Prepared" : (lanes & 201326741) === lanes ? "Hydrated" : "Render"; 5155 debugTask ? debugTask.run( 5156 console.timeStamp.bind( 5157 console, 5158 lanes, 5159 startTime, 5160 endTime, 5161 currentTrack, 5162 LANES_TRACK_GROUP, 5163 color 5164 ) 5165 ) : console.timeStamp( 5166 lanes, 5167 startTime, 5168 endTime, 5169 currentTrack, 5170 LANES_TRACK_GROUP, 5171 color 5172 ); 5173 } 5174 } 5175 function logSuspendedRenderPhase(startTime, endTime, lanes, debugTask) { 5176 !supportsUserTiming || endTime <= startTime || (lanes = (lanes & 738197653) === lanes ? "tertiary-dark" : "primary-dark", debugTask ? debugTask.run( 5177 console.timeStamp.bind( 5178 console, 5179 "Prewarm", 5180 startTime, 5181 endTime, 5182 currentTrack, 5183 LANES_TRACK_GROUP, 5184 lanes 5185 ) 5186 ) : console.timeStamp( 5187 "Prewarm", 5188 startTime, 5189 endTime, 5190 currentTrack, 5191 LANES_TRACK_GROUP, 5192 lanes 5193 )); 5194 } 5195 function logSuspendedWithDelayPhase(startTime, endTime, lanes, debugTask) { 5196 !supportsUserTiming || endTime <= startTime || (lanes = (lanes & 738197653) === lanes ? "tertiary-dark" : "primary-dark", debugTask ? debugTask.run( 5197 console.timeStamp.bind( 5198 console, 5199 "Suspended", 5200 startTime, 5201 endTime, 5202 currentTrack, 5203 LANES_TRACK_GROUP, 5204 lanes 5205 ) 5206 ) : console.timeStamp( 5207 "Suspended", 5208 startTime, 5209 endTime, 5210 currentTrack, 5211 LANES_TRACK_GROUP, 5212 lanes 5213 )); 5214 } 5215 function logRecoveredRenderPhase(startTime, endTime, lanes, recoverableErrors, hydrationFailed, debugTask) { 5216 if (supportsUserTiming && !(endTime <= startTime)) { 5217 lanes = []; 5218 for (var i3 = 0; i3 < recoverableErrors.length; i3++) { 5219 var error2 = recoverableErrors[i3].value; 5220 lanes.push([ 5221 "Recoverable Error", 5222 "object" === typeof error2 && null !== error2 && "string" === typeof error2.message ? String(error2.message) : String(error2) 5223 ]); 5224 } 5225 startTime = { 5226 start: startTime, 5227 end: endTime, 5228 detail: { 5229 devtools: { 5230 color: "primary-dark", 5231 track: currentTrack, 5232 trackGroup: LANES_TRACK_GROUP, 5233 tooltipText: hydrationFailed ? "Hydration Failed" : "Recovered after Error", 5234 properties: lanes 5235 } 5236 } 5237 }; 5238 debugTask ? debugTask.run( 5239 performance.measure.bind(performance, "Recovered", startTime) 5240 ) : performance.measure("Recovered", startTime); 5241 } 5242 } 5243 function logErroredRenderPhase(startTime, endTime, lanes, debugTask) { 5244 !supportsUserTiming || endTime <= startTime || (debugTask ? debugTask.run( 5245 console.timeStamp.bind( 5246 console, 5247 "Errored", 5248 startTime, 5249 endTime, 5250 currentTrack, 5251 LANES_TRACK_GROUP, 5252 "error" 5253 ) 5254 ) : console.timeStamp( 5255 "Errored", 5256 startTime, 5257 endTime, 5258 currentTrack, 5259 LANES_TRACK_GROUP, 5260 "error" 5261 )); 5262 } 5263 function logSuspendedCommitPhase(startTime, endTime, reason, debugTask) { 5264 !supportsUserTiming || endTime <= startTime || (debugTask ? debugTask.run( 5265 console.timeStamp.bind( 5266 console, 5267 reason, 5268 startTime, 5269 endTime, 5270 currentTrack, 5271 LANES_TRACK_GROUP, 5272 "secondary-light" 5273 ) 5274 ) : console.timeStamp( 5275 reason, 5276 startTime, 5277 endTime, 5278 currentTrack, 5279 LANES_TRACK_GROUP, 5280 "secondary-light" 5281 )); 5282 } 5283 function logCommitErrored(startTime, endTime, errors, passive, debugTask) { 5284 if (supportsUserTiming && !(endTime <= startTime)) { 5285 for (var properties = [], i3 = 0; i3 < errors.length; i3++) { 5286 var error2 = errors[i3].value; 5287 properties.push([ 5288 "Error", 5289 "object" === typeof error2 && null !== error2 && "string" === typeof error2.message ? String(error2.message) : String(error2) 5290 ]); 5291 } 5292 startTime = { 5293 start: startTime, 5294 end: endTime, 5295 detail: { 5296 devtools: { 5297 color: "error", 5298 track: currentTrack, 5299 trackGroup: LANES_TRACK_GROUP, 5300 tooltipText: passive ? "Remaining Effects Errored" : "Commit Errored", 5301 properties 5302 } 5303 } 5304 }; 5305 debugTask ? debugTask.run( 5306 performance.measure.bind(performance, "Errored", startTime) 5307 ) : performance.measure("Errored", startTime); 5308 } 5309 } 5310 function logAnimatingPhase(startTime, endTime, debugTask) { 5311 !supportsUserTiming || endTime <= startTime || (debugTask ? debugTask.run( 5312 console.timeStamp.bind( 5313 console, 5314 "Animating", 5315 startTime, 5316 endTime, 5317 currentTrack, 5318 LANES_TRACK_GROUP, 5319 "secondary-dark" 5320 ) 5321 ) : console.timeStamp( 5322 "Animating", 5323 startTime, 5324 endTime, 5325 currentTrack, 5326 LANES_TRACK_GROUP, 5327 "secondary-dark" 5328 )); 5329 } 5330 function finishQueueingConcurrentUpdates() { 5331 for (var endIndex = concurrentQueuesIndex, i3 = concurrentlyUpdatedLanes = concurrentQueuesIndex = 0; i3 < endIndex; ) { 5332 var fiber = concurrentQueues[i3]; 5333 concurrentQueues[i3++] = null; 5334 var queue = concurrentQueues[i3]; 5335 concurrentQueues[i3++] = null; 5336 var update = concurrentQueues[i3]; 5337 concurrentQueues[i3++] = null; 5338 var lane = concurrentQueues[i3]; 5339 concurrentQueues[i3++] = null; 5340 if (null !== queue && null !== update) { 5341 var pending = queue.pending; 5342 null === pending ? update.next = update : (update.next = pending.next, pending.next = update); 5343 queue.pending = update; 5344 } 5345 0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane); 5346 } 5347 } 5348 function enqueueUpdate$1(fiber, queue, update, lane) { 5349 concurrentQueues[concurrentQueuesIndex++] = fiber; 5350 concurrentQueues[concurrentQueuesIndex++] = queue; 5351 concurrentQueues[concurrentQueuesIndex++] = update; 5352 concurrentQueues[concurrentQueuesIndex++] = lane; 5353 concurrentlyUpdatedLanes |= lane; 5354 fiber.lanes |= lane; 5355 fiber = fiber.alternate; 5356 null !== fiber && (fiber.lanes |= lane); 5357 } 5358 function enqueueConcurrentHookUpdate(fiber, queue, update, lane) { 5359 enqueueUpdate$1(fiber, queue, update, lane); 5360 return getRootForUpdatedFiber(fiber); 5361 } 5362 function enqueueConcurrentRenderForLane(fiber, lane) { 5363 enqueueUpdate$1(fiber, null, null, lane); 5364 return getRootForUpdatedFiber(fiber); 5365 } 5366 function markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) { 5367 sourceFiber.lanes |= lane; 5368 var alternate = sourceFiber.alternate; 5369 null !== alternate && (alternate.lanes |= lane); 5370 for (var isHidden = false, parent = sourceFiber.return; null !== parent; ) 5371 parent.childLanes |= lane, alternate = parent.alternate, null !== alternate && (alternate.childLanes |= lane), 22 === parent.tag && (sourceFiber = parent.stateNode, null === sourceFiber || sourceFiber._visibility & OffscreenVisible || (isHidden = true)), sourceFiber = parent, parent = parent.return; 5372 return 3 === sourceFiber.tag ? (parent = sourceFiber.stateNode, isHidden && null !== update && (isHidden = 31 - clz32(lane), sourceFiber = parent.hiddenUpdates, alternate = sourceFiber[isHidden], null === alternate ? sourceFiber[isHidden] = [update] : alternate.push(update), update.lane = lane | 536870912), parent) : null; 5373 } 5374 function getRootForUpdatedFiber(sourceFiber) { 5375 if (nestedUpdateCount > NESTED_UPDATE_LIMIT) 5376 throw nestedPassiveUpdateCount = nestedUpdateCount = 0, rootWithPassiveNestedUpdates = rootWithNestedUpdates = null, Error( 5377 "Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops." 5378 ); 5379 nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT && (nestedPassiveUpdateCount = 0, rootWithPassiveNestedUpdates = null, console.error( 5380 "Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render." 5381 )); 5382 null === sourceFiber.alternate && 0 !== (sourceFiber.flags & 4098) && warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber); 5383 for (var node = sourceFiber, parent = node.return; null !== parent; ) 5384 null === node.alternate && 0 !== (node.flags & 4098) && warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber), node = parent, parent = node.return; 5385 return 3 === node.tag ? node.stateNode : null; 5386 } 5387 function resolveFunctionForHotReloading(type) { 5388 if (null === resolveFamily) return type; 5389 var family = resolveFamily(type); 5390 return void 0 === family ? type : family.current; 5391 } 5392 function resolveForwardRefForHotReloading(type) { 5393 if (null === resolveFamily) return type; 5394 var family = resolveFamily(type); 5395 return void 0 === family ? null !== type && void 0 !== type && "function" === typeof type.render && (family = resolveFunctionForHotReloading(type.render), type.render !== family) ? (family = { $$typeof: REACT_FORWARD_REF_TYPE, render: family }, void 0 !== type.displayName && (family.displayName = type.displayName), family) : type : family.current; 5396 } 5397 function isCompatibleFamilyForHotReloading(fiber, element) { 5398 if (null === resolveFamily) return false; 5399 var prevType = fiber.elementType; 5400 element = element.type; 5401 var needsCompareFamilies = false, $$typeofNextType = "object" === typeof element && null !== element ? element.$$typeof : null; 5402 switch (fiber.tag) { 5403 case 1: 5404 "function" === typeof element && (needsCompareFamilies = true); 5405 break; 5406 case 0: 5407 "function" === typeof element ? needsCompareFamilies = true : $$typeofNextType === REACT_LAZY_TYPE && (needsCompareFamilies = true); 5408 break; 5409 case 11: 5410 $$typeofNextType === REACT_FORWARD_REF_TYPE ? needsCompareFamilies = true : $$typeofNextType === REACT_LAZY_TYPE && (needsCompareFamilies = true); 5411 break; 5412 case 14: 5413 case 15: 5414 $$typeofNextType === REACT_MEMO_TYPE ? needsCompareFamilies = true : $$typeofNextType === REACT_LAZY_TYPE && (needsCompareFamilies = true); 5415 break; 5416 default: 5417 return false; 5418 } 5419 return needsCompareFamilies && (fiber = resolveFamily(prevType), void 0 !== fiber && fiber === resolveFamily(element)) ? true : false; 5420 } 5421 function markFailedErrorBoundaryForHotReloading(fiber) { 5422 null !== resolveFamily && "function" === typeof WeakSet && (null === failedBoundaries && (failedBoundaries = /* @__PURE__ */ new WeakSet()), failedBoundaries.add(fiber)); 5423 } 5424 function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) { 5425 do { 5426 var _fiber = fiber, alternate = _fiber.alternate, child = _fiber.child, sibling = _fiber.sibling, tag = _fiber.tag; 5427 _fiber = _fiber.type; 5428 var candidateType = null; 5429 switch (tag) { 5430 case 0: 5431 case 15: 5432 case 1: 5433 candidateType = _fiber; 5434 break; 5435 case 11: 5436 candidateType = _fiber.render; 5437 } 5438 if (null === resolveFamily) 5439 throw Error("Expected resolveFamily to be set during hot reload."); 5440 var needsRender = false; 5441 _fiber = false; 5442 null !== candidateType && (candidateType = resolveFamily(candidateType), void 0 !== candidateType && (staleFamilies.has(candidateType) ? _fiber = true : updatedFamilies.has(candidateType) && (1 === tag ? _fiber = true : needsRender = true))); 5443 null !== failedBoundaries && (failedBoundaries.has(fiber) || null !== alternate && failedBoundaries.has(alternate)) && (_fiber = true); 5444 _fiber && (fiber._debugNeedsRemount = true); 5445 if (_fiber || needsRender) 5446 alternate = enqueueConcurrentRenderForLane(fiber, 2), null !== alternate && scheduleUpdateOnFiber(alternate, fiber, 2); 5447 null === child || _fiber || scheduleFibersWithFamiliesRecursively( 5448 child, 5449 updatedFamilies, 5450 staleFamilies 5451 ); 5452 if (null === sibling) break; 5453 fiber = sibling; 5454 } while (1); 5455 } 5456 function FiberNode(tag, pendingProps, key, mode2) { 5457 this.tag = tag; 5458 this.key = key; 5459 this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null; 5460 this.index = 0; 5461 this.refCleanup = this.ref = null; 5462 this.pendingProps = pendingProps; 5463 this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null; 5464 this.mode = mode2; 5465 this.subtreeFlags = this.flags = 0; 5466 this.deletions = null; 5467 this.childLanes = this.lanes = 0; 5468 this.alternate = null; 5469 this.actualDuration = -0; 5470 this.actualStartTime = -1.1; 5471 this.treeBaseDuration = this.selfBaseDuration = -0; 5472 this._debugTask = this._debugStack = this._debugOwner = this._debugInfo = null; 5473 this._debugNeedsRemount = false; 5474 this._debugHookTypes = null; 5475 hasBadMapPolyfill || "function" !== typeof Object.preventExtensions || Object.preventExtensions(this); 5476 } 5477 function shouldConstruct(Component) { 5478 Component = Component.prototype; 5479 return !(!Component || !Component.isReactComponent); 5480 } 5481 function createWorkInProgress(current2, pendingProps) { 5482 var workInProgress2 = current2.alternate; 5483 null === workInProgress2 ? (workInProgress2 = createFiber( 5484 current2.tag, 5485 pendingProps, 5486 current2.key, 5487 current2.mode 5488 ), workInProgress2.elementType = current2.elementType, workInProgress2.type = current2.type, workInProgress2.stateNode = current2.stateNode, workInProgress2._debugOwner = current2._debugOwner, workInProgress2._debugStack = current2._debugStack, workInProgress2._debugTask = current2._debugTask, workInProgress2._debugHookTypes = current2._debugHookTypes, workInProgress2.alternate = current2, current2.alternate = workInProgress2) : (workInProgress2.pendingProps = pendingProps, workInProgress2.type = current2.type, workInProgress2.flags = 0, workInProgress2.subtreeFlags = 0, workInProgress2.deletions = null, workInProgress2.actualDuration = -0, workInProgress2.actualStartTime = -1.1); 5489 workInProgress2.flags = current2.flags & 65011712; 5490 workInProgress2.childLanes = current2.childLanes; 5491 workInProgress2.lanes = current2.lanes; 5492 workInProgress2.child = current2.child; 5493 workInProgress2.memoizedProps = current2.memoizedProps; 5494 workInProgress2.memoizedState = current2.memoizedState; 5495 workInProgress2.updateQueue = current2.updateQueue; 5496 pendingProps = current2.dependencies; 5497 workInProgress2.dependencies = null === pendingProps ? null : { 5498 lanes: pendingProps.lanes, 5499 firstContext: pendingProps.firstContext, 5500 _debugThenableState: pendingProps._debugThenableState 5501 }; 5502 workInProgress2.sibling = current2.sibling; 5503 workInProgress2.index = current2.index; 5504 workInProgress2.ref = current2.ref; 5505 workInProgress2.refCleanup = current2.refCleanup; 5506 workInProgress2.selfBaseDuration = current2.selfBaseDuration; 5507 workInProgress2.treeBaseDuration = current2.treeBaseDuration; 5508 workInProgress2._debugInfo = current2._debugInfo; 5509 workInProgress2._debugNeedsRemount = current2._debugNeedsRemount; 5510 switch (workInProgress2.tag) { 5511 case 0: 5512 case 15: 5513 workInProgress2.type = resolveFunctionForHotReloading(current2.type); 5514 break; 5515 case 1: 5516 workInProgress2.type = resolveFunctionForHotReloading(current2.type); 5517 break; 5518 case 11: 5519 workInProgress2.type = resolveForwardRefForHotReloading(current2.type); 5520 } 5521 return workInProgress2; 5522 } 5523 function resetWorkInProgress(workInProgress2, renderLanes2) { 5524 workInProgress2.flags &= 65011714; 5525 var current2 = workInProgress2.alternate; 5526 null === current2 ? (workInProgress2.childLanes = 0, workInProgress2.lanes = renderLanes2, workInProgress2.child = null, workInProgress2.subtreeFlags = 0, workInProgress2.memoizedProps = null, workInProgress2.memoizedState = null, workInProgress2.updateQueue = null, workInProgress2.dependencies = null, workInProgress2.stateNode = null, workInProgress2.selfBaseDuration = 0, workInProgress2.treeBaseDuration = 0) : (workInProgress2.childLanes = current2.childLanes, workInProgress2.lanes = current2.lanes, workInProgress2.child = current2.child, workInProgress2.subtreeFlags = 0, workInProgress2.deletions = null, workInProgress2.memoizedProps = current2.memoizedProps, workInProgress2.memoizedState = current2.memoizedState, workInProgress2.updateQueue = current2.updateQueue, workInProgress2.type = current2.type, renderLanes2 = current2.dependencies, workInProgress2.dependencies = null === renderLanes2 ? null : { 5527 lanes: renderLanes2.lanes, 5528 firstContext: renderLanes2.firstContext, 5529 _debugThenableState: renderLanes2._debugThenableState 5530 }, workInProgress2.selfBaseDuration = current2.selfBaseDuration, workInProgress2.treeBaseDuration = current2.treeBaseDuration); 5531 return workInProgress2; 5532 } 5533 function createFiberFromTypeAndProps(type, key, pendingProps, owner, mode2, lanes) { 5534 var fiberTag = 0, resolvedType = type; 5535 if ("function" === typeof type) 5536 shouldConstruct(type) && (fiberTag = 1), resolvedType = resolveFunctionForHotReloading(resolvedType); 5537 else if ("string" === typeof type) 5538 fiberTag = getHostContext(), fiberTag = isHostHoistableType(type, pendingProps, fiberTag) ? 26 : "html" === type || "head" === type || "body" === type ? 27 : 5; 5539 else 5540 a: switch (type) { 5541 case REACT_ACTIVITY_TYPE: 5542 return key = createFiber(31, pendingProps, key, mode2), key.elementType = REACT_ACTIVITY_TYPE, key.lanes = lanes, key; 5543 case REACT_FRAGMENT_TYPE: 5544 return createFiberFromFragment( 5545 pendingProps.children, 5546 mode2, 5547 lanes, 5548 key 5549 ); 5550 case REACT_STRICT_MODE_TYPE: 5551 fiberTag = 8; 5552 mode2 |= StrictLegacyMode; 5553 mode2 |= StrictEffectsMode; 5554 break; 5555 case REACT_PROFILER_TYPE: 5556 return type = pendingProps, owner = mode2, "string" !== typeof type.id && console.error( 5557 'Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.', 5558 typeof type.id 5559 ), key = createFiber(12, type, key, owner | ProfileMode), key.elementType = REACT_PROFILER_TYPE, key.lanes = lanes, key.stateNode = { effectDuration: 0, passiveEffectDuration: 0 }, key; 5560 case REACT_SUSPENSE_TYPE: 5561 return key = createFiber(13, pendingProps, key, mode2), key.elementType = REACT_SUSPENSE_TYPE, key.lanes = lanes, key; 5562 case REACT_SUSPENSE_LIST_TYPE: 5563 return key = createFiber(19, pendingProps, key, mode2), key.elementType = REACT_SUSPENSE_LIST_TYPE, key.lanes = lanes, key; 5564 default: 5565 if ("object" === typeof type && null !== type) 5566 switch (type.$$typeof) { 5567 case REACT_CONTEXT_TYPE: 5568 fiberTag = 10; 5569 break a; 5570 case REACT_CONSUMER_TYPE: 5571 fiberTag = 9; 5572 break a; 5573 case REACT_FORWARD_REF_TYPE: 5574 fiberTag = 11; 5575 resolvedType = resolveForwardRefForHotReloading(resolvedType); 5576 break a; 5577 case REACT_MEMO_TYPE: 5578 fiberTag = 14; 5579 break a; 5580 case REACT_LAZY_TYPE: 5581 fiberTag = 16; 5582 resolvedType = null; 5583 break a; 5584 } 5585 resolvedType = ""; 5586 if (void 0 === type || "object" === typeof type && null !== type && 0 === Object.keys(type).length) 5587 resolvedType += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."; 5588 null === type ? pendingProps = "null" : isArrayImpl(type) ? pendingProps = "array" : void 0 !== type && type.$$typeof === REACT_ELEMENT_TYPE ? (pendingProps = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", resolvedType = " Did you accidentally export a JSX literal instead of a component?") : pendingProps = typeof type; 5589 (fiberTag = owner ? getComponentNameFromOwner(owner) : null) && (resolvedType += "\n\nCheck the render method of `" + fiberTag + "`."); 5590 fiberTag = 29; 5591 pendingProps = Error( 5592 "Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + (pendingProps + "." + resolvedType) 5593 ); 5594 resolvedType = null; 5595 } 5596 key = createFiber(fiberTag, pendingProps, key, mode2); 5597 key.elementType = type; 5598 key.type = resolvedType; 5599 key.lanes = lanes; 5600 key._debugOwner = owner; 5601 return key; 5602 } 5603 function createFiberFromElement(element, mode2, lanes) { 5604 mode2 = createFiberFromTypeAndProps( 5605 element.type, 5606 element.key, 5607 element.props, 5608 element._owner, 5609 mode2, 5610 lanes 5611 ); 5612 mode2._debugOwner = element._owner; 5613 mode2._debugStack = element._debugStack; 5614 mode2._debugTask = element._debugTask; 5615 return mode2; 5616 } 5617 function createFiberFromFragment(elements, mode2, lanes, key) { 5618 elements = createFiber(7, elements, key, mode2); 5619 elements.lanes = lanes; 5620 return elements; 5621 } 5622 function createFiberFromText(content, mode2, lanes) { 5623 content = createFiber(6, content, null, mode2); 5624 content.lanes = lanes; 5625 return content; 5626 } 5627 function createFiberFromDehydratedFragment(dehydratedNode) { 5628 var fiber = createFiber(18, null, null, NoMode); 5629 fiber.stateNode = dehydratedNode; 5630 return fiber; 5631 } 5632 function createFiberFromPortal(portal, mode2, lanes) { 5633 mode2 = createFiber( 5634 4, 5635 null !== portal.children ? portal.children : [], 5636 portal.key, 5637 mode2 5638 ); 5639 mode2.lanes = lanes; 5640 mode2.stateNode = { 5641 containerInfo: portal.containerInfo, 5642 pendingChildren: null, 5643 implementation: portal.implementation 5644 }; 5645 return mode2; 5646 } 5647 function createCapturedValueAtFiber(value, source) { 5648 if ("object" === typeof value && null !== value) { 5649 var existing = CapturedStacks.get(value); 5650 if (void 0 !== existing) return existing; 5651 source = { 5652 value, 5653 source, 5654 stack: getStackByFiberInDevAndProd(source) 5655 }; 5656 CapturedStacks.set(value, source); 5657 return source; 5658 } 5659 return { 5660 value, 5661 source, 5662 stack: getStackByFiberInDevAndProd(source) 5663 }; 5664 } 5665 function pushTreeFork(workInProgress2, totalChildren) { 5666 warnIfNotHydrating(); 5667 forkStack[forkStackIndex++] = treeForkCount; 5668 forkStack[forkStackIndex++] = treeForkProvider; 5669 treeForkProvider = workInProgress2; 5670 treeForkCount = totalChildren; 5671 } 5672 function pushTreeId(workInProgress2, totalChildren, index) { 5673 warnIfNotHydrating(); 5674 idStack[idStackIndex++] = treeContextId; 5675 idStack[idStackIndex++] = treeContextOverflow; 5676 idStack[idStackIndex++] = treeContextProvider; 5677 treeContextProvider = workInProgress2; 5678 var baseIdWithLeadingBit = treeContextId; 5679 workInProgress2 = treeContextOverflow; 5680 var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1; 5681 baseIdWithLeadingBit &= ~(1 << baseLength); 5682 index += 1; 5683 var length = 32 - clz32(totalChildren) + baseLength; 5684 if (30 < length) { 5685 var numberOfOverflowBits = baseLength - baseLength % 5; 5686 length = (baseIdWithLeadingBit & (1 << numberOfOverflowBits) - 1).toString(32); 5687 baseIdWithLeadingBit >>= numberOfOverflowBits; 5688 baseLength -= numberOfOverflowBits; 5689 treeContextId = 1 << 32 - clz32(totalChildren) + baseLength | index << baseLength | baseIdWithLeadingBit; 5690 treeContextOverflow = length + workInProgress2; 5691 } else 5692 treeContextId = 1 << length | index << baseLength | baseIdWithLeadingBit, treeContextOverflow = workInProgress2; 5693 } 5694 function pushMaterializedTreeId(workInProgress2) { 5695 warnIfNotHydrating(); 5696 null !== workInProgress2.return && (pushTreeFork(workInProgress2, 1), pushTreeId(workInProgress2, 1, 0)); 5697 } 5698 function popTreeContext(workInProgress2) { 5699 for (; workInProgress2 === treeForkProvider; ) 5700 treeForkProvider = forkStack[--forkStackIndex], forkStack[forkStackIndex] = null, treeForkCount = forkStack[--forkStackIndex], forkStack[forkStackIndex] = null; 5701 for (; workInProgress2 === treeContextProvider; ) 5702 treeContextProvider = idStack[--idStackIndex], idStack[idStackIndex] = null, treeContextOverflow = idStack[--idStackIndex], idStack[idStackIndex] = null, treeContextId = idStack[--idStackIndex], idStack[idStackIndex] = null; 5703 } 5704 function getSuspendedTreeContext() { 5705 warnIfNotHydrating(); 5706 return null !== treeContextProvider ? { id: treeContextId, overflow: treeContextOverflow } : null; 5707 } 5708 function restoreSuspendedTreeContext(workInProgress2, suspendedContext) { 5709 warnIfNotHydrating(); 5710 idStack[idStackIndex++] = treeContextId; 5711 idStack[idStackIndex++] = treeContextOverflow; 5712 idStack[idStackIndex++] = treeContextProvider; 5713 treeContextId = suspendedContext.id; 5714 treeContextOverflow = suspendedContext.overflow; 5715 treeContextProvider = workInProgress2; 5716 } 5717 function warnIfNotHydrating() { 5718 isHydrating || console.error( 5719 "Expected to be hydrating. This is a bug in React. Please file an issue." 5720 ); 5721 } 5722 function buildHydrationDiffNode(fiber, distanceFromLeaf) { 5723 if (null === fiber.return) { 5724 if (null === hydrationDiffRootDEV) 5725 hydrationDiffRootDEV = { 5726 fiber, 5727 children: [], 5728 serverProps: void 0, 5729 serverTail: [], 5730 distanceFromLeaf 5731 }; 5732 else { 5733 if (hydrationDiffRootDEV.fiber !== fiber) 5734 throw Error( 5735 "Saw multiple hydration diff roots in a pass. This is a bug in React." 5736 ); 5737 hydrationDiffRootDEV.distanceFromLeaf > distanceFromLeaf && (hydrationDiffRootDEV.distanceFromLeaf = distanceFromLeaf); 5738 } 5739 return hydrationDiffRootDEV; 5740 } 5741 var siblings = buildHydrationDiffNode( 5742 fiber.return, 5743 distanceFromLeaf + 1 5744 ).children; 5745 if (0 < siblings.length && siblings[siblings.length - 1].fiber === fiber) 5746 return siblings = siblings[siblings.length - 1], siblings.distanceFromLeaf > distanceFromLeaf && (siblings.distanceFromLeaf = distanceFromLeaf), siblings; 5747 distanceFromLeaf = { 5748 fiber, 5749 children: [], 5750 serverProps: void 0, 5751 serverTail: [], 5752 distanceFromLeaf 5753 }; 5754 siblings.push(distanceFromLeaf); 5755 return distanceFromLeaf; 5756 } 5757 function warnIfHydrating() { 5758 isHydrating && console.error( 5759 "We should not be hydrating here. This is a bug in React. Please file a bug." 5760 ); 5761 } 5762 function warnNonHydratedInstance(fiber, rejectedCandidate) { 5763 didSuspendOrErrorDEV || (fiber = buildHydrationDiffNode(fiber, 0), fiber.serverProps = null, null !== rejectedCandidate && (rejectedCandidate = describeHydratableInstanceForDevWarnings(rejectedCandidate), fiber.serverTail.push(rejectedCandidate))); 5764 } 5765 function throwOnHydrationMismatch(fiber) { 5766 var fromText = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : false, diff = "", diffRoot = hydrationDiffRootDEV; 5767 null !== diffRoot && (hydrationDiffRootDEV = null, diff = describeDiff(diffRoot)); 5768 queueHydrationError( 5769 createCapturedValueAtFiber( 5770 Error( 5771 "Hydration failed because the server rendered " + (fromText ? "text" : "HTML") + " didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch" + diff 5772 ), 5773 fiber 5774 ) 5775 ); 5776 throw HydrationMismatchException; 5777 } 5778 function prepareToHydrateHostInstance(fiber) { 5779 var didHydrate = fiber.stateNode; 5780 var type = fiber.type, props = fiber.memoizedProps; 5781 didHydrate[internalInstanceKey] = fiber; 5782 didHydrate[internalPropsKey] = props; 5783 validatePropertiesInDevelopment(type, props); 5784 switch (type) { 5785 case "dialog": 5786 listenToNonDelegatedEvent("cancel", didHydrate); 5787 listenToNonDelegatedEvent("close", didHydrate); 5788 break; 5789 case "iframe": 5790 case "object": 5791 case "embed": 5792 listenToNonDelegatedEvent("load", didHydrate); 5793 break; 5794 case "video": 5795 case "audio": 5796 for (type = 0; type < mediaEventTypes.length; type++) 5797 listenToNonDelegatedEvent(mediaEventTypes[type], didHydrate); 5798 break; 5799 case "source": 5800 listenToNonDelegatedEvent("error", didHydrate); 5801 break; 5802 case "img": 5803 case "image": 5804 case "link": 5805 listenToNonDelegatedEvent("error", didHydrate); 5806 listenToNonDelegatedEvent("load", didHydrate); 5807 break; 5808 case "details": 5809 listenToNonDelegatedEvent("toggle", didHydrate); 5810 break; 5811 case "input": 5812 checkControlledValueProps("input", props); 5813 listenToNonDelegatedEvent("invalid", didHydrate); 5814 validateInputProps(didHydrate, props); 5815 initInput( 5816 didHydrate, 5817 props.value, 5818 props.defaultValue, 5819 props.checked, 5820 props.defaultChecked, 5821 props.type, 5822 props.name, 5823 true 5824 ); 5825 break; 5826 case "option": 5827 validateOptionProps(didHydrate, props); 5828 break; 5829 case "select": 5830 checkControlledValueProps("select", props); 5831 listenToNonDelegatedEvent("invalid", didHydrate); 5832 validateSelectProps(didHydrate, props); 5833 break; 5834 case "textarea": 5835 checkControlledValueProps("textarea", props), listenToNonDelegatedEvent("invalid", didHydrate), validateTextareaProps(didHydrate, props), initTextarea( 5836 didHydrate, 5837 props.value, 5838 props.defaultValue, 5839 props.children 5840 ); 5841 } 5842 type = props.children; 5843 "string" !== typeof type && "number" !== typeof type && "bigint" !== typeof type || didHydrate.textContent === "" + type || true === props.suppressHydrationWarning || checkForUnmatchedText(didHydrate.textContent, type) ? (null != props.popover && (listenToNonDelegatedEvent("beforetoggle", didHydrate), listenToNonDelegatedEvent("toggle", didHydrate)), null != props.onScroll && listenToNonDelegatedEvent("scroll", didHydrate), null != props.onScrollEnd && listenToNonDelegatedEvent("scrollend", didHydrate), null != props.onClick && (didHydrate.onclick = noop$1), didHydrate = true) : didHydrate = false; 5844 didHydrate || throwOnHydrationMismatch(fiber, true); 5845 } 5846 function popToNextHostParent(fiber) { 5847 for (hydrationParentFiber = fiber.return; hydrationParentFiber; ) 5848 switch (hydrationParentFiber.tag) { 5849 case 5: 5850 case 31: 5851 case 13: 5852 rootOrSingletonContext = false; 5853 return; 5854 case 27: 5855 case 3: 5856 rootOrSingletonContext = true; 5857 return; 5858 default: 5859 hydrationParentFiber = hydrationParentFiber.return; 5860 } 5861 } 5862 function popHydrationState(fiber) { 5863 if (fiber !== hydrationParentFiber) return false; 5864 if (!isHydrating) 5865 return popToNextHostParent(fiber), isHydrating = true, false; 5866 var tag = fiber.tag, JSCompiler_temp; 5867 if (JSCompiler_temp = 3 !== tag && 27 !== tag) { 5868 if (JSCompiler_temp = 5 === tag) 5869 JSCompiler_temp = fiber.type, JSCompiler_temp = !("form" !== JSCompiler_temp && "button" !== JSCompiler_temp) || shouldSetTextContent(fiber.type, fiber.memoizedProps); 5870 JSCompiler_temp = !JSCompiler_temp; 5871 } 5872 if (JSCompiler_temp && nextHydratableInstance) { 5873 for (JSCompiler_temp = nextHydratableInstance; JSCompiler_temp; ) { 5874 var diffNode = buildHydrationDiffNode(fiber, 0), description = describeHydratableInstanceForDevWarnings(JSCompiler_temp); 5875 diffNode.serverTail.push(description); 5876 JSCompiler_temp = "Suspense" === description.type ? getNextHydratableInstanceAfterHydrationBoundary(JSCompiler_temp) : getNextHydratable(JSCompiler_temp.nextSibling); 5877 } 5878 throwOnHydrationMismatch(fiber); 5879 } 5880 popToNextHostParent(fiber); 5881 if (13 === tag) { 5882 fiber = fiber.memoizedState; 5883 fiber = null !== fiber ? fiber.dehydrated : null; 5884 if (!fiber) 5885 throw Error( 5886 "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." 5887 ); 5888 nextHydratableInstance = getNextHydratableInstanceAfterHydrationBoundary(fiber); 5889 } else if (31 === tag) { 5890 fiber = fiber.memoizedState; 5891 fiber = null !== fiber ? fiber.dehydrated : null; 5892 if (!fiber) 5893 throw Error( 5894 "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." 5895 ); 5896 nextHydratableInstance = getNextHydratableInstanceAfterHydrationBoundary(fiber); 5897 } else 5898 27 === tag ? (tag = nextHydratableInstance, isSingletonScope(fiber.type) ? (fiber = previousHydratableOnEnteringScopedSingleton, previousHydratableOnEnteringScopedSingleton = null, nextHydratableInstance = fiber) : nextHydratableInstance = tag) : nextHydratableInstance = hydrationParentFiber ? getNextHydratable(fiber.stateNode.nextSibling) : null; 5899 return true; 5900 } 5901 function resetHydrationState() { 5902 nextHydratableInstance = hydrationParentFiber = null; 5903 didSuspendOrErrorDEV = isHydrating = false; 5904 } 5905 function upgradeHydrationErrorsToRecoverable() { 5906 var queuedErrors = hydrationErrors; 5907 null !== queuedErrors && (null === workInProgressRootRecoverableErrors ? workInProgressRootRecoverableErrors = queuedErrors : workInProgressRootRecoverableErrors.push.apply( 5908 workInProgressRootRecoverableErrors, 5909 queuedErrors 5910 ), hydrationErrors = null); 5911 return queuedErrors; 5912 } 5913 function queueHydrationError(error2) { 5914 null === hydrationErrors ? hydrationErrors = [error2] : hydrationErrors.push(error2); 5915 } 5916 function emitPendingHydrationWarnings() { 5917 var diffRoot = hydrationDiffRootDEV; 5918 if (null !== diffRoot) { 5919 hydrationDiffRootDEV = null; 5920 for (var diff = describeDiff(diffRoot); 0 < diffRoot.children.length; ) 5921 diffRoot = diffRoot.children[0]; 5922 runWithFiberInDEV(diffRoot.fiber, function() { 5923 console.error( 5924 "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch `if (typeof window !== 'undefined')`.\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s", 5925 "https://react.dev/link/hydration-mismatch", 5926 diff 5927 ); 5928 }); 5929 } 5930 } 5931 function resetContextDependencies() { 5932 lastContextDependency = currentlyRenderingFiber$1 = null; 5933 isDisallowedContextReadInDEV = false; 5934 } 5935 function pushProvider(providerFiber, context, nextValue) { 5936 push(valueCursor, context._currentValue, providerFiber); 5937 context._currentValue = nextValue; 5938 push(rendererCursorDEV, context._currentRenderer, providerFiber); 5939 void 0 !== context._currentRenderer && null !== context._currentRenderer && context._currentRenderer !== rendererSigil && console.error( 5940 "Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported." 5941 ); 5942 context._currentRenderer = rendererSigil; 5943 } 5944 function popProvider(context, providerFiber) { 5945 context._currentValue = valueCursor.current; 5946 var currentRenderer = rendererCursorDEV.current; 5947 pop(rendererCursorDEV, providerFiber); 5948 context._currentRenderer = currentRenderer; 5949 pop(valueCursor, providerFiber); 5950 } 5951 function scheduleContextWorkOnParentPath(parent, renderLanes2, propagationRoot) { 5952 for (; null !== parent; ) { 5953 var alternate = parent.alternate; 5954 (parent.childLanes & renderLanes2) !== renderLanes2 ? (parent.childLanes |= renderLanes2, null !== alternate && (alternate.childLanes |= renderLanes2)) : null !== alternate && (alternate.childLanes & renderLanes2) !== renderLanes2 && (alternate.childLanes |= renderLanes2); 5955 if (parent === propagationRoot) break; 5956 parent = parent.return; 5957 } 5958 parent !== propagationRoot && console.error( 5959 "Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue." 5960 ); 5961 } 5962 function propagateContextChanges(workInProgress2, contexts, renderLanes2, forcePropagateEntireTree) { 5963 var fiber = workInProgress2.child; 5964 null !== fiber && (fiber.return = workInProgress2); 5965 for (; null !== fiber; ) { 5966 var list = fiber.dependencies; 5967 if (null !== list) { 5968 var nextFiber = fiber.child; 5969 list = list.firstContext; 5970 a: for (; null !== list; ) { 5971 var dependency = list; 5972 list = fiber; 5973 for (var i3 = 0; i3 < contexts.length; i3++) 5974 if (dependency.context === contexts[i3]) { 5975 list.lanes |= renderLanes2; 5976 dependency = list.alternate; 5977 null !== dependency && (dependency.lanes |= renderLanes2); 5978 scheduleContextWorkOnParentPath( 5979 list.return, 5980 renderLanes2, 5981 workInProgress2 5982 ); 5983 forcePropagateEntireTree || (nextFiber = null); 5984 break a; 5985 } 5986 list = dependency.next; 5987 } 5988 } else if (18 === fiber.tag) { 5989 nextFiber = fiber.return; 5990 if (null === nextFiber) 5991 throw Error( 5992 "We just came from a parent so we must have had a parent. This is a bug in React." 5993 ); 5994 nextFiber.lanes |= renderLanes2; 5995 list = nextFiber.alternate; 5996 null !== list && (list.lanes |= renderLanes2); 5997 scheduleContextWorkOnParentPath( 5998 nextFiber, 5999 renderLanes2, 6000 workInProgress2 6001 ); 6002 nextFiber = null; 6003 } else nextFiber = fiber.child; 6004 if (null !== nextFiber) nextFiber.return = fiber; 6005 else 6006 for (nextFiber = fiber; null !== nextFiber; ) { 6007 if (nextFiber === workInProgress2) { 6008 nextFiber = null; 6009 break; 6010 } 6011 fiber = nextFiber.sibling; 6012 if (null !== fiber) { 6013 fiber.return = nextFiber.return; 6014 nextFiber = fiber; 6015 break; 6016 } 6017 nextFiber = nextFiber.return; 6018 } 6019 fiber = nextFiber; 6020 } 6021 } 6022 function propagateParentContextChanges(current2, workInProgress2, renderLanes2, forcePropagateEntireTree) { 6023 current2 = null; 6024 for (var parent = workInProgress2, isInsidePropagationBailout = false; null !== parent; ) { 6025 if (!isInsidePropagationBailout) { 6026 if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = true; 6027 else if (0 !== (parent.flags & 262144)) break; 6028 } 6029 if (10 === parent.tag) { 6030 var currentParent = parent.alternate; 6031 if (null === currentParent) 6032 throw Error("Should have a current fiber. This is a bug in React."); 6033 currentParent = currentParent.memoizedProps; 6034 if (null !== currentParent) { 6035 var context = parent.type; 6036 objectIs(parent.pendingProps.value, currentParent.value) || (null !== current2 ? current2.push(context) : current2 = [context]); 6037 } 6038 } else if (parent === hostTransitionProviderCursor.current) { 6039 currentParent = parent.alternate; 6040 if (null === currentParent) 6041 throw Error("Should have a current fiber. This is a bug in React."); 6042 currentParent.memoizedState.memoizedState !== parent.memoizedState.memoizedState && (null !== current2 ? current2.push(HostTransitionContext) : current2 = [HostTransitionContext]); 6043 } 6044 parent = parent.return; 6045 } 6046 null !== current2 && propagateContextChanges( 6047 workInProgress2, 6048 current2, 6049 renderLanes2, 6050 forcePropagateEntireTree 6051 ); 6052 workInProgress2.flags |= 262144; 6053 } 6054 function checkIfContextChanged(currentDependencies) { 6055 for (currentDependencies = currentDependencies.firstContext; null !== currentDependencies; ) { 6056 if (!objectIs( 6057 currentDependencies.context._currentValue, 6058 currentDependencies.memoizedValue 6059 )) 6060 return true; 6061 currentDependencies = currentDependencies.next; 6062 } 6063 return false; 6064 } 6065 function prepareToReadContext(workInProgress2) { 6066 currentlyRenderingFiber$1 = workInProgress2; 6067 lastContextDependency = null; 6068 workInProgress2 = workInProgress2.dependencies; 6069 null !== workInProgress2 && (workInProgress2.firstContext = null); 6070 } 6071 function readContext(context) { 6072 isDisallowedContextReadInDEV && console.error( 6073 "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." 6074 ); 6075 return readContextForConsumer(currentlyRenderingFiber$1, context); 6076 } 6077 function readContextDuringReconciliation(consumer2, context) { 6078 null === currentlyRenderingFiber$1 && prepareToReadContext(consumer2); 6079 return readContextForConsumer(consumer2, context); 6080 } 6081 function readContextForConsumer(consumer2, context) { 6082 var value = context._currentValue; 6083 context = { context, memoizedValue: value, next: null }; 6084 if (null === lastContextDependency) { 6085 if (null === consumer2) 6086 throw Error( 6087 "Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()." 6088 ); 6089 lastContextDependency = context; 6090 consumer2.dependencies = { 6091 lanes: 0, 6092 firstContext: context, 6093 _debugThenableState: null 6094 }; 6095 consumer2.flags |= 524288; 6096 } else lastContextDependency = lastContextDependency.next = context; 6097 return value; 6098 } 6099 function createCache() { 6100 return { 6101 controller: new AbortControllerLocal(), 6102 data: /* @__PURE__ */ new Map(), 6103 refCount: 0 6104 }; 6105 } 6106 function retainCache(cache2) { 6107 cache2.controller.signal.aborted && console.warn( 6108 "A cache instance was retained after it was already freed. This likely indicates a bug in React." 6109 ); 6110 cache2.refCount++; 6111 } 6112 function releaseCache(cache2) { 6113 cache2.refCount--; 6114 0 > cache2.refCount && console.warn( 6115 "A cache instance was released after it was already freed. This likely indicates a bug in React." 6116 ); 6117 0 === cache2.refCount && scheduleCallback$2(NormalPriority, function() { 6118 cache2.controller.abort(); 6119 }); 6120 } 6121 function startUpdateTimerByLane(lane, method, fiber) { 6122 if (0 !== (lane & 127)) 6123 0 > blockingUpdateTime && (blockingUpdateTime = now3(), blockingUpdateTask = createTask(method), blockingUpdateMethodName = method, null != fiber && (blockingUpdateComponentName = getComponentNameFromFiber(fiber)), (executionContext & (RenderContext | CommitContext)) !== NoContext && (componentEffectSpawnedUpdate = true, blockingUpdateType = SPAWNED_UPDATE), lane = resolveEventTimeStamp(), method = resolveEventType(), lane !== blockingEventRepeatTime || method !== blockingEventType ? blockingEventRepeatTime = -1.1 : null !== method && (blockingUpdateType = SPAWNED_UPDATE), blockingEventTime = lane, blockingEventType = method); 6124 else if (0 !== (lane & 4194048) && 0 > transitionUpdateTime && (transitionUpdateTime = now3(), transitionUpdateTask = createTask(method), transitionUpdateMethodName = method, null != fiber && (transitionUpdateComponentName = getComponentNameFromFiber(fiber)), 0 > transitionStartTime)) { 6125 lane = resolveEventTimeStamp(); 6126 method = resolveEventType(); 6127 if (lane !== transitionEventRepeatTime || method !== transitionEventType) 6128 transitionEventRepeatTime = -1.1; 6129 transitionEventTime = lane; 6130 transitionEventType = method; 6131 } 6132 } 6133 function startHostActionTimer(fiber) { 6134 if (0 > blockingUpdateTime) { 6135 blockingUpdateTime = now3(); 6136 blockingUpdateTask = null != fiber._debugTask ? fiber._debugTask : null; 6137 (executionContext & (RenderContext | CommitContext)) !== NoContext && (blockingUpdateType = SPAWNED_UPDATE); 6138 var newEventTime = resolveEventTimeStamp(), newEventType = resolveEventType(); 6139 newEventTime !== blockingEventRepeatTime || newEventType !== blockingEventType ? blockingEventRepeatTime = -1.1 : null !== newEventType && (blockingUpdateType = SPAWNED_UPDATE); 6140 blockingEventTime = newEventTime; 6141 blockingEventType = newEventType; 6142 } 6143 if (0 > transitionUpdateTime && (transitionUpdateTime = now3(), transitionUpdateTask = null != fiber._debugTask ? fiber._debugTask : null, 0 > transitionStartTime)) { 6144 fiber = resolveEventTimeStamp(); 6145 newEventTime = resolveEventType(); 6146 if (fiber !== transitionEventRepeatTime || newEventTime !== transitionEventType) 6147 transitionEventRepeatTime = -1.1; 6148 transitionEventTime = fiber; 6149 transitionEventType = newEventTime; 6150 } 6151 } 6152 function pushNestedEffectDurations() { 6153 var prevEffectDuration = profilerEffectDuration; 6154 profilerEffectDuration = 0; 6155 return prevEffectDuration; 6156 } 6157 function popNestedEffectDurations(prevEffectDuration) { 6158 var elapsedTime = profilerEffectDuration; 6159 profilerEffectDuration = prevEffectDuration; 6160 return elapsedTime; 6161 } 6162 function bubbleNestedEffectDurations(prevEffectDuration) { 6163 var elapsedTime = profilerEffectDuration; 6164 profilerEffectDuration += prevEffectDuration; 6165 return elapsedTime; 6166 } 6167 function resetComponentEffectTimers() { 6168 componentEffectEndTime = componentEffectStartTime = -1.1; 6169 } 6170 function pushComponentEffectStart() { 6171 var prevEffectStart = componentEffectStartTime; 6172 componentEffectStartTime = -1.1; 6173 return prevEffectStart; 6174 } 6175 function popComponentEffectStart(prevEffectStart) { 6176 0 <= prevEffectStart && (componentEffectStartTime = prevEffectStart); 6177 } 6178 function pushComponentEffectDuration() { 6179 var prevEffectDuration = componentEffectDuration; 6180 componentEffectDuration = -0; 6181 return prevEffectDuration; 6182 } 6183 function popComponentEffectDuration(prevEffectDuration) { 6184 0 <= prevEffectDuration && (componentEffectDuration = prevEffectDuration); 6185 } 6186 function pushComponentEffectErrors() { 6187 var prevErrors = componentEffectErrors; 6188 componentEffectErrors = null; 6189 return prevErrors; 6190 } 6191 function pushComponentEffectDidSpawnUpdate() { 6192 var prev = componentEffectSpawnedUpdate; 6193 componentEffectSpawnedUpdate = false; 6194 return prev; 6195 } 6196 function startProfilerTimer(fiber) { 6197 profilerStartTime = now3(); 6198 0 > fiber.actualStartTime && (fiber.actualStartTime = profilerStartTime); 6199 } 6200 function stopProfilerTimerIfRunningAndRecordDuration(fiber) { 6201 if (0 <= profilerStartTime) { 6202 var elapsedTime = now3() - profilerStartTime; 6203 fiber.actualDuration += elapsedTime; 6204 fiber.selfBaseDuration = elapsedTime; 6205 profilerStartTime = -1; 6206 } 6207 } 6208 function stopProfilerTimerIfRunningAndRecordIncompleteDuration(fiber) { 6209 if (0 <= profilerStartTime) { 6210 var elapsedTime = now3() - profilerStartTime; 6211 fiber.actualDuration += elapsedTime; 6212 profilerStartTime = -1; 6213 } 6214 } 6215 function recordEffectDuration() { 6216 if (0 <= profilerStartTime) { 6217 var endTime = now3(), elapsedTime = endTime - profilerStartTime; 6218 profilerStartTime = -1; 6219 profilerEffectDuration += elapsedTime; 6220 componentEffectDuration += elapsedTime; 6221 componentEffectEndTime = endTime; 6222 } 6223 } 6224 function recordEffectError(errorInfo) { 6225 null === componentEffectErrors && (componentEffectErrors = []); 6226 componentEffectErrors.push(errorInfo); 6227 null === commitErrors && (commitErrors = []); 6228 commitErrors.push(errorInfo); 6229 } 6230 function startEffectTimer() { 6231 profilerStartTime = now3(); 6232 0 > componentEffectStartTime && (componentEffectStartTime = profilerStartTime); 6233 } 6234 function transferActualDuration(fiber) { 6235 for (var child = fiber.child; child; ) 6236 fiber.actualDuration += child.actualDuration, child = child.sibling; 6237 } 6238 function entangleAsyncAction(transition, thenable) { 6239 if (null === currentEntangledListeners) { 6240 var entangledListeners = currentEntangledListeners = []; 6241 currentEntangledPendingCount = 0; 6242 currentEntangledLane = requestTransitionLane(); 6243 currentEntangledActionThenable = { 6244 status: "pending", 6245 value: void 0, 6246 then: function(resolve) { 6247 entangledListeners.push(resolve); 6248 } 6249 }; 6250 } 6251 currentEntangledPendingCount++; 6252 thenable.then(pingEngtangledActionScope, pingEngtangledActionScope); 6253 return thenable; 6254 } 6255 function pingEngtangledActionScope() { 6256 if (0 === --currentEntangledPendingCount && (-1 < transitionUpdateTime || (transitionStartTime = -1.1), null !== currentEntangledListeners)) { 6257 null !== currentEntangledActionThenable && (currentEntangledActionThenable.status = "fulfilled"); 6258 var listeners = currentEntangledListeners; 6259 currentEntangledListeners = null; 6260 currentEntangledLane = 0; 6261 currentEntangledActionThenable = null; 6262 for (var i3 = 0; i3 < listeners.length; i3++) (0, listeners[i3])(); 6263 } 6264 } 6265 function chainThenableValue(thenable, result) { 6266 var listeners = [], thenableWithOverride = { 6267 status: "pending", 6268 value: null, 6269 reason: null, 6270 then: function(resolve) { 6271 listeners.push(resolve); 6272 } 6273 }; 6274 thenable.then( 6275 function() { 6276 thenableWithOverride.status = "fulfilled"; 6277 thenableWithOverride.value = result; 6278 for (var i3 = 0; i3 < listeners.length; i3++) (0, listeners[i3])(result); 6279 }, 6280 function(error2) { 6281 thenableWithOverride.status = "rejected"; 6282 thenableWithOverride.reason = error2; 6283 for (error2 = 0; error2 < listeners.length; error2++) 6284 (0, listeners[error2])(void 0); 6285 } 6286 ); 6287 return thenableWithOverride; 6288 } 6289 function peekCacheFromPool() { 6290 var cacheResumedFromPreviousRender = resumedCache.current; 6291 return null !== cacheResumedFromPreviousRender ? cacheResumedFromPreviousRender : workInProgressRoot.pooledCache; 6292 } 6293 function pushTransition(offscreenWorkInProgress, prevCachePool) { 6294 null === prevCachePool ? push(resumedCache, resumedCache.current, offscreenWorkInProgress) : push(resumedCache, prevCachePool.pool, offscreenWorkInProgress); 6295 } 6296 function getSuspendedCache() { 6297 var cacheFromPool = peekCacheFromPool(); 6298 return null === cacheFromPool ? null : { parent: CacheContext._currentValue, pool: cacheFromPool }; 6299 } 6300 function createThenableState() { 6301 return { didWarnAboutUncachedPromise: false, thenables: [] }; 6302 } 6303 function isThenableResolved(thenable) { 6304 thenable = thenable.status; 6305 return "fulfilled" === thenable || "rejected" === thenable; 6306 } 6307 function trackUsedThenable(thenableState2, thenable, index) { 6308 null !== ReactSharedInternals.actQueue && (ReactSharedInternals.didUsePromise = true); 6309 var trackedThenables = thenableState2.thenables; 6310 index = trackedThenables[index]; 6311 void 0 === index ? trackedThenables.push(thenable) : index !== thenable && (thenableState2.didWarnAboutUncachedPromise || (thenableState2.didWarnAboutUncachedPromise = true, console.error( 6312 "A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework." 6313 )), thenable.then(noop$1, noop$1), thenable = index); 6314 if (void 0 === thenable._debugInfo) { 6315 thenableState2 = performance.now(); 6316 trackedThenables = thenable.displayName; 6317 var ioInfo = { 6318 name: "string" === typeof trackedThenables ? trackedThenables : "Promise", 6319 start: thenableState2, 6320 end: thenableState2, 6321 value: thenable 6322 }; 6323 thenable._debugInfo = [{ awaited: ioInfo }]; 6324 "fulfilled" !== thenable.status && "rejected" !== thenable.status && (thenableState2 = function() { 6325 ioInfo.end = performance.now(); 6326 }, thenable.then(thenableState2, thenableState2)); 6327 } 6328 switch (thenable.status) { 6329 case "fulfilled": 6330 return thenable.value; 6331 case "rejected": 6332 throw thenableState2 = thenable.reason, checkIfUseWrappedInAsyncCatch(thenableState2), thenableState2; 6333 default: 6334 if ("string" === typeof thenable.status) 6335 thenable.then(noop$1, noop$1); 6336 else { 6337 thenableState2 = workInProgressRoot; 6338 if (null !== thenableState2 && 100 < thenableState2.shellSuspendCounter) 6339 throw Error( 6340 "An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." 6341 ); 6342 thenableState2 = thenable; 6343 thenableState2.status = "pending"; 6344 thenableState2.then( 6345 function(fulfilledValue) { 6346 if ("pending" === thenable.status) { 6347 var fulfilledThenable = thenable; 6348 fulfilledThenable.status = "fulfilled"; 6349 fulfilledThenable.value = fulfilledValue; 6350 } 6351 }, 6352 function(error2) { 6353 if ("pending" === thenable.status) { 6354 var rejectedThenable = thenable; 6355 rejectedThenable.status = "rejected"; 6356 rejectedThenable.reason = error2; 6357 } 6358 } 6359 ); 6360 } 6361 switch (thenable.status) { 6362 case "fulfilled": 6363 return thenable.value; 6364 case "rejected": 6365 throw thenableState2 = thenable.reason, checkIfUseWrappedInAsyncCatch(thenableState2), thenableState2; 6366 } 6367 suspendedThenable = thenable; 6368 needsToResetSuspendedThenableDEV = true; 6369 throw SuspenseException; 6370 } 6371 } 6372 function resolveLazy(lazyType) { 6373 try { 6374 return callLazyInitInDEV(lazyType); 6375 } catch (x3) { 6376 if (null !== x3 && "object" === typeof x3 && "function" === typeof x3.then) 6377 throw suspendedThenable = x3, needsToResetSuspendedThenableDEV = true, SuspenseException; 6378 throw x3; 6379 } 6380 } 6381 function getSuspendedThenable() { 6382 if (null === suspendedThenable) 6383 throw Error( 6384 "Expected a suspended thenable. This is a bug in React. Please file an issue." 6385 ); 6386 var thenable = suspendedThenable; 6387 suspendedThenable = null; 6388 needsToResetSuspendedThenableDEV = false; 6389 return thenable; 6390 } 6391 function checkIfUseWrappedInAsyncCatch(rejectedReason) { 6392 if (rejectedReason === SuspenseException || rejectedReason === SuspenseActionException) 6393 throw Error( 6394 "Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server." 6395 ); 6396 } 6397 function pushDebugInfo(debugInfo) { 6398 var previousDebugInfo = currentDebugInfo; 6399 null != debugInfo && (currentDebugInfo = null === previousDebugInfo ? debugInfo : previousDebugInfo.concat(debugInfo)); 6400 return previousDebugInfo; 6401 } 6402 function getCurrentDebugTask() { 6403 var debugInfo = currentDebugInfo; 6404 if (null != debugInfo) { 6405 for (var i3 = debugInfo.length - 1; 0 <= i3; i3--) 6406 if (null != debugInfo[i3].name) { 6407 var debugTask = debugInfo[i3].debugTask; 6408 if (null != debugTask) return debugTask; 6409 } 6410 } 6411 return null; 6412 } 6413 function validateFragmentProps(element, fiber, returnFiber) { 6414 for (var keys = Object.keys(element.props), i3 = 0; i3 < keys.length; i3++) { 6415 var key = keys[i3]; 6416 if ("children" !== key && "key" !== key) { 6417 null === fiber && (fiber = createFiberFromElement(element, returnFiber.mode, 0), fiber._debugInfo = currentDebugInfo, fiber.return = returnFiber); 6418 runWithFiberInDEV( 6419 fiber, 6420 function(erroredKey) { 6421 console.error( 6422 "Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.", 6423 erroredKey 6424 ); 6425 }, 6426 key 6427 ); 6428 break; 6429 } 6430 } 6431 } 6432 function unwrapThenable(thenable) { 6433 var index = thenableIndexCounter$1; 6434 thenableIndexCounter$1 += 1; 6435 null === thenableState$1 && (thenableState$1 = createThenableState()); 6436 return trackUsedThenable(thenableState$1, thenable, index); 6437 } 6438 function coerceRef(workInProgress2, element) { 6439 element = element.props.ref; 6440 workInProgress2.ref = void 0 !== element ? element : null; 6441 } 6442 function throwOnInvalidObjectTypeImpl(returnFiber, newChild) { 6443 if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE) 6444 throw Error( 6445 'A React Element from an older version of React was rendered. This is not supported. It can happen if:\n- Multiple copies of the "react" package is used.\n- A library pre-bundled an old copy of "react" or "react/jsx-runtime".\n- A compiler tries to "inline" JSX instead of using the runtime.' 6446 ); 6447 returnFiber = Object.prototype.toString.call(newChild); 6448 throw Error( 6449 "Objects are not valid as a React child (found: " + ("[object Object]" === returnFiber ? "object with keys {" + Object.keys(newChild).join(", ") + "}" : returnFiber) + "). If you meant to render a collection of children, use an array instead." 6450 ); 6451 } 6452 function throwOnInvalidObjectType(returnFiber, newChild) { 6453 var debugTask = getCurrentDebugTask(); 6454 null !== debugTask ? debugTask.run( 6455 throwOnInvalidObjectTypeImpl.bind(null, returnFiber, newChild) 6456 ) : throwOnInvalidObjectTypeImpl(returnFiber, newChild); 6457 } 6458 function warnOnFunctionTypeImpl(returnFiber, invalidChild) { 6459 var parentName = getComponentNameFromFiber(returnFiber) || "Component"; 6460 ownerHasFunctionTypeWarning[parentName] || (ownerHasFunctionTypeWarning[parentName] = true, invalidChild = invalidChild.displayName || invalidChild.name || "Component", 3 === returnFiber.tag ? console.error( 6461 "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n root.render(%s)", 6462 invalidChild, 6463 invalidChild, 6464 invalidChild 6465 ) : console.error( 6466 "Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n <%s>{%s}</%s>", 6467 invalidChild, 6468 invalidChild, 6469 parentName, 6470 invalidChild, 6471 parentName 6472 )); 6473 } 6474 function warnOnFunctionType(returnFiber, invalidChild) { 6475 var debugTask = getCurrentDebugTask(); 6476 null !== debugTask ? debugTask.run( 6477 warnOnFunctionTypeImpl.bind(null, returnFiber, invalidChild) 6478 ) : warnOnFunctionTypeImpl(returnFiber, invalidChild); 6479 } 6480 function warnOnSymbolTypeImpl(returnFiber, invalidChild) { 6481 var parentName = getComponentNameFromFiber(returnFiber) || "Component"; 6482 ownerHasSymbolTypeWarning[parentName] || (ownerHasSymbolTypeWarning[parentName] = true, invalidChild = String(invalidChild), 3 === returnFiber.tag ? console.error( 6483 "Symbols are not valid as a React child.\n root.render(%s)", 6484 invalidChild 6485 ) : console.error( 6486 "Symbols are not valid as a React child.\n <%s>%s</%s>", 6487 parentName, 6488 invalidChild, 6489 parentName 6490 )); 6491 } 6492 function warnOnSymbolType(returnFiber, invalidChild) { 6493 var debugTask = getCurrentDebugTask(); 6494 null !== debugTask ? debugTask.run( 6495 warnOnSymbolTypeImpl.bind(null, returnFiber, invalidChild) 6496 ) : warnOnSymbolTypeImpl(returnFiber, invalidChild); 6497 } 6498 function createChildReconciler(shouldTrackSideEffects) { 6499 function deleteChild(returnFiber, childToDelete) { 6500 if (shouldTrackSideEffects) { 6501 var deletions = returnFiber.deletions; 6502 null === deletions ? (returnFiber.deletions = [childToDelete], returnFiber.flags |= 16) : deletions.push(childToDelete); 6503 } 6504 } 6505 function deleteRemainingChildren(returnFiber, currentFirstChild) { 6506 if (!shouldTrackSideEffects) return null; 6507 for (; null !== currentFirstChild; ) 6508 deleteChild(returnFiber, currentFirstChild), currentFirstChild = currentFirstChild.sibling; 6509 return null; 6510 } 6511 function mapRemainingChildren(currentFirstChild) { 6512 for (var existingChildren = /* @__PURE__ */ new Map(); null !== currentFirstChild; ) 6513 null !== currentFirstChild.key ? existingChildren.set(currentFirstChild.key, currentFirstChild) : existingChildren.set(currentFirstChild.index, currentFirstChild), currentFirstChild = currentFirstChild.sibling; 6514 return existingChildren; 6515 } 6516 function useFiber(fiber, pendingProps) { 6517 fiber = createWorkInProgress(fiber, pendingProps); 6518 fiber.index = 0; 6519 fiber.sibling = null; 6520 return fiber; 6521 } 6522 function placeChild(newFiber, lastPlacedIndex, newIndex) { 6523 newFiber.index = newIndex; 6524 if (!shouldTrackSideEffects) 6525 return newFiber.flags |= 1048576, lastPlacedIndex; 6526 newIndex = newFiber.alternate; 6527 if (null !== newIndex) 6528 return newIndex = newIndex.index, newIndex < lastPlacedIndex ? (newFiber.flags |= 67108866, lastPlacedIndex) : newIndex; 6529 newFiber.flags |= 67108866; 6530 return lastPlacedIndex; 6531 } 6532 function placeSingleChild(newFiber) { 6533 shouldTrackSideEffects && null === newFiber.alternate && (newFiber.flags |= 67108866); 6534 return newFiber; 6535 } 6536 function updateTextNode(returnFiber, current2, textContent, lanes) { 6537 if (null === current2 || 6 !== current2.tag) 6538 return current2 = createFiberFromText( 6539 textContent, 6540 returnFiber.mode, 6541 lanes 6542 ), current2.return = returnFiber, current2._debugOwner = returnFiber, current2._debugTask = returnFiber._debugTask, current2._debugInfo = currentDebugInfo, current2; 6543 current2 = useFiber(current2, textContent); 6544 current2.return = returnFiber; 6545 current2._debugInfo = currentDebugInfo; 6546 return current2; 6547 } 6548 function updateElement(returnFiber, current2, element, lanes) { 6549 var elementType2 = element.type; 6550 if (elementType2 === REACT_FRAGMENT_TYPE) 6551 return current2 = updateFragment( 6552 returnFiber, 6553 current2, 6554 element.props.children, 6555 lanes, 6556 element.key 6557 ), validateFragmentProps(element, current2, returnFiber), current2; 6558 if (null !== current2 && (current2.elementType === elementType2 || isCompatibleFamilyForHotReloading(current2, element) || "object" === typeof elementType2 && null !== elementType2 && elementType2.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType2) === current2.type)) 6559 return current2 = useFiber(current2, element.props), coerceRef(current2, element), current2.return = returnFiber, current2._debugOwner = element._owner, current2._debugInfo = currentDebugInfo, current2; 6560 current2 = createFiberFromElement(element, returnFiber.mode, lanes); 6561 coerceRef(current2, element); 6562 current2.return = returnFiber; 6563 current2._debugInfo = currentDebugInfo; 6564 return current2; 6565 } 6566 function updatePortal(returnFiber, current2, portal, lanes) { 6567 if (null === current2 || 4 !== current2.tag || current2.stateNode.containerInfo !== portal.containerInfo || current2.stateNode.implementation !== portal.implementation) 6568 return current2 = createFiberFromPortal(portal, returnFiber.mode, lanes), current2.return = returnFiber, current2._debugInfo = currentDebugInfo, current2; 6569 current2 = useFiber(current2, portal.children || []); 6570 current2.return = returnFiber; 6571 current2._debugInfo = currentDebugInfo; 6572 return current2; 6573 } 6574 function updateFragment(returnFiber, current2, fragment, lanes, key) { 6575 if (null === current2 || 7 !== current2.tag) 6576 return current2 = createFiberFromFragment( 6577 fragment, 6578 returnFiber.mode, 6579 lanes, 6580 key 6581 ), current2.return = returnFiber, current2._debugOwner = returnFiber, current2._debugTask = returnFiber._debugTask, current2._debugInfo = currentDebugInfo, current2; 6582 current2 = useFiber(current2, fragment); 6583 current2.return = returnFiber; 6584 current2._debugInfo = currentDebugInfo; 6585 return current2; 6586 } 6587 function createChild(returnFiber, newChild, lanes) { 6588 if ("string" === typeof newChild && "" !== newChild || "number" === typeof newChild || "bigint" === typeof newChild) 6589 return newChild = createFiberFromText( 6590 "" + newChild, 6591 returnFiber.mode, 6592 lanes 6593 ), newChild.return = returnFiber, newChild._debugOwner = returnFiber, newChild._debugTask = returnFiber._debugTask, newChild._debugInfo = currentDebugInfo, newChild; 6594 if ("object" === typeof newChild && null !== newChild) { 6595 switch (newChild.$$typeof) { 6596 case REACT_ELEMENT_TYPE: 6597 return lanes = createFiberFromElement( 6598 newChild, 6599 returnFiber.mode, 6600 lanes 6601 ), coerceRef(lanes, newChild), lanes.return = returnFiber, returnFiber = pushDebugInfo(newChild._debugInfo), lanes._debugInfo = currentDebugInfo, currentDebugInfo = returnFiber, lanes; 6602 case REACT_PORTAL_TYPE: 6603 return newChild = createFiberFromPortal( 6604 newChild, 6605 returnFiber.mode, 6606 lanes 6607 ), newChild.return = returnFiber, newChild._debugInfo = currentDebugInfo, newChild; 6608 case REACT_LAZY_TYPE: 6609 var _prevDebugInfo = pushDebugInfo(newChild._debugInfo); 6610 newChild = resolveLazy(newChild); 6611 returnFiber = createChild(returnFiber, newChild, lanes); 6612 currentDebugInfo = _prevDebugInfo; 6613 return returnFiber; 6614 } 6615 if (isArrayImpl(newChild) || getIteratorFn(newChild)) 6616 return lanes = createFiberFromFragment( 6617 newChild, 6618 returnFiber.mode, 6619 lanes, 6620 null 6621 ), lanes.return = returnFiber, lanes._debugOwner = returnFiber, lanes._debugTask = returnFiber._debugTask, returnFiber = pushDebugInfo(newChild._debugInfo), lanes._debugInfo = currentDebugInfo, currentDebugInfo = returnFiber, lanes; 6622 if ("function" === typeof newChild.then) 6623 return _prevDebugInfo = pushDebugInfo(newChild._debugInfo), returnFiber = createChild( 6624 returnFiber, 6625 unwrapThenable(newChild), 6626 lanes 6627 ), currentDebugInfo = _prevDebugInfo, returnFiber; 6628 if (newChild.$$typeof === REACT_CONTEXT_TYPE) 6629 return createChild( 6630 returnFiber, 6631 readContextDuringReconciliation(returnFiber, newChild), 6632 lanes 6633 ); 6634 throwOnInvalidObjectType(returnFiber, newChild); 6635 } 6636 "function" === typeof newChild && warnOnFunctionType(returnFiber, newChild); 6637 "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild); 6638 return null; 6639 } 6640 function updateSlot(returnFiber, oldFiber, newChild, lanes) { 6641 var key = null !== oldFiber ? oldFiber.key : null; 6642 if ("string" === typeof newChild && "" !== newChild || "number" === typeof newChild || "bigint" === typeof newChild) 6643 return null !== key ? null : updateTextNode(returnFiber, oldFiber, "" + newChild, lanes); 6644 if ("object" === typeof newChild && null !== newChild) { 6645 switch (newChild.$$typeof) { 6646 case REACT_ELEMENT_TYPE: 6647 return newChild.key === key ? (key = pushDebugInfo(newChild._debugInfo), returnFiber = updateElement( 6648 returnFiber, 6649 oldFiber, 6650 newChild, 6651 lanes 6652 ), currentDebugInfo = key, returnFiber) : null; 6653 case REACT_PORTAL_TYPE: 6654 return newChild.key === key ? updatePortal(returnFiber, oldFiber, newChild, lanes) : null; 6655 case REACT_LAZY_TYPE: 6656 return key = pushDebugInfo(newChild._debugInfo), newChild = resolveLazy(newChild), returnFiber = updateSlot( 6657 returnFiber, 6658 oldFiber, 6659 newChild, 6660 lanes 6661 ), currentDebugInfo = key, returnFiber; 6662 } 6663 if (isArrayImpl(newChild) || getIteratorFn(newChild)) { 6664 if (null !== key) return null; 6665 key = pushDebugInfo(newChild._debugInfo); 6666 returnFiber = updateFragment( 6667 returnFiber, 6668 oldFiber, 6669 newChild, 6670 lanes, 6671 null 6672 ); 6673 currentDebugInfo = key; 6674 return returnFiber; 6675 } 6676 if ("function" === typeof newChild.then) 6677 return key = pushDebugInfo(newChild._debugInfo), returnFiber = updateSlot( 6678 returnFiber, 6679 oldFiber, 6680 unwrapThenable(newChild), 6681 lanes 6682 ), currentDebugInfo = key, returnFiber; 6683 if (newChild.$$typeof === REACT_CONTEXT_TYPE) 6684 return updateSlot( 6685 returnFiber, 6686 oldFiber, 6687 readContextDuringReconciliation(returnFiber, newChild), 6688 lanes 6689 ); 6690 throwOnInvalidObjectType(returnFiber, newChild); 6691 } 6692 "function" === typeof newChild && warnOnFunctionType(returnFiber, newChild); 6693 "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild); 6694 return null; 6695 } 6696 function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) { 6697 if ("string" === typeof newChild && "" !== newChild || "number" === typeof newChild || "bigint" === typeof newChild) 6698 return existingChildren = existingChildren.get(newIdx) || null, updateTextNode(returnFiber, existingChildren, "" + newChild, lanes); 6699 if ("object" === typeof newChild && null !== newChild) { 6700 switch (newChild.$$typeof) { 6701 case REACT_ELEMENT_TYPE: 6702 return newIdx = existingChildren.get( 6703 null === newChild.key ? newIdx : newChild.key 6704 ) || null, existingChildren = pushDebugInfo(newChild._debugInfo), returnFiber = updateElement( 6705 returnFiber, 6706 newIdx, 6707 newChild, 6708 lanes 6709 ), currentDebugInfo = existingChildren, returnFiber; 6710 case REACT_PORTAL_TYPE: 6711 return existingChildren = existingChildren.get( 6712 null === newChild.key ? newIdx : newChild.key 6713 ) || null, updatePortal(returnFiber, existingChildren, newChild, lanes); 6714 case REACT_LAZY_TYPE: 6715 var _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo); 6716 newChild = resolveLazy(newChild); 6717 returnFiber = updateFromMap( 6718 existingChildren, 6719 returnFiber, 6720 newIdx, 6721 newChild, 6722 lanes 6723 ); 6724 currentDebugInfo = _prevDebugInfo7; 6725 return returnFiber; 6726 } 6727 if (isArrayImpl(newChild) || getIteratorFn(newChild)) 6728 return newIdx = existingChildren.get(newIdx) || null, existingChildren = pushDebugInfo(newChild._debugInfo), returnFiber = updateFragment( 6729 returnFiber, 6730 newIdx, 6731 newChild, 6732 lanes, 6733 null 6734 ), currentDebugInfo = existingChildren, returnFiber; 6735 if ("function" === typeof newChild.then) 6736 return _prevDebugInfo7 = pushDebugInfo(newChild._debugInfo), returnFiber = updateFromMap( 6737 existingChildren, 6738 returnFiber, 6739 newIdx, 6740 unwrapThenable(newChild), 6741 lanes 6742 ), currentDebugInfo = _prevDebugInfo7, returnFiber; 6743 if (newChild.$$typeof === REACT_CONTEXT_TYPE) 6744 return updateFromMap( 6745 existingChildren, 6746 returnFiber, 6747 newIdx, 6748 readContextDuringReconciliation(returnFiber, newChild), 6749 lanes 6750 ); 6751 throwOnInvalidObjectType(returnFiber, newChild); 6752 } 6753 "function" === typeof newChild && warnOnFunctionType(returnFiber, newChild); 6754 "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild); 6755 return null; 6756 } 6757 function warnOnInvalidKey(returnFiber, workInProgress2, child, knownKeys) { 6758 if ("object" !== typeof child || null === child) return knownKeys; 6759 switch (child.$$typeof) { 6760 case REACT_ELEMENT_TYPE: 6761 case REACT_PORTAL_TYPE: 6762 warnForMissingKey(returnFiber, workInProgress2, child); 6763 var key = child.key; 6764 if ("string" !== typeof key) break; 6765 if (null === knownKeys) { 6766 knownKeys = /* @__PURE__ */ new Set(); 6767 knownKeys.add(key); 6768 break; 6769 } 6770 if (!knownKeys.has(key)) { 6771 knownKeys.add(key); 6772 break; 6773 } 6774 runWithFiberInDEV(workInProgress2, function() { 6775 console.error( 6776 "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \u2014 the behavior is unsupported and could change in a future version.", 6777 key 6778 ); 6779 }); 6780 break; 6781 case REACT_LAZY_TYPE: 6782 child = resolveLazy(child), warnOnInvalidKey(returnFiber, workInProgress2, child, knownKeys); 6783 } 6784 return knownKeys; 6785 } 6786 function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) { 6787 for (var knownKeys = null, resultingFirstChild = null, previousNewFiber = null, oldFiber = currentFirstChild, newIdx = currentFirstChild = 0, nextOldFiber = null; null !== oldFiber && newIdx < newChildren.length; newIdx++) { 6788 oldFiber.index > newIdx ? (nextOldFiber = oldFiber, oldFiber = null) : nextOldFiber = oldFiber.sibling; 6789 var newFiber = updateSlot( 6790 returnFiber, 6791 oldFiber, 6792 newChildren[newIdx], 6793 lanes 6794 ); 6795 if (null === newFiber) { 6796 null === oldFiber && (oldFiber = nextOldFiber); 6797 break; 6798 } 6799 knownKeys = warnOnInvalidKey( 6800 returnFiber, 6801 newFiber, 6802 newChildren[newIdx], 6803 knownKeys 6804 ); 6805 shouldTrackSideEffects && oldFiber && null === newFiber.alternate && deleteChild(returnFiber, oldFiber); 6806 currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx); 6807 null === previousNewFiber ? resultingFirstChild = newFiber : previousNewFiber.sibling = newFiber; 6808 previousNewFiber = newFiber; 6809 oldFiber = nextOldFiber; 6810 } 6811 if (newIdx === newChildren.length) 6812 return deleteRemainingChildren(returnFiber, oldFiber), isHydrating && pushTreeFork(returnFiber, newIdx), resultingFirstChild; 6813 if (null === oldFiber) { 6814 for (; newIdx < newChildren.length; newIdx++) 6815 oldFiber = createChild(returnFiber, newChildren[newIdx], lanes), null !== oldFiber && (knownKeys = warnOnInvalidKey( 6816 returnFiber, 6817 oldFiber, 6818 newChildren[newIdx], 6819 knownKeys 6820 ), currentFirstChild = placeChild( 6821 oldFiber, 6822 currentFirstChild, 6823 newIdx 6824 ), null === previousNewFiber ? resultingFirstChild = oldFiber : previousNewFiber.sibling = oldFiber, previousNewFiber = oldFiber); 6825 isHydrating && pushTreeFork(returnFiber, newIdx); 6826 return resultingFirstChild; 6827 } 6828 for (oldFiber = mapRemainingChildren(oldFiber); newIdx < newChildren.length; newIdx++) 6829 nextOldFiber = updateFromMap( 6830 oldFiber, 6831 returnFiber, 6832 newIdx, 6833 newChildren[newIdx], 6834 lanes 6835 ), null !== nextOldFiber && (knownKeys = warnOnInvalidKey( 6836 returnFiber, 6837 nextOldFiber, 6838 newChildren[newIdx], 6839 knownKeys 6840 ), shouldTrackSideEffects && null !== nextOldFiber.alternate && oldFiber.delete( 6841 null === nextOldFiber.key ? newIdx : nextOldFiber.key 6842 ), currentFirstChild = placeChild( 6843 nextOldFiber, 6844 currentFirstChild, 6845 newIdx 6846 ), null === previousNewFiber ? resultingFirstChild = nextOldFiber : previousNewFiber.sibling = nextOldFiber, previousNewFiber = nextOldFiber); 6847 shouldTrackSideEffects && oldFiber.forEach(function(child) { 6848 return deleteChild(returnFiber, child); 6849 }); 6850 isHydrating && pushTreeFork(returnFiber, newIdx); 6851 return resultingFirstChild; 6852 } 6853 function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildren, lanes) { 6854 if (null == newChildren) 6855 throw Error("An iterable object provided no iterator."); 6856 for (var resultingFirstChild = null, previousNewFiber = null, oldFiber = currentFirstChild, newIdx = currentFirstChild = 0, nextOldFiber = null, knownKeys = null, step = newChildren.next(); null !== oldFiber && !step.done; newIdx++, step = newChildren.next()) { 6857 oldFiber.index > newIdx ? (nextOldFiber = oldFiber, oldFiber = null) : nextOldFiber = oldFiber.sibling; 6858 var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes); 6859 if (null === newFiber) { 6860 null === oldFiber && (oldFiber = nextOldFiber); 6861 break; 6862 } 6863 knownKeys = warnOnInvalidKey( 6864 returnFiber, 6865 newFiber, 6866 step.value, 6867 knownKeys 6868 ); 6869 shouldTrackSideEffects && oldFiber && null === newFiber.alternate && deleteChild(returnFiber, oldFiber); 6870 currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx); 6871 null === previousNewFiber ? resultingFirstChild = newFiber : previousNewFiber.sibling = newFiber; 6872 previousNewFiber = newFiber; 6873 oldFiber = nextOldFiber; 6874 } 6875 if (step.done) 6876 return deleteRemainingChildren(returnFiber, oldFiber), isHydrating && pushTreeFork(returnFiber, newIdx), resultingFirstChild; 6877 if (null === oldFiber) { 6878 for (; !step.done; newIdx++, step = newChildren.next()) 6879 oldFiber = createChild(returnFiber, step.value, lanes), null !== oldFiber && (knownKeys = warnOnInvalidKey( 6880 returnFiber, 6881 oldFiber, 6882 step.value, 6883 knownKeys 6884 ), currentFirstChild = placeChild( 6885 oldFiber, 6886 currentFirstChild, 6887 newIdx 6888 ), null === previousNewFiber ? resultingFirstChild = oldFiber : previousNewFiber.sibling = oldFiber, previousNewFiber = oldFiber); 6889 isHydrating && pushTreeFork(returnFiber, newIdx); 6890 return resultingFirstChild; 6891 } 6892 for (oldFiber = mapRemainingChildren(oldFiber); !step.done; newIdx++, step = newChildren.next()) 6893 nextOldFiber = updateFromMap( 6894 oldFiber, 6895 returnFiber, 6896 newIdx, 6897 step.value, 6898 lanes 6899 ), null !== nextOldFiber && (knownKeys = warnOnInvalidKey( 6900 returnFiber, 6901 nextOldFiber, 6902 step.value, 6903 knownKeys 6904 ), shouldTrackSideEffects && null !== nextOldFiber.alternate && oldFiber.delete( 6905 null === nextOldFiber.key ? newIdx : nextOldFiber.key 6906 ), currentFirstChild = placeChild( 6907 nextOldFiber, 6908 currentFirstChild, 6909 newIdx 6910 ), null === previousNewFiber ? resultingFirstChild = nextOldFiber : previousNewFiber.sibling = nextOldFiber, previousNewFiber = nextOldFiber); 6911 shouldTrackSideEffects && oldFiber.forEach(function(child) { 6912 return deleteChild(returnFiber, child); 6913 }); 6914 isHydrating && pushTreeFork(returnFiber, newIdx); 6915 return resultingFirstChild; 6916 } 6917 function reconcileChildFibersImpl(returnFiber, currentFirstChild, newChild, lanes) { 6918 "object" === typeof newChild && null !== newChild && newChild.type === REACT_FRAGMENT_TYPE && null === newChild.key && (validateFragmentProps(newChild, null, returnFiber), newChild = newChild.props.children); 6919 if ("object" === typeof newChild && null !== newChild) { 6920 switch (newChild.$$typeof) { 6921 case REACT_ELEMENT_TYPE: 6922 var prevDebugInfo = pushDebugInfo(newChild._debugInfo); 6923 a: { 6924 for (var key = newChild.key; null !== currentFirstChild; ) { 6925 if (currentFirstChild.key === key) { 6926 key = newChild.type; 6927 if (key === REACT_FRAGMENT_TYPE) { 6928 if (7 === currentFirstChild.tag) { 6929 deleteRemainingChildren( 6930 returnFiber, 6931 currentFirstChild.sibling 6932 ); 6933 lanes = useFiber( 6934 currentFirstChild, 6935 newChild.props.children 6936 ); 6937 lanes.return = returnFiber; 6938 lanes._debugOwner = newChild._owner; 6939 lanes._debugInfo = currentDebugInfo; 6940 validateFragmentProps(newChild, lanes, returnFiber); 6941 returnFiber = lanes; 6942 break a; 6943 } 6944 } else if (currentFirstChild.elementType === key || isCompatibleFamilyForHotReloading( 6945 currentFirstChild, 6946 newChild 6947 ) || "object" === typeof key && null !== key && key.$$typeof === REACT_LAZY_TYPE && resolveLazy(key) === currentFirstChild.type) { 6948 deleteRemainingChildren( 6949 returnFiber, 6950 currentFirstChild.sibling 6951 ); 6952 lanes = useFiber(currentFirstChild, newChild.props); 6953 coerceRef(lanes, newChild); 6954 lanes.return = returnFiber; 6955 lanes._debugOwner = newChild._owner; 6956 lanes._debugInfo = currentDebugInfo; 6957 returnFiber = lanes; 6958 break a; 6959 } 6960 deleteRemainingChildren(returnFiber, currentFirstChild); 6961 break; 6962 } else deleteChild(returnFiber, currentFirstChild); 6963 currentFirstChild = currentFirstChild.sibling; 6964 } 6965 newChild.type === REACT_FRAGMENT_TYPE ? (lanes = createFiberFromFragment( 6966 newChild.props.children, 6967 returnFiber.mode, 6968 lanes, 6969 newChild.key 6970 ), lanes.return = returnFiber, lanes._debugOwner = returnFiber, lanes._debugTask = returnFiber._debugTask, lanes._debugInfo = currentDebugInfo, validateFragmentProps(newChild, lanes, returnFiber), returnFiber = lanes) : (lanes = createFiberFromElement( 6971 newChild, 6972 returnFiber.mode, 6973 lanes 6974 ), coerceRef(lanes, newChild), lanes.return = returnFiber, lanes._debugInfo = currentDebugInfo, returnFiber = lanes); 6975 } 6976 returnFiber = placeSingleChild(returnFiber); 6977 currentDebugInfo = prevDebugInfo; 6978 return returnFiber; 6979 case REACT_PORTAL_TYPE: 6980 a: { 6981 prevDebugInfo = newChild; 6982 for (newChild = prevDebugInfo.key; null !== currentFirstChild; ) { 6983 if (currentFirstChild.key === newChild) 6984 if (4 === currentFirstChild.tag && currentFirstChild.stateNode.containerInfo === prevDebugInfo.containerInfo && currentFirstChild.stateNode.implementation === prevDebugInfo.implementation) { 6985 deleteRemainingChildren( 6986 returnFiber, 6987 currentFirstChild.sibling 6988 ); 6989 lanes = useFiber( 6990 currentFirstChild, 6991 prevDebugInfo.children || [] 6992 ); 6993 lanes.return = returnFiber; 6994 returnFiber = lanes; 6995 break a; 6996 } else { 6997 deleteRemainingChildren(returnFiber, currentFirstChild); 6998 break; 6999 } 7000 else deleteChild(returnFiber, currentFirstChild); 7001 currentFirstChild = currentFirstChild.sibling; 7002 } 7003 lanes = createFiberFromPortal( 7004 prevDebugInfo, 7005 returnFiber.mode, 7006 lanes 7007 ); 7008 lanes.return = returnFiber; 7009 returnFiber = lanes; 7010 } 7011 return placeSingleChild(returnFiber); 7012 case REACT_LAZY_TYPE: 7013 return prevDebugInfo = pushDebugInfo(newChild._debugInfo), newChild = resolveLazy(newChild), returnFiber = reconcileChildFibersImpl( 7014 returnFiber, 7015 currentFirstChild, 7016 newChild, 7017 lanes 7018 ), currentDebugInfo = prevDebugInfo, returnFiber; 7019 } 7020 if (isArrayImpl(newChild)) 7021 return prevDebugInfo = pushDebugInfo(newChild._debugInfo), returnFiber = reconcileChildrenArray( 7022 returnFiber, 7023 currentFirstChild, 7024 newChild, 7025 lanes 7026 ), currentDebugInfo = prevDebugInfo, returnFiber; 7027 if (getIteratorFn(newChild)) { 7028 prevDebugInfo = pushDebugInfo(newChild._debugInfo); 7029 key = getIteratorFn(newChild); 7030 if ("function" !== typeof key) 7031 throw Error( 7032 "An object is not an iterable. This error is likely caused by a bug in React. Please file an issue." 7033 ); 7034 var newChildren = key.call(newChild); 7035 if (newChildren === newChild) { 7036 if (0 !== returnFiber.tag || "[object GeneratorFunction]" !== Object.prototype.toString.call(returnFiber.type) || "[object Generator]" !== Object.prototype.toString.call(newChildren)) 7037 didWarnAboutGenerators || console.error( 7038 "Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items." 7039 ), didWarnAboutGenerators = true; 7040 } else 7041 newChild.entries !== key || didWarnAboutMaps || (console.error( 7042 "Using Maps as children is not supported. Use an array of keyed ReactElements instead." 7043 ), didWarnAboutMaps = true); 7044 returnFiber = reconcileChildrenIterator( 7045 returnFiber, 7046 currentFirstChild, 7047 newChildren, 7048 lanes 7049 ); 7050 currentDebugInfo = prevDebugInfo; 7051 return returnFiber; 7052 } 7053 if ("function" === typeof newChild.then) 7054 return prevDebugInfo = pushDebugInfo(newChild._debugInfo), returnFiber = reconcileChildFibersImpl( 7055 returnFiber, 7056 currentFirstChild, 7057 unwrapThenable(newChild), 7058 lanes 7059 ), currentDebugInfo = prevDebugInfo, returnFiber; 7060 if (newChild.$$typeof === REACT_CONTEXT_TYPE) 7061 return reconcileChildFibersImpl( 7062 returnFiber, 7063 currentFirstChild, 7064 readContextDuringReconciliation(returnFiber, newChild), 7065 lanes 7066 ); 7067 throwOnInvalidObjectType(returnFiber, newChild); 7068 } 7069 if ("string" === typeof newChild && "" !== newChild || "number" === typeof newChild || "bigint" === typeof newChild) 7070 return prevDebugInfo = "" + newChild, null !== currentFirstChild && 6 === currentFirstChild.tag ? (deleteRemainingChildren( 7071 returnFiber, 7072 currentFirstChild.sibling 7073 ), lanes = useFiber(currentFirstChild, prevDebugInfo), lanes.return = returnFiber, returnFiber = lanes) : (deleteRemainingChildren(returnFiber, currentFirstChild), lanes = createFiberFromText( 7074 prevDebugInfo, 7075 returnFiber.mode, 7076 lanes 7077 ), lanes.return = returnFiber, lanes._debugOwner = returnFiber, lanes._debugTask = returnFiber._debugTask, lanes._debugInfo = currentDebugInfo, returnFiber = lanes), placeSingleChild(returnFiber); 7078 "function" === typeof newChild && warnOnFunctionType(returnFiber, newChild); 7079 "symbol" === typeof newChild && warnOnSymbolType(returnFiber, newChild); 7080 return deleteRemainingChildren(returnFiber, currentFirstChild); 7081 } 7082 return function(returnFiber, currentFirstChild, newChild, lanes) { 7083 var prevDebugInfo = currentDebugInfo; 7084 currentDebugInfo = null; 7085 try { 7086 thenableIndexCounter$1 = 0; 7087 var firstChildFiber = reconcileChildFibersImpl( 7088 returnFiber, 7089 currentFirstChild, 7090 newChild, 7091 lanes 7092 ); 7093 thenableState$1 = null; 7094 return firstChildFiber; 7095 } catch (x3) { 7096 if (x3 === SuspenseException || x3 === SuspenseActionException) throw x3; 7097 var fiber = createFiber(29, x3, null, returnFiber.mode); 7098 fiber.lanes = lanes; 7099 fiber.return = returnFiber; 7100 var debugInfo = fiber._debugInfo = currentDebugInfo; 7101 fiber._debugOwner = returnFiber._debugOwner; 7102 fiber._debugTask = returnFiber._debugTask; 7103 if (null != debugInfo) { 7104 for (var i3 = debugInfo.length - 1; 0 <= i3; i3--) 7105 if ("string" === typeof debugInfo[i3].stack) { 7106 fiber._debugOwner = debugInfo[i3]; 7107 fiber._debugTask = debugInfo[i3].debugTask; 7108 break; 7109 } 7110 } 7111 return fiber; 7112 } finally { 7113 currentDebugInfo = prevDebugInfo; 7114 } 7115 }; 7116 } 7117 function validateSuspenseListNestedChild(childSlot, index) { 7118 var isAnArray = isArrayImpl(childSlot); 7119 childSlot = !isAnArray && "function" === typeof getIteratorFn(childSlot); 7120 return isAnArray || childSlot ? (isAnArray = isAnArray ? "array" : "iterable", console.error( 7121 "A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>", 7122 isAnArray, 7123 index, 7124 isAnArray 7125 ), false) : true; 7126 } 7127 function initializeUpdateQueue(fiber) { 7128 fiber.updateQueue = { 7129 baseState: fiber.memoizedState, 7130 firstBaseUpdate: null, 7131 lastBaseUpdate: null, 7132 shared: { pending: null, lanes: 0, hiddenCallbacks: null }, 7133 callbacks: null 7134 }; 7135 } 7136 function cloneUpdateQueue(current2, workInProgress2) { 7137 current2 = current2.updateQueue; 7138 workInProgress2.updateQueue === current2 && (workInProgress2.updateQueue = { 7139 baseState: current2.baseState, 7140 firstBaseUpdate: current2.firstBaseUpdate, 7141 lastBaseUpdate: current2.lastBaseUpdate, 7142 shared: current2.shared, 7143 callbacks: null 7144 }); 7145 } 7146 function createUpdate(lane) { 7147 return { 7148 lane, 7149 tag: UpdateState, 7150 payload: null, 7151 callback: null, 7152 next: null 7153 }; 7154 } 7155 function enqueueUpdate(fiber, update, lane) { 7156 var updateQueue = fiber.updateQueue; 7157 if (null === updateQueue) return null; 7158 updateQueue = updateQueue.shared; 7159 if (currentlyProcessingQueue === updateQueue && !didWarnUpdateInsideUpdate) { 7160 var componentName2 = getComponentNameFromFiber(fiber); 7161 console.error( 7162 "An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\n\nPlease update the following component: %s", 7163 componentName2 7164 ); 7165 didWarnUpdateInsideUpdate = true; 7166 } 7167 if ((executionContext & RenderContext) !== NoContext) 7168 return componentName2 = updateQueue.pending, null === componentName2 ? update.next = update : (update.next = componentName2.next, componentName2.next = update), updateQueue.pending = update, update = getRootForUpdatedFiber(fiber), markUpdateLaneFromFiberToRoot(fiber, null, lane), update; 7169 enqueueUpdate$1(fiber, updateQueue, update, lane); 7170 return getRootForUpdatedFiber(fiber); 7171 } 7172 function entangleTransitions(root3, fiber, lane) { 7173 fiber = fiber.updateQueue; 7174 if (null !== fiber && (fiber = fiber.shared, 0 !== (lane & 4194048))) { 7175 var queueLanes = fiber.lanes; 7176 queueLanes &= root3.pendingLanes; 7177 lane |= queueLanes; 7178 fiber.lanes = lane; 7179 markRootEntangled(root3, lane); 7180 } 7181 } 7182 function enqueueCapturedUpdate(workInProgress2, capturedUpdate) { 7183 var queue = workInProgress2.updateQueue, current2 = workInProgress2.alternate; 7184 if (null !== current2 && (current2 = current2.updateQueue, queue === current2)) { 7185 var newFirst = null, newLast = null; 7186 queue = queue.firstBaseUpdate; 7187 if (null !== queue) { 7188 do { 7189 var clone = { 7190 lane: queue.lane, 7191 tag: queue.tag, 7192 payload: queue.payload, 7193 callback: null, 7194 next: null 7195 }; 7196 null === newLast ? newFirst = newLast = clone : newLast = newLast.next = clone; 7197 queue = queue.next; 7198 } while (null !== queue); 7199 null === newLast ? newFirst = newLast = capturedUpdate : newLast = newLast.next = capturedUpdate; 7200 } else newFirst = newLast = capturedUpdate; 7201 queue = { 7202 baseState: current2.baseState, 7203 firstBaseUpdate: newFirst, 7204 lastBaseUpdate: newLast, 7205 shared: current2.shared, 7206 callbacks: current2.callbacks 7207 }; 7208 workInProgress2.updateQueue = queue; 7209 return; 7210 } 7211 workInProgress2 = queue.lastBaseUpdate; 7212 null === workInProgress2 ? queue.firstBaseUpdate = capturedUpdate : workInProgress2.next = capturedUpdate; 7213 queue.lastBaseUpdate = capturedUpdate; 7214 } 7215 function suspendIfUpdateReadFromEntangledAsyncAction() { 7216 if (didReadFromEntangledAsyncAction) { 7217 var entangledActionThenable = currentEntangledActionThenable; 7218 if (null !== entangledActionThenable) throw entangledActionThenable; 7219 } 7220 } 7221 function processUpdateQueue(workInProgress2, props, instance$jscomp$0, renderLanes2) { 7222 didReadFromEntangledAsyncAction = false; 7223 var queue = workInProgress2.updateQueue; 7224 hasForceUpdate = false; 7225 currentlyProcessingQueue = queue.shared; 7226 var firstBaseUpdate = queue.firstBaseUpdate, lastBaseUpdate = queue.lastBaseUpdate, pendingQueue = queue.shared.pending; 7227 if (null !== pendingQueue) { 7228 queue.shared.pending = null; 7229 var lastPendingUpdate = pendingQueue, firstPendingUpdate = lastPendingUpdate.next; 7230 lastPendingUpdate.next = null; 7231 null === lastBaseUpdate ? firstBaseUpdate = firstPendingUpdate : lastBaseUpdate.next = firstPendingUpdate; 7232 lastBaseUpdate = lastPendingUpdate; 7233 var current2 = workInProgress2.alternate; 7234 null !== current2 && (current2 = current2.updateQueue, pendingQueue = current2.lastBaseUpdate, pendingQueue !== lastBaseUpdate && (null === pendingQueue ? current2.firstBaseUpdate = firstPendingUpdate : pendingQueue.next = firstPendingUpdate, current2.lastBaseUpdate = lastPendingUpdate)); 7235 } 7236 if (null !== firstBaseUpdate) { 7237 var newState = queue.baseState; 7238 lastBaseUpdate = 0; 7239 current2 = firstPendingUpdate = lastPendingUpdate = null; 7240 pendingQueue = firstBaseUpdate; 7241 do { 7242 var updateLane = pendingQueue.lane & -536870913, isHiddenUpdate = updateLane !== pendingQueue.lane; 7243 if (isHiddenUpdate ? (workInProgressRootRenderLanes & updateLane) === updateLane : (renderLanes2 & updateLane) === updateLane) { 7244 0 !== updateLane && updateLane === currentEntangledLane && (didReadFromEntangledAsyncAction = true); 7245 null !== current2 && (current2 = current2.next = { 7246 lane: 0, 7247 tag: pendingQueue.tag, 7248 payload: pendingQueue.payload, 7249 callback: null, 7250 next: null 7251 }); 7252 a: { 7253 updateLane = workInProgress2; 7254 var partialState = pendingQueue; 7255 var nextProps = props, instance = instance$jscomp$0; 7256 switch (partialState.tag) { 7257 case ReplaceState: 7258 partialState = partialState.payload; 7259 if ("function" === typeof partialState) { 7260 isDisallowedContextReadInDEV = true; 7261 var nextState = partialState.call( 7262 instance, 7263 newState, 7264 nextProps 7265 ); 7266 if (updateLane.mode & StrictLegacyMode) { 7267 setIsStrictModeForDevtools(true); 7268 try { 7269 partialState.call(instance, newState, nextProps); 7270 } finally { 7271 setIsStrictModeForDevtools(false); 7272 } 7273 } 7274 isDisallowedContextReadInDEV = false; 7275 newState = nextState; 7276 break a; 7277 } 7278 newState = partialState; 7279 break a; 7280 case CaptureUpdate: 7281 updateLane.flags = updateLane.flags & -65537 | 128; 7282 case UpdateState: 7283 nextState = partialState.payload; 7284 if ("function" === typeof nextState) { 7285 isDisallowedContextReadInDEV = true; 7286 partialState = nextState.call( 7287 instance, 7288 newState, 7289 nextProps 7290 ); 7291 if (updateLane.mode & StrictLegacyMode) { 7292 setIsStrictModeForDevtools(true); 7293 try { 7294 nextState.call(instance, newState, nextProps); 7295 } finally { 7296 setIsStrictModeForDevtools(false); 7297 } 7298 } 7299 isDisallowedContextReadInDEV = false; 7300 } else partialState = nextState; 7301 if (null === partialState || void 0 === partialState) break a; 7302 newState = assign({}, newState, partialState); 7303 break a; 7304 case ForceUpdate: 7305 hasForceUpdate = true; 7306 } 7307 } 7308 updateLane = pendingQueue.callback; 7309 null !== updateLane && (workInProgress2.flags |= 64, isHiddenUpdate && (workInProgress2.flags |= 8192), isHiddenUpdate = queue.callbacks, null === isHiddenUpdate ? queue.callbacks = [updateLane] : isHiddenUpdate.push(updateLane)); 7310 } else 7311 isHiddenUpdate = { 7312 lane: updateLane, 7313 tag: pendingQueue.tag, 7314 payload: pendingQueue.payload, 7315 callback: pendingQueue.callback, 7316 next: null 7317 }, null === current2 ? (firstPendingUpdate = current2 = isHiddenUpdate, lastPendingUpdate = newState) : current2 = current2.next = isHiddenUpdate, lastBaseUpdate |= updateLane; 7318 pendingQueue = pendingQueue.next; 7319 if (null === pendingQueue) 7320 if (pendingQueue = queue.shared.pending, null === pendingQueue) 7321 break; 7322 else 7323 isHiddenUpdate = pendingQueue, pendingQueue = isHiddenUpdate.next, isHiddenUpdate.next = null, queue.lastBaseUpdate = isHiddenUpdate, queue.shared.pending = null; 7324 } while (1); 7325 null === current2 && (lastPendingUpdate = newState); 7326 queue.baseState = lastPendingUpdate; 7327 queue.firstBaseUpdate = firstPendingUpdate; 7328 queue.lastBaseUpdate = current2; 7329 null === firstBaseUpdate && (queue.shared.lanes = 0); 7330 workInProgressRootSkippedLanes |= lastBaseUpdate; 7331 workInProgress2.lanes = lastBaseUpdate; 7332 workInProgress2.memoizedState = newState; 7333 } 7334 currentlyProcessingQueue = null; 7335 } 7336 function callCallback(callback, context) { 7337 if ("function" !== typeof callback) 7338 throw Error( 7339 "Invalid argument passed as callback. Expected a function. Instead received: " + callback 7340 ); 7341 callback.call(context); 7342 } 7343 function commitHiddenCallbacks(updateQueue, context) { 7344 var hiddenCallbacks = updateQueue.shared.hiddenCallbacks; 7345 if (null !== hiddenCallbacks) 7346 for (updateQueue.shared.hiddenCallbacks = null, updateQueue = 0; updateQueue < hiddenCallbacks.length; updateQueue++) 7347 callCallback(hiddenCallbacks[updateQueue], context); 7348 } 7349 function commitCallbacks(updateQueue, context) { 7350 var callbacks = updateQueue.callbacks; 7351 if (null !== callbacks) 7352 for (updateQueue.callbacks = null, updateQueue = 0; updateQueue < callbacks.length; updateQueue++) 7353 callCallback(callbacks[updateQueue], context); 7354 } 7355 function pushHiddenContext(fiber, context) { 7356 var prevEntangledRenderLanes = entangledRenderLanes; 7357 push(prevEntangledRenderLanesCursor, prevEntangledRenderLanes, fiber); 7358 push(currentTreeHiddenStackCursor, context, fiber); 7359 entangledRenderLanes = prevEntangledRenderLanes | context.baseLanes; 7360 } 7361 function reuseHiddenContextOnStack(fiber) { 7362 push(prevEntangledRenderLanesCursor, entangledRenderLanes, fiber); 7363 push( 7364 currentTreeHiddenStackCursor, 7365 currentTreeHiddenStackCursor.current, 7366 fiber 7367 ); 7368 } 7369 function popHiddenContext(fiber) { 7370 entangledRenderLanes = prevEntangledRenderLanesCursor.current; 7371 pop(currentTreeHiddenStackCursor, fiber); 7372 pop(prevEntangledRenderLanesCursor, fiber); 7373 } 7374 function pushPrimaryTreeSuspenseHandler(handler) { 7375 var current2 = handler.alternate; 7376 push( 7377 suspenseStackCursor, 7378 suspenseStackCursor.current & SubtreeSuspenseContextMask, 7379 handler 7380 ); 7381 push(suspenseHandlerStackCursor, handler, handler); 7382 null === shellBoundary && (null === current2 || null !== currentTreeHiddenStackCursor.current ? shellBoundary = handler : null !== current2.memoizedState && (shellBoundary = handler)); 7383 } 7384 function pushDehydratedActivitySuspenseHandler(fiber) { 7385 push(suspenseStackCursor, suspenseStackCursor.current, fiber); 7386 push(suspenseHandlerStackCursor, fiber, fiber); 7387 null === shellBoundary && (shellBoundary = fiber); 7388 } 7389 function pushOffscreenSuspenseHandler(fiber) { 7390 22 === fiber.tag ? (push(suspenseStackCursor, suspenseStackCursor.current, fiber), push(suspenseHandlerStackCursor, fiber, fiber), null === shellBoundary && (shellBoundary = fiber)) : reuseSuspenseHandlerOnStack(fiber); 7391 } 7392 function reuseSuspenseHandlerOnStack(fiber) { 7393 push(suspenseStackCursor, suspenseStackCursor.current, fiber); 7394 push( 7395 suspenseHandlerStackCursor, 7396 suspenseHandlerStackCursor.current, 7397 fiber 7398 ); 7399 } 7400 function popSuspenseHandler(fiber) { 7401 pop(suspenseHandlerStackCursor, fiber); 7402 shellBoundary === fiber && (shellBoundary = null); 7403 pop(suspenseStackCursor, fiber); 7404 } 7405 function findFirstSuspended(row) { 7406 for (var node = row; null !== node; ) { 7407 if (13 === node.tag) { 7408 var state = node.memoizedState; 7409 if (null !== state && (state = state.dehydrated, null === state || isSuspenseInstancePending(state) || isSuspenseInstanceFallback(state))) 7410 return node; 7411 } else if (19 === node.tag && ("forwards" === node.memoizedProps.revealOrder || "backwards" === node.memoizedProps.revealOrder || "unstable_legacy-backwards" === node.memoizedProps.revealOrder || "together" === node.memoizedProps.revealOrder)) { 7412 if (0 !== (node.flags & 128)) return node; 7413 } else if (null !== node.child) { 7414 node.child.return = node; 7415 node = node.child; 7416 continue; 7417 } 7418 if (node === row) break; 7419 for (; null === node.sibling; ) { 7420 if (null === node.return || node.return === row) return null; 7421 node = node.return; 7422 } 7423 node.sibling.return = node.return; 7424 node = node.sibling; 7425 } 7426 return null; 7427 } 7428 function mountHookTypesDev() { 7429 var hookName = currentHookNameInDev; 7430 null === hookTypesDev ? hookTypesDev = [hookName] : hookTypesDev.push(hookName); 7431 } 7432 function updateHookTypesDev() { 7433 var hookName = currentHookNameInDev; 7434 if (null !== hookTypesDev && (hookTypesUpdateIndexDev++, hookTypesDev[hookTypesUpdateIndexDev] !== hookName)) { 7435 var componentName2 = getComponentNameFromFiber(currentlyRenderingFiber); 7436 if (!didWarnAboutMismatchedHooksForComponent.has(componentName2) && (didWarnAboutMismatchedHooksForComponent.add(componentName2), null !== hookTypesDev)) { 7437 for (var table = "", i3 = 0; i3 <= hookTypesUpdateIndexDev; i3++) { 7438 var oldHookName = hookTypesDev[i3], newHookName = i3 === hookTypesUpdateIndexDev ? hookName : oldHookName; 7439 for (oldHookName = i3 + 1 + ". " + oldHookName; 30 > oldHookName.length; ) 7440 oldHookName += " "; 7441 oldHookName += newHookName + "\n"; 7442 table += oldHookName; 7443 } 7444 console.error( 7445 "React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\n\n Previous render Next render\n ------------------------------------------------------\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", 7446 componentName2, 7447 table 7448 ); 7449 } 7450 } 7451 } 7452 function checkDepsAreArrayDev(deps) { 7453 void 0 === deps || null === deps || isArrayImpl(deps) || console.error( 7454 "%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.", 7455 currentHookNameInDev, 7456 typeof deps 7457 ); 7458 } 7459 function warnOnUseFormStateInDev() { 7460 var componentName2 = getComponentNameFromFiber(currentlyRenderingFiber); 7461 didWarnAboutUseFormState.has(componentName2) || (didWarnAboutUseFormState.add(componentName2), console.error( 7462 "ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.", 7463 componentName2 7464 )); 7465 } 7466 function throwInvalidHookError() { 7467 throw Error( 7468 "Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem." 7469 ); 7470 } 7471 function areHookInputsEqual(nextDeps, prevDeps) { 7472 if (ignorePreviousDependencies) return false; 7473 if (null === prevDeps) 7474 return console.error( 7475 "%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.", 7476 currentHookNameInDev 7477 ), false; 7478 nextDeps.length !== prevDeps.length && console.error( 7479 "The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s", 7480 currentHookNameInDev, 7481 "[" + prevDeps.join(", ") + "]", 7482 "[" + nextDeps.join(", ") + "]" 7483 ); 7484 for (var i3 = 0; i3 < prevDeps.length && i3 < nextDeps.length; i3++) 7485 if (!objectIs(nextDeps[i3], prevDeps[i3])) return false; 7486 return true; 7487 } 7488 function renderWithHooks(current2, workInProgress2, Component, props, secondArg, nextRenderLanes) { 7489 renderLanes = nextRenderLanes; 7490 currentlyRenderingFiber = workInProgress2; 7491 hookTypesDev = null !== current2 ? current2._debugHookTypes : null; 7492 hookTypesUpdateIndexDev = -1; 7493 ignorePreviousDependencies = null !== current2 && current2.type !== workInProgress2.type; 7494 if ("[object AsyncFunction]" === Object.prototype.toString.call(Component) || "[object AsyncGeneratorFunction]" === Object.prototype.toString.call(Component)) 7495 nextRenderLanes = getComponentNameFromFiber(currentlyRenderingFiber), didWarnAboutAsyncClientComponent.has(nextRenderLanes) || (didWarnAboutAsyncClientComponent.add(nextRenderLanes), console.error( 7496 "%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.", 7497 null === nextRenderLanes ? "An unknown Component" : "<" + nextRenderLanes + ">" 7498 )); 7499 workInProgress2.memoizedState = null; 7500 workInProgress2.updateQueue = null; 7501 workInProgress2.lanes = 0; 7502 ReactSharedInternals.H = null !== current2 && null !== current2.memoizedState ? HooksDispatcherOnUpdateInDEV : null !== hookTypesDev ? HooksDispatcherOnMountWithHookTypesInDEV : HooksDispatcherOnMountInDEV; 7503 shouldDoubleInvokeUserFnsInHooksDEV = nextRenderLanes = (workInProgress2.mode & StrictLegacyMode) !== NoMode; 7504 var children = callComponentInDEV(Component, props, secondArg); 7505 shouldDoubleInvokeUserFnsInHooksDEV = false; 7506 didScheduleRenderPhaseUpdateDuringThisPass && (children = renderWithHooksAgain( 7507 workInProgress2, 7508 Component, 7509 props, 7510 secondArg 7511 )); 7512 if (nextRenderLanes) { 7513 setIsStrictModeForDevtools(true); 7514 try { 7515 children = renderWithHooksAgain( 7516 workInProgress2, 7517 Component, 7518 props, 7519 secondArg 7520 ); 7521 } finally { 7522 setIsStrictModeForDevtools(false); 7523 } 7524 } 7525 finishRenderingHooks(current2, workInProgress2); 7526 return children; 7527 } 7528 function finishRenderingHooks(current2, workInProgress2) { 7529 workInProgress2._debugHookTypes = hookTypesDev; 7530 null === workInProgress2.dependencies ? null !== thenableState && (workInProgress2.dependencies = { 7531 lanes: 0, 7532 firstContext: null, 7533 _debugThenableState: thenableState 7534 }) : workInProgress2.dependencies._debugThenableState = thenableState; 7535 ReactSharedInternals.H = ContextOnlyDispatcher; 7536 var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next; 7537 renderLanes = 0; 7538 hookTypesDev = currentHookNameInDev = workInProgressHook = currentHook = currentlyRenderingFiber = null; 7539 hookTypesUpdateIndexDev = -1; 7540 null !== current2 && (current2.flags & 65011712) !== (workInProgress2.flags & 65011712) && console.error( 7541 "Internal React error: Expected static flag was missing. Please notify the React team." 7542 ); 7543 didScheduleRenderPhaseUpdate = false; 7544 thenableIndexCounter = 0; 7545 thenableState = null; 7546 if (didRenderTooFewHooks) 7547 throw Error( 7548 "Rendered fewer hooks than expected. This may be caused by an accidental early return statement." 7549 ); 7550 null === current2 || didReceiveUpdate || (current2 = current2.dependencies, null !== current2 && checkIfContextChanged(current2) && (didReceiveUpdate = true)); 7551 needsToResetSuspendedThenableDEV ? (needsToResetSuspendedThenableDEV = false, current2 = true) : current2 = false; 7552 current2 && (workInProgress2 = getComponentNameFromFiber(workInProgress2) || "Unknown", didWarnAboutUseWrappedInTryCatch.has(workInProgress2) || didWarnAboutAsyncClientComponent.has(workInProgress2) || (didWarnAboutUseWrappedInTryCatch.add(workInProgress2), console.error( 7553 "`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary." 7554 ))); 7555 } 7556 function renderWithHooksAgain(workInProgress2, Component, props, secondArg) { 7557 currentlyRenderingFiber = workInProgress2; 7558 var numberOfReRenders = 0; 7559 do { 7560 didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null); 7561 thenableIndexCounter = 0; 7562 didScheduleRenderPhaseUpdateDuringThisPass = false; 7563 if (numberOfReRenders >= RE_RENDER_LIMIT) 7564 throw Error( 7565 "Too many re-renders. React limits the number of renders to prevent an infinite loop." 7566 ); 7567 numberOfReRenders += 1; 7568 ignorePreviousDependencies = false; 7569 workInProgressHook = currentHook = null; 7570 if (null != workInProgress2.updateQueue) { 7571 var children = workInProgress2.updateQueue; 7572 children.lastEffect = null; 7573 children.events = null; 7574 children.stores = null; 7575 null != children.memoCache && (children.memoCache.index = 0); 7576 } 7577 hookTypesUpdateIndexDev = -1; 7578 ReactSharedInternals.H = HooksDispatcherOnRerenderInDEV; 7579 children = callComponentInDEV(Component, props, secondArg); 7580 } while (didScheduleRenderPhaseUpdateDuringThisPass); 7581 return children; 7582 } 7583 function TransitionAwareHostComponent() { 7584 var dispatcher = ReactSharedInternals.H, maybeThenable = dispatcher.useState()[0]; 7585 maybeThenable = "function" === typeof maybeThenable.then ? useThenable(maybeThenable) : maybeThenable; 7586 dispatcher = dispatcher.useState()[0]; 7587 (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher && (currentlyRenderingFiber.flags |= 1024); 7588 return maybeThenable; 7589 } 7590 function checkDidRenderIdHook() { 7591 var didRenderIdHook = 0 !== localIdCounter; 7592 localIdCounter = 0; 7593 return didRenderIdHook; 7594 } 7595 function bailoutHooks(current2, workInProgress2, lanes) { 7596 workInProgress2.updateQueue = current2.updateQueue; 7597 workInProgress2.flags = (workInProgress2.mode & StrictEffectsMode) !== NoMode ? workInProgress2.flags & -402655237 : workInProgress2.flags & -2053; 7598 current2.lanes &= ~lanes; 7599 } 7600 function resetHooksOnUnwind(workInProgress2) { 7601 if (didScheduleRenderPhaseUpdate) { 7602 for (workInProgress2 = workInProgress2.memoizedState; null !== workInProgress2; ) { 7603 var queue = workInProgress2.queue; 7604 null !== queue && (queue.pending = null); 7605 workInProgress2 = workInProgress2.next; 7606 } 7607 didScheduleRenderPhaseUpdate = false; 7608 } 7609 renderLanes = 0; 7610 hookTypesDev = workInProgressHook = currentHook = currentlyRenderingFiber = null; 7611 hookTypesUpdateIndexDev = -1; 7612 currentHookNameInDev = null; 7613 didScheduleRenderPhaseUpdateDuringThisPass = false; 7614 thenableIndexCounter = localIdCounter = 0; 7615 thenableState = null; 7616 } 7617 function mountWorkInProgressHook() { 7618 var hook = { 7619 memoizedState: null, 7620 baseState: null, 7621 baseQueue: null, 7622 queue: null, 7623 next: null 7624 }; 7625 null === workInProgressHook ? currentlyRenderingFiber.memoizedState = workInProgressHook = hook : workInProgressHook = workInProgressHook.next = hook; 7626 return workInProgressHook; 7627 } 7628 function updateWorkInProgressHook() { 7629 if (null === currentHook) { 7630 var nextCurrentHook = currentlyRenderingFiber.alternate; 7631 nextCurrentHook = null !== nextCurrentHook ? nextCurrentHook.memoizedState : null; 7632 } else nextCurrentHook = currentHook.next; 7633 var nextWorkInProgressHook = null === workInProgressHook ? currentlyRenderingFiber.memoizedState : workInProgressHook.next; 7634 if (null !== nextWorkInProgressHook) 7635 workInProgressHook = nextWorkInProgressHook, currentHook = nextCurrentHook; 7636 else { 7637 if (null === nextCurrentHook) { 7638 if (null === currentlyRenderingFiber.alternate) 7639 throw Error( 7640 "Update hook called on initial render. This is likely a bug in React. Please file an issue." 7641 ); 7642 throw Error("Rendered more hooks than during the previous render."); 7643 } 7644 currentHook = nextCurrentHook; 7645 nextCurrentHook = { 7646 memoizedState: currentHook.memoizedState, 7647 baseState: currentHook.baseState, 7648 baseQueue: currentHook.baseQueue, 7649 queue: currentHook.queue, 7650 next: null 7651 }; 7652 null === workInProgressHook ? currentlyRenderingFiber.memoizedState = workInProgressHook = nextCurrentHook : workInProgressHook = workInProgressHook.next = nextCurrentHook; 7653 } 7654 return workInProgressHook; 7655 } 7656 function createFunctionComponentUpdateQueue() { 7657 return { lastEffect: null, events: null, stores: null, memoCache: null }; 7658 } 7659 function useThenable(thenable) { 7660 var index = thenableIndexCounter; 7661 thenableIndexCounter += 1; 7662 null === thenableState && (thenableState = createThenableState()); 7663 thenable = trackUsedThenable(thenableState, thenable, index); 7664 index = currentlyRenderingFiber; 7665 null === (null === workInProgressHook ? index.memoizedState : workInProgressHook.next) && (index = index.alternate, ReactSharedInternals.H = null !== index && null !== index.memoizedState ? HooksDispatcherOnUpdateInDEV : HooksDispatcherOnMountInDEV); 7666 return thenable; 7667 } 7668 function use(usable) { 7669 if (null !== usable && "object" === typeof usable) { 7670 if ("function" === typeof usable.then) return useThenable(usable); 7671 if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable); 7672 } 7673 throw Error("An unsupported type was passed to use(): " + String(usable)); 7674 } 7675 function useMemoCache(size) { 7676 var memoCache = null, updateQueue = currentlyRenderingFiber.updateQueue; 7677 null !== updateQueue && (memoCache = updateQueue.memoCache); 7678 if (null == memoCache) { 7679 var current2 = currentlyRenderingFiber.alternate; 7680 null !== current2 && (current2 = current2.updateQueue, null !== current2 && (current2 = current2.memoCache, null != current2 && (memoCache = { 7681 data: current2.data.map(function(array) { 7682 return array.slice(); 7683 }), 7684 index: 0 7685 }))); 7686 } 7687 null == memoCache && (memoCache = { data: [], index: 0 }); 7688 null === updateQueue && (updateQueue = createFunctionComponentUpdateQueue(), currentlyRenderingFiber.updateQueue = updateQueue); 7689 updateQueue.memoCache = memoCache; 7690 updateQueue = memoCache.data[memoCache.index]; 7691 if (void 0 === updateQueue || ignorePreviousDependencies) 7692 for (updateQueue = memoCache.data[memoCache.index] = Array(size), current2 = 0; current2 < size; current2++) 7693 updateQueue[current2] = REACT_MEMO_CACHE_SENTINEL; 7694 else 7695 updateQueue.length !== size && console.error( 7696 "Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.", 7697 updateQueue.length, 7698 size 7699 ); 7700 memoCache.index++; 7701 return updateQueue; 7702 } 7703 function basicStateReducer(state, action) { 7704 return "function" === typeof action ? action(state) : action; 7705 } 7706 function mountReducer(reducer, initialArg, init) { 7707 var hook = mountWorkInProgressHook(); 7708 if (void 0 !== init) { 7709 var initialState = init(initialArg); 7710 if (shouldDoubleInvokeUserFnsInHooksDEV) { 7711 setIsStrictModeForDevtools(true); 7712 try { 7713 init(initialArg); 7714 } finally { 7715 setIsStrictModeForDevtools(false); 7716 } 7717 } 7718 } else initialState = initialArg; 7719 hook.memoizedState = hook.baseState = initialState; 7720 reducer = { 7721 pending: null, 7722 lanes: 0, 7723 dispatch: null, 7724 lastRenderedReducer: reducer, 7725 lastRenderedState: initialState 7726 }; 7727 hook.queue = reducer; 7728 reducer = reducer.dispatch = dispatchReducerAction.bind( 7729 null, 7730 currentlyRenderingFiber, 7731 reducer 7732 ); 7733 return [hook.memoizedState, reducer]; 7734 } 7735 function updateReducer(reducer) { 7736 var hook = updateWorkInProgressHook(); 7737 return updateReducerImpl(hook, currentHook, reducer); 7738 } 7739 function updateReducerImpl(hook, current2, reducer) { 7740 var queue = hook.queue; 7741 if (null === queue) 7742 throw Error( 7743 "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)" 7744 ); 7745 queue.lastRenderedReducer = reducer; 7746 var baseQueue = hook.baseQueue, pendingQueue = queue.pending; 7747 if (null !== pendingQueue) { 7748 if (null !== baseQueue) { 7749 var baseFirst = baseQueue.next; 7750 baseQueue.next = pendingQueue.next; 7751 pendingQueue.next = baseFirst; 7752 } 7753 current2.baseQueue !== baseQueue && console.error( 7754 "Internal error: Expected work-in-progress queue to be a clone. This is a bug in React." 7755 ); 7756 current2.baseQueue = baseQueue = pendingQueue; 7757 queue.pending = null; 7758 } 7759 pendingQueue = hook.baseState; 7760 if (null === baseQueue) hook.memoizedState = pendingQueue; 7761 else { 7762 current2 = baseQueue.next; 7763 var newBaseQueueFirst = baseFirst = null, newBaseQueueLast = null, update = current2, didReadFromEntangledAsyncAction2 = false; 7764 do { 7765 var updateLane = update.lane & -536870913; 7766 if (updateLane !== update.lane ? (workInProgressRootRenderLanes & updateLane) === updateLane : (renderLanes & updateLane) === updateLane) { 7767 var revertLane = update.revertLane; 7768 if (0 === revertLane) 7769 null !== newBaseQueueLast && (newBaseQueueLast = newBaseQueueLast.next = { 7770 lane: 0, 7771 revertLane: 0, 7772 gesture: null, 7773 action: update.action, 7774 hasEagerState: update.hasEagerState, 7775 eagerState: update.eagerState, 7776 next: null 7777 }), updateLane === currentEntangledLane && (didReadFromEntangledAsyncAction2 = true); 7778 else if ((renderLanes & revertLane) === revertLane) { 7779 update = update.next; 7780 revertLane === currentEntangledLane && (didReadFromEntangledAsyncAction2 = true); 7781 continue; 7782 } else 7783 updateLane = { 7784 lane: 0, 7785 revertLane: update.revertLane, 7786 gesture: null, 7787 action: update.action, 7788 hasEagerState: update.hasEagerState, 7789 eagerState: update.eagerState, 7790 next: null 7791 }, null === newBaseQueueLast ? (newBaseQueueFirst = newBaseQueueLast = updateLane, baseFirst = pendingQueue) : newBaseQueueLast = newBaseQueueLast.next = updateLane, currentlyRenderingFiber.lanes |= revertLane, workInProgressRootSkippedLanes |= revertLane; 7792 updateLane = update.action; 7793 shouldDoubleInvokeUserFnsInHooksDEV && reducer(pendingQueue, updateLane); 7794 pendingQueue = update.hasEagerState ? update.eagerState : reducer(pendingQueue, updateLane); 7795 } else 7796 revertLane = { 7797 lane: updateLane, 7798 revertLane: update.revertLane, 7799 gesture: update.gesture, 7800 action: update.action, 7801 hasEagerState: update.hasEagerState, 7802 eagerState: update.eagerState, 7803 next: null 7804 }, null === newBaseQueueLast ? (newBaseQueueFirst = newBaseQueueLast = revertLane, baseFirst = pendingQueue) : newBaseQueueLast = newBaseQueueLast.next = revertLane, currentlyRenderingFiber.lanes |= updateLane, workInProgressRootSkippedLanes |= updateLane; 7805 update = update.next; 7806 } while (null !== update && update !== current2); 7807 null === newBaseQueueLast ? baseFirst = pendingQueue : newBaseQueueLast.next = newBaseQueueFirst; 7808 if (!objectIs(pendingQueue, hook.memoizedState) && (didReceiveUpdate = true, didReadFromEntangledAsyncAction2 && (reducer = currentEntangledActionThenable, null !== reducer))) 7809 throw reducer; 7810 hook.memoizedState = pendingQueue; 7811 hook.baseState = baseFirst; 7812 hook.baseQueue = newBaseQueueLast; 7813 queue.lastRenderedState = pendingQueue; 7814 } 7815 null === baseQueue && (queue.lanes = 0); 7816 return [hook.memoizedState, queue.dispatch]; 7817 } 7818 function rerenderReducer(reducer) { 7819 var hook = updateWorkInProgressHook(), queue = hook.queue; 7820 if (null === queue) 7821 throw Error( 7822 "Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)" 7823 ); 7824 queue.lastRenderedReducer = reducer; 7825 var dispatch2 = queue.dispatch, lastRenderPhaseUpdate = queue.pending, newState = hook.memoizedState; 7826 if (null !== lastRenderPhaseUpdate) { 7827 queue.pending = null; 7828 var update = lastRenderPhaseUpdate = lastRenderPhaseUpdate.next; 7829 do 7830 newState = reducer(newState, update.action), update = update.next; 7831 while (update !== lastRenderPhaseUpdate); 7832 objectIs(newState, hook.memoizedState) || (didReceiveUpdate = true); 7833 hook.memoizedState = newState; 7834 null === hook.baseQueue && (hook.baseState = newState); 7835 queue.lastRenderedState = newState; 7836 } 7837 return [newState, dispatch2]; 7838 } 7839 function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { 7840 var fiber = currentlyRenderingFiber, hook = mountWorkInProgressHook(); 7841 if (isHydrating) { 7842 if (void 0 === getServerSnapshot) 7843 throw Error( 7844 "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." 7845 ); 7846 var nextSnapshot = getServerSnapshot(); 7847 didWarnUncachedGetSnapshot || nextSnapshot === getServerSnapshot() || (console.error( 7848 "The result of getServerSnapshot should be cached to avoid an infinite loop" 7849 ), didWarnUncachedGetSnapshot = true); 7850 } else { 7851 nextSnapshot = getSnapshot(); 7852 didWarnUncachedGetSnapshot || (getServerSnapshot = getSnapshot(), objectIs(nextSnapshot, getServerSnapshot) || (console.error( 7853 "The result of getSnapshot should be cached to avoid an infinite loop" 7854 ), didWarnUncachedGetSnapshot = true)); 7855 if (null === workInProgressRoot) 7856 throw Error( 7857 "Expected a work-in-progress root. This is a bug in React. Please file an issue." 7858 ); 7859 0 !== (workInProgressRootRenderLanes & 127) || pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot); 7860 } 7861 hook.memoizedState = nextSnapshot; 7862 getServerSnapshot = { value: nextSnapshot, getSnapshot }; 7863 hook.queue = getServerSnapshot; 7864 mountEffect( 7865 subscribeToStore.bind(null, fiber, getServerSnapshot, subscribe), 7866 [subscribe] 7867 ); 7868 fiber.flags |= 2048; 7869 pushSimpleEffect( 7870 HasEffect | Passive, 7871 { destroy: void 0 }, 7872 updateStoreInstance.bind( 7873 null, 7874 fiber, 7875 getServerSnapshot, 7876 nextSnapshot, 7877 getSnapshot 7878 ), 7879 null 7880 ); 7881 return nextSnapshot; 7882 } 7883 function updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) { 7884 var fiber = currentlyRenderingFiber, hook = updateWorkInProgressHook(), isHydrating$jscomp$0 = isHydrating; 7885 if (isHydrating$jscomp$0) { 7886 if (void 0 === getServerSnapshot) 7887 throw Error( 7888 "Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering." 7889 ); 7890 getServerSnapshot = getServerSnapshot(); 7891 } else if (getServerSnapshot = getSnapshot(), !didWarnUncachedGetSnapshot) { 7892 var cachedSnapshot = getSnapshot(); 7893 objectIs(getServerSnapshot, cachedSnapshot) || (console.error( 7894 "The result of getSnapshot should be cached to avoid an infinite loop" 7895 ), didWarnUncachedGetSnapshot = true); 7896 } 7897 if (cachedSnapshot = !objectIs( 7898 (currentHook || hook).memoizedState, 7899 getServerSnapshot 7900 )) 7901 hook.memoizedState = getServerSnapshot, didReceiveUpdate = true; 7902 hook = hook.queue; 7903 var create = subscribeToStore.bind(null, fiber, hook, subscribe); 7904 updateEffectImpl(2048, Passive, create, [subscribe]); 7905 if (hook.getSnapshot !== getSnapshot || cachedSnapshot || null !== workInProgressHook && workInProgressHook.memoizedState.tag & HasEffect) { 7906 fiber.flags |= 2048; 7907 pushSimpleEffect( 7908 HasEffect | Passive, 7909 { destroy: void 0 }, 7910 updateStoreInstance.bind( 7911 null, 7912 fiber, 7913 hook, 7914 getServerSnapshot, 7915 getSnapshot 7916 ), 7917 null 7918 ); 7919 if (null === workInProgressRoot) 7920 throw Error( 7921 "Expected a work-in-progress root. This is a bug in React. Please file an issue." 7922 ); 7923 isHydrating$jscomp$0 || 0 !== (renderLanes & 127) || pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot); 7924 } 7925 return getServerSnapshot; 7926 } 7927 function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) { 7928 fiber.flags |= 16384; 7929 fiber = { getSnapshot, value: renderedSnapshot }; 7930 getSnapshot = currentlyRenderingFiber.updateQueue; 7931 null === getSnapshot ? (getSnapshot = createFunctionComponentUpdateQueue(), currentlyRenderingFiber.updateQueue = getSnapshot, getSnapshot.stores = [fiber]) : (renderedSnapshot = getSnapshot.stores, null === renderedSnapshot ? getSnapshot.stores = [fiber] : renderedSnapshot.push(fiber)); 7932 } 7933 function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) { 7934 inst.value = nextSnapshot; 7935 inst.getSnapshot = getSnapshot; 7936 checkIfSnapshotChanged(inst) && forceStoreRerender(fiber); 7937 } 7938 function subscribeToStore(fiber, inst, subscribe) { 7939 return subscribe(function() { 7940 checkIfSnapshotChanged(inst) && (startUpdateTimerByLane(2, "updateSyncExternalStore()", fiber), forceStoreRerender(fiber)); 7941 }); 7942 } 7943 function checkIfSnapshotChanged(inst) { 7944 var latestGetSnapshot = inst.getSnapshot; 7945 inst = inst.value; 7946 try { 7947 var nextValue = latestGetSnapshot(); 7948 return !objectIs(inst, nextValue); 7949 } catch (error2) { 7950 return true; 7951 } 7952 } 7953 function forceStoreRerender(fiber) { 7954 var root3 = enqueueConcurrentRenderForLane(fiber, 2); 7955 null !== root3 && scheduleUpdateOnFiber(root3, fiber, 2); 7956 } 7957 function mountStateImpl(initialState) { 7958 var hook = mountWorkInProgressHook(); 7959 if ("function" === typeof initialState) { 7960 var initialStateInitializer = initialState; 7961 initialState = initialStateInitializer(); 7962 if (shouldDoubleInvokeUserFnsInHooksDEV) { 7963 setIsStrictModeForDevtools(true); 7964 try { 7965 initialStateInitializer(); 7966 } finally { 7967 setIsStrictModeForDevtools(false); 7968 } 7969 } 7970 } 7971 hook.memoizedState = hook.baseState = initialState; 7972 hook.queue = { 7973 pending: null, 7974 lanes: 0, 7975 dispatch: null, 7976 lastRenderedReducer: basicStateReducer, 7977 lastRenderedState: initialState 7978 }; 7979 return hook; 7980 } 7981 function mountState(initialState) { 7982 initialState = mountStateImpl(initialState); 7983 var queue = initialState.queue, dispatch2 = dispatchSetState.bind(null, currentlyRenderingFiber, queue); 7984 queue.dispatch = dispatch2; 7985 return [initialState.memoizedState, dispatch2]; 7986 } 7987 function mountOptimistic(passthrough) { 7988 var hook = mountWorkInProgressHook(); 7989 hook.memoizedState = hook.baseState = passthrough; 7990 var queue = { 7991 pending: null, 7992 lanes: 0, 7993 dispatch: null, 7994 lastRenderedReducer: null, 7995 lastRenderedState: null 7996 }; 7997 hook.queue = queue; 7998 hook = dispatchOptimisticSetState.bind( 7999 null, 8000 currentlyRenderingFiber, 8001 true, 8002 queue 8003 ); 8004 queue.dispatch = hook; 8005 return [passthrough, hook]; 8006 } 8007 function updateOptimistic(passthrough, reducer) { 8008 var hook = updateWorkInProgressHook(); 8009 return updateOptimisticImpl(hook, currentHook, passthrough, reducer); 8010 } 8011 function updateOptimisticImpl(hook, current2, passthrough, reducer) { 8012 hook.baseState = passthrough; 8013 return updateReducerImpl( 8014 hook, 8015 currentHook, 8016 "function" === typeof reducer ? reducer : basicStateReducer 8017 ); 8018 } 8019 function rerenderOptimistic(passthrough, reducer) { 8020 var hook = updateWorkInProgressHook(); 8021 if (null !== currentHook) 8022 return updateOptimisticImpl(hook, currentHook, passthrough, reducer); 8023 hook.baseState = passthrough; 8024 return [passthrough, hook.queue.dispatch]; 8025 } 8026 function dispatchActionState(fiber, actionQueue, setPendingState, setState, payload) { 8027 if (isRenderPhaseUpdate(fiber)) 8028 throw Error("Cannot update form state while rendering."); 8029 fiber = actionQueue.action; 8030 if (null !== fiber) { 8031 var actionNode = { 8032 payload, 8033 action: fiber, 8034 next: null, 8035 isTransition: true, 8036 status: "pending", 8037 value: null, 8038 reason: null, 8039 listeners: [], 8040 then: function(listener) { 8041 actionNode.listeners.push(listener); 8042 } 8043 }; 8044 null !== ReactSharedInternals.T ? setPendingState(true) : actionNode.isTransition = false; 8045 setState(actionNode); 8046 setPendingState = actionQueue.pending; 8047 null === setPendingState ? (actionNode.next = actionQueue.pending = actionNode, runActionStateAction(actionQueue, actionNode)) : (actionNode.next = setPendingState.next, actionQueue.pending = setPendingState.next = actionNode); 8048 } 8049 } 8050 function runActionStateAction(actionQueue, node) { 8051 var action = node.action, payload = node.payload, prevState = actionQueue.state; 8052 if (node.isTransition) { 8053 var prevTransition = ReactSharedInternals.T, currentTransition = {}; 8054 currentTransition._updatedFibers = /* @__PURE__ */ new Set(); 8055 ReactSharedInternals.T = currentTransition; 8056 try { 8057 var returnValue = action(prevState, payload), onStartTransitionFinish = ReactSharedInternals.S; 8058 null !== onStartTransitionFinish && onStartTransitionFinish(currentTransition, returnValue); 8059 handleActionReturnValue(actionQueue, node, returnValue); 8060 } catch (error2) { 8061 onActionError(actionQueue, node, error2); 8062 } finally { 8063 null !== prevTransition && null !== currentTransition.types && (null !== prevTransition.types && prevTransition.types !== currentTransition.types && console.error( 8064 "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." 8065 ), prevTransition.types = currentTransition.types), ReactSharedInternals.T = prevTransition, null === prevTransition && currentTransition._updatedFibers && (actionQueue = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < actionQueue && console.warn( 8066 "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." 8067 )); 8068 } 8069 } else 8070 try { 8071 currentTransition = action(prevState, payload), handleActionReturnValue(actionQueue, node, currentTransition); 8072 } catch (error$4) { 8073 onActionError(actionQueue, node, error$4); 8074 } 8075 } 8076 function handleActionReturnValue(actionQueue, node, returnValue) { 8077 null !== returnValue && "object" === typeof returnValue && "function" === typeof returnValue.then ? (ReactSharedInternals.asyncTransitions++, returnValue.then(releaseAsyncTransition, releaseAsyncTransition), returnValue.then( 8078 function(nextState) { 8079 onActionSuccess(actionQueue, node, nextState); 8080 }, 8081 function(error2) { 8082 return onActionError(actionQueue, node, error2); 8083 } 8084 ), node.isTransition || console.error( 8085 "An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop." 8086 )) : onActionSuccess(actionQueue, node, returnValue); 8087 } 8088 function onActionSuccess(actionQueue, actionNode, nextState) { 8089 actionNode.status = "fulfilled"; 8090 actionNode.value = nextState; 8091 notifyActionListeners(actionNode); 8092 actionQueue.state = nextState; 8093 actionNode = actionQueue.pending; 8094 null !== actionNode && (nextState = actionNode.next, nextState === actionNode ? actionQueue.pending = null : (nextState = nextState.next, actionNode.next = nextState, runActionStateAction(actionQueue, nextState))); 8095 } 8096 function onActionError(actionQueue, actionNode, error2) { 8097 var last = actionQueue.pending; 8098 actionQueue.pending = null; 8099 if (null !== last) { 8100 last = last.next; 8101 do 8102 actionNode.status = "rejected", actionNode.reason = error2, notifyActionListeners(actionNode), actionNode = actionNode.next; 8103 while (actionNode !== last); 8104 } 8105 actionQueue.action = null; 8106 } 8107 function notifyActionListeners(actionNode) { 8108 actionNode = actionNode.listeners; 8109 for (var i3 = 0; i3 < actionNode.length; i3++) (0, actionNode[i3])(); 8110 } 8111 function actionStateReducer(oldState, newState) { 8112 return newState; 8113 } 8114 function mountActionState(action, initialStateProp) { 8115 if (isHydrating) { 8116 var ssrFormState = workInProgressRoot.formState; 8117 if (null !== ssrFormState) { 8118 a: { 8119 var isMatching = currentlyRenderingFiber; 8120 if (isHydrating) { 8121 if (nextHydratableInstance) { 8122 b: { 8123 var markerInstance = nextHydratableInstance; 8124 for (var inRootOrSingleton = rootOrSingletonContext; 8 !== markerInstance.nodeType; ) { 8125 if (!inRootOrSingleton) { 8126 markerInstance = null; 8127 break b; 8128 } 8129 markerInstance = getNextHydratable( 8130 markerInstance.nextSibling 8131 ); 8132 if (null === markerInstance) { 8133 markerInstance = null; 8134 break b; 8135 } 8136 } 8137 inRootOrSingleton = markerInstance.data; 8138 markerInstance = inRootOrSingleton === FORM_STATE_IS_MATCHING || inRootOrSingleton === FORM_STATE_IS_NOT_MATCHING ? markerInstance : null; 8139 } 8140 if (markerInstance) { 8141 nextHydratableInstance = getNextHydratable( 8142 markerInstance.nextSibling 8143 ); 8144 isMatching = markerInstance.data === FORM_STATE_IS_MATCHING; 8145 break a; 8146 } 8147 } 8148 throwOnHydrationMismatch(isMatching); 8149 } 8150 isMatching = false; 8151 } 8152 isMatching && (initialStateProp = ssrFormState[0]); 8153 } 8154 } 8155 ssrFormState = mountWorkInProgressHook(); 8156 ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp; 8157 isMatching = { 8158 pending: null, 8159 lanes: 0, 8160 dispatch: null, 8161 lastRenderedReducer: actionStateReducer, 8162 lastRenderedState: initialStateProp 8163 }; 8164 ssrFormState.queue = isMatching; 8165 ssrFormState = dispatchSetState.bind( 8166 null, 8167 currentlyRenderingFiber, 8168 isMatching 8169 ); 8170 isMatching.dispatch = ssrFormState; 8171 isMatching = mountStateImpl(false); 8172 inRootOrSingleton = dispatchOptimisticSetState.bind( 8173 null, 8174 currentlyRenderingFiber, 8175 false, 8176 isMatching.queue 8177 ); 8178 isMatching = mountWorkInProgressHook(); 8179 markerInstance = { 8180 state: initialStateProp, 8181 dispatch: null, 8182 action, 8183 pending: null 8184 }; 8185 isMatching.queue = markerInstance; 8186 ssrFormState = dispatchActionState.bind( 8187 null, 8188 currentlyRenderingFiber, 8189 markerInstance, 8190 inRootOrSingleton, 8191 ssrFormState 8192 ); 8193 markerInstance.dispatch = ssrFormState; 8194 isMatching.memoizedState = action; 8195 return [initialStateProp, ssrFormState, false]; 8196 } 8197 function updateActionState(action) { 8198 var stateHook = updateWorkInProgressHook(); 8199 return updateActionStateImpl(stateHook, currentHook, action); 8200 } 8201 function updateActionStateImpl(stateHook, currentStateHook, action) { 8202 currentStateHook = updateReducerImpl( 8203 stateHook, 8204 currentStateHook, 8205 actionStateReducer 8206 )[0]; 8207 stateHook = updateReducer(basicStateReducer)[0]; 8208 if ("object" === typeof currentStateHook && null !== currentStateHook && "function" === typeof currentStateHook.then) 8209 try { 8210 var state = useThenable(currentStateHook); 8211 } catch (x3) { 8212 if (x3 === SuspenseException) throw SuspenseActionException; 8213 throw x3; 8214 } 8215 else state = currentStateHook; 8216 currentStateHook = updateWorkInProgressHook(); 8217 var actionQueue = currentStateHook.queue, dispatch2 = actionQueue.dispatch; 8218 action !== currentStateHook.memoizedState && (currentlyRenderingFiber.flags |= 2048, pushSimpleEffect( 8219 HasEffect | Passive, 8220 { destroy: void 0 }, 8221 actionStateActionEffect.bind(null, actionQueue, action), 8222 null 8223 )); 8224 return [state, dispatch2, stateHook]; 8225 } 8226 function actionStateActionEffect(actionQueue, action) { 8227 actionQueue.action = action; 8228 } 8229 function rerenderActionState(action) { 8230 var stateHook = updateWorkInProgressHook(), currentStateHook = currentHook; 8231 if (null !== currentStateHook) 8232 return updateActionStateImpl(stateHook, currentStateHook, action); 8233 updateWorkInProgressHook(); 8234 stateHook = stateHook.memoizedState; 8235 currentStateHook = updateWorkInProgressHook(); 8236 var dispatch2 = currentStateHook.queue.dispatch; 8237 currentStateHook.memoizedState = action; 8238 return [stateHook, dispatch2, false]; 8239 } 8240 function pushSimpleEffect(tag, inst, create, deps) { 8241 tag = { tag, create, deps, inst, next: null }; 8242 inst = currentlyRenderingFiber.updateQueue; 8243 null === inst && (inst = createFunctionComponentUpdateQueue(), currentlyRenderingFiber.updateQueue = inst); 8244 create = inst.lastEffect; 8245 null === create ? inst.lastEffect = tag.next = tag : (deps = create.next, create.next = tag, tag.next = deps, inst.lastEffect = tag); 8246 return tag; 8247 } 8248 function mountRef(initialValue) { 8249 var hook = mountWorkInProgressHook(); 8250 initialValue = { current: initialValue }; 8251 return hook.memoizedState = initialValue; 8252 } 8253 function mountEffectImpl(fiberFlags, hookFlags, create, deps) { 8254 var hook = mountWorkInProgressHook(); 8255 currentlyRenderingFiber.flags |= fiberFlags; 8256 hook.memoizedState = pushSimpleEffect( 8257 HasEffect | hookFlags, 8258 { destroy: void 0 }, 8259 create, 8260 void 0 === deps ? null : deps 8261 ); 8262 } 8263 function updateEffectImpl(fiberFlags, hookFlags, create, deps) { 8264 var hook = updateWorkInProgressHook(); 8265 deps = void 0 === deps ? null : deps; 8266 var inst = hook.memoizedState.inst; 8267 null !== currentHook && null !== deps && areHookInputsEqual(deps, currentHook.memoizedState.deps) ? hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps) : (currentlyRenderingFiber.flags |= fiberFlags, hook.memoizedState = pushSimpleEffect( 8268 HasEffect | hookFlags, 8269 inst, 8270 create, 8271 deps 8272 )); 8273 } 8274 function mountEffect(create, deps) { 8275 (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode ? mountEffectImpl(276826112, Passive, create, deps) : mountEffectImpl(8390656, Passive, create, deps); 8276 } 8277 function useEffectEventImpl(payload) { 8278 currentlyRenderingFiber.flags |= 4; 8279 var componentUpdateQueue = currentlyRenderingFiber.updateQueue; 8280 if (null === componentUpdateQueue) 8281 componentUpdateQueue = createFunctionComponentUpdateQueue(), currentlyRenderingFiber.updateQueue = componentUpdateQueue, componentUpdateQueue.events = [payload]; 8282 else { 8283 var events = componentUpdateQueue.events; 8284 null === events ? componentUpdateQueue.events = [payload] : events.push(payload); 8285 } 8286 } 8287 function mountEvent(callback) { 8288 var hook = mountWorkInProgressHook(), ref = { impl: callback }; 8289 hook.memoizedState = ref; 8290 return function() { 8291 if ((executionContext & RenderContext) !== NoContext) 8292 throw Error( 8293 "A function wrapped in useEffectEvent can't be called during rendering." 8294 ); 8295 return ref.impl.apply(void 0, arguments); 8296 }; 8297 } 8298 function updateEvent(callback) { 8299 var ref = updateWorkInProgressHook().memoizedState; 8300 useEffectEventImpl({ ref, nextImpl: callback }); 8301 return function() { 8302 if ((executionContext & RenderContext) !== NoContext) 8303 throw Error( 8304 "A function wrapped in useEffectEvent can't be called during rendering." 8305 ); 8306 return ref.impl.apply(void 0, arguments); 8307 }; 8308 } 8309 function mountLayoutEffect(create, deps) { 8310 var fiberFlags = 4194308; 8311 (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode && (fiberFlags |= 134217728); 8312 return mountEffectImpl(fiberFlags, Layout, create, deps); 8313 } 8314 function imperativeHandleEffect(create, ref) { 8315 if ("function" === typeof ref) { 8316 create = create(); 8317 var refCleanup = ref(create); 8318 return function() { 8319 "function" === typeof refCleanup ? refCleanup() : ref(null); 8320 }; 8321 } 8322 if (null !== ref && void 0 !== ref) 8323 return ref.hasOwnProperty("current") || console.error( 8324 "Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.", 8325 "an object with keys {" + Object.keys(ref).join(", ") + "}" 8326 ), create = create(), ref.current = create, function() { 8327 ref.current = null; 8328 }; 8329 } 8330 function mountImperativeHandle(ref, create, deps) { 8331 "function" !== typeof create && console.error( 8332 "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.", 8333 null !== create ? typeof create : "null" 8334 ); 8335 deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; 8336 var fiberFlags = 4194308; 8337 (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode && (fiberFlags |= 134217728); 8338 mountEffectImpl( 8339 fiberFlags, 8340 Layout, 8341 imperativeHandleEffect.bind(null, create, ref), 8342 deps 8343 ); 8344 } 8345 function updateImperativeHandle(ref, create, deps) { 8346 "function" !== typeof create && console.error( 8347 "Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.", 8348 null !== create ? typeof create : "null" 8349 ); 8350 deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null; 8351 updateEffectImpl( 8352 4, 8353 Layout, 8354 imperativeHandleEffect.bind(null, create, ref), 8355 deps 8356 ); 8357 } 8358 function mountCallback(callback, deps) { 8359 mountWorkInProgressHook().memoizedState = [ 8360 callback, 8361 void 0 === deps ? null : deps 8362 ]; 8363 return callback; 8364 } 8365 function updateCallback(callback, deps) { 8366 var hook = updateWorkInProgressHook(); 8367 deps = void 0 === deps ? null : deps; 8368 var prevState = hook.memoizedState; 8369 if (null !== deps && areHookInputsEqual(deps, prevState[1])) 8370 return prevState[0]; 8371 hook.memoizedState = [callback, deps]; 8372 return callback; 8373 } 8374 function mountMemo(nextCreate, deps) { 8375 var hook = mountWorkInProgressHook(); 8376 deps = void 0 === deps ? null : deps; 8377 var nextValue = nextCreate(); 8378 if (shouldDoubleInvokeUserFnsInHooksDEV) { 8379 setIsStrictModeForDevtools(true); 8380 try { 8381 nextCreate(); 8382 } finally { 8383 setIsStrictModeForDevtools(false); 8384 } 8385 } 8386 hook.memoizedState = [nextValue, deps]; 8387 return nextValue; 8388 } 8389 function updateMemo(nextCreate, deps) { 8390 var hook = updateWorkInProgressHook(); 8391 deps = void 0 === deps ? null : deps; 8392 var prevState = hook.memoizedState; 8393 if (null !== deps && areHookInputsEqual(deps, prevState[1])) 8394 return prevState[0]; 8395 prevState = nextCreate(); 8396 if (shouldDoubleInvokeUserFnsInHooksDEV) { 8397 setIsStrictModeForDevtools(true); 8398 try { 8399 nextCreate(); 8400 } finally { 8401 setIsStrictModeForDevtools(false); 8402 } 8403 } 8404 hook.memoizedState = [prevState, deps]; 8405 return prevState; 8406 } 8407 function mountDeferredValue(value, initialValue) { 8408 var hook = mountWorkInProgressHook(); 8409 return mountDeferredValueImpl(hook, value, initialValue); 8410 } 8411 function updateDeferredValue(value, initialValue) { 8412 var hook = updateWorkInProgressHook(); 8413 return updateDeferredValueImpl( 8414 hook, 8415 currentHook.memoizedState, 8416 value, 8417 initialValue 8418 ); 8419 } 8420 function rerenderDeferredValue(value, initialValue) { 8421 var hook = updateWorkInProgressHook(); 8422 return null === currentHook ? mountDeferredValueImpl(hook, value, initialValue) : updateDeferredValueImpl( 8423 hook, 8424 currentHook.memoizedState, 8425 value, 8426 initialValue 8427 ); 8428 } 8429 function mountDeferredValueImpl(hook, value, initialValue) { 8430 if (void 0 === initialValue || 0 !== (renderLanes & 1073741824) && 0 === (workInProgressRootRenderLanes & 261930)) 8431 return hook.memoizedState = value; 8432 hook.memoizedState = initialValue; 8433 hook = requestDeferredLane(); 8434 currentlyRenderingFiber.lanes |= hook; 8435 workInProgressRootSkippedLanes |= hook; 8436 return initialValue; 8437 } 8438 function updateDeferredValueImpl(hook, prevValue, value, initialValue) { 8439 if (objectIs(value, prevValue)) return value; 8440 if (null !== currentTreeHiddenStackCursor.current) 8441 return hook = mountDeferredValueImpl(hook, value, initialValue), objectIs(hook, prevValue) || (didReceiveUpdate = true), hook; 8442 if (0 === (renderLanes & 42) || 0 !== (renderLanes & 1073741824) && 0 === (workInProgressRootRenderLanes & 261930)) 8443 return didReceiveUpdate = true, hook.memoizedState = value; 8444 hook = requestDeferredLane(); 8445 currentlyRenderingFiber.lanes |= hook; 8446 workInProgressRootSkippedLanes |= hook; 8447 return prevValue; 8448 } 8449 function releaseAsyncTransition() { 8450 ReactSharedInternals.asyncTransitions--; 8451 } 8452 function startTransition(fiber, queue, pendingState, finishedState, callback) { 8453 var previousPriority = ReactDOMSharedInternals.p; 8454 ReactDOMSharedInternals.p = 0 !== previousPriority && previousPriority < ContinuousEventPriority ? previousPriority : ContinuousEventPriority; 8455 var prevTransition = ReactSharedInternals.T, currentTransition = {}; 8456 currentTransition._updatedFibers = /* @__PURE__ */ new Set(); 8457 ReactSharedInternals.T = currentTransition; 8458 dispatchOptimisticSetState(fiber, false, queue, pendingState); 8459 try { 8460 var returnValue = callback(), onStartTransitionFinish = ReactSharedInternals.S; 8461 null !== onStartTransitionFinish && onStartTransitionFinish(currentTransition, returnValue); 8462 if (null !== returnValue && "object" === typeof returnValue && "function" === typeof returnValue.then) { 8463 ReactSharedInternals.asyncTransitions++; 8464 returnValue.then(releaseAsyncTransition, releaseAsyncTransition); 8465 var thenableForFinishedState = chainThenableValue( 8466 returnValue, 8467 finishedState 8468 ); 8469 dispatchSetStateInternal( 8470 fiber, 8471 queue, 8472 thenableForFinishedState, 8473 requestUpdateLane(fiber) 8474 ); 8475 } else 8476 dispatchSetStateInternal( 8477 fiber, 8478 queue, 8479 finishedState, 8480 requestUpdateLane(fiber) 8481 ); 8482 } catch (error2) { 8483 dispatchSetStateInternal( 8484 fiber, 8485 queue, 8486 { then: function() { 8487 }, status: "rejected", reason: error2 }, 8488 requestUpdateLane(fiber) 8489 ); 8490 } finally { 8491 ReactDOMSharedInternals.p = previousPriority, null !== prevTransition && null !== currentTransition.types && (null !== prevTransition.types && prevTransition.types !== currentTransition.types && console.error( 8492 "We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React." 8493 ), prevTransition.types = currentTransition.types), ReactSharedInternals.T = prevTransition, null === prevTransition && currentTransition._updatedFibers && (fiber = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < fiber && console.warn( 8494 "Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table." 8495 )); 8496 } 8497 } 8498 function startHostTransition(formFiber, pendingState, action, formData) { 8499 if (5 !== formFiber.tag) 8500 throw Error( 8501 "Expected the form instance to be a HostComponent. This is a bug in React." 8502 ); 8503 var queue = ensureFormComponentIsStateful(formFiber).queue; 8504 startHostActionTimer(formFiber); 8505 startTransition( 8506 formFiber, 8507 queue, 8508 pendingState, 8509 NotPendingTransition, 8510 null === action ? noop : function() { 8511 requestFormReset$1(formFiber); 8512 return action(formData); 8513 } 8514 ); 8515 } 8516 function ensureFormComponentIsStateful(formFiber) { 8517 var existingStateHook = formFiber.memoizedState; 8518 if (null !== existingStateHook) return existingStateHook; 8519 existingStateHook = { 8520 memoizedState: NotPendingTransition, 8521 baseState: NotPendingTransition, 8522 baseQueue: null, 8523 queue: { 8524 pending: null, 8525 lanes: 0, 8526 dispatch: null, 8527 lastRenderedReducer: basicStateReducer, 8528 lastRenderedState: NotPendingTransition 8529 }, 8530 next: null 8531 }; 8532 var initialResetState = {}; 8533 existingStateHook.next = { 8534 memoizedState: initialResetState, 8535 baseState: initialResetState, 8536 baseQueue: null, 8537 queue: { 8538 pending: null, 8539 lanes: 0, 8540 dispatch: null, 8541 lastRenderedReducer: basicStateReducer, 8542 lastRenderedState: initialResetState 8543 }, 8544 next: null 8545 }; 8546 formFiber.memoizedState = existingStateHook; 8547 formFiber = formFiber.alternate; 8548 null !== formFiber && (formFiber.memoizedState = existingStateHook); 8549 return existingStateHook; 8550 } 8551 function requestFormReset$1(formFiber) { 8552 null === ReactSharedInternals.T && console.error( 8553 "requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition." 8554 ); 8555 var stateHook = ensureFormComponentIsStateful(formFiber); 8556 null === stateHook.next && (stateHook = formFiber.alternate.memoizedState); 8557 dispatchSetStateInternal( 8558 formFiber, 8559 stateHook.next.queue, 8560 {}, 8561 requestUpdateLane(formFiber) 8562 ); 8563 } 8564 function mountTransition() { 8565 var stateHook = mountStateImpl(false); 8566 stateHook = startTransition.bind( 8567 null, 8568 currentlyRenderingFiber, 8569 stateHook.queue, 8570 true, 8571 false 8572 ); 8573 mountWorkInProgressHook().memoizedState = stateHook; 8574 return [false, stateHook]; 8575 } 8576 function updateTransition() { 8577 var booleanOrThenable = updateReducer(basicStateReducer)[0], start2 = updateWorkInProgressHook().memoizedState; 8578 return [ 8579 "boolean" === typeof booleanOrThenable ? booleanOrThenable : useThenable(booleanOrThenable), 8580 start2 8581 ]; 8582 } 8583 function rerenderTransition() { 8584 var booleanOrThenable = rerenderReducer(basicStateReducer)[0], start2 = updateWorkInProgressHook().memoizedState; 8585 return [ 8586 "boolean" === typeof booleanOrThenable ? booleanOrThenable : useThenable(booleanOrThenable), 8587 start2 8588 ]; 8589 } 8590 function useHostTransitionStatus() { 8591 return readContext(HostTransitionContext); 8592 } 8593 function mountId() { 8594 var hook = mountWorkInProgressHook(), identifierPrefix = workInProgressRoot.identifierPrefix; 8595 if (isHydrating) { 8596 var treeId = treeContextOverflow; 8597 var idWithLeadingBit = treeContextId; 8598 treeId = (idWithLeadingBit & ~(1 << 32 - clz32(idWithLeadingBit) - 1)).toString(32) + treeId; 8599 identifierPrefix = "_" + identifierPrefix + "R_" + treeId; 8600 treeId = localIdCounter++; 8601 0 < treeId && (identifierPrefix += "H" + treeId.toString(32)); 8602 identifierPrefix += "_"; 8603 } else 8604 treeId = globalClientIdCounter++, identifierPrefix = "_" + identifierPrefix + "r_" + treeId.toString(32) + "_"; 8605 return hook.memoizedState = identifierPrefix; 8606 } 8607 function mountRefresh() { 8608 return mountWorkInProgressHook().memoizedState = refreshCache.bind( 8609 null, 8610 currentlyRenderingFiber 8611 ); 8612 } 8613 function refreshCache(fiber, seedKey) { 8614 for (var provider = fiber.return; null !== provider; ) { 8615 switch (provider.tag) { 8616 case 24: 8617 case 3: 8618 var lane = requestUpdateLane(provider), refreshUpdate = createUpdate(lane), root3 = enqueueUpdate(provider, refreshUpdate, lane); 8619 null !== root3 && (startUpdateTimerByLane(lane, "refresh()", fiber), scheduleUpdateOnFiber(root3, provider, lane), entangleTransitions(root3, provider, lane)); 8620 fiber = createCache(); 8621 null !== seedKey && void 0 !== seedKey && null !== root3 && console.error( 8622 "The seed argument is not enabled outside experimental channels." 8623 ); 8624 refreshUpdate.payload = { cache: fiber }; 8625 return; 8626 } 8627 provider = provider.return; 8628 } 8629 } 8630 function dispatchReducerAction(fiber, queue, action) { 8631 var args = arguments; 8632 "function" === typeof args[3] && console.error( 8633 "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()." 8634 ); 8635 args = requestUpdateLane(fiber); 8636 var update = { 8637 lane: args, 8638 revertLane: 0, 8639 gesture: null, 8640 action, 8641 hasEagerState: false, 8642 eagerState: null, 8643 next: null 8644 }; 8645 isRenderPhaseUpdate(fiber) ? enqueueRenderPhaseUpdate(queue, update) : (update = enqueueConcurrentHookUpdate(fiber, queue, update, args), null !== update && (startUpdateTimerByLane(args, "dispatch()", fiber), scheduleUpdateOnFiber(update, fiber, args), entangleTransitionUpdate(update, queue, args))); 8646 } 8647 function dispatchSetState(fiber, queue, action) { 8648 var args = arguments; 8649 "function" === typeof args[3] && console.error( 8650 "State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()." 8651 ); 8652 args = requestUpdateLane(fiber); 8653 dispatchSetStateInternal(fiber, queue, action, args) && startUpdateTimerByLane(args, "setState()", fiber); 8654 } 8655 function dispatchSetStateInternal(fiber, queue, action, lane) { 8656 var update = { 8657 lane, 8658 revertLane: 0, 8659 gesture: null, 8660 action, 8661 hasEagerState: false, 8662 eagerState: null, 8663 next: null 8664 }; 8665 if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update); 8666 else { 8667 var alternate = fiber.alternate; 8668 if (0 === fiber.lanes && (null === alternate || 0 === alternate.lanes) && (alternate = queue.lastRenderedReducer, null !== alternate)) { 8669 var prevDispatcher = ReactSharedInternals.H; 8670 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 8671 try { 8672 var currentState = queue.lastRenderedState, eagerState = alternate(currentState, action); 8673 update.hasEagerState = true; 8674 update.eagerState = eagerState; 8675 if (objectIs(eagerState, currentState)) 8676 return enqueueUpdate$1(fiber, queue, update, 0), null === workInProgressRoot && finishQueueingConcurrentUpdates(), false; 8677 } catch (error2) { 8678 } finally { 8679 ReactSharedInternals.H = prevDispatcher; 8680 } 8681 } 8682 action = enqueueConcurrentHookUpdate(fiber, queue, update, lane); 8683 if (null !== action) 8684 return scheduleUpdateOnFiber(action, fiber, lane), entangleTransitionUpdate(action, queue, lane), true; 8685 } 8686 return false; 8687 } 8688 function dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) { 8689 null === ReactSharedInternals.T && 0 === currentEntangledLane && console.error( 8690 "An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition." 8691 ); 8692 action = { 8693 lane: 2, 8694 revertLane: requestTransitionLane(), 8695 gesture: null, 8696 action, 8697 hasEagerState: false, 8698 eagerState: null, 8699 next: null 8700 }; 8701 if (isRenderPhaseUpdate(fiber)) { 8702 if (throwIfDuringRender) 8703 throw Error("Cannot update optimistic state while rendering."); 8704 console.error("Cannot call startTransition while rendering."); 8705 } else 8706 throwIfDuringRender = enqueueConcurrentHookUpdate( 8707 fiber, 8708 queue, 8709 action, 8710 2 8711 ), null !== throwIfDuringRender && (startUpdateTimerByLane(2, "setOptimistic()", fiber), scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2)); 8712 } 8713 function isRenderPhaseUpdate(fiber) { 8714 var alternate = fiber.alternate; 8715 return fiber === currentlyRenderingFiber || null !== alternate && alternate === currentlyRenderingFiber; 8716 } 8717 function enqueueRenderPhaseUpdate(queue, update) { 8718 didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true; 8719 var pending = queue.pending; 8720 null === pending ? update.next = update : (update.next = pending.next, pending.next = update); 8721 queue.pending = update; 8722 } 8723 function entangleTransitionUpdate(root3, queue, lane) { 8724 if (0 !== (lane & 4194048)) { 8725 var queueLanes = queue.lanes; 8726 queueLanes &= root3.pendingLanes; 8727 lane |= queueLanes; 8728 queue.lanes = lane; 8729 markRootEntangled(root3, lane); 8730 } 8731 } 8732 function warnOnInvalidCallback(callback) { 8733 if (null !== callback && "function" !== typeof callback) { 8734 var key = String(callback); 8735 didWarnOnInvalidCallback.has(key) || (didWarnOnInvalidCallback.add(key), console.error( 8736 "Expected the last optional `callback` argument to be a function. Instead received: %s.", 8737 callback 8738 )); 8739 } 8740 } 8741 function applyDerivedStateFromProps(workInProgress2, ctor, getDerivedStateFromProps, nextProps) { 8742 var prevState = workInProgress2.memoizedState, partialState = getDerivedStateFromProps(nextProps, prevState); 8743 if (workInProgress2.mode & StrictLegacyMode) { 8744 setIsStrictModeForDevtools(true); 8745 try { 8746 partialState = getDerivedStateFromProps(nextProps, prevState); 8747 } finally { 8748 setIsStrictModeForDevtools(false); 8749 } 8750 } 8751 void 0 === partialState && (ctor = getComponentNameFromType(ctor) || "Component", didWarnAboutUndefinedDerivedState.has(ctor) || (didWarnAboutUndefinedDerivedState.add(ctor), console.error( 8752 "%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", 8753 ctor 8754 ))); 8755 prevState = null === partialState || void 0 === partialState ? prevState : assign({}, prevState, partialState); 8756 workInProgress2.memoizedState = prevState; 8757 0 === workInProgress2.lanes && (workInProgress2.updateQueue.baseState = prevState); 8758 } 8759 function checkShouldComponentUpdate(workInProgress2, ctor, oldProps, newProps, oldState, newState, nextContext) { 8760 var instance = workInProgress2.stateNode; 8761 if ("function" === typeof instance.shouldComponentUpdate) { 8762 oldProps = instance.shouldComponentUpdate( 8763 newProps, 8764 newState, 8765 nextContext 8766 ); 8767 if (workInProgress2.mode & StrictLegacyMode) { 8768 setIsStrictModeForDevtools(true); 8769 try { 8770 oldProps = instance.shouldComponentUpdate( 8771 newProps, 8772 newState, 8773 nextContext 8774 ); 8775 } finally { 8776 setIsStrictModeForDevtools(false); 8777 } 8778 } 8779 void 0 === oldProps && console.error( 8780 "%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", 8781 getComponentNameFromType(ctor) || "Component" 8782 ); 8783 return oldProps; 8784 } 8785 return ctor.prototype && ctor.prototype.isPureReactComponent ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState) : true; 8786 } 8787 function callComponentWillReceiveProps(workInProgress2, instance, newProps, nextContext) { 8788 var oldState = instance.state; 8789 "function" === typeof instance.componentWillReceiveProps && instance.componentWillReceiveProps(newProps, nextContext); 8790 "function" === typeof instance.UNSAFE_componentWillReceiveProps && instance.UNSAFE_componentWillReceiveProps(newProps, nextContext); 8791 instance.state !== oldState && (workInProgress2 = getComponentNameFromFiber(workInProgress2) || "Component", didWarnAboutStateAssignmentForComponent.has(workInProgress2) || (didWarnAboutStateAssignmentForComponent.add(workInProgress2), console.error( 8792 "%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", 8793 workInProgress2 8794 )), classComponentUpdater.enqueueReplaceState( 8795 instance, 8796 instance.state, 8797 null 8798 )); 8799 } 8800 function resolveClassComponentProps(Component, baseProps) { 8801 var newProps = baseProps; 8802 if ("ref" in baseProps) { 8803 newProps = {}; 8804 for (var propName in baseProps) 8805 "ref" !== propName && (newProps[propName] = baseProps[propName]); 8806 } 8807 if (Component = Component.defaultProps) { 8808 newProps === baseProps && (newProps = assign({}, newProps)); 8809 for (var _propName in Component) 8810 void 0 === newProps[_propName] && (newProps[_propName] = Component[_propName]); 8811 } 8812 return newProps; 8813 } 8814 function defaultOnUncaughtError(error2) { 8815 reportGlobalError(error2); 8816 console.warn( 8817 "%s\n\n%s\n", 8818 componentName ? "An error occurred in the <" + componentName + "> component." : "An error occurred in one of your React components.", 8819 "Consider adding an error boundary to your tree to customize error handling behavior.\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries." 8820 ); 8821 } 8822 function defaultOnCaughtError(error2) { 8823 var componentNameMessage = componentName ? "The above error occurred in the <" + componentName + "> component." : "The above error occurred in one of your React components.", recreateMessage = "React will try to recreate this component tree from scratch using the error boundary you provided, " + ((errorBoundaryName || "Anonymous") + "."); 8824 if ("object" === typeof error2 && null !== error2 && "string" === typeof error2.environmentName) { 8825 var JSCompiler_inline_result = error2.environmentName; 8826 error2 = [ 8827 "%o\n\n%s\n\n%s\n", 8828 error2, 8829 componentNameMessage, 8830 recreateMessage 8831 ].slice(0); 8832 "string" === typeof error2[0] ? error2.splice( 8833 0, 8834 1, 8835 badgeFormat + " " + error2[0], 8836 badgeStyle, 8837 pad + JSCompiler_inline_result + pad, 8838 resetStyle 8839 ) : error2.splice( 8840 0, 8841 0, 8842 badgeFormat, 8843 badgeStyle, 8844 pad + JSCompiler_inline_result + pad, 8845 resetStyle 8846 ); 8847 error2.unshift(console); 8848 JSCompiler_inline_result = bind.apply(console.error, error2); 8849 JSCompiler_inline_result(); 8850 } else 8851 console.error( 8852 "%o\n\n%s\n\n%s\n", 8853 error2, 8854 componentNameMessage, 8855 recreateMessage 8856 ); 8857 } 8858 function defaultOnRecoverableError(error2) { 8859 reportGlobalError(error2); 8860 } 8861 function logUncaughtError(root3, errorInfo) { 8862 try { 8863 componentName = errorInfo.source ? getComponentNameFromFiber(errorInfo.source) : null; 8864 errorBoundaryName = null; 8865 var error2 = errorInfo.value; 8866 if (null !== ReactSharedInternals.actQueue) 8867 ReactSharedInternals.thrownErrors.push(error2); 8868 else { 8869 var onUncaughtError = root3.onUncaughtError; 8870 onUncaughtError(error2, { componentStack: errorInfo.stack }); 8871 } 8872 } catch (e$5) { 8873 setTimeout(function() { 8874 throw e$5; 8875 }); 8876 } 8877 } 8878 function logCaughtError(root3, boundary, errorInfo) { 8879 try { 8880 componentName = errorInfo.source ? getComponentNameFromFiber(errorInfo.source) : null; 8881 errorBoundaryName = getComponentNameFromFiber(boundary); 8882 var onCaughtError = root3.onCaughtError; 8883 onCaughtError(errorInfo.value, { 8884 componentStack: errorInfo.stack, 8885 errorBoundary: 1 === boundary.tag ? boundary.stateNode : null 8886 }); 8887 } catch (e$6) { 8888 setTimeout(function() { 8889 throw e$6; 8890 }); 8891 } 8892 } 8893 function createRootErrorUpdate(root3, errorInfo, lane) { 8894 lane = createUpdate(lane); 8895 lane.tag = CaptureUpdate; 8896 lane.payload = { element: null }; 8897 lane.callback = function() { 8898 runWithFiberInDEV(errorInfo.source, logUncaughtError, root3, errorInfo); 8899 }; 8900 return lane; 8901 } 8902 function createClassErrorUpdate(lane) { 8903 lane = createUpdate(lane); 8904 lane.tag = CaptureUpdate; 8905 return lane; 8906 } 8907 function initializeClassErrorUpdate(update, root3, fiber, errorInfo) { 8908 var getDerivedStateFromError = fiber.type.getDerivedStateFromError; 8909 if ("function" === typeof getDerivedStateFromError) { 8910 var error2 = errorInfo.value; 8911 update.payload = function() { 8912 return getDerivedStateFromError(error2); 8913 }; 8914 update.callback = function() { 8915 markFailedErrorBoundaryForHotReloading(fiber); 8916 runWithFiberInDEV( 8917 errorInfo.source, 8918 logCaughtError, 8919 root3, 8920 fiber, 8921 errorInfo 8922 ); 8923 }; 8924 } 8925 var inst = fiber.stateNode; 8926 null !== inst && "function" === typeof inst.componentDidCatch && (update.callback = function() { 8927 markFailedErrorBoundaryForHotReloading(fiber); 8928 runWithFiberInDEV( 8929 errorInfo.source, 8930 logCaughtError, 8931 root3, 8932 fiber, 8933 errorInfo 8934 ); 8935 "function" !== typeof getDerivedStateFromError && (null === legacyErrorBoundariesThatAlreadyFailed ? legacyErrorBoundariesThatAlreadyFailed = /* @__PURE__ */ new Set([this]) : legacyErrorBoundariesThatAlreadyFailed.add(this)); 8936 callComponentDidCatchInDEV(this, errorInfo); 8937 "function" === typeof getDerivedStateFromError || 0 === (fiber.lanes & 2) && console.error( 8938 "%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.", 8939 getComponentNameFromFiber(fiber) || "Unknown" 8940 ); 8941 }); 8942 } 8943 function throwException(root3, returnFiber, sourceFiber, value, rootRenderLanes) { 8944 sourceFiber.flags |= 32768; 8945 isDevToolsPresent && restorePendingUpdaters(root3, rootRenderLanes); 8946 if (null !== value && "object" === typeof value && "function" === typeof value.then) { 8947 returnFiber = sourceFiber.alternate; 8948 null !== returnFiber && propagateParentContextChanges( 8949 returnFiber, 8950 sourceFiber, 8951 rootRenderLanes, 8952 true 8953 ); 8954 isHydrating && (didSuspendOrErrorDEV = true); 8955 sourceFiber = suspenseHandlerStackCursor.current; 8956 if (null !== sourceFiber) { 8957 switch (sourceFiber.tag) { 8958 case 31: 8959 case 13: 8960 return null === shellBoundary ? renderDidSuspendDelayIfPossible() : null === sourceFiber.alternate && workInProgressRootExitStatus === RootInProgress && (workInProgressRootExitStatus = RootSuspended), sourceFiber.flags &= -257, sourceFiber.flags |= 65536, sourceFiber.lanes = rootRenderLanes, value === noopSuspenseyCommitThenable ? sourceFiber.flags |= 16384 : (returnFiber = sourceFiber.updateQueue, null === returnFiber ? sourceFiber.updateQueue = /* @__PURE__ */ new Set([value]) : returnFiber.add(value), attachPingListener(root3, value, rootRenderLanes)), false; 8961 case 22: 8962 return sourceFiber.flags |= 65536, value === noopSuspenseyCommitThenable ? sourceFiber.flags |= 16384 : (returnFiber = sourceFiber.updateQueue, null === returnFiber ? (returnFiber = { 8963 transitions: null, 8964 markerInstances: null, 8965 retryQueue: /* @__PURE__ */ new Set([value]) 8966 }, sourceFiber.updateQueue = returnFiber) : (sourceFiber = returnFiber.retryQueue, null === sourceFiber ? returnFiber.retryQueue = /* @__PURE__ */ new Set([value]) : sourceFiber.add(value)), attachPingListener(root3, value, rootRenderLanes)), false; 8967 } 8968 throw Error( 8969 "Unexpected Suspense handler tag (" + sourceFiber.tag + "). This is a bug in React." 8970 ); 8971 } 8972 attachPingListener(root3, value, rootRenderLanes); 8973 renderDidSuspendDelayIfPossible(); 8974 return false; 8975 } 8976 if (isHydrating) 8977 return didSuspendOrErrorDEV = true, returnFiber = suspenseHandlerStackCursor.current, null !== returnFiber ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256), returnFiber.flags |= 65536, returnFiber.lanes = rootRenderLanes, value !== HydrationMismatchException && queueHydrationError( 8978 createCapturedValueAtFiber( 8979 Error( 8980 "There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.", 8981 { cause: value } 8982 ), 8983 sourceFiber 8984 ) 8985 )) : (value !== HydrationMismatchException && queueHydrationError( 8986 createCapturedValueAtFiber( 8987 Error( 8988 "There was an error while hydrating but React was able to recover by instead client rendering the entire root.", 8989 { cause: value } 8990 ), 8991 sourceFiber 8992 ) 8993 ), root3 = root3.current.alternate, root3.flags |= 65536, rootRenderLanes &= -rootRenderLanes, root3.lanes |= rootRenderLanes, value = createCapturedValueAtFiber(value, sourceFiber), rootRenderLanes = createRootErrorUpdate( 8994 root3.stateNode, 8995 value, 8996 rootRenderLanes 8997 ), enqueueCapturedUpdate(root3, rootRenderLanes), workInProgressRootExitStatus !== RootSuspendedWithDelay && (workInProgressRootExitStatus = RootErrored)), false; 8998 var error2 = createCapturedValueAtFiber( 8999 Error( 9000 "There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.", 9001 { cause: value } 9002 ), 9003 sourceFiber 9004 ); 9005 null === workInProgressRootConcurrentErrors ? workInProgressRootConcurrentErrors = [error2] : workInProgressRootConcurrentErrors.push(error2); 9006 workInProgressRootExitStatus !== RootSuspendedWithDelay && (workInProgressRootExitStatus = RootErrored); 9007 if (null === returnFiber) return true; 9008 value = createCapturedValueAtFiber(value, sourceFiber); 9009 sourceFiber = returnFiber; 9010 do { 9011 switch (sourceFiber.tag) { 9012 case 3: 9013 return sourceFiber.flags |= 65536, root3 = rootRenderLanes & -rootRenderLanes, sourceFiber.lanes |= root3, root3 = createRootErrorUpdate( 9014 sourceFiber.stateNode, 9015 value, 9016 root3 9017 ), enqueueCapturedUpdate(sourceFiber, root3), false; 9018 case 1: 9019 if (returnFiber = sourceFiber.type, error2 = sourceFiber.stateNode, 0 === (sourceFiber.flags & 128) && ("function" === typeof returnFiber.getDerivedStateFromError || null !== error2 && "function" === typeof error2.componentDidCatch && (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(error2)))) 9020 return sourceFiber.flags |= 65536, rootRenderLanes &= -rootRenderLanes, sourceFiber.lanes |= rootRenderLanes, rootRenderLanes = createClassErrorUpdate(rootRenderLanes), initializeClassErrorUpdate( 9021 rootRenderLanes, 9022 root3, 9023 sourceFiber, 9024 value 9025 ), enqueueCapturedUpdate(sourceFiber, rootRenderLanes), false; 9026 } 9027 sourceFiber = sourceFiber.return; 9028 } while (null !== sourceFiber); 9029 return false; 9030 } 9031 function reconcileChildren(current2, workInProgress2, nextChildren, renderLanes2) { 9032 workInProgress2.child = null === current2 ? mountChildFibers(workInProgress2, null, nextChildren, renderLanes2) : reconcileChildFibers( 9033 workInProgress2, 9034 current2.child, 9035 nextChildren, 9036 renderLanes2 9037 ); 9038 } 9039 function updateForwardRef(current2, workInProgress2, Component, nextProps, renderLanes2) { 9040 Component = Component.render; 9041 var ref = workInProgress2.ref; 9042 if ("ref" in nextProps) { 9043 var propsWithoutRef = {}; 9044 for (var key in nextProps) 9045 "ref" !== key && (propsWithoutRef[key] = nextProps[key]); 9046 } else propsWithoutRef = nextProps; 9047 prepareToReadContext(workInProgress2); 9048 nextProps = renderWithHooks( 9049 current2, 9050 workInProgress2, 9051 Component, 9052 propsWithoutRef, 9053 ref, 9054 renderLanes2 9055 ); 9056 key = checkDidRenderIdHook(); 9057 if (null !== current2 && !didReceiveUpdate) 9058 return bailoutHooks(current2, workInProgress2, renderLanes2), bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2); 9059 isHydrating && key && pushMaterializedTreeId(workInProgress2); 9060 workInProgress2.flags |= 1; 9061 reconcileChildren(current2, workInProgress2, nextProps, renderLanes2); 9062 return workInProgress2.child; 9063 } 9064 function updateMemoComponent(current2, workInProgress2, Component, nextProps, renderLanes2) { 9065 if (null === current2) { 9066 var type = Component.type; 9067 if ("function" === typeof type && !shouldConstruct(type) && void 0 === type.defaultProps && null === Component.compare) 9068 return Component = resolveFunctionForHotReloading(type), workInProgress2.tag = 15, workInProgress2.type = Component, validateFunctionComponentInDev(workInProgress2, type), updateSimpleMemoComponent( 9069 current2, 9070 workInProgress2, 9071 Component, 9072 nextProps, 9073 renderLanes2 9074 ); 9075 current2 = createFiberFromTypeAndProps( 9076 Component.type, 9077 null, 9078 nextProps, 9079 workInProgress2, 9080 workInProgress2.mode, 9081 renderLanes2 9082 ); 9083 current2.ref = workInProgress2.ref; 9084 current2.return = workInProgress2; 9085 return workInProgress2.child = current2; 9086 } 9087 type = current2.child; 9088 if (!checkScheduledUpdateOrContext(current2, renderLanes2)) { 9089 var prevProps = type.memoizedProps; 9090 Component = Component.compare; 9091 Component = null !== Component ? Component : shallowEqual; 9092 if (Component(prevProps, nextProps) && current2.ref === workInProgress2.ref) 9093 return bailoutOnAlreadyFinishedWork( 9094 current2, 9095 workInProgress2, 9096 renderLanes2 9097 ); 9098 } 9099 workInProgress2.flags |= 1; 9100 current2 = createWorkInProgress(type, nextProps); 9101 current2.ref = workInProgress2.ref; 9102 current2.return = workInProgress2; 9103 return workInProgress2.child = current2; 9104 } 9105 function updateSimpleMemoComponent(current2, workInProgress2, Component, nextProps, renderLanes2) { 9106 if (null !== current2) { 9107 var prevProps = current2.memoizedProps; 9108 if (shallowEqual(prevProps, nextProps) && current2.ref === workInProgress2.ref && workInProgress2.type === current2.type) 9109 if (didReceiveUpdate = false, workInProgress2.pendingProps = nextProps = prevProps, checkScheduledUpdateOrContext(current2, renderLanes2)) 9110 0 !== (current2.flags & 131072) && (didReceiveUpdate = true); 9111 else 9112 return workInProgress2.lanes = current2.lanes, bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2); 9113 } 9114 return updateFunctionComponent( 9115 current2, 9116 workInProgress2, 9117 Component, 9118 nextProps, 9119 renderLanes2 9120 ); 9121 } 9122 function updateOffscreenComponent(current2, workInProgress2, renderLanes2, nextProps) { 9123 var nextChildren = nextProps.children, prevState = null !== current2 ? current2.memoizedState : null; 9124 null === current2 && null === workInProgress2.stateNode && (workInProgress2.stateNode = { 9125 _visibility: OffscreenVisible, 9126 _pendingMarkers: null, 9127 _retryCache: null, 9128 _transitions: null 9129 }); 9130 if ("hidden" === nextProps.mode) { 9131 if (0 !== (workInProgress2.flags & 128)) { 9132 prevState = null !== prevState ? prevState.baseLanes | renderLanes2 : renderLanes2; 9133 if (null !== current2) { 9134 nextProps = workInProgress2.child = current2.child; 9135 for (nextChildren = 0; null !== nextProps; ) 9136 nextChildren = nextChildren | nextProps.lanes | nextProps.childLanes, nextProps = nextProps.sibling; 9137 nextProps = nextChildren & ~prevState; 9138 } else nextProps = 0, workInProgress2.child = null; 9139 return deferHiddenOffscreenComponent( 9140 current2, 9141 workInProgress2, 9142 prevState, 9143 renderLanes2, 9144 nextProps 9145 ); 9146 } 9147 if (0 !== (renderLanes2 & 536870912)) 9148 workInProgress2.memoizedState = { baseLanes: 0, cachePool: null }, null !== current2 && pushTransition( 9149 workInProgress2, 9150 null !== prevState ? prevState.cachePool : null 9151 ), null !== prevState ? pushHiddenContext(workInProgress2, prevState) : reuseHiddenContextOnStack(workInProgress2), pushOffscreenSuspenseHandler(workInProgress2); 9152 else 9153 return nextProps = workInProgress2.lanes = 536870912, deferHiddenOffscreenComponent( 9154 current2, 9155 workInProgress2, 9156 null !== prevState ? prevState.baseLanes | renderLanes2 : renderLanes2, 9157 renderLanes2, 9158 nextProps 9159 ); 9160 } else 9161 null !== prevState ? (pushTransition(workInProgress2, prevState.cachePool), pushHiddenContext(workInProgress2, prevState), reuseSuspenseHandlerOnStack(workInProgress2), workInProgress2.memoizedState = null) : (null !== current2 && pushTransition(workInProgress2, null), reuseHiddenContextOnStack(workInProgress2), reuseSuspenseHandlerOnStack(workInProgress2)); 9162 reconcileChildren(current2, workInProgress2, nextChildren, renderLanes2); 9163 return workInProgress2.child; 9164 } 9165 function bailoutOffscreenComponent(current2, workInProgress2) { 9166 null !== current2 && 22 === current2.tag || null !== workInProgress2.stateNode || (workInProgress2.stateNode = { 9167 _visibility: OffscreenVisible, 9168 _pendingMarkers: null, 9169 _retryCache: null, 9170 _transitions: null 9171 }); 9172 return workInProgress2.sibling; 9173 } 9174 function deferHiddenOffscreenComponent(current2, workInProgress2, nextBaseLanes, renderLanes2, remainingChildLanes) { 9175 var JSCompiler_inline_result = peekCacheFromPool(); 9176 JSCompiler_inline_result = null === JSCompiler_inline_result ? null : { 9177 parent: CacheContext._currentValue, 9178 pool: JSCompiler_inline_result 9179 }; 9180 workInProgress2.memoizedState = { 9181 baseLanes: nextBaseLanes, 9182 cachePool: JSCompiler_inline_result 9183 }; 9184 null !== current2 && pushTransition(workInProgress2, null); 9185 reuseHiddenContextOnStack(workInProgress2); 9186 pushOffscreenSuspenseHandler(workInProgress2); 9187 null !== current2 && propagateParentContextChanges(current2, workInProgress2, renderLanes2, true); 9188 workInProgress2.childLanes = remainingChildLanes; 9189 return null; 9190 } 9191 function mountActivityChildren(workInProgress2, nextProps) { 9192 var hiddenProp = nextProps.hidden; 9193 void 0 !== hiddenProp && console.error( 9194 `<Activity> doesn't accept a hidden prop. Use mode="hidden" instead. 9195- <Activity %s> 9196+ <Activity %s>`, 9197 true === hiddenProp ? "hidden" : false === hiddenProp ? "hidden={false}" : "hidden={...}", 9198 hiddenProp ? 'mode="hidden"' : 'mode="visible"' 9199 ); 9200 nextProps = mountWorkInProgressOffscreenFiber( 9201 { mode: nextProps.mode, children: nextProps.children }, 9202 workInProgress2.mode 9203 ); 9204 nextProps.ref = workInProgress2.ref; 9205 workInProgress2.child = nextProps; 9206 nextProps.return = workInProgress2; 9207 return nextProps; 9208 } 9209 function retryActivityComponentWithoutHydrating(current2, workInProgress2, renderLanes2) { 9210 reconcileChildFibers(workInProgress2, current2.child, null, renderLanes2); 9211 current2 = mountActivityChildren( 9212 workInProgress2, 9213 workInProgress2.pendingProps 9214 ); 9215 current2.flags |= 2; 9216 popSuspenseHandler(workInProgress2); 9217 workInProgress2.memoizedState = null; 9218 return current2; 9219 } 9220 function updateActivityComponent(current2, workInProgress2, renderLanes2) { 9221 var nextProps = workInProgress2.pendingProps, didSuspend = 0 !== (workInProgress2.flags & 128); 9222 workInProgress2.flags &= -129; 9223 if (null === current2) { 9224 if (isHydrating) { 9225 if ("hidden" === nextProps.mode) 9226 return current2 = mountActivityChildren(workInProgress2, nextProps), workInProgress2.lanes = 536870912, bailoutOffscreenComponent(null, current2); 9227 pushDehydratedActivitySuspenseHandler(workInProgress2); 9228 (current2 = nextHydratableInstance) ? (renderLanes2 = canHydrateHydrationBoundary( 9229 current2, 9230 rootOrSingletonContext 9231 ), renderLanes2 = null !== renderLanes2 && renderLanes2.data === ACTIVITY_START_DATA ? renderLanes2 : null, null !== renderLanes2 && (nextProps = { 9232 dehydrated: renderLanes2, 9233 treeContext: getSuspendedTreeContext(), 9234 retryLane: 536870912, 9235 hydrationErrors: null 9236 }, workInProgress2.memoizedState = nextProps, nextProps = createFiberFromDehydratedFragment(renderLanes2), nextProps.return = workInProgress2, workInProgress2.child = nextProps, hydrationParentFiber = workInProgress2, nextHydratableInstance = null)) : renderLanes2 = null; 9237 if (null === renderLanes2) 9238 throw warnNonHydratedInstance(workInProgress2, current2), throwOnHydrationMismatch(workInProgress2); 9239 workInProgress2.lanes = 536870912; 9240 return null; 9241 } 9242 return mountActivityChildren(workInProgress2, nextProps); 9243 } 9244 var prevState = current2.memoizedState; 9245 if (null !== prevState) { 9246 var activityInstance = prevState.dehydrated; 9247 pushDehydratedActivitySuspenseHandler(workInProgress2); 9248 if (didSuspend) 9249 if (workInProgress2.flags & 256) 9250 workInProgress2.flags &= -257, workInProgress2 = retryActivityComponentWithoutHydrating( 9251 current2, 9252 workInProgress2, 9253 renderLanes2 9254 ); 9255 else if (null !== workInProgress2.memoizedState) 9256 workInProgress2.child = current2.child, workInProgress2.flags |= 128, workInProgress2 = null; 9257 else 9258 throw Error( 9259 "Client rendering an Activity suspended it again. This is a bug in React." 9260 ); 9261 else if (warnIfHydrating(), 0 !== (renderLanes2 & 536870912) && markRenderDerivedCause(workInProgress2), didReceiveUpdate || propagateParentContextChanges( 9262 current2, 9263 workInProgress2, 9264 renderLanes2, 9265 false 9266 ), didSuspend = 0 !== (renderLanes2 & current2.childLanes), didReceiveUpdate || didSuspend) { 9267 nextProps = workInProgressRoot; 9268 if (null !== nextProps && (activityInstance = getBumpedLaneForHydration( 9269 nextProps, 9270 renderLanes2 9271 ), 0 !== activityInstance && activityInstance !== prevState.retryLane)) 9272 throw prevState.retryLane = activityInstance, enqueueConcurrentRenderForLane(current2, activityInstance), scheduleUpdateOnFiber(nextProps, current2, activityInstance), SelectiveHydrationException; 9273 renderDidSuspendDelayIfPossible(); 9274 workInProgress2 = retryActivityComponentWithoutHydrating( 9275 current2, 9276 workInProgress2, 9277 renderLanes2 9278 ); 9279 } else 9280 current2 = prevState.treeContext, nextHydratableInstance = getNextHydratable( 9281 activityInstance.nextSibling 9282 ), hydrationParentFiber = workInProgress2, isHydrating = true, hydrationErrors = null, didSuspendOrErrorDEV = false, hydrationDiffRootDEV = null, rootOrSingletonContext = false, null !== current2 && restoreSuspendedTreeContext(workInProgress2, current2), workInProgress2 = mountActivityChildren(workInProgress2, nextProps), workInProgress2.flags |= 4096; 9283 return workInProgress2; 9284 } 9285 prevState = current2.child; 9286 nextProps = { mode: nextProps.mode, children: nextProps.children }; 9287 0 !== (renderLanes2 & 536870912) && 0 !== (renderLanes2 & current2.lanes) && markRenderDerivedCause(workInProgress2); 9288 current2 = createWorkInProgress(prevState, nextProps); 9289 current2.ref = workInProgress2.ref; 9290 workInProgress2.child = current2; 9291 current2.return = workInProgress2; 9292 return current2; 9293 } 9294 function markRef(current2, workInProgress2) { 9295 var ref = workInProgress2.ref; 9296 if (null === ref) 9297 null !== current2 && null !== current2.ref && (workInProgress2.flags |= 4194816); 9298 else { 9299 if ("function" !== typeof ref && "object" !== typeof ref) 9300 throw Error( 9301 "Expected ref to be a function, an object returned by React.createRef(), or undefined/null." 9302 ); 9303 if (null === current2 || current2.ref !== ref) 9304 workInProgress2.flags |= 4194816; 9305 } 9306 } 9307 function updateFunctionComponent(current2, workInProgress2, Component, nextProps, renderLanes2) { 9308 if (Component.prototype && "function" === typeof Component.prototype.render) { 9309 var componentName2 = getComponentNameFromType(Component) || "Unknown"; 9310 didWarnAboutBadClass[componentName2] || (console.error( 9311 "The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.", 9312 componentName2, 9313 componentName2 9314 ), didWarnAboutBadClass[componentName2] = true); 9315 } 9316 workInProgress2.mode & StrictLegacyMode && ReactStrictModeWarnings.recordLegacyContextWarning( 9317 workInProgress2, 9318 null 9319 ); 9320 null === current2 && (validateFunctionComponentInDev(workInProgress2, workInProgress2.type), Component.contextTypes && (componentName2 = getComponentNameFromType(Component) || "Unknown", didWarnAboutContextTypes[componentName2] || (didWarnAboutContextTypes[componentName2] = true, console.error( 9321 "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)", 9322 componentName2 9323 )))); 9324 prepareToReadContext(workInProgress2); 9325 Component = renderWithHooks( 9326 current2, 9327 workInProgress2, 9328 Component, 9329 nextProps, 9330 void 0, 9331 renderLanes2 9332 ); 9333 nextProps = checkDidRenderIdHook(); 9334 if (null !== current2 && !didReceiveUpdate) 9335 return bailoutHooks(current2, workInProgress2, renderLanes2), bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2); 9336 isHydrating && nextProps && pushMaterializedTreeId(workInProgress2); 9337 workInProgress2.flags |= 1; 9338 reconcileChildren(current2, workInProgress2, Component, renderLanes2); 9339 return workInProgress2.child; 9340 } 9341 function replayFunctionComponent(current2, workInProgress2, nextProps, Component, secondArg, renderLanes2) { 9342 prepareToReadContext(workInProgress2); 9343 hookTypesUpdateIndexDev = -1; 9344 ignorePreviousDependencies = null !== current2 && current2.type !== workInProgress2.type; 9345 workInProgress2.updateQueue = null; 9346 nextProps = renderWithHooksAgain( 9347 workInProgress2, 9348 Component, 9349 nextProps, 9350 secondArg 9351 ); 9352 finishRenderingHooks(current2, workInProgress2); 9353 Component = checkDidRenderIdHook(); 9354 if (null !== current2 && !didReceiveUpdate) 9355 return bailoutHooks(current2, workInProgress2, renderLanes2), bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2); 9356 isHydrating && Component && pushMaterializedTreeId(workInProgress2); 9357 workInProgress2.flags |= 1; 9358 reconcileChildren(current2, workInProgress2, nextProps, renderLanes2); 9359 return workInProgress2.child; 9360 } 9361 function updateClassComponent(current2, workInProgress2, Component, nextProps, renderLanes2) { 9362 switch (shouldErrorImpl(workInProgress2)) { 9363 case false: 9364 var _instance = workInProgress2.stateNode, state = new workInProgress2.type( 9365 workInProgress2.memoizedProps, 9366 _instance.context 9367 ).state; 9368 _instance.updater.enqueueSetState(_instance, state, null); 9369 break; 9370 case true: 9371 workInProgress2.flags |= 128; 9372 workInProgress2.flags |= 65536; 9373 _instance = Error("Simulated error coming from DevTools"); 9374 var lane = renderLanes2 & -renderLanes2; 9375 workInProgress2.lanes |= lane; 9376 state = workInProgressRoot; 9377 if (null === state) 9378 throw Error( 9379 "Expected a work-in-progress root. This is a bug in React. Please file an issue." 9380 ); 9381 lane = createClassErrorUpdate(lane); 9382 initializeClassErrorUpdate( 9383 lane, 9384 state, 9385 workInProgress2, 9386 createCapturedValueAtFiber(_instance, workInProgress2) 9387 ); 9388 enqueueCapturedUpdate(workInProgress2, lane); 9389 } 9390 prepareToReadContext(workInProgress2); 9391 if (null === workInProgress2.stateNode) { 9392 state = emptyContextObject; 9393 _instance = Component.contextType; 9394 "contextType" in Component && null !== _instance && (void 0 === _instance || _instance.$$typeof !== REACT_CONTEXT_TYPE) && !didWarnAboutInvalidateContextType.has(Component) && (didWarnAboutInvalidateContextType.add(Component), lane = void 0 === _instance ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file." : "object" !== typeof _instance ? " However, it is set to a " + typeof _instance + "." : _instance.$$typeof === REACT_CONSUMER_TYPE ? " Did you accidentally pass the Context.Consumer instead?" : " However, it is set to an object with keys {" + Object.keys(_instance).join(", ") + "}.", console.error( 9395 "%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s", 9396 getComponentNameFromType(Component) || "Component", 9397 lane 9398 )); 9399 "object" === typeof _instance && null !== _instance && (state = readContext(_instance)); 9400 _instance = new Component(nextProps, state); 9401 if (workInProgress2.mode & StrictLegacyMode) { 9402 setIsStrictModeForDevtools(true); 9403 try { 9404 _instance = new Component(nextProps, state); 9405 } finally { 9406 setIsStrictModeForDevtools(false); 9407 } 9408 } 9409 state = workInProgress2.memoizedState = null !== _instance.state && void 0 !== _instance.state ? _instance.state : null; 9410 _instance.updater = classComponentUpdater; 9411 workInProgress2.stateNode = _instance; 9412 _instance._reactInternals = workInProgress2; 9413 _instance._reactInternalInstance = fakeInternalInstance; 9414 "function" === typeof Component.getDerivedStateFromProps && null === state && (state = getComponentNameFromType(Component) || "Component", didWarnAboutUninitializedState.has(state) || (didWarnAboutUninitializedState.add(state), console.error( 9415 "`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.", 9416 state, 9417 null === _instance.state ? "null" : "undefined", 9418 state 9419 ))); 9420 if ("function" === typeof Component.getDerivedStateFromProps || "function" === typeof _instance.getSnapshotBeforeUpdate) { 9421 var foundWillUpdateName = lane = state = null; 9422 "function" === typeof _instance.componentWillMount && true !== _instance.componentWillMount.__suppressDeprecationWarning ? state = "componentWillMount" : "function" === typeof _instance.UNSAFE_componentWillMount && (state = "UNSAFE_componentWillMount"); 9423 "function" === typeof _instance.componentWillReceiveProps && true !== _instance.componentWillReceiveProps.__suppressDeprecationWarning ? lane = "componentWillReceiveProps" : "function" === typeof _instance.UNSAFE_componentWillReceiveProps && (lane = "UNSAFE_componentWillReceiveProps"); 9424 "function" === typeof _instance.componentWillUpdate && true !== _instance.componentWillUpdate.__suppressDeprecationWarning ? foundWillUpdateName = "componentWillUpdate" : "function" === typeof _instance.UNSAFE_componentWillUpdate && (foundWillUpdateName = "UNSAFE_componentWillUpdate"); 9425 if (null !== state || null !== lane || null !== foundWillUpdateName) { 9426 _instance = getComponentNameFromType(Component) || "Component"; 9427 var newApiName = "function" === typeof Component.getDerivedStateFromProps ? "getDerivedStateFromProps()" : "getSnapshotBeforeUpdate()"; 9428 didWarnAboutLegacyLifecyclesAndDerivedState.has(_instance) || (didWarnAboutLegacyLifecyclesAndDerivedState.add(_instance), console.error( 9429 "Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles", 9430 _instance, 9431 newApiName, 9432 null !== state ? "\n " + state : "", 9433 null !== lane ? "\n " + lane : "", 9434 null !== foundWillUpdateName ? "\n " + foundWillUpdateName : "" 9435 )); 9436 } 9437 } 9438 _instance = workInProgress2.stateNode; 9439 state = getComponentNameFromType(Component) || "Component"; 9440 _instance.render || (Component.prototype && "function" === typeof Component.prototype.render ? console.error( 9441 "No `render` method found on the %s instance: did you accidentally return an object from the constructor?", 9442 state 9443 ) : console.error( 9444 "No `render` method found on the %s instance: you may have forgotten to define `render`.", 9445 state 9446 )); 9447 !_instance.getInitialState || _instance.getInitialState.isReactClassApproved || _instance.state || console.error( 9448 "getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?", 9449 state 9450 ); 9451 _instance.getDefaultProps && !_instance.getDefaultProps.isReactClassApproved && console.error( 9452 "getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.", 9453 state 9454 ); 9455 _instance.contextType && console.error( 9456 "contextType was defined as an instance property on %s. Use a static property to define contextType instead.", 9457 state 9458 ); 9459 Component.childContextTypes && !didWarnAboutChildContextTypes.has(Component) && (didWarnAboutChildContextTypes.add(Component), console.error( 9460 "%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)", 9461 state 9462 )); 9463 Component.contextTypes && !didWarnAboutContextTypes$1.has(Component) && (didWarnAboutContextTypes$1.add(Component), console.error( 9464 "%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)", 9465 state 9466 )); 9467 "function" === typeof _instance.componentShouldUpdate && console.error( 9468 "%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.", 9469 state 9470 ); 9471 Component.prototype && Component.prototype.isPureReactComponent && "undefined" !== typeof _instance.shouldComponentUpdate && console.error( 9472 "%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.", 9473 getComponentNameFromType(Component) || "A pure component" 9474 ); 9475 "function" === typeof _instance.componentDidUnmount && console.error( 9476 "%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?", 9477 state 9478 ); 9479 "function" === typeof _instance.componentDidReceiveProps && console.error( 9480 "%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().", 9481 state 9482 ); 9483 "function" === typeof _instance.componentWillRecieveProps && console.error( 9484 "%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?", 9485 state 9486 ); 9487 "function" === typeof _instance.UNSAFE_componentWillRecieveProps && console.error( 9488 "%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?", 9489 state 9490 ); 9491 lane = _instance.props !== nextProps; 9492 void 0 !== _instance.props && lane && console.error( 9493 "When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.", 9494 state 9495 ); 9496 _instance.defaultProps && console.error( 9497 "Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.", 9498 state, 9499 state 9500 ); 9501 "function" !== typeof _instance.getSnapshotBeforeUpdate || "function" === typeof _instance.componentDidUpdate || didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(Component) || (didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(Component), console.error( 9502 "%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.", 9503 getComponentNameFromType(Component) 9504 )); 9505 "function" === typeof _instance.getDerivedStateFromProps && console.error( 9506 "%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.", 9507 state 9508 ); 9509 "function" === typeof _instance.getDerivedStateFromError && console.error( 9510 "%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.", 9511 state 9512 ); 9513 "function" === typeof Component.getSnapshotBeforeUpdate && console.error( 9514 "%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.", 9515 state 9516 ); 9517 (lane = _instance.state) && ("object" !== typeof lane || isArrayImpl(lane)) && console.error("%s.state: must be set to an object or null", state); 9518 "function" === typeof _instance.getChildContext && "object" !== typeof Component.childContextTypes && console.error( 9519 "%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().", 9520 state 9521 ); 9522 _instance = workInProgress2.stateNode; 9523 _instance.props = nextProps; 9524 _instance.state = workInProgress2.memoizedState; 9525 _instance.refs = {}; 9526 initializeUpdateQueue(workInProgress2); 9527 state = Component.contextType; 9528 _instance.context = "object" === typeof state && null !== state ? readContext(state) : emptyContextObject; 9529 _instance.state === nextProps && (state = getComponentNameFromType(Component) || "Component", didWarnAboutDirectlyAssigningPropsToState.has(state) || (didWarnAboutDirectlyAssigningPropsToState.add(state), console.error( 9530 "%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.", 9531 state 9532 ))); 9533 workInProgress2.mode & StrictLegacyMode && ReactStrictModeWarnings.recordLegacyContextWarning( 9534 workInProgress2, 9535 _instance 9536 ); 9537 ReactStrictModeWarnings.recordUnsafeLifecycleWarnings( 9538 workInProgress2, 9539 _instance 9540 ); 9541 _instance.state = workInProgress2.memoizedState; 9542 state = Component.getDerivedStateFromProps; 9543 "function" === typeof state && (applyDerivedStateFromProps( 9544 workInProgress2, 9545 Component, 9546 state, 9547 nextProps 9548 ), _instance.state = workInProgress2.memoizedState); 9549 "function" === typeof Component.getDerivedStateFromProps || "function" === typeof _instance.getSnapshotBeforeUpdate || "function" !== typeof _instance.UNSAFE_componentWillMount && "function" !== typeof _instance.componentWillMount || (state = _instance.state, "function" === typeof _instance.componentWillMount && _instance.componentWillMount(), "function" === typeof _instance.UNSAFE_componentWillMount && _instance.UNSAFE_componentWillMount(), state !== _instance.state && (console.error( 9550 "%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", 9551 getComponentNameFromFiber(workInProgress2) || "Component" 9552 ), classComponentUpdater.enqueueReplaceState( 9553 _instance, 9554 _instance.state, 9555 null 9556 )), processUpdateQueue(workInProgress2, nextProps, _instance, renderLanes2), suspendIfUpdateReadFromEntangledAsyncAction(), _instance.state = workInProgress2.memoizedState); 9557 "function" === typeof _instance.componentDidMount && (workInProgress2.flags |= 4194308); 9558 (workInProgress2.mode & StrictEffectsMode) !== NoMode && (workInProgress2.flags |= 134217728); 9559 _instance = true; 9560 } else if (null === current2) { 9561 _instance = workInProgress2.stateNode; 9562 var unresolvedOldProps = workInProgress2.memoizedProps; 9563 lane = resolveClassComponentProps(Component, unresolvedOldProps); 9564 _instance.props = lane; 9565 var oldContext = _instance.context; 9566 foundWillUpdateName = Component.contextType; 9567 state = emptyContextObject; 9568 "object" === typeof foundWillUpdateName && null !== foundWillUpdateName && (state = readContext(foundWillUpdateName)); 9569 newApiName = Component.getDerivedStateFromProps; 9570 foundWillUpdateName = "function" === typeof newApiName || "function" === typeof _instance.getSnapshotBeforeUpdate; 9571 unresolvedOldProps = workInProgress2.pendingProps !== unresolvedOldProps; 9572 foundWillUpdateName || "function" !== typeof _instance.UNSAFE_componentWillReceiveProps && "function" !== typeof _instance.componentWillReceiveProps || (unresolvedOldProps || oldContext !== state) && callComponentWillReceiveProps( 9573 workInProgress2, 9574 _instance, 9575 nextProps, 9576 state 9577 ); 9578 hasForceUpdate = false; 9579 var oldState = workInProgress2.memoizedState; 9580 _instance.state = oldState; 9581 processUpdateQueue(workInProgress2, nextProps, _instance, renderLanes2); 9582 suspendIfUpdateReadFromEntangledAsyncAction(); 9583 oldContext = workInProgress2.memoizedState; 9584 unresolvedOldProps || oldState !== oldContext || hasForceUpdate ? ("function" === typeof newApiName && (applyDerivedStateFromProps( 9585 workInProgress2, 9586 Component, 9587 newApiName, 9588 nextProps 9589 ), oldContext = workInProgress2.memoizedState), (lane = hasForceUpdate || checkShouldComponentUpdate( 9590 workInProgress2, 9591 Component, 9592 lane, 9593 nextProps, 9594 oldState, 9595 oldContext, 9596 state 9597 )) ? (foundWillUpdateName || "function" !== typeof _instance.UNSAFE_componentWillMount && "function" !== typeof _instance.componentWillMount || ("function" === typeof _instance.componentWillMount && _instance.componentWillMount(), "function" === typeof _instance.UNSAFE_componentWillMount && _instance.UNSAFE_componentWillMount()), "function" === typeof _instance.componentDidMount && (workInProgress2.flags |= 4194308), (workInProgress2.mode & StrictEffectsMode) !== NoMode && (workInProgress2.flags |= 134217728)) : ("function" === typeof _instance.componentDidMount && (workInProgress2.flags |= 4194308), (workInProgress2.mode & StrictEffectsMode) !== NoMode && (workInProgress2.flags |= 134217728), workInProgress2.memoizedProps = nextProps, workInProgress2.memoizedState = oldContext), _instance.props = nextProps, _instance.state = oldContext, _instance.context = state, _instance = lane) : ("function" === typeof _instance.componentDidMount && (workInProgress2.flags |= 4194308), (workInProgress2.mode & StrictEffectsMode) !== NoMode && (workInProgress2.flags |= 134217728), _instance = false); 9598 } else { 9599 _instance = workInProgress2.stateNode; 9600 cloneUpdateQueue(current2, workInProgress2); 9601 state = workInProgress2.memoizedProps; 9602 foundWillUpdateName = resolveClassComponentProps(Component, state); 9603 _instance.props = foundWillUpdateName; 9604 newApiName = workInProgress2.pendingProps; 9605 oldState = _instance.context; 9606 oldContext = Component.contextType; 9607 lane = emptyContextObject; 9608 "object" === typeof oldContext && null !== oldContext && (lane = readContext(oldContext)); 9609 unresolvedOldProps = Component.getDerivedStateFromProps; 9610 (oldContext = "function" === typeof unresolvedOldProps || "function" === typeof _instance.getSnapshotBeforeUpdate) || "function" !== typeof _instance.UNSAFE_componentWillReceiveProps && "function" !== typeof _instance.componentWillReceiveProps || (state !== newApiName || oldState !== lane) && callComponentWillReceiveProps( 9611 workInProgress2, 9612 _instance, 9613 nextProps, 9614 lane 9615 ); 9616 hasForceUpdate = false; 9617 oldState = workInProgress2.memoizedState; 9618 _instance.state = oldState; 9619 processUpdateQueue(workInProgress2, nextProps, _instance, renderLanes2); 9620 suspendIfUpdateReadFromEntangledAsyncAction(); 9621 var newState = workInProgress2.memoizedState; 9622 state !== newApiName || oldState !== newState || hasForceUpdate || null !== current2 && null !== current2.dependencies && checkIfContextChanged(current2.dependencies) ? ("function" === typeof unresolvedOldProps && (applyDerivedStateFromProps( 9623 workInProgress2, 9624 Component, 9625 unresolvedOldProps, 9626 nextProps 9627 ), newState = workInProgress2.memoizedState), (foundWillUpdateName = hasForceUpdate || checkShouldComponentUpdate( 9628 workInProgress2, 9629 Component, 9630 foundWillUpdateName, 9631 nextProps, 9632 oldState, 9633 newState, 9634 lane 9635 ) || null !== current2 && null !== current2.dependencies && checkIfContextChanged(current2.dependencies)) ? (oldContext || "function" !== typeof _instance.UNSAFE_componentWillUpdate && "function" !== typeof _instance.componentWillUpdate || ("function" === typeof _instance.componentWillUpdate && _instance.componentWillUpdate(nextProps, newState, lane), "function" === typeof _instance.UNSAFE_componentWillUpdate && _instance.UNSAFE_componentWillUpdate( 9636 nextProps, 9637 newState, 9638 lane 9639 )), "function" === typeof _instance.componentDidUpdate && (workInProgress2.flags |= 4), "function" === typeof _instance.getSnapshotBeforeUpdate && (workInProgress2.flags |= 1024)) : ("function" !== typeof _instance.componentDidUpdate || state === current2.memoizedProps && oldState === current2.memoizedState || (workInProgress2.flags |= 4), "function" !== typeof _instance.getSnapshotBeforeUpdate || state === current2.memoizedProps && oldState === current2.memoizedState || (workInProgress2.flags |= 1024), workInProgress2.memoizedProps = nextProps, workInProgress2.memoizedState = newState), _instance.props = nextProps, _instance.state = newState, _instance.context = lane, _instance = foundWillUpdateName) : ("function" !== typeof _instance.componentDidUpdate || state === current2.memoizedProps && oldState === current2.memoizedState || (workInProgress2.flags |= 4), "function" !== typeof _instance.getSnapshotBeforeUpdate || state === current2.memoizedProps && oldState === current2.memoizedState || (workInProgress2.flags |= 1024), _instance = false); 9640 } 9641 lane = _instance; 9642 markRef(current2, workInProgress2); 9643 state = 0 !== (workInProgress2.flags & 128); 9644 if (lane || state) { 9645 lane = workInProgress2.stateNode; 9646 setCurrentFiber(workInProgress2); 9647 if (state && "function" !== typeof Component.getDerivedStateFromError) 9648 Component = null, profilerStartTime = -1; 9649 else if (Component = callRenderInDEV(lane), workInProgress2.mode & StrictLegacyMode) { 9650 setIsStrictModeForDevtools(true); 9651 try { 9652 callRenderInDEV(lane); 9653 } finally { 9654 setIsStrictModeForDevtools(false); 9655 } 9656 } 9657 workInProgress2.flags |= 1; 9658 null !== current2 && state ? (workInProgress2.child = reconcileChildFibers( 9659 workInProgress2, 9660 current2.child, 9661 null, 9662 renderLanes2 9663 ), workInProgress2.child = reconcileChildFibers( 9664 workInProgress2, 9665 null, 9666 Component, 9667 renderLanes2 9668 )) : reconcileChildren(current2, workInProgress2, Component, renderLanes2); 9669 workInProgress2.memoizedState = lane.state; 9670 current2 = workInProgress2.child; 9671 } else 9672 current2 = bailoutOnAlreadyFinishedWork( 9673 current2, 9674 workInProgress2, 9675 renderLanes2 9676 ); 9677 renderLanes2 = workInProgress2.stateNode; 9678 _instance && renderLanes2.props !== nextProps && (didWarnAboutReassigningProps || console.error( 9679 "It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.", 9680 getComponentNameFromFiber(workInProgress2) || "a component" 9681 ), didWarnAboutReassigningProps = true); 9682 return current2; 9683 } 9684 function mountHostRootWithoutHydrating(current2, workInProgress2, nextChildren, renderLanes2) { 9685 resetHydrationState(); 9686 workInProgress2.flags |= 256; 9687 reconcileChildren(current2, workInProgress2, nextChildren, renderLanes2); 9688 return workInProgress2.child; 9689 } 9690 function validateFunctionComponentInDev(workInProgress2, Component) { 9691 Component && Component.childContextTypes && console.error( 9692 "childContextTypes cannot be defined on a function component.\n %s.childContextTypes = ...", 9693 Component.displayName || Component.name || "Component" 9694 ); 9695 "function" === typeof Component.getDerivedStateFromProps && (workInProgress2 = getComponentNameFromType(Component) || "Unknown", didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress2] || (console.error( 9696 "%s: Function components do not support getDerivedStateFromProps.", 9697 workInProgress2 9698 ), didWarnAboutGetDerivedStateOnFunctionComponent[workInProgress2] = true)); 9699 "object" === typeof Component.contextType && null !== Component.contextType && (Component = getComponentNameFromType(Component) || "Unknown", didWarnAboutContextTypeOnFunctionComponent[Component] || (console.error( 9700 "%s: Function components do not support contextType.", 9701 Component 9702 ), didWarnAboutContextTypeOnFunctionComponent[Component] = true)); 9703 } 9704 function mountSuspenseOffscreenState(renderLanes2) { 9705 return { baseLanes: renderLanes2, cachePool: getSuspendedCache() }; 9706 } 9707 function getRemainingWorkInPrimaryTree(current2, primaryTreeDidDefer, renderLanes2) { 9708 current2 = null !== current2 ? current2.childLanes & ~renderLanes2 : 0; 9709 primaryTreeDidDefer && (current2 |= workInProgressDeferredLane); 9710 return current2; 9711 } 9712 function updateSuspenseComponent(current2, workInProgress2, renderLanes2) { 9713 var JSCompiler_object_inline_digest_2724; 9714 var JSCompiler_object_inline_stack_2725 = workInProgress2.pendingProps; 9715 shouldSuspendImpl(workInProgress2) && (workInProgress2.flags |= 128); 9716 var JSCompiler_object_inline_message_2723 = false; 9717 var didSuspend = 0 !== (workInProgress2.flags & 128); 9718 (JSCompiler_object_inline_digest_2724 = didSuspend) || (JSCompiler_object_inline_digest_2724 = null !== current2 && null === current2.memoizedState ? false : 0 !== (suspenseStackCursor.current & ForceSuspenseFallback)); 9719 JSCompiler_object_inline_digest_2724 && (JSCompiler_object_inline_message_2723 = true, workInProgress2.flags &= -129); 9720 JSCompiler_object_inline_digest_2724 = 0 !== (workInProgress2.flags & 32); 9721 workInProgress2.flags &= -33; 9722 if (null === current2) { 9723 if (isHydrating) { 9724 JSCompiler_object_inline_message_2723 ? pushPrimaryTreeSuspenseHandler(workInProgress2) : reuseSuspenseHandlerOnStack(workInProgress2); 9725 (current2 = nextHydratableInstance) ? (renderLanes2 = canHydrateHydrationBoundary( 9726 current2, 9727 rootOrSingletonContext 9728 ), renderLanes2 = null !== renderLanes2 && renderLanes2.data !== ACTIVITY_START_DATA ? renderLanes2 : null, null !== renderLanes2 && (JSCompiler_object_inline_digest_2724 = { 9729 dehydrated: renderLanes2, 9730 treeContext: getSuspendedTreeContext(), 9731 retryLane: 536870912, 9732 hydrationErrors: null 9733 }, workInProgress2.memoizedState = JSCompiler_object_inline_digest_2724, JSCompiler_object_inline_digest_2724 = createFiberFromDehydratedFragment(renderLanes2), JSCompiler_object_inline_digest_2724.return = workInProgress2, workInProgress2.child = JSCompiler_object_inline_digest_2724, hydrationParentFiber = workInProgress2, nextHydratableInstance = null)) : renderLanes2 = null; 9734 if (null === renderLanes2) 9735 throw warnNonHydratedInstance(workInProgress2, current2), throwOnHydrationMismatch(workInProgress2); 9736 isSuspenseInstanceFallback(renderLanes2) ? workInProgress2.lanes = 32 : workInProgress2.lanes = 536870912; 9737 return null; 9738 } 9739 var nextPrimaryChildren = JSCompiler_object_inline_stack_2725.children; 9740 JSCompiler_object_inline_stack_2725 = JSCompiler_object_inline_stack_2725.fallback; 9741 if (JSCompiler_object_inline_message_2723) { 9742 reuseSuspenseHandlerOnStack(workInProgress2); 9743 var mode2 = workInProgress2.mode; 9744 nextPrimaryChildren = mountWorkInProgressOffscreenFiber( 9745 { mode: "hidden", children: nextPrimaryChildren }, 9746 mode2 9747 ); 9748 JSCompiler_object_inline_stack_2725 = createFiberFromFragment( 9749 JSCompiler_object_inline_stack_2725, 9750 mode2, 9751 renderLanes2, 9752 null 9753 ); 9754 nextPrimaryChildren.return = workInProgress2; 9755 JSCompiler_object_inline_stack_2725.return = workInProgress2; 9756 nextPrimaryChildren.sibling = JSCompiler_object_inline_stack_2725; 9757 workInProgress2.child = nextPrimaryChildren; 9758 JSCompiler_object_inline_stack_2725 = workInProgress2.child; 9759 JSCompiler_object_inline_stack_2725.memoizedState = mountSuspenseOffscreenState(renderLanes2); 9760 JSCompiler_object_inline_stack_2725.childLanes = getRemainingWorkInPrimaryTree( 9761 current2, 9762 JSCompiler_object_inline_digest_2724, 9763 renderLanes2 9764 ); 9765 workInProgress2.memoizedState = SUSPENDED_MARKER; 9766 return bailoutOffscreenComponent( 9767 null, 9768 JSCompiler_object_inline_stack_2725 9769 ); 9770 } 9771 pushPrimaryTreeSuspenseHandler(workInProgress2); 9772 return mountSuspensePrimaryChildren( 9773 workInProgress2, 9774 nextPrimaryChildren 9775 ); 9776 } 9777 var prevState = current2.memoizedState; 9778 if (null !== prevState) { 9779 var JSCompiler_object_inline_componentStack_2726 = prevState.dehydrated; 9780 if (null !== JSCompiler_object_inline_componentStack_2726) { 9781 if (didSuspend) 9782 workInProgress2.flags & 256 ? (pushPrimaryTreeSuspenseHandler(workInProgress2), workInProgress2.flags &= -257, workInProgress2 = retrySuspenseComponentWithoutHydrating( 9783 current2, 9784 workInProgress2, 9785 renderLanes2 9786 )) : null !== workInProgress2.memoizedState ? (reuseSuspenseHandlerOnStack(workInProgress2), workInProgress2.child = current2.child, workInProgress2.flags |= 128, workInProgress2 = null) : (reuseSuspenseHandlerOnStack(workInProgress2), nextPrimaryChildren = JSCompiler_object_inline_stack_2725.fallback, mode2 = workInProgress2.mode, JSCompiler_object_inline_stack_2725 = mountWorkInProgressOffscreenFiber( 9787 { 9788 mode: "visible", 9789 children: JSCompiler_object_inline_stack_2725.children 9790 }, 9791 mode2 9792 ), nextPrimaryChildren = createFiberFromFragment( 9793 nextPrimaryChildren, 9794 mode2, 9795 renderLanes2, 9796 null 9797 ), nextPrimaryChildren.flags |= 2, JSCompiler_object_inline_stack_2725.return = workInProgress2, nextPrimaryChildren.return = workInProgress2, JSCompiler_object_inline_stack_2725.sibling = nextPrimaryChildren, workInProgress2.child = JSCompiler_object_inline_stack_2725, reconcileChildFibers( 9798 workInProgress2, 9799 current2.child, 9800 null, 9801 renderLanes2 9802 ), JSCompiler_object_inline_stack_2725 = workInProgress2.child, JSCompiler_object_inline_stack_2725.memoizedState = mountSuspenseOffscreenState(renderLanes2), JSCompiler_object_inline_stack_2725.childLanes = getRemainingWorkInPrimaryTree( 9803 current2, 9804 JSCompiler_object_inline_digest_2724, 9805 renderLanes2 9806 ), workInProgress2.memoizedState = SUSPENDED_MARKER, workInProgress2 = bailoutOffscreenComponent( 9807 null, 9808 JSCompiler_object_inline_stack_2725 9809 )); 9810 else if (pushPrimaryTreeSuspenseHandler(workInProgress2), warnIfHydrating(), 0 !== (renderLanes2 & 536870912) && markRenderDerivedCause(workInProgress2), isSuspenseInstanceFallback( 9811 JSCompiler_object_inline_componentStack_2726 9812 )) { 9813 JSCompiler_object_inline_digest_2724 = JSCompiler_object_inline_componentStack_2726.nextSibling && JSCompiler_object_inline_componentStack_2726.nextSibling.dataset; 9814 if (JSCompiler_object_inline_digest_2724) { 9815 nextPrimaryChildren = JSCompiler_object_inline_digest_2724.dgst; 9816 var message = JSCompiler_object_inline_digest_2724.msg; 9817 mode2 = JSCompiler_object_inline_digest_2724.stck; 9818 var componentStack = JSCompiler_object_inline_digest_2724.cstck; 9819 } 9820 JSCompiler_object_inline_message_2723 = message; 9821 JSCompiler_object_inline_digest_2724 = nextPrimaryChildren; 9822 JSCompiler_object_inline_stack_2725 = mode2; 9823 JSCompiler_object_inline_componentStack_2726 = componentStack; 9824 nextPrimaryChildren = JSCompiler_object_inline_message_2723; 9825 mode2 = JSCompiler_object_inline_componentStack_2726; 9826 nextPrimaryChildren = nextPrimaryChildren ? Error(nextPrimaryChildren) : Error( 9827 "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering." 9828 ); 9829 nextPrimaryChildren.stack = JSCompiler_object_inline_stack_2725 || ""; 9830 nextPrimaryChildren.digest = JSCompiler_object_inline_digest_2724; 9831 JSCompiler_object_inline_digest_2724 = void 0 === mode2 ? null : mode2; 9832 JSCompiler_object_inline_stack_2725 = { 9833 value: nextPrimaryChildren, 9834 source: null, 9835 stack: JSCompiler_object_inline_digest_2724 9836 }; 9837 "string" === typeof JSCompiler_object_inline_digest_2724 && CapturedStacks.set( 9838 nextPrimaryChildren, 9839 JSCompiler_object_inline_stack_2725 9840 ); 9841 queueHydrationError(JSCompiler_object_inline_stack_2725); 9842 workInProgress2 = retrySuspenseComponentWithoutHydrating( 9843 current2, 9844 workInProgress2, 9845 renderLanes2 9846 ); 9847 } else if (didReceiveUpdate || propagateParentContextChanges( 9848 current2, 9849 workInProgress2, 9850 renderLanes2, 9851 false 9852 ), JSCompiler_object_inline_digest_2724 = 0 !== (renderLanes2 & current2.childLanes), didReceiveUpdate || JSCompiler_object_inline_digest_2724) { 9853 JSCompiler_object_inline_digest_2724 = workInProgressRoot; 9854 if (null !== JSCompiler_object_inline_digest_2724 && (JSCompiler_object_inline_stack_2725 = getBumpedLaneForHydration( 9855 JSCompiler_object_inline_digest_2724, 9856 renderLanes2 9857 ), 0 !== JSCompiler_object_inline_stack_2725 && JSCompiler_object_inline_stack_2725 !== prevState.retryLane)) 9858 throw prevState.retryLane = JSCompiler_object_inline_stack_2725, enqueueConcurrentRenderForLane( 9859 current2, 9860 JSCompiler_object_inline_stack_2725 9861 ), scheduleUpdateOnFiber( 9862 JSCompiler_object_inline_digest_2724, 9863 current2, 9864 JSCompiler_object_inline_stack_2725 9865 ), SelectiveHydrationException; 9866 isSuspenseInstancePending( 9867 JSCompiler_object_inline_componentStack_2726 9868 ) || renderDidSuspendDelayIfPossible(); 9869 workInProgress2 = retrySuspenseComponentWithoutHydrating( 9870 current2, 9871 workInProgress2, 9872 renderLanes2 9873 ); 9874 } else 9875 isSuspenseInstancePending( 9876 JSCompiler_object_inline_componentStack_2726 9877 ) ? (workInProgress2.flags |= 192, workInProgress2.child = current2.child, workInProgress2 = null) : (current2 = prevState.treeContext, nextHydratableInstance = getNextHydratable( 9878 JSCompiler_object_inline_componentStack_2726.nextSibling 9879 ), hydrationParentFiber = workInProgress2, isHydrating = true, hydrationErrors = null, didSuspendOrErrorDEV = false, hydrationDiffRootDEV = null, rootOrSingletonContext = false, null !== current2 && restoreSuspendedTreeContext(workInProgress2, current2), workInProgress2 = mountSuspensePrimaryChildren( 9880 workInProgress2, 9881 JSCompiler_object_inline_stack_2725.children 9882 ), workInProgress2.flags |= 4096); 9883 return workInProgress2; 9884 } 9885 } 9886 if (JSCompiler_object_inline_message_2723) 9887 return reuseSuspenseHandlerOnStack(workInProgress2), nextPrimaryChildren = JSCompiler_object_inline_stack_2725.fallback, mode2 = workInProgress2.mode, componentStack = current2.child, JSCompiler_object_inline_componentStack_2726 = componentStack.sibling, JSCompiler_object_inline_stack_2725 = createWorkInProgress( 9888 componentStack, 9889 { 9890 mode: "hidden", 9891 children: JSCompiler_object_inline_stack_2725.children 9892 } 9893 ), JSCompiler_object_inline_stack_2725.subtreeFlags = componentStack.subtreeFlags & 65011712, null !== JSCompiler_object_inline_componentStack_2726 ? nextPrimaryChildren = createWorkInProgress( 9894 JSCompiler_object_inline_componentStack_2726, 9895 nextPrimaryChildren 9896 ) : (nextPrimaryChildren = createFiberFromFragment( 9897 nextPrimaryChildren, 9898 mode2, 9899 renderLanes2, 9900 null 9901 ), nextPrimaryChildren.flags |= 2), nextPrimaryChildren.return = workInProgress2, JSCompiler_object_inline_stack_2725.return = workInProgress2, JSCompiler_object_inline_stack_2725.sibling = nextPrimaryChildren, workInProgress2.child = JSCompiler_object_inline_stack_2725, bailoutOffscreenComponent(null, JSCompiler_object_inline_stack_2725), JSCompiler_object_inline_stack_2725 = workInProgress2.child, nextPrimaryChildren = current2.child.memoizedState, null === nextPrimaryChildren ? nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes2) : (mode2 = nextPrimaryChildren.cachePool, null !== mode2 ? (componentStack = CacheContext._currentValue, mode2 = mode2.parent !== componentStack ? { parent: componentStack, pool: componentStack } : mode2) : mode2 = getSuspendedCache(), nextPrimaryChildren = { 9902 baseLanes: nextPrimaryChildren.baseLanes | renderLanes2, 9903 cachePool: mode2 9904 }), JSCompiler_object_inline_stack_2725.memoizedState = nextPrimaryChildren, JSCompiler_object_inline_stack_2725.childLanes = getRemainingWorkInPrimaryTree( 9905 current2, 9906 JSCompiler_object_inline_digest_2724, 9907 renderLanes2 9908 ), workInProgress2.memoizedState = SUSPENDED_MARKER, bailoutOffscreenComponent( 9909 current2.child, 9910 JSCompiler_object_inline_stack_2725 9911 ); 9912 null !== prevState && (renderLanes2 & 62914560) === renderLanes2 && 0 !== (renderLanes2 & current2.lanes) && markRenderDerivedCause(workInProgress2); 9913 pushPrimaryTreeSuspenseHandler(workInProgress2); 9914 renderLanes2 = current2.child; 9915 current2 = renderLanes2.sibling; 9916 renderLanes2 = createWorkInProgress(renderLanes2, { 9917 mode: "visible", 9918 children: JSCompiler_object_inline_stack_2725.children 9919 }); 9920 renderLanes2.return = workInProgress2; 9921 renderLanes2.sibling = null; 9922 null !== current2 && (JSCompiler_object_inline_digest_2724 = workInProgress2.deletions, null === JSCompiler_object_inline_digest_2724 ? (workInProgress2.deletions = [current2], workInProgress2.flags |= 16) : JSCompiler_object_inline_digest_2724.push(current2)); 9923 workInProgress2.child = renderLanes2; 9924 workInProgress2.memoizedState = null; 9925 return renderLanes2; 9926 } 9927 function mountSuspensePrimaryChildren(workInProgress2, primaryChildren) { 9928 primaryChildren = mountWorkInProgressOffscreenFiber( 9929 { mode: "visible", children: primaryChildren }, 9930 workInProgress2.mode 9931 ); 9932 primaryChildren.return = workInProgress2; 9933 return workInProgress2.child = primaryChildren; 9934 } 9935 function mountWorkInProgressOffscreenFiber(offscreenProps, mode2) { 9936 offscreenProps = createFiber(22, offscreenProps, null, mode2); 9937 offscreenProps.lanes = 0; 9938 return offscreenProps; 9939 } 9940 function retrySuspenseComponentWithoutHydrating(current2, workInProgress2, renderLanes2) { 9941 reconcileChildFibers(workInProgress2, current2.child, null, renderLanes2); 9942 current2 = mountSuspensePrimaryChildren( 9943 workInProgress2, 9944 workInProgress2.pendingProps.children 9945 ); 9946 current2.flags |= 2; 9947 workInProgress2.memoizedState = null; 9948 return current2; 9949 } 9950 function scheduleSuspenseWorkOnFiber(fiber, renderLanes2, propagationRoot) { 9951 fiber.lanes |= renderLanes2; 9952 var alternate = fiber.alternate; 9953 null !== alternate && (alternate.lanes |= renderLanes2); 9954 scheduleContextWorkOnParentPath( 9955 fiber.return, 9956 renderLanes2, 9957 propagationRoot 9958 ); 9959 } 9960 function initSuspenseListRenderState(workInProgress2, isBackwards, tail, lastContentRow, tailMode, treeForkCount2) { 9961 var renderState = workInProgress2.memoizedState; 9962 null === renderState ? workInProgress2.memoizedState = { 9963 isBackwards, 9964 rendering: null, 9965 renderingStartTime: 0, 9966 last: lastContentRow, 9967 tail, 9968 tailMode, 9969 treeForkCount: treeForkCount2 9970 } : (renderState.isBackwards = isBackwards, renderState.rendering = null, renderState.renderingStartTime = 0, renderState.last = lastContentRow, renderState.tail = tail, renderState.tailMode = tailMode, renderState.treeForkCount = treeForkCount2); 9971 } 9972 function updateSuspenseListComponent(current2, workInProgress2, renderLanes2) { 9973 var nextProps = workInProgress2.pendingProps, revealOrder = nextProps.revealOrder, tailMode = nextProps.tail, newChildren = nextProps.children, suspenseContext = suspenseStackCursor.current; 9974 (nextProps = 0 !== (suspenseContext & ForceSuspenseFallback)) ? (suspenseContext = suspenseContext & SubtreeSuspenseContextMask | ForceSuspenseFallback, workInProgress2.flags |= 128) : suspenseContext &= SubtreeSuspenseContextMask; 9975 push(suspenseStackCursor, suspenseContext, workInProgress2); 9976 suspenseContext = null == revealOrder ? "null" : revealOrder; 9977 if ("forwards" !== revealOrder && "unstable_legacy-backwards" !== revealOrder && "together" !== revealOrder && "independent" !== revealOrder && !didWarnAboutRevealOrder[suspenseContext]) 9978 if (didWarnAboutRevealOrder[suspenseContext] = true, null == revealOrder) 9979 console.error( 9980 'The default for the <SuspenseList revealOrder="..."> prop is changing. To be future compatible you must explictly specify either "independent" (the current default), "together", "forwards" or "legacy_unstable-backwards".' 9981 ); 9982 else if ("backwards" === revealOrder) 9983 console.error( 9984 'The rendering order of <SuspenseList revealOrder="backwards"> is changing. To be future compatible you must specify revealOrder="legacy_unstable-backwards" instead.' 9985 ); 9986 else if ("string" === typeof revealOrder) 9987 switch (revealOrder.toLowerCase()) { 9988 case "together": 9989 case "forwards": 9990 case "backwards": 9991 case "independent": 9992 console.error( 9993 '"%s" is not a valid value for revealOrder on <SuspenseList />. Use lowercase "%s" instead.', 9994 revealOrder, 9995 revealOrder.toLowerCase() 9996 ); 9997 break; 9998 case "forward": 9999 case "backward": 10000 console.error( 10001 '"%s" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use "%ss" instead.', 10002 revealOrder, 10003 revealOrder.toLowerCase() 10004 ); 10005 break; 10006 default: 10007 console.error( 10008 '"%s" is not a supported revealOrder on <SuspenseList />. Did you mean "independent", "together", "forwards" or "backwards"?', 10009 revealOrder 10010 ); 10011 } 10012 else 10013 console.error( 10014 '%s is not a supported value for revealOrder on <SuspenseList />. Did you mean "independent", "together", "forwards" or "backwards"?', 10015 revealOrder 10016 ); 10017 suspenseContext = null == tailMode ? "null" : tailMode; 10018 if (!didWarnAboutTailOptions[suspenseContext]) 10019 if (null == tailMode) { 10020 if ("forwards" === revealOrder || "backwards" === revealOrder || "unstable_legacy-backwards" === revealOrder) 10021 didWarnAboutTailOptions[suspenseContext] = true, console.error( 10022 'The default for the <SuspenseList tail="..."> prop is changing. To be future compatible you must explictly specify either "visible" (the current default), "collapsed" or "hidden".' 10023 ); 10024 } else 10025 "visible" !== tailMode && "collapsed" !== tailMode && "hidden" !== tailMode ? (didWarnAboutTailOptions[suspenseContext] = true, console.error( 10026 '"%s" is not a supported value for tail on <SuspenseList />. Did you mean "visible", "collapsed" or "hidden"?', 10027 tailMode 10028 )) : "forwards" !== revealOrder && "backwards" !== revealOrder && "unstable_legacy-backwards" !== revealOrder && (didWarnAboutTailOptions[suspenseContext] = true, console.error( 10029 '<SuspenseList tail="%s" /> is only valid if revealOrder is "forwards" or "backwards". Did you mean to specify revealOrder="forwards"?', 10030 tailMode 10031 )); 10032 a: if (("forwards" === revealOrder || "backwards" === revealOrder || "unstable_legacy-backwards" === revealOrder) && void 0 !== newChildren && null !== newChildren && false !== newChildren) 10033 if (isArrayImpl(newChildren)) 10034 for (suspenseContext = 0; suspenseContext < newChildren.length; suspenseContext++) { 10035 if (!validateSuspenseListNestedChild( 10036 newChildren[suspenseContext], 10037 suspenseContext 10038 )) 10039 break a; 10040 } 10041 else if (suspenseContext = getIteratorFn(newChildren), "function" === typeof suspenseContext) { 10042 if (suspenseContext = suspenseContext.call(newChildren)) 10043 for (var step = suspenseContext.next(), _i3 = 0; !step.done; step = suspenseContext.next()) { 10044 if (!validateSuspenseListNestedChild(step.value, _i3)) break a; 10045 _i3++; 10046 } 10047 } else 10048 console.error( 10049 'A single row was passed to a <SuspenseList revealOrder="%s" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?', 10050 revealOrder 10051 ); 10052 reconcileChildren(current2, workInProgress2, newChildren, renderLanes2); 10053 isHydrating ? (warnIfNotHydrating(), newChildren = treeForkCount) : newChildren = 0; 10054 if (!nextProps && null !== current2 && 0 !== (current2.flags & 128)) 10055 a: for (current2 = workInProgress2.child; null !== current2; ) { 10056 if (13 === current2.tag) 10057 null !== current2.memoizedState && scheduleSuspenseWorkOnFiber(current2, renderLanes2, workInProgress2); 10058 else if (19 === current2.tag) 10059 scheduleSuspenseWorkOnFiber(current2, renderLanes2, workInProgress2); 10060 else if (null !== current2.child) { 10061 current2.child.return = current2; 10062 current2 = current2.child; 10063 continue; 10064 } 10065 if (current2 === workInProgress2) break a; 10066 for (; null === current2.sibling; ) { 10067 if (null === current2.return || current2.return === workInProgress2) 10068 break a; 10069 current2 = current2.return; 10070 } 10071 current2.sibling.return = current2.return; 10072 current2 = current2.sibling; 10073 } 10074 switch (revealOrder) { 10075 case "forwards": 10076 renderLanes2 = workInProgress2.child; 10077 for (revealOrder = null; null !== renderLanes2; ) 10078 current2 = renderLanes2.alternate, null !== current2 && null === findFirstSuspended(current2) && (revealOrder = renderLanes2), renderLanes2 = renderLanes2.sibling; 10079 renderLanes2 = revealOrder; 10080 null === renderLanes2 ? (revealOrder = workInProgress2.child, workInProgress2.child = null) : (revealOrder = renderLanes2.sibling, renderLanes2.sibling = null); 10081 initSuspenseListRenderState( 10082 workInProgress2, 10083 false, 10084 revealOrder, 10085 renderLanes2, 10086 tailMode, 10087 newChildren 10088 ); 10089 break; 10090 case "backwards": 10091 case "unstable_legacy-backwards": 10092 renderLanes2 = null; 10093 revealOrder = workInProgress2.child; 10094 for (workInProgress2.child = null; null !== revealOrder; ) { 10095 current2 = revealOrder.alternate; 10096 if (null !== current2 && null === findFirstSuspended(current2)) { 10097 workInProgress2.child = revealOrder; 10098 break; 10099 } 10100 current2 = revealOrder.sibling; 10101 revealOrder.sibling = renderLanes2; 10102 renderLanes2 = revealOrder; 10103 revealOrder = current2; 10104 } 10105 initSuspenseListRenderState( 10106 workInProgress2, 10107 true, 10108 renderLanes2, 10109 null, 10110 tailMode, 10111 newChildren 10112 ); 10113 break; 10114 case "together": 10115 initSuspenseListRenderState( 10116 workInProgress2, 10117 false, 10118 null, 10119 null, 10120 void 0, 10121 newChildren 10122 ); 10123 break; 10124 default: 10125 workInProgress2.memoizedState = null; 10126 } 10127 return workInProgress2.child; 10128 } 10129 function bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2) { 10130 null !== current2 && (workInProgress2.dependencies = current2.dependencies); 10131 profilerStartTime = -1; 10132 workInProgressRootSkippedLanes |= workInProgress2.lanes; 10133 if (0 === (renderLanes2 & workInProgress2.childLanes)) 10134 if (null !== current2) { 10135 if (propagateParentContextChanges( 10136 current2, 10137 workInProgress2, 10138 renderLanes2, 10139 false 10140 ), 0 === (renderLanes2 & workInProgress2.childLanes)) 10141 return null; 10142 } else return null; 10143 if (null !== current2 && workInProgress2.child !== current2.child) 10144 throw Error("Resuming work not yet implemented."); 10145 if (null !== workInProgress2.child) { 10146 current2 = workInProgress2.child; 10147 renderLanes2 = createWorkInProgress(current2, current2.pendingProps); 10148 workInProgress2.child = renderLanes2; 10149 for (renderLanes2.return = workInProgress2; null !== current2.sibling; ) 10150 current2 = current2.sibling, renderLanes2 = renderLanes2.sibling = createWorkInProgress(current2, current2.pendingProps), renderLanes2.return = workInProgress2; 10151 renderLanes2.sibling = null; 10152 } 10153 return workInProgress2.child; 10154 } 10155 function checkScheduledUpdateOrContext(current2, renderLanes2) { 10156 if (0 !== (current2.lanes & renderLanes2)) return true; 10157 current2 = current2.dependencies; 10158 return null !== current2 && checkIfContextChanged(current2) ? true : false; 10159 } 10160 function attemptEarlyBailoutIfNoScheduledUpdate(current2, workInProgress2, renderLanes2) { 10161 switch (workInProgress2.tag) { 10162 case 3: 10163 pushHostContainer( 10164 workInProgress2, 10165 workInProgress2.stateNode.containerInfo 10166 ); 10167 pushProvider( 10168 workInProgress2, 10169 CacheContext, 10170 current2.memoizedState.cache 10171 ); 10172 resetHydrationState(); 10173 break; 10174 case 27: 10175 case 5: 10176 pushHostContext(workInProgress2); 10177 break; 10178 case 4: 10179 pushHostContainer( 10180 workInProgress2, 10181 workInProgress2.stateNode.containerInfo 10182 ); 10183 break; 10184 case 10: 10185 pushProvider( 10186 workInProgress2, 10187 workInProgress2.type, 10188 workInProgress2.memoizedProps.value 10189 ); 10190 break; 10191 case 12: 10192 0 !== (renderLanes2 & workInProgress2.childLanes) && (workInProgress2.flags |= 4); 10193 workInProgress2.flags |= 2048; 10194 var stateNode = workInProgress2.stateNode; 10195 stateNode.effectDuration = -0; 10196 stateNode.passiveEffectDuration = -0; 10197 break; 10198 case 31: 10199 if (null !== workInProgress2.memoizedState) 10200 return workInProgress2.flags |= 128, pushDehydratedActivitySuspenseHandler(workInProgress2), null; 10201 break; 10202 case 13: 10203 stateNode = workInProgress2.memoizedState; 10204 if (null !== stateNode) { 10205 if (null !== stateNode.dehydrated) 10206 return pushPrimaryTreeSuspenseHandler(workInProgress2), workInProgress2.flags |= 128, null; 10207 if (0 !== (renderLanes2 & workInProgress2.child.childLanes)) 10208 return updateSuspenseComponent( 10209 current2, 10210 workInProgress2, 10211 renderLanes2 10212 ); 10213 pushPrimaryTreeSuspenseHandler(workInProgress2); 10214 current2 = bailoutOnAlreadyFinishedWork( 10215 current2, 10216 workInProgress2, 10217 renderLanes2 10218 ); 10219 return null !== current2 ? current2.sibling : null; 10220 } 10221 pushPrimaryTreeSuspenseHandler(workInProgress2); 10222 break; 10223 case 19: 10224 var didSuspendBefore = 0 !== (current2.flags & 128); 10225 stateNode = 0 !== (renderLanes2 & workInProgress2.childLanes); 10226 stateNode || (propagateParentContextChanges( 10227 current2, 10228 workInProgress2, 10229 renderLanes2, 10230 false 10231 ), stateNode = 0 !== (renderLanes2 & workInProgress2.childLanes)); 10232 if (didSuspendBefore) { 10233 if (stateNode) 10234 return updateSuspenseListComponent( 10235 current2, 10236 workInProgress2, 10237 renderLanes2 10238 ); 10239 workInProgress2.flags |= 128; 10240 } 10241 didSuspendBefore = workInProgress2.memoizedState; 10242 null !== didSuspendBefore && (didSuspendBefore.rendering = null, didSuspendBefore.tail = null, didSuspendBefore.lastEffect = null); 10243 push( 10244 suspenseStackCursor, 10245 suspenseStackCursor.current, 10246 workInProgress2 10247 ); 10248 if (stateNode) break; 10249 else return null; 10250 case 22: 10251 return workInProgress2.lanes = 0, updateOffscreenComponent( 10252 current2, 10253 workInProgress2, 10254 renderLanes2, 10255 workInProgress2.pendingProps 10256 ); 10257 case 24: 10258 pushProvider( 10259 workInProgress2, 10260 CacheContext, 10261 current2.memoizedState.cache 10262 ); 10263 } 10264 return bailoutOnAlreadyFinishedWork(current2, workInProgress2, renderLanes2); 10265 } 10266 function beginWork(current2, workInProgress2, renderLanes2) { 10267 if (workInProgress2._debugNeedsRemount && null !== current2) { 10268 renderLanes2 = createFiberFromTypeAndProps( 10269 workInProgress2.type, 10270 workInProgress2.key, 10271 workInProgress2.pendingProps, 10272 workInProgress2._debugOwner || null, 10273 workInProgress2.mode, 10274 workInProgress2.lanes 10275 ); 10276 renderLanes2._debugStack = workInProgress2._debugStack; 10277 renderLanes2._debugTask = workInProgress2._debugTask; 10278 var returnFiber = workInProgress2.return; 10279 if (null === returnFiber) throw Error("Cannot swap the root fiber."); 10280 current2.alternate = null; 10281 workInProgress2.alternate = null; 10282 renderLanes2.index = workInProgress2.index; 10283 renderLanes2.sibling = workInProgress2.sibling; 10284 renderLanes2.return = workInProgress2.return; 10285 renderLanes2.ref = workInProgress2.ref; 10286 renderLanes2._debugInfo = workInProgress2._debugInfo; 10287 if (workInProgress2 === returnFiber.child) 10288 returnFiber.child = renderLanes2; 10289 else { 10290 var prevSibling = returnFiber.child; 10291 if (null === prevSibling) 10292 throw Error("Expected parent to have a child."); 10293 for (; prevSibling.sibling !== workInProgress2; ) 10294 if (prevSibling = prevSibling.sibling, null === prevSibling) 10295 throw Error("Expected to find the previous sibling."); 10296 prevSibling.sibling = renderLanes2; 10297 } 10298 workInProgress2 = returnFiber.deletions; 10299 null === workInProgress2 ? (returnFiber.deletions = [current2], returnFiber.flags |= 16) : workInProgress2.push(current2); 10300 renderLanes2.flags |= 2; 10301 return renderLanes2; 10302 } 10303 if (null !== current2) 10304 if (current2.memoizedProps !== workInProgress2.pendingProps || workInProgress2.type !== current2.type) 10305 didReceiveUpdate = true; 10306 else { 10307 if (!checkScheduledUpdateOrContext(current2, renderLanes2) && 0 === (workInProgress2.flags & 128)) 10308 return didReceiveUpdate = false, attemptEarlyBailoutIfNoScheduledUpdate( 10309 current2, 10310 workInProgress2, 10311 renderLanes2 10312 ); 10313 didReceiveUpdate = 0 !== (current2.flags & 131072) ? true : false; 10314 } 10315 else { 10316 didReceiveUpdate = false; 10317 if (returnFiber = isHydrating) 10318 warnIfNotHydrating(), returnFiber = 0 !== (workInProgress2.flags & 1048576); 10319 returnFiber && (returnFiber = workInProgress2.index, warnIfNotHydrating(), pushTreeId(workInProgress2, treeForkCount, returnFiber)); 10320 } 10321 workInProgress2.lanes = 0; 10322 switch (workInProgress2.tag) { 10323 case 16: 10324 a: if (returnFiber = workInProgress2.pendingProps, current2 = resolveLazy(workInProgress2.elementType), workInProgress2.type = current2, "function" === typeof current2) 10325 shouldConstruct(current2) ? (returnFiber = resolveClassComponentProps( 10326 current2, 10327 returnFiber 10328 ), workInProgress2.tag = 1, workInProgress2.type = current2 = resolveFunctionForHotReloading(current2), workInProgress2 = updateClassComponent( 10329 null, 10330 workInProgress2, 10331 current2, 10332 returnFiber, 10333 renderLanes2 10334 )) : (workInProgress2.tag = 0, validateFunctionComponentInDev(workInProgress2, current2), workInProgress2.type = current2 = resolveFunctionForHotReloading(current2), workInProgress2 = updateFunctionComponent( 10335 null, 10336 workInProgress2, 10337 current2, 10338 returnFiber, 10339 renderLanes2 10340 )); 10341 else { 10342 if (void 0 !== current2 && null !== current2) { 10343 if (prevSibling = current2.$$typeof, prevSibling === REACT_FORWARD_REF_TYPE) { 10344 workInProgress2.tag = 11; 10345 workInProgress2.type = current2 = resolveForwardRefForHotReloading(current2); 10346 workInProgress2 = updateForwardRef( 10347 null, 10348 workInProgress2, 10349 current2, 10350 returnFiber, 10351 renderLanes2 10352 ); 10353 break a; 10354 } else if (prevSibling === REACT_MEMO_TYPE) { 10355 workInProgress2.tag = 14; 10356 workInProgress2 = updateMemoComponent( 10357 null, 10358 workInProgress2, 10359 current2, 10360 returnFiber, 10361 renderLanes2 10362 ); 10363 break a; 10364 } 10365 } 10366 workInProgress2 = ""; 10367 null !== current2 && "object" === typeof current2 && current2.$$typeof === REACT_LAZY_TYPE && (workInProgress2 = " Did you wrap a component in React.lazy() more than once?"); 10368 renderLanes2 = getComponentNameFromType(current2) || current2; 10369 throw Error( 10370 "Element type is invalid. Received a promise that resolves to: " + renderLanes2 + ". Lazy element type must resolve to a class or function." + workInProgress2 10371 ); 10372 } 10373 return workInProgress2; 10374 case 0: 10375 return updateFunctionComponent( 10376 current2, 10377 workInProgress2, 10378 workInProgress2.type, 10379 workInProgress2.pendingProps, 10380 renderLanes2 10381 ); 10382 case 1: 10383 return returnFiber = workInProgress2.type, prevSibling = resolveClassComponentProps( 10384 returnFiber, 10385 workInProgress2.pendingProps 10386 ), updateClassComponent( 10387 current2, 10388 workInProgress2, 10389 returnFiber, 10390 prevSibling, 10391 renderLanes2 10392 ); 10393 case 3: 10394 a: { 10395 pushHostContainer( 10396 workInProgress2, 10397 workInProgress2.stateNode.containerInfo 10398 ); 10399 if (null === current2) 10400 throw Error( 10401 "Should have a current fiber. This is a bug in React." 10402 ); 10403 returnFiber = workInProgress2.pendingProps; 10404 var prevState = workInProgress2.memoizedState; 10405 prevSibling = prevState.element; 10406 cloneUpdateQueue(current2, workInProgress2); 10407 processUpdateQueue(workInProgress2, returnFiber, null, renderLanes2); 10408 var nextState = workInProgress2.memoizedState; 10409 returnFiber = nextState.cache; 10410 pushProvider(workInProgress2, CacheContext, returnFiber); 10411 returnFiber !== prevState.cache && propagateContextChanges( 10412 workInProgress2, 10413 [CacheContext], 10414 renderLanes2, 10415 true 10416 ); 10417 suspendIfUpdateReadFromEntangledAsyncAction(); 10418 returnFiber = nextState.element; 10419 if (prevState.isDehydrated) 10420 if (prevState = { 10421 element: returnFiber, 10422 isDehydrated: false, 10423 cache: nextState.cache 10424 }, workInProgress2.updateQueue.baseState = prevState, workInProgress2.memoizedState = prevState, workInProgress2.flags & 256) { 10425 workInProgress2 = mountHostRootWithoutHydrating( 10426 current2, 10427 workInProgress2, 10428 returnFiber, 10429 renderLanes2 10430 ); 10431 break a; 10432 } else if (returnFiber !== prevSibling) { 10433 prevSibling = createCapturedValueAtFiber( 10434 Error( 10435 "This root received an early update, before anything was able hydrate. Switched the entire root to client rendering." 10436 ), 10437 workInProgress2 10438 ); 10439 queueHydrationError(prevSibling); 10440 workInProgress2 = mountHostRootWithoutHydrating( 10441 current2, 10442 workInProgress2, 10443 returnFiber, 10444 renderLanes2 10445 ); 10446 break a; 10447 } else { 10448 current2 = workInProgress2.stateNode.containerInfo; 10449 switch (current2.nodeType) { 10450 case 9: 10451 current2 = current2.body; 10452 break; 10453 default: 10454 current2 = "HTML" === current2.nodeName ? current2.ownerDocument.body : current2; 10455 } 10456 nextHydratableInstance = getNextHydratable(current2.firstChild); 10457 hydrationParentFiber = workInProgress2; 10458 isHydrating = true; 10459 hydrationErrors = null; 10460 didSuspendOrErrorDEV = false; 10461 hydrationDiffRootDEV = null; 10462 rootOrSingletonContext = true; 10463 renderLanes2 = mountChildFibers( 10464 workInProgress2, 10465 null, 10466 returnFiber, 10467 renderLanes2 10468 ); 10469 for (workInProgress2.child = renderLanes2; renderLanes2; ) 10470 renderLanes2.flags = renderLanes2.flags & -3 | 4096, renderLanes2 = renderLanes2.sibling; 10471 } 10472 else { 10473 resetHydrationState(); 10474 if (returnFiber === prevSibling) { 10475 workInProgress2 = bailoutOnAlreadyFinishedWork( 10476 current2, 10477 workInProgress2, 10478 renderLanes2 10479 ); 10480 break a; 10481 } 10482 reconcileChildren( 10483 current2, 10484 workInProgress2, 10485 returnFiber, 10486 renderLanes2 10487 ); 10488 } 10489 workInProgress2 = workInProgress2.child; 10490 } 10491 return workInProgress2; 10492 case 26: 10493 return markRef(current2, workInProgress2), null === current2 ? (renderLanes2 = getResource( 10494 workInProgress2.type, 10495 null, 10496 workInProgress2.pendingProps, 10497 null 10498 )) ? workInProgress2.memoizedState = renderLanes2 : isHydrating || (renderLanes2 = workInProgress2.type, current2 = workInProgress2.pendingProps, returnFiber = requiredContext( 10499 rootInstanceStackCursor.current 10500 ), returnFiber = getOwnerDocumentFromRootContainer( 10501 returnFiber 10502 ).createElement(renderLanes2), returnFiber[internalInstanceKey] = workInProgress2, returnFiber[internalPropsKey] = current2, setInitialProperties(returnFiber, renderLanes2, current2), markNodeAsHoistable(returnFiber), workInProgress2.stateNode = returnFiber) : workInProgress2.memoizedState = getResource( 10503 workInProgress2.type, 10504 current2.memoizedProps, 10505 workInProgress2.pendingProps, 10506 current2.memoizedState 10507 ), null; 10508 case 27: 10509 return pushHostContext(workInProgress2), null === current2 && isHydrating && (returnFiber = requiredContext(rootInstanceStackCursor.current), prevSibling = getHostContext(), returnFiber = workInProgress2.stateNode = resolveSingletonInstance( 10510 workInProgress2.type, 10511 workInProgress2.pendingProps, 10512 returnFiber, 10513 prevSibling, 10514 false 10515 ), didSuspendOrErrorDEV || (prevSibling = diffHydratedProperties( 10516 returnFiber, 10517 workInProgress2.type, 10518 workInProgress2.pendingProps, 10519 prevSibling 10520 ), null !== prevSibling && (buildHydrationDiffNode(workInProgress2, 0).serverProps = prevSibling)), hydrationParentFiber = workInProgress2, rootOrSingletonContext = true, prevSibling = nextHydratableInstance, isSingletonScope(workInProgress2.type) ? (previousHydratableOnEnteringScopedSingleton = prevSibling, nextHydratableInstance = getNextHydratable( 10521 returnFiber.firstChild 10522 )) : nextHydratableInstance = prevSibling), reconcileChildren( 10523 current2, 10524 workInProgress2, 10525 workInProgress2.pendingProps.children, 10526 renderLanes2 10527 ), markRef(current2, workInProgress2), null === current2 && (workInProgress2.flags |= 4194304), workInProgress2.child; 10528 case 5: 10529 return null === current2 && isHydrating && (prevState = getHostContext(), returnFiber = validateDOMNesting( 10530 workInProgress2.type, 10531 prevState.ancestorInfo 10532 ), prevSibling = nextHydratableInstance, (nextState = !prevSibling) || (nextState = canHydrateInstance( 10533 prevSibling, 10534 workInProgress2.type, 10535 workInProgress2.pendingProps, 10536 rootOrSingletonContext 10537 ), null !== nextState ? (workInProgress2.stateNode = nextState, didSuspendOrErrorDEV || (prevState = diffHydratedProperties( 10538 nextState, 10539 workInProgress2.type, 10540 workInProgress2.pendingProps, 10541 prevState 10542 ), null !== prevState && (buildHydrationDiffNode(workInProgress2, 0).serverProps = prevState)), hydrationParentFiber = workInProgress2, nextHydratableInstance = getNextHydratable( 10543 nextState.firstChild 10544 ), rootOrSingletonContext = false, prevState = true) : prevState = false, nextState = !prevState), nextState && (returnFiber && warnNonHydratedInstance(workInProgress2, prevSibling), throwOnHydrationMismatch(workInProgress2))), pushHostContext(workInProgress2), prevSibling = workInProgress2.type, prevState = workInProgress2.pendingProps, nextState = null !== current2 ? current2.memoizedProps : null, returnFiber = prevState.children, shouldSetTextContent(prevSibling, prevState) ? returnFiber = null : null !== nextState && shouldSetTextContent(prevSibling, nextState) && (workInProgress2.flags |= 32), null !== workInProgress2.memoizedState && (prevSibling = renderWithHooks( 10545 current2, 10546 workInProgress2, 10547 TransitionAwareHostComponent, 10548 null, 10549 null, 10550 renderLanes2 10551 ), HostTransitionContext._currentValue = prevSibling), markRef(current2, workInProgress2), reconcileChildren( 10552 current2, 10553 workInProgress2, 10554 returnFiber, 10555 renderLanes2 10556 ), workInProgress2.child; 10557 case 6: 10558 return null === current2 && isHydrating && (renderLanes2 = workInProgress2.pendingProps, current2 = getHostContext(), returnFiber = current2.ancestorInfo.current, renderLanes2 = null != returnFiber ? validateTextNesting( 10559 renderLanes2, 10560 returnFiber.tag, 10561 current2.ancestorInfo.implicitRootScope 10562 ) : true, current2 = nextHydratableInstance, (returnFiber = !current2) || (returnFiber = canHydrateTextInstance( 10563 current2, 10564 workInProgress2.pendingProps, 10565 rootOrSingletonContext 10566 ), null !== returnFiber ? (workInProgress2.stateNode = returnFiber, hydrationParentFiber = workInProgress2, nextHydratableInstance = null, returnFiber = true) : returnFiber = false, returnFiber = !returnFiber), returnFiber && (renderLanes2 && warnNonHydratedInstance(workInProgress2, current2), throwOnHydrationMismatch(workInProgress2))), null; 10567 case 13: 10568 return updateSuspenseComponent(current2, workInProgress2, renderLanes2); 10569 case 4: 10570 return pushHostContainer( 10571 workInProgress2, 10572 workInProgress2.stateNode.containerInfo 10573 ), returnFiber = workInProgress2.pendingProps, null === current2 ? workInProgress2.child = reconcileChildFibers( 10574 workInProgress2, 10575 null, 10576 returnFiber, 10577 renderLanes2 10578 ) : reconcileChildren( 10579 current2, 10580 workInProgress2, 10581 returnFiber, 10582 renderLanes2 10583 ), workInProgress2.child; 10584 case 11: 10585 return updateForwardRef( 10586 current2, 10587 workInProgress2, 10588 workInProgress2.type, 10589 workInProgress2.pendingProps, 10590 renderLanes2 10591 ); 10592 case 7: 10593 return reconcileChildren( 10594 current2, 10595 workInProgress2, 10596 workInProgress2.pendingProps, 10597 renderLanes2 10598 ), workInProgress2.child; 10599 case 8: 10600 return reconcileChildren( 10601 current2, 10602 workInProgress2, 10603 workInProgress2.pendingProps.children, 10604 renderLanes2 10605 ), workInProgress2.child; 10606 case 12: 10607 return workInProgress2.flags |= 4, workInProgress2.flags |= 2048, returnFiber = workInProgress2.stateNode, returnFiber.effectDuration = -0, returnFiber.passiveEffectDuration = -0, reconcileChildren( 10608 current2, 10609 workInProgress2, 10610 workInProgress2.pendingProps.children, 10611 renderLanes2 10612 ), workInProgress2.child; 10613 case 10: 10614 return returnFiber = workInProgress2.type, prevSibling = workInProgress2.pendingProps, prevState = prevSibling.value, "value" in prevSibling || hasWarnedAboutUsingNoValuePropOnContextProvider || (hasWarnedAboutUsingNoValuePropOnContextProvider = true, console.error( 10615 "The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?" 10616 )), pushProvider(workInProgress2, returnFiber, prevState), reconcileChildren( 10617 current2, 10618 workInProgress2, 10619 prevSibling.children, 10620 renderLanes2 10621 ), workInProgress2.child; 10622 case 9: 10623 return prevSibling = workInProgress2.type._context, returnFiber = workInProgress2.pendingProps.children, "function" !== typeof returnFiber && console.error( 10624 "A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it." 10625 ), prepareToReadContext(workInProgress2), prevSibling = readContext(prevSibling), returnFiber = callComponentInDEV( 10626 returnFiber, 10627 prevSibling, 10628 void 0 10629 ), workInProgress2.flags |= 1, reconcileChildren( 10630 current2, 10631 workInProgress2, 10632 returnFiber, 10633 renderLanes2 10634 ), workInProgress2.child; 10635 case 14: 10636 return updateMemoComponent( 10637 current2, 10638 workInProgress2, 10639 workInProgress2.type, 10640 workInProgress2.pendingProps, 10641 renderLanes2 10642 ); 10643 case 15: 10644 return updateSimpleMemoComponent( 10645 current2, 10646 workInProgress2, 10647 workInProgress2.type, 10648 workInProgress2.pendingProps, 10649 renderLanes2 10650 ); 10651 case 19: 10652 return updateSuspenseListComponent( 10653 current2, 10654 workInProgress2, 10655 renderLanes2 10656 ); 10657 case 31: 10658 return updateActivityComponent(current2, workInProgress2, renderLanes2); 10659 case 22: 10660 return updateOffscreenComponent( 10661 current2, 10662 workInProgress2, 10663 renderLanes2, 10664 workInProgress2.pendingProps 10665 ); 10666 case 24: 10667 return prepareToReadContext(workInProgress2), returnFiber = readContext(CacheContext), null === current2 ? (prevSibling = peekCacheFromPool(), null === prevSibling && (prevSibling = workInProgressRoot, prevState = createCache(), prevSibling.pooledCache = prevState, retainCache(prevState), null !== prevState && (prevSibling.pooledCacheLanes |= renderLanes2), prevSibling = prevState), workInProgress2.memoizedState = { 10668 parent: returnFiber, 10669 cache: prevSibling 10670 }, initializeUpdateQueue(workInProgress2), pushProvider(workInProgress2, CacheContext, prevSibling)) : (0 !== (current2.lanes & renderLanes2) && (cloneUpdateQueue(current2, workInProgress2), processUpdateQueue(workInProgress2, null, null, renderLanes2), suspendIfUpdateReadFromEntangledAsyncAction()), prevSibling = current2.memoizedState, prevState = workInProgress2.memoizedState, prevSibling.parent !== returnFiber ? (prevSibling = { 10671 parent: returnFiber, 10672 cache: returnFiber 10673 }, workInProgress2.memoizedState = prevSibling, 0 === workInProgress2.lanes && (workInProgress2.memoizedState = workInProgress2.updateQueue.baseState = prevSibling), pushProvider(workInProgress2, CacheContext, returnFiber)) : (returnFiber = prevState.cache, pushProvider(workInProgress2, CacheContext, returnFiber), returnFiber !== prevSibling.cache && propagateContextChanges( 10674 workInProgress2, 10675 [CacheContext], 10676 renderLanes2, 10677 true 10678 ))), reconcileChildren( 10679 current2, 10680 workInProgress2, 10681 workInProgress2.pendingProps.children, 10682 renderLanes2 10683 ), workInProgress2.child; 10684 case 29: 10685 throw workInProgress2.pendingProps; 10686 } 10687 throw Error( 10688 "Unknown unit of work tag (" + workInProgress2.tag + "). This error is likely caused by a bug in React. Please file an issue." 10689 ); 10690 } 10691 function markUpdate(workInProgress2) { 10692 workInProgress2.flags |= 4; 10693 } 10694 function preloadInstanceAndSuspendIfNeeded(workInProgress2, type, oldProps, newProps, renderLanes2) { 10695 if (type = (workInProgress2.mode & SuspenseyImagesMode) !== NoMode) 10696 type = false; 10697 if (type) { 10698 if (workInProgress2.flags |= 16777216, (renderLanes2 & 335544128) === renderLanes2) 10699 if (workInProgress2.stateNode.complete) workInProgress2.flags |= 8192; 10700 else if (shouldRemainOnPreviousScreen()) workInProgress2.flags |= 8192; 10701 else 10702 throw suspendedThenable = noopSuspenseyCommitThenable, SuspenseyCommitException; 10703 } else workInProgress2.flags &= -16777217; 10704 } 10705 function preloadResourceAndSuspendIfNeeded(workInProgress2, resource) { 10706 if ("stylesheet" !== resource.type || (resource.state.loading & Inserted) !== NotLoaded) 10707 workInProgress2.flags &= -16777217; 10708 else if (workInProgress2.flags |= 16777216, !preloadResource(resource)) 10709 if (shouldRemainOnPreviousScreen()) workInProgress2.flags |= 8192; 10710 else 10711 throw suspendedThenable = noopSuspenseyCommitThenable, SuspenseyCommitException; 10712 } 10713 function scheduleRetryEffect(workInProgress2, retryQueue) { 10714 null !== retryQueue && (workInProgress2.flags |= 4); 10715 workInProgress2.flags & 16384 && (retryQueue = 22 !== workInProgress2.tag ? claimNextRetryLane() : 536870912, workInProgress2.lanes |= retryQueue, workInProgressSuspendedRetryLanes |= retryQueue); 10716 } 10717 function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) { 10718 if (!isHydrating) 10719 switch (renderState.tailMode) { 10720 case "hidden": 10721 hasRenderedATailFallback = renderState.tail; 10722 for (var lastTailNode = null; null !== hasRenderedATailFallback; ) 10723 null !== hasRenderedATailFallback.alternate && (lastTailNode = hasRenderedATailFallback), hasRenderedATailFallback = hasRenderedATailFallback.sibling; 10724 null === lastTailNode ? renderState.tail = null : lastTailNode.sibling = null; 10725 break; 10726 case "collapsed": 10727 lastTailNode = renderState.tail; 10728 for (var _lastTailNode = null; null !== lastTailNode; ) 10729 null !== lastTailNode.alternate && (_lastTailNode = lastTailNode), lastTailNode = lastTailNode.sibling; 10730 null === _lastTailNode ? hasRenderedATailFallback || null === renderState.tail ? renderState.tail = null : renderState.tail.sibling = null : _lastTailNode.sibling = null; 10731 } 10732 } 10733 function bubbleProperties(completedWork) { 10734 var didBailout = null !== completedWork.alternate && completedWork.alternate.child === completedWork.child, newChildLanes = 0, subtreeFlags = 0; 10735 if (didBailout) 10736 if ((completedWork.mode & ProfileMode) !== NoMode) { 10737 for (var _treeBaseDuration = completedWork.selfBaseDuration, _child2 = completedWork.child; null !== _child2; ) 10738 newChildLanes |= _child2.lanes | _child2.childLanes, subtreeFlags |= _child2.subtreeFlags & 65011712, subtreeFlags |= _child2.flags & 65011712, _treeBaseDuration += _child2.treeBaseDuration, _child2 = _child2.sibling; 10739 completedWork.treeBaseDuration = _treeBaseDuration; 10740 } else 10741 for (_treeBaseDuration = completedWork.child; null !== _treeBaseDuration; ) 10742 newChildLanes |= _treeBaseDuration.lanes | _treeBaseDuration.childLanes, subtreeFlags |= _treeBaseDuration.subtreeFlags & 65011712, subtreeFlags |= _treeBaseDuration.flags & 65011712, _treeBaseDuration.return = completedWork, _treeBaseDuration = _treeBaseDuration.sibling; 10743 else if ((completedWork.mode & ProfileMode) !== NoMode) { 10744 _treeBaseDuration = completedWork.actualDuration; 10745 _child2 = completedWork.selfBaseDuration; 10746 for (var child = completedWork.child; null !== child; ) 10747 newChildLanes |= child.lanes | child.childLanes, subtreeFlags |= child.subtreeFlags, subtreeFlags |= child.flags, _treeBaseDuration += child.actualDuration, _child2 += child.treeBaseDuration, child = child.sibling; 10748 completedWork.actualDuration = _treeBaseDuration; 10749 completedWork.treeBaseDuration = _child2; 10750 } else 10751 for (_treeBaseDuration = completedWork.child; null !== _treeBaseDuration; ) 10752 newChildLanes |= _treeBaseDuration.lanes | _treeBaseDuration.childLanes, subtreeFlags |= _treeBaseDuration.subtreeFlags, subtreeFlags |= _treeBaseDuration.flags, _treeBaseDuration.return = completedWork, _treeBaseDuration = _treeBaseDuration.sibling; 10753 completedWork.subtreeFlags |= subtreeFlags; 10754 completedWork.childLanes = newChildLanes; 10755 return didBailout; 10756 } 10757 function completeWork(current2, workInProgress2, renderLanes2) { 10758 var newProps = workInProgress2.pendingProps; 10759 popTreeContext(workInProgress2); 10760 switch (workInProgress2.tag) { 10761 case 16: 10762 case 15: 10763 case 0: 10764 case 11: 10765 case 7: 10766 case 8: 10767 case 12: 10768 case 9: 10769 case 14: 10770 return bubbleProperties(workInProgress2), null; 10771 case 1: 10772 return bubbleProperties(workInProgress2), null; 10773 case 3: 10774 renderLanes2 = workInProgress2.stateNode; 10775 newProps = null; 10776 null !== current2 && (newProps = current2.memoizedState.cache); 10777 workInProgress2.memoizedState.cache !== newProps && (workInProgress2.flags |= 2048); 10778 popProvider(CacheContext, workInProgress2); 10779 popHostContainer(workInProgress2); 10780 renderLanes2.pendingContext && (renderLanes2.context = renderLanes2.pendingContext, renderLanes2.pendingContext = null); 10781 if (null === current2 || null === current2.child) 10782 popHydrationState(workInProgress2) ? (emitPendingHydrationWarnings(), markUpdate(workInProgress2)) : null === current2 || current2.memoizedState.isDehydrated && 0 === (workInProgress2.flags & 256) || (workInProgress2.flags |= 1024, upgradeHydrationErrorsToRecoverable()); 10783 bubbleProperties(workInProgress2); 10784 return null; 10785 case 26: 10786 var type = workInProgress2.type, nextResource = workInProgress2.memoizedState; 10787 null === current2 ? (markUpdate(workInProgress2), null !== nextResource ? (bubbleProperties(workInProgress2), preloadResourceAndSuspendIfNeeded( 10788 workInProgress2, 10789 nextResource 10790 )) : (bubbleProperties(workInProgress2), preloadInstanceAndSuspendIfNeeded( 10791 workInProgress2, 10792 type, 10793 null, 10794 newProps, 10795 renderLanes2 10796 ))) : nextResource ? nextResource !== current2.memoizedState ? (markUpdate(workInProgress2), bubbleProperties(workInProgress2), preloadResourceAndSuspendIfNeeded( 10797 workInProgress2, 10798 nextResource 10799 )) : (bubbleProperties(workInProgress2), workInProgress2.flags &= -16777217) : (current2 = current2.memoizedProps, current2 !== newProps && markUpdate(workInProgress2), bubbleProperties(workInProgress2), preloadInstanceAndSuspendIfNeeded( 10800 workInProgress2, 10801 type, 10802 current2, 10803 newProps, 10804 renderLanes2 10805 )); 10806 return null; 10807 case 27: 10808 popHostContext(workInProgress2); 10809 renderLanes2 = requiredContext(rootInstanceStackCursor.current); 10810 type = workInProgress2.type; 10811 if (null !== current2 && null != workInProgress2.stateNode) 10812 current2.memoizedProps !== newProps && markUpdate(workInProgress2); 10813 else { 10814 if (!newProps) { 10815 if (null === workInProgress2.stateNode) 10816 throw Error( 10817 "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." 10818 ); 10819 bubbleProperties(workInProgress2); 10820 return null; 10821 } 10822 current2 = getHostContext(); 10823 popHydrationState(workInProgress2) ? prepareToHydrateHostInstance(workInProgress2, current2) : (current2 = resolveSingletonInstance( 10824 type, 10825 newProps, 10826 renderLanes2, 10827 current2, 10828 true 10829 ), workInProgress2.stateNode = current2, markUpdate(workInProgress2)); 10830 } 10831 bubbleProperties(workInProgress2); 10832 return null; 10833 case 5: 10834 popHostContext(workInProgress2); 10835 type = workInProgress2.type; 10836 if (null !== current2 && null != workInProgress2.stateNode) 10837 current2.memoizedProps !== newProps && markUpdate(workInProgress2); 10838 else { 10839 if (!newProps) { 10840 if (null === workInProgress2.stateNode) 10841 throw Error( 10842 "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." 10843 ); 10844 bubbleProperties(workInProgress2); 10845 return null; 10846 } 10847 var _currentHostContext = getHostContext(); 10848 if (popHydrationState(workInProgress2)) 10849 prepareToHydrateHostInstance(workInProgress2, _currentHostContext); 10850 else { 10851 nextResource = requiredContext(rootInstanceStackCursor.current); 10852 validateDOMNesting(type, _currentHostContext.ancestorInfo); 10853 _currentHostContext = _currentHostContext.context; 10854 nextResource = getOwnerDocumentFromRootContainer(nextResource); 10855 switch (_currentHostContext) { 10856 case HostContextNamespaceSvg: 10857 nextResource = nextResource.createElementNS( 10858 SVG_NAMESPACE, 10859 type 10860 ); 10861 break; 10862 case HostContextNamespaceMath: 10863 nextResource = nextResource.createElementNS( 10864 MATH_NAMESPACE, 10865 type 10866 ); 10867 break; 10868 default: 10869 switch (type) { 10870 case "svg": 10871 nextResource = nextResource.createElementNS( 10872 SVG_NAMESPACE, 10873 type 10874 ); 10875 break; 10876 case "math": 10877 nextResource = nextResource.createElementNS( 10878 MATH_NAMESPACE, 10879 type 10880 ); 10881 break; 10882 case "script": 10883 nextResource = nextResource.createElement("div"); 10884 nextResource.innerHTML = "<script><\/script>"; 10885 nextResource = nextResource.removeChild( 10886 nextResource.firstChild 10887 ); 10888 break; 10889 case "select": 10890 nextResource = "string" === typeof newProps.is ? nextResource.createElement("select", { 10891 is: newProps.is 10892 }) : nextResource.createElement("select"); 10893 newProps.multiple ? nextResource.multiple = true : newProps.size && (nextResource.size = newProps.size); 10894 break; 10895 default: 10896 nextResource = "string" === typeof newProps.is ? nextResource.createElement(type, { 10897 is: newProps.is 10898 }) : nextResource.createElement(type), -1 === type.indexOf("-") && (type !== type.toLowerCase() && console.error( 10899 "<%s /> is using incorrect casing. Use PascalCase for React components, or lowercase for HTML elements.", 10900 type 10901 ), "[object HTMLUnknownElement]" !== Object.prototype.toString.call(nextResource) || hasOwnProperty.call(warnedUnknownTags, type) || (warnedUnknownTags[type] = true, console.error( 10902 "The tag <%s> is unrecognized in this browser. If you meant to render a React component, start its name with an uppercase letter.", 10903 type 10904 ))); 10905 } 10906 } 10907 nextResource[internalInstanceKey] = workInProgress2; 10908 nextResource[internalPropsKey] = newProps; 10909 a: for (_currentHostContext = workInProgress2.child; null !== _currentHostContext; ) { 10910 if (5 === _currentHostContext.tag || 6 === _currentHostContext.tag) 10911 nextResource.appendChild(_currentHostContext.stateNode); 10912 else if (4 !== _currentHostContext.tag && 27 !== _currentHostContext.tag && null !== _currentHostContext.child) { 10913 _currentHostContext.child.return = _currentHostContext; 10914 _currentHostContext = _currentHostContext.child; 10915 continue; 10916 } 10917 if (_currentHostContext === workInProgress2) break a; 10918 for (; null === _currentHostContext.sibling; ) { 10919 if (null === _currentHostContext.return || _currentHostContext.return === workInProgress2) 10920 break a; 10921 _currentHostContext = _currentHostContext.return; 10922 } 10923 _currentHostContext.sibling.return = _currentHostContext.return; 10924 _currentHostContext = _currentHostContext.sibling; 10925 } 10926 workInProgress2.stateNode = nextResource; 10927 a: switch (setInitialProperties(nextResource, type, newProps), type) { 10928 case "button": 10929 case "input": 10930 case "select": 10931 case "textarea": 10932 newProps = !!newProps.autoFocus; 10933 break a; 10934 case "img": 10935 newProps = true; 10936 break a; 10937 default: 10938 newProps = false; 10939 } 10940 newProps && markUpdate(workInProgress2); 10941 } 10942 } 10943 bubbleProperties(workInProgress2); 10944 preloadInstanceAndSuspendIfNeeded( 10945 workInProgress2, 10946 workInProgress2.type, 10947 null === current2 ? null : current2.memoizedProps, 10948 workInProgress2.pendingProps, 10949 renderLanes2 10950 ); 10951 return null; 10952 case 6: 10953 if (current2 && null != workInProgress2.stateNode) 10954 current2.memoizedProps !== newProps && markUpdate(workInProgress2); 10955 else { 10956 if ("string" !== typeof newProps && null === workInProgress2.stateNode) 10957 throw Error( 10958 "We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue." 10959 ); 10960 current2 = requiredContext(rootInstanceStackCursor.current); 10961 renderLanes2 = getHostContext(); 10962 if (popHydrationState(workInProgress2)) { 10963 current2 = workInProgress2.stateNode; 10964 renderLanes2 = workInProgress2.memoizedProps; 10965 type = !didSuspendOrErrorDEV; 10966 newProps = null; 10967 nextResource = hydrationParentFiber; 10968 if (null !== nextResource) 10969 switch (nextResource.tag) { 10970 case 3: 10971 type && (type = diffHydratedTextForDevWarnings( 10972 current2, 10973 renderLanes2, 10974 newProps 10975 ), null !== type && (buildHydrationDiffNode(workInProgress2, 0).serverProps = type)); 10976 break; 10977 case 27: 10978 case 5: 10979 newProps = nextResource.memoizedProps, type && (type = diffHydratedTextForDevWarnings( 10980 current2, 10981 renderLanes2, 10982 newProps 10983 ), null !== type && (buildHydrationDiffNode( 10984 workInProgress2, 10985 0 10986 ).serverProps = type)); 10987 } 10988 current2[internalInstanceKey] = workInProgress2; 10989 current2 = current2.nodeValue === renderLanes2 || null !== newProps && true === newProps.suppressHydrationWarning || checkForUnmatchedText(current2.nodeValue, renderLanes2) ? true : false; 10990 current2 || throwOnHydrationMismatch(workInProgress2, true); 10991 } else 10992 type = renderLanes2.ancestorInfo.current, null != type && validateTextNesting( 10993 newProps, 10994 type.tag, 10995 renderLanes2.ancestorInfo.implicitRootScope 10996 ), current2 = getOwnerDocumentFromRootContainer(current2).createTextNode( 10997 newProps 10998 ), current2[internalInstanceKey] = workInProgress2, workInProgress2.stateNode = current2; 10999 } 11000 bubbleProperties(workInProgress2); 11001 return null; 11002 case 31: 11003 renderLanes2 = workInProgress2.memoizedState; 11004 if (null === current2 || null !== current2.memoizedState) { 11005 newProps = popHydrationState(workInProgress2); 11006 if (null !== renderLanes2) { 11007 if (null === current2) { 11008 if (!newProps) 11009 throw Error( 11010 "A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React." 11011 ); 11012 current2 = workInProgress2.memoizedState; 11013 current2 = null !== current2 ? current2.dehydrated : null; 11014 if (!current2) 11015 throw Error( 11016 "Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue." 11017 ); 11018 current2[internalInstanceKey] = workInProgress2; 11019 bubbleProperties(workInProgress2); 11020 (workInProgress2.mode & ProfileMode) !== NoMode && null !== renderLanes2 && (current2 = workInProgress2.child, null !== current2 && (workInProgress2.treeBaseDuration -= current2.treeBaseDuration)); 11021 } else 11022 emitPendingHydrationWarnings(), resetHydrationState(), 0 === (workInProgress2.flags & 128) && (renderLanes2 = workInProgress2.memoizedState = null), workInProgress2.flags |= 4, bubbleProperties(workInProgress2), (workInProgress2.mode & ProfileMode) !== NoMode && null !== renderLanes2 && (current2 = workInProgress2.child, null !== current2 && (workInProgress2.treeBaseDuration -= current2.treeBaseDuration)); 11023 current2 = false; 11024 } else 11025 renderLanes2 = upgradeHydrationErrorsToRecoverable(), null !== current2 && null !== current2.memoizedState && (current2.memoizedState.hydrationErrors = renderLanes2), current2 = true; 11026 if (!current2) { 11027 if (workInProgress2.flags & 256) 11028 return popSuspenseHandler(workInProgress2), workInProgress2; 11029 popSuspenseHandler(workInProgress2); 11030 return null; 11031 } 11032 if (0 !== (workInProgress2.flags & 128)) 11033 throw Error( 11034 "Client rendering an Activity suspended it again. This is a bug in React." 11035 ); 11036 } 11037 bubbleProperties(workInProgress2); 11038 return null; 11039 case 13: 11040 newProps = workInProgress2.memoizedState; 11041 if (null === current2 || null !== current2.memoizedState && null !== current2.memoizedState.dehydrated) { 11042 type = newProps; 11043 nextResource = popHydrationState(workInProgress2); 11044 if (null !== type && null !== type.dehydrated) { 11045 if (null === current2) { 11046 if (!nextResource) 11047 throw Error( 11048 "A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React." 11049 ); 11050 nextResource = workInProgress2.memoizedState; 11051 nextResource = null !== nextResource ? nextResource.dehydrated : null; 11052 if (!nextResource) 11053 throw Error( 11054 "Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue." 11055 ); 11056 nextResource[internalInstanceKey] = workInProgress2; 11057 bubbleProperties(workInProgress2); 11058 (workInProgress2.mode & ProfileMode) !== NoMode && null !== type && (type = workInProgress2.child, null !== type && (workInProgress2.treeBaseDuration -= type.treeBaseDuration)); 11059 } else 11060 emitPendingHydrationWarnings(), resetHydrationState(), 0 === (workInProgress2.flags & 128) && (type = workInProgress2.memoizedState = null), workInProgress2.flags |= 4, bubbleProperties(workInProgress2), (workInProgress2.mode & ProfileMode) !== NoMode && null !== type && (type = workInProgress2.child, null !== type && (workInProgress2.treeBaseDuration -= type.treeBaseDuration)); 11061 type = false; 11062 } else 11063 type = upgradeHydrationErrorsToRecoverable(), null !== current2 && null !== current2.memoizedState && (current2.memoizedState.hydrationErrors = type), type = true; 11064 if (!type) { 11065 if (workInProgress2.flags & 256) 11066 return popSuspenseHandler(workInProgress2), workInProgress2; 11067 popSuspenseHandler(workInProgress2); 11068 return null; 11069 } 11070 } 11071 popSuspenseHandler(workInProgress2); 11072 if (0 !== (workInProgress2.flags & 128)) 11073 return workInProgress2.lanes = renderLanes2, (workInProgress2.mode & ProfileMode) !== NoMode && transferActualDuration(workInProgress2), workInProgress2; 11074 renderLanes2 = null !== newProps; 11075 current2 = null !== current2 && null !== current2.memoizedState; 11076 renderLanes2 && (newProps = workInProgress2.child, type = null, null !== newProps.alternate && null !== newProps.alternate.memoizedState && null !== newProps.alternate.memoizedState.cachePool && (type = newProps.alternate.memoizedState.cachePool.pool), nextResource = null, null !== newProps.memoizedState && null !== newProps.memoizedState.cachePool && (nextResource = newProps.memoizedState.cachePool.pool), nextResource !== type && (newProps.flags |= 2048)); 11077 renderLanes2 !== current2 && renderLanes2 && (workInProgress2.child.flags |= 8192); 11078 scheduleRetryEffect(workInProgress2, workInProgress2.updateQueue); 11079 bubbleProperties(workInProgress2); 11080 (workInProgress2.mode & ProfileMode) !== NoMode && renderLanes2 && (current2 = workInProgress2.child, null !== current2 && (workInProgress2.treeBaseDuration -= current2.treeBaseDuration)); 11081 return null; 11082 case 4: 11083 return popHostContainer(workInProgress2), null === current2 && listenToAllSupportedEvents( 11084 workInProgress2.stateNode.containerInfo 11085 ), bubbleProperties(workInProgress2), null; 11086 case 10: 11087 return popProvider(workInProgress2.type, workInProgress2), bubbleProperties(workInProgress2), null; 11088 case 19: 11089 pop(suspenseStackCursor, workInProgress2); 11090 newProps = workInProgress2.memoizedState; 11091 if (null === newProps) return bubbleProperties(workInProgress2), null; 11092 type = 0 !== (workInProgress2.flags & 128); 11093 nextResource = newProps.rendering; 11094 if (null === nextResource) 11095 if (type) cutOffTailIfNeeded(newProps, false); 11096 else { 11097 if (workInProgressRootExitStatus !== RootInProgress || null !== current2 && 0 !== (current2.flags & 128)) 11098 for (current2 = workInProgress2.child; null !== current2; ) { 11099 nextResource = findFirstSuspended(current2); 11100 if (null !== nextResource) { 11101 workInProgress2.flags |= 128; 11102 cutOffTailIfNeeded(newProps, false); 11103 current2 = nextResource.updateQueue; 11104 workInProgress2.updateQueue = current2; 11105 scheduleRetryEffect(workInProgress2, current2); 11106 workInProgress2.subtreeFlags = 0; 11107 current2 = renderLanes2; 11108 for (renderLanes2 = workInProgress2.child; null !== renderLanes2; ) 11109 resetWorkInProgress(renderLanes2, current2), renderLanes2 = renderLanes2.sibling; 11110 push( 11111 suspenseStackCursor, 11112 suspenseStackCursor.current & SubtreeSuspenseContextMask | ForceSuspenseFallback, 11113 workInProgress2 11114 ); 11115 isHydrating && pushTreeFork(workInProgress2, newProps.treeForkCount); 11116 return workInProgress2.child; 11117 } 11118 current2 = current2.sibling; 11119 } 11120 null !== newProps.tail && now$1() > workInProgressRootRenderTargetTime && (workInProgress2.flags |= 128, type = true, cutOffTailIfNeeded(newProps, false), workInProgress2.lanes = 4194304); 11121 } 11122 else { 11123 if (!type) 11124 if (current2 = findFirstSuspended(nextResource), null !== current2) { 11125 if (workInProgress2.flags |= 128, type = true, current2 = current2.updateQueue, workInProgress2.updateQueue = current2, scheduleRetryEffect(workInProgress2, current2), cutOffTailIfNeeded(newProps, true), null === newProps.tail && "hidden" === newProps.tailMode && !nextResource.alternate && !isHydrating) 11126 return bubbleProperties(workInProgress2), null; 11127 } else 11128 2 * now$1() - newProps.renderingStartTime > workInProgressRootRenderTargetTime && 536870912 !== renderLanes2 && (workInProgress2.flags |= 128, type = true, cutOffTailIfNeeded(newProps, false), workInProgress2.lanes = 4194304); 11129 newProps.isBackwards ? (nextResource.sibling = workInProgress2.child, workInProgress2.child = nextResource) : (current2 = newProps.last, null !== current2 ? current2.sibling = nextResource : workInProgress2.child = nextResource, newProps.last = nextResource); 11130 } 11131 if (null !== newProps.tail) 11132 return current2 = newProps.tail, newProps.rendering = current2, newProps.tail = current2.sibling, newProps.renderingStartTime = now$1(), current2.sibling = null, renderLanes2 = suspenseStackCursor.current, renderLanes2 = type ? renderLanes2 & SubtreeSuspenseContextMask | ForceSuspenseFallback : renderLanes2 & SubtreeSuspenseContextMask, push(suspenseStackCursor, renderLanes2, workInProgress2), isHydrating && pushTreeFork(workInProgress2, newProps.treeForkCount), current2; 11133 bubbleProperties(workInProgress2); 11134 return null; 11135 case 22: 11136 case 23: 11137 return popSuspenseHandler(workInProgress2), popHiddenContext(workInProgress2), newProps = null !== workInProgress2.memoizedState, null !== current2 ? null !== current2.memoizedState !== newProps && (workInProgress2.flags |= 8192) : newProps && (workInProgress2.flags |= 8192), newProps ? 0 !== (renderLanes2 & 536870912) && 0 === (workInProgress2.flags & 128) && (bubbleProperties(workInProgress2), workInProgress2.subtreeFlags & 6 && (workInProgress2.flags |= 8192)) : bubbleProperties(workInProgress2), renderLanes2 = workInProgress2.updateQueue, null !== renderLanes2 && scheduleRetryEffect(workInProgress2, renderLanes2.retryQueue), renderLanes2 = null, null !== current2 && null !== current2.memoizedState && null !== current2.memoizedState.cachePool && (renderLanes2 = current2.memoizedState.cachePool.pool), newProps = null, null !== workInProgress2.memoizedState && null !== workInProgress2.memoizedState.cachePool && (newProps = workInProgress2.memoizedState.cachePool.pool), newProps !== renderLanes2 && (workInProgress2.flags |= 2048), null !== current2 && pop(resumedCache, workInProgress2), null; 11138 case 24: 11139 return renderLanes2 = null, null !== current2 && (renderLanes2 = current2.memoizedState.cache), workInProgress2.memoizedState.cache !== renderLanes2 && (workInProgress2.flags |= 2048), popProvider(CacheContext, workInProgress2), bubbleProperties(workInProgress2), null; 11140 case 25: 11141 return null; 11142 case 30: 11143 return null; 11144 } 11145 throw Error( 11146 "Unknown unit of work tag (" + workInProgress2.tag + "). This error is likely caused by a bug in React. Please file an issue." 11147 ); 11148 } 11149 function unwindWork(current2, workInProgress2) { 11150 popTreeContext(workInProgress2); 11151 switch (workInProgress2.tag) { 11152 case 1: 11153 return current2 = workInProgress2.flags, current2 & 65536 ? (workInProgress2.flags = current2 & -65537 | 128, (workInProgress2.mode & ProfileMode) !== NoMode && transferActualDuration(workInProgress2), workInProgress2) : null; 11154 case 3: 11155 return popProvider(CacheContext, workInProgress2), popHostContainer(workInProgress2), current2 = workInProgress2.flags, 0 !== (current2 & 65536) && 0 === (current2 & 128) ? (workInProgress2.flags = current2 & -65537 | 128, workInProgress2) : null; 11156 case 26: 11157 case 27: 11158 case 5: 11159 return popHostContext(workInProgress2), null; 11160 case 31: 11161 if (null !== workInProgress2.memoizedState) { 11162 popSuspenseHandler(workInProgress2); 11163 if (null === workInProgress2.alternate) 11164 throw Error( 11165 "Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue." 11166 ); 11167 resetHydrationState(); 11168 } 11169 current2 = workInProgress2.flags; 11170 return current2 & 65536 ? (workInProgress2.flags = current2 & -65537 | 128, (workInProgress2.mode & ProfileMode) !== NoMode && transferActualDuration(workInProgress2), workInProgress2) : null; 11171 case 13: 11172 popSuspenseHandler(workInProgress2); 11173 current2 = workInProgress2.memoizedState; 11174 if (null !== current2 && null !== current2.dehydrated) { 11175 if (null === workInProgress2.alternate) 11176 throw Error( 11177 "Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue." 11178 ); 11179 resetHydrationState(); 11180 } 11181 current2 = workInProgress2.flags; 11182 return current2 & 65536 ? (workInProgress2.flags = current2 & -65537 | 128, (workInProgress2.mode & ProfileMode) !== NoMode && transferActualDuration(workInProgress2), workInProgress2) : null; 11183 case 19: 11184 return pop(suspenseStackCursor, workInProgress2), null; 11185 case 4: 11186 return popHostContainer(workInProgress2), null; 11187 case 10: 11188 return popProvider(workInProgress2.type, workInProgress2), null; 11189 case 22: 11190 case 23: 11191 return popSuspenseHandler(workInProgress2), popHiddenContext(workInProgress2), null !== current2 && pop(resumedCache, workInProgress2), current2 = workInProgress2.flags, current2 & 65536 ? (workInProgress2.flags = current2 & -65537 | 128, (workInProgress2.mode & ProfileMode) !== NoMode && transferActualDuration(workInProgress2), workInProgress2) : null; 11192 case 24: 11193 return popProvider(CacheContext, workInProgress2), null; 11194 case 25: 11195 return null; 11196 default: 11197 return null; 11198 } 11199 } 11200 function unwindInterruptedWork(current2, interruptedWork) { 11201 popTreeContext(interruptedWork); 11202 switch (interruptedWork.tag) { 11203 case 3: 11204 popProvider(CacheContext, interruptedWork); 11205 popHostContainer(interruptedWork); 11206 break; 11207 case 26: 11208 case 27: 11209 case 5: 11210 popHostContext(interruptedWork); 11211 break; 11212 case 4: 11213 popHostContainer(interruptedWork); 11214 break; 11215 case 31: 11216 null !== interruptedWork.memoizedState && popSuspenseHandler(interruptedWork); 11217 break; 11218 case 13: 11219 popSuspenseHandler(interruptedWork); 11220 break; 11221 case 19: 11222 pop(suspenseStackCursor, interruptedWork); 11223 break; 11224 case 10: 11225 popProvider(interruptedWork.type, interruptedWork); 11226 break; 11227 case 22: 11228 case 23: 11229 popSuspenseHandler(interruptedWork); 11230 popHiddenContext(interruptedWork); 11231 null !== current2 && pop(resumedCache, interruptedWork); 11232 break; 11233 case 24: 11234 popProvider(CacheContext, interruptedWork); 11235 } 11236 } 11237 function shouldProfile(current2) { 11238 return (current2.mode & ProfileMode) !== NoMode; 11239 } 11240 function commitHookLayoutEffects(finishedWork, hookFlags) { 11241 shouldProfile(finishedWork) ? (startEffectTimer(), commitHookEffectListMount(hookFlags, finishedWork), recordEffectDuration()) : commitHookEffectListMount(hookFlags, finishedWork); 11242 } 11243 function commitHookLayoutUnmountEffects(finishedWork, nearestMountedAncestor, hookFlags) { 11244 shouldProfile(finishedWork) ? (startEffectTimer(), commitHookEffectListUnmount( 11245 hookFlags, 11246 finishedWork, 11247 nearestMountedAncestor 11248 ), recordEffectDuration()) : commitHookEffectListUnmount( 11249 hookFlags, 11250 finishedWork, 11251 nearestMountedAncestor 11252 ); 11253 } 11254 function commitHookEffectListMount(flags, finishedWork) { 11255 try { 11256 var updateQueue = finishedWork.updateQueue, lastEffect = null !== updateQueue ? updateQueue.lastEffect : null; 11257 if (null !== lastEffect) { 11258 var firstEffect = lastEffect.next; 11259 updateQueue = firstEffect; 11260 do { 11261 if ((updateQueue.tag & flags) === flags && (lastEffect = void 0, (flags & Insertion) !== NoFlags && (isRunningInsertionEffect = true), lastEffect = runWithFiberInDEV( 11262 finishedWork, 11263 callCreateInDEV, 11264 updateQueue 11265 ), (flags & Insertion) !== NoFlags && (isRunningInsertionEffect = false), void 0 !== lastEffect && "function" !== typeof lastEffect)) { 11266 var hookName = void 0; 11267 hookName = 0 !== (updateQueue.tag & Layout) ? "useLayoutEffect" : 0 !== (updateQueue.tag & Insertion) ? "useInsertionEffect" : "useEffect"; 11268 var addendum = void 0; 11269 addendum = null === lastEffect ? " You returned null. If your effect does not require clean up, return undefined (or nothing)." : "function" === typeof lastEffect.then ? "\n\nIt looks like you wrote " + hookName + "(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\n\n" + hookName + "(() => {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching" : " You returned: " + lastEffect; 11270 runWithFiberInDEV( 11271 finishedWork, 11272 function(n3, a3) { 11273 console.error( 11274 "%s must not return anything besides a function, which is used for clean-up.%s", 11275 n3, 11276 a3 11277 ); 11278 }, 11279 hookName, 11280 addendum 11281 ); 11282 } 11283 updateQueue = updateQueue.next; 11284 } while (updateQueue !== firstEffect); 11285 } 11286 } catch (error2) { 11287 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11288 } 11289 } 11290 function commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) { 11291 try { 11292 var updateQueue = finishedWork.updateQueue, lastEffect = null !== updateQueue ? updateQueue.lastEffect : null; 11293 if (null !== lastEffect) { 11294 var firstEffect = lastEffect.next; 11295 updateQueue = firstEffect; 11296 do { 11297 if ((updateQueue.tag & flags) === flags) { 11298 var inst = updateQueue.inst, destroy = inst.destroy; 11299 void 0 !== destroy && (inst.destroy = void 0, (flags & Insertion) !== NoFlags && (isRunningInsertionEffect = true), lastEffect = finishedWork, runWithFiberInDEV( 11300 lastEffect, 11301 callDestroyInDEV, 11302 lastEffect, 11303 nearestMountedAncestor, 11304 destroy 11305 ), (flags & Insertion) !== NoFlags && (isRunningInsertionEffect = false)); 11306 } 11307 updateQueue = updateQueue.next; 11308 } while (updateQueue !== firstEffect); 11309 } 11310 } catch (error2) { 11311 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11312 } 11313 } 11314 function commitHookPassiveMountEffects(finishedWork, hookFlags) { 11315 shouldProfile(finishedWork) ? (startEffectTimer(), commitHookEffectListMount(hookFlags, finishedWork), recordEffectDuration()) : commitHookEffectListMount(hookFlags, finishedWork); 11316 } 11317 function commitHookPassiveUnmountEffects(finishedWork, nearestMountedAncestor, hookFlags) { 11318 shouldProfile(finishedWork) ? (startEffectTimer(), commitHookEffectListUnmount( 11319 hookFlags, 11320 finishedWork, 11321 nearestMountedAncestor 11322 ), recordEffectDuration()) : commitHookEffectListUnmount( 11323 hookFlags, 11324 finishedWork, 11325 nearestMountedAncestor 11326 ); 11327 } 11328 function commitClassCallbacks(finishedWork) { 11329 var updateQueue = finishedWork.updateQueue; 11330 if (null !== updateQueue) { 11331 var instance = finishedWork.stateNode; 11332 finishedWork.type.defaultProps || "ref" in finishedWork.memoizedProps || didWarnAboutReassigningProps || (instance.props !== finishedWork.memoizedProps && console.error( 11333 "Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", 11334 getComponentNameFromFiber(finishedWork) || "instance" 11335 ), instance.state !== finishedWork.memoizedState && console.error( 11336 "Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", 11337 getComponentNameFromFiber(finishedWork) || "instance" 11338 )); 11339 try { 11340 runWithFiberInDEV( 11341 finishedWork, 11342 commitCallbacks, 11343 updateQueue, 11344 instance 11345 ); 11346 } catch (error2) { 11347 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11348 } 11349 } 11350 } 11351 function callGetSnapshotBeforeUpdates(instance, prevProps, prevState) { 11352 return instance.getSnapshotBeforeUpdate(prevProps, prevState); 11353 } 11354 function commitClassSnapshot(finishedWork, current2) { 11355 var prevProps = current2.memoizedProps, prevState = current2.memoizedState; 11356 current2 = finishedWork.stateNode; 11357 finishedWork.type.defaultProps || "ref" in finishedWork.memoizedProps || didWarnAboutReassigningProps || (current2.props !== finishedWork.memoizedProps && console.error( 11358 "Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", 11359 getComponentNameFromFiber(finishedWork) || "instance" 11360 ), current2.state !== finishedWork.memoizedState && console.error( 11361 "Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", 11362 getComponentNameFromFiber(finishedWork) || "instance" 11363 )); 11364 try { 11365 var resolvedPrevProps = resolveClassComponentProps( 11366 finishedWork.type, 11367 prevProps 11368 ); 11369 var snapshot = runWithFiberInDEV( 11370 finishedWork, 11371 callGetSnapshotBeforeUpdates, 11372 current2, 11373 resolvedPrevProps, 11374 prevState 11375 ); 11376 prevProps = didWarnAboutUndefinedSnapshotBeforeUpdate; 11377 void 0 !== snapshot || prevProps.has(finishedWork.type) || (prevProps.add(finishedWork.type), runWithFiberInDEV(finishedWork, function() { 11378 console.error( 11379 "%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.", 11380 getComponentNameFromFiber(finishedWork) 11381 ); 11382 })); 11383 current2.__reactInternalSnapshotBeforeUpdate = snapshot; 11384 } catch (error2) { 11385 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11386 } 11387 } 11388 function safelyCallComponentWillUnmount(current2, nearestMountedAncestor, instance) { 11389 instance.props = resolveClassComponentProps( 11390 current2.type, 11391 current2.memoizedProps 11392 ); 11393 instance.state = current2.memoizedState; 11394 shouldProfile(current2) ? (startEffectTimer(), runWithFiberInDEV( 11395 current2, 11396 callComponentWillUnmountInDEV, 11397 current2, 11398 nearestMountedAncestor, 11399 instance 11400 ), recordEffectDuration()) : runWithFiberInDEV( 11401 current2, 11402 callComponentWillUnmountInDEV, 11403 current2, 11404 nearestMountedAncestor, 11405 instance 11406 ); 11407 } 11408 function commitAttachRef(finishedWork) { 11409 var ref = finishedWork.ref; 11410 if (null !== ref) { 11411 switch (finishedWork.tag) { 11412 case 26: 11413 case 27: 11414 case 5: 11415 var instanceToUse = finishedWork.stateNode; 11416 break; 11417 case 30: 11418 instanceToUse = finishedWork.stateNode; 11419 break; 11420 default: 11421 instanceToUse = finishedWork.stateNode; 11422 } 11423 if ("function" === typeof ref) 11424 if (shouldProfile(finishedWork)) 11425 try { 11426 startEffectTimer(), finishedWork.refCleanup = ref(instanceToUse); 11427 } finally { 11428 recordEffectDuration(); 11429 } 11430 else finishedWork.refCleanup = ref(instanceToUse); 11431 else 11432 "string" === typeof ref ? console.error("String refs are no longer supported.") : ref.hasOwnProperty("current") || console.error( 11433 "Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", 11434 getComponentNameFromFiber(finishedWork) 11435 ), ref.current = instanceToUse; 11436 } 11437 } 11438 function safelyAttachRef(current2, nearestMountedAncestor) { 11439 try { 11440 runWithFiberInDEV(current2, commitAttachRef, current2); 11441 } catch (error2) { 11442 captureCommitPhaseError(current2, nearestMountedAncestor, error2); 11443 } 11444 } 11445 function safelyDetachRef(current2, nearestMountedAncestor) { 11446 var ref = current2.ref, refCleanup = current2.refCleanup; 11447 if (null !== ref) 11448 if ("function" === typeof refCleanup) 11449 try { 11450 if (shouldProfile(current2)) 11451 try { 11452 startEffectTimer(), runWithFiberInDEV(current2, refCleanup); 11453 } finally { 11454 recordEffectDuration(current2); 11455 } 11456 else runWithFiberInDEV(current2, refCleanup); 11457 } catch (error2) { 11458 captureCommitPhaseError(current2, nearestMountedAncestor, error2); 11459 } finally { 11460 current2.refCleanup = null, current2 = current2.alternate, null != current2 && (current2.refCleanup = null); 11461 } 11462 else if ("function" === typeof ref) 11463 try { 11464 if (shouldProfile(current2)) 11465 try { 11466 startEffectTimer(), runWithFiberInDEV(current2, ref, null); 11467 } finally { 11468 recordEffectDuration(current2); 11469 } 11470 else runWithFiberInDEV(current2, ref, null); 11471 } catch (error$7) { 11472 captureCommitPhaseError(current2, nearestMountedAncestor, error$7); 11473 } 11474 else ref.current = null; 11475 } 11476 function commitProfiler(finishedWork, current2, commitStartTime2, effectDuration) { 11477 var _finishedWork$memoize = finishedWork.memoizedProps, id = _finishedWork$memoize.id, onCommit = _finishedWork$memoize.onCommit; 11478 _finishedWork$memoize = _finishedWork$memoize.onRender; 11479 current2 = null === current2 ? "mount" : "update"; 11480 currentUpdateIsNested && (current2 = "nested-update"); 11481 "function" === typeof _finishedWork$memoize && _finishedWork$memoize( 11482 id, 11483 current2, 11484 finishedWork.actualDuration, 11485 finishedWork.treeBaseDuration, 11486 finishedWork.actualStartTime, 11487 commitStartTime2 11488 ); 11489 "function" === typeof onCommit && onCommit(id, current2, effectDuration, commitStartTime2); 11490 } 11491 function commitProfilerPostCommitImpl(finishedWork, current2, commitStartTime2, passiveEffectDuration) { 11492 var _finishedWork$memoize2 = finishedWork.memoizedProps; 11493 finishedWork = _finishedWork$memoize2.id; 11494 _finishedWork$memoize2 = _finishedWork$memoize2.onPostCommit; 11495 current2 = null === current2 ? "mount" : "update"; 11496 currentUpdateIsNested && (current2 = "nested-update"); 11497 "function" === typeof _finishedWork$memoize2 && _finishedWork$memoize2( 11498 finishedWork, 11499 current2, 11500 passiveEffectDuration, 11501 commitStartTime2 11502 ); 11503 } 11504 function commitHostMount(finishedWork) { 11505 var type = finishedWork.type, props = finishedWork.memoizedProps, instance = finishedWork.stateNode; 11506 try { 11507 runWithFiberInDEV( 11508 finishedWork, 11509 commitMount, 11510 instance, 11511 type, 11512 props, 11513 finishedWork 11514 ); 11515 } catch (error2) { 11516 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11517 } 11518 } 11519 function commitHostUpdate(finishedWork, newProps, oldProps) { 11520 try { 11521 runWithFiberInDEV( 11522 finishedWork, 11523 commitUpdate, 11524 finishedWork.stateNode, 11525 finishedWork.type, 11526 oldProps, 11527 newProps, 11528 finishedWork 11529 ); 11530 } catch (error2) { 11531 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11532 } 11533 } 11534 function isHostParent(fiber) { 11535 return 5 === fiber.tag || 3 === fiber.tag || 26 === fiber.tag || 27 === fiber.tag && isSingletonScope(fiber.type) || 4 === fiber.tag; 11536 } 11537 function getHostSibling(fiber) { 11538 a: for (; ; ) { 11539 for (; null === fiber.sibling; ) { 11540 if (null === fiber.return || isHostParent(fiber.return)) return null; 11541 fiber = fiber.return; 11542 } 11543 fiber.sibling.return = fiber.return; 11544 for (fiber = fiber.sibling; 5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag; ) { 11545 if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a; 11546 if (fiber.flags & 2) continue a; 11547 if (null === fiber.child || 4 === fiber.tag) continue a; 11548 else fiber.child.return = fiber, fiber = fiber.child; 11549 } 11550 if (!(fiber.flags & 2)) return fiber.stateNode; 11551 } 11552 } 11553 function insertOrAppendPlacementNodeIntoContainer(node, before, parent) { 11554 var tag = node.tag; 11555 if (5 === tag || 6 === tag) 11556 node = node.stateNode, before ? (warnForReactChildrenConflict(parent), (9 === parent.nodeType ? parent.body : "HTML" === parent.nodeName ? parent.ownerDocument.body : parent).insertBefore(node, before)) : (warnForReactChildrenConflict(parent), before = 9 === parent.nodeType ? parent.body : "HTML" === parent.nodeName ? parent.ownerDocument.body : parent, before.appendChild(node), parent = parent._reactRootContainer, null !== parent && void 0 !== parent || null !== before.onclick || (before.onclick = noop$1)); 11557 else if (4 !== tag && (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode, before = null), node = node.child, null !== node)) 11558 for (insertOrAppendPlacementNodeIntoContainer(node, before, parent), node = node.sibling; null !== node; ) 11559 insertOrAppendPlacementNodeIntoContainer(node, before, parent), node = node.sibling; 11560 } 11561 function insertOrAppendPlacementNode(node, before, parent) { 11562 var tag = node.tag; 11563 if (5 === tag || 6 === tag) 11564 node = node.stateNode, before ? parent.insertBefore(node, before) : parent.appendChild(node); 11565 else if (4 !== tag && (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode), node = node.child, null !== node)) 11566 for (insertOrAppendPlacementNode(node, before, parent), node = node.sibling; null !== node; ) 11567 insertOrAppendPlacementNode(node, before, parent), node = node.sibling; 11568 } 11569 function commitPlacement(finishedWork) { 11570 for (var hostParentFiber, parentFiber = finishedWork.return; null !== parentFiber; ) { 11571 if (isHostParent(parentFiber)) { 11572 hostParentFiber = parentFiber; 11573 break; 11574 } 11575 parentFiber = parentFiber.return; 11576 } 11577 if (null == hostParentFiber) 11578 throw Error( 11579 "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." 11580 ); 11581 switch (hostParentFiber.tag) { 11582 case 27: 11583 hostParentFiber = hostParentFiber.stateNode; 11584 parentFiber = getHostSibling(finishedWork); 11585 insertOrAppendPlacementNode( 11586 finishedWork, 11587 parentFiber, 11588 hostParentFiber 11589 ); 11590 break; 11591 case 5: 11592 parentFiber = hostParentFiber.stateNode; 11593 hostParentFiber.flags & 32 && (resetTextContent(parentFiber), hostParentFiber.flags &= -33); 11594 hostParentFiber = getHostSibling(finishedWork); 11595 insertOrAppendPlacementNode( 11596 finishedWork, 11597 hostParentFiber, 11598 parentFiber 11599 ); 11600 break; 11601 case 3: 11602 case 4: 11603 hostParentFiber = hostParentFiber.stateNode.containerInfo; 11604 parentFiber = getHostSibling(finishedWork); 11605 insertOrAppendPlacementNodeIntoContainer( 11606 finishedWork, 11607 parentFiber, 11608 hostParentFiber 11609 ); 11610 break; 11611 default: 11612 throw Error( 11613 "Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue." 11614 ); 11615 } 11616 } 11617 function commitHostSingletonAcquisition(finishedWork) { 11618 var singleton = finishedWork.stateNode, props = finishedWork.memoizedProps; 11619 try { 11620 runWithFiberInDEV( 11621 finishedWork, 11622 acquireSingletonInstance, 11623 finishedWork.type, 11624 props, 11625 singleton, 11626 finishedWork 11627 ); 11628 } catch (error2) { 11629 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11630 } 11631 } 11632 function isHydratingParent(current2, finishedWork) { 11633 return 31 === finishedWork.tag ? (finishedWork = finishedWork.memoizedState, null !== current2.memoizedState && null === finishedWork) : 13 === finishedWork.tag ? (current2 = current2.memoizedState, finishedWork = finishedWork.memoizedState, null !== current2 && null !== current2.dehydrated && (null === finishedWork || null === finishedWork.dehydrated)) : 3 === finishedWork.tag ? current2.memoizedState.isDehydrated && 0 === (finishedWork.flags & 256) : false; 11634 } 11635 function commitBeforeMutationEffects(root3, firstChild) { 11636 root3 = root3.containerInfo; 11637 eventsEnabled = _enabled; 11638 root3 = getActiveElementDeep(root3); 11639 if (hasSelectionCapabilities(root3)) { 11640 if ("selectionStart" in root3) 11641 var JSCompiler_temp = { 11642 start: root3.selectionStart, 11643 end: root3.selectionEnd 11644 }; 11645 else 11646 a: { 11647 JSCompiler_temp = (JSCompiler_temp = root3.ownerDocument) && JSCompiler_temp.defaultView || window; 11648 var selection = JSCompiler_temp.getSelection && JSCompiler_temp.getSelection(); 11649 if (selection && 0 !== selection.rangeCount) { 11650 JSCompiler_temp = selection.anchorNode; 11651 var anchorOffset = selection.anchorOffset, focusNode = selection.focusNode; 11652 selection = selection.focusOffset; 11653 try { 11654 JSCompiler_temp.nodeType, focusNode.nodeType; 11655 } catch (e$2) { 11656 JSCompiler_temp = null; 11657 break a; 11658 } 11659 var length = 0, start2 = -1, end = -1, indexWithinAnchor = 0, indexWithinFocus = 0, node = root3, parentNode = null; 11660 b: for (; ; ) { 11661 for (var next; ; ) { 11662 node !== JSCompiler_temp || 0 !== anchorOffset && 3 !== node.nodeType || (start2 = length + anchorOffset); 11663 node !== focusNode || 0 !== selection && 3 !== node.nodeType || (end = length + selection); 11664 3 === node.nodeType && (length += node.nodeValue.length); 11665 if (null === (next = node.firstChild)) break; 11666 parentNode = node; 11667 node = next; 11668 } 11669 for (; ; ) { 11670 if (node === root3) break b; 11671 parentNode === JSCompiler_temp && ++indexWithinAnchor === anchorOffset && (start2 = length); 11672 parentNode === focusNode && ++indexWithinFocus === selection && (end = length); 11673 if (null !== (next = node.nextSibling)) break; 11674 node = parentNode; 11675 parentNode = node.parentNode; 11676 } 11677 node = next; 11678 } 11679 JSCompiler_temp = -1 === start2 || -1 === end ? null : { start: start2, end }; 11680 } else JSCompiler_temp = null; 11681 } 11682 JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 }; 11683 } else JSCompiler_temp = null; 11684 selectionInformation = { 11685 focusedElem: root3, 11686 selectionRange: JSCompiler_temp 11687 }; 11688 _enabled = false; 11689 for (nextEffect = firstChild; null !== nextEffect; ) 11690 if (firstChild = nextEffect, root3 = firstChild.child, 0 !== (firstChild.subtreeFlags & 1028) && null !== root3) 11691 root3.return = firstChild, nextEffect = root3; 11692 else 11693 for (; null !== nextEffect; ) { 11694 root3 = firstChild = nextEffect; 11695 JSCompiler_temp = root3.alternate; 11696 anchorOffset = root3.flags; 11697 switch (root3.tag) { 11698 case 0: 11699 if (0 !== (anchorOffset & 4) && (root3 = root3.updateQueue, root3 = null !== root3 ? root3.events : null, null !== root3)) 11700 for (JSCompiler_temp = 0; JSCompiler_temp < root3.length; JSCompiler_temp++) 11701 anchorOffset = root3[JSCompiler_temp], anchorOffset.ref.impl = anchorOffset.nextImpl; 11702 break; 11703 case 11: 11704 case 15: 11705 break; 11706 case 1: 11707 0 !== (anchorOffset & 1024) && null !== JSCompiler_temp && commitClassSnapshot(root3, JSCompiler_temp); 11708 break; 11709 case 3: 11710 if (0 !== (anchorOffset & 1024)) { 11711 if (root3 = root3.stateNode.containerInfo, JSCompiler_temp = root3.nodeType, 9 === JSCompiler_temp) 11712 clearContainerSparingly(root3); 11713 else if (1 === JSCompiler_temp) 11714 switch (root3.nodeName) { 11715 case "HEAD": 11716 case "HTML": 11717 case "BODY": 11718 clearContainerSparingly(root3); 11719 break; 11720 default: 11721 root3.textContent = ""; 11722 } 11723 } 11724 break; 11725 case 5: 11726 case 26: 11727 case 27: 11728 case 6: 11729 case 4: 11730 case 17: 11731 break; 11732 default: 11733 if (0 !== (anchorOffset & 1024)) 11734 throw Error( 11735 "This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue." 11736 ); 11737 } 11738 root3 = firstChild.sibling; 11739 if (null !== root3) { 11740 root3.return = firstChild.return; 11741 nextEffect = root3; 11742 break; 11743 } 11744 nextEffect = firstChild.return; 11745 } 11746 } 11747 function commitLayoutEffectOnFiber(finishedRoot, current2, finishedWork) { 11748 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(), flags = finishedWork.flags; 11749 switch (finishedWork.tag) { 11750 case 0: 11751 case 11: 11752 case 15: 11753 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11754 flags & 4 && commitHookLayoutEffects(finishedWork, Layout | HasEffect); 11755 break; 11756 case 1: 11757 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11758 if (flags & 4) 11759 if (finishedRoot = finishedWork.stateNode, null === current2) 11760 finishedWork.type.defaultProps || "ref" in finishedWork.memoizedProps || didWarnAboutReassigningProps || (finishedRoot.props !== finishedWork.memoizedProps && console.error( 11761 "Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", 11762 getComponentNameFromFiber(finishedWork) || "instance" 11763 ), finishedRoot.state !== finishedWork.memoizedState && console.error( 11764 "Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", 11765 getComponentNameFromFiber(finishedWork) || "instance" 11766 )), shouldProfile(finishedWork) ? (startEffectTimer(), runWithFiberInDEV( 11767 finishedWork, 11768 callComponentDidMountInDEV, 11769 finishedWork, 11770 finishedRoot 11771 ), recordEffectDuration()) : runWithFiberInDEV( 11772 finishedWork, 11773 callComponentDidMountInDEV, 11774 finishedWork, 11775 finishedRoot 11776 ); 11777 else { 11778 var prevProps = resolveClassComponentProps( 11779 finishedWork.type, 11780 current2.memoizedProps 11781 ); 11782 current2 = current2.memoizedState; 11783 finishedWork.type.defaultProps || "ref" in finishedWork.memoizedProps || didWarnAboutReassigningProps || (finishedRoot.props !== finishedWork.memoizedProps && console.error( 11784 "Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", 11785 getComponentNameFromFiber(finishedWork) || "instance" 11786 ), finishedRoot.state !== finishedWork.memoizedState && console.error( 11787 "Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", 11788 getComponentNameFromFiber(finishedWork) || "instance" 11789 )); 11790 shouldProfile(finishedWork) ? (startEffectTimer(), runWithFiberInDEV( 11791 finishedWork, 11792 callComponentDidUpdateInDEV, 11793 finishedWork, 11794 finishedRoot, 11795 prevProps, 11796 current2, 11797 finishedRoot.__reactInternalSnapshotBeforeUpdate 11798 ), recordEffectDuration()) : runWithFiberInDEV( 11799 finishedWork, 11800 callComponentDidUpdateInDEV, 11801 finishedWork, 11802 finishedRoot, 11803 prevProps, 11804 current2, 11805 finishedRoot.__reactInternalSnapshotBeforeUpdate 11806 ); 11807 } 11808 flags & 64 && commitClassCallbacks(finishedWork); 11809 flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); 11810 break; 11811 case 3: 11812 current2 = pushNestedEffectDurations(); 11813 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11814 if (flags & 64 && (flags = finishedWork.updateQueue, null !== flags)) { 11815 prevProps = null; 11816 if (null !== finishedWork.child) 11817 switch (finishedWork.child.tag) { 11818 case 27: 11819 case 5: 11820 prevProps = finishedWork.child.stateNode; 11821 break; 11822 case 1: 11823 prevProps = finishedWork.child.stateNode; 11824 } 11825 try { 11826 runWithFiberInDEV( 11827 finishedWork, 11828 commitCallbacks, 11829 flags, 11830 prevProps 11831 ); 11832 } catch (error2) { 11833 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11834 } 11835 } 11836 finishedRoot.effectDuration += popNestedEffectDurations(current2); 11837 break; 11838 case 27: 11839 null === current2 && flags & 4 && commitHostSingletonAcquisition(finishedWork); 11840 case 26: 11841 case 5: 11842 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11843 if (null === current2) { 11844 if (flags & 4) commitHostMount(finishedWork); 11845 else if (flags & 64) { 11846 finishedRoot = finishedWork.type; 11847 current2 = finishedWork.memoizedProps; 11848 prevProps = finishedWork.stateNode; 11849 try { 11850 runWithFiberInDEV( 11851 finishedWork, 11852 commitHydratedInstance, 11853 prevProps, 11854 finishedRoot, 11855 current2, 11856 finishedWork 11857 ); 11858 } catch (error2) { 11859 captureCommitPhaseError( 11860 finishedWork, 11861 finishedWork.return, 11862 error2 11863 ); 11864 } 11865 } 11866 } 11867 flags & 512 && safelyAttachRef(finishedWork, finishedWork.return); 11868 break; 11869 case 12: 11870 if (flags & 4) { 11871 flags = pushNestedEffectDurations(); 11872 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11873 finishedRoot = finishedWork.stateNode; 11874 finishedRoot.effectDuration += bubbleNestedEffectDurations(flags); 11875 try { 11876 runWithFiberInDEV( 11877 finishedWork, 11878 commitProfiler, 11879 finishedWork, 11880 current2, 11881 commitStartTime, 11882 finishedRoot.effectDuration 11883 ); 11884 } catch (error2) { 11885 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 11886 } 11887 } else recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11888 break; 11889 case 31: 11890 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11891 flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork); 11892 break; 11893 case 13: 11894 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11895 flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork); 11896 flags & 64 && (finishedRoot = finishedWork.memoizedState, null !== finishedRoot && (finishedRoot = finishedRoot.dehydrated, null !== finishedRoot && (flags = retryDehydratedSuspenseBoundary.bind( 11897 null, 11898 finishedWork 11899 ), registerSuspenseInstanceRetry(finishedRoot, flags)))); 11900 break; 11901 case 22: 11902 flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden; 11903 if (!flags) { 11904 current2 = null !== current2 && null !== current2.memoizedState || offscreenSubtreeWasHidden; 11905 prevProps = offscreenSubtreeIsHidden; 11906 var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; 11907 offscreenSubtreeIsHidden = flags; 11908 (offscreenSubtreeWasHidden = current2) && !prevOffscreenSubtreeWasHidden ? (recursivelyTraverseReappearLayoutEffects( 11909 finishedRoot, 11910 finishedWork, 11911 0 !== (finishedWork.subtreeFlags & 8772) 11912 ), (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentReappeared( 11913 finishedWork, 11914 componentEffectStartTime, 11915 componentEffectEndTime 11916 )) : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11917 offscreenSubtreeIsHidden = prevProps; 11918 offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; 11919 } 11920 break; 11921 case 30: 11922 break; 11923 default: 11924 recursivelyTraverseLayoutEffects(finishedRoot, finishedWork); 11925 } 11926 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && ((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 11927 finishedWork, 11928 componentEffectStartTime, 11929 componentEffectEndTime, 11930 componentEffectDuration, 11931 componentEffectErrors 11932 ), null === finishedWork.alternate && null !== finishedWork.return && null !== finishedWork.return.alternate && 0.05 < componentEffectEndTime - componentEffectStartTime && (isHydratingParent( 11933 finishedWork.return.alternate, 11934 finishedWork.return 11935 ) || logComponentTrigger( 11936 finishedWork, 11937 componentEffectStartTime, 11938 componentEffectEndTime, 11939 "Mount" 11940 ))); 11941 popComponentEffectStart(prevEffectStart); 11942 popComponentEffectDuration(prevEffectDuration); 11943 componentEffectErrors = prevEffectErrors; 11944 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 11945 } 11946 function detachFiberAfterEffects(fiber) { 11947 var alternate = fiber.alternate; 11948 null !== alternate && (fiber.alternate = null, detachFiberAfterEffects(alternate)); 11949 fiber.child = null; 11950 fiber.deletions = null; 11951 fiber.sibling = null; 11952 5 === fiber.tag && (alternate = fiber.stateNode, null !== alternate && detachDeletedInstance(alternate)); 11953 fiber.stateNode = null; 11954 fiber._debugOwner = null; 11955 fiber.return = null; 11956 fiber.dependencies = null; 11957 fiber.memoizedProps = null; 11958 fiber.memoizedState = null; 11959 fiber.pendingProps = null; 11960 fiber.stateNode = null; 11961 fiber.updateQueue = null; 11962 } 11963 function recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) { 11964 for (parent = parent.child; null !== parent; ) 11965 commitDeletionEffectsOnFiber( 11966 finishedRoot, 11967 nearestMountedAncestor, 11968 parent 11969 ), parent = parent.sibling; 11970 } 11971 function commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) { 11972 if (injectedHook && "function" === typeof injectedHook.onCommitFiberUnmount) 11973 try { 11974 injectedHook.onCommitFiberUnmount(rendererID, deletedFiber); 11975 } catch (err) { 11976 hasLoggedError || (hasLoggedError = true, console.error( 11977 "React instrumentation encountered an error: %o", 11978 err 11979 )); 11980 } 11981 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); 11982 switch (deletedFiber.tag) { 11983 case 26: 11984 offscreenSubtreeWasHidden || safelyDetachRef(deletedFiber, nearestMountedAncestor); 11985 recursivelyTraverseDeletionEffects( 11986 finishedRoot, 11987 nearestMountedAncestor, 11988 deletedFiber 11989 ); 11990 deletedFiber.memoizedState ? deletedFiber.memoizedState.count-- : deletedFiber.stateNode && (finishedRoot = deletedFiber.stateNode, finishedRoot.parentNode.removeChild(finishedRoot)); 11991 break; 11992 case 27: 11993 offscreenSubtreeWasHidden || safelyDetachRef(deletedFiber, nearestMountedAncestor); 11994 var prevHostParent = hostParent, prevHostParentIsContainer = hostParentIsContainer; 11995 isSingletonScope(deletedFiber.type) && (hostParent = deletedFiber.stateNode, hostParentIsContainer = false); 11996 recursivelyTraverseDeletionEffects( 11997 finishedRoot, 11998 nearestMountedAncestor, 11999 deletedFiber 12000 ); 12001 runWithFiberInDEV( 12002 deletedFiber, 12003 releaseSingletonInstance, 12004 deletedFiber.stateNode 12005 ); 12006 hostParent = prevHostParent; 12007 hostParentIsContainer = prevHostParentIsContainer; 12008 break; 12009 case 5: 12010 offscreenSubtreeWasHidden || safelyDetachRef(deletedFiber, nearestMountedAncestor); 12011 case 6: 12012 prevHostParent = hostParent; 12013 prevHostParentIsContainer = hostParentIsContainer; 12014 hostParent = null; 12015 recursivelyTraverseDeletionEffects( 12016 finishedRoot, 12017 nearestMountedAncestor, 12018 deletedFiber 12019 ); 12020 hostParent = prevHostParent; 12021 hostParentIsContainer = prevHostParentIsContainer; 12022 if (null !== hostParent) 12023 if (hostParentIsContainer) 12024 try { 12025 runWithFiberInDEV( 12026 deletedFiber, 12027 removeChildFromContainer, 12028 hostParent, 12029 deletedFiber.stateNode 12030 ); 12031 } catch (error2) { 12032 captureCommitPhaseError( 12033 deletedFiber, 12034 nearestMountedAncestor, 12035 error2 12036 ); 12037 } 12038 else 12039 try { 12040 runWithFiberInDEV( 12041 deletedFiber, 12042 removeChild, 12043 hostParent, 12044 deletedFiber.stateNode 12045 ); 12046 } catch (error2) { 12047 captureCommitPhaseError( 12048 deletedFiber, 12049 nearestMountedAncestor, 12050 error2 12051 ); 12052 } 12053 break; 12054 case 18: 12055 null !== hostParent && (hostParentIsContainer ? (finishedRoot = hostParent, clearHydrationBoundary( 12056 9 === finishedRoot.nodeType ? finishedRoot.body : "HTML" === finishedRoot.nodeName ? finishedRoot.ownerDocument.body : finishedRoot, 12057 deletedFiber.stateNode 12058 ), retryIfBlockedOn(finishedRoot)) : clearHydrationBoundary(hostParent, deletedFiber.stateNode)); 12059 break; 12060 case 4: 12061 prevHostParent = hostParent; 12062 prevHostParentIsContainer = hostParentIsContainer; 12063 hostParent = deletedFiber.stateNode.containerInfo; 12064 hostParentIsContainer = true; 12065 recursivelyTraverseDeletionEffects( 12066 finishedRoot, 12067 nearestMountedAncestor, 12068 deletedFiber 12069 ); 12070 hostParent = prevHostParent; 12071 hostParentIsContainer = prevHostParentIsContainer; 12072 break; 12073 case 0: 12074 case 11: 12075 case 14: 12076 case 15: 12077 commitHookEffectListUnmount( 12078 Insertion, 12079 deletedFiber, 12080 nearestMountedAncestor 12081 ); 12082 offscreenSubtreeWasHidden || commitHookLayoutUnmountEffects( 12083 deletedFiber, 12084 nearestMountedAncestor, 12085 Layout 12086 ); 12087 recursivelyTraverseDeletionEffects( 12088 finishedRoot, 12089 nearestMountedAncestor, 12090 deletedFiber 12091 ); 12092 break; 12093 case 1: 12094 offscreenSubtreeWasHidden || (safelyDetachRef(deletedFiber, nearestMountedAncestor), prevHostParent = deletedFiber.stateNode, "function" === typeof prevHostParent.componentWillUnmount && safelyCallComponentWillUnmount( 12095 deletedFiber, 12096 nearestMountedAncestor, 12097 prevHostParent 12098 )); 12099 recursivelyTraverseDeletionEffects( 12100 finishedRoot, 12101 nearestMountedAncestor, 12102 deletedFiber 12103 ); 12104 break; 12105 case 21: 12106 recursivelyTraverseDeletionEffects( 12107 finishedRoot, 12108 nearestMountedAncestor, 12109 deletedFiber 12110 ); 12111 break; 12112 case 22: 12113 offscreenSubtreeWasHidden = (prevHostParent = offscreenSubtreeWasHidden) || null !== deletedFiber.memoizedState; 12114 recursivelyTraverseDeletionEffects( 12115 finishedRoot, 12116 nearestMountedAncestor, 12117 deletedFiber 12118 ); 12119 offscreenSubtreeWasHidden = prevHostParent; 12120 break; 12121 default: 12122 recursivelyTraverseDeletionEffects( 12123 finishedRoot, 12124 nearestMountedAncestor, 12125 deletedFiber 12126 ); 12127 } 12128 (deletedFiber.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 12129 deletedFiber, 12130 componentEffectStartTime, 12131 componentEffectEndTime, 12132 componentEffectDuration, 12133 componentEffectErrors 12134 ); 12135 popComponentEffectStart(prevEffectStart); 12136 popComponentEffectDuration(prevEffectDuration); 12137 componentEffectErrors = prevEffectErrors; 12138 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 12139 } 12140 function commitActivityHydrationCallbacks(finishedRoot, finishedWork) { 12141 if (null === finishedWork.memoizedState && (finishedRoot = finishedWork.alternate, null !== finishedRoot && (finishedRoot = finishedRoot.memoizedState, null !== finishedRoot))) { 12142 finishedRoot = finishedRoot.dehydrated; 12143 try { 12144 runWithFiberInDEV( 12145 finishedWork, 12146 commitHydratedActivityInstance, 12147 finishedRoot 12148 ); 12149 } catch (error2) { 12150 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12151 } 12152 } 12153 } 12154 function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) { 12155 if (null === finishedWork.memoizedState && (finishedRoot = finishedWork.alternate, null !== finishedRoot && (finishedRoot = finishedRoot.memoizedState, null !== finishedRoot && (finishedRoot = finishedRoot.dehydrated, null !== finishedRoot)))) 12156 try { 12157 runWithFiberInDEV( 12158 finishedWork, 12159 commitHydratedSuspenseInstance, 12160 finishedRoot 12161 ); 12162 } catch (error2) { 12163 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12164 } 12165 } 12166 function getRetryCache(finishedWork) { 12167 switch (finishedWork.tag) { 12168 case 31: 12169 case 13: 12170 case 19: 12171 var retryCache = finishedWork.stateNode; 12172 null === retryCache && (retryCache = finishedWork.stateNode = new PossiblyWeakSet()); 12173 return retryCache; 12174 case 22: 12175 return finishedWork = finishedWork.stateNode, retryCache = finishedWork._retryCache, null === retryCache && (retryCache = finishedWork._retryCache = new PossiblyWeakSet()), retryCache; 12176 default: 12177 throw Error( 12178 "Unexpected Suspense handler tag (" + finishedWork.tag + "). This is a bug in React." 12179 ); 12180 } 12181 } 12182 function attachSuspenseRetryListeners(finishedWork, wakeables) { 12183 var retryCache = getRetryCache(finishedWork); 12184 wakeables.forEach(function(wakeable) { 12185 if (!retryCache.has(wakeable)) { 12186 retryCache.add(wakeable); 12187 if (isDevToolsPresent) 12188 if (null !== inProgressLanes && null !== inProgressRoot) 12189 restorePendingUpdaters(inProgressRoot, inProgressLanes); 12190 else 12191 throw Error( 12192 "Expected finished root and lanes to be set. This is a bug in React." 12193 ); 12194 var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable); 12195 wakeable.then(retry, retry); 12196 } 12197 }); 12198 } 12199 function recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) { 12200 var deletions = parentFiber.deletions; 12201 if (null !== deletions) 12202 for (var i3 = 0; i3 < deletions.length; i3++) { 12203 var root3 = root$jscomp$0, returnFiber = parentFiber, deletedFiber = deletions[i3], prevEffectStart = pushComponentEffectStart(), parent = returnFiber; 12204 a: for (; null !== parent; ) { 12205 switch (parent.tag) { 12206 case 27: 12207 if (isSingletonScope(parent.type)) { 12208 hostParent = parent.stateNode; 12209 hostParentIsContainer = false; 12210 break a; 12211 } 12212 break; 12213 case 5: 12214 hostParent = parent.stateNode; 12215 hostParentIsContainer = false; 12216 break a; 12217 case 3: 12218 case 4: 12219 hostParent = parent.stateNode.containerInfo; 12220 hostParentIsContainer = true; 12221 break a; 12222 } 12223 parent = parent.return; 12224 } 12225 if (null === hostParent) 12226 throw Error( 12227 "Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue." 12228 ); 12229 commitDeletionEffectsOnFiber(root3, returnFiber, deletedFiber); 12230 hostParent = null; 12231 hostParentIsContainer = false; 12232 (deletedFiber.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 12233 deletedFiber, 12234 componentEffectStartTime, 12235 componentEffectEndTime, 12236 "Unmount" 12237 ); 12238 popComponentEffectStart(prevEffectStart); 12239 root3 = deletedFiber; 12240 returnFiber = root3.alternate; 12241 null !== returnFiber && (returnFiber.return = null); 12242 root3.return = null; 12243 } 12244 if (parentFiber.subtreeFlags & 13886) 12245 for (parentFiber = parentFiber.child; null !== parentFiber; ) 12246 commitMutationEffectsOnFiber(parentFiber, root$jscomp$0), parentFiber = parentFiber.sibling; 12247 } 12248 function commitMutationEffectsOnFiber(finishedWork, root3) { 12249 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(), current2 = finishedWork.alternate, flags = finishedWork.flags; 12250 switch (finishedWork.tag) { 12251 case 0: 12252 case 11: 12253 case 14: 12254 case 15: 12255 recursivelyTraverseMutationEffects(root3, finishedWork); 12256 commitReconciliationEffects(finishedWork); 12257 flags & 4 && (commitHookEffectListUnmount( 12258 Insertion | HasEffect, 12259 finishedWork, 12260 finishedWork.return 12261 ), commitHookEffectListMount(Insertion | HasEffect, finishedWork), commitHookLayoutUnmountEffects( 12262 finishedWork, 12263 finishedWork.return, 12264 Layout | HasEffect 12265 )); 12266 break; 12267 case 1: 12268 recursivelyTraverseMutationEffects(root3, finishedWork); 12269 commitReconciliationEffects(finishedWork); 12270 flags & 512 && (offscreenSubtreeWasHidden || null === current2 || safelyDetachRef(current2, current2.return)); 12271 if (flags & 64 && offscreenSubtreeIsHidden && (flags = finishedWork.updateQueue, null !== flags && (current2 = flags.callbacks, null !== current2))) { 12272 var existingHiddenCallbacks = flags.shared.hiddenCallbacks; 12273 flags.shared.hiddenCallbacks = null === existingHiddenCallbacks ? current2 : existingHiddenCallbacks.concat(current2); 12274 } 12275 break; 12276 case 26: 12277 existingHiddenCallbacks = currentHoistableRoot; 12278 recursivelyTraverseMutationEffects(root3, finishedWork); 12279 commitReconciliationEffects(finishedWork); 12280 flags & 512 && (offscreenSubtreeWasHidden || null === current2 || safelyDetachRef(current2, current2.return)); 12281 if (flags & 4) { 12282 var currentResource = null !== current2 ? current2.memoizedState : null; 12283 flags = finishedWork.memoizedState; 12284 if (null === current2) 12285 if (null === flags) 12286 if (null === finishedWork.stateNode) { 12287 a: { 12288 flags = finishedWork.type; 12289 current2 = finishedWork.memoizedProps; 12290 existingHiddenCallbacks = existingHiddenCallbacks.ownerDocument || existingHiddenCallbacks; 12291 b: switch (flags) { 12292 case "title": 12293 currentResource = existingHiddenCallbacks.getElementsByTagName( 12294 "title" 12295 )[0]; 12296 if (!currentResource || currentResource[internalHoistableMarker] || currentResource[internalInstanceKey] || currentResource.namespaceURI === SVG_NAMESPACE || currentResource.hasAttribute("itemprop")) 12297 currentResource = existingHiddenCallbacks.createElement(flags), existingHiddenCallbacks.head.insertBefore( 12298 currentResource, 12299 existingHiddenCallbacks.querySelector( 12300 "head > title" 12301 ) 12302 ); 12303 setInitialProperties(currentResource, flags, current2); 12304 currentResource[internalInstanceKey] = finishedWork; 12305 markNodeAsHoistable(currentResource); 12306 flags = currentResource; 12307 break a; 12308 case "link": 12309 var maybeNodes = getHydratableHoistableCache( 12310 "link", 12311 "href", 12312 existingHiddenCallbacks 12313 ).get(flags + (current2.href || "")); 12314 if (maybeNodes) { 12315 for (var i3 = 0; i3 < maybeNodes.length; i3++) 12316 if (currentResource = maybeNodes[i3], currentResource.getAttribute("href") === (null == current2.href || "" === current2.href ? null : current2.href) && currentResource.getAttribute("rel") === (null == current2.rel ? null : current2.rel) && currentResource.getAttribute("title") === (null == current2.title ? null : current2.title) && currentResource.getAttribute("crossorigin") === (null == current2.crossOrigin ? null : current2.crossOrigin)) { 12317 maybeNodes.splice(i3, 1); 12318 break b; 12319 } 12320 } 12321 currentResource = existingHiddenCallbacks.createElement(flags); 12322 setInitialProperties(currentResource, flags, current2); 12323 existingHiddenCallbacks.head.appendChild( 12324 currentResource 12325 ); 12326 break; 12327 case "meta": 12328 if (maybeNodes = getHydratableHoistableCache( 12329 "meta", 12330 "content", 12331 existingHiddenCallbacks 12332 ).get(flags + (current2.content || ""))) { 12333 for (i3 = 0; i3 < maybeNodes.length; i3++) 12334 if (currentResource = maybeNodes[i3], checkAttributeStringCoercion( 12335 current2.content, 12336 "content" 12337 ), currentResource.getAttribute("content") === (null == current2.content ? null : "" + current2.content) && currentResource.getAttribute("name") === (null == current2.name ? null : current2.name) && currentResource.getAttribute("property") === (null == current2.property ? null : current2.property) && currentResource.getAttribute("http-equiv") === (null == current2.httpEquiv ? null : current2.httpEquiv) && currentResource.getAttribute("charset") === (null == current2.charSet ? null : current2.charSet)) { 12338 maybeNodes.splice(i3, 1); 12339 break b; 12340 } 12341 } 12342 currentResource = existingHiddenCallbacks.createElement(flags); 12343 setInitialProperties(currentResource, flags, current2); 12344 existingHiddenCallbacks.head.appendChild( 12345 currentResource 12346 ); 12347 break; 12348 default: 12349 throw Error( 12350 'getNodesForType encountered a type it did not expect: "' + flags + '". This is a bug in React.' 12351 ); 12352 } 12353 currentResource[internalInstanceKey] = finishedWork; 12354 markNodeAsHoistable(currentResource); 12355 flags = currentResource; 12356 } 12357 finishedWork.stateNode = flags; 12358 } else 12359 mountHoistable( 12360 existingHiddenCallbacks, 12361 finishedWork.type, 12362 finishedWork.stateNode 12363 ); 12364 else 12365 finishedWork.stateNode = acquireResource( 12366 existingHiddenCallbacks, 12367 flags, 12368 finishedWork.memoizedProps 12369 ); 12370 else 12371 currentResource !== flags ? (null === currentResource ? null !== current2.stateNode && (current2 = current2.stateNode, current2.parentNode.removeChild(current2)) : currentResource.count--, null === flags ? mountHoistable( 12372 existingHiddenCallbacks, 12373 finishedWork.type, 12374 finishedWork.stateNode 12375 ) : acquireResource( 12376 existingHiddenCallbacks, 12377 flags, 12378 finishedWork.memoizedProps 12379 )) : null === flags && null !== finishedWork.stateNode && commitHostUpdate( 12380 finishedWork, 12381 finishedWork.memoizedProps, 12382 current2.memoizedProps 12383 ); 12384 } 12385 break; 12386 case 27: 12387 recursivelyTraverseMutationEffects(root3, finishedWork); 12388 commitReconciliationEffects(finishedWork); 12389 flags & 512 && (offscreenSubtreeWasHidden || null === current2 || safelyDetachRef(current2, current2.return)); 12390 null !== current2 && flags & 4 && commitHostUpdate( 12391 finishedWork, 12392 finishedWork.memoizedProps, 12393 current2.memoizedProps 12394 ); 12395 break; 12396 case 5: 12397 recursivelyTraverseMutationEffects(root3, finishedWork); 12398 commitReconciliationEffects(finishedWork); 12399 flags & 512 && (offscreenSubtreeWasHidden || null === current2 || safelyDetachRef(current2, current2.return)); 12400 if (finishedWork.flags & 32) { 12401 existingHiddenCallbacks = finishedWork.stateNode; 12402 try { 12403 runWithFiberInDEV( 12404 finishedWork, 12405 resetTextContent, 12406 existingHiddenCallbacks 12407 ); 12408 } catch (error2) { 12409 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12410 } 12411 } 12412 flags & 4 && null != finishedWork.stateNode && (existingHiddenCallbacks = finishedWork.memoizedProps, commitHostUpdate( 12413 finishedWork, 12414 existingHiddenCallbacks, 12415 null !== current2 ? current2.memoizedProps : existingHiddenCallbacks 12416 )); 12417 flags & 1024 && (needsFormReset = true, "form" !== finishedWork.type && console.error( 12418 "Unexpected host component type. Expected a form. This is a bug in React." 12419 )); 12420 break; 12421 case 6: 12422 recursivelyTraverseMutationEffects(root3, finishedWork); 12423 commitReconciliationEffects(finishedWork); 12424 if (flags & 4) { 12425 if (null === finishedWork.stateNode) 12426 throw Error( 12427 "This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue." 12428 ); 12429 flags = finishedWork.memoizedProps; 12430 current2 = null !== current2 ? current2.memoizedProps : flags; 12431 existingHiddenCallbacks = finishedWork.stateNode; 12432 try { 12433 runWithFiberInDEV( 12434 finishedWork, 12435 commitTextUpdate, 12436 existingHiddenCallbacks, 12437 current2, 12438 flags 12439 ); 12440 } catch (error2) { 12441 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12442 } 12443 } 12444 break; 12445 case 3: 12446 existingHiddenCallbacks = pushNestedEffectDurations(); 12447 tagCaches = null; 12448 currentResource = currentHoistableRoot; 12449 currentHoistableRoot = getHoistableRoot(root3.containerInfo); 12450 recursivelyTraverseMutationEffects(root3, finishedWork); 12451 currentHoistableRoot = currentResource; 12452 commitReconciliationEffects(finishedWork); 12453 if (flags & 4 && null !== current2 && current2.memoizedState.isDehydrated) 12454 try { 12455 runWithFiberInDEV( 12456 finishedWork, 12457 commitHydratedContainer, 12458 root3.containerInfo 12459 ); 12460 } catch (error2) { 12461 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12462 } 12463 needsFormReset && (needsFormReset = false, recursivelyResetForms(finishedWork)); 12464 root3.effectDuration += popNestedEffectDurations( 12465 existingHiddenCallbacks 12466 ); 12467 break; 12468 case 4: 12469 flags = currentHoistableRoot; 12470 currentHoistableRoot = getHoistableRoot( 12471 finishedWork.stateNode.containerInfo 12472 ); 12473 recursivelyTraverseMutationEffects(root3, finishedWork); 12474 commitReconciliationEffects(finishedWork); 12475 currentHoistableRoot = flags; 12476 break; 12477 case 12: 12478 flags = pushNestedEffectDurations(); 12479 recursivelyTraverseMutationEffects(root3, finishedWork); 12480 commitReconciliationEffects(finishedWork); 12481 finishedWork.stateNode.effectDuration += bubbleNestedEffectDurations(flags); 12482 break; 12483 case 31: 12484 recursivelyTraverseMutationEffects(root3, finishedWork); 12485 commitReconciliationEffects(finishedWork); 12486 flags & 4 && (flags = finishedWork.updateQueue, null !== flags && (finishedWork.updateQueue = null, attachSuspenseRetryListeners(finishedWork, flags))); 12487 break; 12488 case 13: 12489 recursivelyTraverseMutationEffects(root3, finishedWork); 12490 commitReconciliationEffects(finishedWork); 12491 finishedWork.child.flags & 8192 && null !== finishedWork.memoizedState !== (null !== current2 && null !== current2.memoizedState) && (globalMostRecentFallbackTime = now$1()); 12492 flags & 4 && (flags = finishedWork.updateQueue, null !== flags && (finishedWork.updateQueue = null, attachSuspenseRetryListeners(finishedWork, flags))); 12493 break; 12494 case 22: 12495 existingHiddenCallbacks = null !== finishedWork.memoizedState; 12496 var wasHidden = null !== current2 && null !== current2.memoizedState, prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden, prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; 12497 offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || existingHiddenCallbacks; 12498 offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden; 12499 recursivelyTraverseMutationEffects(root3, finishedWork); 12500 offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden; 12501 offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden; 12502 wasHidden && !existingHiddenCallbacks && !prevOffscreenSubtreeIsHidden && !prevOffscreenSubtreeWasHidden && (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentReappeared( 12503 finishedWork, 12504 componentEffectStartTime, 12505 componentEffectEndTime 12506 ); 12507 commitReconciliationEffects(finishedWork); 12508 if (flags & 8192) 12509 a: for (root3 = finishedWork.stateNode, root3._visibility = existingHiddenCallbacks ? root3._visibility & ~OffscreenVisible : root3._visibility | OffscreenVisible, !existingHiddenCallbacks || null === current2 || wasHidden || offscreenSubtreeIsHidden || offscreenSubtreeWasHidden || (recursivelyTraverseDisappearLayoutEffects(finishedWork), (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 12510 finishedWork, 12511 componentEffectStartTime, 12512 componentEffectEndTime, 12513 "Disconnect" 12514 )), current2 = null, root3 = finishedWork; ; ) { 12515 if (5 === root3.tag || 26 === root3.tag) { 12516 if (null === current2) { 12517 wasHidden = current2 = root3; 12518 try { 12519 currentResource = wasHidden.stateNode, existingHiddenCallbacks ? runWithFiberInDEV( 12520 wasHidden, 12521 hideInstance, 12522 currentResource 12523 ) : runWithFiberInDEV( 12524 wasHidden, 12525 unhideInstance, 12526 wasHidden.stateNode, 12527 wasHidden.memoizedProps 12528 ); 12529 } catch (error2) { 12530 captureCommitPhaseError(wasHidden, wasHidden.return, error2); 12531 } 12532 } 12533 } else if (6 === root3.tag) { 12534 if (null === current2) { 12535 wasHidden = root3; 12536 try { 12537 maybeNodes = wasHidden.stateNode, existingHiddenCallbacks ? runWithFiberInDEV( 12538 wasHidden, 12539 hideTextInstance, 12540 maybeNodes 12541 ) : runWithFiberInDEV( 12542 wasHidden, 12543 unhideTextInstance, 12544 maybeNodes, 12545 wasHidden.memoizedProps 12546 ); 12547 } catch (error2) { 12548 captureCommitPhaseError(wasHidden, wasHidden.return, error2); 12549 } 12550 } 12551 } else if (18 === root3.tag) { 12552 if (null === current2) { 12553 wasHidden = root3; 12554 try { 12555 i3 = wasHidden.stateNode, existingHiddenCallbacks ? runWithFiberInDEV( 12556 wasHidden, 12557 hideDehydratedBoundary, 12558 i3 12559 ) : runWithFiberInDEV( 12560 wasHidden, 12561 unhideDehydratedBoundary, 12562 wasHidden.stateNode 12563 ); 12564 } catch (error2) { 12565 captureCommitPhaseError(wasHidden, wasHidden.return, error2); 12566 } 12567 } 12568 } else if ((22 !== root3.tag && 23 !== root3.tag || null === root3.memoizedState || root3 === finishedWork) && null !== root3.child) { 12569 root3.child.return = root3; 12570 root3 = root3.child; 12571 continue; 12572 } 12573 if (root3 === finishedWork) break a; 12574 for (; null === root3.sibling; ) { 12575 if (null === root3.return || root3.return === finishedWork) 12576 break a; 12577 current2 === root3 && (current2 = null); 12578 root3 = root3.return; 12579 } 12580 current2 === root3 && (current2 = null); 12581 root3.sibling.return = root3.return; 12582 root3 = root3.sibling; 12583 } 12584 flags & 4 && (flags = finishedWork.updateQueue, null !== flags && (current2 = flags.retryQueue, null !== current2 && (flags.retryQueue = null, attachSuspenseRetryListeners(finishedWork, current2)))); 12585 break; 12586 case 19: 12587 recursivelyTraverseMutationEffects(root3, finishedWork); 12588 commitReconciliationEffects(finishedWork); 12589 flags & 4 && (flags = finishedWork.updateQueue, null !== flags && (finishedWork.updateQueue = null, attachSuspenseRetryListeners(finishedWork, flags))); 12590 break; 12591 case 30: 12592 break; 12593 case 21: 12594 break; 12595 default: 12596 recursivelyTraverseMutationEffects(root3, finishedWork), commitReconciliationEffects(finishedWork); 12597 } 12598 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && ((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 12599 finishedWork, 12600 componentEffectStartTime, 12601 componentEffectEndTime, 12602 componentEffectDuration, 12603 componentEffectErrors 12604 ), null === finishedWork.alternate && null !== finishedWork.return && null !== finishedWork.return.alternate && 0.05 < componentEffectEndTime - componentEffectStartTime && (isHydratingParent( 12605 finishedWork.return.alternate, 12606 finishedWork.return 12607 ) || logComponentTrigger( 12608 finishedWork, 12609 componentEffectStartTime, 12610 componentEffectEndTime, 12611 "Mount" 12612 ))); 12613 popComponentEffectStart(prevEffectStart); 12614 popComponentEffectDuration(prevEffectDuration); 12615 componentEffectErrors = prevEffectErrors; 12616 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 12617 } 12618 function commitReconciliationEffects(finishedWork) { 12619 var flags = finishedWork.flags; 12620 if (flags & 2) { 12621 try { 12622 runWithFiberInDEV(finishedWork, commitPlacement, finishedWork); 12623 } catch (error2) { 12624 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12625 } 12626 finishedWork.flags &= -3; 12627 } 12628 flags & 4096 && (finishedWork.flags &= -4097); 12629 } 12630 function recursivelyResetForms(parentFiber) { 12631 if (parentFiber.subtreeFlags & 1024) 12632 for (parentFiber = parentFiber.child; null !== parentFiber; ) { 12633 var fiber = parentFiber; 12634 recursivelyResetForms(fiber); 12635 5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset(); 12636 parentFiber = parentFiber.sibling; 12637 } 12638 } 12639 function recursivelyTraverseLayoutEffects(root3, parentFiber) { 12640 if (parentFiber.subtreeFlags & 8772) 12641 for (parentFiber = parentFiber.child; null !== parentFiber; ) 12642 commitLayoutEffectOnFiber(root3, parentFiber.alternate, parentFiber), parentFiber = parentFiber.sibling; 12643 } 12644 function disappearLayoutEffects(finishedWork) { 12645 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); 12646 switch (finishedWork.tag) { 12647 case 0: 12648 case 11: 12649 case 14: 12650 case 15: 12651 commitHookLayoutUnmountEffects( 12652 finishedWork, 12653 finishedWork.return, 12654 Layout 12655 ); 12656 recursivelyTraverseDisappearLayoutEffects(finishedWork); 12657 break; 12658 case 1: 12659 safelyDetachRef(finishedWork, finishedWork.return); 12660 var instance = finishedWork.stateNode; 12661 "function" === typeof instance.componentWillUnmount && safelyCallComponentWillUnmount( 12662 finishedWork, 12663 finishedWork.return, 12664 instance 12665 ); 12666 recursivelyTraverseDisappearLayoutEffects(finishedWork); 12667 break; 12668 case 27: 12669 runWithFiberInDEV( 12670 finishedWork, 12671 releaseSingletonInstance, 12672 finishedWork.stateNode 12673 ); 12674 case 26: 12675 case 5: 12676 safelyDetachRef(finishedWork, finishedWork.return); 12677 recursivelyTraverseDisappearLayoutEffects(finishedWork); 12678 break; 12679 case 22: 12680 null === finishedWork.memoizedState && recursivelyTraverseDisappearLayoutEffects(finishedWork); 12681 break; 12682 case 30: 12683 recursivelyTraverseDisappearLayoutEffects(finishedWork); 12684 break; 12685 default: 12686 recursivelyTraverseDisappearLayoutEffects(finishedWork); 12687 } 12688 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 12689 finishedWork, 12690 componentEffectStartTime, 12691 componentEffectEndTime, 12692 componentEffectDuration, 12693 componentEffectErrors 12694 ); 12695 popComponentEffectStart(prevEffectStart); 12696 popComponentEffectDuration(prevEffectDuration); 12697 componentEffectErrors = prevEffectErrors; 12698 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 12699 } 12700 function recursivelyTraverseDisappearLayoutEffects(parentFiber) { 12701 for (parentFiber = parentFiber.child; null !== parentFiber; ) 12702 disappearLayoutEffects(parentFiber), parentFiber = parentFiber.sibling; 12703 } 12704 function reappearLayoutEffects(finishedRoot, current2, finishedWork, includeWorkInProgressEffects) { 12705 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(), flags = finishedWork.flags; 12706 switch (finishedWork.tag) { 12707 case 0: 12708 case 11: 12709 case 15: 12710 recursivelyTraverseReappearLayoutEffects( 12711 finishedRoot, 12712 finishedWork, 12713 includeWorkInProgressEffects 12714 ); 12715 commitHookLayoutEffects(finishedWork, Layout); 12716 break; 12717 case 1: 12718 recursivelyTraverseReappearLayoutEffects( 12719 finishedRoot, 12720 finishedWork, 12721 includeWorkInProgressEffects 12722 ); 12723 current2 = finishedWork.stateNode; 12724 "function" === typeof current2.componentDidMount && runWithFiberInDEV( 12725 finishedWork, 12726 callComponentDidMountInDEV, 12727 finishedWork, 12728 current2 12729 ); 12730 current2 = finishedWork.updateQueue; 12731 if (null !== current2) { 12732 finishedRoot = finishedWork.stateNode; 12733 try { 12734 runWithFiberInDEV( 12735 finishedWork, 12736 commitHiddenCallbacks, 12737 current2, 12738 finishedRoot 12739 ); 12740 } catch (error2) { 12741 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12742 } 12743 } 12744 includeWorkInProgressEffects && flags & 64 && commitClassCallbacks(finishedWork); 12745 safelyAttachRef(finishedWork, finishedWork.return); 12746 break; 12747 case 27: 12748 commitHostSingletonAcquisition(finishedWork); 12749 case 26: 12750 case 5: 12751 recursivelyTraverseReappearLayoutEffects( 12752 finishedRoot, 12753 finishedWork, 12754 includeWorkInProgressEffects 12755 ); 12756 includeWorkInProgressEffects && null === current2 && flags & 4 && commitHostMount(finishedWork); 12757 safelyAttachRef(finishedWork, finishedWork.return); 12758 break; 12759 case 12: 12760 if (includeWorkInProgressEffects && flags & 4) { 12761 flags = pushNestedEffectDurations(); 12762 recursivelyTraverseReappearLayoutEffects( 12763 finishedRoot, 12764 finishedWork, 12765 includeWorkInProgressEffects 12766 ); 12767 includeWorkInProgressEffects = finishedWork.stateNode; 12768 includeWorkInProgressEffects.effectDuration += bubbleNestedEffectDurations(flags); 12769 try { 12770 runWithFiberInDEV( 12771 finishedWork, 12772 commitProfiler, 12773 finishedWork, 12774 current2, 12775 commitStartTime, 12776 includeWorkInProgressEffects.effectDuration 12777 ); 12778 } catch (error2) { 12779 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12780 } 12781 } else 12782 recursivelyTraverseReappearLayoutEffects( 12783 finishedRoot, 12784 finishedWork, 12785 includeWorkInProgressEffects 12786 ); 12787 break; 12788 case 31: 12789 recursivelyTraverseReappearLayoutEffects( 12790 finishedRoot, 12791 finishedWork, 12792 includeWorkInProgressEffects 12793 ); 12794 includeWorkInProgressEffects && flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork); 12795 break; 12796 case 13: 12797 recursivelyTraverseReappearLayoutEffects( 12798 finishedRoot, 12799 finishedWork, 12800 includeWorkInProgressEffects 12801 ); 12802 includeWorkInProgressEffects && flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork); 12803 break; 12804 case 22: 12805 null === finishedWork.memoizedState && recursivelyTraverseReappearLayoutEffects( 12806 finishedRoot, 12807 finishedWork, 12808 includeWorkInProgressEffects 12809 ); 12810 safelyAttachRef(finishedWork, finishedWork.return); 12811 break; 12812 case 30: 12813 break; 12814 default: 12815 recursivelyTraverseReappearLayoutEffects( 12816 finishedRoot, 12817 finishedWork, 12818 includeWorkInProgressEffects 12819 ); 12820 } 12821 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 12822 finishedWork, 12823 componentEffectStartTime, 12824 componentEffectEndTime, 12825 componentEffectDuration, 12826 componentEffectErrors 12827 ); 12828 popComponentEffectStart(prevEffectStart); 12829 popComponentEffectDuration(prevEffectDuration); 12830 componentEffectErrors = prevEffectErrors; 12831 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 12832 } 12833 function recursivelyTraverseReappearLayoutEffects(finishedRoot, parentFiber, includeWorkInProgressEffects) { 12834 includeWorkInProgressEffects = includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772); 12835 for (parentFiber = parentFiber.child; null !== parentFiber; ) 12836 reappearLayoutEffects( 12837 finishedRoot, 12838 parentFiber.alternate, 12839 parentFiber, 12840 includeWorkInProgressEffects 12841 ), parentFiber = parentFiber.sibling; 12842 } 12843 function commitOffscreenPassiveMountEffects(current2, finishedWork) { 12844 var previousCache = null; 12845 null !== current2 && null !== current2.memoizedState && null !== current2.memoizedState.cachePool && (previousCache = current2.memoizedState.cachePool.pool); 12846 current2 = null; 12847 null !== finishedWork.memoizedState && null !== finishedWork.memoizedState.cachePool && (current2 = finishedWork.memoizedState.cachePool.pool); 12848 current2 !== previousCache && (null != current2 && retainCache(current2), null != previousCache && releaseCache(previousCache)); 12849 } 12850 function commitCachePassiveMountEffect(current2, finishedWork) { 12851 current2 = null; 12852 null !== finishedWork.alternate && (current2 = finishedWork.alternate.memoizedState.cache); 12853 finishedWork = finishedWork.memoizedState.cache; 12854 finishedWork !== current2 && (retainCache(finishedWork), null != current2 && releaseCache(current2)); 12855 } 12856 function recursivelyTraversePassiveMountEffects(root3, parentFiber, committedLanes, committedTransitions, endTime) { 12857 if (parentFiber.subtreeFlags & 10256 || 0 !== parentFiber.actualDuration && (null === parentFiber.alternate || parentFiber.alternate.child !== parentFiber.child)) 12858 for (parentFiber = parentFiber.child; null !== parentFiber; ) { 12859 var nextSibling = parentFiber.sibling; 12860 commitPassiveMountOnFiber( 12861 root3, 12862 parentFiber, 12863 committedLanes, 12864 committedTransitions, 12865 null !== nextSibling ? nextSibling.actualStartTime : endTime 12866 ); 12867 parentFiber = nextSibling; 12868 } 12869 } 12870 function commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions, endTime) { 12871 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(), prevDeepEquality = alreadyWarnedForDeepEquality, flags = finishedWork.flags; 12872 switch (finishedWork.tag) { 12873 case 0: 12874 case 11: 12875 case 15: 12876 (finishedWork.mode & ProfileMode) !== NoMode && 0 < finishedWork.actualStartTime && 0 !== (finishedWork.flags & 1) && logComponentRender( 12877 finishedWork, 12878 finishedWork.actualStartTime, 12879 endTime, 12880 inHydratedSubtree, 12881 committedLanes 12882 ); 12883 recursivelyTraversePassiveMountEffects( 12884 finishedRoot, 12885 finishedWork, 12886 committedLanes, 12887 committedTransitions, 12888 endTime 12889 ); 12890 flags & 2048 && commitHookPassiveMountEffects(finishedWork, Passive | HasEffect); 12891 break; 12892 case 1: 12893 (finishedWork.mode & ProfileMode) !== NoMode && 0 < finishedWork.actualStartTime && (0 !== (finishedWork.flags & 128) ? logComponentErrored( 12894 finishedWork, 12895 finishedWork.actualStartTime, 12896 endTime, 12897 [] 12898 ) : 0 !== (finishedWork.flags & 1) && logComponentRender( 12899 finishedWork, 12900 finishedWork.actualStartTime, 12901 endTime, 12902 inHydratedSubtree, 12903 committedLanes 12904 )); 12905 recursivelyTraversePassiveMountEffects( 12906 finishedRoot, 12907 finishedWork, 12908 committedLanes, 12909 committedTransitions, 12910 endTime 12911 ); 12912 break; 12913 case 3: 12914 var prevProfilerEffectDuration = pushNestedEffectDurations(), wasInHydratedSubtree = inHydratedSubtree; 12915 inHydratedSubtree = null !== finishedWork.alternate && finishedWork.alternate.memoizedState.isDehydrated && 0 === (finishedWork.flags & 256); 12916 recursivelyTraversePassiveMountEffects( 12917 finishedRoot, 12918 finishedWork, 12919 committedLanes, 12920 committedTransitions, 12921 endTime 12922 ); 12923 inHydratedSubtree = wasInHydratedSubtree; 12924 flags & 2048 && (committedLanes = null, null !== finishedWork.alternate && (committedLanes = finishedWork.alternate.memoizedState.cache), committedTransitions = finishedWork.memoizedState.cache, committedTransitions !== committedLanes && (retainCache(committedTransitions), null != committedLanes && releaseCache(committedLanes))); 12925 finishedRoot.passiveEffectDuration += popNestedEffectDurations( 12926 prevProfilerEffectDuration 12927 ); 12928 break; 12929 case 12: 12930 if (flags & 2048) { 12931 flags = pushNestedEffectDurations(); 12932 recursivelyTraversePassiveMountEffects( 12933 finishedRoot, 12934 finishedWork, 12935 committedLanes, 12936 committedTransitions, 12937 endTime 12938 ); 12939 finishedRoot = finishedWork.stateNode; 12940 finishedRoot.passiveEffectDuration += bubbleNestedEffectDurations(flags); 12941 try { 12942 runWithFiberInDEV( 12943 finishedWork, 12944 commitProfilerPostCommitImpl, 12945 finishedWork, 12946 finishedWork.alternate, 12947 commitStartTime, 12948 finishedRoot.passiveEffectDuration 12949 ); 12950 } catch (error2) { 12951 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 12952 } 12953 } else 12954 recursivelyTraversePassiveMountEffects( 12955 finishedRoot, 12956 finishedWork, 12957 committedLanes, 12958 committedTransitions, 12959 endTime 12960 ); 12961 break; 12962 case 31: 12963 flags = inHydratedSubtree; 12964 prevProfilerEffectDuration = null !== finishedWork.alternate ? finishedWork.alternate.memoizedState : null; 12965 wasInHydratedSubtree = finishedWork.memoizedState; 12966 null !== prevProfilerEffectDuration && null === wasInHydratedSubtree ? (wasInHydratedSubtree = finishedWork.deletions, null !== wasInHydratedSubtree && 0 < wasInHydratedSubtree.length && 18 === wasInHydratedSubtree[0].tag ? (inHydratedSubtree = false, prevProfilerEffectDuration = prevProfilerEffectDuration.hydrationErrors, null !== prevProfilerEffectDuration && logComponentErrored( 12967 finishedWork, 12968 finishedWork.actualStartTime, 12969 endTime, 12970 prevProfilerEffectDuration 12971 )) : inHydratedSubtree = true) : inHydratedSubtree = false; 12972 recursivelyTraversePassiveMountEffects( 12973 finishedRoot, 12974 finishedWork, 12975 committedLanes, 12976 committedTransitions, 12977 endTime 12978 ); 12979 inHydratedSubtree = flags; 12980 break; 12981 case 13: 12982 flags = inHydratedSubtree; 12983 prevProfilerEffectDuration = null !== finishedWork.alternate ? finishedWork.alternate.memoizedState : null; 12984 wasInHydratedSubtree = finishedWork.memoizedState; 12985 null === prevProfilerEffectDuration || null === prevProfilerEffectDuration.dehydrated || null !== wasInHydratedSubtree && null !== wasInHydratedSubtree.dehydrated ? inHydratedSubtree = false : (wasInHydratedSubtree = finishedWork.deletions, null !== wasInHydratedSubtree && 0 < wasInHydratedSubtree.length && 18 === wasInHydratedSubtree[0].tag ? (inHydratedSubtree = false, prevProfilerEffectDuration = prevProfilerEffectDuration.hydrationErrors, null !== prevProfilerEffectDuration && logComponentErrored( 12986 finishedWork, 12987 finishedWork.actualStartTime, 12988 endTime, 12989 prevProfilerEffectDuration 12990 )) : inHydratedSubtree = true); 12991 recursivelyTraversePassiveMountEffects( 12992 finishedRoot, 12993 finishedWork, 12994 committedLanes, 12995 committedTransitions, 12996 endTime 12997 ); 12998 inHydratedSubtree = flags; 12999 break; 13000 case 23: 13001 break; 13002 case 22: 13003 wasInHydratedSubtree = finishedWork.stateNode; 13004 prevProfilerEffectDuration = finishedWork.alternate; 13005 null !== finishedWork.memoizedState ? wasInHydratedSubtree._visibility & OffscreenPassiveEffectsConnected ? recursivelyTraversePassiveMountEffects( 13006 finishedRoot, 13007 finishedWork, 13008 committedLanes, 13009 committedTransitions, 13010 endTime 13011 ) : recursivelyTraverseAtomicPassiveEffects( 13012 finishedRoot, 13013 finishedWork, 13014 committedLanes, 13015 committedTransitions, 13016 endTime 13017 ) : wasInHydratedSubtree._visibility & OffscreenPassiveEffectsConnected ? recursivelyTraversePassiveMountEffects( 13018 finishedRoot, 13019 finishedWork, 13020 committedLanes, 13021 committedTransitions, 13022 endTime 13023 ) : (wasInHydratedSubtree._visibility |= OffscreenPassiveEffectsConnected, recursivelyTraverseReconnectPassiveEffects( 13024 finishedRoot, 13025 finishedWork, 13026 committedLanes, 13027 committedTransitions, 13028 0 !== (finishedWork.subtreeFlags & 10256) || 0 !== finishedWork.actualDuration && (null === finishedWork.alternate || finishedWork.alternate.child !== finishedWork.child), 13029 endTime 13030 ), (finishedWork.mode & ProfileMode) === NoMode || inHydratedSubtree || (finishedRoot = finishedWork.actualStartTime, 0 <= finishedRoot && 0.05 < endTime - finishedRoot && logComponentReappeared(finishedWork, finishedRoot, endTime), 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentReappeared( 13031 finishedWork, 13032 componentEffectStartTime, 13033 componentEffectEndTime 13034 ))); 13035 flags & 2048 && commitOffscreenPassiveMountEffects( 13036 prevProfilerEffectDuration, 13037 finishedWork 13038 ); 13039 break; 13040 case 24: 13041 recursivelyTraversePassiveMountEffects( 13042 finishedRoot, 13043 finishedWork, 13044 committedLanes, 13045 committedTransitions, 13046 endTime 13047 ); 13048 flags & 2048 && commitCachePassiveMountEffect(finishedWork.alternate, finishedWork); 13049 break; 13050 default: 13051 recursivelyTraversePassiveMountEffects( 13052 finishedRoot, 13053 finishedWork, 13054 committedLanes, 13055 committedTransitions, 13056 endTime 13057 ); 13058 } 13059 if ((finishedWork.mode & ProfileMode) !== NoMode) { 13060 if (finishedRoot = !inHydratedSubtree && null === finishedWork.alternate && null !== finishedWork.return && null !== finishedWork.return.alternate) 13061 committedLanes = finishedWork.actualStartTime, 0 <= committedLanes && 0.05 < endTime - committedLanes && logComponentTrigger( 13062 finishedWork, 13063 committedLanes, 13064 endTime, 13065 "Mount" 13066 ); 13067 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && ((componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 13068 finishedWork, 13069 componentEffectStartTime, 13070 componentEffectEndTime, 13071 componentEffectDuration, 13072 componentEffectErrors 13073 ), finishedRoot && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 13074 finishedWork, 13075 componentEffectStartTime, 13076 componentEffectEndTime, 13077 "Mount" 13078 )); 13079 } 13080 popComponentEffectStart(prevEffectStart); 13081 popComponentEffectDuration(prevEffectDuration); 13082 componentEffectErrors = prevEffectErrors; 13083 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 13084 alreadyWarnedForDeepEquality = prevDeepEquality; 13085 } 13086 function recursivelyTraverseReconnectPassiveEffects(finishedRoot, parentFiber, committedLanes, committedTransitions, includeWorkInProgressEffects, endTime) { 13087 includeWorkInProgressEffects = includeWorkInProgressEffects && (0 !== (parentFiber.subtreeFlags & 10256) || 0 !== parentFiber.actualDuration && (null === parentFiber.alternate || parentFiber.alternate.child !== parentFiber.child)); 13088 for (parentFiber = parentFiber.child; null !== parentFiber; ) { 13089 var nextSibling = parentFiber.sibling; 13090 reconnectPassiveEffects( 13091 finishedRoot, 13092 parentFiber, 13093 committedLanes, 13094 committedTransitions, 13095 includeWorkInProgressEffects, 13096 null !== nextSibling ? nextSibling.actualStartTime : endTime 13097 ); 13098 parentFiber = nextSibling; 13099 } 13100 } 13101 function reconnectPassiveEffects(finishedRoot, finishedWork, committedLanes, committedTransitions, includeWorkInProgressEffects, endTime) { 13102 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(), prevDeepEquality = alreadyWarnedForDeepEquality; 13103 includeWorkInProgressEffects && (finishedWork.mode & ProfileMode) !== NoMode && 0 < finishedWork.actualStartTime && 0 !== (finishedWork.flags & 1) && logComponentRender( 13104 finishedWork, 13105 finishedWork.actualStartTime, 13106 endTime, 13107 inHydratedSubtree, 13108 committedLanes 13109 ); 13110 var flags = finishedWork.flags; 13111 switch (finishedWork.tag) { 13112 case 0: 13113 case 11: 13114 case 15: 13115 recursivelyTraverseReconnectPassiveEffects( 13116 finishedRoot, 13117 finishedWork, 13118 committedLanes, 13119 committedTransitions, 13120 includeWorkInProgressEffects, 13121 endTime 13122 ); 13123 commitHookPassiveMountEffects(finishedWork, Passive); 13124 break; 13125 case 23: 13126 break; 13127 case 22: 13128 var _instance2 = finishedWork.stateNode; 13129 null !== finishedWork.memoizedState ? _instance2._visibility & OffscreenPassiveEffectsConnected ? recursivelyTraverseReconnectPassiveEffects( 13130 finishedRoot, 13131 finishedWork, 13132 committedLanes, 13133 committedTransitions, 13134 includeWorkInProgressEffects, 13135 endTime 13136 ) : recursivelyTraverseAtomicPassiveEffects( 13137 finishedRoot, 13138 finishedWork, 13139 committedLanes, 13140 committedTransitions, 13141 endTime 13142 ) : (_instance2._visibility |= OffscreenPassiveEffectsConnected, recursivelyTraverseReconnectPassiveEffects( 13143 finishedRoot, 13144 finishedWork, 13145 committedLanes, 13146 committedTransitions, 13147 includeWorkInProgressEffects, 13148 endTime 13149 )); 13150 includeWorkInProgressEffects && flags & 2048 && commitOffscreenPassiveMountEffects( 13151 finishedWork.alternate, 13152 finishedWork 13153 ); 13154 break; 13155 case 24: 13156 recursivelyTraverseReconnectPassiveEffects( 13157 finishedRoot, 13158 finishedWork, 13159 committedLanes, 13160 committedTransitions, 13161 includeWorkInProgressEffects, 13162 endTime 13163 ); 13164 includeWorkInProgressEffects && flags & 2048 && commitCachePassiveMountEffect(finishedWork.alternate, finishedWork); 13165 break; 13166 default: 13167 recursivelyTraverseReconnectPassiveEffects( 13168 finishedRoot, 13169 finishedWork, 13170 committedLanes, 13171 committedTransitions, 13172 includeWorkInProgressEffects, 13173 endTime 13174 ); 13175 } 13176 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 13177 finishedWork, 13178 componentEffectStartTime, 13179 componentEffectEndTime, 13180 componentEffectDuration, 13181 componentEffectErrors 13182 ); 13183 popComponentEffectStart(prevEffectStart); 13184 popComponentEffectDuration(prevEffectDuration); 13185 componentEffectErrors = prevEffectErrors; 13186 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 13187 alreadyWarnedForDeepEquality = prevDeepEquality; 13188 } 13189 function recursivelyTraverseAtomicPassiveEffects(finishedRoot$jscomp$0, parentFiber, committedLanes$jscomp$0, committedTransitions$jscomp$0, endTime$jscomp$0) { 13190 if (parentFiber.subtreeFlags & 10256 || 0 !== parentFiber.actualDuration && (null === parentFiber.alternate || parentFiber.alternate.child !== parentFiber.child)) 13191 for (var child = parentFiber.child; null !== child; ) { 13192 parentFiber = child.sibling; 13193 var finishedRoot = finishedRoot$jscomp$0, committedLanes = committedLanes$jscomp$0, committedTransitions = committedTransitions$jscomp$0, endTime = null !== parentFiber ? parentFiber.actualStartTime : endTime$jscomp$0, prevDeepEquality = alreadyWarnedForDeepEquality; 13194 (child.mode & ProfileMode) !== NoMode && 0 < child.actualStartTime && 0 !== (child.flags & 1) && logComponentRender( 13195 child, 13196 child.actualStartTime, 13197 endTime, 13198 inHydratedSubtree, 13199 committedLanes 13200 ); 13201 var flags = child.flags; 13202 switch (child.tag) { 13203 case 22: 13204 recursivelyTraverseAtomicPassiveEffects( 13205 finishedRoot, 13206 child, 13207 committedLanes, 13208 committedTransitions, 13209 endTime 13210 ); 13211 flags & 2048 && commitOffscreenPassiveMountEffects(child.alternate, child); 13212 break; 13213 case 24: 13214 recursivelyTraverseAtomicPassiveEffects( 13215 finishedRoot, 13216 child, 13217 committedLanes, 13218 committedTransitions, 13219 endTime 13220 ); 13221 flags & 2048 && commitCachePassiveMountEffect(child.alternate, child); 13222 break; 13223 default: 13224 recursivelyTraverseAtomicPassiveEffects( 13225 finishedRoot, 13226 child, 13227 committedLanes, 13228 committedTransitions, 13229 endTime 13230 ); 13231 } 13232 alreadyWarnedForDeepEquality = prevDeepEquality; 13233 child = parentFiber; 13234 } 13235 } 13236 function recursivelyAccumulateSuspenseyCommit(parentFiber, committedLanes, suspendedState) { 13237 if (parentFiber.subtreeFlags & suspenseyCommitFlag) 13238 for (parentFiber = parentFiber.child; null !== parentFiber; ) 13239 accumulateSuspenseyCommitOnFiber( 13240 parentFiber, 13241 committedLanes, 13242 suspendedState 13243 ), parentFiber = parentFiber.sibling; 13244 } 13245 function accumulateSuspenseyCommitOnFiber(fiber, committedLanes, suspendedState) { 13246 switch (fiber.tag) { 13247 case 26: 13248 recursivelyAccumulateSuspenseyCommit( 13249 fiber, 13250 committedLanes, 13251 suspendedState 13252 ); 13253 fiber.flags & suspenseyCommitFlag && null !== fiber.memoizedState && suspendResource( 13254 suspendedState, 13255 currentHoistableRoot, 13256 fiber.memoizedState, 13257 fiber.memoizedProps 13258 ); 13259 break; 13260 case 5: 13261 recursivelyAccumulateSuspenseyCommit( 13262 fiber, 13263 committedLanes, 13264 suspendedState 13265 ); 13266 break; 13267 case 3: 13268 case 4: 13269 var previousHoistableRoot = currentHoistableRoot; 13270 currentHoistableRoot = getHoistableRoot( 13271 fiber.stateNode.containerInfo 13272 ); 13273 recursivelyAccumulateSuspenseyCommit( 13274 fiber, 13275 committedLanes, 13276 suspendedState 13277 ); 13278 currentHoistableRoot = previousHoistableRoot; 13279 break; 13280 case 22: 13281 null === fiber.memoizedState && (previousHoistableRoot = fiber.alternate, null !== previousHoistableRoot && null !== previousHoistableRoot.memoizedState ? (previousHoistableRoot = suspenseyCommitFlag, suspenseyCommitFlag = 16777216, recursivelyAccumulateSuspenseyCommit( 13282 fiber, 13283 committedLanes, 13284 suspendedState 13285 ), suspenseyCommitFlag = previousHoistableRoot) : recursivelyAccumulateSuspenseyCommit( 13286 fiber, 13287 committedLanes, 13288 suspendedState 13289 )); 13290 break; 13291 default: 13292 recursivelyAccumulateSuspenseyCommit( 13293 fiber, 13294 committedLanes, 13295 suspendedState 13296 ); 13297 } 13298 } 13299 function detachAlternateSiblings(parentFiber) { 13300 var previousFiber = parentFiber.alternate; 13301 if (null !== previousFiber && (parentFiber = previousFiber.child, null !== parentFiber)) { 13302 previousFiber.child = null; 13303 do 13304 previousFiber = parentFiber.sibling, parentFiber.sibling = null, parentFiber = previousFiber; 13305 while (null !== parentFiber); 13306 } 13307 } 13308 function recursivelyTraversePassiveUnmountEffects(parentFiber) { 13309 var deletions = parentFiber.deletions; 13310 if (0 !== (parentFiber.flags & 16)) { 13311 if (null !== deletions) 13312 for (var i3 = 0; i3 < deletions.length; i3++) { 13313 var childToDelete = deletions[i3], prevEffectStart = pushComponentEffectStart(); 13314 nextEffect = childToDelete; 13315 commitPassiveUnmountEffectsInsideOfDeletedTree_begin( 13316 childToDelete, 13317 parentFiber 13318 ); 13319 (childToDelete.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 13320 childToDelete, 13321 componentEffectStartTime, 13322 componentEffectEndTime, 13323 "Unmount" 13324 ); 13325 popComponentEffectStart(prevEffectStart); 13326 } 13327 detachAlternateSiblings(parentFiber); 13328 } 13329 if (parentFiber.subtreeFlags & 10256) 13330 for (parentFiber = parentFiber.child; null !== parentFiber; ) 13331 commitPassiveUnmountOnFiber(parentFiber), parentFiber = parentFiber.sibling; 13332 } 13333 function commitPassiveUnmountOnFiber(finishedWork) { 13334 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); 13335 switch (finishedWork.tag) { 13336 case 0: 13337 case 11: 13338 case 15: 13339 recursivelyTraversePassiveUnmountEffects(finishedWork); 13340 finishedWork.flags & 2048 && commitHookPassiveUnmountEffects( 13341 finishedWork, 13342 finishedWork.return, 13343 Passive | HasEffect 13344 ); 13345 break; 13346 case 3: 13347 var prevProfilerEffectDuration = pushNestedEffectDurations(); 13348 recursivelyTraversePassiveUnmountEffects(finishedWork); 13349 finishedWork.stateNode.passiveEffectDuration += popNestedEffectDurations(prevProfilerEffectDuration); 13350 break; 13351 case 12: 13352 prevProfilerEffectDuration = pushNestedEffectDurations(); 13353 recursivelyTraversePassiveUnmountEffects(finishedWork); 13354 finishedWork.stateNode.passiveEffectDuration += bubbleNestedEffectDurations(prevProfilerEffectDuration); 13355 break; 13356 case 22: 13357 prevProfilerEffectDuration = finishedWork.stateNode; 13358 null !== finishedWork.memoizedState && prevProfilerEffectDuration._visibility & OffscreenPassiveEffectsConnected && (null === finishedWork.return || 13 !== finishedWork.return.tag) ? (prevProfilerEffectDuration._visibility &= ~OffscreenPassiveEffectsConnected, recursivelyTraverseDisconnectPassiveEffects(finishedWork), (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 13359 finishedWork, 13360 componentEffectStartTime, 13361 componentEffectEndTime, 13362 "Disconnect" 13363 )) : recursivelyTraversePassiveUnmountEffects(finishedWork); 13364 break; 13365 default: 13366 recursivelyTraversePassiveUnmountEffects(finishedWork); 13367 } 13368 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 13369 finishedWork, 13370 componentEffectStartTime, 13371 componentEffectEndTime, 13372 componentEffectDuration, 13373 componentEffectErrors 13374 ); 13375 popComponentEffectStart(prevEffectStart); 13376 popComponentEffectDuration(prevEffectDuration); 13377 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 13378 componentEffectErrors = prevEffectErrors; 13379 } 13380 function recursivelyTraverseDisconnectPassiveEffects(parentFiber) { 13381 var deletions = parentFiber.deletions; 13382 if (0 !== (parentFiber.flags & 16)) { 13383 if (null !== deletions) 13384 for (var i3 = 0; i3 < deletions.length; i3++) { 13385 var childToDelete = deletions[i3], prevEffectStart = pushComponentEffectStart(); 13386 nextEffect = childToDelete; 13387 commitPassiveUnmountEffectsInsideOfDeletedTree_begin( 13388 childToDelete, 13389 parentFiber 13390 ); 13391 (childToDelete.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && 0.05 < componentEffectEndTime - componentEffectStartTime && logComponentTrigger( 13392 childToDelete, 13393 componentEffectStartTime, 13394 componentEffectEndTime, 13395 "Unmount" 13396 ); 13397 popComponentEffectStart(prevEffectStart); 13398 } 13399 detachAlternateSiblings(parentFiber); 13400 } 13401 for (parentFiber = parentFiber.child; null !== parentFiber; ) 13402 disconnectPassiveEffect(parentFiber), parentFiber = parentFiber.sibling; 13403 } 13404 function disconnectPassiveEffect(finishedWork) { 13405 var prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); 13406 switch (finishedWork.tag) { 13407 case 0: 13408 case 11: 13409 case 15: 13410 commitHookPassiveUnmountEffects( 13411 finishedWork, 13412 finishedWork.return, 13413 Passive 13414 ); 13415 recursivelyTraverseDisconnectPassiveEffects(finishedWork); 13416 break; 13417 case 22: 13418 var instance = finishedWork.stateNode; 13419 instance._visibility & OffscreenPassiveEffectsConnected && (instance._visibility &= ~OffscreenPassiveEffectsConnected, recursivelyTraverseDisconnectPassiveEffects(finishedWork)); 13420 break; 13421 default: 13422 recursivelyTraverseDisconnectPassiveEffects(finishedWork); 13423 } 13424 (finishedWork.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 13425 finishedWork, 13426 componentEffectStartTime, 13427 componentEffectEndTime, 13428 componentEffectDuration, 13429 componentEffectErrors 13430 ); 13431 popComponentEffectStart(prevEffectStart); 13432 popComponentEffectDuration(prevEffectDuration); 13433 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 13434 componentEffectErrors = prevEffectErrors; 13435 } 13436 function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor$jscomp$0) { 13437 for (; null !== nextEffect; ) { 13438 var fiber = nextEffect, current2 = fiber, nearestMountedAncestor = nearestMountedAncestor$jscomp$0, prevEffectStart = pushComponentEffectStart(), prevEffectDuration = pushComponentEffectDuration(), prevEffectErrors = pushComponentEffectErrors(), prevEffectDidSpawnUpdate = pushComponentEffectDidSpawnUpdate(); 13439 switch (current2.tag) { 13440 case 0: 13441 case 11: 13442 case 15: 13443 commitHookPassiveUnmountEffects( 13444 current2, 13445 nearestMountedAncestor, 13446 Passive 13447 ); 13448 break; 13449 case 23: 13450 case 22: 13451 null !== current2.memoizedState && null !== current2.memoizedState.cachePool && (nearestMountedAncestor = current2.memoizedState.cachePool.pool, null != nearestMountedAncestor && retainCache(nearestMountedAncestor)); 13452 break; 13453 case 24: 13454 releaseCache(current2.memoizedState.cache); 13455 } 13456 (current2.mode & ProfileMode) !== NoMode && 0 <= componentEffectStartTime && 0 <= componentEffectEndTime && (componentEffectSpawnedUpdate || 0.05 < componentEffectDuration) && logComponentEffect( 13457 current2, 13458 componentEffectStartTime, 13459 componentEffectEndTime, 13460 componentEffectDuration, 13461 componentEffectErrors 13462 ); 13463 popComponentEffectStart(prevEffectStart); 13464 popComponentEffectDuration(prevEffectDuration); 13465 componentEffectSpawnedUpdate = prevEffectDidSpawnUpdate; 13466 componentEffectErrors = prevEffectErrors; 13467 current2 = fiber.child; 13468 if (null !== current2) current2.return = fiber, nextEffect = current2; 13469 else 13470 a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) { 13471 current2 = nextEffect; 13472 prevEffectStart = current2.sibling; 13473 prevEffectDuration = current2.return; 13474 detachFiberAfterEffects(current2); 13475 if (current2 === fiber) { 13476 nextEffect = null; 13477 break a; 13478 } 13479 if (null !== prevEffectStart) { 13480 prevEffectStart.return = prevEffectDuration; 13481 nextEffect = prevEffectStart; 13482 break a; 13483 } 13484 nextEffect = prevEffectDuration; 13485 } 13486 } 13487 } 13488 function onCommitRoot() { 13489 commitHooks.forEach(function(commitHook) { 13490 return commitHook(); 13491 }); 13492 } 13493 function isConcurrentActEnvironment() { 13494 var isReactActEnvironmentGlobal = "undefined" !== typeof IS_REACT_ACT_ENVIRONMENT ? IS_REACT_ACT_ENVIRONMENT : void 0; 13495 isReactActEnvironmentGlobal || null === ReactSharedInternals.actQueue || console.error( 13496 "The current testing environment is not configured to support act(...)" 13497 ); 13498 return isReactActEnvironmentGlobal; 13499 } 13500 function requestUpdateLane(fiber) { 13501 if ((executionContext & RenderContext) !== NoContext && 0 !== workInProgressRootRenderLanes) 13502 return workInProgressRootRenderLanes & -workInProgressRootRenderLanes; 13503 var transition = ReactSharedInternals.T; 13504 return null !== transition ? (transition._updatedFibers || (transition._updatedFibers = /* @__PURE__ */ new Set()), transition._updatedFibers.add(fiber), requestTransitionLane()) : resolveUpdatePriority(); 13505 } 13506 function requestDeferredLane() { 13507 if (0 === workInProgressDeferredLane) 13508 if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) { 13509 var lane = nextTransitionDeferredLane; 13510 nextTransitionDeferredLane <<= 1; 13511 0 === (nextTransitionDeferredLane & 3932160) && (nextTransitionDeferredLane = 262144); 13512 workInProgressDeferredLane = lane; 13513 } else workInProgressDeferredLane = 536870912; 13514 lane = suspenseHandlerStackCursor.current; 13515 null !== lane && (lane.flags |= 32); 13516 return workInProgressDeferredLane; 13517 } 13518 function scheduleUpdateOnFiber(root3, fiber, lane) { 13519 isRunningInsertionEffect && console.error("useInsertionEffect must not schedule updates."); 13520 isFlushingPassiveEffects && (didScheduleUpdateDuringPassiveEffects = true); 13521 if (root3 === workInProgressRoot && (workInProgressSuspendedReason === SuspendedOnData || workInProgressSuspendedReason === SuspendedOnAction) || null !== root3.cancelPendingCommit) 13522 prepareFreshStack(root3, 0), markRootSuspended( 13523 root3, 13524 workInProgressRootRenderLanes, 13525 workInProgressDeferredLane, 13526 false 13527 ); 13528 markRootUpdated$1(root3, lane); 13529 if ((executionContext & RenderContext) !== NoContext && root3 === workInProgressRoot) { 13530 if (isRendering) 13531 switch (fiber.tag) { 13532 case 0: 13533 case 11: 13534 case 15: 13535 root3 = workInProgress && getComponentNameFromFiber(workInProgress) || "Unknown"; 13536 didWarnAboutUpdateInRenderForAnotherComponent.has(root3) || (didWarnAboutUpdateInRenderForAnotherComponent.add(root3), fiber = getComponentNameFromFiber(fiber) || "Unknown", console.error( 13537 "Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render", 13538 fiber, 13539 root3, 13540 root3 13541 )); 13542 break; 13543 case 1: 13544 didWarnAboutUpdateInRender || (console.error( 13545 "Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state." 13546 ), didWarnAboutUpdateInRender = true); 13547 } 13548 } else 13549 isDevToolsPresent && addFiberToLanesMap(root3, fiber, lane), warnIfUpdatesNotWrappedWithActDEV(fiber), root3 === workInProgressRoot && ((executionContext & RenderContext) === NoContext && (workInProgressRootInterleavedUpdatedLanes |= lane), workInProgressRootExitStatus === RootSuspendedWithDelay && markRootSuspended( 13550 root3, 13551 workInProgressRootRenderLanes, 13552 workInProgressDeferredLane, 13553 false 13554 )), ensureRootIsScheduled(root3); 13555 } 13556 function performWorkOnRoot(root3, lanes, forceSync) { 13557 if ((executionContext & (RenderContext | CommitContext)) !== NoContext) 13558 throw Error("Should not already be working."); 13559 if (0 !== workInProgressRootRenderLanes && null !== workInProgress) { 13560 var yieldedFiber = workInProgress, yieldEndTime = now$1(); 13561 switch (yieldReason) { 13562 case SuspendedOnImmediate: 13563 case SuspendedOnData: 13564 var startTime = yieldStartTime; 13565 supportsUserTiming && ((yieldedFiber = yieldedFiber._debugTask) ? yieldedFiber.run( 13566 console.timeStamp.bind( 13567 console, 13568 "Suspended", 13569 startTime, 13570 yieldEndTime, 13571 COMPONENTS_TRACK, 13572 void 0, 13573 "primary-light" 13574 ) 13575 ) : console.timeStamp( 13576 "Suspended", 13577 startTime, 13578 yieldEndTime, 13579 COMPONENTS_TRACK, 13580 void 0, 13581 "primary-light" 13582 )); 13583 break; 13584 case SuspendedOnAction: 13585 startTime = yieldStartTime; 13586 supportsUserTiming && ((yieldedFiber = yieldedFiber._debugTask) ? yieldedFiber.run( 13587 console.timeStamp.bind( 13588 console, 13589 "Action", 13590 startTime, 13591 yieldEndTime, 13592 COMPONENTS_TRACK, 13593 void 0, 13594 "primary-light" 13595 ) 13596 ) : console.timeStamp( 13597 "Action", 13598 startTime, 13599 yieldEndTime, 13600 COMPONENTS_TRACK, 13601 void 0, 13602 "primary-light" 13603 )); 13604 break; 13605 default: 13606 supportsUserTiming && (yieldedFiber = yieldEndTime - yieldStartTime, 3 > yieldedFiber || console.timeStamp( 13607 "Blocked", 13608 yieldStartTime, 13609 yieldEndTime, 13610 COMPONENTS_TRACK, 13611 void 0, 13612 5 > yieldedFiber ? "primary-light" : 10 > yieldedFiber ? "primary" : 100 > yieldedFiber ? "primary-dark" : "error" 13613 )); 13614 } 13615 } 13616 startTime = (forceSync = !forceSync && 0 === (lanes & 127) && 0 === (lanes & root3.expiredLanes) || checkIfRootIsPrerendering(root3, lanes)) ? renderRootConcurrent(root3, lanes) : renderRootSync(root3, lanes, true); 13617 var renderWasConcurrent = forceSync; 13618 do { 13619 if (startTime === RootInProgress) { 13620 workInProgressRootIsPrerendering && !forceSync && markRootSuspended(root3, lanes, 0, false); 13621 lanes = workInProgressSuspendedReason; 13622 yieldStartTime = now3(); 13623 yieldReason = lanes; 13624 break; 13625 } else { 13626 yieldedFiber = now$1(); 13627 yieldEndTime = root3.current.alternate; 13628 if (renderWasConcurrent && !isRenderConsistentWithExternalStores(yieldEndTime)) { 13629 setCurrentTrackFromLanes(lanes); 13630 yieldEndTime = renderStartTime; 13631 startTime = yieldedFiber; 13632 !supportsUserTiming || startTime <= yieldEndTime || (workInProgressUpdateTask ? workInProgressUpdateTask.run( 13633 console.timeStamp.bind( 13634 console, 13635 "Teared Render", 13636 yieldEndTime, 13637 startTime, 13638 currentTrack, 13639 LANES_TRACK_GROUP, 13640 "error" 13641 ) 13642 ) : console.timeStamp( 13643 "Teared Render", 13644 yieldEndTime, 13645 startTime, 13646 currentTrack, 13647 LANES_TRACK_GROUP, 13648 "error" 13649 )); 13650 finalizeRender(lanes, yieldedFiber); 13651 startTime = renderRootSync(root3, lanes, false); 13652 renderWasConcurrent = false; 13653 continue; 13654 } 13655 if (startTime === RootErrored) { 13656 renderWasConcurrent = lanes; 13657 if (root3.errorRecoveryDisabledLanes & renderWasConcurrent) 13658 var errorRetryLanes = 0; 13659 else 13660 errorRetryLanes = root3.pendingLanes & -536870913, errorRetryLanes = 0 !== errorRetryLanes ? errorRetryLanes : errorRetryLanes & 536870912 ? 536870912 : 0; 13661 if (0 !== errorRetryLanes) { 13662 setCurrentTrackFromLanes(lanes); 13663 logErroredRenderPhase( 13664 renderStartTime, 13665 yieldedFiber, 13666 lanes, 13667 workInProgressUpdateTask 13668 ); 13669 finalizeRender(lanes, yieldedFiber); 13670 lanes = errorRetryLanes; 13671 a: { 13672 yieldedFiber = root3; 13673 startTime = renderWasConcurrent; 13674 renderWasConcurrent = workInProgressRootConcurrentErrors; 13675 var wasRootDehydrated = yieldedFiber.current.memoizedState.isDehydrated; 13676 wasRootDehydrated && (prepareFreshStack(yieldedFiber, errorRetryLanes).flags |= 256); 13677 errorRetryLanes = renderRootSync( 13678 yieldedFiber, 13679 errorRetryLanes, 13680 false 13681 ); 13682 if (errorRetryLanes !== RootErrored) { 13683 if (workInProgressRootDidAttachPingListener && !wasRootDehydrated) { 13684 yieldedFiber.errorRecoveryDisabledLanes |= startTime; 13685 workInProgressRootInterleavedUpdatedLanes |= startTime; 13686 startTime = RootSuspendedWithDelay; 13687 break a; 13688 } 13689 yieldedFiber = workInProgressRootRecoverableErrors; 13690 workInProgressRootRecoverableErrors = renderWasConcurrent; 13691 null !== yieldedFiber && (null === workInProgressRootRecoverableErrors ? workInProgressRootRecoverableErrors = yieldedFiber : workInProgressRootRecoverableErrors.push.apply( 13692 workInProgressRootRecoverableErrors, 13693 yieldedFiber 13694 )); 13695 } 13696 startTime = errorRetryLanes; 13697 } 13698 renderWasConcurrent = false; 13699 if (startTime !== RootErrored) continue; 13700 else yieldedFiber = now$1(); 13701 } 13702 } 13703 if (startTime === RootFatalErrored) { 13704 setCurrentTrackFromLanes(lanes); 13705 logErroredRenderPhase( 13706 renderStartTime, 13707 yieldedFiber, 13708 lanes, 13709 workInProgressUpdateTask 13710 ); 13711 finalizeRender(lanes, yieldedFiber); 13712 prepareFreshStack(root3, 0); 13713 markRootSuspended(root3, lanes, 0, true); 13714 break; 13715 } 13716 a: { 13717 forceSync = root3; 13718 switch (startTime) { 13719 case RootInProgress: 13720 case RootFatalErrored: 13721 throw Error("Root did not complete. This is a bug in React."); 13722 case RootSuspendedWithDelay: 13723 if ((lanes & 4194048) !== lanes) break; 13724 case RootSuspendedAtTheShell: 13725 setCurrentTrackFromLanes(lanes); 13726 logSuspendedRenderPhase( 13727 renderStartTime, 13728 yieldedFiber, 13729 lanes, 13730 workInProgressUpdateTask 13731 ); 13732 finalizeRender(lanes, yieldedFiber); 13733 yieldEndTime = lanes; 13734 0 !== (yieldEndTime & 127) ? blockingSuspendedTime = yieldedFiber : 0 !== (yieldEndTime & 4194048) && (transitionSuspendedTime = yieldedFiber); 13735 markRootSuspended( 13736 forceSync, 13737 lanes, 13738 workInProgressDeferredLane, 13739 !workInProgressRootDidSkipSuspendedSiblings 13740 ); 13741 break a; 13742 case RootErrored: 13743 workInProgressRootRecoverableErrors = null; 13744 break; 13745 case RootSuspended: 13746 case RootCompleted: 13747 break; 13748 default: 13749 throw Error("Unknown root exit status."); 13750 } 13751 if (null !== ReactSharedInternals.actQueue) 13752 commitRoot( 13753 forceSync, 13754 yieldEndTime, 13755 lanes, 13756 workInProgressRootRecoverableErrors, 13757 workInProgressTransitions, 13758 workInProgressRootDidIncludeRecursiveRenderUpdate, 13759 workInProgressDeferredLane, 13760 workInProgressRootInterleavedUpdatedLanes, 13761 workInProgressSuspendedRetryLanes, 13762 startTime, 13763 null, 13764 null, 13765 renderStartTime, 13766 yieldedFiber 13767 ); 13768 else { 13769 if ((lanes & 62914560) === lanes && (renderWasConcurrent = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now$1(), 10 < renderWasConcurrent)) { 13770 markRootSuspended( 13771 forceSync, 13772 lanes, 13773 workInProgressDeferredLane, 13774 !workInProgressRootDidSkipSuspendedSiblings 13775 ); 13776 if (0 !== getNextLanes(forceSync, 0, true)) break a; 13777 pendingEffectsLanes = lanes; 13778 forceSync.timeoutHandle = scheduleTimeout( 13779 commitRootWhenReady.bind( 13780 null, 13781 forceSync, 13782 yieldEndTime, 13783 workInProgressRootRecoverableErrors, 13784 workInProgressTransitions, 13785 workInProgressRootDidIncludeRecursiveRenderUpdate, 13786 lanes, 13787 workInProgressDeferredLane, 13788 workInProgressRootInterleavedUpdatedLanes, 13789 workInProgressSuspendedRetryLanes, 13790 workInProgressRootDidSkipSuspendedSiblings, 13791 startTime, 13792 "Throttled", 13793 renderStartTime, 13794 yieldedFiber 13795 ), 13796 renderWasConcurrent 13797 ); 13798 break a; 13799 } 13800 commitRootWhenReady( 13801 forceSync, 13802 yieldEndTime, 13803 workInProgressRootRecoverableErrors, 13804 workInProgressTransitions, 13805 workInProgressRootDidIncludeRecursiveRenderUpdate, 13806 lanes, 13807 workInProgressDeferredLane, 13808 workInProgressRootInterleavedUpdatedLanes, 13809 workInProgressSuspendedRetryLanes, 13810 workInProgressRootDidSkipSuspendedSiblings, 13811 startTime, 13812 null, 13813 renderStartTime, 13814 yieldedFiber 13815 ); 13816 } 13817 } 13818 } 13819 break; 13820 } while (1); 13821 ensureRootIsScheduled(root3); 13822 } 13823 function commitRootWhenReady(root3, finishedWork, recoverableErrors, transitions, didIncludeRenderPhaseUpdate, lanes, spawnedLane, updatedLanes, suspendedRetryLanes, didSkipSuspendedSiblings, exitStatus, suspendedCommitReason, completedRenderStartTime, completedRenderEndTime) { 13824 root3.timeoutHandle = noTimeout; 13825 var subtreeFlags = finishedWork.subtreeFlags, suspendedState = null; 13826 if (subtreeFlags & 8192 || 16785408 === (subtreeFlags & 16785408)) { 13827 if (suspendedState = { 13828 stylesheets: null, 13829 count: 0, 13830 imgCount: 0, 13831 imgBytes: 0, 13832 suspenseyImages: [], 13833 waitingForImages: true, 13834 waitingForViewTransition: false, 13835 unsuspend: noop$1 13836 }, accumulateSuspenseyCommitOnFiber(finishedWork, lanes, suspendedState), subtreeFlags = (lanes & 62914560) === lanes ? globalMostRecentFallbackTime - now$1() : (lanes & 4194048) === lanes ? globalMostRecentTransitionTime - now$1() : 0, subtreeFlags = waitForCommitToBeReady(suspendedState, subtreeFlags), null !== subtreeFlags) { 13837 pendingEffectsLanes = lanes; 13838 root3.cancelPendingCommit = subtreeFlags( 13839 commitRoot.bind( 13840 null, 13841 root3, 13842 finishedWork, 13843 lanes, 13844 recoverableErrors, 13845 transitions, 13846 didIncludeRenderPhaseUpdate, 13847 spawnedLane, 13848 updatedLanes, 13849 suspendedRetryLanes, 13850 exitStatus, 13851 suspendedState, 13852 suspendedState.waitingForViewTransition ? "Waiting for the previous Animation" : 0 < suspendedState.count ? 0 < suspendedState.imgCount ? "Suspended on CSS and Images" : "Suspended on CSS" : 1 === suspendedState.imgCount ? "Suspended on an Image" : 0 < suspendedState.imgCount ? "Suspended on Images" : null, 13853 completedRenderStartTime, 13854 completedRenderEndTime 13855 ) 13856 ); 13857 markRootSuspended( 13858 root3, 13859 lanes, 13860 spawnedLane, 13861 !didSkipSuspendedSiblings 13862 ); 13863 return; 13864 } 13865 } 13866 commitRoot( 13867 root3, 13868 finishedWork, 13869 lanes, 13870 recoverableErrors, 13871 transitions, 13872 didIncludeRenderPhaseUpdate, 13873 spawnedLane, 13874 updatedLanes, 13875 suspendedRetryLanes, 13876 exitStatus, 13877 suspendedState, 13878 suspendedCommitReason, 13879 completedRenderStartTime, 13880 completedRenderEndTime 13881 ); 13882 } 13883 function isRenderConsistentWithExternalStores(finishedWork) { 13884 for (var node = finishedWork; ; ) { 13885 var tag = node.tag; 13886 if ((0 === tag || 11 === tag || 15 === tag) && node.flags & 16384 && (tag = node.updateQueue, null !== tag && (tag = tag.stores, null !== tag))) 13887 for (var i3 = 0; i3 < tag.length; i3++) { 13888 var check = tag[i3], getSnapshot = check.getSnapshot; 13889 check = check.value; 13890 try { 13891 if (!objectIs(getSnapshot(), check)) return false; 13892 } catch (error2) { 13893 return false; 13894 } 13895 } 13896 tag = node.child; 13897 if (node.subtreeFlags & 16384 && null !== tag) 13898 tag.return = node, node = tag; 13899 else { 13900 if (node === finishedWork) break; 13901 for (; null === node.sibling; ) { 13902 if (null === node.return || node.return === finishedWork) return true; 13903 node = node.return; 13904 } 13905 node.sibling.return = node.return; 13906 node = node.sibling; 13907 } 13908 } 13909 return true; 13910 } 13911 function markRootSuspended(root3, suspendedLanes, spawnedLane, didAttemptEntireTree) { 13912 suspendedLanes &= ~workInProgressRootPingedLanes; 13913 suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes; 13914 root3.suspendedLanes |= suspendedLanes; 13915 root3.pingedLanes &= ~suspendedLanes; 13916 didAttemptEntireTree && (root3.warmLanes |= suspendedLanes); 13917 didAttemptEntireTree = root3.expirationTimes; 13918 for (var lanes = suspendedLanes; 0 < lanes; ) { 13919 var index = 31 - clz32(lanes), lane = 1 << index; 13920 didAttemptEntireTree[index] = -1; 13921 lanes &= ~lane; 13922 } 13923 0 !== spawnedLane && markSpawnedDeferredLane(root3, spawnedLane, suspendedLanes); 13924 } 13925 function flushSyncWork$1() { 13926 return (executionContext & (RenderContext | CommitContext)) === NoContext ? (flushSyncWorkAcrossRoots_impl(0, false), false) : true; 13927 } 13928 function resetWorkInProgressStack() { 13929 if (null !== workInProgress) { 13930 if (workInProgressSuspendedReason === NotSuspended) 13931 var interruptedWork = workInProgress.return; 13932 else 13933 interruptedWork = workInProgress, resetContextDependencies(), resetHooksOnUnwind(interruptedWork), thenableState$1 = null, thenableIndexCounter$1 = 0, interruptedWork = workInProgress; 13934 for (; null !== interruptedWork; ) 13935 unwindInterruptedWork(interruptedWork.alternate, interruptedWork), interruptedWork = interruptedWork.return; 13936 workInProgress = null; 13937 } 13938 } 13939 function finalizeRender(lanes, finalizationTime) { 13940 0 !== (lanes & 127) && (blockingClampTime = finalizationTime); 13941 0 !== (lanes & 4194048) && (transitionClampTime = finalizationTime); 13942 0 !== (lanes & 62914560) && (retryClampTime = finalizationTime); 13943 0 !== (lanes & 2080374784) && (idleClampTime = finalizationTime); 13944 } 13945 function prepareFreshStack(root3, lanes) { 13946 supportsUserTiming && (console.timeStamp( 13947 "Blocking Track", 13948 3e-3, 13949 3e-3, 13950 "Blocking", 13951 LANES_TRACK_GROUP, 13952 "primary-light" 13953 ), console.timeStamp( 13954 "Transition Track", 13955 3e-3, 13956 3e-3, 13957 "Transition", 13958 LANES_TRACK_GROUP, 13959 "primary-light" 13960 ), console.timeStamp( 13961 "Suspense Track", 13962 3e-3, 13963 3e-3, 13964 "Suspense", 13965 LANES_TRACK_GROUP, 13966 "primary-light" 13967 ), console.timeStamp( 13968 "Idle Track", 13969 3e-3, 13970 3e-3, 13971 "Idle", 13972 LANES_TRACK_GROUP, 13973 "primary-light" 13974 )); 13975 var previousRenderStartTime = renderStartTime; 13976 renderStartTime = now3(); 13977 if (0 !== workInProgressRootRenderLanes && 0 < previousRenderStartTime) { 13978 setCurrentTrackFromLanes(workInProgressRootRenderLanes); 13979 if (workInProgressRootExitStatus === RootSuspended || workInProgressRootExitStatus === RootSuspendedWithDelay) 13980 logSuspendedRenderPhase( 13981 previousRenderStartTime, 13982 renderStartTime, 13983 lanes, 13984 workInProgressUpdateTask 13985 ); 13986 else { 13987 var endTime = renderStartTime, debugTask = workInProgressUpdateTask; 13988 if (supportsUserTiming && !(endTime <= previousRenderStartTime)) { 13989 var color = (lanes & 738197653) === lanes ? "tertiary-dark" : "primary-dark", label = (lanes & 536870912) === lanes ? "Prewarm" : (lanes & 201326741) === lanes ? "Interrupted Hydration" : "Interrupted Render"; 13990 debugTask ? debugTask.run( 13991 console.timeStamp.bind( 13992 console, 13993 label, 13994 previousRenderStartTime, 13995 endTime, 13996 currentTrack, 13997 LANES_TRACK_GROUP, 13998 color 13999 ) 14000 ) : console.timeStamp( 14001 label, 14002 previousRenderStartTime, 14003 endTime, 14004 currentTrack, 14005 LANES_TRACK_GROUP, 14006 color 14007 ); 14008 } 14009 } 14010 finalizeRender(workInProgressRootRenderLanes, renderStartTime); 14011 } 14012 previousRenderStartTime = workInProgressUpdateTask; 14013 workInProgressUpdateTask = null; 14014 if (0 !== (lanes & 127)) { 14015 workInProgressUpdateTask = blockingUpdateTask; 14016 debugTask = 0 <= blockingUpdateTime && blockingUpdateTime < blockingClampTime ? blockingClampTime : blockingUpdateTime; 14017 endTime = 0 <= blockingEventTime && blockingEventTime < blockingClampTime ? blockingClampTime : blockingEventTime; 14018 color = 0 <= endTime ? endTime : 0 <= debugTask ? debugTask : renderStartTime; 14019 0 <= blockingSuspendedTime ? (setCurrentTrackFromLanes(2), logSuspendedWithDelayPhase( 14020 blockingSuspendedTime, 14021 color, 14022 lanes, 14023 previousRenderStartTime 14024 )) : 0 !== (animatingLanes & 127) && (setCurrentTrackFromLanes(2), logAnimatingPhase(blockingClampTime, color, animatingTask)); 14025 previousRenderStartTime = debugTask; 14026 var eventTime = endTime, eventType = blockingEventType, eventIsRepeat = 0 < blockingEventRepeatTime, isSpawnedUpdate = blockingUpdateType === SPAWNED_UPDATE, isPingedUpdate = blockingUpdateType === PINGED_UPDATE; 14027 debugTask = renderStartTime; 14028 endTime = blockingUpdateTask; 14029 color = blockingUpdateMethodName; 14030 label = blockingUpdateComponentName; 14031 if (supportsUserTiming) { 14032 currentTrack = "Blocking"; 14033 0 < previousRenderStartTime ? previousRenderStartTime > debugTask && (previousRenderStartTime = debugTask) : previousRenderStartTime = debugTask; 14034 0 < eventTime ? eventTime > previousRenderStartTime && (eventTime = previousRenderStartTime) : eventTime = previousRenderStartTime; 14035 if (null !== eventType && previousRenderStartTime > eventTime) { 14036 var color$jscomp$0 = eventIsRepeat ? "secondary-light" : "warning"; 14037 endTime ? endTime.run( 14038 console.timeStamp.bind( 14039 console, 14040 eventIsRepeat ? "Consecutive" : "Event: " + eventType, 14041 eventTime, 14042 previousRenderStartTime, 14043 currentTrack, 14044 LANES_TRACK_GROUP, 14045 color$jscomp$0 14046 ) 14047 ) : console.timeStamp( 14048 eventIsRepeat ? "Consecutive" : "Event: " + eventType, 14049 eventTime, 14050 previousRenderStartTime, 14051 currentTrack, 14052 LANES_TRACK_GROUP, 14053 color$jscomp$0 14054 ); 14055 } 14056 debugTask > previousRenderStartTime && (eventTime = isSpawnedUpdate ? "error" : (lanes & 738197653) === lanes ? "tertiary-light" : "primary-light", isSpawnedUpdate = isPingedUpdate ? "Promise Resolved" : isSpawnedUpdate ? "Cascading Update" : 5 < debugTask - previousRenderStartTime ? "Update Blocked" : "Update", isPingedUpdate = [], null != label && isPingedUpdate.push(["Component name", label]), null != color && isPingedUpdate.push(["Method name", color]), previousRenderStartTime = { 14057 start: previousRenderStartTime, 14058 end: debugTask, 14059 detail: { 14060 devtools: { 14061 properties: isPingedUpdate, 14062 track: currentTrack, 14063 trackGroup: LANES_TRACK_GROUP, 14064 color: eventTime 14065 } 14066 } 14067 }, endTime ? endTime.run( 14068 performance.measure.bind( 14069 performance, 14070 isSpawnedUpdate, 14071 previousRenderStartTime 14072 ) 14073 ) : performance.measure(isSpawnedUpdate, previousRenderStartTime)); 14074 } 14075 blockingUpdateTime = -1.1; 14076 blockingUpdateType = 0; 14077 blockingUpdateComponentName = blockingUpdateMethodName = null; 14078 blockingSuspendedTime = -1.1; 14079 blockingEventRepeatTime = blockingEventTime; 14080 blockingEventTime = -1.1; 14081 blockingClampTime = now3(); 14082 } 14083 0 !== (lanes & 4194048) && (workInProgressUpdateTask = transitionUpdateTask, debugTask = 0 <= transitionStartTime && transitionStartTime < transitionClampTime ? transitionClampTime : transitionStartTime, previousRenderStartTime = 0 <= transitionUpdateTime && transitionUpdateTime < transitionClampTime ? transitionClampTime : transitionUpdateTime, endTime = 0 <= transitionEventTime && transitionEventTime < transitionClampTime ? transitionClampTime : transitionEventTime, color = 0 <= endTime ? endTime : 0 <= previousRenderStartTime ? previousRenderStartTime : renderStartTime, 0 <= transitionSuspendedTime ? (setCurrentTrackFromLanes(256), logSuspendedWithDelayPhase( 14084 transitionSuspendedTime, 14085 color, 14086 lanes, 14087 workInProgressUpdateTask 14088 )) : 0 !== (animatingLanes & 4194048) && (setCurrentTrackFromLanes(256), logAnimatingPhase(transitionClampTime, color, animatingTask)), isPingedUpdate = endTime, eventTime = transitionEventType, eventType = 0 < transitionEventRepeatTime, eventIsRepeat = transitionUpdateType === PINGED_UPDATE, color = renderStartTime, endTime = transitionUpdateTask, label = transitionUpdateMethodName, isSpawnedUpdate = transitionUpdateComponentName, supportsUserTiming && (currentTrack = "Transition", 0 < previousRenderStartTime ? previousRenderStartTime > color && (previousRenderStartTime = color) : previousRenderStartTime = color, 0 < debugTask ? debugTask > previousRenderStartTime && (debugTask = previousRenderStartTime) : debugTask = previousRenderStartTime, 0 < isPingedUpdate ? isPingedUpdate > debugTask && (isPingedUpdate = debugTask) : isPingedUpdate = debugTask, debugTask > isPingedUpdate && null !== eventTime && (color$jscomp$0 = eventType ? "secondary-light" : "warning", endTime ? endTime.run( 14089 console.timeStamp.bind( 14090 console, 14091 eventType ? "Consecutive" : "Event: " + eventTime, 14092 isPingedUpdate, 14093 debugTask, 14094 currentTrack, 14095 LANES_TRACK_GROUP, 14096 color$jscomp$0 14097 ) 14098 ) : console.timeStamp( 14099 eventType ? "Consecutive" : "Event: " + eventTime, 14100 isPingedUpdate, 14101 debugTask, 14102 currentTrack, 14103 LANES_TRACK_GROUP, 14104 color$jscomp$0 14105 )), previousRenderStartTime > debugTask && (endTime ? endTime.run( 14106 console.timeStamp.bind( 14107 console, 14108 "Action", 14109 debugTask, 14110 previousRenderStartTime, 14111 currentTrack, 14112 LANES_TRACK_GROUP, 14113 "primary-dark" 14114 ) 14115 ) : console.timeStamp( 14116 "Action", 14117 debugTask, 14118 previousRenderStartTime, 14119 currentTrack, 14120 LANES_TRACK_GROUP, 14121 "primary-dark" 14122 )), color > previousRenderStartTime && (debugTask = eventIsRepeat ? "Promise Resolved" : 5 < color - previousRenderStartTime ? "Update Blocked" : "Update", isPingedUpdate = [], null != isSpawnedUpdate && isPingedUpdate.push(["Component name", isSpawnedUpdate]), null != label && isPingedUpdate.push(["Method name", label]), previousRenderStartTime = { 14123 start: previousRenderStartTime, 14124 end: color, 14125 detail: { 14126 devtools: { 14127 properties: isPingedUpdate, 14128 track: currentTrack, 14129 trackGroup: LANES_TRACK_GROUP, 14130 color: "primary-light" 14131 } 14132 } 14133 }, endTime ? endTime.run( 14134 performance.measure.bind( 14135 performance, 14136 debugTask, 14137 previousRenderStartTime 14138 ) 14139 ) : performance.measure(debugTask, previousRenderStartTime))), transitionUpdateTime = transitionStartTime = -1.1, transitionUpdateType = 0, transitionSuspendedTime = -1.1, transitionEventRepeatTime = transitionEventTime, transitionEventTime = -1.1, transitionClampTime = now3()); 14140 0 !== (lanes & 62914560) && 0 !== (animatingLanes & 62914560) && (setCurrentTrackFromLanes(4194304), logAnimatingPhase(retryClampTime, renderStartTime, animatingTask)); 14141 0 !== (lanes & 2080374784) && 0 !== (animatingLanes & 2080374784) && (setCurrentTrackFromLanes(268435456), logAnimatingPhase(idleClampTime, renderStartTime, animatingTask)); 14142 previousRenderStartTime = root3.timeoutHandle; 14143 previousRenderStartTime !== noTimeout && (root3.timeoutHandle = noTimeout, cancelTimeout(previousRenderStartTime)); 14144 previousRenderStartTime = root3.cancelPendingCommit; 14145 null !== previousRenderStartTime && (root3.cancelPendingCommit = null, previousRenderStartTime()); 14146 pendingEffectsLanes = 0; 14147 resetWorkInProgressStack(); 14148 workInProgressRoot = root3; 14149 workInProgress = previousRenderStartTime = createWorkInProgress( 14150 root3.current, 14151 null 14152 ); 14153 workInProgressRootRenderLanes = lanes; 14154 workInProgressSuspendedReason = NotSuspended; 14155 workInProgressThrownValue = null; 14156 workInProgressRootDidSkipSuspendedSiblings = false; 14157 workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root3, lanes); 14158 workInProgressRootDidAttachPingListener = false; 14159 workInProgressRootExitStatus = RootInProgress; 14160 workInProgressSuspendedRetryLanes = workInProgressDeferredLane = workInProgressRootPingedLanes = workInProgressRootInterleavedUpdatedLanes = workInProgressRootSkippedLanes = 0; 14161 workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors = null; 14162 workInProgressRootDidIncludeRecursiveRenderUpdate = false; 14163 0 !== (lanes & 8) && (lanes |= lanes & 32); 14164 endTime = root3.entangledLanes; 14165 if (0 !== endTime) 14166 for (root3 = root3.entanglements, endTime &= lanes; 0 < endTime; ) 14167 debugTask = 31 - clz32(endTime), color = 1 << debugTask, lanes |= root3[debugTask], endTime &= ~color; 14168 entangledRenderLanes = lanes; 14169 finishQueueingConcurrentUpdates(); 14170 root3 = getCurrentTime(); 14171 1e3 < root3 - lastResetTime && (ReactSharedInternals.recentlyCreatedOwnerStacks = 0, lastResetTime = root3); 14172 ReactStrictModeWarnings.discardPendingWarnings(); 14173 return previousRenderStartTime; 14174 } 14175 function handleThrow(root3, thrownValue) { 14176 currentlyRenderingFiber = null; 14177 ReactSharedInternals.H = ContextOnlyDispatcher; 14178 ReactSharedInternals.getCurrentStack = null; 14179 isRendering = false; 14180 current = null; 14181 thrownValue === SuspenseException || thrownValue === SuspenseActionException ? (thrownValue = getSuspendedThenable(), workInProgressSuspendedReason = SuspendedOnImmediate) : thrownValue === SuspenseyCommitException ? (thrownValue = getSuspendedThenable(), workInProgressSuspendedReason = SuspendedOnInstance) : workInProgressSuspendedReason = thrownValue === SelectiveHydrationException ? SuspendedOnHydration : null !== thrownValue && "object" === typeof thrownValue && "function" === typeof thrownValue.then ? SuspendedOnDeprecatedThrowPromise : SuspendedOnError; 14182 workInProgressThrownValue = thrownValue; 14183 var erroredWork = workInProgress; 14184 null === erroredWork ? (workInProgressRootExitStatus = RootFatalErrored, logUncaughtError( 14185 root3, 14186 createCapturedValueAtFiber(thrownValue, root3.current) 14187 )) : erroredWork.mode & ProfileMode && stopProfilerTimerIfRunningAndRecordDuration(erroredWork); 14188 } 14189 function shouldRemainOnPreviousScreen() { 14190 var handler = suspenseHandlerStackCursor.current; 14191 return null === handler ? true : (workInProgressRootRenderLanes & 4194048) === workInProgressRootRenderLanes ? null === shellBoundary ? true : false : (workInProgressRootRenderLanes & 62914560) === workInProgressRootRenderLanes || 0 !== (workInProgressRootRenderLanes & 536870912) ? handler === shellBoundary : false; 14192 } 14193 function pushDispatcher() { 14194 var prevDispatcher = ReactSharedInternals.H; 14195 ReactSharedInternals.H = ContextOnlyDispatcher; 14196 return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher; 14197 } 14198 function pushAsyncDispatcher() { 14199 var prevAsyncDispatcher = ReactSharedInternals.A; 14200 ReactSharedInternals.A = DefaultAsyncDispatcher; 14201 return prevAsyncDispatcher; 14202 } 14203 function markRenderDerivedCause(fiber) { 14204 null === workInProgressUpdateTask && (workInProgressUpdateTask = null == fiber._debugTask ? null : fiber._debugTask); 14205 } 14206 function renderDidSuspendDelayIfPossible() { 14207 workInProgressRootExitStatus = RootSuspendedWithDelay; 14208 workInProgressRootDidSkipSuspendedSiblings || (workInProgressRootRenderLanes & 4194048) !== workInProgressRootRenderLanes && null !== suspenseHandlerStackCursor.current || (workInProgressRootIsPrerendering = true); 14209 0 === (workInProgressRootSkippedLanes & 134217727) && 0 === (workInProgressRootInterleavedUpdatedLanes & 134217727) || null === workInProgressRoot || markRootSuspended( 14210 workInProgressRoot, 14211 workInProgressRootRenderLanes, 14212 workInProgressDeferredLane, 14213 false 14214 ); 14215 } 14216 function renderRootSync(root3, lanes, shouldYieldForPrerendering) { 14217 var prevExecutionContext = executionContext; 14218 executionContext |= RenderContext; 14219 var prevDispatcher = pushDispatcher(), prevAsyncDispatcher = pushAsyncDispatcher(); 14220 if (workInProgressRoot !== root3 || workInProgressRootRenderLanes !== lanes) { 14221 if (isDevToolsPresent) { 14222 var memoizedUpdaters = root3.memoizedUpdaters; 14223 0 < memoizedUpdaters.size && (restorePendingUpdaters(root3, workInProgressRootRenderLanes), memoizedUpdaters.clear()); 14224 movePendingFibersToMemoized(root3, lanes); 14225 } 14226 workInProgressTransitions = null; 14227 prepareFreshStack(root3, lanes); 14228 } 14229 lanes = false; 14230 memoizedUpdaters = workInProgressRootExitStatus; 14231 a: do 14232 try { 14233 if (workInProgressSuspendedReason !== NotSuspended && null !== workInProgress) { 14234 var unitOfWork = workInProgress, thrownValue = workInProgressThrownValue; 14235 switch (workInProgressSuspendedReason) { 14236 case SuspendedOnHydration: 14237 resetWorkInProgressStack(); 14238 memoizedUpdaters = RootSuspendedAtTheShell; 14239 break a; 14240 case SuspendedOnImmediate: 14241 case SuspendedOnData: 14242 case SuspendedOnAction: 14243 case SuspendedOnDeprecatedThrowPromise: 14244 null === suspenseHandlerStackCursor.current && (lanes = true); 14245 var reason = workInProgressSuspendedReason; 14246 workInProgressSuspendedReason = NotSuspended; 14247 workInProgressThrownValue = null; 14248 throwAndUnwindWorkLoop(root3, unitOfWork, thrownValue, reason); 14249 if (shouldYieldForPrerendering && workInProgressRootIsPrerendering) { 14250 memoizedUpdaters = RootInProgress; 14251 break a; 14252 } 14253 break; 14254 default: 14255 reason = workInProgressSuspendedReason, workInProgressSuspendedReason = NotSuspended, workInProgressThrownValue = null, throwAndUnwindWorkLoop(root3, unitOfWork, thrownValue, reason); 14256 } 14257 } 14258 workLoopSync(); 14259 memoizedUpdaters = workInProgressRootExitStatus; 14260 break; 14261 } catch (thrownValue$8) { 14262 handleThrow(root3, thrownValue$8); 14263 } 14264 while (1); 14265 lanes && root3.shellSuspendCounter++; 14266 resetContextDependencies(); 14267 executionContext = prevExecutionContext; 14268 ReactSharedInternals.H = prevDispatcher; 14269 ReactSharedInternals.A = prevAsyncDispatcher; 14270 null === workInProgress && (workInProgressRoot = null, workInProgressRootRenderLanes = 0, finishQueueingConcurrentUpdates()); 14271 return memoizedUpdaters; 14272 } 14273 function workLoopSync() { 14274 for (; null !== workInProgress; ) performUnitOfWork(workInProgress); 14275 } 14276 function renderRootConcurrent(root3, lanes) { 14277 var prevExecutionContext = executionContext; 14278 executionContext |= RenderContext; 14279 var prevDispatcher = pushDispatcher(), prevAsyncDispatcher = pushAsyncDispatcher(); 14280 if (workInProgressRoot !== root3 || workInProgressRootRenderLanes !== lanes) { 14281 if (isDevToolsPresent) { 14282 var memoizedUpdaters = root3.memoizedUpdaters; 14283 0 < memoizedUpdaters.size && (restorePendingUpdaters(root3, workInProgressRootRenderLanes), memoizedUpdaters.clear()); 14284 movePendingFibersToMemoized(root3, lanes); 14285 } 14286 workInProgressTransitions = null; 14287 workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS; 14288 prepareFreshStack(root3, lanes); 14289 } else 14290 workInProgressRootIsPrerendering = checkIfRootIsPrerendering( 14291 root3, 14292 lanes 14293 ); 14294 a: do 14295 try { 14296 if (workInProgressSuspendedReason !== NotSuspended && null !== workInProgress) 14297 b: switch (lanes = workInProgress, memoizedUpdaters = workInProgressThrownValue, workInProgressSuspendedReason) { 14298 case SuspendedOnError: 14299 workInProgressSuspendedReason = NotSuspended; 14300 workInProgressThrownValue = null; 14301 throwAndUnwindWorkLoop( 14302 root3, 14303 lanes, 14304 memoizedUpdaters, 14305 SuspendedOnError 14306 ); 14307 break; 14308 case SuspendedOnData: 14309 case SuspendedOnAction: 14310 if (isThenableResolved(memoizedUpdaters)) { 14311 workInProgressSuspendedReason = NotSuspended; 14312 workInProgressThrownValue = null; 14313 replaySuspendedUnitOfWork(lanes); 14314 break; 14315 } 14316 lanes = function() { 14317 workInProgressSuspendedReason !== SuspendedOnData && workInProgressSuspendedReason !== SuspendedOnAction || workInProgressRoot !== root3 || (workInProgressSuspendedReason = SuspendedAndReadyToContinue); 14318 ensureRootIsScheduled(root3); 14319 }; 14320 memoizedUpdaters.then(lanes, lanes); 14321 break a; 14322 case SuspendedOnImmediate: 14323 workInProgressSuspendedReason = SuspendedAndReadyToContinue; 14324 break a; 14325 case SuspendedOnInstance: 14326 workInProgressSuspendedReason = SuspendedOnInstanceAndReadyToContinue; 14327 break a; 14328 case SuspendedAndReadyToContinue: 14329 isThenableResolved(memoizedUpdaters) ? (workInProgressSuspendedReason = NotSuspended, workInProgressThrownValue = null, replaySuspendedUnitOfWork(lanes)) : (workInProgressSuspendedReason = NotSuspended, workInProgressThrownValue = null, throwAndUnwindWorkLoop( 14330 root3, 14331 lanes, 14332 memoizedUpdaters, 14333 SuspendedAndReadyToContinue 14334 )); 14335 break; 14336 case SuspendedOnInstanceAndReadyToContinue: 14337 var resource = null; 14338 switch (workInProgress.tag) { 14339 case 26: 14340 resource = workInProgress.memoizedState; 14341 case 5: 14342 case 27: 14343 var hostFiber = workInProgress; 14344 if (resource ? preloadResource(resource) : hostFiber.stateNode.complete) { 14345 workInProgressSuspendedReason = NotSuspended; 14346 workInProgressThrownValue = null; 14347 var sibling = hostFiber.sibling; 14348 if (null !== sibling) workInProgress = sibling; 14349 else { 14350 var returnFiber = hostFiber.return; 14351 null !== returnFiber ? (workInProgress = returnFiber, completeUnitOfWork(returnFiber)) : workInProgress = null; 14352 } 14353 break b; 14354 } 14355 break; 14356 default: 14357 console.error( 14358 "Unexpected type of fiber triggered a suspensey commit. This is a bug in React." 14359 ); 14360 } 14361 workInProgressSuspendedReason = NotSuspended; 14362 workInProgressThrownValue = null; 14363 throwAndUnwindWorkLoop( 14364 root3, 14365 lanes, 14366 memoizedUpdaters, 14367 SuspendedOnInstanceAndReadyToContinue 14368 ); 14369 break; 14370 case SuspendedOnDeprecatedThrowPromise: 14371 workInProgressSuspendedReason = NotSuspended; 14372 workInProgressThrownValue = null; 14373 throwAndUnwindWorkLoop( 14374 root3, 14375 lanes, 14376 memoizedUpdaters, 14377 SuspendedOnDeprecatedThrowPromise 14378 ); 14379 break; 14380 case SuspendedOnHydration: 14381 resetWorkInProgressStack(); 14382 workInProgressRootExitStatus = RootSuspendedAtTheShell; 14383 break a; 14384 default: 14385 throw Error( 14386 "Unexpected SuspendedReason. This is a bug in React." 14387 ); 14388 } 14389 null !== ReactSharedInternals.actQueue ? workLoopSync() : workLoopConcurrentByScheduler(); 14390 break; 14391 } catch (thrownValue$9) { 14392 handleThrow(root3, thrownValue$9); 14393 } 14394 while (1); 14395 resetContextDependencies(); 14396 ReactSharedInternals.H = prevDispatcher; 14397 ReactSharedInternals.A = prevAsyncDispatcher; 14398 executionContext = prevExecutionContext; 14399 if (null !== workInProgress) return RootInProgress; 14400 workInProgressRoot = null; 14401 workInProgressRootRenderLanes = 0; 14402 finishQueueingConcurrentUpdates(); 14403 return workInProgressRootExitStatus; 14404 } 14405 function workLoopConcurrentByScheduler() { 14406 for (; null !== workInProgress && !shouldYield(); ) 14407 performUnitOfWork(workInProgress); 14408 } 14409 function performUnitOfWork(unitOfWork) { 14410 var current2 = unitOfWork.alternate; 14411 (unitOfWork.mode & ProfileMode) !== NoMode ? (startProfilerTimer(unitOfWork), current2 = runWithFiberInDEV( 14412 unitOfWork, 14413 beginWork, 14414 current2, 14415 unitOfWork, 14416 entangledRenderLanes 14417 ), stopProfilerTimerIfRunningAndRecordDuration(unitOfWork)) : current2 = runWithFiberInDEV( 14418 unitOfWork, 14419 beginWork, 14420 current2, 14421 unitOfWork, 14422 entangledRenderLanes 14423 ); 14424 unitOfWork.memoizedProps = unitOfWork.pendingProps; 14425 null === current2 ? completeUnitOfWork(unitOfWork) : workInProgress = current2; 14426 } 14427 function replaySuspendedUnitOfWork(unitOfWork) { 14428 var next = runWithFiberInDEV(unitOfWork, replayBeginWork, unitOfWork); 14429 unitOfWork.memoizedProps = unitOfWork.pendingProps; 14430 null === next ? completeUnitOfWork(unitOfWork) : workInProgress = next; 14431 } 14432 function replayBeginWork(unitOfWork) { 14433 var current2 = unitOfWork.alternate, isProfilingMode = (unitOfWork.mode & ProfileMode) !== NoMode; 14434 isProfilingMode && startProfilerTimer(unitOfWork); 14435 switch (unitOfWork.tag) { 14436 case 15: 14437 case 0: 14438 current2 = replayFunctionComponent( 14439 current2, 14440 unitOfWork, 14441 unitOfWork.pendingProps, 14442 unitOfWork.type, 14443 void 0, 14444 workInProgressRootRenderLanes 14445 ); 14446 break; 14447 case 11: 14448 current2 = replayFunctionComponent( 14449 current2, 14450 unitOfWork, 14451 unitOfWork.pendingProps, 14452 unitOfWork.type.render, 14453 unitOfWork.ref, 14454 workInProgressRootRenderLanes 14455 ); 14456 break; 14457 case 5: 14458 resetHooksOnUnwind(unitOfWork); 14459 default: 14460 unwindInterruptedWork(current2, unitOfWork), unitOfWork = workInProgress = resetWorkInProgress(unitOfWork, entangledRenderLanes), current2 = beginWork(current2, unitOfWork, entangledRenderLanes); 14461 } 14462 isProfilingMode && stopProfilerTimerIfRunningAndRecordDuration(unitOfWork); 14463 return current2; 14464 } 14465 function throwAndUnwindWorkLoop(root3, unitOfWork, thrownValue, suspendedReason) { 14466 resetContextDependencies(); 14467 resetHooksOnUnwind(unitOfWork); 14468 thenableState$1 = null; 14469 thenableIndexCounter$1 = 0; 14470 var returnFiber = unitOfWork.return; 14471 try { 14472 if (throwException( 14473 root3, 14474 returnFiber, 14475 unitOfWork, 14476 thrownValue, 14477 workInProgressRootRenderLanes 14478 )) { 14479 workInProgressRootExitStatus = RootFatalErrored; 14480 logUncaughtError( 14481 root3, 14482 createCapturedValueAtFiber(thrownValue, root3.current) 14483 ); 14484 workInProgress = null; 14485 return; 14486 } 14487 } catch (error2) { 14488 if (null !== returnFiber) throw workInProgress = returnFiber, error2; 14489 workInProgressRootExitStatus = RootFatalErrored; 14490 logUncaughtError( 14491 root3, 14492 createCapturedValueAtFiber(thrownValue, root3.current) 14493 ); 14494 workInProgress = null; 14495 return; 14496 } 14497 if (unitOfWork.flags & 32768) { 14498 if (isHydrating || suspendedReason === SuspendedOnError) root3 = true; 14499 else if (workInProgressRootIsPrerendering || 0 !== (workInProgressRootRenderLanes & 536870912)) 14500 root3 = false; 14501 else if (workInProgressRootDidSkipSuspendedSiblings = root3 = true, suspendedReason === SuspendedOnData || suspendedReason === SuspendedOnAction || suspendedReason === SuspendedOnImmediate || suspendedReason === SuspendedOnDeprecatedThrowPromise) 14502 suspendedReason = suspenseHandlerStackCursor.current, null !== suspendedReason && 13 === suspendedReason.tag && (suspendedReason.flags |= 16384); 14503 unwindUnitOfWork(unitOfWork, root3); 14504 } else completeUnitOfWork(unitOfWork); 14505 } 14506 function completeUnitOfWork(unitOfWork) { 14507 var completedWork = unitOfWork; 14508 do { 14509 if (0 !== (completedWork.flags & 32768)) { 14510 unwindUnitOfWork( 14511 completedWork, 14512 workInProgressRootDidSkipSuspendedSiblings 14513 ); 14514 return; 14515 } 14516 var current2 = completedWork.alternate; 14517 unitOfWork = completedWork.return; 14518 startProfilerTimer(completedWork); 14519 current2 = runWithFiberInDEV( 14520 completedWork, 14521 completeWork, 14522 current2, 14523 completedWork, 14524 entangledRenderLanes 14525 ); 14526 (completedWork.mode & ProfileMode) !== NoMode && stopProfilerTimerIfRunningAndRecordIncompleteDuration(completedWork); 14527 if (null !== current2) { 14528 workInProgress = current2; 14529 return; 14530 } 14531 completedWork = completedWork.sibling; 14532 if (null !== completedWork) { 14533 workInProgress = completedWork; 14534 return; 14535 } 14536 workInProgress = completedWork = unitOfWork; 14537 } while (null !== completedWork); 14538 workInProgressRootExitStatus === RootInProgress && (workInProgressRootExitStatus = RootCompleted); 14539 } 14540 function unwindUnitOfWork(unitOfWork, skipSiblings) { 14541 do { 14542 var next = unwindWork(unitOfWork.alternate, unitOfWork); 14543 if (null !== next) { 14544 next.flags &= 32767; 14545 workInProgress = next; 14546 return; 14547 } 14548 if ((unitOfWork.mode & ProfileMode) !== NoMode) { 14549 stopProfilerTimerIfRunningAndRecordIncompleteDuration(unitOfWork); 14550 next = unitOfWork.actualDuration; 14551 for (var child = unitOfWork.child; null !== child; ) 14552 next += child.actualDuration, child = child.sibling; 14553 unitOfWork.actualDuration = next; 14554 } 14555 next = unitOfWork.return; 14556 null !== next && (next.flags |= 32768, next.subtreeFlags = 0, next.deletions = null); 14557 if (!skipSiblings && (unitOfWork = unitOfWork.sibling, null !== unitOfWork)) { 14558 workInProgress = unitOfWork; 14559 return; 14560 } 14561 workInProgress = unitOfWork = next; 14562 } while (null !== unitOfWork); 14563 workInProgressRootExitStatus = RootSuspendedAtTheShell; 14564 workInProgress = null; 14565 } 14566 function commitRoot(root3, finishedWork, lanes, recoverableErrors, transitions, didIncludeRenderPhaseUpdate, spawnedLane, updatedLanes, suspendedRetryLanes, exitStatus, suspendedState, suspendedCommitReason, completedRenderStartTime, completedRenderEndTime) { 14567 root3.cancelPendingCommit = null; 14568 do 14569 flushPendingEffects(); 14570 while (pendingEffectsStatus !== NO_PENDING_EFFECTS); 14571 ReactStrictModeWarnings.flushLegacyContextWarning(); 14572 ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings(); 14573 if ((executionContext & (RenderContext | CommitContext)) !== NoContext) 14574 throw Error("Should not already be working."); 14575 setCurrentTrackFromLanes(lanes); 14576 exitStatus === RootErrored ? logErroredRenderPhase( 14577 completedRenderStartTime, 14578 completedRenderEndTime, 14579 lanes, 14580 workInProgressUpdateTask 14581 ) : null !== recoverableErrors ? logRecoveredRenderPhase( 14582 completedRenderStartTime, 14583 completedRenderEndTime, 14584 lanes, 14585 recoverableErrors, 14586 null !== finishedWork && null !== finishedWork.alternate && finishedWork.alternate.memoizedState.isDehydrated && 0 !== (finishedWork.flags & 256), 14587 workInProgressUpdateTask 14588 ) : logRenderPhase( 14589 completedRenderStartTime, 14590 completedRenderEndTime, 14591 lanes, 14592 workInProgressUpdateTask 14593 ); 14594 if (null !== finishedWork) { 14595 0 === lanes && console.error( 14596 "finishedLanes should not be empty during a commit. This is a bug in React." 14597 ); 14598 if (finishedWork === root3.current) 14599 throw Error( 14600 "Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue." 14601 ); 14602 didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes; 14603 didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes; 14604 markRootFinished( 14605 root3, 14606 lanes, 14607 didIncludeRenderPhaseUpdate, 14608 spawnedLane, 14609 updatedLanes, 14610 suspendedRetryLanes 14611 ); 14612 root3 === workInProgressRoot && (workInProgress = workInProgressRoot = null, workInProgressRootRenderLanes = 0); 14613 pendingFinishedWork = finishedWork; 14614 pendingEffectsRoot = root3; 14615 pendingEffectsLanes = lanes; 14616 pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate; 14617 pendingPassiveTransitions = transitions; 14618 pendingRecoverableErrors = recoverableErrors; 14619 pendingEffectsRenderEndTime = completedRenderEndTime; 14620 pendingSuspendedCommitReason = suspendedCommitReason; 14621 pendingDelayedCommitReason = IMMEDIATE_COMMIT; 14622 pendingSuspendedViewTransitionReason = null; 14623 0 !== finishedWork.actualDuration || 0 !== (finishedWork.subtreeFlags & 10256) || 0 !== (finishedWork.flags & 10256) ? (root3.callbackNode = null, root3.callbackPriority = 0, scheduleCallback$1(NormalPriority$1, function() { 14624 schedulerEvent = window.event; 14625 pendingDelayedCommitReason === IMMEDIATE_COMMIT && (pendingDelayedCommitReason = DELAYED_PASSIVE_COMMIT); 14626 flushPassiveEffects(); 14627 return null; 14628 })) : (root3.callbackNode = null, root3.callbackPriority = 0); 14629 commitErrors = null; 14630 commitStartTime = now3(); 14631 null !== suspendedCommitReason && logSuspendedCommitPhase( 14632 completedRenderEndTime, 14633 commitStartTime, 14634 suspendedCommitReason, 14635 workInProgressUpdateTask 14636 ); 14637 recoverableErrors = 0 !== (finishedWork.flags & 13878); 14638 if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) { 14639 recoverableErrors = ReactSharedInternals.T; 14640 ReactSharedInternals.T = null; 14641 transitions = ReactDOMSharedInternals.p; 14642 ReactDOMSharedInternals.p = DiscreteEventPriority; 14643 spawnedLane = executionContext; 14644 executionContext |= CommitContext; 14645 try { 14646 commitBeforeMutationEffects(root3, finishedWork, lanes); 14647 } finally { 14648 executionContext = spawnedLane, ReactDOMSharedInternals.p = transitions, ReactSharedInternals.T = recoverableErrors; 14649 } 14650 } 14651 pendingEffectsStatus = PENDING_MUTATION_PHASE; 14652 flushMutationEffects(); 14653 flushLayoutEffects(); 14654 flushSpawnedWork(); 14655 } 14656 } 14657 function flushMutationEffects() { 14658 if (pendingEffectsStatus === PENDING_MUTATION_PHASE) { 14659 pendingEffectsStatus = NO_PENDING_EFFECTS; 14660 var root3 = pendingEffectsRoot, finishedWork = pendingFinishedWork, lanes = pendingEffectsLanes, rootMutationHasEffect = 0 !== (finishedWork.flags & 13878); 14661 if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) { 14662 rootMutationHasEffect = ReactSharedInternals.T; 14663 ReactSharedInternals.T = null; 14664 var previousPriority = ReactDOMSharedInternals.p; 14665 ReactDOMSharedInternals.p = DiscreteEventPriority; 14666 var prevExecutionContext = executionContext; 14667 executionContext |= CommitContext; 14668 try { 14669 inProgressLanes = lanes; 14670 inProgressRoot = root3; 14671 resetComponentEffectTimers(); 14672 commitMutationEffectsOnFiber(finishedWork, root3); 14673 inProgressRoot = inProgressLanes = null; 14674 lanes = selectionInformation; 14675 var curFocusedElem = getActiveElementDeep(root3.containerInfo), priorFocusedElem = lanes.focusedElem, priorSelectionRange = lanes.selectionRange; 14676 if (curFocusedElem !== priorFocusedElem && priorFocusedElem && priorFocusedElem.ownerDocument && containsNode( 14677 priorFocusedElem.ownerDocument.documentElement, 14678 priorFocusedElem 14679 )) { 14680 if (null !== priorSelectionRange && hasSelectionCapabilities(priorFocusedElem)) { 14681 var start2 = priorSelectionRange.start, end = priorSelectionRange.end; 14682 void 0 === end && (end = start2); 14683 if ("selectionStart" in priorFocusedElem) 14684 priorFocusedElem.selectionStart = start2, priorFocusedElem.selectionEnd = Math.min( 14685 end, 14686 priorFocusedElem.value.length 14687 ); 14688 else { 14689 var doc = priorFocusedElem.ownerDocument || document, win = doc && doc.defaultView || window; 14690 if (win.getSelection) { 14691 var selection = win.getSelection(), length = priorFocusedElem.textContent.length, start$jscomp$0 = Math.min( 14692 priorSelectionRange.start, 14693 length 14694 ), end$jscomp$0 = void 0 === priorSelectionRange.end ? start$jscomp$0 : Math.min(priorSelectionRange.end, length); 14695 !selection.extend && start$jscomp$0 > end$jscomp$0 && (curFocusedElem = end$jscomp$0, end$jscomp$0 = start$jscomp$0, start$jscomp$0 = curFocusedElem); 14696 var startMarker = getNodeForCharacterOffset( 14697 priorFocusedElem, 14698 start$jscomp$0 14699 ), endMarker = getNodeForCharacterOffset( 14700 priorFocusedElem, 14701 end$jscomp$0 14702 ); 14703 if (startMarker && endMarker && (1 !== selection.rangeCount || selection.anchorNode !== startMarker.node || selection.anchorOffset !== startMarker.offset || selection.focusNode !== endMarker.node || selection.focusOffset !== endMarker.offset)) { 14704 var range = doc.createRange(); 14705 range.setStart(startMarker.node, startMarker.offset); 14706 selection.removeAllRanges(); 14707 start$jscomp$0 > end$jscomp$0 ? (selection.addRange(range), selection.extend(endMarker.node, endMarker.offset)) : (range.setEnd(endMarker.node, endMarker.offset), selection.addRange(range)); 14708 } 14709 } 14710 } 14711 } 14712 doc = []; 14713 for (selection = priorFocusedElem; selection = selection.parentNode; ) 14714 1 === selection.nodeType && doc.push({ 14715 element: selection, 14716 left: selection.scrollLeft, 14717 top: selection.scrollTop 14718 }); 14719 "function" === typeof priorFocusedElem.focus && priorFocusedElem.focus(); 14720 for (priorFocusedElem = 0; priorFocusedElem < doc.length; priorFocusedElem++) { 14721 var info = doc[priorFocusedElem]; 14722 info.element.scrollLeft = info.left; 14723 info.element.scrollTop = info.top; 14724 } 14725 } 14726 _enabled = !!eventsEnabled; 14727 selectionInformation = eventsEnabled = null; 14728 } finally { 14729 executionContext = prevExecutionContext, ReactDOMSharedInternals.p = previousPriority, ReactSharedInternals.T = rootMutationHasEffect; 14730 } 14731 } 14732 root3.current = finishedWork; 14733 pendingEffectsStatus = PENDING_LAYOUT_PHASE; 14734 } 14735 } 14736 function flushLayoutEffects() { 14737 if (pendingEffectsStatus === PENDING_LAYOUT_PHASE) { 14738 pendingEffectsStatus = NO_PENDING_EFFECTS; 14739 var suspendedViewTransitionReason = pendingSuspendedViewTransitionReason; 14740 if (null !== suspendedViewTransitionReason) { 14741 commitStartTime = now3(); 14742 var startTime = commitEndTime, endTime = commitStartTime; 14743 !supportsUserTiming || endTime <= startTime || (animatingTask ? animatingTask.run( 14744 console.timeStamp.bind( 14745 console, 14746 suspendedViewTransitionReason, 14747 startTime, 14748 endTime, 14749 currentTrack, 14750 LANES_TRACK_GROUP, 14751 "secondary-light" 14752 ) 14753 ) : console.timeStamp( 14754 suspendedViewTransitionReason, 14755 startTime, 14756 endTime, 14757 currentTrack, 14758 LANES_TRACK_GROUP, 14759 "secondary-light" 14760 )); 14761 } 14762 suspendedViewTransitionReason = pendingEffectsRoot; 14763 startTime = pendingFinishedWork; 14764 endTime = pendingEffectsLanes; 14765 var rootHasLayoutEffect = 0 !== (startTime.flags & 8772); 14766 if (0 !== (startTime.subtreeFlags & 8772) || rootHasLayoutEffect) { 14767 rootHasLayoutEffect = ReactSharedInternals.T; 14768 ReactSharedInternals.T = null; 14769 var _previousPriority = ReactDOMSharedInternals.p; 14770 ReactDOMSharedInternals.p = DiscreteEventPriority; 14771 var _prevExecutionContext = executionContext; 14772 executionContext |= CommitContext; 14773 try { 14774 inProgressLanes = endTime, inProgressRoot = suspendedViewTransitionReason, resetComponentEffectTimers(), commitLayoutEffectOnFiber( 14775 suspendedViewTransitionReason, 14776 startTime.alternate, 14777 startTime 14778 ), inProgressRoot = inProgressLanes = null; 14779 } finally { 14780 executionContext = _prevExecutionContext, ReactDOMSharedInternals.p = _previousPriority, ReactSharedInternals.T = rootHasLayoutEffect; 14781 } 14782 } 14783 suspendedViewTransitionReason = pendingEffectsRenderEndTime; 14784 startTime = pendingSuspendedCommitReason; 14785 commitEndTime = now3(); 14786 suspendedViewTransitionReason = null === startTime ? suspendedViewTransitionReason : commitStartTime; 14787 startTime = commitEndTime; 14788 endTime = pendingDelayedCommitReason === ABORTED_VIEW_TRANSITION_COMMIT; 14789 rootHasLayoutEffect = workInProgressUpdateTask; 14790 null !== commitErrors ? logCommitErrored( 14791 suspendedViewTransitionReason, 14792 startTime, 14793 commitErrors, 14794 false, 14795 rootHasLayoutEffect 14796 ) : !supportsUserTiming || startTime <= suspendedViewTransitionReason || (rootHasLayoutEffect ? rootHasLayoutEffect.run( 14797 console.timeStamp.bind( 14798 console, 14799 endTime ? "Commit Interrupted View Transition" : "Commit", 14800 suspendedViewTransitionReason, 14801 startTime, 14802 currentTrack, 14803 LANES_TRACK_GROUP, 14804 endTime ? "error" : "secondary-dark" 14805 ) 14806 ) : console.timeStamp( 14807 endTime ? "Commit Interrupted View Transition" : "Commit", 14808 suspendedViewTransitionReason, 14809 startTime, 14810 currentTrack, 14811 LANES_TRACK_GROUP, 14812 endTime ? "error" : "secondary-dark" 14813 )); 14814 pendingEffectsStatus = PENDING_AFTER_MUTATION_PHASE; 14815 } 14816 } 14817 function flushSpawnedWork() { 14818 if (pendingEffectsStatus === PENDING_SPAWNED_WORK || pendingEffectsStatus === PENDING_AFTER_MUTATION_PHASE) { 14819 if (pendingEffectsStatus === PENDING_SPAWNED_WORK) { 14820 var startViewTransitionStartTime = commitEndTime; 14821 commitEndTime = now3(); 14822 var endTime = commitEndTime, abortedViewTransition = pendingDelayedCommitReason === ABORTED_VIEW_TRANSITION_COMMIT; 14823 !supportsUserTiming || endTime <= startViewTransitionStartTime || (animatingTask ? animatingTask.run( 14824 console.timeStamp.bind( 14825 console, 14826 abortedViewTransition ? "Interrupted View Transition" : "Starting Animation", 14827 startViewTransitionStartTime, 14828 endTime, 14829 currentTrack, 14830 LANES_TRACK_GROUP, 14831 abortedViewTransition ? "error" : "secondary-light" 14832 ) 14833 ) : console.timeStamp( 14834 abortedViewTransition ? "Interrupted View Transition" : "Starting Animation", 14835 startViewTransitionStartTime, 14836 endTime, 14837 currentTrack, 14838 LANES_TRACK_GROUP, 14839 abortedViewTransition ? " error" : "secondary-light" 14840 )); 14841 pendingDelayedCommitReason !== ABORTED_VIEW_TRANSITION_COMMIT && (pendingDelayedCommitReason = ANIMATION_STARTED_COMMIT); 14842 } 14843 pendingEffectsStatus = NO_PENDING_EFFECTS; 14844 requestPaint(); 14845 startViewTransitionStartTime = pendingEffectsRoot; 14846 var finishedWork = pendingFinishedWork; 14847 endTime = pendingEffectsLanes; 14848 abortedViewTransition = pendingRecoverableErrors; 14849 var rootDidHavePassiveEffects = 0 !== finishedWork.actualDuration || 0 !== (finishedWork.subtreeFlags & 10256) || 0 !== (finishedWork.flags & 10256); 14850 rootDidHavePassiveEffects ? pendingEffectsStatus = PENDING_PASSIVE_PHASE : (pendingEffectsStatus = NO_PENDING_EFFECTS, pendingFinishedWork = pendingEffectsRoot = null, releaseRootPooledCache( 14851 startViewTransitionStartTime, 14852 startViewTransitionStartTime.pendingLanes 14853 ), nestedPassiveUpdateCount = 0, rootWithPassiveNestedUpdates = null); 14854 var remainingLanes = startViewTransitionStartTime.pendingLanes; 14855 0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null); 14856 rootDidHavePassiveEffects || commitDoubleInvokeEffectsInDEV(startViewTransitionStartTime); 14857 remainingLanes = lanesToEventPriority(endTime); 14858 finishedWork = finishedWork.stateNode; 14859 if (injectedHook && "function" === typeof injectedHook.onCommitFiberRoot) 14860 try { 14861 var didError = 128 === (finishedWork.current.flags & 128); 14862 switch (remainingLanes) { 14863 case DiscreteEventPriority: 14864 var schedulerPriority = ImmediatePriority; 14865 break; 14866 case ContinuousEventPriority: 14867 schedulerPriority = UserBlockingPriority; 14868 break; 14869 case DefaultEventPriority: 14870 schedulerPriority = NormalPriority$1; 14871 break; 14872 case IdleEventPriority: 14873 schedulerPriority = IdlePriority; 14874 break; 14875 default: 14876 schedulerPriority = NormalPriority$1; 14877 } 14878 injectedHook.onCommitFiberRoot( 14879 rendererID, 14880 finishedWork, 14881 schedulerPriority, 14882 didError 14883 ); 14884 } catch (err) { 14885 hasLoggedError || (hasLoggedError = true, console.error( 14886 "React instrumentation encountered an error: %o", 14887 err 14888 )); 14889 } 14890 isDevToolsPresent && startViewTransitionStartTime.memoizedUpdaters.clear(); 14891 onCommitRoot(); 14892 if (null !== abortedViewTransition) { 14893 didError = ReactSharedInternals.T; 14894 schedulerPriority = ReactDOMSharedInternals.p; 14895 ReactDOMSharedInternals.p = DiscreteEventPriority; 14896 ReactSharedInternals.T = null; 14897 try { 14898 var onRecoverableError = startViewTransitionStartTime.onRecoverableError; 14899 for (finishedWork = 0; finishedWork < abortedViewTransition.length; finishedWork++) { 14900 var recoverableError = abortedViewTransition[finishedWork], errorInfo = makeErrorInfo(recoverableError.stack); 14901 runWithFiberInDEV( 14902 recoverableError.source, 14903 onRecoverableError, 14904 recoverableError.value, 14905 errorInfo 14906 ); 14907 } 14908 } finally { 14909 ReactSharedInternals.T = didError, ReactDOMSharedInternals.p = schedulerPriority; 14910 } 14911 } 14912 0 !== (pendingEffectsLanes & 3) && flushPendingEffects(); 14913 ensureRootIsScheduled(startViewTransitionStartTime); 14914 remainingLanes = startViewTransitionStartTime.pendingLanes; 14915 0 !== (endTime & 261930) && 0 !== (remainingLanes & 42) ? (nestedUpdateScheduled = true, startViewTransitionStartTime === rootWithNestedUpdates ? nestedUpdateCount++ : (nestedUpdateCount = 0, rootWithNestedUpdates = startViewTransitionStartTime)) : nestedUpdateCount = 0; 14916 rootDidHavePassiveEffects || finalizeRender(endTime, commitEndTime); 14917 flushSyncWorkAcrossRoots_impl(0, false); 14918 } 14919 } 14920 function makeErrorInfo(componentStack) { 14921 componentStack = { componentStack }; 14922 Object.defineProperty(componentStack, "digest", { 14923 get: function() { 14924 console.error( 14925 'You are accessing "digest" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.' 14926 ); 14927 } 14928 }); 14929 return componentStack; 14930 } 14931 function releaseRootPooledCache(root3, remainingLanes) { 14932 0 === (root3.pooledCacheLanes &= remainingLanes) && (remainingLanes = root3.pooledCache, null != remainingLanes && (root3.pooledCache = null, releaseCache(remainingLanes))); 14933 } 14934 function flushPendingEffects() { 14935 flushMutationEffects(); 14936 flushLayoutEffects(); 14937 flushSpawnedWork(); 14938 return flushPassiveEffects(); 14939 } 14940 function flushPassiveEffects() { 14941 if (pendingEffectsStatus !== PENDING_PASSIVE_PHASE) return false; 14942 var root3 = pendingEffectsRoot, remainingLanes = pendingEffectsRemainingLanes; 14943 pendingEffectsRemainingLanes = 0; 14944 var renderPriority = lanesToEventPriority(pendingEffectsLanes), priority = 0 === DefaultEventPriority || DefaultEventPriority > renderPriority ? DefaultEventPriority : renderPriority; 14945 renderPriority = ReactSharedInternals.T; 14946 var previousPriority = ReactDOMSharedInternals.p; 14947 try { 14948 ReactDOMSharedInternals.p = priority; 14949 ReactSharedInternals.T = null; 14950 var transitions = pendingPassiveTransitions; 14951 pendingPassiveTransitions = null; 14952 priority = pendingEffectsRoot; 14953 var lanes = pendingEffectsLanes; 14954 pendingEffectsStatus = NO_PENDING_EFFECTS; 14955 pendingFinishedWork = pendingEffectsRoot = null; 14956 pendingEffectsLanes = 0; 14957 if ((executionContext & (RenderContext | CommitContext)) !== NoContext) 14958 throw Error("Cannot flush passive effects while already rendering."); 14959 setCurrentTrackFromLanes(lanes); 14960 isFlushingPassiveEffects = true; 14961 didScheduleUpdateDuringPassiveEffects = false; 14962 var passiveEffectStartTime = 0; 14963 commitErrors = null; 14964 passiveEffectStartTime = now$1(); 14965 if (pendingDelayedCommitReason === ANIMATION_STARTED_COMMIT) 14966 logAnimatingPhase( 14967 commitEndTime, 14968 passiveEffectStartTime, 14969 animatingTask 14970 ); 14971 else { 14972 var startTime = commitEndTime, endTime = passiveEffectStartTime, delayedUntilPaint = pendingDelayedCommitReason === DELAYED_PASSIVE_COMMIT; 14973 !supportsUserTiming || endTime <= startTime || (workInProgressUpdateTask ? workInProgressUpdateTask.run( 14974 console.timeStamp.bind( 14975 console, 14976 delayedUntilPaint ? "Waiting for Paint" : "Waiting", 14977 startTime, 14978 endTime, 14979 currentTrack, 14980 LANES_TRACK_GROUP, 14981 "secondary-light" 14982 ) 14983 ) : console.timeStamp( 14984 delayedUntilPaint ? "Waiting for Paint" : "Waiting", 14985 startTime, 14986 endTime, 14987 currentTrack, 14988 LANES_TRACK_GROUP, 14989 "secondary-light" 14990 )); 14991 } 14992 startTime = executionContext; 14993 executionContext |= CommitContext; 14994 var finishedWork = priority.current; 14995 resetComponentEffectTimers(); 14996 commitPassiveUnmountOnFiber(finishedWork); 14997 var finishedWork$jscomp$0 = priority.current; 14998 finishedWork = pendingEffectsRenderEndTime; 14999 resetComponentEffectTimers(); 15000 commitPassiveMountOnFiber( 15001 priority, 15002 finishedWork$jscomp$0, 15003 lanes, 15004 transitions, 15005 finishedWork 15006 ); 15007 commitDoubleInvokeEffectsInDEV(priority); 15008 executionContext = startTime; 15009 var passiveEffectsEndTime = now$1(); 15010 finishedWork$jscomp$0 = passiveEffectStartTime; 15011 finishedWork = workInProgressUpdateTask; 15012 null !== commitErrors ? logCommitErrored( 15013 finishedWork$jscomp$0, 15014 passiveEffectsEndTime, 15015 commitErrors, 15016 true, 15017 finishedWork 15018 ) : !supportsUserTiming || passiveEffectsEndTime <= finishedWork$jscomp$0 || (finishedWork ? finishedWork.run( 15019 console.timeStamp.bind( 15020 console, 15021 "Remaining Effects", 15022 finishedWork$jscomp$0, 15023 passiveEffectsEndTime, 15024 currentTrack, 15025 LANES_TRACK_GROUP, 15026 "secondary-dark" 15027 ) 15028 ) : console.timeStamp( 15029 "Remaining Effects", 15030 finishedWork$jscomp$0, 15031 passiveEffectsEndTime, 15032 currentTrack, 15033 LANES_TRACK_GROUP, 15034 "secondary-dark" 15035 )); 15036 finalizeRender(lanes, passiveEffectsEndTime); 15037 flushSyncWorkAcrossRoots_impl(0, false); 15038 didScheduleUpdateDuringPassiveEffects ? priority === rootWithPassiveNestedUpdates ? nestedPassiveUpdateCount++ : (nestedPassiveUpdateCount = 0, rootWithPassiveNestedUpdates = priority) : nestedPassiveUpdateCount = 0; 15039 didScheduleUpdateDuringPassiveEffects = isFlushingPassiveEffects = false; 15040 if (injectedHook && "function" === typeof injectedHook.onPostCommitFiberRoot) 15041 try { 15042 injectedHook.onPostCommitFiberRoot(rendererID, priority); 15043 } catch (err) { 15044 hasLoggedError || (hasLoggedError = true, console.error( 15045 "React instrumentation encountered an error: %o", 15046 err 15047 )); 15048 } 15049 var stateNode = priority.current.stateNode; 15050 stateNode.effectDuration = 0; 15051 stateNode.passiveEffectDuration = 0; 15052 return true; 15053 } finally { 15054 ReactDOMSharedInternals.p = previousPriority, ReactSharedInternals.T = renderPriority, releaseRootPooledCache(root3, remainingLanes); 15055 } 15056 } 15057 function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error2) { 15058 sourceFiber = createCapturedValueAtFiber(error2, sourceFiber); 15059 recordEffectError(sourceFiber); 15060 sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2); 15061 rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2); 15062 null !== rootFiber && (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber)); 15063 } 15064 function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error2) { 15065 isRunningInsertionEffect = false; 15066 if (3 === sourceFiber.tag) 15067 captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error2); 15068 else { 15069 for (; null !== nearestMountedAncestor; ) { 15070 if (3 === nearestMountedAncestor.tag) { 15071 captureCommitPhaseErrorOnRoot( 15072 nearestMountedAncestor, 15073 sourceFiber, 15074 error2 15075 ); 15076 return; 15077 } 15078 if (1 === nearestMountedAncestor.tag) { 15079 var instance = nearestMountedAncestor.stateNode; 15080 if ("function" === typeof nearestMountedAncestor.type.getDerivedStateFromError || "function" === typeof instance.componentDidCatch && (null === legacyErrorBoundariesThatAlreadyFailed || !legacyErrorBoundariesThatAlreadyFailed.has(instance))) { 15081 sourceFiber = createCapturedValueAtFiber(error2, sourceFiber); 15082 recordEffectError(sourceFiber); 15083 error2 = createClassErrorUpdate(2); 15084 instance = enqueueUpdate(nearestMountedAncestor, error2, 2); 15085 null !== instance && (initializeClassErrorUpdate( 15086 error2, 15087 instance, 15088 nearestMountedAncestor, 15089 sourceFiber 15090 ), markRootUpdated$1(instance, 2), ensureRootIsScheduled(instance)); 15091 return; 15092 } 15093 } 15094 nearestMountedAncestor = nearestMountedAncestor.return; 15095 } 15096 console.error( 15097 "Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\n\nError message:\n\n%s", 15098 error2 15099 ); 15100 } 15101 } 15102 function attachPingListener(root3, wakeable, lanes) { 15103 var pingCache = root3.pingCache; 15104 if (null === pingCache) { 15105 pingCache = root3.pingCache = new PossiblyWeakMap(); 15106 var threadIDs = /* @__PURE__ */ new Set(); 15107 pingCache.set(wakeable, threadIDs); 15108 } else 15109 threadIDs = pingCache.get(wakeable), void 0 === threadIDs && (threadIDs = /* @__PURE__ */ new Set(), pingCache.set(wakeable, threadIDs)); 15110 threadIDs.has(lanes) || (workInProgressRootDidAttachPingListener = true, threadIDs.add(lanes), pingCache = pingSuspendedRoot.bind(null, root3, wakeable, lanes), isDevToolsPresent && restorePendingUpdaters(root3, lanes), wakeable.then(pingCache, pingCache)); 15111 } 15112 function pingSuspendedRoot(root3, wakeable, pingedLanes) { 15113 var pingCache = root3.pingCache; 15114 null !== pingCache && pingCache.delete(wakeable); 15115 root3.pingedLanes |= root3.suspendedLanes & pingedLanes; 15116 root3.warmLanes &= ~pingedLanes; 15117 0 !== (pingedLanes & 127) ? 0 > blockingUpdateTime && (blockingClampTime = blockingUpdateTime = now3(), blockingUpdateTask = createTask("Promise Resolved"), blockingUpdateType = PINGED_UPDATE) : 0 !== (pingedLanes & 4194048) && 0 > transitionUpdateTime && (transitionClampTime = transitionUpdateTime = now3(), transitionUpdateTask = createTask("Promise Resolved"), transitionUpdateType = PINGED_UPDATE); 15118 isConcurrentActEnvironment() && null === ReactSharedInternals.actQueue && console.error( 15119 "A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\n\nWhen testing, code that resolves suspended data should be wrapped into act(...):\n\nact(() => {\n /* finish loading suspended data */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act" 15120 ); 15121 workInProgressRoot === root3 && (workInProgressRootRenderLanes & pingedLanes) === pingedLanes && (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && (workInProgressRootRenderLanes & 62914560) === workInProgressRootRenderLanes && now$1() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS ? (executionContext & RenderContext) === NoContext && prepareFreshStack(root3, 0) : workInProgressRootPingedLanes |= pingedLanes, workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes && (workInProgressSuspendedRetryLanes = 0)); 15122 ensureRootIsScheduled(root3); 15123 } 15124 function retryTimedOutBoundary(boundaryFiber, retryLane) { 15125 0 === retryLane && (retryLane = claimNextRetryLane()); 15126 boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane); 15127 null !== boundaryFiber && (markRootUpdated$1(boundaryFiber, retryLane), ensureRootIsScheduled(boundaryFiber)); 15128 } 15129 function retryDehydratedSuspenseBoundary(boundaryFiber) { 15130 var suspenseState = boundaryFiber.memoizedState, retryLane = 0; 15131 null !== suspenseState && (retryLane = suspenseState.retryLane); 15132 retryTimedOutBoundary(boundaryFiber, retryLane); 15133 } 15134 function resolveRetryWakeable(boundaryFiber, wakeable) { 15135 var retryLane = 0; 15136 switch (boundaryFiber.tag) { 15137 case 31: 15138 case 13: 15139 var retryCache = boundaryFiber.stateNode; 15140 var suspenseState = boundaryFiber.memoizedState; 15141 null !== suspenseState && (retryLane = suspenseState.retryLane); 15142 break; 15143 case 19: 15144 retryCache = boundaryFiber.stateNode; 15145 break; 15146 case 22: 15147 retryCache = boundaryFiber.stateNode._retryCache; 15148 break; 15149 default: 15150 throw Error( 15151 "Pinged unknown suspense boundary type. This is probably a bug in React." 15152 ); 15153 } 15154 null !== retryCache && retryCache.delete(wakeable); 15155 retryTimedOutBoundary(boundaryFiber, retryLane); 15156 } 15157 function recursivelyTraverseAndDoubleInvokeEffectsInDEV(root$jscomp$0, parentFiber, isInStrictMode) { 15158 if (0 !== (parentFiber.subtreeFlags & 67117056)) 15159 for (parentFiber = parentFiber.child; null !== parentFiber; ) { 15160 var root3 = root$jscomp$0, fiber = parentFiber, isStrictModeFiber = fiber.type === REACT_STRICT_MODE_TYPE; 15161 isStrictModeFiber = isInStrictMode || isStrictModeFiber; 15162 22 !== fiber.tag ? fiber.flags & 67108864 ? isStrictModeFiber && runWithFiberInDEV( 15163 fiber, 15164 doubleInvokeEffectsOnFiber, 15165 root3, 15166 fiber 15167 ) : recursivelyTraverseAndDoubleInvokeEffectsInDEV( 15168 root3, 15169 fiber, 15170 isStrictModeFiber 15171 ) : null === fiber.memoizedState && (isStrictModeFiber && fiber.flags & 8192 ? runWithFiberInDEV( 15172 fiber, 15173 doubleInvokeEffectsOnFiber, 15174 root3, 15175 fiber 15176 ) : fiber.subtreeFlags & 67108864 && runWithFiberInDEV( 15177 fiber, 15178 recursivelyTraverseAndDoubleInvokeEffectsInDEV, 15179 root3, 15180 fiber, 15181 isStrictModeFiber 15182 )); 15183 parentFiber = parentFiber.sibling; 15184 } 15185 } 15186 function doubleInvokeEffectsOnFiber(root3, fiber) { 15187 setIsStrictModeForDevtools(true); 15188 try { 15189 disappearLayoutEffects(fiber), disconnectPassiveEffect(fiber), reappearLayoutEffects(root3, fiber.alternate, fiber, false), reconnectPassiveEffects(root3, fiber, 0, null, false, 0); 15190 } finally { 15191 setIsStrictModeForDevtools(false); 15192 } 15193 } 15194 function commitDoubleInvokeEffectsInDEV(root3) { 15195 var doubleInvokeEffects = true; 15196 root3.current.mode & (StrictLegacyMode | StrictEffectsMode) || (doubleInvokeEffects = false); 15197 recursivelyTraverseAndDoubleInvokeEffectsInDEV( 15198 root3, 15199 root3.current, 15200 doubleInvokeEffects 15201 ); 15202 } 15203 function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) { 15204 if ((executionContext & RenderContext) === NoContext) { 15205 var tag = fiber.tag; 15206 if (3 === tag || 1 === tag || 0 === tag || 11 === tag || 14 === tag || 15 === tag) { 15207 tag = getComponentNameFromFiber(fiber) || "ReactComponent"; 15208 if (null !== didWarnStateUpdateForNotYetMountedComponent) { 15209 if (didWarnStateUpdateForNotYetMountedComponent.has(tag)) return; 15210 didWarnStateUpdateForNotYetMountedComponent.add(tag); 15211 } else didWarnStateUpdateForNotYetMountedComponent = /* @__PURE__ */ new Set([tag]); 15212 runWithFiberInDEV(fiber, function() { 15213 console.error( 15214 "Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead." 15215 ); 15216 }); 15217 } 15218 } 15219 } 15220 function restorePendingUpdaters(root3, lanes) { 15221 isDevToolsPresent && root3.memoizedUpdaters.forEach(function(schedulingFiber) { 15222 addFiberToLanesMap(root3, schedulingFiber, lanes); 15223 }); 15224 } 15225 function scheduleCallback$1(priorityLevel, callback) { 15226 var actQueue = ReactSharedInternals.actQueue; 15227 return null !== actQueue ? (actQueue.push(callback), fakeActCallbackNode$1) : scheduleCallback$3(priorityLevel, callback); 15228 } 15229 function warnIfUpdatesNotWrappedWithActDEV(fiber) { 15230 isConcurrentActEnvironment() && null === ReactSharedInternals.actQueue && runWithFiberInDEV(fiber, function() { 15231 console.error( 15232 "An update to %s inside a test was not wrapped in act(...).\n\nWhen testing, code that causes React state updates should be wrapped into act(...):\n\nact(() => {\n /* fire events that update state */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act", 15233 getComponentNameFromFiber(fiber) 15234 ); 15235 }); 15236 } 15237 function ensureRootIsScheduled(root3) { 15238 root3 !== lastScheduledRoot && null === root3.next && (null === lastScheduledRoot ? firstScheduledRoot = lastScheduledRoot = root3 : lastScheduledRoot = lastScheduledRoot.next = root3); 15239 mightHavePendingSyncWork = true; 15240 null !== ReactSharedInternals.actQueue ? didScheduleMicrotask_act || (didScheduleMicrotask_act = true, scheduleImmediateRootScheduleTask()) : didScheduleMicrotask || (didScheduleMicrotask = true, scheduleImmediateRootScheduleTask()); 15241 } 15242 function flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) { 15243 if (!isFlushingWork && mightHavePendingSyncWork) { 15244 isFlushingWork = true; 15245 do { 15246 var didPerformSomeWork = false; 15247 for (var root3 = firstScheduledRoot; null !== root3; ) { 15248 if (!onlyLegacy) 15249 if (0 !== syncTransitionLanes) { 15250 var pendingLanes = root3.pendingLanes; 15251 if (0 === pendingLanes) var nextLanes = 0; 15252 else { 15253 var suspendedLanes = root3.suspendedLanes, pingedLanes = root3.pingedLanes; 15254 nextLanes = (1 << 31 - clz32(42 | syncTransitionLanes) + 1) - 1; 15255 nextLanes &= pendingLanes & ~(suspendedLanes & ~pingedLanes); 15256 nextLanes = nextLanes & 201326741 ? nextLanes & 201326741 | 1 : nextLanes ? nextLanes | 2 : 0; 15257 } 15258 0 !== nextLanes && (didPerformSomeWork = true, performSyncWorkOnRoot(root3, nextLanes)); 15259 } else 15260 nextLanes = workInProgressRootRenderLanes, nextLanes = getNextLanes( 15261 root3, 15262 root3 === workInProgressRoot ? nextLanes : 0, 15263 null !== root3.cancelPendingCommit || root3.timeoutHandle !== noTimeout 15264 ), 0 === (nextLanes & 3) || checkIfRootIsPrerendering(root3, nextLanes) || (didPerformSomeWork = true, performSyncWorkOnRoot(root3, nextLanes)); 15265 root3 = root3.next; 15266 } 15267 } while (didPerformSomeWork); 15268 isFlushingWork = false; 15269 } 15270 } 15271 function processRootScheduleInImmediateTask() { 15272 schedulerEvent = window.event; 15273 processRootScheduleInMicrotask(); 15274 } 15275 function processRootScheduleInMicrotask() { 15276 mightHavePendingSyncWork = didScheduleMicrotask_act = didScheduleMicrotask = false; 15277 var syncTransitionLanes = 0; 15278 0 !== currentEventTransitionLane && shouldAttemptEagerTransition() && (syncTransitionLanes = currentEventTransitionLane); 15279 for (var currentTime = now$1(), prev = null, root3 = firstScheduledRoot; null !== root3; ) { 15280 var next = root3.next, nextLanes = scheduleTaskForRootDuringMicrotask(root3, currentTime); 15281 if (0 === nextLanes) 15282 root3.next = null, null === prev ? firstScheduledRoot = next : prev.next = next, null === next && (lastScheduledRoot = prev); 15283 else if (prev = root3, 0 !== syncTransitionLanes || 0 !== (nextLanes & 3)) 15284 mightHavePendingSyncWork = true; 15285 root3 = next; 15286 } 15287 pendingEffectsStatus !== NO_PENDING_EFFECTS && pendingEffectsStatus !== PENDING_PASSIVE_PHASE || flushSyncWorkAcrossRoots_impl(syncTransitionLanes, false); 15288 0 !== currentEventTransitionLane && (currentEventTransitionLane = 0); 15289 } 15290 function scheduleTaskForRootDuringMicrotask(root3, currentTime) { 15291 for (var suspendedLanes = root3.suspendedLanes, pingedLanes = root3.pingedLanes, expirationTimes = root3.expirationTimes, lanes = root3.pendingLanes & -62914561; 0 < lanes; ) { 15292 var index = 31 - clz32(lanes), lane = 1 << index, expirationTime = expirationTimes[index]; 15293 if (-1 === expirationTime) { 15294 if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes)) 15295 expirationTimes[index] = computeExpirationTime(lane, currentTime); 15296 } else expirationTime <= currentTime && (root3.expiredLanes |= lane); 15297 lanes &= ~lane; 15298 } 15299 currentTime = workInProgressRoot; 15300 suspendedLanes = workInProgressRootRenderLanes; 15301 suspendedLanes = getNextLanes( 15302 root3, 15303 root3 === currentTime ? suspendedLanes : 0, 15304 null !== root3.cancelPendingCommit || root3.timeoutHandle !== noTimeout 15305 ); 15306 pingedLanes = root3.callbackNode; 15307 if (0 === suspendedLanes || root3 === currentTime && (workInProgressSuspendedReason === SuspendedOnData || workInProgressSuspendedReason === SuspendedOnAction) || null !== root3.cancelPendingCommit) 15308 return null !== pingedLanes && cancelCallback(pingedLanes), root3.callbackNode = null, root3.callbackPriority = 0; 15309 if (0 === (suspendedLanes & 3) || checkIfRootIsPrerendering(root3, suspendedLanes)) { 15310 currentTime = suspendedLanes & -suspendedLanes; 15311 if (currentTime !== root3.callbackPriority || null !== ReactSharedInternals.actQueue && pingedLanes !== fakeActCallbackNode) 15312 cancelCallback(pingedLanes); 15313 else return currentTime; 15314 switch (lanesToEventPriority(suspendedLanes)) { 15315 case DiscreteEventPriority: 15316 case ContinuousEventPriority: 15317 suspendedLanes = UserBlockingPriority; 15318 break; 15319 case DefaultEventPriority: 15320 suspendedLanes = NormalPriority$1; 15321 break; 15322 case IdleEventPriority: 15323 suspendedLanes = IdlePriority; 15324 break; 15325 default: 15326 suspendedLanes = NormalPriority$1; 15327 } 15328 pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root3); 15329 null !== ReactSharedInternals.actQueue ? (ReactSharedInternals.actQueue.push(pingedLanes), suspendedLanes = fakeActCallbackNode) : suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes); 15330 root3.callbackPriority = currentTime; 15331 root3.callbackNode = suspendedLanes; 15332 return currentTime; 15333 } 15334 null !== pingedLanes && cancelCallback(pingedLanes); 15335 root3.callbackPriority = 2; 15336 root3.callbackNode = null; 15337 return 2; 15338 } 15339 function performWorkOnRootViaSchedulerTask(root3, didTimeout) { 15340 nestedUpdateScheduled = currentUpdateIsNested = false; 15341 schedulerEvent = window.event; 15342 if (pendingEffectsStatus !== NO_PENDING_EFFECTS && pendingEffectsStatus !== PENDING_PASSIVE_PHASE) 15343 return root3.callbackNode = null, root3.callbackPriority = 0, null; 15344 var originalCallbackNode = root3.callbackNode; 15345 pendingDelayedCommitReason === IMMEDIATE_COMMIT && (pendingDelayedCommitReason = DELAYED_PASSIVE_COMMIT); 15346 if (flushPendingEffects() && root3.callbackNode !== originalCallbackNode) 15347 return null; 15348 var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes; 15349 workInProgressRootRenderLanes$jscomp$0 = getNextLanes( 15350 root3, 15351 root3 === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0, 15352 null !== root3.cancelPendingCommit || root3.timeoutHandle !== noTimeout 15353 ); 15354 if (0 === workInProgressRootRenderLanes$jscomp$0) return null; 15355 performWorkOnRoot( 15356 root3, 15357 workInProgressRootRenderLanes$jscomp$0, 15358 didTimeout 15359 ); 15360 scheduleTaskForRootDuringMicrotask(root3, now$1()); 15361 return null != root3.callbackNode && root3.callbackNode === originalCallbackNode ? performWorkOnRootViaSchedulerTask.bind(null, root3) : null; 15362 } 15363 function performSyncWorkOnRoot(root3, lanes) { 15364 if (flushPendingEffects()) return null; 15365 currentUpdateIsNested = nestedUpdateScheduled; 15366 nestedUpdateScheduled = false; 15367 performWorkOnRoot(root3, lanes, true); 15368 } 15369 function cancelCallback(callbackNode) { 15370 callbackNode !== fakeActCallbackNode && null !== callbackNode && cancelCallback$1(callbackNode); 15371 } 15372 function scheduleImmediateRootScheduleTask() { 15373 null !== ReactSharedInternals.actQueue && ReactSharedInternals.actQueue.push(function() { 15374 processRootScheduleInMicrotask(); 15375 return null; 15376 }); 15377 scheduleMicrotask(function() { 15378 (executionContext & (RenderContext | CommitContext)) !== NoContext ? scheduleCallback$3( 15379 ImmediatePriority, 15380 processRootScheduleInImmediateTask 15381 ) : processRootScheduleInMicrotask(); 15382 }); 15383 } 15384 function requestTransitionLane() { 15385 if (0 === currentEventTransitionLane) { 15386 var actionScopeLane = currentEntangledLane; 15387 0 === actionScopeLane && (actionScopeLane = nextTransitionUpdateLane, nextTransitionUpdateLane <<= 1, 0 === (nextTransitionUpdateLane & 261888) && (nextTransitionUpdateLane = 256)); 15388 currentEventTransitionLane = actionScopeLane; 15389 } 15390 return currentEventTransitionLane; 15391 } 15392 function coerceFormActionProp(actionProp) { 15393 if (null == actionProp || "symbol" === typeof actionProp || "boolean" === typeof actionProp) 15394 return null; 15395 if ("function" === typeof actionProp) return actionProp; 15396 checkAttributeStringCoercion(actionProp, "action"); 15397 return sanitizeURL("" + actionProp); 15398 } 15399 function createFormDataWithSubmitter(form, submitter2) { 15400 var temp = submitter2.ownerDocument.createElement("input"); 15401 temp.name = submitter2.name; 15402 temp.value = submitter2.value; 15403 form.id && temp.setAttribute("form", form.id); 15404 submitter2.parentNode.insertBefore(temp, submitter2); 15405 form = new FormData(form); 15406 temp.parentNode.removeChild(temp); 15407 return form; 15408 } 15409 function extractEvents$1(dispatchQueue, domEventName, maybeTargetInst, nativeEvent, nativeEventTarget) { 15410 if ("submit" === domEventName && maybeTargetInst && maybeTargetInst.stateNode === nativeEventTarget) { 15411 var action = coerceFormActionProp( 15412 (nativeEventTarget[internalPropsKey] || null).action 15413 ), submitter2 = nativeEvent.submitter; 15414 submitter2 && (domEventName = (domEventName = submitter2[internalPropsKey] || null) ? coerceFormActionProp(domEventName.formAction) : submitter2.getAttribute("formAction"), null !== domEventName && (action = domEventName, submitter2 = null)); 15415 var event = new SyntheticEvent( 15416 "action", 15417 "action", 15418 null, 15419 nativeEvent, 15420 nativeEventTarget 15421 ); 15422 dispatchQueue.push({ 15423 event, 15424 listeners: [ 15425 { 15426 instance: null, 15427 listener: function() { 15428 if (nativeEvent.defaultPrevented) { 15429 if (0 !== currentEventTransitionLane) { 15430 var formData = submitter2 ? createFormDataWithSubmitter( 15431 nativeEventTarget, 15432 submitter2 15433 ) : new FormData(nativeEventTarget), pendingState = { 15434 pending: true, 15435 data: formData, 15436 method: nativeEventTarget.method, 15437 action 15438 }; 15439 Object.freeze(pendingState); 15440 startHostTransition( 15441 maybeTargetInst, 15442 pendingState, 15443 null, 15444 formData 15445 ); 15446 } 15447 } else 15448 "function" === typeof action && (event.preventDefault(), formData = submitter2 ? createFormDataWithSubmitter( 15449 nativeEventTarget, 15450 submitter2 15451 ) : new FormData(nativeEventTarget), pendingState = { 15452 pending: true, 15453 data: formData, 15454 method: nativeEventTarget.method, 15455 action 15456 }, Object.freeze(pendingState), startHostTransition( 15457 maybeTargetInst, 15458 pendingState, 15459 action, 15460 formData 15461 )); 15462 }, 15463 currentTarget: nativeEventTarget 15464 } 15465 ] 15466 }); 15467 } 15468 } 15469 function executeDispatch(event, listener, currentTarget) { 15470 event.currentTarget = currentTarget; 15471 try { 15472 listener(event); 15473 } catch (error2) { 15474 reportGlobalError(error2); 15475 } 15476 event.currentTarget = null; 15477 } 15478 function processDispatchQueue(dispatchQueue, eventSystemFlags) { 15479 eventSystemFlags = 0 !== (eventSystemFlags & 4); 15480 for (var i3 = 0; i3 < dispatchQueue.length; i3++) { 15481 var _dispatchQueue$i = dispatchQueue[i3]; 15482 a: { 15483 var previousInstance = void 0, event = _dispatchQueue$i.event; 15484 _dispatchQueue$i = _dispatchQueue$i.listeners; 15485 if (eventSystemFlags) 15486 for (var i$jscomp$0 = _dispatchQueue$i.length - 1; 0 <= i$jscomp$0; i$jscomp$0--) { 15487 var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0], instance = _dispatchListeners$i.instance, currentTarget = _dispatchListeners$i.currentTarget; 15488 _dispatchListeners$i = _dispatchListeners$i.listener; 15489 if (instance !== previousInstance && event.isPropagationStopped()) 15490 break a; 15491 null !== instance ? runWithFiberInDEV( 15492 instance, 15493 executeDispatch, 15494 event, 15495 _dispatchListeners$i, 15496 currentTarget 15497 ) : executeDispatch(event, _dispatchListeners$i, currentTarget); 15498 previousInstance = instance; 15499 } 15500 else 15501 for (i$jscomp$0 = 0; i$jscomp$0 < _dispatchQueue$i.length; i$jscomp$0++) { 15502 _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0]; 15503 instance = _dispatchListeners$i.instance; 15504 currentTarget = _dispatchListeners$i.currentTarget; 15505 _dispatchListeners$i = _dispatchListeners$i.listener; 15506 if (instance !== previousInstance && event.isPropagationStopped()) 15507 break a; 15508 null !== instance ? runWithFiberInDEV( 15509 instance, 15510 executeDispatch, 15511 event, 15512 _dispatchListeners$i, 15513 currentTarget 15514 ) : executeDispatch(event, _dispatchListeners$i, currentTarget); 15515 previousInstance = instance; 15516 } 15517 } 15518 } 15519 } 15520 function listenToNonDelegatedEvent(domEventName, targetElement) { 15521 nonDelegatedEvents.has(domEventName) || console.error( 15522 'Did not expect a listenToNonDelegatedEvent() call for "%s". This is a bug in React. Please file an issue.', 15523 domEventName 15524 ); 15525 var listenerSet = targetElement[internalEventHandlersKey]; 15526 void 0 === listenerSet && (listenerSet = targetElement[internalEventHandlersKey] = /* @__PURE__ */ new Set()); 15527 var listenerSetKey = domEventName + "__bubble"; 15528 listenerSet.has(listenerSetKey) || (addTrappedEventListener(targetElement, domEventName, 2, false), listenerSet.add(listenerSetKey)); 15529 } 15530 function listenToNativeEvent(domEventName, isCapturePhaseListener, target) { 15531 nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener && console.error( 15532 'Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. This is a bug in React. Please file an issue.', 15533 domEventName 15534 ); 15535 var eventSystemFlags = 0; 15536 isCapturePhaseListener && (eventSystemFlags |= 4); 15537 addTrappedEventListener( 15538 target, 15539 domEventName, 15540 eventSystemFlags, 15541 isCapturePhaseListener 15542 ); 15543 } 15544 function listenToAllSupportedEvents(rootContainerElement) { 15545 if (!rootContainerElement[listeningMarker]) { 15546 rootContainerElement[listeningMarker] = true; 15547 allNativeEvents.forEach(function(domEventName) { 15548 "selectionchange" !== domEventName && (nonDelegatedEvents.has(domEventName) || listenToNativeEvent(domEventName, false, rootContainerElement), listenToNativeEvent(domEventName, true, rootContainerElement)); 15549 }); 15550 var ownerDocument = 9 === rootContainerElement.nodeType ? rootContainerElement : rootContainerElement.ownerDocument; 15551 null === ownerDocument || ownerDocument[listeningMarker] || (ownerDocument[listeningMarker] = true, listenToNativeEvent("selectionchange", false, ownerDocument)); 15552 } 15553 } 15554 function addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener) { 15555 switch (getEventPriority(domEventName)) { 15556 case DiscreteEventPriority: 15557 var listenerWrapper = dispatchDiscreteEvent; 15558 break; 15559 case ContinuousEventPriority: 15560 listenerWrapper = dispatchContinuousEvent; 15561 break; 15562 default: 15563 listenerWrapper = dispatchEvent; 15564 } 15565 eventSystemFlags = listenerWrapper.bind( 15566 null, 15567 domEventName, 15568 eventSystemFlags, 15569 targetContainer 15570 ); 15571 listenerWrapper = void 0; 15572 !passiveBrowserEventsSupported || "touchstart" !== domEventName && "touchmove" !== domEventName && "wheel" !== domEventName || (listenerWrapper = true); 15573 isCapturePhaseListener ? void 0 !== listenerWrapper ? targetContainer.addEventListener(domEventName, eventSystemFlags, { 15574 capture: true, 15575 passive: listenerWrapper 15576 }) : targetContainer.addEventListener(domEventName, eventSystemFlags, true) : void 0 !== listenerWrapper ? targetContainer.addEventListener(domEventName, eventSystemFlags, { 15577 passive: listenerWrapper 15578 }) : targetContainer.addEventListener( 15579 domEventName, 15580 eventSystemFlags, 15581 false 15582 ); 15583 } 15584 function dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst$jscomp$0, targetContainer) { 15585 var ancestorInst = targetInst$jscomp$0; 15586 if (0 === (eventSystemFlags & 1) && 0 === (eventSystemFlags & 2) && null !== targetInst$jscomp$0) 15587 a: for (; ; ) { 15588 if (null === targetInst$jscomp$0) return; 15589 var nodeTag = targetInst$jscomp$0.tag; 15590 if (3 === nodeTag || 4 === nodeTag) { 15591 var container = targetInst$jscomp$0.stateNode.containerInfo; 15592 if (container === targetContainer) break; 15593 if (4 === nodeTag) 15594 for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) { 15595 var grandTag = nodeTag.tag; 15596 if ((3 === grandTag || 4 === grandTag) && nodeTag.stateNode.containerInfo === targetContainer) 15597 return; 15598 nodeTag = nodeTag.return; 15599 } 15600 for (; null !== container; ) { 15601 nodeTag = getClosestInstanceFromNode(container); 15602 if (null === nodeTag) return; 15603 grandTag = nodeTag.tag; 15604 if (5 === grandTag || 6 === grandTag || 26 === grandTag || 27 === grandTag) { 15605 targetInst$jscomp$0 = ancestorInst = nodeTag; 15606 continue a; 15607 } 15608 container = container.parentNode; 15609 } 15610 } 15611 targetInst$jscomp$0 = targetInst$jscomp$0.return; 15612 } 15613 batchedUpdates$1(function() { 15614 var targetInst = ancestorInst, nativeEventTarget = getEventTarget(nativeEvent), dispatchQueue = []; 15615 a: { 15616 var reactName = topLevelEventsToReactNames.get(domEventName); 15617 if (void 0 !== reactName) { 15618 var SyntheticEventCtor = SyntheticEvent, reactEventType = domEventName; 15619 switch (domEventName) { 15620 case "keypress": 15621 if (0 === getEventCharCode(nativeEvent)) break a; 15622 case "keydown": 15623 case "keyup": 15624 SyntheticEventCtor = SyntheticKeyboardEvent; 15625 break; 15626 case "focusin": 15627 reactEventType = "focus"; 15628 SyntheticEventCtor = SyntheticFocusEvent; 15629 break; 15630 case "focusout": 15631 reactEventType = "blur"; 15632 SyntheticEventCtor = SyntheticFocusEvent; 15633 break; 15634 case "beforeblur": 15635 case "afterblur": 15636 SyntheticEventCtor = SyntheticFocusEvent; 15637 break; 15638 case "click": 15639 if (2 === nativeEvent.button) break a; 15640 case "auxclick": 15641 case "dblclick": 15642 case "mousedown": 15643 case "mousemove": 15644 case "mouseup": 15645 case "mouseout": 15646 case "mouseover": 15647 case "contextmenu": 15648 SyntheticEventCtor = SyntheticMouseEvent; 15649 break; 15650 case "drag": 15651 case "dragend": 15652 case "dragenter": 15653 case "dragexit": 15654 case "dragleave": 15655 case "dragover": 15656 case "dragstart": 15657 case "drop": 15658 SyntheticEventCtor = SyntheticDragEvent; 15659 break; 15660 case "touchcancel": 15661 case "touchend": 15662 case "touchmove": 15663 case "touchstart": 15664 SyntheticEventCtor = SyntheticTouchEvent; 15665 break; 15666 case ANIMATION_END: 15667 case ANIMATION_ITERATION: 15668 case ANIMATION_START: 15669 SyntheticEventCtor = SyntheticAnimationEvent; 15670 break; 15671 case TRANSITION_END: 15672 SyntheticEventCtor = SyntheticTransitionEvent; 15673 break; 15674 case "scroll": 15675 case "scrollend": 15676 SyntheticEventCtor = SyntheticUIEvent; 15677 break; 15678 case "wheel": 15679 SyntheticEventCtor = SyntheticWheelEvent; 15680 break; 15681 case "copy": 15682 case "cut": 15683 case "paste": 15684 SyntheticEventCtor = SyntheticClipboardEvent; 15685 break; 15686 case "gotpointercapture": 15687 case "lostpointercapture": 15688 case "pointercancel": 15689 case "pointerdown": 15690 case "pointermove": 15691 case "pointerout": 15692 case "pointerover": 15693 case "pointerup": 15694 SyntheticEventCtor = SyntheticPointerEvent; 15695 break; 15696 case "toggle": 15697 case "beforetoggle": 15698 SyntheticEventCtor = SyntheticToggleEvent; 15699 } 15700 var inCapturePhase = 0 !== (eventSystemFlags & 4), accumulateTargetOnly = !inCapturePhase && ("scroll" === domEventName || "scrollend" === domEventName), reactEventName = inCapturePhase ? null !== reactName ? reactName + "Capture" : null : reactName; 15701 inCapturePhase = []; 15702 for (var instance = targetInst, lastHostComponent; null !== instance; ) { 15703 var _instance2 = instance; 15704 lastHostComponent = _instance2.stateNode; 15705 _instance2 = _instance2.tag; 15706 5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2 || null === lastHostComponent || null === reactEventName || (_instance2 = getListener(instance, reactEventName), null != _instance2 && inCapturePhase.push( 15707 createDispatchListener( 15708 instance, 15709 _instance2, 15710 lastHostComponent 15711 ) 15712 )); 15713 if (accumulateTargetOnly) break; 15714 instance = instance.return; 15715 } 15716 0 < inCapturePhase.length && (reactName = new SyntheticEventCtor( 15717 reactName, 15718 reactEventType, 15719 null, 15720 nativeEvent, 15721 nativeEventTarget 15722 ), dispatchQueue.push({ 15723 event: reactName, 15724 listeners: inCapturePhase 15725 })); 15726 } 15727 } 15728 if (0 === (eventSystemFlags & 7)) { 15729 a: { 15730 reactName = "mouseover" === domEventName || "pointerover" === domEventName; 15731 SyntheticEventCtor = "mouseout" === domEventName || "pointerout" === domEventName; 15732 if (reactName && nativeEvent !== currentReplayingEvent && (reactEventType = nativeEvent.relatedTarget || nativeEvent.fromElement) && (getClosestInstanceFromNode(reactEventType) || reactEventType[internalContainerInstanceKey])) 15733 break a; 15734 if (SyntheticEventCtor || reactName) { 15735 reactName = nativeEventTarget.window === nativeEventTarget ? nativeEventTarget : (reactName = nativeEventTarget.ownerDocument) ? reactName.defaultView || reactName.parentWindow : window; 15736 if (SyntheticEventCtor) { 15737 if (reactEventType = nativeEvent.relatedTarget || nativeEvent.toElement, SyntheticEventCtor = targetInst, reactEventType = reactEventType ? getClosestInstanceFromNode(reactEventType) : null, null !== reactEventType && (accumulateTargetOnly = getNearestMountedFiber(reactEventType), inCapturePhase = reactEventType.tag, reactEventType !== accumulateTargetOnly || 5 !== inCapturePhase && 27 !== inCapturePhase && 6 !== inCapturePhase)) 15738 reactEventType = null; 15739 } else SyntheticEventCtor = null, reactEventType = targetInst; 15740 if (SyntheticEventCtor !== reactEventType) { 15741 inCapturePhase = SyntheticMouseEvent; 15742 _instance2 = "onMouseLeave"; 15743 reactEventName = "onMouseEnter"; 15744 instance = "mouse"; 15745 if ("pointerout" === domEventName || "pointerover" === domEventName) 15746 inCapturePhase = SyntheticPointerEvent, _instance2 = "onPointerLeave", reactEventName = "onPointerEnter", instance = "pointer"; 15747 accumulateTargetOnly = null == SyntheticEventCtor ? reactName : getNodeFromInstance(SyntheticEventCtor); 15748 lastHostComponent = null == reactEventType ? reactName : getNodeFromInstance(reactEventType); 15749 reactName = new inCapturePhase( 15750 _instance2, 15751 instance + "leave", 15752 SyntheticEventCtor, 15753 nativeEvent, 15754 nativeEventTarget 15755 ); 15756 reactName.target = accumulateTargetOnly; 15757 reactName.relatedTarget = lastHostComponent; 15758 _instance2 = null; 15759 getClosestInstanceFromNode(nativeEventTarget) === targetInst && (inCapturePhase = new inCapturePhase( 15760 reactEventName, 15761 instance + "enter", 15762 reactEventType, 15763 nativeEvent, 15764 nativeEventTarget 15765 ), inCapturePhase.target = lastHostComponent, inCapturePhase.relatedTarget = accumulateTargetOnly, _instance2 = inCapturePhase); 15766 accumulateTargetOnly = _instance2; 15767 if (SyntheticEventCtor && reactEventType) 15768 b: { 15769 inCapturePhase = getParent; 15770 reactEventName = SyntheticEventCtor; 15771 instance = reactEventType; 15772 lastHostComponent = 0; 15773 for (_instance2 = reactEventName; _instance2; _instance2 = inCapturePhase(_instance2)) 15774 lastHostComponent++; 15775 _instance2 = 0; 15776 for (var tempB = instance; tempB; tempB = inCapturePhase(tempB)) 15777 _instance2++; 15778 for (; 0 < lastHostComponent - _instance2; ) 15779 reactEventName = inCapturePhase(reactEventName), lastHostComponent--; 15780 for (; 0 < _instance2 - lastHostComponent; ) 15781 instance = inCapturePhase(instance), _instance2--; 15782 for (; lastHostComponent--; ) { 15783 if (reactEventName === instance || null !== instance && reactEventName === instance.alternate) { 15784 inCapturePhase = reactEventName; 15785 break b; 15786 } 15787 reactEventName = inCapturePhase(reactEventName); 15788 instance = inCapturePhase(instance); 15789 } 15790 inCapturePhase = null; 15791 } 15792 else inCapturePhase = null; 15793 null !== SyntheticEventCtor && accumulateEnterLeaveListenersForEvent( 15794 dispatchQueue, 15795 reactName, 15796 SyntheticEventCtor, 15797 inCapturePhase, 15798 false 15799 ); 15800 null !== reactEventType && null !== accumulateTargetOnly && accumulateEnterLeaveListenersForEvent( 15801 dispatchQueue, 15802 accumulateTargetOnly, 15803 reactEventType, 15804 inCapturePhase, 15805 true 15806 ); 15807 } 15808 } 15809 } 15810 a: { 15811 reactName = targetInst ? getNodeFromInstance(targetInst) : window; 15812 SyntheticEventCtor = reactName.nodeName && reactName.nodeName.toLowerCase(); 15813 if ("select" === SyntheticEventCtor || "input" === SyntheticEventCtor && "file" === reactName.type) 15814 var getTargetInstFunc = getTargetInstForChangeEvent; 15815 else if (isTextInputElement(reactName)) 15816 if (isInputEventSupported) 15817 getTargetInstFunc = getTargetInstForInputOrChangeEvent; 15818 else { 15819 getTargetInstFunc = getTargetInstForInputEventPolyfill; 15820 var handleEventFunc = handleEventsForInputEventPolyfill; 15821 } 15822 else 15823 SyntheticEventCtor = reactName.nodeName, !SyntheticEventCtor || "input" !== SyntheticEventCtor.toLowerCase() || "checkbox" !== reactName.type && "radio" !== reactName.type ? targetInst && isCustomElement(targetInst.elementType) && (getTargetInstFunc = getTargetInstForChangeEvent) : getTargetInstFunc = getTargetInstForClickEvent; 15824 if (getTargetInstFunc && (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))) { 15825 createAndAccumulateChangeEvent( 15826 dispatchQueue, 15827 getTargetInstFunc, 15828 nativeEvent, 15829 nativeEventTarget 15830 ); 15831 break a; 15832 } 15833 handleEventFunc && handleEventFunc(domEventName, reactName, targetInst); 15834 "focusout" === domEventName && targetInst && "number" === reactName.type && null != targetInst.memoizedProps.value && setDefaultValue(reactName, "number", reactName.value); 15835 } 15836 handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window; 15837 switch (domEventName) { 15838 case "focusin": 15839 if (isTextInputElement(handleEventFunc) || "true" === handleEventFunc.contentEditable) 15840 activeElement = handleEventFunc, activeElementInst = targetInst, lastSelection = null; 15841 break; 15842 case "focusout": 15843 lastSelection = activeElementInst = activeElement = null; 15844 break; 15845 case "mousedown": 15846 mouseDown = true; 15847 break; 15848 case "contextmenu": 15849 case "mouseup": 15850 case "dragend": 15851 mouseDown = false; 15852 constructSelectEvent( 15853 dispatchQueue, 15854 nativeEvent, 15855 nativeEventTarget 15856 ); 15857 break; 15858 case "selectionchange": 15859 if (skipSelectionChangeEvent) break; 15860 case "keydown": 15861 case "keyup": 15862 constructSelectEvent( 15863 dispatchQueue, 15864 nativeEvent, 15865 nativeEventTarget 15866 ); 15867 } 15868 var fallbackData; 15869 if (canUseCompositionEvent) 15870 b: { 15871 switch (domEventName) { 15872 case "compositionstart": 15873 var eventType = "onCompositionStart"; 15874 break b; 15875 case "compositionend": 15876 eventType = "onCompositionEnd"; 15877 break b; 15878 case "compositionupdate": 15879 eventType = "onCompositionUpdate"; 15880 break b; 15881 } 15882 eventType = void 0; 15883 } 15884 else 15885 isComposing ? isFallbackCompositionEnd(domEventName, nativeEvent) && (eventType = "onCompositionEnd") : "keydown" === domEventName && nativeEvent.keyCode === START_KEYCODE && (eventType = "onCompositionStart"); 15886 eventType && (useFallbackCompositionData && "ko" !== nativeEvent.locale && (isComposing || "onCompositionStart" !== eventType ? "onCompositionEnd" === eventType && isComposing && (fallbackData = getData()) : (root2 = nativeEventTarget, startText = "value" in root2 ? root2.value : root2.textContent, isComposing = true)), handleEventFunc = accumulateTwoPhaseListeners( 15887 targetInst, 15888 eventType 15889 ), 0 < handleEventFunc.length && (eventType = new SyntheticCompositionEvent( 15890 eventType, 15891 domEventName, 15892 null, 15893 nativeEvent, 15894 nativeEventTarget 15895 ), dispatchQueue.push({ 15896 event: eventType, 15897 listeners: handleEventFunc 15898 }), fallbackData ? eventType.data = fallbackData : (fallbackData = getDataFromCustomEvent(nativeEvent), null !== fallbackData && (eventType.data = fallbackData)))); 15899 if (fallbackData = canUseTextInputEvent ? getNativeBeforeInputChars(domEventName, nativeEvent) : getFallbackBeforeInputChars(domEventName, nativeEvent)) 15900 eventType = accumulateTwoPhaseListeners( 15901 targetInst, 15902 "onBeforeInput" 15903 ), 0 < eventType.length && (handleEventFunc = new SyntheticInputEvent( 15904 "onBeforeInput", 15905 "beforeinput", 15906 null, 15907 nativeEvent, 15908 nativeEventTarget 15909 ), dispatchQueue.push({ 15910 event: handleEventFunc, 15911 listeners: eventType 15912 }), handleEventFunc.data = fallbackData); 15913 extractEvents$1( 15914 dispatchQueue, 15915 domEventName, 15916 targetInst, 15917 nativeEvent, 15918 nativeEventTarget 15919 ); 15920 } 15921 processDispatchQueue(dispatchQueue, eventSystemFlags); 15922 }); 15923 } 15924 function createDispatchListener(instance, listener, currentTarget) { 15925 return { 15926 instance, 15927 listener, 15928 currentTarget 15929 }; 15930 } 15931 function accumulateTwoPhaseListeners(targetFiber, reactName) { 15932 for (var captureName = reactName + "Capture", listeners = []; null !== targetFiber; ) { 15933 var _instance3 = targetFiber, stateNode = _instance3.stateNode; 15934 _instance3 = _instance3.tag; 15935 5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3 || null === stateNode || (_instance3 = getListener(targetFiber, captureName), null != _instance3 && listeners.unshift( 15936 createDispatchListener(targetFiber, _instance3, stateNode) 15937 ), _instance3 = getListener(targetFiber, reactName), null != _instance3 && listeners.push( 15938 createDispatchListener(targetFiber, _instance3, stateNode) 15939 )); 15940 if (3 === targetFiber.tag) return listeners; 15941 targetFiber = targetFiber.return; 15942 } 15943 return []; 15944 } 15945 function getParent(inst) { 15946 if (null === inst) return null; 15947 do 15948 inst = inst.return; 15949 while (inst && 5 !== inst.tag && 27 !== inst.tag); 15950 return inst ? inst : null; 15951 } 15952 function accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) { 15953 for (var registrationName = event._reactName, listeners = []; null !== target && target !== common; ) { 15954 var _instance4 = target, alternate = _instance4.alternate, stateNode = _instance4.stateNode; 15955 _instance4 = _instance4.tag; 15956 if (null !== alternate && alternate === common) break; 15957 5 !== _instance4 && 26 !== _instance4 && 27 !== _instance4 || null === stateNode || (alternate = stateNode, inCapturePhase ? (stateNode = getListener(target, registrationName), null != stateNode && listeners.unshift( 15958 createDispatchListener(target, stateNode, alternate) 15959 )) : inCapturePhase || (stateNode = getListener(target, registrationName), null != stateNode && listeners.push( 15960 createDispatchListener(target, stateNode, alternate) 15961 ))); 15962 target = target.return; 15963 } 15964 0 !== listeners.length && dispatchQueue.push({ event, listeners }); 15965 } 15966 function validatePropertiesInDevelopment(type, props) { 15967 validateProperties$2(type, props); 15968 "input" !== type && "textarea" !== type && "select" !== type || null == props || null !== props.value || didWarnValueNull || (didWarnValueNull = true, "select" === type && props.multiple ? console.error( 15969 "`value` prop on `%s` should not be null. Consider using an empty array when `multiple` is set to `true` to clear the component or `undefined` for uncontrolled components.", 15970 type 15971 ) : console.error( 15972 "`value` prop on `%s` should not be null. Consider using an empty string to clear the component or `undefined` for uncontrolled components.", 15973 type 15974 )); 15975 var eventRegistry = { 15976 registrationNameDependencies, 15977 possibleRegistrationNames 15978 }; 15979 isCustomElement(type) || "string" === typeof props.is || warnUnknownProperties(type, props, eventRegistry); 15980 props.contentEditable && !props.suppressContentEditableWarning && null != props.children && console.error( 15981 "A component is `contentEditable` and contains `children` managed by React. It is now your responsibility to guarantee that none of those nodes are unexpectedly modified or duplicated. This is probably not intentional." 15982 ); 15983 } 15984 function warnForPropDifference(propName, serverValue, clientValue, serverDifferences) { 15985 serverValue !== clientValue && (clientValue = normalizeMarkupForTextOrAttribute(clientValue), normalizeMarkupForTextOrAttribute(serverValue) !== clientValue && (serverDifferences[propName] = serverValue)); 15986 } 15987 function warnForExtraAttributes(domElement, attributeNames, serverDifferences) { 15988 attributeNames.forEach(function(attributeName) { 15989 serverDifferences[getPropNameFromAttributeName(attributeName)] = "style" === attributeName ? getStylesObjectFromElement(domElement) : domElement.getAttribute(attributeName); 15990 }); 15991 } 15992 function warnForInvalidEventListener(registrationName, listener) { 15993 false === listener ? console.error( 15994 "Expected `%s` listener to be a function, instead got `false`.\n\nIf you used to conditionally omit it with %s={condition && value}, pass %s={condition ? value : undefined} instead.", 15995 registrationName, 15996 registrationName, 15997 registrationName 15998 ) : console.error( 15999 "Expected `%s` listener to be a function, instead got a value of `%s` type.", 16000 registrationName, 16001 typeof listener 16002 ); 16003 } 16004 function normalizeHTML(parent, html) { 16005 parent = parent.namespaceURI === MATH_NAMESPACE || parent.namespaceURI === SVG_NAMESPACE ? parent.ownerDocument.createElementNS( 16006 parent.namespaceURI, 16007 parent.tagName 16008 ) : parent.ownerDocument.createElement(parent.tagName); 16009 parent.innerHTML = html; 16010 return parent.innerHTML; 16011 } 16012 function normalizeMarkupForTextOrAttribute(markup) { 16013 willCoercionThrow(markup) && (console.error( 16014 "The provided HTML markup uses a value of unsupported type %s. This value must be coerced to a string before using it here.", 16015 typeName(markup) 16016 ), testStringCoercion(markup)); 16017 return ("string" === typeof markup ? markup : "" + markup).replace(NORMALIZE_NEWLINES_REGEX, "\n").replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, ""); 16018 } 16019 function checkForUnmatchedText(serverText, clientText) { 16020 clientText = normalizeMarkupForTextOrAttribute(clientText); 16021 return normalizeMarkupForTextOrAttribute(serverText) === clientText ? true : false; 16022 } 16023 function setProp(domElement, tag, key, value, props, prevValue) { 16024 switch (key) { 16025 case "children": 16026 if ("string" === typeof value) 16027 validateTextNesting(value, tag, false), "body" === tag || "textarea" === tag && "" === value || setTextContent(domElement, value); 16028 else if ("number" === typeof value || "bigint" === typeof value) 16029 validateTextNesting("" + value, tag, false), "body" !== tag && setTextContent(domElement, "" + value); 16030 break; 16031 case "className": 16032 setValueForKnownAttribute(domElement, "class", value); 16033 break; 16034 case "tabIndex": 16035 setValueForKnownAttribute(domElement, "tabindex", value); 16036 break; 16037 case "dir": 16038 case "role": 16039 case "viewBox": 16040 case "width": 16041 case "height": 16042 setValueForKnownAttribute(domElement, key, value); 16043 break; 16044 case "style": 16045 setValueForStyles(domElement, value, prevValue); 16046 break; 16047 case "data": 16048 if ("object" !== tag) { 16049 setValueForKnownAttribute(domElement, "data", value); 16050 break; 16051 } 16052 case "src": 16053 case "href": 16054 if ("" === value && ("a" !== tag || "href" !== key)) { 16055 "src" === key ? console.error( 16056 'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.', 16057 key, 16058 key 16059 ) : console.error( 16060 'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.', 16061 key, 16062 key 16063 ); 16064 domElement.removeAttribute(key); 16065 break; 16066 } 16067 if (null == value || "function" === typeof value || "symbol" === typeof value || "boolean" === typeof value) { 16068 domElement.removeAttribute(key); 16069 break; 16070 } 16071 checkAttributeStringCoercion(value, key); 16072 value = sanitizeURL("" + value); 16073 domElement.setAttribute(key, value); 16074 break; 16075 case "action": 16076 case "formAction": 16077 null != value && ("form" === tag ? "formAction" === key ? console.error( 16078 "You can only pass the formAction prop to <input> or <button>. Use the action prop on <form>." 16079 ) : "function" === typeof value && (null == props.encType && null == props.method || didWarnFormActionMethod || (didWarnFormActionMethod = true, console.error( 16080 "Cannot specify a encType or method for a form that specifies a function as the action. React provides those automatically. They will get overridden." 16081 )), null == props.target || didWarnFormActionTarget || (didWarnFormActionTarget = true, console.error( 16082 "Cannot specify a target for a form that specifies a function as the action. The function will always be executed in the same window." 16083 ))) : "input" === tag || "button" === tag ? "action" === key ? console.error( 16084 "You can only pass the action prop to <form>. Use the formAction prop on <input> or <button>." 16085 ) : "input" !== tag || "submit" === props.type || "image" === props.type || didWarnFormActionType ? "button" !== tag || null == props.type || "submit" === props.type || didWarnFormActionType ? "function" === typeof value && (null == props.name || didWarnFormActionName || (didWarnFormActionName = true, console.error( 16086 'Cannot specify a "name" prop for a button that specifies a function as a formAction. React needs it to encode which action should be invoked. It will get overridden.' 16087 )), null == props.formEncType && null == props.formMethod || didWarnFormActionMethod || (didWarnFormActionMethod = true, console.error( 16088 "Cannot specify a formEncType or formMethod for a button that specifies a function as a formAction. React provides those automatically. They will get overridden." 16089 )), null == props.formTarget || didWarnFormActionTarget || (didWarnFormActionTarget = true, console.error( 16090 "Cannot specify a formTarget for a button that specifies a function as a formAction. The function will always be executed in the same window." 16091 ))) : (didWarnFormActionType = true, console.error( 16092 'A button can only specify a formAction along with type="submit" or no type.' 16093 )) : (didWarnFormActionType = true, console.error( 16094 'An input can only specify a formAction along with type="submit" or type="image".' 16095 )) : "action" === key ? console.error( 16096 "You can only pass the action prop to <form>." 16097 ) : console.error( 16098 "You can only pass the formAction prop to <input> or <button>." 16099 )); 16100 if ("function" === typeof value) { 16101 domElement.setAttribute( 16102 key, 16103 "javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')" 16104 ); 16105 break; 16106 } else 16107 "function" === typeof prevValue && ("formAction" === key ? ("input" !== tag && setProp(domElement, tag, "name", props.name, props, null), setProp( 16108 domElement, 16109 tag, 16110 "formEncType", 16111 props.formEncType, 16112 props, 16113 null 16114 ), setProp( 16115 domElement, 16116 tag, 16117 "formMethod", 16118 props.formMethod, 16119 props, 16120 null 16121 ), setProp( 16122 domElement, 16123 tag, 16124 "formTarget", 16125 props.formTarget, 16126 props, 16127 null 16128 )) : (setProp( 16129 domElement, 16130 tag, 16131 "encType", 16132 props.encType, 16133 props, 16134 null 16135 ), setProp(domElement, tag, "method", props.method, props, null), setProp( 16136 domElement, 16137 tag, 16138 "target", 16139 props.target, 16140 props, 16141 null 16142 ))); 16143 if (null == value || "symbol" === typeof value || "boolean" === typeof value) { 16144 domElement.removeAttribute(key); 16145 break; 16146 } 16147 checkAttributeStringCoercion(value, key); 16148 value = sanitizeURL("" + value); 16149 domElement.setAttribute(key, value); 16150 break; 16151 case "onClick": 16152 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), domElement.onclick = noop$1); 16153 break; 16154 case "onScroll": 16155 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), listenToNonDelegatedEvent("scroll", domElement)); 16156 break; 16157 case "onScrollEnd": 16158 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), listenToNonDelegatedEvent("scrollend", domElement)); 16159 break; 16160 case "dangerouslySetInnerHTML": 16161 if (null != value) { 16162 if ("object" !== typeof value || !("__html" in value)) 16163 throw Error( 16164 "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." 16165 ); 16166 key = value.__html; 16167 if (null != key) { 16168 if (null != props.children) 16169 throw Error( 16170 "Can only set one of `children` or `props.dangerouslySetInnerHTML`." 16171 ); 16172 domElement.innerHTML = key; 16173 } 16174 } 16175 break; 16176 case "multiple": 16177 domElement.multiple = value && "function" !== typeof value && "symbol" !== typeof value; 16178 break; 16179 case "muted": 16180 domElement.muted = value && "function" !== typeof value && "symbol" !== typeof value; 16181 break; 16182 case "suppressContentEditableWarning": 16183 case "suppressHydrationWarning": 16184 case "defaultValue": 16185 case "defaultChecked": 16186 case "innerHTML": 16187 case "ref": 16188 break; 16189 case "autoFocus": 16190 break; 16191 case "xlinkHref": 16192 if (null == value || "function" === typeof value || "boolean" === typeof value || "symbol" === typeof value) { 16193 domElement.removeAttribute("xlink:href"); 16194 break; 16195 } 16196 checkAttributeStringCoercion(value, key); 16197 key = sanitizeURL("" + value); 16198 domElement.setAttributeNS(xlinkNamespace, "xlink:href", key); 16199 break; 16200 case "contentEditable": 16201 case "spellCheck": 16202 case "draggable": 16203 case "value": 16204 case "autoReverse": 16205 case "externalResourcesRequired": 16206 case "focusable": 16207 case "preserveAlpha": 16208 null != value && "function" !== typeof value && "symbol" !== typeof value ? (checkAttributeStringCoercion(value, key), domElement.setAttribute(key, "" + value)) : domElement.removeAttribute(key); 16209 break; 16210 case "inert": 16211 "" !== value || didWarnForNewBooleanPropsWithEmptyValue[key] || (didWarnForNewBooleanPropsWithEmptyValue[key] = true, console.error( 16212 "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.", 16213 key 16214 )); 16215 case "allowFullScreen": 16216 case "async": 16217 case "autoPlay": 16218 case "controls": 16219 case "default": 16220 case "defer": 16221 case "disabled": 16222 case "disablePictureInPicture": 16223 case "disableRemotePlayback": 16224 case "formNoValidate": 16225 case "hidden": 16226 case "loop": 16227 case "noModule": 16228 case "noValidate": 16229 case "open": 16230 case "playsInline": 16231 case "readOnly": 16232 case "required": 16233 case "reversed": 16234 case "scoped": 16235 case "seamless": 16236 case "itemScope": 16237 value && "function" !== typeof value && "symbol" !== typeof value ? domElement.setAttribute(key, "") : domElement.removeAttribute(key); 16238 break; 16239 case "capture": 16240 case "download": 16241 true === value ? domElement.setAttribute(key, "") : false !== value && null != value && "function" !== typeof value && "symbol" !== typeof value ? (checkAttributeStringCoercion(value, key), domElement.setAttribute(key, value)) : domElement.removeAttribute(key); 16242 break; 16243 case "cols": 16244 case "rows": 16245 case "size": 16246 case "span": 16247 null != value && "function" !== typeof value && "symbol" !== typeof value && !isNaN(value) && 1 <= value ? (checkAttributeStringCoercion(value, key), domElement.setAttribute(key, value)) : domElement.removeAttribute(key); 16248 break; 16249 case "rowSpan": 16250 case "start": 16251 null == value || "function" === typeof value || "symbol" === typeof value || isNaN(value) ? domElement.removeAttribute(key) : (checkAttributeStringCoercion(value, key), domElement.setAttribute(key, value)); 16252 break; 16253 case "popover": 16254 listenToNonDelegatedEvent("beforetoggle", domElement); 16255 listenToNonDelegatedEvent("toggle", domElement); 16256 setValueForAttribute(domElement, "popover", value); 16257 break; 16258 case "xlinkActuate": 16259 setValueForNamespacedAttribute( 16260 domElement, 16261 xlinkNamespace, 16262 "xlink:actuate", 16263 value 16264 ); 16265 break; 16266 case "xlinkArcrole": 16267 setValueForNamespacedAttribute( 16268 domElement, 16269 xlinkNamespace, 16270 "xlink:arcrole", 16271 value 16272 ); 16273 break; 16274 case "xlinkRole": 16275 setValueForNamespacedAttribute( 16276 domElement, 16277 xlinkNamespace, 16278 "xlink:role", 16279 value 16280 ); 16281 break; 16282 case "xlinkShow": 16283 setValueForNamespacedAttribute( 16284 domElement, 16285 xlinkNamespace, 16286 "xlink:show", 16287 value 16288 ); 16289 break; 16290 case "xlinkTitle": 16291 setValueForNamespacedAttribute( 16292 domElement, 16293 xlinkNamespace, 16294 "xlink:title", 16295 value 16296 ); 16297 break; 16298 case "xlinkType": 16299 setValueForNamespacedAttribute( 16300 domElement, 16301 xlinkNamespace, 16302 "xlink:type", 16303 value 16304 ); 16305 break; 16306 case "xmlBase": 16307 setValueForNamespacedAttribute( 16308 domElement, 16309 xmlNamespace, 16310 "xml:base", 16311 value 16312 ); 16313 break; 16314 case "xmlLang": 16315 setValueForNamespacedAttribute( 16316 domElement, 16317 xmlNamespace, 16318 "xml:lang", 16319 value 16320 ); 16321 break; 16322 case "xmlSpace": 16323 setValueForNamespacedAttribute( 16324 domElement, 16325 xmlNamespace, 16326 "xml:space", 16327 value 16328 ); 16329 break; 16330 case "is": 16331 null != prevValue && console.error( 16332 'Cannot update the "is" prop after it has been initialized.' 16333 ); 16334 setValueForAttribute(domElement, "is", value); 16335 break; 16336 case "innerText": 16337 case "textContent": 16338 break; 16339 case "popoverTarget": 16340 didWarnPopoverTargetObject || null == value || "object" !== typeof value || (didWarnPopoverTargetObject = true, console.error( 16341 "The `popoverTarget` prop expects the ID of an Element as a string. Received %s instead.", 16342 value 16343 )); 16344 default: 16345 !(2 < key.length) || "o" !== key[0] && "O" !== key[0] || "n" !== key[1] && "N" !== key[1] ? (key = getAttributeAlias(key), setValueForAttribute(domElement, key, value)) : registrationNameDependencies.hasOwnProperty(key) && null != value && "function" !== typeof value && warnForInvalidEventListener(key, value); 16346 } 16347 } 16348 function setPropOnCustomElement(domElement, tag, key, value, props, prevValue) { 16349 switch (key) { 16350 case "style": 16351 setValueForStyles(domElement, value, prevValue); 16352 break; 16353 case "dangerouslySetInnerHTML": 16354 if (null != value) { 16355 if ("object" !== typeof value || !("__html" in value)) 16356 throw Error( 16357 "`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://react.dev/link/dangerously-set-inner-html for more information." 16358 ); 16359 key = value.__html; 16360 if (null != key) { 16361 if (null != props.children) 16362 throw Error( 16363 "Can only set one of `children` or `props.dangerouslySetInnerHTML`." 16364 ); 16365 domElement.innerHTML = key; 16366 } 16367 } 16368 break; 16369 case "children": 16370 "string" === typeof value ? setTextContent(domElement, value) : ("number" === typeof value || "bigint" === typeof value) && setTextContent(domElement, "" + value); 16371 break; 16372 case "onScroll": 16373 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), listenToNonDelegatedEvent("scroll", domElement)); 16374 break; 16375 case "onScrollEnd": 16376 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), listenToNonDelegatedEvent("scrollend", domElement)); 16377 break; 16378 case "onClick": 16379 null != value && ("function" !== typeof value && warnForInvalidEventListener(key, value), domElement.onclick = noop$1); 16380 break; 16381 case "suppressContentEditableWarning": 16382 case "suppressHydrationWarning": 16383 case "innerHTML": 16384 case "ref": 16385 break; 16386 case "innerText": 16387 case "textContent": 16388 break; 16389 default: 16390 if (registrationNameDependencies.hasOwnProperty(key)) 16391 null != value && "function" !== typeof value && warnForInvalidEventListener(key, value); 16392 else 16393 a: { 16394 if ("o" === key[0] && "n" === key[1] && (props = key.endsWith("Capture"), tag = key.slice(2, props ? key.length - 7 : void 0), prevValue = domElement[internalPropsKey] || null, prevValue = null != prevValue ? prevValue[key] : null, "function" === typeof prevValue && domElement.removeEventListener(tag, prevValue, props), "function" === typeof value)) { 16395 "function" !== typeof prevValue && null !== prevValue && (key in domElement ? domElement[key] = null : domElement.hasAttribute(key) && domElement.removeAttribute(key)); 16396 domElement.addEventListener(tag, value, props); 16397 break a; 16398 } 16399 key in domElement ? domElement[key] = value : true === value ? domElement.setAttribute(key, "") : setValueForAttribute(domElement, key, value); 16400 } 16401 } 16402 } 16403 function setInitialProperties(domElement, tag, props) { 16404 validatePropertiesInDevelopment(tag, props); 16405 switch (tag) { 16406 case "div": 16407 case "span": 16408 case "svg": 16409 case "path": 16410 case "a": 16411 case "g": 16412 case "p": 16413 case "li": 16414 break; 16415 case "img": 16416 listenToNonDelegatedEvent("error", domElement); 16417 listenToNonDelegatedEvent("load", domElement); 16418 var hasSrc = false, hasSrcSet = false, propKey; 16419 for (propKey in props) 16420 if (props.hasOwnProperty(propKey)) { 16421 var propValue = props[propKey]; 16422 if (null != propValue) 16423 switch (propKey) { 16424 case "src": 16425 hasSrc = true; 16426 break; 16427 case "srcSet": 16428 hasSrcSet = true; 16429 break; 16430 case "children": 16431 case "dangerouslySetInnerHTML": 16432 throw Error( 16433 tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." 16434 ); 16435 default: 16436 setProp(domElement, tag, propKey, propValue, props, null); 16437 } 16438 } 16439 hasSrcSet && setProp(domElement, tag, "srcSet", props.srcSet, props, null); 16440 hasSrc && setProp(domElement, tag, "src", props.src, props, null); 16441 return; 16442 case "input": 16443 checkControlledValueProps("input", props); 16444 listenToNonDelegatedEvent("invalid", domElement); 16445 var defaultValue = propKey = propValue = hasSrcSet = null, checked = null, defaultChecked = null; 16446 for (hasSrc in props) 16447 if (props.hasOwnProperty(hasSrc)) { 16448 var _propValue = props[hasSrc]; 16449 if (null != _propValue) 16450 switch (hasSrc) { 16451 case "name": 16452 hasSrcSet = _propValue; 16453 break; 16454 case "type": 16455 propValue = _propValue; 16456 break; 16457 case "checked": 16458 checked = _propValue; 16459 break; 16460 case "defaultChecked": 16461 defaultChecked = _propValue; 16462 break; 16463 case "value": 16464 propKey = _propValue; 16465 break; 16466 case "defaultValue": 16467 defaultValue = _propValue; 16468 break; 16469 case "children": 16470 case "dangerouslySetInnerHTML": 16471 if (null != _propValue) 16472 throw Error( 16473 tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." 16474 ); 16475 break; 16476 default: 16477 setProp(domElement, tag, hasSrc, _propValue, props, null); 16478 } 16479 } 16480 validateInputProps(domElement, props); 16481 initInput( 16482 domElement, 16483 propKey, 16484 defaultValue, 16485 checked, 16486 defaultChecked, 16487 propValue, 16488 hasSrcSet, 16489 false 16490 ); 16491 return; 16492 case "select": 16493 checkControlledValueProps("select", props); 16494 listenToNonDelegatedEvent("invalid", domElement); 16495 hasSrc = propValue = propKey = null; 16496 for (hasSrcSet in props) 16497 if (props.hasOwnProperty(hasSrcSet) && (defaultValue = props[hasSrcSet], null != defaultValue)) 16498 switch (hasSrcSet) { 16499 case "value": 16500 propKey = defaultValue; 16501 break; 16502 case "defaultValue": 16503 propValue = defaultValue; 16504 break; 16505 case "multiple": 16506 hasSrc = defaultValue; 16507 default: 16508 setProp( 16509 domElement, 16510 tag, 16511 hasSrcSet, 16512 defaultValue, 16513 props, 16514 null 16515 ); 16516 } 16517 validateSelectProps(domElement, props); 16518 tag = propKey; 16519 props = propValue; 16520 domElement.multiple = !!hasSrc; 16521 null != tag ? updateOptions(domElement, !!hasSrc, tag, false) : null != props && updateOptions(domElement, !!hasSrc, props, true); 16522 return; 16523 case "textarea": 16524 checkControlledValueProps("textarea", props); 16525 listenToNonDelegatedEvent("invalid", domElement); 16526 propKey = hasSrcSet = hasSrc = null; 16527 for (propValue in props) 16528 if (props.hasOwnProperty(propValue) && (defaultValue = props[propValue], null != defaultValue)) 16529 switch (propValue) { 16530 case "value": 16531 hasSrc = defaultValue; 16532 break; 16533 case "defaultValue": 16534 hasSrcSet = defaultValue; 16535 break; 16536 case "children": 16537 propKey = defaultValue; 16538 break; 16539 case "dangerouslySetInnerHTML": 16540 if (null != defaultValue) 16541 throw Error( 16542 "`dangerouslySetInnerHTML` does not make sense on <textarea>." 16543 ); 16544 break; 16545 default: 16546 setProp( 16547 domElement, 16548 tag, 16549 propValue, 16550 defaultValue, 16551 props, 16552 null 16553 ); 16554 } 16555 validateTextareaProps(domElement, props); 16556 initTextarea(domElement, hasSrc, hasSrcSet, propKey); 16557 return; 16558 case "option": 16559 validateOptionProps(domElement, props); 16560 for (checked in props) 16561 if (props.hasOwnProperty(checked) && (hasSrc = props[checked], null != hasSrc)) 16562 switch (checked) { 16563 case "selected": 16564 domElement.selected = hasSrc && "function" !== typeof hasSrc && "symbol" !== typeof hasSrc; 16565 break; 16566 default: 16567 setProp(domElement, tag, checked, hasSrc, props, null); 16568 } 16569 return; 16570 case "dialog": 16571 listenToNonDelegatedEvent("beforetoggle", domElement); 16572 listenToNonDelegatedEvent("toggle", domElement); 16573 listenToNonDelegatedEvent("cancel", domElement); 16574 listenToNonDelegatedEvent("close", domElement); 16575 break; 16576 case "iframe": 16577 case "object": 16578 listenToNonDelegatedEvent("load", domElement); 16579 break; 16580 case "video": 16581 case "audio": 16582 for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++) 16583 listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement); 16584 break; 16585 case "image": 16586 listenToNonDelegatedEvent("error", domElement); 16587 listenToNonDelegatedEvent("load", domElement); 16588 break; 16589 case "details": 16590 listenToNonDelegatedEvent("toggle", domElement); 16591 break; 16592 case "embed": 16593 case "source": 16594 case "link": 16595 listenToNonDelegatedEvent("error", domElement), listenToNonDelegatedEvent("load", domElement); 16596 case "area": 16597 case "base": 16598 case "br": 16599 case "col": 16600 case "hr": 16601 case "keygen": 16602 case "meta": 16603 case "param": 16604 case "track": 16605 case "wbr": 16606 case "menuitem": 16607 for (defaultChecked in props) 16608 if (props.hasOwnProperty(defaultChecked) && (hasSrc = props[defaultChecked], null != hasSrc)) 16609 switch (defaultChecked) { 16610 case "children": 16611 case "dangerouslySetInnerHTML": 16612 throw Error( 16613 tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." 16614 ); 16615 default: 16616 setProp(domElement, tag, defaultChecked, hasSrc, props, null); 16617 } 16618 return; 16619 default: 16620 if (isCustomElement(tag)) { 16621 for (_propValue in props) 16622 props.hasOwnProperty(_propValue) && (hasSrc = props[_propValue], void 0 !== hasSrc && setPropOnCustomElement( 16623 domElement, 16624 tag, 16625 _propValue, 16626 hasSrc, 16627 props, 16628 void 0 16629 )); 16630 return; 16631 } 16632 } 16633 for (defaultValue in props) 16634 props.hasOwnProperty(defaultValue) && (hasSrc = props[defaultValue], null != hasSrc && setProp(domElement, tag, defaultValue, hasSrc, props, null)); 16635 } 16636 function updateProperties(domElement, tag, lastProps, nextProps) { 16637 validatePropertiesInDevelopment(tag, nextProps); 16638 switch (tag) { 16639 case "div": 16640 case "span": 16641 case "svg": 16642 case "path": 16643 case "a": 16644 case "g": 16645 case "p": 16646 case "li": 16647 break; 16648 case "input": 16649 var name = null, type = null, value = null, defaultValue = null, lastDefaultValue = null, checked = null, defaultChecked = null; 16650 for (propKey in lastProps) { 16651 var lastProp = lastProps[propKey]; 16652 if (lastProps.hasOwnProperty(propKey) && null != lastProp) 16653 switch (propKey) { 16654 case "checked": 16655 break; 16656 case "value": 16657 break; 16658 case "defaultValue": 16659 lastDefaultValue = lastProp; 16660 default: 16661 nextProps.hasOwnProperty(propKey) || setProp( 16662 domElement, 16663 tag, 16664 propKey, 16665 null, 16666 nextProps, 16667 lastProp 16668 ); 16669 } 16670 } 16671 for (var _propKey8 in nextProps) { 16672 var propKey = nextProps[_propKey8]; 16673 lastProp = lastProps[_propKey8]; 16674 if (nextProps.hasOwnProperty(_propKey8) && (null != propKey || null != lastProp)) 16675 switch (_propKey8) { 16676 case "type": 16677 type = propKey; 16678 break; 16679 case "name": 16680 name = propKey; 16681 break; 16682 case "checked": 16683 checked = propKey; 16684 break; 16685 case "defaultChecked": 16686 defaultChecked = propKey; 16687 break; 16688 case "value": 16689 value = propKey; 16690 break; 16691 case "defaultValue": 16692 defaultValue = propKey; 16693 break; 16694 case "children": 16695 case "dangerouslySetInnerHTML": 16696 if (null != propKey) 16697 throw Error( 16698 tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." 16699 ); 16700 break; 16701 default: 16702 propKey !== lastProp && setProp( 16703 domElement, 16704 tag, 16705 _propKey8, 16706 propKey, 16707 nextProps, 16708 lastProp 16709 ); 16710 } 16711 } 16712 tag = "checkbox" === lastProps.type || "radio" === lastProps.type ? null != lastProps.checked : null != lastProps.value; 16713 nextProps = "checkbox" === nextProps.type || "radio" === nextProps.type ? null != nextProps.checked : null != nextProps.value; 16714 tag || !nextProps || didWarnUncontrolledToControlled || (console.error( 16715 "A component is changing an uncontrolled input to be controlled. This is likely caused by the value changing from undefined to a defined value, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components" 16716 ), didWarnUncontrolledToControlled = true); 16717 !tag || nextProps || didWarnControlledToUncontrolled || (console.error( 16718 "A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component. More info: https://react.dev/link/controlled-components" 16719 ), didWarnControlledToUncontrolled = true); 16720 updateInput( 16721 domElement, 16722 value, 16723 defaultValue, 16724 lastDefaultValue, 16725 checked, 16726 defaultChecked, 16727 type, 16728 name 16729 ); 16730 return; 16731 case "select": 16732 propKey = value = defaultValue = _propKey8 = null; 16733 for (type in lastProps) 16734 if (lastDefaultValue = lastProps[type], lastProps.hasOwnProperty(type) && null != lastDefaultValue) 16735 switch (type) { 16736 case "value": 16737 break; 16738 case "multiple": 16739 propKey = lastDefaultValue; 16740 default: 16741 nextProps.hasOwnProperty(type) || setProp( 16742 domElement, 16743 tag, 16744 type, 16745 null, 16746 nextProps, 16747 lastDefaultValue 16748 ); 16749 } 16750 for (name in nextProps) 16751 if (type = nextProps[name], lastDefaultValue = lastProps[name], nextProps.hasOwnProperty(name) && (null != type || null != lastDefaultValue)) 16752 switch (name) { 16753 case "value": 16754 _propKey8 = type; 16755 break; 16756 case "defaultValue": 16757 defaultValue = type; 16758 break; 16759 case "multiple": 16760 value = type; 16761 default: 16762 type !== lastDefaultValue && setProp( 16763 domElement, 16764 tag, 16765 name, 16766 type, 16767 nextProps, 16768 lastDefaultValue 16769 ); 16770 } 16771 nextProps = defaultValue; 16772 tag = value; 16773 lastProps = propKey; 16774 null != _propKey8 ? updateOptions(domElement, !!tag, _propKey8, false) : !!lastProps !== !!tag && (null != nextProps ? updateOptions(domElement, !!tag, nextProps, true) : updateOptions(domElement, !!tag, tag ? [] : "", false)); 16775 return; 16776 case "textarea": 16777 propKey = _propKey8 = null; 16778 for (defaultValue in lastProps) 16779 if (name = lastProps[defaultValue], lastProps.hasOwnProperty(defaultValue) && null != name && !nextProps.hasOwnProperty(defaultValue)) 16780 switch (defaultValue) { 16781 case "value": 16782 break; 16783 case "children": 16784 break; 16785 default: 16786 setProp(domElement, tag, defaultValue, null, nextProps, name); 16787 } 16788 for (value in nextProps) 16789 if (name = nextProps[value], type = lastProps[value], nextProps.hasOwnProperty(value) && (null != name || null != type)) 16790 switch (value) { 16791 case "value": 16792 _propKey8 = name; 16793 break; 16794 case "defaultValue": 16795 propKey = name; 16796 break; 16797 case "children": 16798 break; 16799 case "dangerouslySetInnerHTML": 16800 if (null != name) 16801 throw Error( 16802 "`dangerouslySetInnerHTML` does not make sense on <textarea>." 16803 ); 16804 break; 16805 default: 16806 name !== type && setProp(domElement, tag, value, name, nextProps, type); 16807 } 16808 updateTextarea(domElement, _propKey8, propKey); 16809 return; 16810 case "option": 16811 for (var _propKey13 in lastProps) 16812 if (_propKey8 = lastProps[_propKey13], lastProps.hasOwnProperty(_propKey13) && null != _propKey8 && !nextProps.hasOwnProperty(_propKey13)) 16813 switch (_propKey13) { 16814 case "selected": 16815 domElement.selected = false; 16816 break; 16817 default: 16818 setProp( 16819 domElement, 16820 tag, 16821 _propKey13, 16822 null, 16823 nextProps, 16824 _propKey8 16825 ); 16826 } 16827 for (lastDefaultValue in nextProps) 16828 if (_propKey8 = nextProps[lastDefaultValue], propKey = lastProps[lastDefaultValue], nextProps.hasOwnProperty(lastDefaultValue) && _propKey8 !== propKey && (null != _propKey8 || null != propKey)) 16829 switch (lastDefaultValue) { 16830 case "selected": 16831 domElement.selected = _propKey8 && "function" !== typeof _propKey8 && "symbol" !== typeof _propKey8; 16832 break; 16833 default: 16834 setProp( 16835 domElement, 16836 tag, 16837 lastDefaultValue, 16838 _propKey8, 16839 nextProps, 16840 propKey 16841 ); 16842 } 16843 return; 16844 case "img": 16845 case "link": 16846 case "area": 16847 case "base": 16848 case "br": 16849 case "col": 16850 case "embed": 16851 case "hr": 16852 case "keygen": 16853 case "meta": 16854 case "param": 16855 case "source": 16856 case "track": 16857 case "wbr": 16858 case "menuitem": 16859 for (var _propKey15 in lastProps) 16860 _propKey8 = lastProps[_propKey15], lastProps.hasOwnProperty(_propKey15) && null != _propKey8 && !nextProps.hasOwnProperty(_propKey15) && setProp( 16861 domElement, 16862 tag, 16863 _propKey15, 16864 null, 16865 nextProps, 16866 _propKey8 16867 ); 16868 for (checked in nextProps) 16869 if (_propKey8 = nextProps[checked], propKey = lastProps[checked], nextProps.hasOwnProperty(checked) && _propKey8 !== propKey && (null != _propKey8 || null != propKey)) 16870 switch (checked) { 16871 case "children": 16872 case "dangerouslySetInnerHTML": 16873 if (null != _propKey8) 16874 throw Error( 16875 tag + " is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`." 16876 ); 16877 break; 16878 default: 16879 setProp( 16880 domElement, 16881 tag, 16882 checked, 16883 _propKey8, 16884 nextProps, 16885 propKey 16886 ); 16887 } 16888 return; 16889 default: 16890 if (isCustomElement(tag)) { 16891 for (var _propKey17 in lastProps) 16892 _propKey8 = lastProps[_propKey17], lastProps.hasOwnProperty(_propKey17) && void 0 !== _propKey8 && !nextProps.hasOwnProperty(_propKey17) && setPropOnCustomElement( 16893 domElement, 16894 tag, 16895 _propKey17, 16896 void 0, 16897 nextProps, 16898 _propKey8 16899 ); 16900 for (defaultChecked in nextProps) 16901 _propKey8 = nextProps[defaultChecked], propKey = lastProps[defaultChecked], !nextProps.hasOwnProperty(defaultChecked) || _propKey8 === propKey || void 0 === _propKey8 && void 0 === propKey || setPropOnCustomElement( 16902 domElement, 16903 tag, 16904 defaultChecked, 16905 _propKey8, 16906 nextProps, 16907 propKey 16908 ); 16909 return; 16910 } 16911 } 16912 for (var _propKey19 in lastProps) 16913 _propKey8 = lastProps[_propKey19], lastProps.hasOwnProperty(_propKey19) && null != _propKey8 && !nextProps.hasOwnProperty(_propKey19) && setProp(domElement, tag, _propKey19, null, nextProps, _propKey8); 16914 for (lastProp in nextProps) 16915 _propKey8 = nextProps[lastProp], propKey = lastProps[lastProp], !nextProps.hasOwnProperty(lastProp) || _propKey8 === propKey || null == _propKey8 && null == propKey || setProp(domElement, tag, lastProp, _propKey8, nextProps, propKey); 16916 } 16917 function getPropNameFromAttributeName(attrName) { 16918 switch (attrName) { 16919 case "class": 16920 return "className"; 16921 case "for": 16922 return "htmlFor"; 16923 default: 16924 return attrName; 16925 } 16926 } 16927 function getStylesObjectFromElement(domElement) { 16928 var serverValueInObjectForm = {}; 16929 domElement = domElement.style; 16930 for (var i3 = 0; i3 < domElement.length; i3++) { 16931 var styleName = domElement[i3]; 16932 serverValueInObjectForm[styleName] = domElement.getPropertyValue(styleName); 16933 } 16934 return serverValueInObjectForm; 16935 } 16936 function diffHydratedStyles(domElement, value$jscomp$0, serverDifferences) { 16937 if (null != value$jscomp$0 && "object" !== typeof value$jscomp$0) 16938 console.error( 16939 "The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX." 16940 ); 16941 else { 16942 var clientValue; 16943 var delimiter = clientValue = "", styleName; 16944 for (styleName in value$jscomp$0) 16945 if (value$jscomp$0.hasOwnProperty(styleName)) { 16946 var value = value$jscomp$0[styleName]; 16947 null != value && "boolean" !== typeof value && "" !== value && (0 === styleName.indexOf("--") ? (checkCSSPropertyStringCoercion(value, styleName), clientValue += delimiter + styleName + ":" + ("" + value).trim()) : "number" !== typeof value || 0 === value || unitlessNumbers.has(styleName) ? (checkCSSPropertyStringCoercion(value, styleName), clientValue += delimiter + styleName.replace(uppercasePattern, "-$1").toLowerCase().replace(msPattern$1, "-ms-") + ":" + ("" + value).trim()) : clientValue += delimiter + styleName.replace(uppercasePattern, "-$1").toLowerCase().replace(msPattern$1, "-ms-") + ":" + value + "px", delimiter = ";"); 16948 } 16949 clientValue = clientValue || null; 16950 value$jscomp$0 = domElement.getAttribute("style"); 16951 value$jscomp$0 !== clientValue && (clientValue = normalizeMarkupForTextOrAttribute(clientValue), normalizeMarkupForTextOrAttribute(value$jscomp$0) !== clientValue && (serverDifferences.style = getStylesObjectFromElement(domElement))); 16952 } 16953 } 16954 function hydrateAttribute(domElement, propKey, attributeName, value, extraAttributes, serverDifferences) { 16955 extraAttributes.delete(attributeName); 16956 domElement = domElement.getAttribute(attributeName); 16957 if (null === domElement) 16958 switch (typeof value) { 16959 case "undefined": 16960 case "function": 16961 case "symbol": 16962 case "boolean": 16963 return; 16964 } 16965 else if (null != value) 16966 switch (typeof value) { 16967 case "function": 16968 case "symbol": 16969 case "boolean": 16970 break; 16971 default: 16972 if (checkAttributeStringCoercion(value, propKey), domElement === "" + value) 16973 return; 16974 } 16975 warnForPropDifference(propKey, domElement, value, serverDifferences); 16976 } 16977 function hydrateBooleanAttribute(domElement, propKey, attributeName, value, extraAttributes, serverDifferences) { 16978 extraAttributes.delete(attributeName); 16979 domElement = domElement.getAttribute(attributeName); 16980 if (null === domElement) { 16981 switch (typeof value) { 16982 case "function": 16983 case "symbol": 16984 return; 16985 } 16986 if (!value) return; 16987 } else 16988 switch (typeof value) { 16989 case "function": 16990 case "symbol": 16991 break; 16992 default: 16993 if (value) return; 16994 } 16995 warnForPropDifference(propKey, domElement, value, serverDifferences); 16996 } 16997 function hydrateBooleanishAttribute(domElement, propKey, attributeName, value, extraAttributes, serverDifferences) { 16998 extraAttributes.delete(attributeName); 16999 domElement = domElement.getAttribute(attributeName); 17000 if (null === domElement) 17001 switch (typeof value) { 17002 case "undefined": 17003 case "function": 17004 case "symbol": 17005 return; 17006 } 17007 else if (null != value) 17008 switch (typeof value) { 17009 case "function": 17010 case "symbol": 17011 break; 17012 default: 17013 if (checkAttributeStringCoercion(value, attributeName), domElement === "" + value) 17014 return; 17015 } 17016 warnForPropDifference(propKey, domElement, value, serverDifferences); 17017 } 17018 function hydrateNumericAttribute(domElement, propKey, attributeName, value, extraAttributes, serverDifferences) { 17019 extraAttributes.delete(attributeName); 17020 domElement = domElement.getAttribute(attributeName); 17021 if (null === domElement) 17022 switch (typeof value) { 17023 case "undefined": 17024 case "function": 17025 case "symbol": 17026 case "boolean": 17027 return; 17028 default: 17029 if (isNaN(value)) return; 17030 } 17031 else if (null != value) 17032 switch (typeof value) { 17033 case "function": 17034 case "symbol": 17035 case "boolean": 17036 break; 17037 default: 17038 if (!isNaN(value) && (checkAttributeStringCoercion(value, propKey), domElement === "" + value)) 17039 return; 17040 } 17041 warnForPropDifference(propKey, domElement, value, serverDifferences); 17042 } 17043 function hydrateSanitizedAttribute(domElement, propKey, attributeName, value, extraAttributes, serverDifferences) { 17044 extraAttributes.delete(attributeName); 17045 domElement = domElement.getAttribute(attributeName); 17046 if (null === domElement) 17047 switch (typeof value) { 17048 case "undefined": 17049 case "function": 17050 case "symbol": 17051 case "boolean": 17052 return; 17053 } 17054 else if (null != value) 17055 switch (typeof value) { 17056 case "function": 17057 case "symbol": 17058 case "boolean": 17059 break; 17060 default: 17061 if (checkAttributeStringCoercion(value, propKey), attributeName = sanitizeURL("" + value), domElement === attributeName) 17062 return; 17063 } 17064 warnForPropDifference(propKey, domElement, value, serverDifferences); 17065 } 17066 function diffHydratedProperties(domElement, tag, props, hostContext) { 17067 for (var serverDifferences = {}, extraAttributes = /* @__PURE__ */ new Set(), attributes = domElement.attributes, i3 = 0; i3 < attributes.length; i3++) 17068 switch (attributes[i3].name.toLowerCase()) { 17069 case "value": 17070 break; 17071 case "checked": 17072 break; 17073 case "selected": 17074 break; 17075 default: 17076 extraAttributes.add(attributes[i3].name); 17077 } 17078 if (isCustomElement(tag)) 17079 for (var propKey in props) { 17080 if (props.hasOwnProperty(propKey)) { 17081 var value = props[propKey]; 17082 if (null != value) { 17083 if (registrationNameDependencies.hasOwnProperty(propKey)) 17084 "function" !== typeof value && warnForInvalidEventListener(propKey, value); 17085 else if (true !== props.suppressHydrationWarning) 17086 switch (propKey) { 17087 case "children": 17088 "string" !== typeof value && "number" !== typeof value || warnForPropDifference( 17089 "children", 17090 domElement.textContent, 17091 value, 17092 serverDifferences 17093 ); 17094 continue; 17095 case "suppressContentEditableWarning": 17096 case "suppressHydrationWarning": 17097 case "defaultValue": 17098 case "defaultChecked": 17099 case "innerHTML": 17100 case "ref": 17101 continue; 17102 case "dangerouslySetInnerHTML": 17103 attributes = domElement.innerHTML; 17104 value = value ? value.__html : void 0; 17105 null != value && (value = normalizeHTML(domElement, value), warnForPropDifference( 17106 propKey, 17107 attributes, 17108 value, 17109 serverDifferences 17110 )); 17111 continue; 17112 case "style": 17113 extraAttributes.delete(propKey); 17114 diffHydratedStyles(domElement, value, serverDifferences); 17115 continue; 17116 case "offsetParent": 17117 case "offsetTop": 17118 case "offsetLeft": 17119 case "offsetWidth": 17120 case "offsetHeight": 17121 case "isContentEditable": 17122 case "outerText": 17123 case "outerHTML": 17124 extraAttributes.delete(propKey.toLowerCase()); 17125 console.error( 17126 "Assignment to read-only property will result in a no-op: `%s`", 17127 propKey 17128 ); 17129 continue; 17130 case "className": 17131 extraAttributes.delete("class"); 17132 attributes = getValueForAttributeOnCustomComponent( 17133 domElement, 17134 "class", 17135 value 17136 ); 17137 warnForPropDifference( 17138 "className", 17139 attributes, 17140 value, 17141 serverDifferences 17142 ); 17143 continue; 17144 default: 17145 hostContext.context === HostContextNamespaceNone && "svg" !== tag && "math" !== tag ? extraAttributes.delete(propKey.toLowerCase()) : extraAttributes.delete(propKey), attributes = getValueForAttributeOnCustomComponent( 17146 domElement, 17147 propKey, 17148 value 17149 ), warnForPropDifference( 17150 propKey, 17151 attributes, 17152 value, 17153 serverDifferences 17154 ); 17155 } 17156 } 17157 } 17158 } 17159 else 17160 for (value in props) 17161 if (props.hasOwnProperty(value) && (propKey = props[value], null != propKey)) { 17162 if (registrationNameDependencies.hasOwnProperty(value)) 17163 "function" !== typeof propKey && warnForInvalidEventListener(value, propKey); 17164 else if (true !== props.suppressHydrationWarning) 17165 switch (value) { 17166 case "children": 17167 "string" !== typeof propKey && "number" !== typeof propKey || warnForPropDifference( 17168 "children", 17169 domElement.textContent, 17170 propKey, 17171 serverDifferences 17172 ); 17173 continue; 17174 case "suppressContentEditableWarning": 17175 case "suppressHydrationWarning": 17176 case "value": 17177 case "checked": 17178 case "selected": 17179 case "defaultValue": 17180 case "defaultChecked": 17181 case "innerHTML": 17182 case "ref": 17183 continue; 17184 case "dangerouslySetInnerHTML": 17185 attributes = domElement.innerHTML; 17186 propKey = propKey ? propKey.__html : void 0; 17187 null != propKey && (propKey = normalizeHTML(domElement, propKey), attributes !== propKey && (serverDifferences[value] = { __html: attributes })); 17188 continue; 17189 case "className": 17190 hydrateAttribute( 17191 domElement, 17192 value, 17193 "class", 17194 propKey, 17195 extraAttributes, 17196 serverDifferences 17197 ); 17198 continue; 17199 case "tabIndex": 17200 hydrateAttribute( 17201 domElement, 17202 value, 17203 "tabindex", 17204 propKey, 17205 extraAttributes, 17206 serverDifferences 17207 ); 17208 continue; 17209 case "style": 17210 extraAttributes.delete(value); 17211 diffHydratedStyles(domElement, propKey, serverDifferences); 17212 continue; 17213 case "multiple": 17214 extraAttributes.delete(value); 17215 warnForPropDifference( 17216 value, 17217 domElement.multiple, 17218 propKey, 17219 serverDifferences 17220 ); 17221 continue; 17222 case "muted": 17223 extraAttributes.delete(value); 17224 warnForPropDifference( 17225 value, 17226 domElement.muted, 17227 propKey, 17228 serverDifferences 17229 ); 17230 continue; 17231 case "autoFocus": 17232 extraAttributes.delete("autofocus"); 17233 warnForPropDifference( 17234 value, 17235 domElement.autofocus, 17236 propKey, 17237 serverDifferences 17238 ); 17239 continue; 17240 case "data": 17241 if ("object" !== tag) { 17242 extraAttributes.delete(value); 17243 attributes = domElement.getAttribute("data"); 17244 warnForPropDifference( 17245 value, 17246 attributes, 17247 propKey, 17248 serverDifferences 17249 ); 17250 continue; 17251 } 17252 case "src": 17253 case "href": 17254 if (!("" !== propKey || "a" === tag && "href" === value || "object" === tag && "data" === value)) { 17255 "src" === value ? console.error( 17256 'An empty string ("") was passed to the %s attribute. This may cause the browser to download the whole page again over the network. To fix this, either do not render the element at all or pass null to %s instead of an empty string.', 17257 value, 17258 value 17259 ) : console.error( 17260 'An empty string ("") was passed to the %s attribute. To fix this, either do not render the element at all or pass null to %s instead of an empty string.', 17261 value, 17262 value 17263 ); 17264 continue; 17265 } 17266 hydrateSanitizedAttribute( 17267 domElement, 17268 value, 17269 value, 17270 propKey, 17271 extraAttributes, 17272 serverDifferences 17273 ); 17274 continue; 17275 case "action": 17276 case "formAction": 17277 attributes = domElement.getAttribute(value); 17278 if ("function" === typeof propKey) { 17279 extraAttributes.delete(value.toLowerCase()); 17280 "formAction" === value ? (extraAttributes.delete("name"), extraAttributes.delete("formenctype"), extraAttributes.delete("formmethod"), extraAttributes.delete("formtarget")) : (extraAttributes.delete("enctype"), extraAttributes.delete("method"), extraAttributes.delete("target")); 17281 continue; 17282 } else if (attributes === EXPECTED_FORM_ACTION_URL) { 17283 extraAttributes.delete(value.toLowerCase()); 17284 warnForPropDifference( 17285 value, 17286 "function", 17287 propKey, 17288 serverDifferences 17289 ); 17290 continue; 17291 } 17292 hydrateSanitizedAttribute( 17293 domElement, 17294 value, 17295 value.toLowerCase(), 17296 propKey, 17297 extraAttributes, 17298 serverDifferences 17299 ); 17300 continue; 17301 case "xlinkHref": 17302 hydrateSanitizedAttribute( 17303 domElement, 17304 value, 17305 "xlink:href", 17306 propKey, 17307 extraAttributes, 17308 serverDifferences 17309 ); 17310 continue; 17311 case "contentEditable": 17312 hydrateBooleanishAttribute( 17313 domElement, 17314 value, 17315 "contenteditable", 17316 propKey, 17317 extraAttributes, 17318 serverDifferences 17319 ); 17320 continue; 17321 case "spellCheck": 17322 hydrateBooleanishAttribute( 17323 domElement, 17324 value, 17325 "spellcheck", 17326 propKey, 17327 extraAttributes, 17328 serverDifferences 17329 ); 17330 continue; 17331 case "draggable": 17332 case "autoReverse": 17333 case "externalResourcesRequired": 17334 case "focusable": 17335 case "preserveAlpha": 17336 hydrateBooleanishAttribute( 17337 domElement, 17338 value, 17339 value, 17340 propKey, 17341 extraAttributes, 17342 serverDifferences 17343 ); 17344 continue; 17345 case "allowFullScreen": 17346 case "async": 17347 case "autoPlay": 17348 case "controls": 17349 case "default": 17350 case "defer": 17351 case "disabled": 17352 case "disablePictureInPicture": 17353 case "disableRemotePlayback": 17354 case "formNoValidate": 17355 case "hidden": 17356 case "loop": 17357 case "noModule": 17358 case "noValidate": 17359 case "open": 17360 case "playsInline": 17361 case "readOnly": 17362 case "required": 17363 case "reversed": 17364 case "scoped": 17365 case "seamless": 17366 case "itemScope": 17367 hydrateBooleanAttribute( 17368 domElement, 17369 value, 17370 value.toLowerCase(), 17371 propKey, 17372 extraAttributes, 17373 serverDifferences 17374 ); 17375 continue; 17376 case "capture": 17377 case "download": 17378 a: { 17379 i3 = domElement; 17380 var attributeName = attributes = value, serverDifferences$jscomp$0 = serverDifferences; 17381 extraAttributes.delete(attributeName); 17382 i3 = i3.getAttribute(attributeName); 17383 if (null === i3) 17384 switch (typeof propKey) { 17385 case "undefined": 17386 case "function": 17387 case "symbol": 17388 break a; 17389 default: 17390 if (false === propKey) break a; 17391 } 17392 else if (null != propKey) 17393 switch (typeof propKey) { 17394 case "function": 17395 case "symbol": 17396 break; 17397 case "boolean": 17398 if (true === propKey && "" === i3) break a; 17399 break; 17400 default: 17401 if (checkAttributeStringCoercion(propKey, attributes), i3 === "" + propKey) 17402 break a; 17403 } 17404 warnForPropDifference( 17405 attributes, 17406 i3, 17407 propKey, 17408 serverDifferences$jscomp$0 17409 ); 17410 } 17411 continue; 17412 case "cols": 17413 case "rows": 17414 case "size": 17415 case "span": 17416 a: { 17417 i3 = domElement; 17418 attributeName = attributes = value; 17419 serverDifferences$jscomp$0 = serverDifferences; 17420 extraAttributes.delete(attributeName); 17421 i3 = i3.getAttribute(attributeName); 17422 if (null === i3) 17423 switch (typeof propKey) { 17424 case "undefined": 17425 case "function": 17426 case "symbol": 17427 case "boolean": 17428 break a; 17429 default: 17430 if (isNaN(propKey) || 1 > propKey) break a; 17431 } 17432 else if (null != propKey) 17433 switch (typeof propKey) { 17434 case "function": 17435 case "symbol": 17436 case "boolean": 17437 break; 17438 default: 17439 if (!(isNaN(propKey) || 1 > propKey) && (checkAttributeStringCoercion(propKey, attributes), i3 === "" + propKey)) 17440 break a; 17441 } 17442 warnForPropDifference( 17443 attributes, 17444 i3, 17445 propKey, 17446 serverDifferences$jscomp$0 17447 ); 17448 } 17449 continue; 17450 case "rowSpan": 17451 hydrateNumericAttribute( 17452 domElement, 17453 value, 17454 "rowspan", 17455 propKey, 17456 extraAttributes, 17457 serverDifferences 17458 ); 17459 continue; 17460 case "start": 17461 hydrateNumericAttribute( 17462 domElement, 17463 value, 17464 value, 17465 propKey, 17466 extraAttributes, 17467 serverDifferences 17468 ); 17469 continue; 17470 case "xHeight": 17471 hydrateAttribute( 17472 domElement, 17473 value, 17474 "x-height", 17475 propKey, 17476 extraAttributes, 17477 serverDifferences 17478 ); 17479 continue; 17480 case "xlinkActuate": 17481 hydrateAttribute( 17482 domElement, 17483 value, 17484 "xlink:actuate", 17485 propKey, 17486 extraAttributes, 17487 serverDifferences 17488 ); 17489 continue; 17490 case "xlinkArcrole": 17491 hydrateAttribute( 17492 domElement, 17493 value, 17494 "xlink:arcrole", 17495 propKey, 17496 extraAttributes, 17497 serverDifferences 17498 ); 17499 continue; 17500 case "xlinkRole": 17501 hydrateAttribute( 17502 domElement, 17503 value, 17504 "xlink:role", 17505 propKey, 17506 extraAttributes, 17507 serverDifferences 17508 ); 17509 continue; 17510 case "xlinkShow": 17511 hydrateAttribute( 17512 domElement, 17513 value, 17514 "xlink:show", 17515 propKey, 17516 extraAttributes, 17517 serverDifferences 17518 ); 17519 continue; 17520 case "xlinkTitle": 17521 hydrateAttribute( 17522 domElement, 17523 value, 17524 "xlink:title", 17525 propKey, 17526 extraAttributes, 17527 serverDifferences 17528 ); 17529 continue; 17530 case "xlinkType": 17531 hydrateAttribute( 17532 domElement, 17533 value, 17534 "xlink:type", 17535 propKey, 17536 extraAttributes, 17537 serverDifferences 17538 ); 17539 continue; 17540 case "xmlBase": 17541 hydrateAttribute( 17542 domElement, 17543 value, 17544 "xml:base", 17545 propKey, 17546 extraAttributes, 17547 serverDifferences 17548 ); 17549 continue; 17550 case "xmlLang": 17551 hydrateAttribute( 17552 domElement, 17553 value, 17554 "xml:lang", 17555 propKey, 17556 extraAttributes, 17557 serverDifferences 17558 ); 17559 continue; 17560 case "xmlSpace": 17561 hydrateAttribute( 17562 domElement, 17563 value, 17564 "xml:space", 17565 propKey, 17566 extraAttributes, 17567 serverDifferences 17568 ); 17569 continue; 17570 case "inert": 17571 "" !== propKey || didWarnForNewBooleanPropsWithEmptyValue[value] || (didWarnForNewBooleanPropsWithEmptyValue[value] = true, console.error( 17572 "Received an empty string for a boolean attribute `%s`. This will treat the attribute as if it were false. Either pass `false` to silence this warning, or pass `true` if you used an empty string in earlier versions of React to indicate this attribute is true.", 17573 value 17574 )); 17575 hydrateBooleanAttribute( 17576 domElement, 17577 value, 17578 value, 17579 propKey, 17580 extraAttributes, 17581 serverDifferences 17582 ); 17583 continue; 17584 default: 17585 if (!(2 < value.length) || "o" !== value[0] && "O" !== value[0] || "n" !== value[1] && "N" !== value[1]) { 17586 i3 = getAttributeAlias(value); 17587 attributes = false; 17588 hostContext.context === HostContextNamespaceNone && "svg" !== tag && "math" !== tag ? extraAttributes.delete(i3.toLowerCase()) : (attributeName = value.toLowerCase(), attributeName = possibleStandardNames.hasOwnProperty( 17589 attributeName 17590 ) ? possibleStandardNames[attributeName] || null : null, null !== attributeName && attributeName !== value && (attributes = true, extraAttributes.delete(attributeName)), extraAttributes.delete(i3)); 17591 a: if (attributeName = domElement, serverDifferences$jscomp$0 = i3, i3 = propKey, isAttributeNameSafe(serverDifferences$jscomp$0)) 17592 if (attributeName.hasAttribute(serverDifferences$jscomp$0)) 17593 attributeName = attributeName.getAttribute( 17594 serverDifferences$jscomp$0 17595 ), checkAttributeStringCoercion( 17596 i3, 17597 serverDifferences$jscomp$0 17598 ), i3 = attributeName === "" + i3 ? i3 : attributeName; 17599 else { 17600 switch (typeof i3) { 17601 case "function": 17602 case "symbol": 17603 break a; 17604 case "boolean": 17605 if (attributeName = serverDifferences$jscomp$0.toLowerCase().slice(0, 5), "data-" !== attributeName && "aria-" !== attributeName) 17606 break a; 17607 } 17608 i3 = void 0 === i3 ? void 0 : null; 17609 } 17610 else i3 = void 0; 17611 attributes || warnForPropDifference( 17612 value, 17613 i3, 17614 propKey, 17615 serverDifferences 17616 ); 17617 } 17618 } 17619 } 17620 0 < extraAttributes.size && true !== props.suppressHydrationWarning && warnForExtraAttributes(domElement, extraAttributes, serverDifferences); 17621 return 0 === Object.keys(serverDifferences).length ? null : serverDifferences; 17622 } 17623 function propNamesListJoin(list, combinator) { 17624 switch (list.length) { 17625 case 0: 17626 return ""; 17627 case 1: 17628 return list[0]; 17629 case 2: 17630 return list[0] + " " + combinator + " " + list[1]; 17631 default: 17632 return list.slice(0, -1).join(", ") + ", " + combinator + " " + list[list.length - 1]; 17633 } 17634 } 17635 function isLikelyStaticResource(initiatorType) { 17636 switch (initiatorType) { 17637 case "css": 17638 case "script": 17639 case "font": 17640 case "img": 17641 case "image": 17642 case "input": 17643 case "link": 17644 return true; 17645 default: 17646 return false; 17647 } 17648 } 17649 function estimateBandwidth() { 17650 if ("function" === typeof performance.getEntriesByType) { 17651 for (var count = 0, bits = 0, resourceEntries = performance.getEntriesByType("resource"), i3 = 0; i3 < resourceEntries.length; i3++) { 17652 var entry = resourceEntries[i3], transferSize = entry.transferSize, initiatorType = entry.initiatorType, duration = entry.duration; 17653 if (transferSize && duration && isLikelyStaticResource(initiatorType)) { 17654 initiatorType = 0; 17655 duration = entry.responseEnd; 17656 for (i3 += 1; i3 < resourceEntries.length; i3++) { 17657 var overlapEntry = resourceEntries[i3], overlapStartTime = overlapEntry.startTime; 17658 if (overlapStartTime > duration) break; 17659 var overlapTransferSize = overlapEntry.transferSize, overlapInitiatorType = overlapEntry.initiatorType; 17660 overlapTransferSize && isLikelyStaticResource(overlapInitiatorType) && (overlapEntry = overlapEntry.responseEnd, initiatorType += overlapTransferSize * (overlapEntry < duration ? 1 : (duration - overlapStartTime) / (overlapEntry - overlapStartTime))); 17661 } 17662 --i3; 17663 bits += 8 * (transferSize + initiatorType) / (entry.duration / 1e3); 17664 count++; 17665 if (10 < count) break; 17666 } 17667 } 17668 if (0 < count) return bits / count / 1e6; 17669 } 17670 return navigator.connection && (count = navigator.connection.downlink, "number" === typeof count) ? count : 5; 17671 } 17672 function getOwnerDocumentFromRootContainer(rootContainerElement) { 17673 return 9 === rootContainerElement.nodeType ? rootContainerElement : rootContainerElement.ownerDocument; 17674 } 17675 function getOwnHostContext(namespaceURI) { 17676 switch (namespaceURI) { 17677 case SVG_NAMESPACE: 17678 return HostContextNamespaceSvg; 17679 case MATH_NAMESPACE: 17680 return HostContextNamespaceMath; 17681 default: 17682 return HostContextNamespaceNone; 17683 } 17684 } 17685 function getChildHostContextProd(parentNamespace, type) { 17686 if (parentNamespace === HostContextNamespaceNone) 17687 switch (type) { 17688 case "svg": 17689 return HostContextNamespaceSvg; 17690 case "math": 17691 return HostContextNamespaceMath; 17692 default: 17693 return HostContextNamespaceNone; 17694 } 17695 return parentNamespace === HostContextNamespaceSvg && "foreignObject" === type ? HostContextNamespaceNone : parentNamespace; 17696 } 17697 function shouldSetTextContent(type, props) { 17698 return "textarea" === type || "noscript" === type || "string" === typeof props.children || "number" === typeof props.children || "bigint" === typeof props.children || "object" === typeof props.dangerouslySetInnerHTML && null !== props.dangerouslySetInnerHTML && null != props.dangerouslySetInnerHTML.__html; 17699 } 17700 function shouldAttemptEagerTransition() { 17701 var event = window.event; 17702 if (event && "popstate" === event.type) { 17703 if (event === currentPopstateTransitionEvent) return false; 17704 currentPopstateTransitionEvent = event; 17705 return true; 17706 } 17707 currentPopstateTransitionEvent = null; 17708 return false; 17709 } 17710 function resolveEventType() { 17711 var event = window.event; 17712 return event && event !== schedulerEvent ? event.type : null; 17713 } 17714 function resolveEventTimeStamp() { 17715 var event = window.event; 17716 return event && event !== schedulerEvent ? event.timeStamp : -1.1; 17717 } 17718 function handleErrorInNextTick(error2) { 17719 setTimeout(function() { 17720 throw error2; 17721 }); 17722 } 17723 function commitMount(domElement, type, newProps) { 17724 switch (type) { 17725 case "button": 17726 case "input": 17727 case "select": 17728 case "textarea": 17729 newProps.autoFocus && domElement.focus(); 17730 break; 17731 case "img": 17732 newProps.src ? domElement.src = newProps.src : newProps.srcSet && (domElement.srcset = newProps.srcSet); 17733 } 17734 } 17735 function commitHydratedInstance() { 17736 } 17737 function commitUpdate(domElement, type, oldProps, newProps) { 17738 updateProperties(domElement, type, oldProps, newProps); 17739 domElement[internalPropsKey] = newProps; 17740 } 17741 function resetTextContent(domElement) { 17742 setTextContent(domElement, ""); 17743 } 17744 function commitTextUpdate(textInstance, oldText, newText) { 17745 textInstance.nodeValue = newText; 17746 } 17747 function warnForReactChildrenConflict(container) { 17748 if (!container.__reactWarnedAboutChildrenConflict) { 17749 var props = container[internalPropsKey] || null; 17750 if (null !== props) { 17751 var fiber = getInstanceFromNode(container); 17752 null !== fiber && ("string" === typeof props.children || "number" === typeof props.children ? (container.__reactWarnedAboutChildrenConflict = true, runWithFiberInDEV(fiber, function() { 17753 console.error( 17754 'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets "children" text content using React. It should be a leaf with no children. Otherwise it\'s ambiguous which children should be used.' 17755 ); 17756 })) : null != props.dangerouslySetInnerHTML && (container.__reactWarnedAboutChildrenConflict = true, runWithFiberInDEV(fiber, function() { 17757 console.error( 17758 'Cannot use a ref on a React element as a container to `createRoot` or `createPortal` if that element also sets "dangerouslySetInnerHTML" using React. It should be a leaf with no children. Otherwise it\'s ambiguous which children should be used.' 17759 ); 17760 }))); 17761 } 17762 } 17763 } 17764 function isSingletonScope(type) { 17765 return "head" === type; 17766 } 17767 function removeChild(parentInstance, child) { 17768 parentInstance.removeChild(child); 17769 } 17770 function removeChildFromContainer(container, child) { 17771 (9 === container.nodeType ? container.body : "HTML" === container.nodeName ? container.ownerDocument.body : container).removeChild(child); 17772 } 17773 function clearHydrationBoundary(parentInstance, hydrationInstance) { 17774 var node = hydrationInstance, depth = 0; 17775 do { 17776 var nextNode = node.nextSibling; 17777 parentInstance.removeChild(node); 17778 if (nextNode && 8 === nextNode.nodeType) 17779 if (node = nextNode.data, node === SUSPENSE_END_DATA || node === ACTIVITY_END_DATA) { 17780 if (0 === depth) { 17781 parentInstance.removeChild(nextNode); 17782 retryIfBlockedOn(hydrationInstance); 17783 return; 17784 } 17785 depth--; 17786 } else if (node === SUSPENSE_START_DATA || node === SUSPENSE_PENDING_START_DATA || node === SUSPENSE_QUEUED_START_DATA || node === SUSPENSE_FALLBACK_START_DATA || node === ACTIVITY_START_DATA) 17787 depth++; 17788 else if (node === PREAMBLE_CONTRIBUTION_HTML) 17789 releaseSingletonInstance( 17790 parentInstance.ownerDocument.documentElement 17791 ); 17792 else if (node === PREAMBLE_CONTRIBUTION_HEAD) { 17793 node = parentInstance.ownerDocument.head; 17794 releaseSingletonInstance(node); 17795 for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) { 17796 var nextNode$jscomp$0 = node$jscomp$0.nextSibling, nodeName = node$jscomp$0.nodeName; 17797 node$jscomp$0[internalHoistableMarker] || "SCRIPT" === nodeName || "STYLE" === nodeName || "LINK" === nodeName && "stylesheet" === node$jscomp$0.rel.toLowerCase() || node.removeChild(node$jscomp$0); 17798 node$jscomp$0 = nextNode$jscomp$0; 17799 } 17800 } else 17801 node === PREAMBLE_CONTRIBUTION_BODY && releaseSingletonInstance(parentInstance.ownerDocument.body); 17802 node = nextNode; 17803 } while (node); 17804 retryIfBlockedOn(hydrationInstance); 17805 } 17806 function hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) { 17807 var node = suspenseInstance; 17808 suspenseInstance = 0; 17809 do { 17810 var nextNode = node.nextSibling; 17811 1 === node.nodeType ? isHidden ? (node._stashedDisplay = node.style.display, node.style.display = "none") : (node.style.display = node._stashedDisplay || "", "" === node.getAttribute("style") && node.removeAttribute("style")) : 3 === node.nodeType && (isHidden ? (node._stashedText = node.nodeValue, node.nodeValue = "") : node.nodeValue = node._stashedText || ""); 17812 if (nextNode && 8 === nextNode.nodeType) 17813 if (node = nextNode.data, node === SUSPENSE_END_DATA) 17814 if (0 === suspenseInstance) break; 17815 else suspenseInstance--; 17816 else 17817 node !== SUSPENSE_START_DATA && node !== SUSPENSE_PENDING_START_DATA && node !== SUSPENSE_QUEUED_START_DATA && node !== SUSPENSE_FALLBACK_START_DATA || suspenseInstance++; 17818 node = nextNode; 17819 } while (node); 17820 } 17821 function hideDehydratedBoundary(suspenseInstance) { 17822 hideOrUnhideDehydratedBoundary(suspenseInstance, true); 17823 } 17824 function hideInstance(instance) { 17825 instance = instance.style; 17826 "function" === typeof instance.setProperty ? instance.setProperty("display", "none", "important") : instance.display = "none"; 17827 } 17828 function hideTextInstance(textInstance) { 17829 textInstance.nodeValue = ""; 17830 } 17831 function unhideDehydratedBoundary(dehydratedInstance) { 17832 hideOrUnhideDehydratedBoundary(dehydratedInstance, false); 17833 } 17834 function unhideInstance(instance, props) { 17835 props = props[STYLE]; 17836 props = void 0 !== props && null !== props && props.hasOwnProperty("display") ? props.display : null; 17837 instance.style.display = null == props || "boolean" === typeof props ? "" : ("" + props).trim(); 17838 } 17839 function unhideTextInstance(textInstance, text) { 17840 textInstance.nodeValue = text; 17841 } 17842 function clearContainerSparingly(container) { 17843 var nextNode = container.firstChild; 17844 nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling); 17845 for (; nextNode; ) { 17846 var node = nextNode; 17847 nextNode = nextNode.nextSibling; 17848 switch (node.nodeName) { 17849 case "HTML": 17850 case "HEAD": 17851 case "BODY": 17852 clearContainerSparingly(node); 17853 detachDeletedInstance(node); 17854 continue; 17855 case "SCRIPT": 17856 case "STYLE": 17857 continue; 17858 case "LINK": 17859 if ("stylesheet" === node.rel.toLowerCase()) continue; 17860 } 17861 container.removeChild(node); 17862 } 17863 } 17864 function canHydrateInstance(instance, type, props, inRootOrSingleton) { 17865 for (; 1 === instance.nodeType; ) { 17866 var anyProps = props; 17867 if (instance.nodeName.toLowerCase() !== type.toLowerCase()) { 17868 if (!inRootOrSingleton && ("INPUT" !== instance.nodeName || "hidden" !== instance.type)) 17869 break; 17870 } else if (!inRootOrSingleton) 17871 if ("input" === type && "hidden" === instance.type) { 17872 checkAttributeStringCoercion(anyProps.name, "name"); 17873 var name = null == anyProps.name ? null : "" + anyProps.name; 17874 if ("hidden" === anyProps.type && instance.getAttribute("name") === name) 17875 return instance; 17876 } else return instance; 17877 else if (!instance[internalHoistableMarker]) 17878 switch (type) { 17879 case "meta": 17880 if (!instance.hasAttribute("itemprop")) break; 17881 return instance; 17882 case "link": 17883 name = instance.getAttribute("rel"); 17884 if ("stylesheet" === name && instance.hasAttribute("data-precedence")) 17885 break; 17886 else if (name !== anyProps.rel || instance.getAttribute("href") !== (null == anyProps.href || "" === anyProps.href ? null : anyProps.href) || instance.getAttribute("crossorigin") !== (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) || instance.getAttribute("title") !== (null == anyProps.title ? null : anyProps.title)) 17887 break; 17888 return instance; 17889 case "style": 17890 if (instance.hasAttribute("data-precedence")) break; 17891 return instance; 17892 case "script": 17893 name = instance.getAttribute("src"); 17894 if ((name !== (null == anyProps.src ? null : anyProps.src) || instance.getAttribute("type") !== (null == anyProps.type ? null : anyProps.type) || instance.getAttribute("crossorigin") !== (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) && name && instance.hasAttribute("async") && !instance.hasAttribute("itemprop")) 17895 break; 17896 return instance; 17897 default: 17898 return instance; 17899 } 17900 instance = getNextHydratable(instance.nextSibling); 17901 if (null === instance) break; 17902 } 17903 return null; 17904 } 17905 function canHydrateTextInstance(instance, text, inRootOrSingleton) { 17906 if ("" === text) return null; 17907 for (; 3 !== instance.nodeType; ) { 17908 if ((1 !== instance.nodeType || "INPUT" !== instance.nodeName || "hidden" !== instance.type) && !inRootOrSingleton) 17909 return null; 17910 instance = getNextHydratable(instance.nextSibling); 17911 if (null === instance) return null; 17912 } 17913 return instance; 17914 } 17915 function canHydrateHydrationBoundary(instance, inRootOrSingleton) { 17916 for (; 8 !== instance.nodeType; ) { 17917 if ((1 !== instance.nodeType || "INPUT" !== instance.nodeName || "hidden" !== instance.type) && !inRootOrSingleton) 17918 return null; 17919 instance = getNextHydratable(instance.nextSibling); 17920 if (null === instance) return null; 17921 } 17922 return instance; 17923 } 17924 function isSuspenseInstancePending(instance) { 17925 return instance.data === SUSPENSE_PENDING_START_DATA || instance.data === SUSPENSE_QUEUED_START_DATA; 17926 } 17927 function isSuspenseInstanceFallback(instance) { 17928 return instance.data === SUSPENSE_FALLBACK_START_DATA || instance.data === SUSPENSE_PENDING_START_DATA && instance.ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING; 17929 } 17930 function registerSuspenseInstanceRetry(instance, callback) { 17931 var ownerDocument = instance.ownerDocument; 17932 if (instance.data === SUSPENSE_QUEUED_START_DATA) 17933 instance._reactRetry = callback; 17934 else if (instance.data !== SUSPENSE_PENDING_START_DATA || ownerDocument.readyState !== DOCUMENT_READY_STATE_LOADING) 17935 callback(); 17936 else { 17937 var listener = function() { 17938 callback(); 17939 ownerDocument.removeEventListener("DOMContentLoaded", listener); 17940 }; 17941 ownerDocument.addEventListener("DOMContentLoaded", listener); 17942 instance._reactRetry = listener; 17943 } 17944 } 17945 function getNextHydratable(node) { 17946 for (; null != node; node = node.nextSibling) { 17947 var nodeType = node.nodeType; 17948 if (1 === nodeType || 3 === nodeType) break; 17949 if (8 === nodeType) { 17950 nodeType = node.data; 17951 if (nodeType === SUSPENSE_START_DATA || nodeType === SUSPENSE_FALLBACK_START_DATA || nodeType === SUSPENSE_PENDING_START_DATA || nodeType === SUSPENSE_QUEUED_START_DATA || nodeType === ACTIVITY_START_DATA || nodeType === FORM_STATE_IS_MATCHING || nodeType === FORM_STATE_IS_NOT_MATCHING) 17952 break; 17953 if (nodeType === SUSPENSE_END_DATA || nodeType === ACTIVITY_END_DATA) 17954 return null; 17955 } 17956 } 17957 return node; 17958 } 17959 function describeHydratableInstanceForDevWarnings(instance) { 17960 if (1 === instance.nodeType) { 17961 for (var JSCompiler_temp_const = instance.nodeName.toLowerCase(), serverDifferences = {}, attributes = instance.attributes, i3 = 0; i3 < attributes.length; i3++) { 17962 var attr = attributes[i3]; 17963 serverDifferences[getPropNameFromAttributeName(attr.name)] = "style" === attr.name.toLowerCase() ? getStylesObjectFromElement(instance) : attr.value; 17964 } 17965 return { type: JSCompiler_temp_const, props: serverDifferences }; 17966 } 17967 return 8 === instance.nodeType ? instance.data === ACTIVITY_START_DATA ? { type: "Activity", props: {} } : { type: "Suspense", props: {} } : instance.nodeValue; 17968 } 17969 function diffHydratedTextForDevWarnings(textInstance, text, parentProps) { 17970 return null === parentProps || true !== parentProps[SUPPRESS_HYDRATION_WARNING] ? (textInstance.nodeValue === text ? textInstance = null : (text = normalizeMarkupForTextOrAttribute(text), textInstance = normalizeMarkupForTextOrAttribute(textInstance.nodeValue) === text ? null : textInstance.nodeValue), textInstance) : null; 17971 } 17972 function getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) { 17973 hydrationInstance = hydrationInstance.nextSibling; 17974 for (var depth = 0; hydrationInstance; ) { 17975 if (8 === hydrationInstance.nodeType) { 17976 var data = hydrationInstance.data; 17977 if (data === SUSPENSE_END_DATA || data === ACTIVITY_END_DATA) { 17978 if (0 === depth) 17979 return getNextHydratable(hydrationInstance.nextSibling); 17980 depth--; 17981 } else 17982 data !== SUSPENSE_START_DATA && data !== SUSPENSE_FALLBACK_START_DATA && data !== SUSPENSE_PENDING_START_DATA && data !== SUSPENSE_QUEUED_START_DATA && data !== ACTIVITY_START_DATA || depth++; 17983 } 17984 hydrationInstance = hydrationInstance.nextSibling; 17985 } 17986 return null; 17987 } 17988 function getParentHydrationBoundary(targetInstance) { 17989 targetInstance = targetInstance.previousSibling; 17990 for (var depth = 0; targetInstance; ) { 17991 if (8 === targetInstance.nodeType) { 17992 var data = targetInstance.data; 17993 if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_QUEUED_START_DATA || data === ACTIVITY_START_DATA) { 17994 if (0 === depth) return targetInstance; 17995 depth--; 17996 } else 17997 data !== SUSPENSE_END_DATA && data !== ACTIVITY_END_DATA || depth++; 17998 } 17999 targetInstance = targetInstance.previousSibling; 18000 } 18001 return null; 18002 } 18003 function commitHydratedContainer(container) { 18004 retryIfBlockedOn(container); 18005 } 18006 function commitHydratedActivityInstance(activityInstance) { 18007 retryIfBlockedOn(activityInstance); 18008 } 18009 function commitHydratedSuspenseInstance(suspenseInstance) { 18010 retryIfBlockedOn(suspenseInstance); 18011 } 18012 function resolveSingletonInstance(type, props, rootContainerInstance, hostContext, validateDOMNestingDev) { 18013 validateDOMNestingDev && validateDOMNesting(type, hostContext.ancestorInfo); 18014 props = getOwnerDocumentFromRootContainer(rootContainerInstance); 18015 switch (type) { 18016 case "html": 18017 type = props.documentElement; 18018 if (!type) 18019 throw Error( 18020 "React expected an <html> element (document.documentElement) to exist in the Document but one was not found. React never removes the documentElement for any Document it renders into so the cause is likely in some other script running on this page." 18021 ); 18022 return type; 18023 case "head": 18024 type = props.head; 18025 if (!type) 18026 throw Error( 18027 "React expected a <head> element (document.head) to exist in the Document but one was not found. React never removes the head for any Document it renders into so the cause is likely in some other script running on this page." 18028 ); 18029 return type; 18030 case "body": 18031 type = props.body; 18032 if (!type) 18033 throw Error( 18034 "React expected a <body> element (document.body) to exist in the Document but one was not found. React never removes the body for any Document it renders into so the cause is likely in some other script running on this page." 18035 ); 18036 return type; 18037 default: 18038 throw Error( 18039 "resolveSingletonInstance was called with an element type that is not supported. This is a bug in React." 18040 ); 18041 } 18042 } 18043 function acquireSingletonInstance(type, props, instance, internalInstanceHandle) { 18044 if (!instance[internalContainerInstanceKey] && getInstanceFromNode(instance)) { 18045 var tagName = instance.tagName.toLowerCase(); 18046 console.error( 18047 "You are mounting a new %s component when a previous one has not first unmounted. It is an error to render more than one %s component at a time and attributes and children of these components will likely fail in unpredictable ways. Please only render a single instance of <%s> and if you need to mount a new one, ensure any previous ones have unmounted first.", 18048 tagName, 18049 tagName, 18050 tagName 18051 ); 18052 } 18053 switch (type) { 18054 case "html": 18055 case "head": 18056 case "body": 18057 break; 18058 default: 18059 console.error( 18060 "acquireSingletonInstance was called with an element type that is not supported. This is a bug in React." 18061 ); 18062 } 18063 for (tagName = instance.attributes; tagName.length; ) 18064 instance.removeAttributeNode(tagName[0]); 18065 setInitialProperties(instance, type, props); 18066 instance[internalInstanceKey] = internalInstanceHandle; 18067 instance[internalPropsKey] = props; 18068 } 18069 function releaseSingletonInstance(instance) { 18070 for (var attributes = instance.attributes; attributes.length; ) 18071 instance.removeAttributeNode(attributes[0]); 18072 detachDeletedInstance(instance); 18073 } 18074 function getHoistableRoot(container) { 18075 return "function" === typeof container.getRootNode ? container.getRootNode() : 9 === container.nodeType ? container : container.ownerDocument; 18076 } 18077 function preconnectAs(rel, href, crossOrigin) { 18078 var ownerDocument = globalDocument; 18079 if (ownerDocument && "string" === typeof href && href) { 18080 var limitedEscapedHref = escapeSelectorAttributeValueInsideDoubleQuotes(href); 18081 limitedEscapedHref = 'link[rel="' + rel + '"][href="' + limitedEscapedHref + '"]'; 18082 "string" === typeof crossOrigin && (limitedEscapedHref += '[crossorigin="' + crossOrigin + '"]'); 18083 preconnectsSet.has(limitedEscapedHref) || (preconnectsSet.add(limitedEscapedHref), rel = { rel, crossOrigin, href }, null === ownerDocument.querySelector(limitedEscapedHref) && (href = ownerDocument.createElement("link"), setInitialProperties(href, "link", rel), markNodeAsHoistable(href), ownerDocument.head.appendChild(href))); 18084 } 18085 } 18086 function getResource(type, currentProps, pendingProps, currentResource) { 18087 var resourceRoot = (resourceRoot = rootInstanceStackCursor.current) ? getHoistableRoot(resourceRoot) : null; 18088 if (!resourceRoot) 18089 throw Error( 18090 '"resourceRoot" was expected to exist. This is a bug in React.' 18091 ); 18092 switch (type) { 18093 case "meta": 18094 case "title": 18095 return null; 18096 case "style": 18097 return "string" === typeof pendingProps.precedence && "string" === typeof pendingProps.href ? (pendingProps = getStyleKey(pendingProps.href), currentProps = getResourcesFromRoot(resourceRoot).hoistableStyles, currentResource = currentProps.get(pendingProps), currentResource || (currentResource = { 18098 type: "style", 18099 instance: null, 18100 count: 0, 18101 state: null 18102 }, currentProps.set(pendingProps, currentResource)), currentResource) : { type: "void", instance: null, count: 0, state: null }; 18103 case "link": 18104 if ("stylesheet" === pendingProps.rel && "string" === typeof pendingProps.href && "string" === typeof pendingProps.precedence) { 18105 type = getStyleKey(pendingProps.href); 18106 var _styles = getResourcesFromRoot(resourceRoot).hoistableStyles, _resource = _styles.get(type); 18107 if (!_resource && (resourceRoot = resourceRoot.ownerDocument || resourceRoot, _resource = { 18108 type: "stylesheet", 18109 instance: null, 18110 count: 0, 18111 state: { loading: NotLoaded, preload: null } 18112 }, _styles.set(type, _resource), (_styles = resourceRoot.querySelector( 18113 getStylesheetSelectorFromKey(type) 18114 )) && !_styles._p && (_resource.instance = _styles, _resource.state.loading = Loaded | Inserted), !preloadPropsMap.has(type))) { 18115 var preloadProps = { 18116 rel: "preload", 18117 as: "style", 18118 href: pendingProps.href, 18119 crossOrigin: pendingProps.crossOrigin, 18120 integrity: pendingProps.integrity, 18121 media: pendingProps.media, 18122 hrefLang: pendingProps.hrefLang, 18123 referrerPolicy: pendingProps.referrerPolicy 18124 }; 18125 preloadPropsMap.set(type, preloadProps); 18126 _styles || preloadStylesheet( 18127 resourceRoot, 18128 type, 18129 preloadProps, 18130 _resource.state 18131 ); 18132 } 18133 if (currentProps && null === currentResource) 18134 throw pendingProps = "\n\n - " + describeLinkForResourceErrorDEV(currentProps) + "\n + " + describeLinkForResourceErrorDEV(pendingProps), Error( 18135 "Expected <link> not to update to be updated to a stylesheet with precedence. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." + pendingProps 18136 ); 18137 return _resource; 18138 } 18139 if (currentProps && null !== currentResource) 18140 throw pendingProps = "\n\n - " + describeLinkForResourceErrorDEV(currentProps) + "\n + " + describeLinkForResourceErrorDEV(pendingProps), Error( 18141 "Expected stylesheet with precedence to not be updated to a different kind of <link>. Check the `rel`, `href`, and `precedence` props of this component. Alternatively, check whether two different <link> components render in the same slot or share the same key." + pendingProps 18142 ); 18143 return null; 18144 case "script": 18145 return currentProps = pendingProps.async, pendingProps = pendingProps.src, "string" === typeof pendingProps && currentProps && "function" !== typeof currentProps && "symbol" !== typeof currentProps ? (pendingProps = getScriptKey(pendingProps), currentProps = getResourcesFromRoot(resourceRoot).hoistableScripts, currentResource = currentProps.get(pendingProps), currentResource || (currentResource = { 18146 type: "script", 18147 instance: null, 18148 count: 0, 18149 state: null 18150 }, currentProps.set(pendingProps, currentResource)), currentResource) : { type: "void", instance: null, count: 0, state: null }; 18151 default: 18152 throw Error( 18153 'getResource encountered a type it did not expect: "' + type + '". this is a bug in React.' 18154 ); 18155 } 18156 } 18157 function describeLinkForResourceErrorDEV(props) { 18158 var describedProps = 0, description = "<link"; 18159 "string" === typeof props.rel ? (describedProps++, description += ' rel="' + props.rel + '"') : hasOwnProperty.call(props, "rel") && (describedProps++, description += ' rel="' + (null === props.rel ? "null" : "invalid type " + typeof props.rel) + '"'); 18160 "string" === typeof props.href ? (describedProps++, description += ' href="' + props.href + '"') : hasOwnProperty.call(props, "href") && (describedProps++, description += ' href="' + (null === props.href ? "null" : "invalid type " + typeof props.href) + '"'); 18161 "string" === typeof props.precedence ? (describedProps++, description += ' precedence="' + props.precedence + '"') : hasOwnProperty.call(props, "precedence") && (describedProps++, description += " precedence={" + (null === props.precedence ? "null" : "invalid type " + typeof props.precedence) + "}"); 18162 Object.getOwnPropertyNames(props).length > describedProps && (description += " ..."); 18163 return description + " />"; 18164 } 18165 function getStyleKey(href) { 18166 return 'href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"'; 18167 } 18168 function getStylesheetSelectorFromKey(key) { 18169 return 'link[rel="stylesheet"][' + key + "]"; 18170 } 18171 function stylesheetPropsFromRawProps(rawProps) { 18172 return assign({}, rawProps, { 18173 "data-precedence": rawProps.precedence, 18174 precedence: null 18175 }); 18176 } 18177 function preloadStylesheet(ownerDocument, key, preloadProps, state) { 18178 ownerDocument.querySelector( 18179 'link[rel="preload"][as="style"][' + key + "]" 18180 ) ? state.loading = Loaded : (key = ownerDocument.createElement("link"), state.preload = key, key.addEventListener("load", function() { 18181 return state.loading |= Loaded; 18182 }), key.addEventListener("error", function() { 18183 return state.loading |= Errored; 18184 }), setInitialProperties(key, "link", preloadProps), markNodeAsHoistable(key), ownerDocument.head.appendChild(key)); 18185 } 18186 function getScriptKey(src) { 18187 return '[src="' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '"]'; 18188 } 18189 function getScriptSelectorFromKey(key) { 18190 return "script[async]" + key; 18191 } 18192 function acquireResource(hoistableRoot, resource, props) { 18193 resource.count++; 18194 if (null === resource.instance) 18195 switch (resource.type) { 18196 case "style": 18197 var instance = hoistableRoot.querySelector( 18198 'style[data-href~="' + escapeSelectorAttributeValueInsideDoubleQuotes(props.href) + '"]' 18199 ); 18200 if (instance) 18201 return resource.instance = instance, markNodeAsHoistable(instance), instance; 18202 var styleProps = assign({}, props, { 18203 "data-href": props.href, 18204 "data-precedence": props.precedence, 18205 href: null, 18206 precedence: null 18207 }); 18208 instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement("style"); 18209 markNodeAsHoistable(instance); 18210 setInitialProperties(instance, "style", styleProps); 18211 insertStylesheet(instance, props.precedence, hoistableRoot); 18212 return resource.instance = instance; 18213 case "stylesheet": 18214 styleProps = getStyleKey(props.href); 18215 var _instance = hoistableRoot.querySelector( 18216 getStylesheetSelectorFromKey(styleProps) 18217 ); 18218 if (_instance) 18219 return resource.state.loading |= Inserted, resource.instance = _instance, markNodeAsHoistable(_instance), _instance; 18220 instance = stylesheetPropsFromRawProps(props); 18221 (styleProps = preloadPropsMap.get(styleProps)) && adoptPreloadPropsForStylesheet(instance, styleProps); 18222 _instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement("link"); 18223 markNodeAsHoistable(_instance); 18224 var linkInstance = _instance; 18225 linkInstance._p = new Promise(function(resolve, reject) { 18226 linkInstance.onload = resolve; 18227 linkInstance.onerror = reject; 18228 }); 18229 setInitialProperties(_instance, "link", instance); 18230 resource.state.loading |= Inserted; 18231 insertStylesheet(_instance, props.precedence, hoistableRoot); 18232 return resource.instance = _instance; 18233 case "script": 18234 _instance = getScriptKey(props.src); 18235 if (styleProps = hoistableRoot.querySelector( 18236 getScriptSelectorFromKey(_instance) 18237 )) 18238 return resource.instance = styleProps, markNodeAsHoistable(styleProps), styleProps; 18239 instance = props; 18240 if (styleProps = preloadPropsMap.get(_instance)) 18241 instance = assign({}, props), adoptPreloadPropsForScript(instance, styleProps); 18242 hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot; 18243 styleProps = hoistableRoot.createElement("script"); 18244 markNodeAsHoistable(styleProps); 18245 setInitialProperties(styleProps, "link", instance); 18246 hoistableRoot.head.appendChild(styleProps); 18247 return resource.instance = styleProps; 18248 case "void": 18249 return null; 18250 default: 18251 throw Error( 18252 'acquireResource encountered a resource type it did not expect: "' + resource.type + '". this is a bug in React.' 18253 ); 18254 } 18255 else 18256 "stylesheet" === resource.type && (resource.state.loading & Inserted) === NotLoaded && (instance = resource.instance, resource.state.loading |= Inserted, insertStylesheet(instance, props.precedence, hoistableRoot)); 18257 return resource.instance; 18258 } 18259 function insertStylesheet(instance, precedence, root3) { 18260 for (var nodes = root3.querySelectorAll( 18261 'link[rel="stylesheet"][data-precedence],style[data-precedence]' 18262 ), last = nodes.length ? nodes[nodes.length - 1] : null, prior = last, i3 = 0; i3 < nodes.length; i3++) { 18263 var node = nodes[i3]; 18264 if (node.dataset.precedence === precedence) prior = node; 18265 else if (prior !== last) break; 18266 } 18267 prior ? prior.parentNode.insertBefore(instance, prior.nextSibling) : (precedence = 9 === root3.nodeType ? root3.head : root3, precedence.insertBefore(instance, precedence.firstChild)); 18268 } 18269 function adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) { 18270 null == stylesheetProps.crossOrigin && (stylesheetProps.crossOrigin = preloadProps.crossOrigin); 18271 null == stylesheetProps.referrerPolicy && (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy); 18272 null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title); 18273 } 18274 function adoptPreloadPropsForScript(scriptProps, preloadProps) { 18275 null == scriptProps.crossOrigin && (scriptProps.crossOrigin = preloadProps.crossOrigin); 18276 null == scriptProps.referrerPolicy && (scriptProps.referrerPolicy = preloadProps.referrerPolicy); 18277 null == scriptProps.integrity && (scriptProps.integrity = preloadProps.integrity); 18278 } 18279 function getHydratableHoistableCache(type, keyAttribute, ownerDocument) { 18280 if (null === tagCaches) { 18281 var cache2 = /* @__PURE__ */ new Map(); 18282 var caches = tagCaches = /* @__PURE__ */ new Map(); 18283 caches.set(ownerDocument, cache2); 18284 } else 18285 caches = tagCaches, cache2 = caches.get(ownerDocument), cache2 || (cache2 = /* @__PURE__ */ new Map(), caches.set(ownerDocument, cache2)); 18286 if (cache2.has(type)) return cache2; 18287 cache2.set(type, null); 18288 ownerDocument = ownerDocument.getElementsByTagName(type); 18289 for (caches = 0; caches < ownerDocument.length; caches++) { 18290 var node = ownerDocument[caches]; 18291 if (!(node[internalHoistableMarker] || node[internalInstanceKey] || "link" === type && "stylesheet" === node.getAttribute("rel")) && node.namespaceURI !== SVG_NAMESPACE) { 18292 var nodeKey = node.getAttribute(keyAttribute) || ""; 18293 nodeKey = type + nodeKey; 18294 var existing = cache2.get(nodeKey); 18295 existing ? existing.push(node) : cache2.set(nodeKey, [node]); 18296 } 18297 } 18298 return cache2; 18299 } 18300 function mountHoistable(hoistableRoot, type, instance) { 18301 hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot; 18302 hoistableRoot.head.insertBefore( 18303 instance, 18304 "title" === type ? hoistableRoot.querySelector("head > title") : null 18305 ); 18306 } 18307 function isHostHoistableType(type, props, hostContext) { 18308 var outsideHostContainerContext = !hostContext.ancestorInfo.containerTagInScope; 18309 if (hostContext.context === HostContextNamespaceSvg || null != props.itemProp) 18310 return !outsideHostContainerContext || null == props.itemProp || "meta" !== type && "title" !== type && "style" !== type && "link" !== type && "script" !== type || console.error( 18311 "Cannot render a <%s> outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this <%s> remove the `itemProp` prop. Otherwise, try moving this tag into the <head> or <body> of the Document.", 18312 type, 18313 type 18314 ), false; 18315 switch (type) { 18316 case "meta": 18317 case "title": 18318 return true; 18319 case "style": 18320 if ("string" !== typeof props.precedence || "string" !== typeof props.href || "" === props.href) { 18321 outsideHostContainerContext && console.error( 18322 'Cannot render a <style> outside the main document without knowing its precedence and a unique href key. React can hoist and deduplicate <style> tags if you provide a `precedence` prop along with an `href` prop that does not conflict with the `href` values used in any other hoisted <style> or <link rel="stylesheet" ...> tags. Note that hoisting <style> tags is considered an advanced feature that most will not use directly. Consider moving the <style> tag to the <head> or consider adding a `precedence="default"` and `href="some unique resource identifier"`.' 18323 ); 18324 break; 18325 } 18326 return true; 18327 case "link": 18328 if ("string" !== typeof props.rel || "string" !== typeof props.href || "" === props.href || props.onLoad || props.onError) { 18329 if ("stylesheet" === props.rel && "string" === typeof props.precedence) { 18330 type = props.href; 18331 var onError = props.onError, disabled = props.disabled; 18332 hostContext = []; 18333 props.onLoad && hostContext.push("`onLoad`"); 18334 onError && hostContext.push("`onError`"); 18335 null != disabled && hostContext.push("`disabled`"); 18336 onError = propNamesListJoin(hostContext, "and"); 18337 onError += 1 === hostContext.length ? " prop" : " props"; 18338 disabled = 1 === hostContext.length ? "an " + onError : "the " + onError; 18339 hostContext.length && console.error( 18340 'React encountered a <link rel="stylesheet" href="%s" ... /> with a `precedence` prop that also included %s. The presence of loading and error handlers indicates an intent to manage the stylesheet loading state from your from your Component code and React will not hoist or deduplicate this stylesheet. If your intent was to have React hoist and deduplciate this stylesheet using the `precedence` prop remove the %s, otherwise remove the `precedence` prop.', 18341 type, 18342 disabled, 18343 onError 18344 ); 18345 } 18346 outsideHostContainerContext && ("string" !== typeof props.rel || "string" !== typeof props.href || "" === props.href ? console.error( 18347 "Cannot render a <link> outside the main document without a `rel` and `href` prop. Try adding a `rel` and/or `href` prop to this <link> or moving the link into the <head> tag" 18348 ) : (props.onError || props.onLoad) && console.error( 18349 "Cannot render a <link> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>." 18350 )); 18351 break; 18352 } 18353 switch (props.rel) { 18354 case "stylesheet": 18355 return type = props.precedence, props = props.disabled, "string" !== typeof type && outsideHostContainerContext && console.error( 18356 'Cannot render a <link rel="stylesheet" /> outside the main document without knowing its precedence. Consider adding precedence="default" or moving it into the root <head> tag.' 18357 ), "string" === typeof type && null == props; 18358 default: 18359 return true; 18360 } 18361 case "script": 18362 type = props.async && "function" !== typeof props.async && "symbol" !== typeof props.async; 18363 if (!type || props.onLoad || props.onError || !props.src || "string" !== typeof props.src) { 18364 outsideHostContainerContext && (type ? props.onLoad || props.onError ? console.error( 18365 "Cannot render a <script> with onLoad or onError listeners outside the main document. Try removing onLoad={...} and onError={...} or moving it into the root <head> tag or somewhere in the <body>." 18366 ) : console.error( 18367 "Cannot render a <script> outside the main document without `async={true}` and a non-empty `src` prop. Ensure there is a valid `src` and either make the script async or move it into the root <head> tag or somewhere in the <body>." 18368 ) : console.error( 18369 'Cannot render a sync or defer <script> outside the main document without knowing its order. Try adding async="" or moving it into the root <head> tag.' 18370 )); 18371 break; 18372 } 18373 return true; 18374 case "noscript": 18375 case "template": 18376 outsideHostContainerContext && console.error( 18377 "Cannot render <%s> outside the main document. Try moving it into the root <head> tag.", 18378 type 18379 ); 18380 } 18381 return false; 18382 } 18383 function preloadResource(resource) { 18384 return "stylesheet" === resource.type && (resource.state.loading & Settled) === NotLoaded ? false : true; 18385 } 18386 function suspendResource(state, hoistableRoot, resource, props) { 18387 if ("stylesheet" === resource.type && ("string" !== typeof props.media || false !== matchMedia(props.media).matches) && (resource.state.loading & Inserted) === NotLoaded) { 18388 if (null === resource.instance) { 18389 var key = getStyleKey(props.href), instance = hoistableRoot.querySelector( 18390 getStylesheetSelectorFromKey(key) 18391 ); 18392 if (instance) { 18393 hoistableRoot = instance._p; 18394 null !== hoistableRoot && "object" === typeof hoistableRoot && "function" === typeof hoistableRoot.then && (state.count++, state = onUnsuspend.bind(state), hoistableRoot.then(state, state)); 18395 resource.state.loading |= Inserted; 18396 resource.instance = instance; 18397 markNodeAsHoistable(instance); 18398 return; 18399 } 18400 instance = hoistableRoot.ownerDocument || hoistableRoot; 18401 props = stylesheetPropsFromRawProps(props); 18402 (key = preloadPropsMap.get(key)) && adoptPreloadPropsForStylesheet(props, key); 18403 instance = instance.createElement("link"); 18404 markNodeAsHoistable(instance); 18405 var linkInstance = instance; 18406 linkInstance._p = new Promise(function(resolve, reject) { 18407 linkInstance.onload = resolve; 18408 linkInstance.onerror = reject; 18409 }); 18410 setInitialProperties(instance, "link", props); 18411 resource.instance = instance; 18412 } 18413 null === state.stylesheets && (state.stylesheets = /* @__PURE__ */ new Map()); 18414 state.stylesheets.set(resource, hoistableRoot); 18415 (hoistableRoot = resource.state.preload) && (resource.state.loading & Settled) === NotLoaded && (state.count++, resource = onUnsuspend.bind(state), hoistableRoot.addEventListener("load", resource), hoistableRoot.addEventListener("error", resource)); 18416 } 18417 } 18418 function waitForCommitToBeReady(state, timeoutOffset) { 18419 state.stylesheets && 0 === state.count && insertSuspendedStylesheets(state, state.stylesheets); 18420 return 0 < state.count || 0 < state.imgCount ? function(commit) { 18421 var stylesheetTimer = setTimeout(function() { 18422 state.stylesheets && insertSuspendedStylesheets(state, state.stylesheets); 18423 if (state.unsuspend) { 18424 var unsuspend = state.unsuspend; 18425 state.unsuspend = null; 18426 unsuspend(); 18427 } 18428 }, SUSPENSEY_STYLESHEET_TIMEOUT + timeoutOffset); 18429 0 < state.imgBytes && 0 === estimatedBytesWithinLimit && (estimatedBytesWithinLimit = 125 * estimateBandwidth() * SUSPENSEY_IMAGE_TIME_ESTIMATE); 18430 var imgTimer = setTimeout( 18431 function() { 18432 state.waitingForImages = false; 18433 if (0 === state.count && (state.stylesheets && insertSuspendedStylesheets(state, state.stylesheets), state.unsuspend)) { 18434 var unsuspend = state.unsuspend; 18435 state.unsuspend = null; 18436 unsuspend(); 18437 } 18438 }, 18439 (state.imgBytes > estimatedBytesWithinLimit ? 50 : SUSPENSEY_IMAGE_TIMEOUT) + timeoutOffset 18440 ); 18441 state.unsuspend = commit; 18442 return function() { 18443 state.unsuspend = null; 18444 clearTimeout(stylesheetTimer); 18445 clearTimeout(imgTimer); 18446 }; 18447 } : null; 18448 } 18449 function onUnsuspend() { 18450 this.count--; 18451 if (0 === this.count && (0 === this.imgCount || !this.waitingForImages)) { 18452 if (this.stylesheets) 18453 insertSuspendedStylesheets(this, this.stylesheets); 18454 else if (this.unsuspend) { 18455 var unsuspend = this.unsuspend; 18456 this.unsuspend = null; 18457 unsuspend(); 18458 } 18459 } 18460 } 18461 function insertSuspendedStylesheets(state, resources) { 18462 state.stylesheets = null; 18463 null !== state.unsuspend && (state.count++, precedencesByRoot = /* @__PURE__ */ new Map(), resources.forEach(insertStylesheetIntoRoot, state), precedencesByRoot = null, onUnsuspend.call(state)); 18464 } 18465 function insertStylesheetIntoRoot(root3, resource) { 18466 if (!(resource.state.loading & Inserted)) { 18467 var precedences = precedencesByRoot.get(root3); 18468 if (precedences) var last = precedences.get(LAST_PRECEDENCE); 18469 else { 18470 precedences = /* @__PURE__ */ new Map(); 18471 precedencesByRoot.set(root3, precedences); 18472 for (var nodes = root3.querySelectorAll( 18473 "link[data-precedence],style[data-precedence]" 18474 ), i3 = 0; i3 < nodes.length; i3++) { 18475 var node = nodes[i3]; 18476 if ("LINK" === node.nodeName || "not all" !== node.getAttribute("media")) 18477 precedences.set(node.dataset.precedence, node), last = node; 18478 } 18479 last && precedences.set(LAST_PRECEDENCE, last); 18480 } 18481 nodes = resource.instance; 18482 node = nodes.getAttribute("data-precedence"); 18483 i3 = precedences.get(node) || last; 18484 i3 === last && precedences.set(LAST_PRECEDENCE, nodes); 18485 precedences.set(node, nodes); 18486 this.count++; 18487 last = onUnsuspend.bind(this); 18488 nodes.addEventListener("load", last); 18489 nodes.addEventListener("error", last); 18490 i3 ? i3.parentNode.insertBefore(nodes, i3.nextSibling) : (root3 = 9 === root3.nodeType ? root3.head : root3, root3.insertBefore(nodes, root3.firstChild)); 18491 resource.state.loading |= Inserted; 18492 } 18493 } 18494 function FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onUncaughtError, onCaughtError, onRecoverableError, onDefaultTransitionIndicator, formState) { 18495 this.tag = 1; 18496 this.containerInfo = containerInfo; 18497 this.pingCache = this.current = this.pendingChildren = null; 18498 this.timeoutHandle = noTimeout; 18499 this.callbackNode = this.next = this.pendingContext = this.context = this.cancelPendingCommit = null; 18500 this.callbackPriority = 0; 18501 this.expirationTimes = createLaneMap(-1); 18502 this.entangledLanes = this.shellSuspendCounter = this.errorRecoveryDisabledLanes = this.expiredLanes = this.warmLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0; 18503 this.entanglements = createLaneMap(0); 18504 this.hiddenUpdates = createLaneMap(null); 18505 this.identifierPrefix = identifierPrefix; 18506 this.onUncaughtError = onUncaughtError; 18507 this.onCaughtError = onCaughtError; 18508 this.onRecoverableError = onRecoverableError; 18509 this.pooledCache = null; 18510 this.pooledCacheLanes = 0; 18511 this.formState = formState; 18512 this.incompleteTransitions = /* @__PURE__ */ new Map(); 18513 this.passiveEffectDuration = this.effectDuration = -0; 18514 this.memoizedUpdaters = /* @__PURE__ */ new Set(); 18515 containerInfo = this.pendingUpdatersLaneMap = []; 18516 for (tag = 0; 31 > tag; tag++) containerInfo.push(/* @__PURE__ */ new Set()); 18517 this._debugRootType = hydrate ? "hydrateRoot()" : "createRoot()"; 18518 } 18519 function createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, identifierPrefix, formState, onUncaughtError, onCaughtError, onRecoverableError, onDefaultTransitionIndicator) { 18520 containerInfo = new FiberRootNode( 18521 containerInfo, 18522 tag, 18523 hydrate, 18524 identifierPrefix, 18525 onUncaughtError, 18526 onCaughtError, 18527 onRecoverableError, 18528 onDefaultTransitionIndicator, 18529 formState 18530 ); 18531 tag = ConcurrentMode; 18532 true === isStrictMode && (tag |= StrictLegacyMode | StrictEffectsMode); 18533 tag |= ProfileMode; 18534 isStrictMode = createFiber(3, null, null, tag); 18535 containerInfo.current = isStrictMode; 18536 isStrictMode.stateNode = containerInfo; 18537 tag = createCache(); 18538 retainCache(tag); 18539 containerInfo.pooledCache = tag; 18540 retainCache(tag); 18541 isStrictMode.memoizedState = { 18542 element: initialChildren, 18543 isDehydrated: hydrate, 18544 cache: tag 18545 }; 18546 initializeUpdateQueue(isStrictMode); 18547 return containerInfo; 18548 } 18549 function getContextForSubtree(parentComponent) { 18550 if (!parentComponent) return emptyContextObject; 18551 parentComponent = emptyContextObject; 18552 return parentComponent; 18553 } 18554 function updateContainerImpl(rootFiber, lane, element, container, parentComponent, callback) { 18555 if (injectedHook && "function" === typeof injectedHook.onScheduleFiberRoot) 18556 try { 18557 injectedHook.onScheduleFiberRoot(rendererID, container, element); 18558 } catch (err) { 18559 hasLoggedError || (hasLoggedError = true, console.error( 18560 "React instrumentation encountered an error: %o", 18561 err 18562 )); 18563 } 18564 parentComponent = getContextForSubtree(parentComponent); 18565 null === container.context ? container.context = parentComponent : container.pendingContext = parentComponent; 18566 isRendering && null !== current && !didWarnAboutNestedUpdates && (didWarnAboutNestedUpdates = true, console.error( 18567 "Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\n\nCheck the render method of %s.", 18568 getComponentNameFromFiber(current) || "Unknown" 18569 )); 18570 container = createUpdate(lane); 18571 container.payload = { element }; 18572 callback = void 0 === callback ? null : callback; 18573 null !== callback && ("function" !== typeof callback && console.error( 18574 "Expected the last optional `callback` argument to be a function. Instead received: %s.", 18575 callback 18576 ), container.callback = callback); 18577 element = enqueueUpdate(rootFiber, container, lane); 18578 null !== element && (startUpdateTimerByLane(lane, "root.render()", null), scheduleUpdateOnFiber(element, rootFiber, lane), entangleTransitions(element, rootFiber, lane)); 18579 } 18580 function markRetryLaneImpl(fiber, retryLane) { 18581 fiber = fiber.memoizedState; 18582 if (null !== fiber && null !== fiber.dehydrated) { 18583 var a3 = fiber.retryLane; 18584 fiber.retryLane = 0 !== a3 && a3 < retryLane ? a3 : retryLane; 18585 } 18586 } 18587 function markRetryLaneIfNotHydrated(fiber, retryLane) { 18588 markRetryLaneImpl(fiber, retryLane); 18589 (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane); 18590 } 18591 function attemptContinuousHydration(fiber) { 18592 if (13 === fiber.tag || 31 === fiber.tag) { 18593 var root3 = enqueueConcurrentRenderForLane(fiber, 67108864); 18594 null !== root3 && scheduleUpdateOnFiber(root3, fiber, 67108864); 18595 markRetryLaneIfNotHydrated(fiber, 67108864); 18596 } 18597 } 18598 function attemptHydrationAtCurrentPriority(fiber) { 18599 if (13 === fiber.tag || 31 === fiber.tag) { 18600 var lane = requestUpdateLane(fiber); 18601 lane = getBumpedLaneForHydrationByLane(lane); 18602 var root3 = enqueueConcurrentRenderForLane(fiber, lane); 18603 null !== root3 && scheduleUpdateOnFiber(root3, fiber, lane); 18604 markRetryLaneIfNotHydrated(fiber, lane); 18605 } 18606 } 18607 function getCurrentFiberForDevTools() { 18608 return current; 18609 } 18610 function dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) { 18611 var prevTransition = ReactSharedInternals.T; 18612 ReactSharedInternals.T = null; 18613 var previousPriority = ReactDOMSharedInternals.p; 18614 try { 18615 ReactDOMSharedInternals.p = DiscreteEventPriority, dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent); 18616 } finally { 18617 ReactDOMSharedInternals.p = previousPriority, ReactSharedInternals.T = prevTransition; 18618 } 18619 } 18620 function dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) { 18621 var prevTransition = ReactSharedInternals.T; 18622 ReactSharedInternals.T = null; 18623 var previousPriority = ReactDOMSharedInternals.p; 18624 try { 18625 ReactDOMSharedInternals.p = ContinuousEventPriority, dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent); 18626 } finally { 18627 ReactDOMSharedInternals.p = previousPriority, ReactSharedInternals.T = prevTransition; 18628 } 18629 } 18630 function dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) { 18631 if (_enabled) { 18632 var blockedOn = findInstanceBlockingEvent(nativeEvent); 18633 if (null === blockedOn) 18634 dispatchEventForPluginEventSystem( 18635 domEventName, 18636 eventSystemFlags, 18637 nativeEvent, 18638 return_targetInst, 18639 targetContainer 18640 ), clearIfContinuousEvent(domEventName, nativeEvent); 18641 else if (queueIfContinuousEvent( 18642 blockedOn, 18643 domEventName, 18644 eventSystemFlags, 18645 targetContainer, 18646 nativeEvent 18647 )) 18648 nativeEvent.stopPropagation(); 18649 else if (clearIfContinuousEvent(domEventName, nativeEvent), eventSystemFlags & 4 && -1 < discreteReplayableEvents.indexOf(domEventName)) { 18650 for (; null !== blockedOn; ) { 18651 var fiber = getInstanceFromNode(blockedOn); 18652 if (null !== fiber) 18653 switch (fiber.tag) { 18654 case 3: 18655 fiber = fiber.stateNode; 18656 if (fiber.current.memoizedState.isDehydrated) { 18657 var lanes = getHighestPriorityLanes(fiber.pendingLanes); 18658 if (0 !== lanes) { 18659 var root3 = fiber; 18660 root3.pendingLanes |= 2; 18661 for (root3.entangledLanes |= 2; lanes; ) { 18662 var lane = 1 << 31 - clz32(lanes); 18663 root3.entanglements[1] |= lane; 18664 lanes &= ~lane; 18665 } 18666 ensureRootIsScheduled(fiber); 18667 (executionContext & (RenderContext | CommitContext)) === NoContext && (workInProgressRootRenderTargetTime = now$1() + RENDER_TIMEOUT_MS, flushSyncWorkAcrossRoots_impl(0, false)); 18668 } 18669 } 18670 break; 18671 case 31: 18672 case 13: 18673 root3 = enqueueConcurrentRenderForLane(fiber, 2), null !== root3 && scheduleUpdateOnFiber(root3, fiber, 2), flushSyncWork$1(), markRetryLaneIfNotHydrated(fiber, 2); 18674 } 18675 fiber = findInstanceBlockingEvent(nativeEvent); 18676 null === fiber && dispatchEventForPluginEventSystem( 18677 domEventName, 18678 eventSystemFlags, 18679 nativeEvent, 18680 return_targetInst, 18681 targetContainer 18682 ); 18683 if (fiber === blockedOn) break; 18684 blockedOn = fiber; 18685 } 18686 null !== blockedOn && nativeEvent.stopPropagation(); 18687 } else 18688 dispatchEventForPluginEventSystem( 18689 domEventName, 18690 eventSystemFlags, 18691 nativeEvent, 18692 null, 18693 targetContainer 18694 ); 18695 } 18696 } 18697 function findInstanceBlockingEvent(nativeEvent) { 18698 nativeEvent = getEventTarget(nativeEvent); 18699 return findInstanceBlockingTarget(nativeEvent); 18700 } 18701 function findInstanceBlockingTarget(targetNode) { 18702 return_targetInst = null; 18703 targetNode = getClosestInstanceFromNode(targetNode); 18704 if (null !== targetNode) { 18705 var nearestMounted = getNearestMountedFiber(targetNode); 18706 if (null === nearestMounted) targetNode = null; 18707 else { 18708 var tag = nearestMounted.tag; 18709 if (13 === tag) { 18710 targetNode = getSuspenseInstanceFromFiber(nearestMounted); 18711 if (null !== targetNode) return targetNode; 18712 targetNode = null; 18713 } else if (31 === tag) { 18714 targetNode = getActivityInstanceFromFiber(nearestMounted); 18715 if (null !== targetNode) return targetNode; 18716 targetNode = null; 18717 } else if (3 === tag) { 18718 if (nearestMounted.stateNode.current.memoizedState.isDehydrated) 18719 return 3 === nearestMounted.tag ? nearestMounted.stateNode.containerInfo : null; 18720 targetNode = null; 18721 } else nearestMounted !== targetNode && (targetNode = null); 18722 } 18723 } 18724 return_targetInst = targetNode; 18725 return null; 18726 } 18727 function getEventPriority(domEventName) { 18728 switch (domEventName) { 18729 case "beforetoggle": 18730 case "cancel": 18731 case "click": 18732 case "close": 18733 case "contextmenu": 18734 case "copy": 18735 case "cut": 18736 case "auxclick": 18737 case "dblclick": 18738 case "dragend": 18739 case "dragstart": 18740 case "drop": 18741 case "focusin": 18742 case "focusout": 18743 case "input": 18744 case "invalid": 18745 case "keydown": 18746 case "keypress": 18747 case "keyup": 18748 case "mousedown": 18749 case "mouseup": 18750 case "paste": 18751 case "pause": 18752 case "play": 18753 case "pointercancel": 18754 case "pointerdown": 18755 case "pointerup": 18756 case "ratechange": 18757 case "reset": 18758 case "resize": 18759 case "seeked": 18760 case "submit": 18761 case "toggle": 18762 case "touchcancel": 18763 case "touchend": 18764 case "touchstart": 18765 case "volumechange": 18766 case "change": 18767 case "selectionchange": 18768 case "textInput": 18769 case "compositionstart": 18770 case "compositionend": 18771 case "compositionupdate": 18772 case "beforeblur": 18773 case "afterblur": 18774 case "beforeinput": 18775 case "blur": 18776 case "fullscreenchange": 18777 case "focus": 18778 case "hashchange": 18779 case "popstate": 18780 case "select": 18781 case "selectstart": 18782 return DiscreteEventPriority; 18783 case "drag": 18784 case "dragenter": 18785 case "dragexit": 18786 case "dragleave": 18787 case "dragover": 18788 case "mousemove": 18789 case "mouseout": 18790 case "mouseover": 18791 case "pointermove": 18792 case "pointerout": 18793 case "pointerover": 18794 case "scroll": 18795 case "touchmove": 18796 case "wheel": 18797 case "mouseenter": 18798 case "mouseleave": 18799 case "pointerenter": 18800 case "pointerleave": 18801 return ContinuousEventPriority; 18802 case "message": 18803 switch (getCurrentPriorityLevel()) { 18804 case ImmediatePriority: 18805 return DiscreteEventPriority; 18806 case UserBlockingPriority: 18807 return ContinuousEventPriority; 18808 case NormalPriority$1: 18809 case LowPriority: 18810 return DefaultEventPriority; 18811 case IdlePriority: 18812 return IdleEventPriority; 18813 default: 18814 return DefaultEventPriority; 18815 } 18816 default: 18817 return DefaultEventPriority; 18818 } 18819 } 18820 function clearIfContinuousEvent(domEventName, nativeEvent) { 18821 switch (domEventName) { 18822 case "focusin": 18823 case "focusout": 18824 queuedFocus = null; 18825 break; 18826 case "dragenter": 18827 case "dragleave": 18828 queuedDrag = null; 18829 break; 18830 case "mouseover": 18831 case "mouseout": 18832 queuedMouse = null; 18833 break; 18834 case "pointerover": 18835 case "pointerout": 18836 queuedPointers.delete(nativeEvent.pointerId); 18837 break; 18838 case "gotpointercapture": 18839 case "lostpointercapture": 18840 queuedPointerCaptures.delete(nativeEvent.pointerId); 18841 } 18842 } 18843 function accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 18844 if (null === existingQueuedEvent || existingQueuedEvent.nativeEvent !== nativeEvent) 18845 return existingQueuedEvent = { 18846 blockedOn, 18847 domEventName, 18848 eventSystemFlags, 18849 nativeEvent, 18850 targetContainers: [targetContainer] 18851 }, null !== blockedOn && (blockedOn = getInstanceFromNode(blockedOn), null !== blockedOn && attemptContinuousHydration(blockedOn)), existingQueuedEvent; 18852 existingQueuedEvent.eventSystemFlags |= eventSystemFlags; 18853 blockedOn = existingQueuedEvent.targetContainers; 18854 null !== targetContainer && -1 === blockedOn.indexOf(targetContainer) && blockedOn.push(targetContainer); 18855 return existingQueuedEvent; 18856 } 18857 function queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) { 18858 switch (domEventName) { 18859 case "focusin": 18860 return queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent( 18861 queuedFocus, 18862 blockedOn, 18863 domEventName, 18864 eventSystemFlags, 18865 targetContainer, 18866 nativeEvent 18867 ), true; 18868 case "dragenter": 18869 return queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent( 18870 queuedDrag, 18871 blockedOn, 18872 domEventName, 18873 eventSystemFlags, 18874 targetContainer, 18875 nativeEvent 18876 ), true; 18877 case "mouseover": 18878 return queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent( 18879 queuedMouse, 18880 blockedOn, 18881 domEventName, 18882 eventSystemFlags, 18883 targetContainer, 18884 nativeEvent 18885 ), true; 18886 case "pointerover": 18887 var pointerId = nativeEvent.pointerId; 18888 queuedPointers.set( 18889 pointerId, 18890 accumulateOrCreateContinuousQueuedReplayableEvent( 18891 queuedPointers.get(pointerId) || null, 18892 blockedOn, 18893 domEventName, 18894 eventSystemFlags, 18895 targetContainer, 18896 nativeEvent 18897 ) 18898 ); 18899 return true; 18900 case "gotpointercapture": 18901 return pointerId = nativeEvent.pointerId, queuedPointerCaptures.set( 18902 pointerId, 18903 accumulateOrCreateContinuousQueuedReplayableEvent( 18904 queuedPointerCaptures.get(pointerId) || null, 18905 blockedOn, 18906 domEventName, 18907 eventSystemFlags, 18908 targetContainer, 18909 nativeEvent 18910 ) 18911 ), true; 18912 } 18913 return false; 18914 } 18915 function attemptExplicitHydrationTarget(queuedTarget) { 18916 var targetInst = getClosestInstanceFromNode(queuedTarget.target); 18917 if (null !== targetInst) { 18918 var nearestMounted = getNearestMountedFiber(targetInst); 18919 if (null !== nearestMounted) { 18920 if (targetInst = nearestMounted.tag, 13 === targetInst) { 18921 if (targetInst = getSuspenseInstanceFromFiber(nearestMounted), null !== targetInst) { 18922 queuedTarget.blockedOn = targetInst; 18923 runWithPriority(queuedTarget.priority, function() { 18924 attemptHydrationAtCurrentPriority(nearestMounted); 18925 }); 18926 return; 18927 } 18928 } else if (31 === targetInst) { 18929 if (targetInst = getActivityInstanceFromFiber(nearestMounted), null !== targetInst) { 18930 queuedTarget.blockedOn = targetInst; 18931 runWithPriority(queuedTarget.priority, function() { 18932 attemptHydrationAtCurrentPriority(nearestMounted); 18933 }); 18934 return; 18935 } 18936 } else if (3 === targetInst && nearestMounted.stateNode.current.memoizedState.isDehydrated) { 18937 queuedTarget.blockedOn = 3 === nearestMounted.tag ? nearestMounted.stateNode.containerInfo : null; 18938 return; 18939 } 18940 } 18941 } 18942 queuedTarget.blockedOn = null; 18943 } 18944 function attemptReplayContinuousQueuedEvent(queuedEvent) { 18945 if (null !== queuedEvent.blockedOn) return false; 18946 for (var targetContainers = queuedEvent.targetContainers; 0 < targetContainers.length; ) { 18947 var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent); 18948 if (null === nextBlockedOn) { 18949 nextBlockedOn = queuedEvent.nativeEvent; 18950 var nativeEventClone = new nextBlockedOn.constructor( 18951 nextBlockedOn.type, 18952 nextBlockedOn 18953 ), event = nativeEventClone; 18954 null !== currentReplayingEvent && console.error( 18955 "Expected currently replaying event to be null. This error is likely caused by a bug in React. Please file an issue." 18956 ); 18957 currentReplayingEvent = event; 18958 nextBlockedOn.target.dispatchEvent(nativeEventClone); 18959 null === currentReplayingEvent && console.error( 18960 "Expected currently replaying event to not be null. This error is likely caused by a bug in React. Please file an issue." 18961 ); 18962 currentReplayingEvent = null; 18963 } else 18964 return targetContainers = getInstanceFromNode(nextBlockedOn), null !== targetContainers && attemptContinuousHydration(targetContainers), queuedEvent.blockedOn = nextBlockedOn, false; 18965 targetContainers.shift(); 18966 } 18967 return true; 18968 } 18969 function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) { 18970 attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key); 18971 } 18972 function replayUnblockedEvents() { 18973 hasScheduledReplayAttempt = false; 18974 null !== queuedFocus && attemptReplayContinuousQueuedEvent(queuedFocus) && (queuedFocus = null); 18975 null !== queuedDrag && attemptReplayContinuousQueuedEvent(queuedDrag) && (queuedDrag = null); 18976 null !== queuedMouse && attemptReplayContinuousQueuedEvent(queuedMouse) && (queuedMouse = null); 18977 queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap); 18978 queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap); 18979 } 18980 function scheduleCallbackIfUnblocked(queuedEvent, unblocked) { 18981 queuedEvent.blockedOn === unblocked && (queuedEvent.blockedOn = null, hasScheduledReplayAttempt || (hasScheduledReplayAttempt = true, Scheduler.unstable_scheduleCallback( 18982 Scheduler.unstable_NormalPriority, 18983 replayUnblockedEvents 18984 ))); 18985 } 18986 function scheduleReplayQueueIfNeeded(formReplayingQueue) { 18987 lastScheduledReplayQueue !== formReplayingQueue && (lastScheduledReplayQueue = formReplayingQueue, Scheduler.unstable_scheduleCallback( 18988 Scheduler.unstable_NormalPriority, 18989 function() { 18990 lastScheduledReplayQueue === formReplayingQueue && (lastScheduledReplayQueue = null); 18991 for (var i3 = 0; i3 < formReplayingQueue.length; i3 += 3) { 18992 var form = formReplayingQueue[i3], submitterOrAction = formReplayingQueue[i3 + 1], formData = formReplayingQueue[i3 + 2]; 18993 if ("function" !== typeof submitterOrAction) 18994 if (null === findInstanceBlockingTarget(submitterOrAction || form)) 18995 continue; 18996 else break; 18997 var formInst = getInstanceFromNode(form); 18998 null !== formInst && (formReplayingQueue.splice(i3, 3), i3 -= 3, form = { 18999 pending: true, 19000 data: formData, 19001 method: form.method, 19002 action: submitterOrAction 19003 }, Object.freeze(form), startHostTransition( 19004 formInst, 19005 form, 19006 submitterOrAction, 19007 formData 19008 )); 19009 } 19010 } 19011 )); 19012 } 19013 function retryIfBlockedOn(unblocked) { 19014 function unblock(queuedEvent) { 19015 return scheduleCallbackIfUnblocked(queuedEvent, unblocked); 19016 } 19017 null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked); 19018 null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked); 19019 null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked); 19020 queuedPointers.forEach(unblock); 19021 queuedPointerCaptures.forEach(unblock); 19022 for (var i3 = 0; i3 < queuedExplicitHydrationTargets.length; i3++) { 19023 var queuedTarget = queuedExplicitHydrationTargets[i3]; 19024 queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null); 19025 } 19026 for (; 0 < queuedExplicitHydrationTargets.length && (i3 = queuedExplicitHydrationTargets[0], null === i3.blockedOn); ) 19027 attemptExplicitHydrationTarget(i3), null === i3.blockedOn && queuedExplicitHydrationTargets.shift(); 19028 i3 = (unblocked.ownerDocument || unblocked).$$reactFormReplay; 19029 if (null != i3) 19030 for (queuedTarget = 0; queuedTarget < i3.length; queuedTarget += 3) { 19031 var form = i3[queuedTarget], submitterOrAction = i3[queuedTarget + 1], formProps = form[internalPropsKey] || null; 19032 if ("function" === typeof submitterOrAction) 19033 formProps || scheduleReplayQueueIfNeeded(i3); 19034 else if (formProps) { 19035 var action = null; 19036 if (submitterOrAction && submitterOrAction.hasAttribute("formAction")) 19037 if (form = submitterOrAction, formProps = submitterOrAction[internalPropsKey] || null) 19038 action = formProps.formAction; 19039 else { 19040 if (null !== findInstanceBlockingTarget(form)) continue; 19041 } 19042 else action = formProps.action; 19043 "function" === typeof action ? i3[queuedTarget + 1] = action : (i3.splice(queuedTarget, 3), queuedTarget -= 3); 19044 scheduleReplayQueueIfNeeded(i3); 19045 } 19046 } 19047 } 19048 function defaultOnDefaultTransitionIndicator() { 19049 function handleNavigate(event) { 19050 event.canIntercept && "react-transition" === event.info && event.intercept({ 19051 handler: function() { 19052 return new Promise(function(resolve) { 19053 return pendingResolve = resolve; 19054 }); 19055 }, 19056 focusReset: "manual", 19057 scroll: "manual" 19058 }); 19059 } 19060 function handleNavigateComplete() { 19061 null !== pendingResolve && (pendingResolve(), pendingResolve = null); 19062 isCancelled || setTimeout(startFakeNavigation, 20); 19063 } 19064 function startFakeNavigation() { 19065 if (!isCancelled && !navigation.transition) { 19066 var currentEntry = navigation.currentEntry; 19067 currentEntry && null != currentEntry.url && navigation.navigate(currentEntry.url, { 19068 state: currentEntry.getState(), 19069 info: "react-transition", 19070 history: "replace" 19071 }); 19072 } 19073 } 19074 if ("object" === typeof navigation) { 19075 var isCancelled = false, pendingResolve = null; 19076 navigation.addEventListener("navigate", handleNavigate); 19077 navigation.addEventListener("navigatesuccess", handleNavigateComplete); 19078 navigation.addEventListener("navigateerror", handleNavigateComplete); 19079 setTimeout(startFakeNavigation, 100); 19080 return function() { 19081 isCancelled = true; 19082 navigation.removeEventListener("navigate", handleNavigate); 19083 navigation.removeEventListener( 19084 "navigatesuccess", 19085 handleNavigateComplete 19086 ); 19087 navigation.removeEventListener( 19088 "navigateerror", 19089 handleNavigateComplete 19090 ); 19091 null !== pendingResolve && (pendingResolve(), pendingResolve = null); 19092 }; 19093 } 19094 } 19095 function ReactDOMRoot(internalRoot) { 19096 this._internalRoot = internalRoot; 19097 } 19098 function ReactDOMHydrationRoot(internalRoot) { 19099 this._internalRoot = internalRoot; 19100 } 19101 function warnIfReactDOMContainerInDEV(container) { 19102 container[internalContainerInstanceKey] && (container._reactRootContainer ? console.error( 19103 "You are calling ReactDOMClient.createRoot() on a container that was previously passed to ReactDOM.render(). This is not supported." 19104 ) : console.error( 19105 "You are calling ReactDOMClient.createRoot() on a container that has already been passed to createRoot() before. Instead, call root.render() on the existing root instead if you want to update it." 19106 )); 19107 } 19108 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); 19109 var Scheduler = require_scheduler(), React19 = require_react(), ReactDOM = require_react_dom(), assign = Object.assign, REACT_LEGACY_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.element"), REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo"), REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"); 19110 /* @__PURE__ */ Symbol.for("react.scope"); 19111 var REACT_ACTIVITY_TYPE = /* @__PURE__ */ Symbol.for("react.activity"); 19112 /* @__PURE__ */ Symbol.for("react.legacy_hidden"); 19113 /* @__PURE__ */ Symbol.for("react.tracing_marker"); 19114 var REACT_MEMO_CACHE_SENTINEL = /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel"); 19115 /* @__PURE__ */ Symbol.for("react.view_transition"); 19116 var MAYBE_ITERATOR_SYMBOL = Symbol.iterator, REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for("react.client.reference"), isArrayImpl = Array.isArray, ReactSharedInternals = React19.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, ReactDOMSharedInternals = ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, NotPending = Object.freeze({ 19117 pending: false, 19118 data: null, 19119 method: null, 19120 action: null 19121 }), valueStack = []; 19122 var fiberStack = []; 19123 var index$jscomp$0 = -1, contextStackCursor = createCursor(null), contextFiberStackCursor = createCursor(null), rootInstanceStackCursor = createCursor(null), hostTransitionProviderCursor = createCursor(null), disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd; 19124 disabledLog.__reactDisabledLog = true; 19125 var prefix, suffix, reentry = false; 19126 var componentFrameCache = new ("function" === typeof WeakMap ? WeakMap : Map)(); 19127 var current = null, isRendering = false, hasOwnProperty = Object.prototype.hasOwnProperty, scheduleCallback$3 = Scheduler.unstable_scheduleCallback, cancelCallback$1 = Scheduler.unstable_cancelCallback, shouldYield = Scheduler.unstable_shouldYield, requestPaint = Scheduler.unstable_requestPaint, now$1 = Scheduler.unstable_now, getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel, ImmediatePriority = Scheduler.unstable_ImmediatePriority, UserBlockingPriority = Scheduler.unstable_UserBlockingPriority, NormalPriority$1 = Scheduler.unstable_NormalPriority, LowPriority = Scheduler.unstable_LowPriority, IdlePriority = Scheduler.unstable_IdlePriority, log$1 = Scheduler.log, unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue, rendererID = null, injectedHook = null, hasLoggedError = false, isDevToolsPresent = "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__, clz32 = Math.clz32 ? Math.clz32 : clz32Fallback, log = Math.log, LN2 = Math.LN2, nextTransitionUpdateLane = 256, nextTransitionDeferredLane = 262144, nextRetryLane = 4194304, DiscreteEventPriority = 2, ContinuousEventPriority = 8, DefaultEventPriority = 32, IdleEventPriority = 268435456, randomKey = Math.random().toString(36).slice(2), internalInstanceKey = "__reactFiber$" + randomKey, internalPropsKey = "__reactProps$" + randomKey, internalContainerInstanceKey = "__reactContainer$" + randomKey, internalEventHandlersKey = "__reactEvents$" + randomKey, internalEventHandlerListenersKey = "__reactListeners$" + randomKey, internalEventHandlesSetKey = "__reactHandles$" + randomKey, internalRootNodeResourcesKey = "__reactResources$" + randomKey, internalHoistableMarker = "__reactMarker$" + randomKey, allNativeEvents = /* @__PURE__ */ new Set(), registrationNameDependencies = {}, possibleRegistrationNames = {}, hasReadOnlyValue = { 19128 button: true, 19129 checkbox: true, 19130 image: true, 19131 hidden: true, 19132 radio: true, 19133 reset: true, 19134 submit: true 19135 }, VALID_ATTRIBUTE_NAME_REGEX = RegExp( 19136 "^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" 19137 ), illegalAttributeNameCache = {}, validatedAttributeNameCache = {}, escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\n"\\]/g, didWarnValueDefaultValue$1 = false, didWarnCheckedDefaultChecked = false, didWarnSelectedSetOnOption = false, didWarnInvalidChild = false, didWarnInvalidInnerHTML = false; 19138 var didWarnValueDefaultValue = false; 19139 var valuePropNames = ["value", "defaultValue"], didWarnValDefaultVal = false, needsEscaping = /["'&<>\n\t]|^\s|\s$/, specialTags = "address applet area article aside base basefont bgsound blockquote body br button caption center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p param plaintext pre script section select source style summary table tbody td template textarea tfoot th thead title tr track ul wbr xmp".split( 19140 " " 19141 ), inScopeTags = "applet caption html table td th marquee object template foreignObject desc title".split( 19142 " " 19143 ), buttonScopeTags = inScopeTags.concat(["button"]), impliedEndTags = "dd dt li option optgroup p rp rt".split(" "), emptyAncestorInfoDev = { 19144 current: null, 19145 formTag: null, 19146 aTagInScope: null, 19147 buttonTagInScope: null, 19148 nobrTagInScope: null, 19149 pTagInButtonScope: null, 19150 listItemTagAutoclosing: null, 19151 dlItemTagAutoclosing: null, 19152 containerTagInScope: null, 19153 implicitRootScope: false 19154 }, didWarn = {}, shorthandToLonghand = { 19155 animation: "animationDelay animationDirection animationDuration animationFillMode animationIterationCount animationName animationPlayState animationTimingFunction".split( 19156 " " 19157 ), 19158 background: "backgroundAttachment backgroundClip backgroundColor backgroundImage backgroundOrigin backgroundPositionX backgroundPositionY backgroundRepeat backgroundSize".split( 19159 " " 19160 ), 19161 backgroundPosition: ["backgroundPositionX", "backgroundPositionY"], 19162 border: "borderBottomColor borderBottomStyle borderBottomWidth borderImageOutset borderImageRepeat borderImageSlice borderImageSource borderImageWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderTopColor borderTopStyle borderTopWidth".split( 19163 " " 19164 ), 19165 borderBlockEnd: [ 19166 "borderBlockEndColor", 19167 "borderBlockEndStyle", 19168 "borderBlockEndWidth" 19169 ], 19170 borderBlockStart: [ 19171 "borderBlockStartColor", 19172 "borderBlockStartStyle", 19173 "borderBlockStartWidth" 19174 ], 19175 borderBottom: [ 19176 "borderBottomColor", 19177 "borderBottomStyle", 19178 "borderBottomWidth" 19179 ], 19180 borderColor: [ 19181 "borderBottomColor", 19182 "borderLeftColor", 19183 "borderRightColor", 19184 "borderTopColor" 19185 ], 19186 borderImage: [ 19187 "borderImageOutset", 19188 "borderImageRepeat", 19189 "borderImageSlice", 19190 "borderImageSource", 19191 "borderImageWidth" 19192 ], 19193 borderInlineEnd: [ 19194 "borderInlineEndColor", 19195 "borderInlineEndStyle", 19196 "borderInlineEndWidth" 19197 ], 19198 borderInlineStart: [ 19199 "borderInlineStartColor", 19200 "borderInlineStartStyle", 19201 "borderInlineStartWidth" 19202 ], 19203 borderLeft: ["borderLeftColor", "borderLeftStyle", "borderLeftWidth"], 19204 borderRadius: [ 19205 "borderBottomLeftRadius", 19206 "borderBottomRightRadius", 19207 "borderTopLeftRadius", 19208 "borderTopRightRadius" 19209 ], 19210 borderRight: [ 19211 "borderRightColor", 19212 "borderRightStyle", 19213 "borderRightWidth" 19214 ], 19215 borderStyle: [ 19216 "borderBottomStyle", 19217 "borderLeftStyle", 19218 "borderRightStyle", 19219 "borderTopStyle" 19220 ], 19221 borderTop: ["borderTopColor", "borderTopStyle", "borderTopWidth"], 19222 borderWidth: [ 19223 "borderBottomWidth", 19224 "borderLeftWidth", 19225 "borderRightWidth", 19226 "borderTopWidth" 19227 ], 19228 columnRule: ["columnRuleColor", "columnRuleStyle", "columnRuleWidth"], 19229 columns: ["columnCount", "columnWidth"], 19230 flex: ["flexBasis", "flexGrow", "flexShrink"], 19231 flexFlow: ["flexDirection", "flexWrap"], 19232 font: "fontFamily fontFeatureSettings fontKerning fontLanguageOverride fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition fontWeight lineHeight".split( 19233 " " 19234 ), 19235 fontVariant: "fontVariantAlternates fontVariantCaps fontVariantEastAsian fontVariantLigatures fontVariantNumeric fontVariantPosition".split( 19236 " " 19237 ), 19238 gap: ["columnGap", "rowGap"], 19239 grid: "gridAutoColumns gridAutoFlow gridAutoRows gridTemplateAreas gridTemplateColumns gridTemplateRows".split( 19240 " " 19241 ), 19242 gridArea: [ 19243 "gridColumnEnd", 19244 "gridColumnStart", 19245 "gridRowEnd", 19246 "gridRowStart" 19247 ], 19248 gridColumn: ["gridColumnEnd", "gridColumnStart"], 19249 gridColumnGap: ["columnGap"], 19250 gridGap: ["columnGap", "rowGap"], 19251 gridRow: ["gridRowEnd", "gridRowStart"], 19252 gridRowGap: ["rowGap"], 19253 gridTemplate: [ 19254 "gridTemplateAreas", 19255 "gridTemplateColumns", 19256 "gridTemplateRows" 19257 ], 19258 listStyle: ["listStyleImage", "listStylePosition", "listStyleType"], 19259 margin: ["marginBottom", "marginLeft", "marginRight", "marginTop"], 19260 marker: ["markerEnd", "markerMid", "markerStart"], 19261 mask: "maskClip maskComposite maskImage maskMode maskOrigin maskPositionX maskPositionY maskRepeat maskSize".split( 19262 " " 19263 ), 19264 maskPosition: ["maskPositionX", "maskPositionY"], 19265 outline: ["outlineColor", "outlineStyle", "outlineWidth"], 19266 overflow: ["overflowX", "overflowY"], 19267 padding: ["paddingBottom", "paddingLeft", "paddingRight", "paddingTop"], 19268 placeContent: ["alignContent", "justifyContent"], 19269 placeItems: ["alignItems", "justifyItems"], 19270 placeSelf: ["alignSelf", "justifySelf"], 19271 textDecoration: [ 19272 "textDecorationColor", 19273 "textDecorationLine", 19274 "textDecorationStyle" 19275 ], 19276 textEmphasis: ["textEmphasisColor", "textEmphasisStyle"], 19277 transition: [ 19278 "transitionDelay", 19279 "transitionDuration", 19280 "transitionProperty", 19281 "transitionTimingFunction" 19282 ], 19283 wordWrap: ["overflowWrap"] 19284 }, uppercasePattern = /([A-Z])/g, msPattern$1 = /^ms-/, badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/, msPattern = /^-ms-/, hyphenPattern = /-(.)/g, badStyleValueWithSemicolonPattern = /;\s*$/, warnedStyleNames = {}, warnedStyleValues = {}, warnedForNaNValue = false, warnedForInfinityValue = false, unitlessNumbers = new Set( 19285 "animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split( 19286 " " 19287 ) 19288 ), MATH_NAMESPACE = "http://www.w3.org/1998/Math/MathML", SVG_NAMESPACE = "http://www.w3.org/2000/svg", aliases = /* @__PURE__ */ new Map([ 19289 ["acceptCharset", "accept-charset"], 19290 ["htmlFor", "for"], 19291 ["httpEquiv", "http-equiv"], 19292 ["crossOrigin", "crossorigin"], 19293 ["accentHeight", "accent-height"], 19294 ["alignmentBaseline", "alignment-baseline"], 19295 ["arabicForm", "arabic-form"], 19296 ["baselineShift", "baseline-shift"], 19297 ["capHeight", "cap-height"], 19298 ["clipPath", "clip-path"], 19299 ["clipRule", "clip-rule"], 19300 ["colorInterpolation", "color-interpolation"], 19301 ["colorInterpolationFilters", "color-interpolation-filters"], 19302 ["colorProfile", "color-profile"], 19303 ["colorRendering", "color-rendering"], 19304 ["dominantBaseline", "dominant-baseline"], 19305 ["enableBackground", "enable-background"], 19306 ["fillOpacity", "fill-opacity"], 19307 ["fillRule", "fill-rule"], 19308 ["floodColor", "flood-color"], 19309 ["floodOpacity", "flood-opacity"], 19310 ["fontFamily", "font-family"], 19311 ["fontSize", "font-size"], 19312 ["fontSizeAdjust", "font-size-adjust"], 19313 ["fontStretch", "font-stretch"], 19314 ["fontStyle", "font-style"], 19315 ["fontVariant", "font-variant"], 19316 ["fontWeight", "font-weight"], 19317 ["glyphName", "glyph-name"], 19318 ["glyphOrientationHorizontal", "glyph-orientation-horizontal"], 19319 ["glyphOrientationVertical", "glyph-orientation-vertical"], 19320 ["horizAdvX", "horiz-adv-x"], 19321 ["horizOriginX", "horiz-origin-x"], 19322 ["imageRendering", "image-rendering"], 19323 ["letterSpacing", "letter-spacing"], 19324 ["lightingColor", "lighting-color"], 19325 ["markerEnd", "marker-end"], 19326 ["markerMid", "marker-mid"], 19327 ["markerStart", "marker-start"], 19328 ["overlinePosition", "overline-position"], 19329 ["overlineThickness", "overline-thickness"], 19330 ["paintOrder", "paint-order"], 19331 ["panose-1", "panose-1"], 19332 ["pointerEvents", "pointer-events"], 19333 ["renderingIntent", "rendering-intent"], 19334 ["shapeRendering", "shape-rendering"], 19335 ["stopColor", "stop-color"], 19336 ["stopOpacity", "stop-opacity"], 19337 ["strikethroughPosition", "strikethrough-position"], 19338 ["strikethroughThickness", "strikethrough-thickness"], 19339 ["strokeDasharray", "stroke-dasharray"], 19340 ["strokeDashoffset", "stroke-dashoffset"], 19341 ["strokeLinecap", "stroke-linecap"], 19342 ["strokeLinejoin", "stroke-linejoin"], 19343 ["strokeMiterlimit", "stroke-miterlimit"], 19344 ["strokeOpacity", "stroke-opacity"], 19345 ["strokeWidth", "stroke-width"], 19346 ["textAnchor", "text-anchor"], 19347 ["textDecoration", "text-decoration"], 19348 ["textRendering", "text-rendering"], 19349 ["transformOrigin", "transform-origin"], 19350 ["underlinePosition", "underline-position"], 19351 ["underlineThickness", "underline-thickness"], 19352 ["unicodeBidi", "unicode-bidi"], 19353 ["unicodeRange", "unicode-range"], 19354 ["unitsPerEm", "units-per-em"], 19355 ["vAlphabetic", "v-alphabetic"], 19356 ["vHanging", "v-hanging"], 19357 ["vIdeographic", "v-ideographic"], 19358 ["vMathematical", "v-mathematical"], 19359 ["vectorEffect", "vector-effect"], 19360 ["vertAdvY", "vert-adv-y"], 19361 ["vertOriginX", "vert-origin-x"], 19362 ["vertOriginY", "vert-origin-y"], 19363 ["wordSpacing", "word-spacing"], 19364 ["writingMode", "writing-mode"], 19365 ["xmlnsXlink", "xmlns:xlink"], 19366 ["xHeight", "x-height"] 19367 ]), possibleStandardNames = { 19368 accept: "accept", 19369 acceptcharset: "acceptCharset", 19370 "accept-charset": "acceptCharset", 19371 accesskey: "accessKey", 19372 action: "action", 19373 allowfullscreen: "allowFullScreen", 19374 alt: "alt", 19375 as: "as", 19376 async: "async", 19377 autocapitalize: "autoCapitalize", 19378 autocomplete: "autoComplete", 19379 autocorrect: "autoCorrect", 19380 autofocus: "autoFocus", 19381 autoplay: "autoPlay", 19382 autosave: "autoSave", 19383 capture: "capture", 19384 cellpadding: "cellPadding", 19385 cellspacing: "cellSpacing", 19386 challenge: "challenge", 19387 charset: "charSet", 19388 checked: "checked", 19389 children: "children", 19390 cite: "cite", 19391 class: "className", 19392 classid: "classID", 19393 classname: "className", 19394 cols: "cols", 19395 colspan: "colSpan", 19396 content: "content", 19397 contenteditable: "contentEditable", 19398 contextmenu: "contextMenu", 19399 controls: "controls", 19400 controlslist: "controlsList", 19401 coords: "coords", 19402 crossorigin: "crossOrigin", 19403 dangerouslysetinnerhtml: "dangerouslySetInnerHTML", 19404 data: "data", 19405 datetime: "dateTime", 19406 default: "default", 19407 defaultchecked: "defaultChecked", 19408 defaultvalue: "defaultValue", 19409 defer: "defer", 19410 dir: "dir", 19411 disabled: "disabled", 19412 disablepictureinpicture: "disablePictureInPicture", 19413 disableremoteplayback: "disableRemotePlayback", 19414 download: "download", 19415 draggable: "draggable", 19416 enctype: "encType", 19417 enterkeyhint: "enterKeyHint", 19418 fetchpriority: "fetchPriority", 19419 for: "htmlFor", 19420 form: "form", 19421 formmethod: "formMethod", 19422 formaction: "formAction", 19423 formenctype: "formEncType", 19424 formnovalidate: "formNoValidate", 19425 formtarget: "formTarget", 19426 frameborder: "frameBorder", 19427 headers: "headers", 19428 height: "height", 19429 hidden: "hidden", 19430 high: "high", 19431 href: "href", 19432 hreflang: "hrefLang", 19433 htmlfor: "htmlFor", 19434 httpequiv: "httpEquiv", 19435 "http-equiv": "httpEquiv", 19436 icon: "icon", 19437 id: "id", 19438 imagesizes: "imageSizes", 19439 imagesrcset: "imageSrcSet", 19440 inert: "inert", 19441 innerhtml: "innerHTML", 19442 inputmode: "inputMode", 19443 integrity: "integrity", 19444 is: "is", 19445 itemid: "itemID", 19446 itemprop: "itemProp", 19447 itemref: "itemRef", 19448 itemscope: "itemScope", 19449 itemtype: "itemType", 19450 keyparams: "keyParams", 19451 keytype: "keyType", 19452 kind: "kind", 19453 label: "label", 19454 lang: "lang", 19455 list: "list", 19456 loop: "loop", 19457 low: "low", 19458 manifest: "manifest", 19459 marginwidth: "marginWidth", 19460 marginheight: "marginHeight", 19461 max: "max", 19462 maxlength: "maxLength", 19463 media: "media", 19464 mediagroup: "mediaGroup", 19465 method: "method", 19466 min: "min", 19467 minlength: "minLength", 19468 multiple: "multiple", 19469 muted: "muted", 19470 name: "name", 19471 nomodule: "noModule", 19472 nonce: "nonce", 19473 novalidate: "noValidate", 19474 open: "open", 19475 optimum: "optimum", 19476 pattern: "pattern", 19477 placeholder: "placeholder", 19478 playsinline: "playsInline", 19479 poster: "poster", 19480 preload: "preload", 19481 profile: "profile", 19482 radiogroup: "radioGroup", 19483 readonly: "readOnly", 19484 referrerpolicy: "referrerPolicy", 19485 rel: "rel", 19486 required: "required", 19487 reversed: "reversed", 19488 role: "role", 19489 rows: "rows", 19490 rowspan: "rowSpan", 19491 sandbox: "sandbox", 19492 scope: "scope", 19493 scoped: "scoped", 19494 scrolling: "scrolling", 19495 seamless: "seamless", 19496 selected: "selected", 19497 shape: "shape", 19498 size: "size", 19499 sizes: "sizes", 19500 span: "span", 19501 spellcheck: "spellCheck", 19502 src: "src", 19503 srcdoc: "srcDoc", 19504 srclang: "srcLang", 19505 srcset: "srcSet", 19506 start: "start", 19507 step: "step", 19508 style: "style", 19509 summary: "summary", 19510 tabindex: "tabIndex", 19511 target: "target", 19512 title: "title", 19513 type: "type", 19514 usemap: "useMap", 19515 value: "value", 19516 width: "width", 19517 wmode: "wmode", 19518 wrap: "wrap", 19519 about: "about", 19520 accentheight: "accentHeight", 19521 "accent-height": "accentHeight", 19522 accumulate: "accumulate", 19523 additive: "additive", 19524 alignmentbaseline: "alignmentBaseline", 19525 "alignment-baseline": "alignmentBaseline", 19526 allowreorder: "allowReorder", 19527 alphabetic: "alphabetic", 19528 amplitude: "amplitude", 19529 arabicform: "arabicForm", 19530 "arabic-form": "arabicForm", 19531 ascent: "ascent", 19532 attributename: "attributeName", 19533 attributetype: "attributeType", 19534 autoreverse: "autoReverse", 19535 azimuth: "azimuth", 19536 basefrequency: "baseFrequency", 19537 baselineshift: "baselineShift", 19538 "baseline-shift": "baselineShift", 19539 baseprofile: "baseProfile", 19540 bbox: "bbox", 19541 begin: "begin", 19542 bias: "bias", 19543 by: "by", 19544 calcmode: "calcMode", 19545 capheight: "capHeight", 19546 "cap-height": "capHeight", 19547 clip: "clip", 19548 clippath: "clipPath", 19549 "clip-path": "clipPath", 19550 clippathunits: "clipPathUnits", 19551 cliprule: "clipRule", 19552 "clip-rule": "clipRule", 19553 color: "color", 19554 colorinterpolation: "colorInterpolation", 19555 "color-interpolation": "colorInterpolation", 19556 colorinterpolationfilters: "colorInterpolationFilters", 19557 "color-interpolation-filters": "colorInterpolationFilters", 19558 colorprofile: "colorProfile", 19559 "color-profile": "colorProfile", 19560 colorrendering: "colorRendering", 19561 "color-rendering": "colorRendering", 19562 contentscripttype: "contentScriptType", 19563 contentstyletype: "contentStyleType", 19564 cursor: "cursor", 19565 cx: "cx", 19566 cy: "cy", 19567 d: "d", 19568 datatype: "datatype", 19569 decelerate: "decelerate", 19570 descent: "descent", 19571 diffuseconstant: "diffuseConstant", 19572 direction: "direction", 19573 display: "display", 19574 divisor: "divisor", 19575 dominantbaseline: "dominantBaseline", 19576 "dominant-baseline": "dominantBaseline", 19577 dur: "dur", 19578 dx: "dx", 19579 dy: "dy", 19580 edgemode: "edgeMode", 19581 elevation: "elevation", 19582 enablebackground: "enableBackground", 19583 "enable-background": "enableBackground", 19584 end: "end", 19585 exponent: "exponent", 19586 externalresourcesrequired: "externalResourcesRequired", 19587 fill: "fill", 19588 fillopacity: "fillOpacity", 19589 "fill-opacity": "fillOpacity", 19590 fillrule: "fillRule", 19591 "fill-rule": "fillRule", 19592 filter: "filter", 19593 filterres: "filterRes", 19594 filterunits: "filterUnits", 19595 floodopacity: "floodOpacity", 19596 "flood-opacity": "floodOpacity", 19597 floodcolor: "floodColor", 19598 "flood-color": "floodColor", 19599 focusable: "focusable", 19600 fontfamily: "fontFamily", 19601 "font-family": "fontFamily", 19602 fontsize: "fontSize", 19603 "font-size": "fontSize", 19604 fontsizeadjust: "fontSizeAdjust", 19605 "font-size-adjust": "fontSizeAdjust", 19606 fontstretch: "fontStretch", 19607 "font-stretch": "fontStretch", 19608 fontstyle: "fontStyle", 19609 "font-style": "fontStyle", 19610 fontvariant: "fontVariant", 19611 "font-variant": "fontVariant", 19612 fontweight: "fontWeight", 19613 "font-weight": "fontWeight", 19614 format: "format", 19615 from: "from", 19616 fx: "fx", 19617 fy: "fy", 19618 g1: "g1", 19619 g2: "g2", 19620 glyphname: "glyphName", 19621 "glyph-name": "glyphName", 19622 glyphorientationhorizontal: "glyphOrientationHorizontal", 19623 "glyph-orientation-horizontal": "glyphOrientationHorizontal", 19624 glyphorientationvertical: "glyphOrientationVertical", 19625 "glyph-orientation-vertical": "glyphOrientationVertical", 19626 glyphref: "glyphRef", 19627 gradienttransform: "gradientTransform", 19628 gradientunits: "gradientUnits", 19629 hanging: "hanging", 19630 horizadvx: "horizAdvX", 19631 "horiz-adv-x": "horizAdvX", 19632 horizoriginx: "horizOriginX", 19633 "horiz-origin-x": "horizOriginX", 19634 ideographic: "ideographic", 19635 imagerendering: "imageRendering", 19636 "image-rendering": "imageRendering", 19637 in2: "in2", 19638 in: "in", 19639 inlist: "inlist", 19640 intercept: "intercept", 19641 k1: "k1", 19642 k2: "k2", 19643 k3: "k3", 19644 k4: "k4", 19645 k: "k", 19646 kernelmatrix: "kernelMatrix", 19647 kernelunitlength: "kernelUnitLength", 19648 kerning: "kerning", 19649 keypoints: "keyPoints", 19650 keysplines: "keySplines", 19651 keytimes: "keyTimes", 19652 lengthadjust: "lengthAdjust", 19653 letterspacing: "letterSpacing", 19654 "letter-spacing": "letterSpacing", 19655 lightingcolor: "lightingColor", 19656 "lighting-color": "lightingColor", 19657 limitingconeangle: "limitingConeAngle", 19658 local: "local", 19659 markerend: "markerEnd", 19660 "marker-end": "markerEnd", 19661 markerheight: "markerHeight", 19662 markermid: "markerMid", 19663 "marker-mid": "markerMid", 19664 markerstart: "markerStart", 19665 "marker-start": "markerStart", 19666 markerunits: "markerUnits", 19667 markerwidth: "markerWidth", 19668 mask: "mask", 19669 maskcontentunits: "maskContentUnits", 19670 maskunits: "maskUnits", 19671 mathematical: "mathematical", 19672 mode: "mode", 19673 numoctaves: "numOctaves", 19674 offset: "offset", 19675 opacity: "opacity", 19676 operator: "operator", 19677 order: "order", 19678 orient: "orient", 19679 orientation: "orientation", 19680 origin: "origin", 19681 overflow: "overflow", 19682 overlineposition: "overlinePosition", 19683 "overline-position": "overlinePosition", 19684 overlinethickness: "overlineThickness", 19685 "overline-thickness": "overlineThickness", 19686 paintorder: "paintOrder", 19687 "paint-order": "paintOrder", 19688 panose1: "panose1", 19689 "panose-1": "panose1", 19690 pathlength: "pathLength", 19691 patterncontentunits: "patternContentUnits", 19692 patterntransform: "patternTransform", 19693 patternunits: "patternUnits", 19694 pointerevents: "pointerEvents", 19695 "pointer-events": "pointerEvents", 19696 points: "points", 19697 pointsatx: "pointsAtX", 19698 pointsaty: "pointsAtY", 19699 pointsatz: "pointsAtZ", 19700 popover: "popover", 19701 popovertarget: "popoverTarget", 19702 popovertargetaction: "popoverTargetAction", 19703 prefix: "prefix", 19704 preservealpha: "preserveAlpha", 19705 preserveaspectratio: "preserveAspectRatio", 19706 primitiveunits: "primitiveUnits", 19707 property: "property", 19708 r: "r", 19709 radius: "radius", 19710 refx: "refX", 19711 refy: "refY", 19712 renderingintent: "renderingIntent", 19713 "rendering-intent": "renderingIntent", 19714 repeatcount: "repeatCount", 19715 repeatdur: "repeatDur", 19716 requiredextensions: "requiredExtensions", 19717 requiredfeatures: "requiredFeatures", 19718 resource: "resource", 19719 restart: "restart", 19720 result: "result", 19721 results: "results", 19722 rotate: "rotate", 19723 rx: "rx", 19724 ry: "ry", 19725 scale: "scale", 19726 security: "security", 19727 seed: "seed", 19728 shaperendering: "shapeRendering", 19729 "shape-rendering": "shapeRendering", 19730 slope: "slope", 19731 spacing: "spacing", 19732 specularconstant: "specularConstant", 19733 specularexponent: "specularExponent", 19734 speed: "speed", 19735 spreadmethod: "spreadMethod", 19736 startoffset: "startOffset", 19737 stddeviation: "stdDeviation", 19738 stemh: "stemh", 19739 stemv: "stemv", 19740 stitchtiles: "stitchTiles", 19741 stopcolor: "stopColor", 19742 "stop-color": "stopColor", 19743 stopopacity: "stopOpacity", 19744 "stop-opacity": "stopOpacity", 19745 strikethroughposition: "strikethroughPosition", 19746 "strikethrough-position": "strikethroughPosition", 19747 strikethroughthickness: "strikethroughThickness", 19748 "strikethrough-thickness": "strikethroughThickness", 19749 string: "string", 19750 stroke: "stroke", 19751 strokedasharray: "strokeDasharray", 19752 "stroke-dasharray": "strokeDasharray", 19753 strokedashoffset: "strokeDashoffset", 19754 "stroke-dashoffset": "strokeDashoffset", 19755 strokelinecap: "strokeLinecap", 19756 "stroke-linecap": "strokeLinecap", 19757 strokelinejoin: "strokeLinejoin", 19758 "stroke-linejoin": "strokeLinejoin", 19759 strokemiterlimit: "strokeMiterlimit", 19760 "stroke-miterlimit": "strokeMiterlimit", 19761 strokewidth: "strokeWidth", 19762 "stroke-width": "strokeWidth", 19763 strokeopacity: "strokeOpacity", 19764 "stroke-opacity": "strokeOpacity", 19765 suppresscontenteditablewarning: "suppressContentEditableWarning", 19766 suppresshydrationwarning: "suppressHydrationWarning", 19767 surfacescale: "surfaceScale", 19768 systemlanguage: "systemLanguage", 19769 tablevalues: "tableValues", 19770 targetx: "targetX", 19771 targety: "targetY", 19772 textanchor: "textAnchor", 19773 "text-anchor": "textAnchor", 19774 textdecoration: "textDecoration", 19775 "text-decoration": "textDecoration", 19776 textlength: "textLength", 19777 textrendering: "textRendering", 19778 "text-rendering": "textRendering", 19779 to: "to", 19780 transform: "transform", 19781 transformorigin: "transformOrigin", 19782 "transform-origin": "transformOrigin", 19783 typeof: "typeof", 19784 u1: "u1", 19785 u2: "u2", 19786 underlineposition: "underlinePosition", 19787 "underline-position": "underlinePosition", 19788 underlinethickness: "underlineThickness", 19789 "underline-thickness": "underlineThickness", 19790 unicode: "unicode", 19791 unicodebidi: "unicodeBidi", 19792 "unicode-bidi": "unicodeBidi", 19793 unicoderange: "unicodeRange", 19794 "unicode-range": "unicodeRange", 19795 unitsperem: "unitsPerEm", 19796 "units-per-em": "unitsPerEm", 19797 unselectable: "unselectable", 19798 valphabetic: "vAlphabetic", 19799 "v-alphabetic": "vAlphabetic", 19800 values: "values", 19801 vectoreffect: "vectorEffect", 19802 "vector-effect": "vectorEffect", 19803 version: "version", 19804 vertadvy: "vertAdvY", 19805 "vert-adv-y": "vertAdvY", 19806 vertoriginx: "vertOriginX", 19807 "vert-origin-x": "vertOriginX", 19808 vertoriginy: "vertOriginY", 19809 "vert-origin-y": "vertOriginY", 19810 vhanging: "vHanging", 19811 "v-hanging": "vHanging", 19812 videographic: "vIdeographic", 19813 "v-ideographic": "vIdeographic", 19814 viewbox: "viewBox", 19815 viewtarget: "viewTarget", 19816 visibility: "visibility", 19817 vmathematical: "vMathematical", 19818 "v-mathematical": "vMathematical", 19819 vocab: "vocab", 19820 widths: "widths", 19821 wordspacing: "wordSpacing", 19822 "word-spacing": "wordSpacing", 19823 writingmode: "writingMode", 19824 "writing-mode": "writingMode", 19825 x1: "x1", 19826 x2: "x2", 19827 x: "x", 19828 xchannelselector: "xChannelSelector", 19829 xheight: "xHeight", 19830 "x-height": "xHeight", 19831 xlinkactuate: "xlinkActuate", 19832 "xlink:actuate": "xlinkActuate", 19833 xlinkarcrole: "xlinkArcrole", 19834 "xlink:arcrole": "xlinkArcrole", 19835 xlinkhref: "xlinkHref", 19836 "xlink:href": "xlinkHref", 19837 xlinkrole: "xlinkRole", 19838 "xlink:role": "xlinkRole", 19839 xlinkshow: "xlinkShow", 19840 "xlink:show": "xlinkShow", 19841 xlinktitle: "xlinkTitle", 19842 "xlink:title": "xlinkTitle", 19843 xlinktype: "xlinkType", 19844 "xlink:type": "xlinkType", 19845 xmlbase: "xmlBase", 19846 "xml:base": "xmlBase", 19847 xmllang: "xmlLang", 19848 "xml:lang": "xmlLang", 19849 xmlns: "xmlns", 19850 "xml:space": "xmlSpace", 19851 xmlnsxlink: "xmlnsXlink", 19852 "xmlns:xlink": "xmlnsXlink", 19853 xmlspace: "xmlSpace", 19854 y1: "y1", 19855 y2: "y2", 19856 y: "y", 19857 ychannelselector: "yChannelSelector", 19858 z: "z", 19859 zoomandpan: "zoomAndPan" 19860 }, ariaProperties = { 19861 "aria-current": 0, 19862 "aria-description": 0, 19863 "aria-details": 0, 19864 "aria-disabled": 0, 19865 "aria-hidden": 0, 19866 "aria-invalid": 0, 19867 "aria-keyshortcuts": 0, 19868 "aria-label": 0, 19869 "aria-roledescription": 0, 19870 "aria-autocomplete": 0, 19871 "aria-checked": 0, 19872 "aria-expanded": 0, 19873 "aria-haspopup": 0, 19874 "aria-level": 0, 19875 "aria-modal": 0, 19876 "aria-multiline": 0, 19877 "aria-multiselectable": 0, 19878 "aria-orientation": 0, 19879 "aria-placeholder": 0, 19880 "aria-pressed": 0, 19881 "aria-readonly": 0, 19882 "aria-required": 0, 19883 "aria-selected": 0, 19884 "aria-sort": 0, 19885 "aria-valuemax": 0, 19886 "aria-valuemin": 0, 19887 "aria-valuenow": 0, 19888 "aria-valuetext": 0, 19889 "aria-atomic": 0, 19890 "aria-busy": 0, 19891 "aria-live": 0, 19892 "aria-relevant": 0, 19893 "aria-dropeffect": 0, 19894 "aria-grabbed": 0, 19895 "aria-activedescendant": 0, 19896 "aria-colcount": 0, 19897 "aria-colindex": 0, 19898 "aria-colspan": 0, 19899 "aria-controls": 0, 19900 "aria-describedby": 0, 19901 "aria-errormessage": 0, 19902 "aria-flowto": 0, 19903 "aria-labelledby": 0, 19904 "aria-owns": 0, 19905 "aria-posinset": 0, 19906 "aria-rowcount": 0, 19907 "aria-rowindex": 0, 19908 "aria-rowspan": 0, 19909 "aria-setsize": 0, 19910 "aria-braillelabel": 0, 19911 "aria-brailleroledescription": 0, 19912 "aria-colindextext": 0, 19913 "aria-rowindextext": 0 19914 }, warnedProperties$1 = {}, rARIA$1 = RegExp( 19915 "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" 19916 ), rARIACamel$1 = RegExp( 19917 "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" 19918 ), didWarnValueNull = false, warnedProperties = {}, EVENT_NAME_REGEX = /^on./, INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/, rARIA = RegExp( 19919 "^(aria)-[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" 19920 ), rARIACamel = RegExp( 19921 "^(aria)[A-Z][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$" 19922 ), isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i, currentReplayingEvent = null, restoreTarget = null, restoreQueue = null, isInsideEventHandler = false, canUseDOM = !("undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement), passiveBrowserEventsSupported = false; 19923 if (canUseDOM) 19924 try { 19925 var options$jscomp$0 = {}; 19926 Object.defineProperty(options$jscomp$0, "passive", { 19927 get: function() { 19928 passiveBrowserEventsSupported = true; 19929 } 19930 }); 19931 window.addEventListener("test", options$jscomp$0, options$jscomp$0); 19932 window.removeEventListener("test", options$jscomp$0, options$jscomp$0); 19933 } catch (e3) { 19934 passiveBrowserEventsSupported = false; 19935 } 19936 var root2 = null, startText = null, fallbackText = null, EventInterface = { 19937 eventPhase: 0, 19938 bubbles: 0, 19939 cancelable: 0, 19940 timeStamp: function(event) { 19941 return event.timeStamp || Date.now(); 19942 }, 19943 defaultPrevented: 0, 19944 isTrusted: 0 19945 }, SyntheticEvent = createSyntheticEvent(EventInterface), UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }), SyntheticUIEvent = createSyntheticEvent(UIEventInterface), lastMovementX, lastMovementY, lastMouseEvent, MouseEventInterface = assign({}, UIEventInterface, { 19946 screenX: 0, 19947 screenY: 0, 19948 clientX: 0, 19949 clientY: 0, 19950 pageX: 0, 19951 pageY: 0, 19952 ctrlKey: 0, 19953 shiftKey: 0, 19954 altKey: 0, 19955 metaKey: 0, 19956 getModifierState: getEventModifierState, 19957 button: 0, 19958 buttons: 0, 19959 relatedTarget: function(event) { 19960 return void 0 === event.relatedTarget ? event.fromElement === event.srcElement ? event.toElement : event.fromElement : event.relatedTarget; 19961 }, 19962 movementX: function(event) { 19963 if ("movementX" in event) return event.movementX; 19964 event !== lastMouseEvent && (lastMouseEvent && "mousemove" === event.type ? (lastMovementX = event.screenX - lastMouseEvent.screenX, lastMovementY = event.screenY - lastMouseEvent.screenY) : lastMovementY = lastMovementX = 0, lastMouseEvent = event); 19965 return lastMovementX; 19966 }, 19967 movementY: function(event) { 19968 return "movementY" in event ? event.movementY : lastMovementY; 19969 } 19970 }), SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface), DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }), SyntheticDragEvent = createSyntheticEvent(DragEventInterface), FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }), SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface), AnimationEventInterface = assign({}, EventInterface, { 19971 animationName: 0, 19972 elapsedTime: 0, 19973 pseudoElement: 0 19974 }), SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface), ClipboardEventInterface = assign({}, EventInterface, { 19975 clipboardData: function(event) { 19976 return "clipboardData" in event ? event.clipboardData : window.clipboardData; 19977 } 19978 }), SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface), CompositionEventInterface = assign({}, EventInterface, { data: 0 }), SyntheticCompositionEvent = createSyntheticEvent( 19979 CompositionEventInterface 19980 ), SyntheticInputEvent = SyntheticCompositionEvent, normalizeKey = { 19981 Esc: "Escape", 19982 Spacebar: " ", 19983 Left: "ArrowLeft", 19984 Up: "ArrowUp", 19985 Right: "ArrowRight", 19986 Down: "ArrowDown", 19987 Del: "Delete", 19988 Win: "OS", 19989 Menu: "ContextMenu", 19990 Apps: "ContextMenu", 19991 Scroll: "ScrollLock", 19992 MozPrintableKey: "Unidentified" 19993 }, translateToKey = { 19994 8: "Backspace", 19995 9: "Tab", 19996 12: "Clear", 19997 13: "Enter", 19998 16: "Shift", 19999 17: "Control", 20000 18: "Alt", 20001 19: "Pause", 20002 20: "CapsLock", 20003 27: "Escape", 20004 32: " ", 20005 33: "PageUp", 20006 34: "PageDown", 20007 35: "End", 20008 36: "Home", 20009 37: "ArrowLeft", 20010 38: "ArrowUp", 20011 39: "ArrowRight", 20012 40: "ArrowDown", 20013 45: "Insert", 20014 46: "Delete", 20015 112: "F1", 20016 113: "F2", 20017 114: "F3", 20018 115: "F4", 20019 116: "F5", 20020 117: "F6", 20021 118: "F7", 20022 119: "F8", 20023 120: "F9", 20024 121: "F10", 20025 122: "F11", 20026 123: "F12", 20027 144: "NumLock", 20028 145: "ScrollLock", 20029 224: "Meta" 20030 }, modifierKeyToProp = { 20031 Alt: "altKey", 20032 Control: "ctrlKey", 20033 Meta: "metaKey", 20034 Shift: "shiftKey" 20035 }, KeyboardEventInterface = assign({}, UIEventInterface, { 20036 key: function(nativeEvent) { 20037 if (nativeEvent.key) { 20038 var key = normalizeKey[nativeEvent.key] || nativeEvent.key; 20039 if ("Unidentified" !== key) return key; 20040 } 20041 return "keypress" === nativeEvent.type ? (nativeEvent = getEventCharCode(nativeEvent), 13 === nativeEvent ? "Enter" : String.fromCharCode(nativeEvent)) : "keydown" === nativeEvent.type || "keyup" === nativeEvent.type ? translateToKey[nativeEvent.keyCode] || "Unidentified" : ""; 20042 }, 20043 code: 0, 20044 location: 0, 20045 ctrlKey: 0, 20046 shiftKey: 0, 20047 altKey: 0, 20048 metaKey: 0, 20049 repeat: 0, 20050 locale: 0, 20051 getModifierState: getEventModifierState, 20052 charCode: function(event) { 20053 return "keypress" === event.type ? getEventCharCode(event) : 0; 20054 }, 20055 keyCode: function(event) { 20056 return "keydown" === event.type || "keyup" === event.type ? event.keyCode : 0; 20057 }, 20058 which: function(event) { 20059 return "keypress" === event.type ? getEventCharCode(event) : "keydown" === event.type || "keyup" === event.type ? event.keyCode : 0; 20060 } 20061 }), SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface), PointerEventInterface = assign({}, MouseEventInterface, { 20062 pointerId: 0, 20063 width: 0, 20064 height: 0, 20065 pressure: 0, 20066 tangentialPressure: 0, 20067 tiltX: 0, 20068 tiltY: 0, 20069 twist: 0, 20070 pointerType: 0, 20071 isPrimary: 0 20072 }), SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface), TouchEventInterface = assign({}, UIEventInterface, { 20073 touches: 0, 20074 targetTouches: 0, 20075 changedTouches: 0, 20076 altKey: 0, 20077 metaKey: 0, 20078 ctrlKey: 0, 20079 shiftKey: 0, 20080 getModifierState: getEventModifierState 20081 }), SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface), TransitionEventInterface = assign({}, EventInterface, { 20082 propertyName: 0, 20083 elapsedTime: 0, 20084 pseudoElement: 0 20085 }), SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface), WheelEventInterface = assign({}, MouseEventInterface, { 20086 deltaX: function(event) { 20087 return "deltaX" in event ? event.deltaX : "wheelDeltaX" in event ? -event.wheelDeltaX : 0; 20088 }, 20089 deltaY: function(event) { 20090 return "deltaY" in event ? event.deltaY : "wheelDeltaY" in event ? -event.wheelDeltaY : "wheelDelta" in event ? -event.wheelDelta : 0; 20091 }, 20092 deltaZ: 0, 20093 deltaMode: 0 20094 }), SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface), ToggleEventInterface = assign({}, EventInterface, { 20095 newState: 0, 20096 oldState: 0 20097 }), SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface), END_KEYCODES = [9, 13, 27, 32], START_KEYCODE = 229, canUseCompositionEvent = canUseDOM && "CompositionEvent" in window, documentMode = null; 20098 canUseDOM && "documentMode" in document && (documentMode = document.documentMode); 20099 var canUseTextInputEvent = canUseDOM && "TextEvent" in window && !documentMode, useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && 8 < documentMode && 11 >= documentMode), SPACEBAR_CODE = 32, SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE), hasSpaceKeypress = false, isComposing = false, supportedInputTypes = { 20100 color: true, 20101 date: true, 20102 datetime: true, 20103 "datetime-local": true, 20104 email: true, 20105 month: true, 20106 number: true, 20107 password: true, 20108 range: true, 20109 search: true, 20110 tel: true, 20111 text: true, 20112 time: true, 20113 url: true, 20114 week: true 20115 }, activeElement$1 = null, activeElementInst$1 = null, isInputEventSupported = false; 20116 canUseDOM && (isInputEventSupported = isEventSupported("input") && (!document.documentMode || 9 < document.documentMode)); 20117 var objectIs = "function" === typeof Object.is ? Object.is : is3, skipSelectionChangeEvent = canUseDOM && "documentMode" in document && 11 >= document.documentMode, activeElement = null, activeElementInst = null, lastSelection = null, mouseDown = false, vendorPrefixes = { 20118 animationend: makePrefixMap("Animation", "AnimationEnd"), 20119 animationiteration: makePrefixMap("Animation", "AnimationIteration"), 20120 animationstart: makePrefixMap("Animation", "AnimationStart"), 20121 transitionrun: makePrefixMap("Transition", "TransitionRun"), 20122 transitionstart: makePrefixMap("Transition", "TransitionStart"), 20123 transitioncancel: makePrefixMap("Transition", "TransitionCancel"), 20124 transitionend: makePrefixMap("Transition", "TransitionEnd") 20125 }, prefixedEventNames = {}, style = {}; 20126 canUseDOM && (style = document.createElement("div").style, "AnimationEvent" in window || (delete vendorPrefixes.animationend.animation, delete vendorPrefixes.animationiteration.animation, delete vendorPrefixes.animationstart.animation), "TransitionEvent" in window || delete vendorPrefixes.transitionend.transition); 20127 var ANIMATION_END = getVendorPrefixedEventName("animationend"), ANIMATION_ITERATION = getVendorPrefixedEventName("animationiteration"), ANIMATION_START = getVendorPrefixedEventName("animationstart"), TRANSITION_RUN = getVendorPrefixedEventName("transitionrun"), TRANSITION_START = getVendorPrefixedEventName("transitionstart"), TRANSITION_CANCEL = getVendorPrefixedEventName("transitioncancel"), TRANSITION_END = getVendorPrefixedEventName("transitionend"), topLevelEventsToReactNames = /* @__PURE__ */ new Map(), simpleEventPluginEvents = "abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split( 20128 " " 20129 ); 20130 simpleEventPluginEvents.push("scrollEnd"); 20131 var lastResetTime = 0; 20132 if ("object" === typeof performance && "function" === typeof performance.now) { 20133 var localPerformance = performance; 20134 var getCurrentTime = function() { 20135 return localPerformance.now(); 20136 }; 20137 } else { 20138 var localDate = Date; 20139 getCurrentTime = function() { 20140 return localDate.now(); 20141 }; 20142 } 20143 var reportGlobalError = "function" === typeof reportError ? reportError : function(error2) { 20144 if ("object" === typeof window && "function" === typeof window.ErrorEvent) { 20145 var event = new window.ErrorEvent("error", { 20146 bubbles: true, 20147 cancelable: true, 20148 message: "object" === typeof error2 && null !== error2 && "string" === typeof error2.message ? String(error2.message) : String(error2), 20149 error: error2 20150 }); 20151 if (!window.dispatchEvent(event)) return; 20152 } else if ("object" === typeof process && "function" === typeof process.emit) { 20153 process.emit("uncaughtException", error2); 20154 return; 20155 } 20156 console.error(error2); 20157 }, OMITTED_PROP_ERROR = "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.", EMPTY_ARRAY = 0, COMPLEX_ARRAY = 1, PRIMITIVE_ARRAY = 2, ENTRIES_ARRAY = 3, REMOVED = "\u2013\xA0", ADDED = "+\xA0", UNCHANGED = "\u2007\xA0", supportsUserTiming = "undefined" !== typeof console && "function" === typeof console.timeStamp && "undefined" !== typeof performance && "function" === typeof performance.measure, COMPONENTS_TRACK = "Components \u269B", LANES_TRACK_GROUP = "Scheduler \u269B", currentTrack = "Blocking", alreadyWarnedForDeepEquality = false, reusableComponentDevToolDetails = { 20158 color: "primary", 20159 properties: null, 20160 tooltipText: "", 20161 track: COMPONENTS_TRACK 20162 }, reusableComponentOptions = { 20163 start: -0, 20164 end: -0, 20165 detail: { devtools: reusableComponentDevToolDetails } 20166 }, resuableChangedPropsEntry = ["Changed Props", ""], DEEP_EQUALITY_WARNING = "This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner.", reusableDeeplyEqualPropsEntry = ["Changed Props", DEEP_EQUALITY_WARNING], OffscreenVisible = 1, OffscreenPassiveEffectsConnected = 2, concurrentQueues = [], concurrentQueuesIndex = 0, concurrentlyUpdatedLanes = 0, emptyContextObject = {}; 20167 Object.freeze(emptyContextObject); 20168 var resolveFamily = null, failedBoundaries = null, NoMode = 0, ConcurrentMode = 1, ProfileMode = 2, StrictLegacyMode = 8, StrictEffectsMode = 16, SuspenseyImagesMode = 32; 20169 var hasBadMapPolyfill = false; 20170 try { 20171 var nonExtensibleObject = Object.preventExtensions({}); 20172 /* @__PURE__ */ new Map([[nonExtensibleObject, null]]); 20173 /* @__PURE__ */ new Set([nonExtensibleObject]); 20174 } catch (e$3) { 20175 hasBadMapPolyfill = true; 20176 } 20177 var CapturedStacks = /* @__PURE__ */ new WeakMap(), forkStack = [], forkStackIndex = 0, treeForkProvider = null, treeForkCount = 0, idStack = [], idStackIndex = 0, treeContextProvider = null, treeContextId = 1, treeContextOverflow = "", hydrationParentFiber = null, nextHydratableInstance = null, isHydrating = false, didSuspendOrErrorDEV = false, hydrationDiffRootDEV = null, hydrationErrors = null, rootOrSingletonContext = false, HydrationMismatchException = Error( 20178 "Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." 20179 ), valueCursor = createCursor(null); 20180 var rendererCursorDEV = createCursor(null); 20181 var rendererSigil = {}; 20182 var currentlyRenderingFiber$1 = null, lastContextDependency = null, isDisallowedContextReadInDEV = false, AbortControllerLocal = "undefined" !== typeof AbortController ? AbortController : function() { 20183 var listeners = [], signal = this.signal = { 20184 aborted: false, 20185 addEventListener: function(type, listener) { 20186 listeners.push(listener); 20187 } 20188 }; 20189 this.abort = function() { 20190 signal.aborted = true; 20191 listeners.forEach(function(listener) { 20192 return listener(); 20193 }); 20194 }; 20195 }, scheduleCallback$2 = Scheduler.unstable_scheduleCallback, NormalPriority = Scheduler.unstable_NormalPriority, CacheContext = { 20196 $$typeof: REACT_CONTEXT_TYPE, 20197 Consumer: null, 20198 Provider: null, 20199 _currentValue: null, 20200 _currentValue2: null, 20201 _threadCount: 0, 20202 _currentRenderer: null, 20203 _currentRenderer2: null 20204 }, now3 = Scheduler.unstable_now, createTask = console.createTask ? console.createTask : function() { 20205 return null; 20206 }, SPAWNED_UPDATE = 1, PINGED_UPDATE = 2, renderStartTime = -0, commitStartTime = -0, commitEndTime = -0, commitErrors = null, profilerStartTime = -1.1, profilerEffectDuration = -0, componentEffectDuration = -0, componentEffectStartTime = -1.1, componentEffectEndTime = -1.1, componentEffectErrors = null, componentEffectSpawnedUpdate = false, blockingClampTime = -0, blockingUpdateTime = -1.1, blockingUpdateTask = null, blockingUpdateType = 0, blockingUpdateMethodName = null, blockingUpdateComponentName = null, blockingEventTime = -1.1, blockingEventType = null, blockingEventRepeatTime = -1.1, blockingSuspendedTime = -1.1, transitionClampTime = -0, transitionStartTime = -1.1, transitionUpdateTime = -1.1, transitionUpdateType = 0, transitionUpdateTask = null, transitionUpdateMethodName = null, transitionUpdateComponentName = null, transitionEventTime = -1.1, transitionEventType = null, transitionEventRepeatTime = -1.1, transitionSuspendedTime = -1.1, retryClampTime = -0, idleClampTime = -0, animatingLanes = 0, animatingTask = null, yieldReason = 0, yieldStartTime = -1.1, currentUpdateIsNested = false, nestedUpdateScheduled = false, currentEntangledListeners = null, currentEntangledPendingCount = 0, currentEntangledLane = 0, currentEntangledActionThenable = null, prevOnStartTransitionFinish = ReactSharedInternals.S; 20207 ReactSharedInternals.S = function(transition, returnValue) { 20208 globalMostRecentTransitionTime = now$1(); 20209 if ("object" === typeof returnValue && null !== returnValue && "function" === typeof returnValue.then) { 20210 if (0 > transitionStartTime && 0 > transitionUpdateTime) { 20211 transitionStartTime = now3(); 20212 var newEventTime = resolveEventTimeStamp(), newEventType = resolveEventType(); 20213 if (newEventTime !== transitionEventRepeatTime || newEventType !== transitionEventType) 20214 transitionEventRepeatTime = -1.1; 20215 transitionEventTime = newEventTime; 20216 transitionEventType = newEventType; 20217 } 20218 entangleAsyncAction(transition, returnValue); 20219 } 20220 null !== prevOnStartTransitionFinish && prevOnStartTransitionFinish(transition, returnValue); 20221 }; 20222 var resumedCache = createCursor(null), ReactStrictModeWarnings = { 20223 recordUnsafeLifecycleWarnings: function() { 20224 }, 20225 flushPendingUnsafeLifecycleWarnings: function() { 20226 }, 20227 recordLegacyContextWarning: function() { 20228 }, 20229 flushLegacyContextWarning: function() { 20230 }, 20231 discardPendingWarnings: function() { 20232 } 20233 }, pendingComponentWillMountWarnings = [], pendingUNSAFE_ComponentWillMountWarnings = [], pendingComponentWillReceivePropsWarnings = [], pendingUNSAFE_ComponentWillReceivePropsWarnings = [], pendingComponentWillUpdateWarnings = [], pendingUNSAFE_ComponentWillUpdateWarnings = [], didWarnAboutUnsafeLifecycles = /* @__PURE__ */ new Set(); 20234 ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function(fiber, instance) { 20235 didWarnAboutUnsafeLifecycles.has(fiber.type) || ("function" === typeof instance.componentWillMount && true !== instance.componentWillMount.__suppressDeprecationWarning && pendingComponentWillMountWarnings.push(fiber), fiber.mode & StrictLegacyMode && "function" === typeof instance.UNSAFE_componentWillMount && pendingUNSAFE_ComponentWillMountWarnings.push(fiber), "function" === typeof instance.componentWillReceiveProps && true !== instance.componentWillReceiveProps.__suppressDeprecationWarning && pendingComponentWillReceivePropsWarnings.push(fiber), fiber.mode & StrictLegacyMode && "function" === typeof instance.UNSAFE_componentWillReceiveProps && pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber), "function" === typeof instance.componentWillUpdate && true !== instance.componentWillUpdate.__suppressDeprecationWarning && pendingComponentWillUpdateWarnings.push(fiber), fiber.mode & StrictLegacyMode && "function" === typeof instance.UNSAFE_componentWillUpdate && pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber)); 20236 }; 20237 ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function() { 20238 var componentWillMountUniqueNames = /* @__PURE__ */ new Set(); 20239 0 < pendingComponentWillMountWarnings.length && (pendingComponentWillMountWarnings.forEach(function(fiber) { 20240 componentWillMountUniqueNames.add( 20241 getComponentNameFromFiber(fiber) || "Component" 20242 ); 20243 didWarnAboutUnsafeLifecycles.add(fiber.type); 20244 }), pendingComponentWillMountWarnings = []); 20245 var UNSAFE_componentWillMountUniqueNames = /* @__PURE__ */ new Set(); 20246 0 < pendingUNSAFE_ComponentWillMountWarnings.length && (pendingUNSAFE_ComponentWillMountWarnings.forEach(function(fiber) { 20247 UNSAFE_componentWillMountUniqueNames.add( 20248 getComponentNameFromFiber(fiber) || "Component" 20249 ); 20250 didWarnAboutUnsafeLifecycles.add(fiber.type); 20251 }), pendingUNSAFE_ComponentWillMountWarnings = []); 20252 var componentWillReceivePropsUniqueNames = /* @__PURE__ */ new Set(); 20253 0 < pendingComponentWillReceivePropsWarnings.length && (pendingComponentWillReceivePropsWarnings.forEach(function(fiber) { 20254 componentWillReceivePropsUniqueNames.add( 20255 getComponentNameFromFiber(fiber) || "Component" 20256 ); 20257 didWarnAboutUnsafeLifecycles.add(fiber.type); 20258 }), pendingComponentWillReceivePropsWarnings = []); 20259 var UNSAFE_componentWillReceivePropsUniqueNames = /* @__PURE__ */ new Set(); 20260 0 < pendingUNSAFE_ComponentWillReceivePropsWarnings.length && (pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach( 20261 function(fiber) { 20262 UNSAFE_componentWillReceivePropsUniqueNames.add( 20263 getComponentNameFromFiber(fiber) || "Component" 20264 ); 20265 didWarnAboutUnsafeLifecycles.add(fiber.type); 20266 } 20267 ), pendingUNSAFE_ComponentWillReceivePropsWarnings = []); 20268 var componentWillUpdateUniqueNames = /* @__PURE__ */ new Set(); 20269 0 < pendingComponentWillUpdateWarnings.length && (pendingComponentWillUpdateWarnings.forEach(function(fiber) { 20270 componentWillUpdateUniqueNames.add( 20271 getComponentNameFromFiber(fiber) || "Component" 20272 ); 20273 didWarnAboutUnsafeLifecycles.add(fiber.type); 20274 }), pendingComponentWillUpdateWarnings = []); 20275 var UNSAFE_componentWillUpdateUniqueNames = /* @__PURE__ */ new Set(); 20276 0 < pendingUNSAFE_ComponentWillUpdateWarnings.length && (pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function(fiber) { 20277 UNSAFE_componentWillUpdateUniqueNames.add( 20278 getComponentNameFromFiber(fiber) || "Component" 20279 ); 20280 didWarnAboutUnsafeLifecycles.add(fiber.type); 20281 }), pendingUNSAFE_ComponentWillUpdateWarnings = []); 20282 if (0 < UNSAFE_componentWillMountUniqueNames.size) { 20283 var sortedNames = setToSortedString( 20284 UNSAFE_componentWillMountUniqueNames 20285 ); 20286 console.error( 20287 "Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n\nPlease update the following components: %s", 20288 sortedNames 20289 ); 20290 } 20291 0 < UNSAFE_componentWillReceivePropsUniqueNames.size && (sortedNames = setToSortedString( 20292 UNSAFE_componentWillReceivePropsUniqueNames 20293 ), console.error( 20294 "Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n\nPlease update the following components: %s", 20295 sortedNames 20296 )); 20297 0 < UNSAFE_componentWillUpdateUniqueNames.size && (sortedNames = setToSortedString( 20298 UNSAFE_componentWillUpdateUniqueNames 20299 ), console.error( 20300 "Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n\nPlease update the following components: %s", 20301 sortedNames 20302 )); 20303 0 < componentWillMountUniqueNames.size && (sortedNames = setToSortedString(componentWillMountUniqueNames), console.warn( 20304 "componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s", 20305 sortedNames 20306 )); 20307 0 < componentWillReceivePropsUniqueNames.size && (sortedNames = setToSortedString( 20308 componentWillReceivePropsUniqueNames 20309 ), console.warn( 20310 "componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s", 20311 sortedNames 20312 )); 20313 0 < componentWillUpdateUniqueNames.size && (sortedNames = setToSortedString(componentWillUpdateUniqueNames), console.warn( 20314 "componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s", 20315 sortedNames 20316 )); 20317 }; 20318 var pendingLegacyContextWarning = /* @__PURE__ */ new Map(), didWarnAboutLegacyContext = /* @__PURE__ */ new Set(); 20319 ReactStrictModeWarnings.recordLegacyContextWarning = function(fiber, instance) { 20320 var strictRoot = null; 20321 for (var node = fiber; null !== node; ) 20322 node.mode & StrictLegacyMode && (strictRoot = node), node = node.return; 20323 null === strictRoot ? console.error( 20324 "Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue." 20325 ) : !didWarnAboutLegacyContext.has(fiber.type) && (node = pendingLegacyContextWarning.get(strictRoot), null != fiber.type.contextTypes || null != fiber.type.childContextTypes || null !== instance && "function" === typeof instance.getChildContext) && (void 0 === node && (node = [], pendingLegacyContextWarning.set(strictRoot, node)), node.push(fiber)); 20326 }; 20327 ReactStrictModeWarnings.flushLegacyContextWarning = function() { 20328 pendingLegacyContextWarning.forEach(function(fiberArray) { 20329 if (0 !== fiberArray.length) { 20330 var firstFiber = fiberArray[0], uniqueNames = /* @__PURE__ */ new Set(); 20331 fiberArray.forEach(function(fiber) { 20332 uniqueNames.add(getComponentNameFromFiber(fiber) || "Component"); 20333 didWarnAboutLegacyContext.add(fiber.type); 20334 }); 20335 var sortedNames = setToSortedString(uniqueNames); 20336 runWithFiberInDEV(firstFiber, function() { 20337 console.error( 20338 "Legacy context API has been detected within a strict-mode tree.\n\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\n\nPlease update the following components: %s\n\nLearn more about this warning here: https://react.dev/link/legacy-context", 20339 sortedNames 20340 ); 20341 }); 20342 } 20343 }); 20344 }; 20345 ReactStrictModeWarnings.discardPendingWarnings = function() { 20346 pendingComponentWillMountWarnings = []; 20347 pendingUNSAFE_ComponentWillMountWarnings = []; 20348 pendingComponentWillReceivePropsWarnings = []; 20349 pendingUNSAFE_ComponentWillReceivePropsWarnings = []; 20350 pendingComponentWillUpdateWarnings = []; 20351 pendingUNSAFE_ComponentWillUpdateWarnings = []; 20352 pendingLegacyContextWarning = /* @__PURE__ */ new Map(); 20353 }; 20354 var callComponent = { 20355 react_stack_bottom_frame: function(Component, props, secondArg) { 20356 var wasRendering = isRendering; 20357 isRendering = true; 20358 try { 20359 return Component(props, secondArg); 20360 } finally { 20361 isRendering = wasRendering; 20362 } 20363 } 20364 }, callComponentInDEV = callComponent.react_stack_bottom_frame.bind(callComponent), callRender = { 20365 react_stack_bottom_frame: function(instance) { 20366 var wasRendering = isRendering; 20367 isRendering = true; 20368 try { 20369 return instance.render(); 20370 } finally { 20371 isRendering = wasRendering; 20372 } 20373 } 20374 }, callRenderInDEV = callRender.react_stack_bottom_frame.bind(callRender), callComponentDidMount = { 20375 react_stack_bottom_frame: function(finishedWork, instance) { 20376 try { 20377 instance.componentDidMount(); 20378 } catch (error2) { 20379 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 20380 } 20381 } 20382 }, callComponentDidMountInDEV = callComponentDidMount.react_stack_bottom_frame.bind( 20383 callComponentDidMount 20384 ), callComponentDidUpdate = { 20385 react_stack_bottom_frame: function(finishedWork, instance, prevProps, prevState, snapshot) { 20386 try { 20387 instance.componentDidUpdate(prevProps, prevState, snapshot); 20388 } catch (error2) { 20389 captureCommitPhaseError(finishedWork, finishedWork.return, error2); 20390 } 20391 } 20392 }, callComponentDidUpdateInDEV = callComponentDidUpdate.react_stack_bottom_frame.bind( 20393 callComponentDidUpdate 20394 ), callComponentDidCatch = { 20395 react_stack_bottom_frame: function(instance, errorInfo) { 20396 var stack = errorInfo.stack; 20397 instance.componentDidCatch(errorInfo.value, { 20398 componentStack: null !== stack ? stack : "" 20399 }); 20400 } 20401 }, callComponentDidCatchInDEV = callComponentDidCatch.react_stack_bottom_frame.bind( 20402 callComponentDidCatch 20403 ), callComponentWillUnmount = { 20404 react_stack_bottom_frame: function(current2, nearestMountedAncestor, instance) { 20405 try { 20406 instance.componentWillUnmount(); 20407 } catch (error2) { 20408 captureCommitPhaseError(current2, nearestMountedAncestor, error2); 20409 } 20410 } 20411 }, callComponentWillUnmountInDEV = callComponentWillUnmount.react_stack_bottom_frame.bind( 20412 callComponentWillUnmount 20413 ), callCreate = { 20414 react_stack_bottom_frame: function(effect) { 20415 var create = effect.create; 20416 effect = effect.inst; 20417 create = create(); 20418 return effect.destroy = create; 20419 } 20420 }, callCreateInDEV = callCreate.react_stack_bottom_frame.bind(callCreate), callDestroy = { 20421 react_stack_bottom_frame: function(current2, nearestMountedAncestor, destroy) { 20422 try { 20423 destroy(); 20424 } catch (error2) { 20425 captureCommitPhaseError(current2, nearestMountedAncestor, error2); 20426 } 20427 } 20428 }, callDestroyInDEV = callDestroy.react_stack_bottom_frame.bind(callDestroy), callLazyInit = { 20429 react_stack_bottom_frame: function(lazy) { 20430 var init = lazy._init; 20431 return init(lazy._payload); 20432 } 20433 }, callLazyInitInDEV = callLazyInit.react_stack_bottom_frame.bind(callLazyInit), SuspenseException = Error( 20434 "Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`." 20435 ), SuspenseyCommitException = Error( 20436 "Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React." 20437 ), SuspenseActionException = Error( 20438 "Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary." 20439 ), noopSuspenseyCommitThenable = { 20440 then: function() { 20441 console.error( 20442 'Internal React error: A listener was unexpectedly attached to a "noop" thenable. This is a bug in React. Please file an issue.' 20443 ); 20444 } 20445 }, suspendedThenable = null, needsToResetSuspendedThenableDEV = false, thenableState$1 = null, thenableIndexCounter$1 = 0, currentDebugInfo = null, didWarnAboutMaps; 20446 var didWarnAboutGenerators = didWarnAboutMaps = false; 20447 var ownerHasKeyUseWarning = {}; 20448 var ownerHasFunctionTypeWarning = {}; 20449 var ownerHasSymbolTypeWarning = {}; 20450 warnForMissingKey = function(returnFiber, workInProgress2, child) { 20451 if (null !== child && "object" === typeof child && child._store && (!child._store.validated && null == child.key || 2 === child._store.validated)) { 20452 if ("object" !== typeof child._store) 20453 throw Error( 20454 "React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue." 20455 ); 20456 child._store.validated = 1; 20457 var componentName2 = getComponentNameFromFiber(returnFiber), componentKey = componentName2 || "null"; 20458 if (!ownerHasKeyUseWarning[componentKey]) { 20459 ownerHasKeyUseWarning[componentKey] = true; 20460 child = child._owner; 20461 returnFiber = returnFiber._debugOwner; 20462 var currentComponentErrorInfo = ""; 20463 returnFiber && "number" === typeof returnFiber.tag && (componentKey = getComponentNameFromFiber(returnFiber)) && (currentComponentErrorInfo = "\n\nCheck the render method of `" + componentKey + "`."); 20464 currentComponentErrorInfo || componentName2 && (currentComponentErrorInfo = "\n\nCheck the top-level render call using <" + componentName2 + ">."); 20465 var childOwnerAppendix = ""; 20466 null != child && returnFiber !== child && (componentName2 = null, "number" === typeof child.tag ? componentName2 = getComponentNameFromFiber(child) : "string" === typeof child.name && (componentName2 = child.name), componentName2 && (childOwnerAppendix = " It was passed a child from " + componentName2 + ".")); 20467 runWithFiberInDEV(workInProgress2, function() { 20468 console.error( 20469 'Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', 20470 currentComponentErrorInfo, 20471 childOwnerAppendix 20472 ); 20473 }); 20474 } 20475 } 20476 }; 20477 var reconcileChildFibers = createChildReconciler(true), mountChildFibers = createChildReconciler(false), UpdateState = 0, ReplaceState = 1, ForceUpdate = 2, CaptureUpdate = 3, hasForceUpdate = false; 20478 var didWarnUpdateInsideUpdate = false; 20479 var currentlyProcessingQueue = null; 20480 var didReadFromEntangledAsyncAction = false, currentTreeHiddenStackCursor = createCursor(null), prevEntangledRenderLanesCursor = createCursor(0), suspenseHandlerStackCursor = createCursor(null), shellBoundary = null, SubtreeSuspenseContextMask = 1, ForceSuspenseFallback = 2, suspenseStackCursor = createCursor(0), NoFlags = 0, HasEffect = 1, Insertion = 2, Layout = 4, Passive = 8, didWarnUncachedGetSnapshot; 20481 var didWarnAboutMismatchedHooksForComponent = /* @__PURE__ */ new Set(); 20482 var didWarnAboutUseWrappedInTryCatch = /* @__PURE__ */ new Set(); 20483 var didWarnAboutAsyncClientComponent = /* @__PURE__ */ new Set(); 20484 var didWarnAboutUseFormState = /* @__PURE__ */ new Set(); 20485 var renderLanes = 0, currentlyRenderingFiber = null, currentHook = null, workInProgressHook = null, didScheduleRenderPhaseUpdate = false, didScheduleRenderPhaseUpdateDuringThisPass = false, shouldDoubleInvokeUserFnsInHooksDEV = false, localIdCounter = 0, thenableIndexCounter = 0, thenableState = null, globalClientIdCounter = 0, RE_RENDER_LIMIT = 25, currentHookNameInDev = null, hookTypesDev = null, hookTypesUpdateIndexDev = -1, ignorePreviousDependencies = false, ContextOnlyDispatcher = { 20486 readContext, 20487 use, 20488 useCallback: throwInvalidHookError, 20489 useContext: throwInvalidHookError, 20490 useEffect: throwInvalidHookError, 20491 useImperativeHandle: throwInvalidHookError, 20492 useLayoutEffect: throwInvalidHookError, 20493 useInsertionEffect: throwInvalidHookError, 20494 useMemo: throwInvalidHookError, 20495 useReducer: throwInvalidHookError, 20496 useRef: throwInvalidHookError, 20497 useState: throwInvalidHookError, 20498 useDebugValue: throwInvalidHookError, 20499 useDeferredValue: throwInvalidHookError, 20500 useTransition: throwInvalidHookError, 20501 useSyncExternalStore: throwInvalidHookError, 20502 useId: throwInvalidHookError, 20503 useHostTransitionStatus: throwInvalidHookError, 20504 useFormState: throwInvalidHookError, 20505 useActionState: throwInvalidHookError, 20506 useOptimistic: throwInvalidHookError, 20507 useMemoCache: throwInvalidHookError, 20508 useCacheRefresh: throwInvalidHookError 20509 }; 20510 ContextOnlyDispatcher.useEffectEvent = throwInvalidHookError; 20511 var HooksDispatcherOnMountInDEV = null, HooksDispatcherOnMountWithHookTypesInDEV = null, HooksDispatcherOnUpdateInDEV = null, HooksDispatcherOnRerenderInDEV = null, InvalidNestedHooksDispatcherOnMountInDEV = null, InvalidNestedHooksDispatcherOnUpdateInDEV = null, InvalidNestedHooksDispatcherOnRerenderInDEV = null; 20512 HooksDispatcherOnMountInDEV = { 20513 readContext: function(context) { 20514 return readContext(context); 20515 }, 20516 use, 20517 useCallback: function(callback, deps) { 20518 currentHookNameInDev = "useCallback"; 20519 mountHookTypesDev(); 20520 checkDepsAreArrayDev(deps); 20521 return mountCallback(callback, deps); 20522 }, 20523 useContext: function(context) { 20524 currentHookNameInDev = "useContext"; 20525 mountHookTypesDev(); 20526 return readContext(context); 20527 }, 20528 useEffect: function(create, deps) { 20529 currentHookNameInDev = "useEffect"; 20530 mountHookTypesDev(); 20531 checkDepsAreArrayDev(deps); 20532 return mountEffect(create, deps); 20533 }, 20534 useImperativeHandle: function(ref, create, deps) { 20535 currentHookNameInDev = "useImperativeHandle"; 20536 mountHookTypesDev(); 20537 checkDepsAreArrayDev(deps); 20538 return mountImperativeHandle(ref, create, deps); 20539 }, 20540 useInsertionEffect: function(create, deps) { 20541 currentHookNameInDev = "useInsertionEffect"; 20542 mountHookTypesDev(); 20543 checkDepsAreArrayDev(deps); 20544 mountEffectImpl(4, Insertion, create, deps); 20545 }, 20546 useLayoutEffect: function(create, deps) { 20547 currentHookNameInDev = "useLayoutEffect"; 20548 mountHookTypesDev(); 20549 checkDepsAreArrayDev(deps); 20550 return mountLayoutEffect(create, deps); 20551 }, 20552 useMemo: function(create, deps) { 20553 currentHookNameInDev = "useMemo"; 20554 mountHookTypesDev(); 20555 checkDepsAreArrayDev(deps); 20556 var prevDispatcher = ReactSharedInternals.H; 20557 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20558 try { 20559 return mountMemo(create, deps); 20560 } finally { 20561 ReactSharedInternals.H = prevDispatcher; 20562 } 20563 }, 20564 useReducer: function(reducer, initialArg, init) { 20565 currentHookNameInDev = "useReducer"; 20566 mountHookTypesDev(); 20567 var prevDispatcher = ReactSharedInternals.H; 20568 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20569 try { 20570 return mountReducer(reducer, initialArg, init); 20571 } finally { 20572 ReactSharedInternals.H = prevDispatcher; 20573 } 20574 }, 20575 useRef: function(initialValue) { 20576 currentHookNameInDev = "useRef"; 20577 mountHookTypesDev(); 20578 return mountRef(initialValue); 20579 }, 20580 useState: function(initialState) { 20581 currentHookNameInDev = "useState"; 20582 mountHookTypesDev(); 20583 var prevDispatcher = ReactSharedInternals.H; 20584 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20585 try { 20586 return mountState(initialState); 20587 } finally { 20588 ReactSharedInternals.H = prevDispatcher; 20589 } 20590 }, 20591 useDebugValue: function() { 20592 currentHookNameInDev = "useDebugValue"; 20593 mountHookTypesDev(); 20594 }, 20595 useDeferredValue: function(value, initialValue) { 20596 currentHookNameInDev = "useDeferredValue"; 20597 mountHookTypesDev(); 20598 return mountDeferredValue(value, initialValue); 20599 }, 20600 useTransition: function() { 20601 currentHookNameInDev = "useTransition"; 20602 mountHookTypesDev(); 20603 return mountTransition(); 20604 }, 20605 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 20606 currentHookNameInDev = "useSyncExternalStore"; 20607 mountHookTypesDev(); 20608 return mountSyncExternalStore( 20609 subscribe, 20610 getSnapshot, 20611 getServerSnapshot 20612 ); 20613 }, 20614 useId: function() { 20615 currentHookNameInDev = "useId"; 20616 mountHookTypesDev(); 20617 return mountId(); 20618 }, 20619 useFormState: function(action, initialState) { 20620 currentHookNameInDev = "useFormState"; 20621 mountHookTypesDev(); 20622 warnOnUseFormStateInDev(); 20623 return mountActionState(action, initialState); 20624 }, 20625 useActionState: function(action, initialState) { 20626 currentHookNameInDev = "useActionState"; 20627 mountHookTypesDev(); 20628 return mountActionState(action, initialState); 20629 }, 20630 useOptimistic: function(passthrough) { 20631 currentHookNameInDev = "useOptimistic"; 20632 mountHookTypesDev(); 20633 return mountOptimistic(passthrough); 20634 }, 20635 useHostTransitionStatus, 20636 useMemoCache, 20637 useCacheRefresh: function() { 20638 currentHookNameInDev = "useCacheRefresh"; 20639 mountHookTypesDev(); 20640 return mountRefresh(); 20641 }, 20642 useEffectEvent: function(callback) { 20643 currentHookNameInDev = "useEffectEvent"; 20644 mountHookTypesDev(); 20645 return mountEvent(callback); 20646 } 20647 }; 20648 HooksDispatcherOnMountWithHookTypesInDEV = { 20649 readContext: function(context) { 20650 return readContext(context); 20651 }, 20652 use, 20653 useCallback: function(callback, deps) { 20654 currentHookNameInDev = "useCallback"; 20655 updateHookTypesDev(); 20656 return mountCallback(callback, deps); 20657 }, 20658 useContext: function(context) { 20659 currentHookNameInDev = "useContext"; 20660 updateHookTypesDev(); 20661 return readContext(context); 20662 }, 20663 useEffect: function(create, deps) { 20664 currentHookNameInDev = "useEffect"; 20665 updateHookTypesDev(); 20666 return mountEffect(create, deps); 20667 }, 20668 useImperativeHandle: function(ref, create, deps) { 20669 currentHookNameInDev = "useImperativeHandle"; 20670 updateHookTypesDev(); 20671 return mountImperativeHandle(ref, create, deps); 20672 }, 20673 useInsertionEffect: function(create, deps) { 20674 currentHookNameInDev = "useInsertionEffect"; 20675 updateHookTypesDev(); 20676 mountEffectImpl(4, Insertion, create, deps); 20677 }, 20678 useLayoutEffect: function(create, deps) { 20679 currentHookNameInDev = "useLayoutEffect"; 20680 updateHookTypesDev(); 20681 return mountLayoutEffect(create, deps); 20682 }, 20683 useMemo: function(create, deps) { 20684 currentHookNameInDev = "useMemo"; 20685 updateHookTypesDev(); 20686 var prevDispatcher = ReactSharedInternals.H; 20687 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20688 try { 20689 return mountMemo(create, deps); 20690 } finally { 20691 ReactSharedInternals.H = prevDispatcher; 20692 } 20693 }, 20694 useReducer: function(reducer, initialArg, init) { 20695 currentHookNameInDev = "useReducer"; 20696 updateHookTypesDev(); 20697 var prevDispatcher = ReactSharedInternals.H; 20698 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20699 try { 20700 return mountReducer(reducer, initialArg, init); 20701 } finally { 20702 ReactSharedInternals.H = prevDispatcher; 20703 } 20704 }, 20705 useRef: function(initialValue) { 20706 currentHookNameInDev = "useRef"; 20707 updateHookTypesDev(); 20708 return mountRef(initialValue); 20709 }, 20710 useState: function(initialState) { 20711 currentHookNameInDev = "useState"; 20712 updateHookTypesDev(); 20713 var prevDispatcher = ReactSharedInternals.H; 20714 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 20715 try { 20716 return mountState(initialState); 20717 } finally { 20718 ReactSharedInternals.H = prevDispatcher; 20719 } 20720 }, 20721 useDebugValue: function() { 20722 currentHookNameInDev = "useDebugValue"; 20723 updateHookTypesDev(); 20724 }, 20725 useDeferredValue: function(value, initialValue) { 20726 currentHookNameInDev = "useDeferredValue"; 20727 updateHookTypesDev(); 20728 return mountDeferredValue(value, initialValue); 20729 }, 20730 useTransition: function() { 20731 currentHookNameInDev = "useTransition"; 20732 updateHookTypesDev(); 20733 return mountTransition(); 20734 }, 20735 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 20736 currentHookNameInDev = "useSyncExternalStore"; 20737 updateHookTypesDev(); 20738 return mountSyncExternalStore( 20739 subscribe, 20740 getSnapshot, 20741 getServerSnapshot 20742 ); 20743 }, 20744 useId: function() { 20745 currentHookNameInDev = "useId"; 20746 updateHookTypesDev(); 20747 return mountId(); 20748 }, 20749 useActionState: function(action, initialState) { 20750 currentHookNameInDev = "useActionState"; 20751 updateHookTypesDev(); 20752 return mountActionState(action, initialState); 20753 }, 20754 useFormState: function(action, initialState) { 20755 currentHookNameInDev = "useFormState"; 20756 updateHookTypesDev(); 20757 warnOnUseFormStateInDev(); 20758 return mountActionState(action, initialState); 20759 }, 20760 useOptimistic: function(passthrough) { 20761 currentHookNameInDev = "useOptimistic"; 20762 updateHookTypesDev(); 20763 return mountOptimistic(passthrough); 20764 }, 20765 useHostTransitionStatus, 20766 useMemoCache, 20767 useCacheRefresh: function() { 20768 currentHookNameInDev = "useCacheRefresh"; 20769 updateHookTypesDev(); 20770 return mountRefresh(); 20771 }, 20772 useEffectEvent: function(callback) { 20773 currentHookNameInDev = "useEffectEvent"; 20774 updateHookTypesDev(); 20775 return mountEvent(callback); 20776 } 20777 }; 20778 HooksDispatcherOnUpdateInDEV = { 20779 readContext: function(context) { 20780 return readContext(context); 20781 }, 20782 use, 20783 useCallback: function(callback, deps) { 20784 currentHookNameInDev = "useCallback"; 20785 updateHookTypesDev(); 20786 return updateCallback(callback, deps); 20787 }, 20788 useContext: function(context) { 20789 currentHookNameInDev = "useContext"; 20790 updateHookTypesDev(); 20791 return readContext(context); 20792 }, 20793 useEffect: function(create, deps) { 20794 currentHookNameInDev = "useEffect"; 20795 updateHookTypesDev(); 20796 updateEffectImpl(2048, Passive, create, deps); 20797 }, 20798 useImperativeHandle: function(ref, create, deps) { 20799 currentHookNameInDev = "useImperativeHandle"; 20800 updateHookTypesDev(); 20801 return updateImperativeHandle(ref, create, deps); 20802 }, 20803 useInsertionEffect: function(create, deps) { 20804 currentHookNameInDev = "useInsertionEffect"; 20805 updateHookTypesDev(); 20806 return updateEffectImpl(4, Insertion, create, deps); 20807 }, 20808 useLayoutEffect: function(create, deps) { 20809 currentHookNameInDev = "useLayoutEffect"; 20810 updateHookTypesDev(); 20811 return updateEffectImpl(4, Layout, create, deps); 20812 }, 20813 useMemo: function(create, deps) { 20814 currentHookNameInDev = "useMemo"; 20815 updateHookTypesDev(); 20816 var prevDispatcher = ReactSharedInternals.H; 20817 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 20818 try { 20819 return updateMemo(create, deps); 20820 } finally { 20821 ReactSharedInternals.H = prevDispatcher; 20822 } 20823 }, 20824 useReducer: function(reducer, initialArg, init) { 20825 currentHookNameInDev = "useReducer"; 20826 updateHookTypesDev(); 20827 var prevDispatcher = ReactSharedInternals.H; 20828 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 20829 try { 20830 return updateReducer(reducer, initialArg, init); 20831 } finally { 20832 ReactSharedInternals.H = prevDispatcher; 20833 } 20834 }, 20835 useRef: function() { 20836 currentHookNameInDev = "useRef"; 20837 updateHookTypesDev(); 20838 return updateWorkInProgressHook().memoizedState; 20839 }, 20840 useState: function() { 20841 currentHookNameInDev = "useState"; 20842 updateHookTypesDev(); 20843 var prevDispatcher = ReactSharedInternals.H; 20844 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 20845 try { 20846 return updateReducer(basicStateReducer); 20847 } finally { 20848 ReactSharedInternals.H = prevDispatcher; 20849 } 20850 }, 20851 useDebugValue: function() { 20852 currentHookNameInDev = "useDebugValue"; 20853 updateHookTypesDev(); 20854 }, 20855 useDeferredValue: function(value, initialValue) { 20856 currentHookNameInDev = "useDeferredValue"; 20857 updateHookTypesDev(); 20858 return updateDeferredValue(value, initialValue); 20859 }, 20860 useTransition: function() { 20861 currentHookNameInDev = "useTransition"; 20862 updateHookTypesDev(); 20863 return updateTransition(); 20864 }, 20865 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 20866 currentHookNameInDev = "useSyncExternalStore"; 20867 updateHookTypesDev(); 20868 return updateSyncExternalStore( 20869 subscribe, 20870 getSnapshot, 20871 getServerSnapshot 20872 ); 20873 }, 20874 useId: function() { 20875 currentHookNameInDev = "useId"; 20876 updateHookTypesDev(); 20877 return updateWorkInProgressHook().memoizedState; 20878 }, 20879 useFormState: function(action) { 20880 currentHookNameInDev = "useFormState"; 20881 updateHookTypesDev(); 20882 warnOnUseFormStateInDev(); 20883 return updateActionState(action); 20884 }, 20885 useActionState: function(action) { 20886 currentHookNameInDev = "useActionState"; 20887 updateHookTypesDev(); 20888 return updateActionState(action); 20889 }, 20890 useOptimistic: function(passthrough, reducer) { 20891 currentHookNameInDev = "useOptimistic"; 20892 updateHookTypesDev(); 20893 return updateOptimistic(passthrough, reducer); 20894 }, 20895 useHostTransitionStatus, 20896 useMemoCache, 20897 useCacheRefresh: function() { 20898 currentHookNameInDev = "useCacheRefresh"; 20899 updateHookTypesDev(); 20900 return updateWorkInProgressHook().memoizedState; 20901 }, 20902 useEffectEvent: function(callback) { 20903 currentHookNameInDev = "useEffectEvent"; 20904 updateHookTypesDev(); 20905 return updateEvent(callback); 20906 } 20907 }; 20908 HooksDispatcherOnRerenderInDEV = { 20909 readContext: function(context) { 20910 return readContext(context); 20911 }, 20912 use, 20913 useCallback: function(callback, deps) { 20914 currentHookNameInDev = "useCallback"; 20915 updateHookTypesDev(); 20916 return updateCallback(callback, deps); 20917 }, 20918 useContext: function(context) { 20919 currentHookNameInDev = "useContext"; 20920 updateHookTypesDev(); 20921 return readContext(context); 20922 }, 20923 useEffect: function(create, deps) { 20924 currentHookNameInDev = "useEffect"; 20925 updateHookTypesDev(); 20926 updateEffectImpl(2048, Passive, create, deps); 20927 }, 20928 useImperativeHandle: function(ref, create, deps) { 20929 currentHookNameInDev = "useImperativeHandle"; 20930 updateHookTypesDev(); 20931 return updateImperativeHandle(ref, create, deps); 20932 }, 20933 useInsertionEffect: function(create, deps) { 20934 currentHookNameInDev = "useInsertionEffect"; 20935 updateHookTypesDev(); 20936 return updateEffectImpl(4, Insertion, create, deps); 20937 }, 20938 useLayoutEffect: function(create, deps) { 20939 currentHookNameInDev = "useLayoutEffect"; 20940 updateHookTypesDev(); 20941 return updateEffectImpl(4, Layout, create, deps); 20942 }, 20943 useMemo: function(create, deps) { 20944 currentHookNameInDev = "useMemo"; 20945 updateHookTypesDev(); 20946 var prevDispatcher = ReactSharedInternals.H; 20947 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV; 20948 try { 20949 return updateMemo(create, deps); 20950 } finally { 20951 ReactSharedInternals.H = prevDispatcher; 20952 } 20953 }, 20954 useReducer: function(reducer, initialArg, init) { 20955 currentHookNameInDev = "useReducer"; 20956 updateHookTypesDev(); 20957 var prevDispatcher = ReactSharedInternals.H; 20958 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV; 20959 try { 20960 return rerenderReducer(reducer, initialArg, init); 20961 } finally { 20962 ReactSharedInternals.H = prevDispatcher; 20963 } 20964 }, 20965 useRef: function() { 20966 currentHookNameInDev = "useRef"; 20967 updateHookTypesDev(); 20968 return updateWorkInProgressHook().memoizedState; 20969 }, 20970 useState: function() { 20971 currentHookNameInDev = "useState"; 20972 updateHookTypesDev(); 20973 var prevDispatcher = ReactSharedInternals.H; 20974 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnRerenderInDEV; 20975 try { 20976 return rerenderReducer(basicStateReducer); 20977 } finally { 20978 ReactSharedInternals.H = prevDispatcher; 20979 } 20980 }, 20981 useDebugValue: function() { 20982 currentHookNameInDev = "useDebugValue"; 20983 updateHookTypesDev(); 20984 }, 20985 useDeferredValue: function(value, initialValue) { 20986 currentHookNameInDev = "useDeferredValue"; 20987 updateHookTypesDev(); 20988 return rerenderDeferredValue(value, initialValue); 20989 }, 20990 useTransition: function() { 20991 currentHookNameInDev = "useTransition"; 20992 updateHookTypesDev(); 20993 return rerenderTransition(); 20994 }, 20995 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 20996 currentHookNameInDev = "useSyncExternalStore"; 20997 updateHookTypesDev(); 20998 return updateSyncExternalStore( 20999 subscribe, 21000 getSnapshot, 21001 getServerSnapshot 21002 ); 21003 }, 21004 useId: function() { 21005 currentHookNameInDev = "useId"; 21006 updateHookTypesDev(); 21007 return updateWorkInProgressHook().memoizedState; 21008 }, 21009 useFormState: function(action) { 21010 currentHookNameInDev = "useFormState"; 21011 updateHookTypesDev(); 21012 warnOnUseFormStateInDev(); 21013 return rerenderActionState(action); 21014 }, 21015 useActionState: function(action) { 21016 currentHookNameInDev = "useActionState"; 21017 updateHookTypesDev(); 21018 return rerenderActionState(action); 21019 }, 21020 useOptimistic: function(passthrough, reducer) { 21021 currentHookNameInDev = "useOptimistic"; 21022 updateHookTypesDev(); 21023 return rerenderOptimistic(passthrough, reducer); 21024 }, 21025 useHostTransitionStatus, 21026 useMemoCache, 21027 useCacheRefresh: function() { 21028 currentHookNameInDev = "useCacheRefresh"; 21029 updateHookTypesDev(); 21030 return updateWorkInProgressHook().memoizedState; 21031 }, 21032 useEffectEvent: function(callback) { 21033 currentHookNameInDev = "useEffectEvent"; 21034 updateHookTypesDev(); 21035 return updateEvent(callback); 21036 } 21037 }; 21038 InvalidNestedHooksDispatcherOnMountInDEV = { 21039 readContext: function(context) { 21040 warnInvalidContextAccess(); 21041 return readContext(context); 21042 }, 21043 use: function(usable) { 21044 warnInvalidHookAccess(); 21045 return use(usable); 21046 }, 21047 useCallback: function(callback, deps) { 21048 currentHookNameInDev = "useCallback"; 21049 warnInvalidHookAccess(); 21050 mountHookTypesDev(); 21051 return mountCallback(callback, deps); 21052 }, 21053 useContext: function(context) { 21054 currentHookNameInDev = "useContext"; 21055 warnInvalidHookAccess(); 21056 mountHookTypesDev(); 21057 return readContext(context); 21058 }, 21059 useEffect: function(create, deps) { 21060 currentHookNameInDev = "useEffect"; 21061 warnInvalidHookAccess(); 21062 mountHookTypesDev(); 21063 return mountEffect(create, deps); 21064 }, 21065 useImperativeHandle: function(ref, create, deps) { 21066 currentHookNameInDev = "useImperativeHandle"; 21067 warnInvalidHookAccess(); 21068 mountHookTypesDev(); 21069 return mountImperativeHandle(ref, create, deps); 21070 }, 21071 useInsertionEffect: function(create, deps) { 21072 currentHookNameInDev = "useInsertionEffect"; 21073 warnInvalidHookAccess(); 21074 mountHookTypesDev(); 21075 mountEffectImpl(4, Insertion, create, deps); 21076 }, 21077 useLayoutEffect: function(create, deps) { 21078 currentHookNameInDev = "useLayoutEffect"; 21079 warnInvalidHookAccess(); 21080 mountHookTypesDev(); 21081 return mountLayoutEffect(create, deps); 21082 }, 21083 useMemo: function(create, deps) { 21084 currentHookNameInDev = "useMemo"; 21085 warnInvalidHookAccess(); 21086 mountHookTypesDev(); 21087 var prevDispatcher = ReactSharedInternals.H; 21088 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 21089 try { 21090 return mountMemo(create, deps); 21091 } finally { 21092 ReactSharedInternals.H = prevDispatcher; 21093 } 21094 }, 21095 useReducer: function(reducer, initialArg, init) { 21096 currentHookNameInDev = "useReducer"; 21097 warnInvalidHookAccess(); 21098 mountHookTypesDev(); 21099 var prevDispatcher = ReactSharedInternals.H; 21100 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 21101 try { 21102 return mountReducer(reducer, initialArg, init); 21103 } finally { 21104 ReactSharedInternals.H = prevDispatcher; 21105 } 21106 }, 21107 useRef: function(initialValue) { 21108 currentHookNameInDev = "useRef"; 21109 warnInvalidHookAccess(); 21110 mountHookTypesDev(); 21111 return mountRef(initialValue); 21112 }, 21113 useState: function(initialState) { 21114 currentHookNameInDev = "useState"; 21115 warnInvalidHookAccess(); 21116 mountHookTypesDev(); 21117 var prevDispatcher = ReactSharedInternals.H; 21118 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnMountInDEV; 21119 try { 21120 return mountState(initialState); 21121 } finally { 21122 ReactSharedInternals.H = prevDispatcher; 21123 } 21124 }, 21125 useDebugValue: function() { 21126 currentHookNameInDev = "useDebugValue"; 21127 warnInvalidHookAccess(); 21128 mountHookTypesDev(); 21129 }, 21130 useDeferredValue: function(value, initialValue) { 21131 currentHookNameInDev = "useDeferredValue"; 21132 warnInvalidHookAccess(); 21133 mountHookTypesDev(); 21134 return mountDeferredValue(value, initialValue); 21135 }, 21136 useTransition: function() { 21137 currentHookNameInDev = "useTransition"; 21138 warnInvalidHookAccess(); 21139 mountHookTypesDev(); 21140 return mountTransition(); 21141 }, 21142 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 21143 currentHookNameInDev = "useSyncExternalStore"; 21144 warnInvalidHookAccess(); 21145 mountHookTypesDev(); 21146 return mountSyncExternalStore( 21147 subscribe, 21148 getSnapshot, 21149 getServerSnapshot 21150 ); 21151 }, 21152 useId: function() { 21153 currentHookNameInDev = "useId"; 21154 warnInvalidHookAccess(); 21155 mountHookTypesDev(); 21156 return mountId(); 21157 }, 21158 useFormState: function(action, initialState) { 21159 currentHookNameInDev = "useFormState"; 21160 warnInvalidHookAccess(); 21161 mountHookTypesDev(); 21162 return mountActionState(action, initialState); 21163 }, 21164 useActionState: function(action, initialState) { 21165 currentHookNameInDev = "useActionState"; 21166 warnInvalidHookAccess(); 21167 mountHookTypesDev(); 21168 return mountActionState(action, initialState); 21169 }, 21170 useOptimistic: function(passthrough) { 21171 currentHookNameInDev = "useOptimistic"; 21172 warnInvalidHookAccess(); 21173 mountHookTypesDev(); 21174 return mountOptimistic(passthrough); 21175 }, 21176 useMemoCache: function(size) { 21177 warnInvalidHookAccess(); 21178 return useMemoCache(size); 21179 }, 21180 useHostTransitionStatus, 21181 useCacheRefresh: function() { 21182 currentHookNameInDev = "useCacheRefresh"; 21183 mountHookTypesDev(); 21184 return mountRefresh(); 21185 }, 21186 useEffectEvent: function(callback) { 21187 currentHookNameInDev = "useEffectEvent"; 21188 warnInvalidHookAccess(); 21189 mountHookTypesDev(); 21190 return mountEvent(callback); 21191 } 21192 }; 21193 InvalidNestedHooksDispatcherOnUpdateInDEV = { 21194 readContext: function(context) { 21195 warnInvalidContextAccess(); 21196 return readContext(context); 21197 }, 21198 use: function(usable) { 21199 warnInvalidHookAccess(); 21200 return use(usable); 21201 }, 21202 useCallback: function(callback, deps) { 21203 currentHookNameInDev = "useCallback"; 21204 warnInvalidHookAccess(); 21205 updateHookTypesDev(); 21206 return updateCallback(callback, deps); 21207 }, 21208 useContext: function(context) { 21209 currentHookNameInDev = "useContext"; 21210 warnInvalidHookAccess(); 21211 updateHookTypesDev(); 21212 return readContext(context); 21213 }, 21214 useEffect: function(create, deps) { 21215 currentHookNameInDev = "useEffect"; 21216 warnInvalidHookAccess(); 21217 updateHookTypesDev(); 21218 updateEffectImpl(2048, Passive, create, deps); 21219 }, 21220 useImperativeHandle: function(ref, create, deps) { 21221 currentHookNameInDev = "useImperativeHandle"; 21222 warnInvalidHookAccess(); 21223 updateHookTypesDev(); 21224 return updateImperativeHandle(ref, create, deps); 21225 }, 21226 useInsertionEffect: function(create, deps) { 21227 currentHookNameInDev = "useInsertionEffect"; 21228 warnInvalidHookAccess(); 21229 updateHookTypesDev(); 21230 return updateEffectImpl(4, Insertion, create, deps); 21231 }, 21232 useLayoutEffect: function(create, deps) { 21233 currentHookNameInDev = "useLayoutEffect"; 21234 warnInvalidHookAccess(); 21235 updateHookTypesDev(); 21236 return updateEffectImpl(4, Layout, create, deps); 21237 }, 21238 useMemo: function(create, deps) { 21239 currentHookNameInDev = "useMemo"; 21240 warnInvalidHookAccess(); 21241 updateHookTypesDev(); 21242 var prevDispatcher = ReactSharedInternals.H; 21243 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21244 try { 21245 return updateMemo(create, deps); 21246 } finally { 21247 ReactSharedInternals.H = prevDispatcher; 21248 } 21249 }, 21250 useReducer: function(reducer, initialArg, init) { 21251 currentHookNameInDev = "useReducer"; 21252 warnInvalidHookAccess(); 21253 updateHookTypesDev(); 21254 var prevDispatcher = ReactSharedInternals.H; 21255 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21256 try { 21257 return updateReducer(reducer, initialArg, init); 21258 } finally { 21259 ReactSharedInternals.H = prevDispatcher; 21260 } 21261 }, 21262 useRef: function() { 21263 currentHookNameInDev = "useRef"; 21264 warnInvalidHookAccess(); 21265 updateHookTypesDev(); 21266 return updateWorkInProgressHook().memoizedState; 21267 }, 21268 useState: function() { 21269 currentHookNameInDev = "useState"; 21270 warnInvalidHookAccess(); 21271 updateHookTypesDev(); 21272 var prevDispatcher = ReactSharedInternals.H; 21273 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21274 try { 21275 return updateReducer(basicStateReducer); 21276 } finally { 21277 ReactSharedInternals.H = prevDispatcher; 21278 } 21279 }, 21280 useDebugValue: function() { 21281 currentHookNameInDev = "useDebugValue"; 21282 warnInvalidHookAccess(); 21283 updateHookTypesDev(); 21284 }, 21285 useDeferredValue: function(value, initialValue) { 21286 currentHookNameInDev = "useDeferredValue"; 21287 warnInvalidHookAccess(); 21288 updateHookTypesDev(); 21289 return updateDeferredValue(value, initialValue); 21290 }, 21291 useTransition: function() { 21292 currentHookNameInDev = "useTransition"; 21293 warnInvalidHookAccess(); 21294 updateHookTypesDev(); 21295 return updateTransition(); 21296 }, 21297 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 21298 currentHookNameInDev = "useSyncExternalStore"; 21299 warnInvalidHookAccess(); 21300 updateHookTypesDev(); 21301 return updateSyncExternalStore( 21302 subscribe, 21303 getSnapshot, 21304 getServerSnapshot 21305 ); 21306 }, 21307 useId: function() { 21308 currentHookNameInDev = "useId"; 21309 warnInvalidHookAccess(); 21310 updateHookTypesDev(); 21311 return updateWorkInProgressHook().memoizedState; 21312 }, 21313 useFormState: function(action) { 21314 currentHookNameInDev = "useFormState"; 21315 warnInvalidHookAccess(); 21316 updateHookTypesDev(); 21317 return updateActionState(action); 21318 }, 21319 useActionState: function(action) { 21320 currentHookNameInDev = "useActionState"; 21321 warnInvalidHookAccess(); 21322 updateHookTypesDev(); 21323 return updateActionState(action); 21324 }, 21325 useOptimistic: function(passthrough, reducer) { 21326 currentHookNameInDev = "useOptimistic"; 21327 warnInvalidHookAccess(); 21328 updateHookTypesDev(); 21329 return updateOptimistic(passthrough, reducer); 21330 }, 21331 useMemoCache: function(size) { 21332 warnInvalidHookAccess(); 21333 return useMemoCache(size); 21334 }, 21335 useHostTransitionStatus, 21336 useCacheRefresh: function() { 21337 currentHookNameInDev = "useCacheRefresh"; 21338 updateHookTypesDev(); 21339 return updateWorkInProgressHook().memoizedState; 21340 }, 21341 useEffectEvent: function(callback) { 21342 currentHookNameInDev = "useEffectEvent"; 21343 warnInvalidHookAccess(); 21344 updateHookTypesDev(); 21345 return updateEvent(callback); 21346 } 21347 }; 21348 InvalidNestedHooksDispatcherOnRerenderInDEV = { 21349 readContext: function(context) { 21350 warnInvalidContextAccess(); 21351 return readContext(context); 21352 }, 21353 use: function(usable) { 21354 warnInvalidHookAccess(); 21355 return use(usable); 21356 }, 21357 useCallback: function(callback, deps) { 21358 currentHookNameInDev = "useCallback"; 21359 warnInvalidHookAccess(); 21360 updateHookTypesDev(); 21361 return updateCallback(callback, deps); 21362 }, 21363 useContext: function(context) { 21364 currentHookNameInDev = "useContext"; 21365 warnInvalidHookAccess(); 21366 updateHookTypesDev(); 21367 return readContext(context); 21368 }, 21369 useEffect: function(create, deps) { 21370 currentHookNameInDev = "useEffect"; 21371 warnInvalidHookAccess(); 21372 updateHookTypesDev(); 21373 updateEffectImpl(2048, Passive, create, deps); 21374 }, 21375 useImperativeHandle: function(ref, create, deps) { 21376 currentHookNameInDev = "useImperativeHandle"; 21377 warnInvalidHookAccess(); 21378 updateHookTypesDev(); 21379 return updateImperativeHandle(ref, create, deps); 21380 }, 21381 useInsertionEffect: function(create, deps) { 21382 currentHookNameInDev = "useInsertionEffect"; 21383 warnInvalidHookAccess(); 21384 updateHookTypesDev(); 21385 return updateEffectImpl(4, Insertion, create, deps); 21386 }, 21387 useLayoutEffect: function(create, deps) { 21388 currentHookNameInDev = "useLayoutEffect"; 21389 warnInvalidHookAccess(); 21390 updateHookTypesDev(); 21391 return updateEffectImpl(4, Layout, create, deps); 21392 }, 21393 useMemo: function(create, deps) { 21394 currentHookNameInDev = "useMemo"; 21395 warnInvalidHookAccess(); 21396 updateHookTypesDev(); 21397 var prevDispatcher = ReactSharedInternals.H; 21398 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21399 try { 21400 return updateMemo(create, deps); 21401 } finally { 21402 ReactSharedInternals.H = prevDispatcher; 21403 } 21404 }, 21405 useReducer: function(reducer, initialArg, init) { 21406 currentHookNameInDev = "useReducer"; 21407 warnInvalidHookAccess(); 21408 updateHookTypesDev(); 21409 var prevDispatcher = ReactSharedInternals.H; 21410 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21411 try { 21412 return rerenderReducer(reducer, initialArg, init); 21413 } finally { 21414 ReactSharedInternals.H = prevDispatcher; 21415 } 21416 }, 21417 useRef: function() { 21418 currentHookNameInDev = "useRef"; 21419 warnInvalidHookAccess(); 21420 updateHookTypesDev(); 21421 return updateWorkInProgressHook().memoizedState; 21422 }, 21423 useState: function() { 21424 currentHookNameInDev = "useState"; 21425 warnInvalidHookAccess(); 21426 updateHookTypesDev(); 21427 var prevDispatcher = ReactSharedInternals.H; 21428 ReactSharedInternals.H = InvalidNestedHooksDispatcherOnUpdateInDEV; 21429 try { 21430 return rerenderReducer(basicStateReducer); 21431 } finally { 21432 ReactSharedInternals.H = prevDispatcher; 21433 } 21434 }, 21435 useDebugValue: function() { 21436 currentHookNameInDev = "useDebugValue"; 21437 warnInvalidHookAccess(); 21438 updateHookTypesDev(); 21439 }, 21440 useDeferredValue: function(value, initialValue) { 21441 currentHookNameInDev = "useDeferredValue"; 21442 warnInvalidHookAccess(); 21443 updateHookTypesDev(); 21444 return rerenderDeferredValue(value, initialValue); 21445 }, 21446 useTransition: function() { 21447 currentHookNameInDev = "useTransition"; 21448 warnInvalidHookAccess(); 21449 updateHookTypesDev(); 21450 return rerenderTransition(); 21451 }, 21452 useSyncExternalStore: function(subscribe, getSnapshot, getServerSnapshot) { 21453 currentHookNameInDev = "useSyncExternalStore"; 21454 warnInvalidHookAccess(); 21455 updateHookTypesDev(); 21456 return updateSyncExternalStore( 21457 subscribe, 21458 getSnapshot, 21459 getServerSnapshot 21460 ); 21461 }, 21462 useId: function() { 21463 currentHookNameInDev = "useId"; 21464 warnInvalidHookAccess(); 21465 updateHookTypesDev(); 21466 return updateWorkInProgressHook().memoizedState; 21467 }, 21468 useFormState: function(action) { 21469 currentHookNameInDev = "useFormState"; 21470 warnInvalidHookAccess(); 21471 updateHookTypesDev(); 21472 return rerenderActionState(action); 21473 }, 21474 useActionState: function(action) { 21475 currentHookNameInDev = "useActionState"; 21476 warnInvalidHookAccess(); 21477 updateHookTypesDev(); 21478 return rerenderActionState(action); 21479 }, 21480 useOptimistic: function(passthrough, reducer) { 21481 currentHookNameInDev = "useOptimistic"; 21482 warnInvalidHookAccess(); 21483 updateHookTypesDev(); 21484 return rerenderOptimistic(passthrough, reducer); 21485 }, 21486 useMemoCache: function(size) { 21487 warnInvalidHookAccess(); 21488 return useMemoCache(size); 21489 }, 21490 useHostTransitionStatus, 21491 useCacheRefresh: function() { 21492 currentHookNameInDev = "useCacheRefresh"; 21493 updateHookTypesDev(); 21494 return updateWorkInProgressHook().memoizedState; 21495 }, 21496 useEffectEvent: function(callback) { 21497 currentHookNameInDev = "useEffectEvent"; 21498 warnInvalidHookAccess(); 21499 updateHookTypesDev(); 21500 return updateEvent(callback); 21501 } 21502 }; 21503 var fakeInternalInstance = {}; 21504 var didWarnAboutStateAssignmentForComponent = /* @__PURE__ */ new Set(); 21505 var didWarnAboutUninitializedState = /* @__PURE__ */ new Set(); 21506 var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = /* @__PURE__ */ new Set(); 21507 var didWarnAboutLegacyLifecyclesAndDerivedState = /* @__PURE__ */ new Set(); 21508 var didWarnAboutDirectlyAssigningPropsToState = /* @__PURE__ */ new Set(); 21509 var didWarnAboutUndefinedDerivedState = /* @__PURE__ */ new Set(); 21510 var didWarnAboutContextTypes$1 = /* @__PURE__ */ new Set(); 21511 var didWarnAboutChildContextTypes = /* @__PURE__ */ new Set(); 21512 var didWarnAboutInvalidateContextType = /* @__PURE__ */ new Set(); 21513 var didWarnOnInvalidCallback = /* @__PURE__ */ new Set(); 21514 Object.freeze(fakeInternalInstance); 21515 var classComponentUpdater = { 21516 enqueueSetState: function(inst, payload, callback) { 21517 inst = inst._reactInternals; 21518 var lane = requestUpdateLane(inst), update = createUpdate(lane); 21519 update.payload = payload; 21520 void 0 !== callback && null !== callback && (warnOnInvalidCallback(callback), update.callback = callback); 21521 payload = enqueueUpdate(inst, update, lane); 21522 null !== payload && (startUpdateTimerByLane(lane, "this.setState()", inst), scheduleUpdateOnFiber(payload, inst, lane), entangleTransitions(payload, inst, lane)); 21523 }, 21524 enqueueReplaceState: function(inst, payload, callback) { 21525 inst = inst._reactInternals; 21526 var lane = requestUpdateLane(inst), update = createUpdate(lane); 21527 update.tag = ReplaceState; 21528 update.payload = payload; 21529 void 0 !== callback && null !== callback && (warnOnInvalidCallback(callback), update.callback = callback); 21530 payload = enqueueUpdate(inst, update, lane); 21531 null !== payload && (startUpdateTimerByLane(lane, "this.replaceState()", inst), scheduleUpdateOnFiber(payload, inst, lane), entangleTransitions(payload, inst, lane)); 21532 }, 21533 enqueueForceUpdate: function(inst, callback) { 21534 inst = inst._reactInternals; 21535 var lane = requestUpdateLane(inst), update = createUpdate(lane); 21536 update.tag = ForceUpdate; 21537 void 0 !== callback && null !== callback && (warnOnInvalidCallback(callback), update.callback = callback); 21538 callback = enqueueUpdate(inst, update, lane); 21539 null !== callback && (startUpdateTimerByLane(lane, "this.forceUpdate()", inst), scheduleUpdateOnFiber(callback, inst, lane), entangleTransitions(callback, inst, lane)); 21540 } 21541 }, componentName = null, errorBoundaryName = null, SelectiveHydrationException = Error( 21542 "This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue." 21543 ), didReceiveUpdate = false; 21544 var didWarnAboutBadClass = {}; 21545 var didWarnAboutContextTypeOnFunctionComponent = {}; 21546 var didWarnAboutContextTypes = {}; 21547 var didWarnAboutGetDerivedStateOnFunctionComponent = {}; 21548 var didWarnAboutReassigningProps = false; 21549 var didWarnAboutRevealOrder = {}; 21550 var didWarnAboutTailOptions = {}; 21551 var SUSPENDED_MARKER = { 21552 dehydrated: null, 21553 treeContext: null, 21554 retryLane: 0, 21555 hydrationErrors: null 21556 }, hasWarnedAboutUsingNoValuePropOnContextProvider = false, didWarnAboutUndefinedSnapshotBeforeUpdate = null; 21557 didWarnAboutUndefinedSnapshotBeforeUpdate = /* @__PURE__ */ new Set(); 21558 var offscreenSubtreeIsHidden = false, offscreenSubtreeWasHidden = false, needsFormReset = false, PossiblyWeakSet = "function" === typeof WeakSet ? WeakSet : Set, nextEffect = null, inProgressLanes = null, inProgressRoot = null, hostParent = null, hostParentIsContainer = false, currentHoistableRoot = null, inHydratedSubtree = false, suspenseyCommitFlag = 8192, DefaultAsyncDispatcher = { 21559 getCacheForType: function(resourceType) { 21560 var cache2 = readContext(CacheContext), cacheForType = cache2.data.get(resourceType); 21561 void 0 === cacheForType && (cacheForType = resourceType(), cache2.data.set(resourceType, cacheForType)); 21562 return cacheForType; 21563 }, 21564 cacheSignal: function() { 21565 return readContext(CacheContext).controller.signal; 21566 }, 21567 getOwner: function() { 21568 return current; 21569 } 21570 }; 21571 if ("function" === typeof Symbol && Symbol.for) { 21572 var symbolFor = Symbol.for; 21573 symbolFor("selector.component"); 21574 symbolFor("selector.has_pseudo_class"); 21575 symbolFor("selector.role"); 21576 symbolFor("selector.test_id"); 21577 symbolFor("selector.text"); 21578 } 21579 var commitHooks = [], PossiblyWeakMap = "function" === typeof WeakMap ? WeakMap : Map, NoContext = 0, RenderContext = 2, CommitContext = 4, RootInProgress = 0, RootFatalErrored = 1, RootErrored = 2, RootSuspended = 3, RootSuspendedWithDelay = 4, RootSuspendedAtTheShell = 6, RootCompleted = 5, executionContext = NoContext, workInProgressRoot = null, workInProgress = null, workInProgressRootRenderLanes = 0, NotSuspended = 0, SuspendedOnError = 1, SuspendedOnData = 2, SuspendedOnImmediate = 3, SuspendedOnInstance = 4, SuspendedOnInstanceAndReadyToContinue = 5, SuspendedOnDeprecatedThrowPromise = 6, SuspendedAndReadyToContinue = 7, SuspendedOnHydration = 8, SuspendedOnAction = 9, workInProgressSuspendedReason = NotSuspended, workInProgressThrownValue = null, workInProgressRootDidSkipSuspendedSiblings = false, workInProgressRootIsPrerendering = false, workInProgressRootDidAttachPingListener = false, entangledRenderLanes = 0, workInProgressRootExitStatus = RootInProgress, workInProgressRootSkippedLanes = 0, workInProgressRootInterleavedUpdatedLanes = 0, workInProgressRootPingedLanes = 0, workInProgressDeferredLane = 0, workInProgressSuspendedRetryLanes = 0, workInProgressRootConcurrentErrors = null, workInProgressRootRecoverableErrors = null, workInProgressRootDidIncludeRecursiveRenderUpdate = false, globalMostRecentFallbackTime = 0, globalMostRecentTransitionTime = 0, FALLBACK_THROTTLE_MS = 300, workInProgressRootRenderTargetTime = Infinity, RENDER_TIMEOUT_MS = 500, workInProgressTransitions = null, workInProgressUpdateTask = null, legacyErrorBoundariesThatAlreadyFailed = null, IMMEDIATE_COMMIT = 0, ABORTED_VIEW_TRANSITION_COMMIT = 1, DELAYED_PASSIVE_COMMIT = 2, ANIMATION_STARTED_COMMIT = 3, NO_PENDING_EFFECTS = 0, PENDING_MUTATION_PHASE = 1, PENDING_LAYOUT_PHASE = 2, PENDING_AFTER_MUTATION_PHASE = 3, PENDING_SPAWNED_WORK = 4, PENDING_PASSIVE_PHASE = 5, pendingEffectsStatus = 0, pendingEffectsRoot = null, pendingFinishedWork = null, pendingEffectsLanes = 0, pendingEffectsRemainingLanes = 0, pendingEffectsRenderEndTime = -0, pendingPassiveTransitions = null, pendingRecoverableErrors = null, pendingSuspendedCommitReason = null, pendingDelayedCommitReason = IMMEDIATE_COMMIT, pendingSuspendedViewTransitionReason = null, NESTED_UPDATE_LIMIT = 50, nestedUpdateCount = 0, rootWithNestedUpdates = null, isFlushingPassiveEffects = false, didScheduleUpdateDuringPassiveEffects = false, NESTED_PASSIVE_UPDATE_LIMIT = 50, nestedPassiveUpdateCount = 0, rootWithPassiveNestedUpdates = null, isRunningInsertionEffect = false, didWarnStateUpdateForNotYetMountedComponent = null, didWarnAboutUpdateInRender = false; 21580 var didWarnAboutUpdateInRenderForAnotherComponent = /* @__PURE__ */ new Set(); 21581 var fakeActCallbackNode$1 = {}, firstScheduledRoot = null, lastScheduledRoot = null, didScheduleMicrotask = false, didScheduleMicrotask_act = false, mightHavePendingSyncWork = false, isFlushingWork = false, currentEventTransitionLane = 0, fakeActCallbackNode = {}; 21582 (function() { 21583 for (var i3 = 0; i3 < simpleEventPluginEvents.length; i3++) { 21584 var eventName = simpleEventPluginEvents[i3], domEventName = eventName.toLowerCase(); 21585 eventName = eventName[0].toUpperCase() + eventName.slice(1); 21586 registerSimpleEvent(domEventName, "on" + eventName); 21587 } 21588 registerSimpleEvent(ANIMATION_END, "onAnimationEnd"); 21589 registerSimpleEvent(ANIMATION_ITERATION, "onAnimationIteration"); 21590 registerSimpleEvent(ANIMATION_START, "onAnimationStart"); 21591 registerSimpleEvent("dblclick", "onDoubleClick"); 21592 registerSimpleEvent("focusin", "onFocus"); 21593 registerSimpleEvent("focusout", "onBlur"); 21594 registerSimpleEvent(TRANSITION_RUN, "onTransitionRun"); 21595 registerSimpleEvent(TRANSITION_START, "onTransitionStart"); 21596 registerSimpleEvent(TRANSITION_CANCEL, "onTransitionCancel"); 21597 registerSimpleEvent(TRANSITION_END, "onTransitionEnd"); 21598 })(); 21599 registerDirectEvent("onMouseEnter", ["mouseout", "mouseover"]); 21600 registerDirectEvent("onMouseLeave", ["mouseout", "mouseover"]); 21601 registerDirectEvent("onPointerEnter", ["pointerout", "pointerover"]); 21602 registerDirectEvent("onPointerLeave", ["pointerout", "pointerover"]); 21603 registerTwoPhaseEvent( 21604 "onChange", 21605 "change click focusin focusout input keydown keyup selectionchange".split( 21606 " " 21607 ) 21608 ); 21609 registerTwoPhaseEvent( 21610 "onSelect", 21611 "focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split( 21612 " " 21613 ) 21614 ); 21615 registerTwoPhaseEvent("onBeforeInput", [ 21616 "compositionend", 21617 "keypress", 21618 "textInput", 21619 "paste" 21620 ]); 21621 registerTwoPhaseEvent( 21622 "onCompositionEnd", 21623 "compositionend focusout keydown keypress keyup mousedown".split(" ") 21624 ); 21625 registerTwoPhaseEvent( 21626 "onCompositionStart", 21627 "compositionstart focusout keydown keypress keyup mousedown".split(" ") 21628 ); 21629 registerTwoPhaseEvent( 21630 "onCompositionUpdate", 21631 "compositionupdate focusout keydown keypress keyup mousedown".split(" ") 21632 ); 21633 var mediaEventTypes = "abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split( 21634 " " 21635 ), nonDelegatedEvents = new Set( 21636 "beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(mediaEventTypes) 21637 ), listeningMarker = "_reactListening" + Math.random().toString(36).slice(2), didWarnControlledToUncontrolled = false, didWarnUncontrolledToControlled = false, didWarnFormActionType = false, didWarnFormActionName = false, didWarnFormActionTarget = false, didWarnFormActionMethod = false, didWarnPopoverTargetObject = false; 21638 var didWarnForNewBooleanPropsWithEmptyValue = {}; 21639 var NORMALIZE_NEWLINES_REGEX = /\r\n?/g, NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g, xlinkNamespace = "http://www.w3.org/1999/xlink", xmlNamespace = "http://www.w3.org/XML/1998/namespace", EXPECTED_FORM_ACTION_URL = "javascript:throw new Error('React form unexpectedly submitted.')", SUPPRESS_HYDRATION_WARNING = "suppressHydrationWarning", ACTIVITY_START_DATA = "&", ACTIVITY_END_DATA = "/&", SUSPENSE_START_DATA = "$", SUSPENSE_END_DATA = "/$", SUSPENSE_PENDING_START_DATA = "$?", SUSPENSE_QUEUED_START_DATA = "$~", SUSPENSE_FALLBACK_START_DATA = "$!", PREAMBLE_CONTRIBUTION_HTML = "html", PREAMBLE_CONTRIBUTION_BODY = "body", PREAMBLE_CONTRIBUTION_HEAD = "head", FORM_STATE_IS_MATCHING = "F!", FORM_STATE_IS_NOT_MATCHING = "F", DOCUMENT_READY_STATE_LOADING = "loading", STYLE = "style", HostContextNamespaceNone = 0, HostContextNamespaceSvg = 1, HostContextNamespaceMath = 2, eventsEnabled = null, selectionInformation = null, warnedUnknownTags = { dialog: true, webview: true }, currentPopstateTransitionEvent = null, schedulerEvent = void 0, scheduleTimeout = "function" === typeof setTimeout ? setTimeout : void 0, cancelTimeout = "function" === typeof clearTimeout ? clearTimeout : void 0, noTimeout = -1, localPromise = "function" === typeof Promise ? Promise : void 0, scheduleMicrotask = "function" === typeof queueMicrotask ? queueMicrotask : "undefined" !== typeof localPromise ? function(callback) { 21640 return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick); 21641 } : scheduleTimeout, previousHydratableOnEnteringScopedSingleton = null, NotLoaded = 0, Loaded = 1, Errored = 2, Settled = 3, Inserted = 4, preloadPropsMap = /* @__PURE__ */ new Map(), preconnectsSet = /* @__PURE__ */ new Set(), previousDispatcher = ReactDOMSharedInternals.d; 21642 ReactDOMSharedInternals.d = { 21643 f: function() { 21644 var previousWasRendering = previousDispatcher.f(), wasRendering = flushSyncWork$1(); 21645 return previousWasRendering || wasRendering; 21646 }, 21647 r: function(form) { 21648 var formInst = getInstanceFromNode(form); 21649 null !== formInst && 5 === formInst.tag && "form" === formInst.type ? requestFormReset$1(formInst) : previousDispatcher.r(form); 21650 }, 21651 D: function(href) { 21652 previousDispatcher.D(href); 21653 preconnectAs("dns-prefetch", href, null); 21654 }, 21655 C: function(href, crossOrigin) { 21656 previousDispatcher.C(href, crossOrigin); 21657 preconnectAs("preconnect", href, crossOrigin); 21658 }, 21659 L: function(href, as3, options) { 21660 previousDispatcher.L(href, as3, options); 21661 var ownerDocument = globalDocument; 21662 if (ownerDocument && href && as3) { 21663 var preloadSelector = 'link[rel="preload"][as="' + escapeSelectorAttributeValueInsideDoubleQuotes(as3) + '"]'; 21664 "image" === as3 ? options && options.imageSrcSet ? (preloadSelector += '[imagesrcset="' + escapeSelectorAttributeValueInsideDoubleQuotes( 21665 options.imageSrcSet 21666 ) + '"]', "string" === typeof options.imageSizes && (preloadSelector += '[imagesizes="' + escapeSelectorAttributeValueInsideDoubleQuotes( 21667 options.imageSizes 21668 ) + '"]')) : preloadSelector += '[href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"]' : preloadSelector += '[href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"]'; 21669 var key = preloadSelector; 21670 switch (as3) { 21671 case "style": 21672 key = getStyleKey(href); 21673 break; 21674 case "script": 21675 key = getScriptKey(href); 21676 } 21677 preloadPropsMap.has(key) || (href = assign( 21678 { 21679 rel: "preload", 21680 href: "image" === as3 && options && options.imageSrcSet ? void 0 : href, 21681 as: as3 21682 }, 21683 options 21684 ), preloadPropsMap.set(key, href), null !== ownerDocument.querySelector(preloadSelector) || "style" === as3 && ownerDocument.querySelector( 21685 getStylesheetSelectorFromKey(key) 21686 ) || "script" === as3 && ownerDocument.querySelector(getScriptSelectorFromKey(key)) || (as3 = ownerDocument.createElement("link"), setInitialProperties(as3, "link", href), markNodeAsHoistable(as3), ownerDocument.head.appendChild(as3))); 21687 } 21688 }, 21689 m: function(href, options) { 21690 previousDispatcher.m(href, options); 21691 var ownerDocument = globalDocument; 21692 if (ownerDocument && href) { 21693 var as3 = options && "string" === typeof options.as ? options.as : "script", preloadSelector = 'link[rel="modulepreload"][as="' + escapeSelectorAttributeValueInsideDoubleQuotes(as3) + '"][href="' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '"]', key = preloadSelector; 21694 switch (as3) { 21695 case "audioworklet": 21696 case "paintworklet": 21697 case "serviceworker": 21698 case "sharedworker": 21699 case "worker": 21700 case "script": 21701 key = getScriptKey(href); 21702 } 21703 if (!preloadPropsMap.has(key) && (href = assign({ rel: "modulepreload", href }, options), preloadPropsMap.set(key, href), null === ownerDocument.querySelector(preloadSelector))) { 21704 switch (as3) { 21705 case "audioworklet": 21706 case "paintworklet": 21707 case "serviceworker": 21708 case "sharedworker": 21709 case "worker": 21710 case "script": 21711 if (ownerDocument.querySelector(getScriptSelectorFromKey(key))) 21712 return; 21713 } 21714 as3 = ownerDocument.createElement("link"); 21715 setInitialProperties(as3, "link", href); 21716 markNodeAsHoistable(as3); 21717 ownerDocument.head.appendChild(as3); 21718 } 21719 } 21720 }, 21721 X: function(src, options) { 21722 previousDispatcher.X(src, options); 21723 var ownerDocument = globalDocument; 21724 if (ownerDocument && src) { 21725 var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts, key = getScriptKey(src), resource = scripts.get(key); 21726 resource || (resource = ownerDocument.querySelector( 21727 getScriptSelectorFromKey(key) 21728 ), resource || (src = assign({ src, async: true }, options), (options = preloadPropsMap.get(key)) && adoptPreloadPropsForScript(src, options), resource = ownerDocument.createElement("script"), markNodeAsHoistable(resource), setInitialProperties(resource, "link", src), ownerDocument.head.appendChild(resource)), resource = { 21729 type: "script", 21730 instance: resource, 21731 count: 1, 21732 state: null 21733 }, scripts.set(key, resource)); 21734 } 21735 }, 21736 S: function(href, precedence, options) { 21737 previousDispatcher.S(href, precedence, options); 21738 var ownerDocument = globalDocument; 21739 if (ownerDocument && href) { 21740 var styles = getResourcesFromRoot(ownerDocument).hoistableStyles, key = getStyleKey(href); 21741 precedence = precedence || "default"; 21742 var resource = styles.get(key); 21743 if (!resource) { 21744 var state = { loading: NotLoaded, preload: null }; 21745 if (resource = ownerDocument.querySelector( 21746 getStylesheetSelectorFromKey(key) 21747 )) 21748 state.loading = Loaded | Inserted; 21749 else { 21750 href = assign( 21751 { 21752 rel: "stylesheet", 21753 href, 21754 "data-precedence": precedence 21755 }, 21756 options 21757 ); 21758 (options = preloadPropsMap.get(key)) && adoptPreloadPropsForStylesheet(href, options); 21759 var link = resource = ownerDocument.createElement("link"); 21760 markNodeAsHoistable(link); 21761 setInitialProperties(link, "link", href); 21762 link._p = new Promise(function(resolve, reject) { 21763 link.onload = resolve; 21764 link.onerror = reject; 21765 }); 21766 link.addEventListener("load", function() { 21767 state.loading |= Loaded; 21768 }); 21769 link.addEventListener("error", function() { 21770 state.loading |= Errored; 21771 }); 21772 state.loading |= Inserted; 21773 insertStylesheet(resource, precedence, ownerDocument); 21774 } 21775 resource = { 21776 type: "stylesheet", 21777 instance: resource, 21778 count: 1, 21779 state 21780 }; 21781 styles.set(key, resource); 21782 } 21783 } 21784 }, 21785 M: function(src, options) { 21786 previousDispatcher.M(src, options); 21787 var ownerDocument = globalDocument; 21788 if (ownerDocument && src) { 21789 var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts, key = getScriptKey(src), resource = scripts.get(key); 21790 resource || (resource = ownerDocument.querySelector( 21791 getScriptSelectorFromKey(key) 21792 ), resource || (src = assign({ src, async: true, type: "module" }, options), (options = preloadPropsMap.get(key)) && adoptPreloadPropsForScript(src, options), resource = ownerDocument.createElement("script"), markNodeAsHoistable(resource), setInitialProperties(resource, "link", src), ownerDocument.head.appendChild(resource)), resource = { 21793 type: "script", 21794 instance: resource, 21795 count: 1, 21796 state: null 21797 }, scripts.set(key, resource)); 21798 } 21799 } 21800 }; 21801 var globalDocument = "undefined" === typeof document ? null : document, tagCaches = null, SUSPENSEY_STYLESHEET_TIMEOUT = 6e4, SUSPENSEY_IMAGE_TIMEOUT = 800, SUSPENSEY_IMAGE_TIME_ESTIMATE = 500, estimatedBytesWithinLimit = 0, LAST_PRECEDENCE = null, precedencesByRoot = null, NotPendingTransition = NotPending, HostTransitionContext = { 21802 $$typeof: REACT_CONTEXT_TYPE, 21803 Provider: null, 21804 Consumer: null, 21805 _currentValue: NotPendingTransition, 21806 _currentValue2: NotPendingTransition, 21807 _threadCount: 0 21808 }, badgeFormat = "%c%s%c", badgeStyle = "background: #e6e6e6;background: light-dark(rgba(0,0,0,0.1), rgba(255,255,255,0.25));color: #000000;color: light-dark(#000000, #ffffff);border-radius: 2px", resetStyle = "", pad = " ", bind = Function.prototype.bind; 21809 var didWarnAboutNestedUpdates = false; 21810 var overrideHookState = null, overrideHookStateDeletePath = null, overrideHookStateRenamePath = null, overrideProps = null, overridePropsDeletePath = null, overridePropsRenamePath = null, scheduleUpdate = null, scheduleRetry = null, setErrorHandler = null, setSuspenseHandler = null; 21811 overrideHookState = function(fiber, id, path, value) { 21812 id = findHook(fiber, id); 21813 null !== id && (path = copyWithSetImpl(id.memoizedState, path, 0, value), id.memoizedState = path, id.baseState = path, fiber.memoizedProps = assign({}, fiber.memoizedProps), path = enqueueConcurrentRenderForLane(fiber, 2), null !== path && scheduleUpdateOnFiber(path, fiber, 2)); 21814 }; 21815 overrideHookStateDeletePath = function(fiber, id, path) { 21816 id = findHook(fiber, id); 21817 null !== id && (path = copyWithDeleteImpl(id.memoizedState, path, 0), id.memoizedState = path, id.baseState = path, fiber.memoizedProps = assign({}, fiber.memoizedProps), path = enqueueConcurrentRenderForLane(fiber, 2), null !== path && scheduleUpdateOnFiber(path, fiber, 2)); 21818 }; 21819 overrideHookStateRenamePath = function(fiber, id, oldPath, newPath) { 21820 id = findHook(fiber, id); 21821 null !== id && (oldPath = copyWithRename(id.memoizedState, oldPath, newPath), id.memoizedState = oldPath, id.baseState = oldPath, fiber.memoizedProps = assign({}, fiber.memoizedProps), oldPath = enqueueConcurrentRenderForLane(fiber, 2), null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2)); 21822 }; 21823 overrideProps = function(fiber, path, value) { 21824 fiber.pendingProps = copyWithSetImpl(fiber.memoizedProps, path, 0, value); 21825 fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps); 21826 path = enqueueConcurrentRenderForLane(fiber, 2); 21827 null !== path && scheduleUpdateOnFiber(path, fiber, 2); 21828 }; 21829 overridePropsDeletePath = function(fiber, path) { 21830 fiber.pendingProps = copyWithDeleteImpl(fiber.memoizedProps, path, 0); 21831 fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps); 21832 path = enqueueConcurrentRenderForLane(fiber, 2); 21833 null !== path && scheduleUpdateOnFiber(path, fiber, 2); 21834 }; 21835 overridePropsRenamePath = function(fiber, oldPath, newPath) { 21836 fiber.pendingProps = copyWithRename( 21837 fiber.memoizedProps, 21838 oldPath, 21839 newPath 21840 ); 21841 fiber.alternate && (fiber.alternate.pendingProps = fiber.pendingProps); 21842 oldPath = enqueueConcurrentRenderForLane(fiber, 2); 21843 null !== oldPath && scheduleUpdateOnFiber(oldPath, fiber, 2); 21844 }; 21845 scheduleUpdate = function(fiber) { 21846 var root3 = enqueueConcurrentRenderForLane(fiber, 2); 21847 null !== root3 && scheduleUpdateOnFiber(root3, fiber, 2); 21848 }; 21849 scheduleRetry = function(fiber) { 21850 var lane = claimNextRetryLane(), root3 = enqueueConcurrentRenderForLane(fiber, lane); 21851 null !== root3 && scheduleUpdateOnFiber(root3, fiber, lane); 21852 }; 21853 setErrorHandler = function(newShouldErrorImpl) { 21854 shouldErrorImpl = newShouldErrorImpl; 21855 }; 21856 setSuspenseHandler = function(newShouldSuspendImpl) { 21857 shouldSuspendImpl = newShouldSuspendImpl; 21858 }; 21859 var _enabled = true, return_targetInst = null, hasScheduledReplayAttempt = false, queuedFocus = null, queuedDrag = null, queuedMouse = null, queuedPointers = /* @__PURE__ */ new Map(), queuedPointerCaptures = /* @__PURE__ */ new Map(), queuedExplicitHydrationTargets = [], discreteReplayableEvents = "mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset".split( 21860 " " 21861 ), lastScheduledReplayQueue = null; 21862 ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function(children) { 21863 var root3 = this._internalRoot; 21864 if (null === root3) throw Error("Cannot update an unmounted root."); 21865 var args = arguments; 21866 "function" === typeof args[1] ? console.error( 21867 "does not support the second callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()." 21868 ) : isValidContainer(args[1]) ? console.error( 21869 "You passed a container to the second argument of root.render(...). You don't need to pass it again since you already passed it to create the root." 21870 ) : "undefined" !== typeof args[1] && console.error( 21871 "You passed a second argument to root.render(...) but it only accepts one argument." 21872 ); 21873 args = children; 21874 var current2 = root3.current, lane = requestUpdateLane(current2); 21875 updateContainerImpl(current2, lane, args, root3, null, null); 21876 }; 21877 ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = function() { 21878 var args = arguments; 21879 "function" === typeof args[0] && console.error( 21880 "does not support a callback argument. To execute a side effect after rendering, declare it in a component body with useEffect()." 21881 ); 21882 args = this._internalRoot; 21883 if (null !== args) { 21884 this._internalRoot = null; 21885 var container = args.containerInfo; 21886 (executionContext & (RenderContext | CommitContext)) !== NoContext && console.error( 21887 "Attempted to synchronously unmount a root while React was already rendering. React cannot finish unmounting the root until the current render has completed, which may lead to a race condition." 21888 ); 21889 updateContainerImpl(args.current, 2, null, args, null, null); 21890 flushSyncWork$1(); 21891 container[internalContainerInstanceKey] = null; 21892 } 21893 }; 21894 ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function(target) { 21895 if (target) { 21896 var updatePriority = resolveUpdatePriority(); 21897 target = { blockedOn: null, target, priority: updatePriority }; 21898 for (var i3 = 0; i3 < queuedExplicitHydrationTargets.length && 0 !== updatePriority && updatePriority < queuedExplicitHydrationTargets[i3].priority; i3++) ; 21899 queuedExplicitHydrationTargets.splice(i3, 0, target); 21900 0 === i3 && attemptExplicitHydrationTarget(target); 21901 } 21902 }; 21903 (function() { 21904 var isomorphicReactPackageVersion = React19.version; 21905 if ("19.2.4" !== isomorphicReactPackageVersion) 21906 throw Error( 21907 'Incompatible React versions: The "react" and "react-dom" packages must have the exact same version. Instead got:\n - react: ' + (isomorphicReactPackageVersion + "\n - react-dom: 19.2.4\nLearn more: https://react.dev/warnings/version-mismatch") 21908 ); 21909 })(); 21910 "function" === typeof Map && null != Map.prototype && "function" === typeof Map.prototype.forEach && "function" === typeof Set && null != Set.prototype && "function" === typeof Set.prototype.clear && "function" === typeof Set.prototype.forEach || console.error( 21911 "React depends on Map and Set built-in types. Make sure that you load a polyfill in older browsers. https://react.dev/link/react-polyfills" 21912 ); 21913 ReactDOMSharedInternals.findDOMNode = function(componentOrElement) { 21914 var fiber = componentOrElement._reactInternals; 21915 if (void 0 === fiber) { 21916 if ("function" === typeof componentOrElement.render) 21917 throw Error("Unable to find node on an unmounted component."); 21918 componentOrElement = Object.keys(componentOrElement).join(","); 21919 throw Error( 21920 "Argument appears to not be a ReactComponent. Keys: " + componentOrElement 21921 ); 21922 } 21923 componentOrElement = findCurrentFiberUsingSlowPath(fiber); 21924 componentOrElement = null !== componentOrElement ? findCurrentHostFiberImpl(componentOrElement) : null; 21925 componentOrElement = null === componentOrElement ? null : componentOrElement.stateNode; 21926 return componentOrElement; 21927 }; 21928 if (!(function() { 21929 var internals = { 21930 bundleType: 1, 21931 version: "19.2.4", 21932 rendererPackageName: "react-dom", 21933 currentDispatcherRef: ReactSharedInternals, 21934 reconcilerVersion: "19.2.4" 21935 }; 21936 internals.overrideHookState = overrideHookState; 21937 internals.overrideHookStateDeletePath = overrideHookStateDeletePath; 21938 internals.overrideHookStateRenamePath = overrideHookStateRenamePath; 21939 internals.overrideProps = overrideProps; 21940 internals.overridePropsDeletePath = overridePropsDeletePath; 21941 internals.overridePropsRenamePath = overridePropsRenamePath; 21942 internals.scheduleUpdate = scheduleUpdate; 21943 internals.scheduleRetry = scheduleRetry; 21944 internals.setErrorHandler = setErrorHandler; 21945 internals.setSuspenseHandler = setSuspenseHandler; 21946 internals.scheduleRefresh = scheduleRefresh; 21947 internals.scheduleRoot = scheduleRoot; 21948 internals.setRefreshHandler = setRefreshHandler; 21949 internals.getCurrentFiber = getCurrentFiberForDevTools; 21950 return injectInternals(internals); 21951 })() && canUseDOM && window.top === window.self && (-1 < navigator.userAgent.indexOf("Chrome") && -1 === navigator.userAgent.indexOf("Edge") || -1 < navigator.userAgent.indexOf("Firefox"))) { 21952 var protocol = window.location.protocol; 21953 /^(https?|file):$/.test(protocol) && console.info( 21954 "%cDownload the React DevTools for a better development experience: https://react.dev/link/react-devtools" + ("file:" === protocol ? "\nYou might need to use a local HTTP server (instead of file://): https://react.dev/link/react-devtools-faq" : ""), 21955 "font-weight:bold" 21956 ); 21957 } 21958 exports.createRoot = function(container, options) { 21959 if (!isValidContainer(container)) 21960 throw Error("Target container is not a DOM element."); 21961 warnIfReactDOMContainerInDEV(container); 21962 var isStrictMode = false, identifierPrefix = "", onUncaughtError = defaultOnUncaughtError, onCaughtError = defaultOnCaughtError, onRecoverableError = defaultOnRecoverableError; 21963 null !== options && void 0 !== options && (options.hydrate ? console.warn( 21964 "hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead." 21965 ) : "object" === typeof options && null !== options && options.$$typeof === REACT_ELEMENT_TYPE && console.error( 21966 "You passed a JSX element to createRoot. You probably meant to call root.render instead. Example usage:\n\n let root = createRoot(domContainer);\n root.render(<App />);" 21967 ), true === options.unstable_strictMode && (isStrictMode = true), void 0 !== options.identifierPrefix && (identifierPrefix = options.identifierPrefix), void 0 !== options.onUncaughtError && (onUncaughtError = options.onUncaughtError), void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError), void 0 !== options.onRecoverableError && (onRecoverableError = options.onRecoverableError)); 21968 options = createFiberRoot( 21969 container, 21970 1, 21971 false, 21972 null, 21973 null, 21974 isStrictMode, 21975 identifierPrefix, 21976 null, 21977 onUncaughtError, 21978 onCaughtError, 21979 onRecoverableError, 21980 defaultOnDefaultTransitionIndicator 21981 ); 21982 container[internalContainerInstanceKey] = options.current; 21983 listenToAllSupportedEvents(container); 21984 return new ReactDOMRoot(options); 21985 }; 21986 exports.hydrateRoot = function(container, initialChildren, options) { 21987 if (!isValidContainer(container)) 21988 throw Error("Target container is not a DOM element."); 21989 warnIfReactDOMContainerInDEV(container); 21990 void 0 === initialChildren && console.error( 21991 "Must provide initial children as second argument to hydrateRoot. Example usage: hydrateRoot(domContainer, <App />)" 21992 ); 21993 var isStrictMode = false, identifierPrefix = "", onUncaughtError = defaultOnUncaughtError, onCaughtError = defaultOnCaughtError, onRecoverableError = defaultOnRecoverableError, formState = null; 21994 null !== options && void 0 !== options && (true === options.unstable_strictMode && (isStrictMode = true), void 0 !== options.identifierPrefix && (identifierPrefix = options.identifierPrefix), void 0 !== options.onUncaughtError && (onUncaughtError = options.onUncaughtError), void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError), void 0 !== options.onRecoverableError && (onRecoverableError = options.onRecoverableError), void 0 !== options.formState && (formState = options.formState)); 21995 initialChildren = createFiberRoot( 21996 container, 21997 1, 21998 true, 21999 initialChildren, 22000 null != options ? options : null, 22001 isStrictMode, 22002 identifierPrefix, 22003 formState, 22004 onUncaughtError, 22005 onCaughtError, 22006 onRecoverableError, 22007 defaultOnDefaultTransitionIndicator 22008 ); 22009 initialChildren.context = getContextForSubtree(null); 22010 options = initialChildren.current; 22011 isStrictMode = requestUpdateLane(options); 22012 isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode); 22013 identifierPrefix = createUpdate(isStrictMode); 22014 identifierPrefix.callback = null; 22015 enqueueUpdate(options, identifierPrefix, isStrictMode); 22016 startUpdateTimerByLane(isStrictMode, "hydrateRoot()", null); 22017 options = isStrictMode; 22018 initialChildren.current.lanes = options; 22019 markRootUpdated$1(initialChildren, options); 22020 ensureRootIsScheduled(initialChildren); 22021 container[internalContainerInstanceKey] = initialChildren.current; 22022 listenToAllSupportedEvents(container); 22023 return new ReactDOMHydrationRoot(initialChildren); 22024 }; 22025 exports.version = "19.2.4"; 22026 "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); 22027 })(); 22028 } 22029}); 22030
vendor: 299 bytes, lines 22031-22043
22031// node_modules/react-dom/client.js 22032var require_client = __commonJS({ 22033 "node_modules/react-dom/client.js"(exports, module) { 22034 "use strict"; 22035 if (false) { 22036 checkDCE(); 22037 module.exports = null; 22038 } else { 22039 module.exports = require_react_dom_client_development(); 22040 } 22041 } 22042}); 22043
vendor: 194,536 bytes, lines 22044-26054
22044// node_modules/@mediapipe/tasks-vision/vision_bundle.mjs 22045var vision_bundle_exports = {}; 22046__export(vision_bundle_exports, { 22047 DrawingUtils: () => Ka, 22048 FaceDetector: () => pc, 22049 FaceLandmarker: () => Sc, 22050 FilesetResolver: () => Zo, 22051 GestureRecognizer: () => Fc, 22052 HandLandmarker: () => Pc, 22053 HolisticLandmarker: () => Dc, 22054 ImageClassifier: () => Bc, 22055 ImageEmbedder: () => Gc, 22056 ImageSegmenter: () => Wc, 22057 ImageSegmenterResult: () => jc, 22058 InteractiveSegmenter: () => Kc, 22059 InteractiveSegmenterResult: () => zc, 22060 MPImage: () => nc, 22061 MPMask: () => Na, 22062 ObjectDetector: () => Yc, 22063 PoseLandmarker: () => Zc, 22064 TaskRunner: () => pa, 22065 VisionTaskRunner: () => dc 22066}); 22067function e(e3, n3) { 22068 t: { 22069 for (var r3 = ["CLOSURE_FLAGS"], i3 = t, s3 = 0; s3 < r3.length; s3++) if (null == (i3 = i3[r3[s3]])) { 22070 r3 = null; 22071 break t; 22072 } 22073 r3 = i3; 22074 } 22075 return null != (e3 = r3 && r3[e3]) ? e3 : n3; 22076} 22077function n() { 22078 throw Error("Invalid UTF8"); 22079} 22080function r(t3, e3) { 22081 return e3 = String.fromCharCode.apply(null, e3), null == t3 ? e3 : t3 + e3; 22082} 22083function h(t3) { 22084 if (c) t3 = (a ||= new TextEncoder()).encode(t3); 22085 else { 22086 let n3 = 0; 22087 const r3 = new Uint8Array(3 * t3.length); 22088 for (let i3 = 0; i3 < t3.length; i3++) { 22089 var e3 = t3.charCodeAt(i3); 22090 if (e3 < 128) r3[n3++] = e3; 22091 else { 22092 if (e3 < 2048) r3[n3++] = e3 >> 6 | 192; 22093 else { 22094 if (e3 >= 55296 && e3 <= 57343) { 22095 if (e3 <= 56319 && i3 < t3.length) { 22096 const s3 = t3.charCodeAt(++i3); 22097 if (s3 >= 56320 && s3 <= 57343) { 22098 e3 = 1024 * (e3 - 55296) + s3 - 56320 + 65536, r3[n3++] = e3 >> 18 | 240, r3[n3++] = e3 >> 12 & 63 | 128, r3[n3++] = e3 >> 6 & 63 | 128, r3[n3++] = 63 & e3 | 128; 22099 continue; 22100 } 22101 i3--; 22102 } 22103 e3 = 65533; 22104 } 22105 r3[n3++] = e3 >> 12 | 224, r3[n3++] = e3 >> 6 & 63 | 128; 22106 } 22107 r3[n3++] = 63 & e3 | 128; 22108 } 22109 } 22110 t3 = n3 === r3.length ? r3 : r3.subarray(0, n3); 22111 } 22112 return t3; 22113} 22114function u(e3) { 22115 t.setTimeout((() => { 22116 throw e3; 22117 }), 0); 22118} 22119function p() { 22120 var e3 = t.navigator; 22121 return e3 && (e3 = e3.userAgent) ? e3 : ""; 22122} 22123function m(t3) { 22124 return m[" "](t3), t3; 22125} 22126function v(t3) { 22127 const e3 = t3.length; 22128 let n3 = 3 * e3 / 4; 22129 n3 % 3 ? n3 = Math.floor(n3) : -1 != "=.".indexOf(t3[e3 - 1]) && (n3 = -1 != "=.".indexOf(t3[e3 - 2]) ? n3 - 2 : n3 - 1); 22130 const r3 = new Uint8Array(n3); 22131 let i3 = 0; 22132 return (function(t4, e4) { 22133 function n4(e5) { 22134 for (; r4 < t4.length; ) { 22135 const e6 = t4.charAt(r4++), n5 = _[e6]; 22136 if (null != n5) return n5; 22137 if (!/^[\s\xa0]*$/.test(e6)) throw Error("Unknown base64 encoding at char: " + e6); 22138 } 22139 return e5; 22140 } 22141 E(); 22142 let r4 = 0; 22143 for (; ; ) { 22144 const t5 = n4(-1), r5 = n4(0), i4 = n4(64), s3 = n4(64); 22145 if (64 === s3 && -1 === t5) break; 22146 e4(t5 << 2 | r5 >> 4), 64 != i4 && (e4(r5 << 4 & 240 | i4 >> 2), 64 != s3 && e4(i4 << 6 & 192 | s3)); 22147 } 22148 })(t3, (function(t4) { 22149 r3[i3++] = t4; 22150 })), i3 !== n3 ? r3.subarray(0, i3) : r3; 22151} 22152function E() { 22153 if (!_) { 22154 _ = {}; 22155 var t3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""), e3 = ["+/=", "+/", "-_=", "-_.", "-_"]; 22156 for (let n3 = 0; n3 < 5; n3++) { 22157 const r3 = t3.concat(e3[n3].split("")); 22158 y[n3] = r3; 22159 for (let t4 = 0; t4 < r3.length; t4++) { 22160 const e4 = r3[t4]; 22161 void 0 === _[e4] && (_[e4] = t4); 22162 } 22163 } 22164 } 22165} 22166function k(t3) { 22167 return b[t3] || ""; 22168} 22169function S(t3) { 22170 if (!T) return v(t3); 22171 t3 = A.test(t3) ? t3.replace(A, k) : t3, t3 = atob(t3); 22172 const e3 = new Uint8Array(t3.length); 22173 for (let n3 = 0; n3 < t3.length; n3++) e3[n3] = t3.charCodeAt(n3); 22174 return e3; 22175} 22176function x(t3) { 22177 return w && null != t3 && t3 instanceof Uint8Array; 22178} 22179function R() { 22180 return M ||= new F(null, L); 22181} 22182function I(t3) { 22183 C(L); 22184 var e3 = t3.g; 22185 return null == (e3 = null == e3 || x(e3) ? e3 : "string" == typeof e3 ? S(e3) : null) ? e3 : t3.g = e3; 22186} 22187function C(t3) { 22188 if (t3 !== L) throw Error("illegal external caller"); 22189} 22190function O(t3, e3) { 22191 t3.__closure__error__context__984382 || (t3.__closure__error__context__984382 = {}), t3.__closure__error__context__984382.severity = e3; 22192} 22193function N(t3) { 22194 return O(t3 = Error(t3), "warning"), t3; 22195} 22196function U(t3, e3) { 22197 if (null != t3) { 22198 var n3 = P ??= {}, r3 = n3[t3] || 0; 22199 r3 >= e3 || (n3[t3] = r3 + 1, O(t3 = Error(), "incident"), u(t3)); 22200 } 22201} 22202function D() { 22203 return "function" == typeof BigInt; 22204} 22205function G(t3, e3, n3 = false) { 22206 return "function" == typeof Symbol && "symbol" == typeof /* @__PURE__ */ Symbol() ? n3 && Symbol.for && t3 ? Symbol.for(t3) : null != t3 ? Symbol(t3) : /* @__PURE__ */ Symbol() : e3; 22207} 22208function nt(t3, e3) { 22209 B || Q in t3 || Z(t3, J), t3[Q] |= e3; 22210} 22211function rt(t3, e3) { 22212 B || Q in t3 || Z(t3, J), t3[Q] = e3; 22213} 22214function it(t3) { 22215 return nt(t3, 34), t3; 22216} 22217function st(t3) { 22218 return nt(t3, 8192), t3; 22219} 22220function at(t3, e3) { 22221 return void 0 === e3 ? t3.h !== ct && !!(2 & (0 | t3.v[Q])) : !!(2 & e3) && t3.h !== ct; 22222} 22223function ht(t3, e3) { 22224 if (null != t3) { 22225 if ("string" == typeof t3) t3 = t3 ? new F(t3, L) : R(); 22226 else if (t3.constructor !== F) if (x(t3)) t3 = t3.length ? new F(new Uint8Array(t3), L) : R(); 22227 else { 22228 if (!e3) throw Error(); 22229 t3 = void 0; 22230 } 22231 } 22232 return t3; 22233} 22234function ft(t3, e3, n3) { 22235 const r3 = 128 & e3 ? 0 : -1, i3 = t3.length; 22236 var s3; 22237 (s3 = !!i3) && (s3 = null != (s3 = t3[i3 - 1]) && "object" == typeof s3 && s3.constructor === Object); 22238 const o3 = i3 + (s3 ? -1 : 0); 22239 for (e3 = 128 & e3 ? 1 : 0; e3 < o3; e3++) n3(e3 - r3, t3[e3]); 22240 if (s3) { 22241 t3 = t3[i3 - 1]; 22242 for (const e4 in t3) !isNaN(e4) && n3(+e4, t3[e4]); 22243 } 22244} 22245function pt(t3) { 22246 return 128 & t3 ? dt : void 0; 22247} 22248function gt(t3) { 22249 return t3.Na = true, t3; 22250} 22251function Et(t3) { 22252 var e3 = t3; 22253 if (yt(e3)) { 22254 if (!/^\s*(?:-?[1-9]\d*|0)?\s*$/.test(e3)) throw Error(String(e3)); 22255 } else if (mt(e3) && !Number.isSafeInteger(e3)) throw Error(String(e3)); 22256 return vt ? BigInt(t3) : t3 = _t(t3) ? t3 ? "1" : "0" : yt(t3) ? t3.trim() || "0" : String(t3); 22257} 22258function St(t3, e3) { 22259 if (t3.length > e3.length) return false; 22260 if (t3.length < e3.length || t3 === e3) return true; 22261 for (let n3 = 0; n3 < t3.length; n3++) { 22262 const r3 = t3[n3], i3 = e3[n3]; 22263 if (r3 > i3) return false; 22264 if (r3 < i3) return true; 22265 } 22266} 22267function Ft(t3) { 22268 const e3 = t3 >>> 0; 22269 Rt = e3, It = (t3 - e3) / 4294967296 >>> 0; 22270} 22271function Mt(t3) { 22272 if (t3 < 0) { 22273 Ft(-t3); 22274 const [e3, n3] = jt(Rt, It); 22275 Rt = e3 >>> 0, It = n3 >>> 0; 22276 } else Ft(t3); 22277} 22278function Pt(t3) { 22279 const e3 = Lt ||= new DataView(new ArrayBuffer(8)); 22280 e3.setFloat32(0, +t3, true), It = 0, Rt = e3.getUint32(0, true); 22281} 22282function Ct(t3, e3) { 22283 const n3 = 4294967296 * e3 + (t3 >>> 0); 22284 return Number.isSafeInteger(n3) ? n3 : Ut(t3, e3); 22285} 22286function Ot(t3, e3) { 22287 return Et(D() ? BigInt.asUintN(64, (BigInt(e3 >>> 0) << BigInt(32)) + BigInt(t3 >>> 0)) : Ut(t3, e3)); 22288} 22289function Nt(t3, e3) { 22290 return D() ? Et(BigInt.asIntN(64, (BigInt.asUintN(32, BigInt(e3)) << BigInt(32)) + BigInt.asUintN(32, BigInt(t3)))) : Et(Bt(t3, e3)); 22291} 22292function Ut(t3, e3) { 22293 if (t3 >>>= 0, (e3 >>>= 0) <= 2097151) var n3 = "" + (4294967296 * e3 + t3); 22294 else D() ? n3 = "" + (BigInt(e3) << BigInt(32) | BigInt(t3)) : (t3 = (16777215 & t3) + 6777216 * (n3 = 16777215 & (t3 >>> 24 | e3 << 8)) + 6710656 * (e3 = e3 >> 16 & 65535), n3 += 8147497 * e3, e3 *= 2, t3 >= 1e7 && (n3 += t3 / 1e7 >>> 0, t3 %= 1e7), n3 >= 1e7 && (e3 += n3 / 1e7 >>> 0, n3 %= 1e7), n3 = e3 + Dt(n3) + Dt(t3)); 22295 return n3; 22296} 22297function Dt(t3) { 22298 return t3 = String(t3), "0000000".slice(t3.length) + t3; 22299} 22300function Bt(t3, e3) { 22301 if (2147483648 & e3) if (D()) t3 = "" + (BigInt(0 | e3) << BigInt(32) | BigInt(t3 >>> 0)); 22302 else { 22303 const [n3, r3] = jt(t3, e3); 22304 t3 = "-" + Ut(n3, r3); 22305 } 22306 else t3 = Ut(t3, e3); 22307 return t3; 22308} 22309function Gt(t3) { 22310 if (t3.length < 16) Mt(Number(t3)); 22311 else if (D()) t3 = BigInt(t3), Rt = Number(t3 & BigInt(4294967295)) >>> 0, It = Number(t3 >> BigInt(32) & BigInt(4294967295)); 22312 else { 22313 const e3 = +("-" === t3[0]); 22314 It = Rt = 0; 22315 const n3 = t3.length; 22316 for (let r3 = e3, i3 = (n3 - e3) % 6 + e3; i3 <= n3; r3 = i3, i3 += 6) { 22317 const e4 = Number(t3.slice(r3, i3)); 22318 It *= 1e6, Rt = 1e6 * Rt + e4, Rt >= 4294967296 && (It += Math.trunc(Rt / 4294967296), It >>>= 0, Rt >>>= 0); 22319 } 22320 if (e3) { 22321 const [t4, e4] = jt(Rt, It); 22322 Rt = t4, It = e4; 22323 } 22324 } 22325} 22326function jt(t3, e3) { 22327 return e3 = ~e3, t3 ? t3 = 1 + ~t3 : e3 += 1, [t3, e3]; 22328} 22329function Vt(t3) { 22330 return Array.prototype.slice.call(t3); 22331} 22332function qt(t3) { 22333 if (null != t3 && "number" != typeof t3) throw Error(`Value of float/double field must be a number, found ${typeof t3}: ${t3}`); 22334 return t3; 22335} 22336function $t(t3) { 22337 return null == t3 || "number" == typeof t3 ? t3 : "NaN" === t3 || "Infinity" === t3 || "-Infinity" === t3 ? Number(t3) : void 0; 22338} 22339function Jt(t3) { 22340 if (null != t3 && "boolean" != typeof t3) { 22341 var e3 = typeof t3; 22342 throw Error(`Expected boolean but got ${"object" != e3 ? e3 : t3 ? Array.isArray(t3) ? "array" : e3 : "null"}: ${t3}`); 22343 } 22344 return t3; 22345} 22346function Zt(t3) { 22347 return null == t3 || "boolean" == typeof t3 ? t3 : "number" == typeof t3 ? !!t3 : void 0; 22348} 22349function te(t3) { 22350 switch (typeof t3) { 22351 case "bigint": 22352 return true; 22353 case "number": 22354 return zt(t3); 22355 case "string": 22356 return Qt.test(t3); 22357 default: 22358 return false; 22359 } 22360} 22361function ee(t3) { 22362 if (null == t3) return t3; 22363 if ("string" == typeof t3 && t3) t3 = +t3; 22364 else if ("number" != typeof t3) return; 22365 return zt(t3) ? 0 | t3 : void 0; 22366} 22367function ne(t3) { 22368 if (null == t3) return t3; 22369 if ("string" == typeof t3 && t3) t3 = +t3; 22370 else if ("number" != typeof t3) return; 22371 return zt(t3) ? t3 >>> 0 : void 0; 22372} 22373function re(t3) { 22374 const e3 = t3.length; 22375 return ("-" === t3[0] ? e3 < 20 || 20 === e3 && t3 <= "-9223372036854775808" : e3 < 19 || 19 === e3 && t3 <= "9223372036854775807") ? t3 : (Gt(t3), Bt(Rt, It)); 22376} 22377function ie(t3) { 22378 if (t3 = Kt(t3), !Wt(t3)) { 22379 Mt(t3); 22380 var e3 = Rt, n3 = It; 22381 (t3 = 2147483648 & n3) && (n3 = ~n3 >>> 0, 0 == (e3 = 1 + ~e3 >>> 0) && (n3 = n3 + 1 >>> 0)), t3 = "number" == typeof (e3 = Ct(e3, n3)) ? t3 ? -e3 : e3 : t3 ? "-" + e3 : e3; 22382 } 22383 return t3; 22384} 22385function se(t3) { 22386 var e3 = Kt(Number(t3)); 22387 return Wt(e3) ? String(e3) : (-1 !== (e3 = t3.indexOf(".")) && (t3 = t3.substring(0, e3)), re(t3)); 22388} 22389function oe(t3) { 22390 var e3 = Kt(Number(t3)); 22391 return Wt(e3) ? Et(e3) : (-1 !== (e3 = t3.indexOf(".")) && (t3 = t3.substring(0, e3)), D() ? Et(Xt(64, BigInt(t3))) : Et(re(t3))); 22392} 22393function ae(t3) { 22394 return Wt(t3) ? t3 = Et(ie(t3)) : (t3 = Kt(t3), Wt(t3) ? t3 = String(t3) : (Mt(t3), t3 = Bt(Rt, It)), t3 = Et(t3)), t3; 22395} 22396function ce(t3) { 22397 const e3 = typeof t3; 22398 return null == t3 ? t3 : "bigint" === e3 ? Et(Xt(64, t3)) : te(t3) ? "string" === e3 ? oe(t3) : ae(t3) : void 0; 22399} 22400function he(t3) { 22401 if ("string" != typeof t3) throw Error(); 22402 return t3; 22403} 22404function ue(t3) { 22405 if (null != t3 && "string" != typeof t3) throw Error(); 22406 return t3; 22407} 22408function le(t3) { 22409 return null == t3 || "string" == typeof t3 ? t3 : void 0; 22410} 22411function fe(t3, e3, n3, r3) { 22412 return null != t3 && t3[q] === ot ? t3 : Array.isArray(t3) ? ((r3 = (n3 = 0 | t3[Q]) | 32 & r3 | 2 & r3) !== n3 && rt(t3, r3), new e3(t3)) : (n3 ? 2 & r3 ? ((t3 = e3[V]) || (it((t3 = new e3()).v), t3 = e3[V] = t3), e3 = t3) : e3 = new e3() : e3 = void 0, e3); 22413} 22414function de(t3, e3, n3) { 22415 if (e3) t: { 22416 if (!te(e3 = t3)) throw N("int64"); 22417 switch (typeof e3) { 22418 case "string": 22419 e3 = oe(e3); 22420 break t; 22421 case "bigint": 22422 e3 = Et(Xt(64, e3)); 22423 break t; 22424 default: 22425 e3 = ae(e3); 22426 } 22427 } 22428 else e3 = ce(t3); 22429 return null == (t3 = e3) ? n3 ? Yt : void 0 : t3; 22430} 22431function _e(t3) { 22432 return t3; 22433} 22434function ve(t3) { 22435 if (2 & t3.J) throw Error("Cannot mutate an immutable Map"); 22436} 22437function we(t3, e3, n3, r3, i3, s3) { 22438 return t3 = fe(t3, r3, n3, s3), i3 && (t3 = Xe(t3)), t3; 22439} 22440function Te(t3) { 22441 return [t3, this.get(t3)]; 22442} 22443function be() { 22444 return Ae ||= new Ee(it([]), void 0, void 0, void 0, pe); 22445} 22446function ke(t3) { 22447 return H ? t3[H] : void 0; 22448} 22449function Se(t3, e3) { 22450 for (const n3 in t3) !isNaN(n3) && e3(t3, +n3, t3[n3]); 22451} 22452function Re(t3, e3) { 22453 e3 < 100 || U(z, 1); 22454} 22455function Ie(t3, e3, n3, r3) { 22456 const i3 = void 0 !== r3; 22457 r3 = !!r3; 22458 var s3, o3 = H; 22459 !i3 && B && o3 && (s3 = t3[o3]) && Se(s3, Re), o3 = []; 22460 var a3 = t3.length; 22461 let c3; 22462 s3 = 4294967295; 22463 let h3 = false; 22464 const u3 = !!(64 & e3), l3 = u3 ? 128 & e3 ? 0 : -1 : void 0; 22465 1 & e3 || (c3 = a3 && t3[a3 - 1], null != c3 && "object" == typeof c3 && c3.constructor === Object ? s3 = --a3 : c3 = void 0, !u3 || 128 & e3 || i3 || (h3 = true, s3 = s3 - l3 + l3)), e3 = void 0; 22466 for (var f3 = 0; f3 < a3; f3++) { 22467 let i4 = t3[f3]; 22468 if (null != i4 && null != (i4 = n3(i4, r3))) if (u3 && f3 >= s3) { 22469 const t4 = f3 - l3; 22470 (e3 ??= {})[t4] = i4; 22471 } else o3[f3] = i4; 22472 } 22473 if (c3) for (let t4 in c3) { 22474 if (null == (a3 = c3[t4]) || null == (a3 = n3(a3, r3))) continue; 22475 let i4; 22476 f3 = +t4, u3 && !Number.isNaN(f3) && (i4 = f3 + l3) < s3 ? o3[i4] = a3 : (e3 ??= {})[t4] = a3; 22477 } 22478 return e3 && (h3 ? o3.push(e3) : o3[s3] = e3), i3 && H && (t3 = ke(t3)) && t3 instanceof xe && (o3[H] = (function(t4) { 22479 const e4 = new xe(); 22480 return Se(t4, ((t5, n4, r4) => { 22481 e4[n4] = Vt(r4); 22482 })), e4.da = t4.da, e4; 22483 })(t3)), o3; 22484} 22485function Fe(t3) { 22486 return t3[0] = Me(t3[0]), t3[1] = Me(t3[1]), t3; 22487} 22488function Me(t3) { 22489 switch (typeof t3) { 22490 case "number": 22491 return Number.isFinite(t3) ? t3 : "" + t3; 22492 case "bigint": 22493 return wt(t3) ? Number(t3) : "" + t3; 22494 case "boolean": 22495 return t3 ? 1 : 0; 22496 case "object": 22497 if (Array.isArray(t3)) { 22498 var e3 = 0 | t3[Q]; 22499 return 0 === t3.length && 1 & e3 ? void 0 : Ie(t3, e3, Me); 22500 } 22501 if (null != t3 && t3[q] === ot) return Oe(t3); 22502 if (t3 instanceof F) { 22503 if (null == (e3 = t3.g)) t3 = ""; 22504 else if ("string" == typeof e3) t3 = e3; 22505 else { 22506 if (T) { 22507 for (var n3 = "", r3 = 0, i3 = e3.length - 10240; r3 < i3; ) n3 += String.fromCharCode.apply(null, e3.subarray(r3, r3 += 10240)); 22508 n3 += String.fromCharCode.apply(null, r3 ? e3.subarray(r3) : e3), e3 = btoa(n3); 22509 } else { 22510 void 0 === n3 && (n3 = 0), E(), n3 = y[n3], r3 = Array(Math.floor(e3.length / 3)), i3 = n3[64] || ""; 22511 let t4 = 0, h3 = 0; 22512 for (; t4 < e3.length - 2; t4 += 3) { 22513 var s3 = e3[t4], o3 = e3[t4 + 1], a3 = e3[t4 + 2], c3 = n3[s3 >> 2]; 22514 s3 = n3[(3 & s3) << 4 | o3 >> 4], o3 = n3[(15 & o3) << 2 | a3 >> 6], a3 = n3[63 & a3], r3[h3++] = c3 + s3 + o3 + a3; 22515 } 22516 switch (c3 = 0, a3 = i3, e3.length - t4) { 22517 case 2: 22518 a3 = n3[(15 & (c3 = e3[t4 + 1])) << 2] || i3; 22519 case 1: 22520 e3 = e3[t4], r3[h3] = n3[e3 >> 2] + n3[(3 & e3) << 4 | c3 >> 4] + a3 + i3; 22521 } 22522 e3 = r3.join(""); 22523 } 22524 t3 = t3.g = e3; 22525 } 22526 return t3; 22527 } 22528 return t3 instanceof Ee ? t3 = 0 !== t3.size ? t3.V(Fe) : void 0 : void 0; 22529 } 22530 return t3; 22531} 22532function Oe(t3) { 22533 return Ie(t3 = t3.v, 0 | t3[Q], Me); 22534} 22535function Ne(t3, e3) { 22536 return Ue(t3, e3[0], e3[1]); 22537} 22538function Ue(t3, e3, n3, r3 = 0) { 22539 if (null == t3) { 22540 var i3 = 32; 22541 n3 ? (t3 = [n3], i3 |= 128) : t3 = [], e3 && (i3 = -16760833 & i3 | (1023 & e3) << 14); 22542 } else { 22543 if (!Array.isArray(t3)) throw Error("narr"); 22544 if (i3 = 0 | t3[Q], d && 1 & i3) throw Error("rfarr"); 22545 if (2048 & i3 && !(2 & i3) && (function() { 22546 if (d) throw Error("carr"); 22547 U(Y, 5); 22548 })(), 256 & i3) throw Error("farr"); 22549 if (64 & i3) return (i3 | r3) !== i3 && rt(t3, i3 | r3), t3; 22550 if (n3 && (i3 |= 128, n3 !== t3[0])) throw Error("mid"); 22551 t: { 22552 i3 |= 64; 22553 var s3 = (n3 = t3).length; 22554 if (s3) { 22555 var o3 = s3 - 1; 22556 const t4 = n3[o3]; 22557 if (null != t4 && "object" == typeof t4 && t4.constructor === Object) { 22558 if ((o3 -= e3 = 128 & i3 ? 0 : -1) >= 1024) throw Error("pvtlmt"); 22559 for (var a3 in t4) (s3 = +a3) < o3 && (n3[s3 + e3] = t4[a3], delete t4[a3]); 22560 i3 = -16760833 & i3 | (1023 & o3) << 14; 22561 break t; 22562 } 22563 } 22564 if (e3) { 22565 if ((a3 = Math.max(e3, s3 - (128 & i3 ? 0 : -1))) > 1024) throw Error("spvt"); 22566 i3 = -16760833 & i3 | (1023 & a3) << 14; 22567 } 22568 } 22569 } 22570 return rt(t3, 64 | i3 | r3), t3; 22571} 22572function De(t3, e3) { 22573 if ("object" != typeof t3) return t3; 22574 if (Array.isArray(t3)) { 22575 var n3 = 0 | t3[Q]; 22576 return 0 === t3.length && 1 & n3 ? void 0 : Be(t3, n3, e3); 22577 } 22578 if (null != t3 && t3[q] === ot) return je(t3); 22579 if (t3 instanceof Ee) { 22580 if (2 & (e3 = t3.J)) return t3; 22581 if (!t3.size) return; 22582 if (n3 = it(t3.V()), t3.K) for (t3 = 0; t3 < n3.length; t3++) { 22583 const r3 = n3[t3]; 22584 let i3 = r3[1]; 22585 i3 = null == i3 || "object" != typeof i3 ? void 0 : null != i3 && i3[q] === ot ? je(i3) : Array.isArray(i3) ? Be(i3, 0 | i3[Q], !!(32 & e3)) : void 0, r3[1] = i3; 22586 } 22587 return n3; 22588 } 22589 return t3 instanceof F ? t3 : void 0; 22590} 22591function Be(t3, e3, n3) { 22592 return 2 & e3 || (!n3 || 4096 & e3 || 16 & e3 ? t3 = Ve(t3, e3, false, n3 && !(16 & e3)) : (nt(t3, 34), 4 & e3 && Object.freeze(t3))), t3; 22593} 22594function Ge(t3, e3, n3) { 22595 return t3 = new t3.constructor(e3), n3 && (t3.h = ct), t3.m = ct, t3; 22596} 22597function je(t3) { 22598 const e3 = t3.v, n3 = 0 | e3[Q]; 22599 return at(t3, n3) ? t3 : Ke(t3, e3, n3) ? Ge(t3, e3) : Ve(e3, n3); 22600} 22601function Ve(t3, e3, n3, r3) { 22602 return r3 ??= !!(34 & e3), t3 = Ie(t3, e3, De, r3), r3 = 32, n3 && (r3 |= 2), rt(t3, e3 = 16769217 & e3 | r3), t3; 22603} 22604function Xe(t3) { 22605 const e3 = t3.v, n3 = 0 | e3[Q]; 22606 return at(t3, n3) ? Ke(t3, e3, n3) ? Ge(t3, e3, true) : new t3.constructor(Ve(e3, n3, false)) : t3; 22607} 22608function He(t3) { 22609 if (t3.h !== ct) return false; 22610 var e3 = t3.v; 22611 return nt(e3 = Ve(e3, 0 | e3[Q]), 2048), t3.v = e3, t3.h = void 0, t3.m = void 0, true; 22612} 22613function We(t3) { 22614 if (!He(t3) && at(t3, 0 | t3.v[Q])) throw Error(); 22615} 22616function ze(t3, e3) { 22617 void 0 === e3 && (e3 = 0 | t3[Q]), 32 & e3 && !(4096 & e3) && rt(t3, 4096 | e3); 22618} 22619function Ke(t3, e3, n3) { 22620 return !!(2 & n3) || !(!(32 & n3) || 4096 & n3) && (rt(e3, 2 | n3), t3.h = ct, true); 22621} 22622function $e(t3, e3, n3, r3, i3) { 22623 if (null !== (e3 = Je(t3.v, e3, n3, i3)) || r3 && t3.m !== ct) return e3; 22624} 22625function Je(t3, e3, n3, r3) { 22626 if (-1 === e3) return null; 22627 const i3 = e3 + (n3 ? 0 : -1), s3 = t3.length - 1; 22628 let o3, a3; 22629 if (!(s3 < 1 + (n3 ? 0 : -1))) { 22630 if (i3 >= s3) if (o3 = t3[s3], null != o3 && "object" == typeof o3 && o3.constructor === Object) n3 = o3[e3], a3 = true; 22631 else { 22632 if (i3 !== s3) return; 22633 n3 = o3; 22634 } 22635 else n3 = t3[i3]; 22636 if (r3 && null != n3) { 22637 if (null == (r3 = r3(n3))) return r3; 22638 if (!Object.is(r3, n3)) return a3 ? o3[e3] = r3 : t3[i3] = r3, r3; 22639 } 22640 return n3; 22641 } 22642} 22643function Ze(t3, e3, n3, r3) { 22644 We(t3), Qe(t3 = t3.v, 0 | t3[Q], e3, n3, r3); 22645} 22646function Qe(t3, e3, n3, r3, i3) { 22647 const s3 = n3 + (i3 ? 0 : -1); 22648 var o3 = t3.length - 1; 22649 if (o3 >= 1 + (i3 ? 0 : -1) && s3 >= o3) { 22650 const i4 = t3[o3]; 22651 if (null != i4 && "object" == typeof i4 && i4.constructor === Object) return i4[n3] = r3, e3; 22652 } 22653 return s3 <= o3 ? (t3[s3] = r3, e3) : (void 0 !== r3 && (n3 >= (o3 = (e3 ??= 0 | t3[Q]) >> 14 & 1023 || 536870912) ? null != r3 && (t3[o3 + (i3 ? 0 : -1)] = { [n3]: r3 }) : t3[s3] = r3), e3); 22654} 22655function tn() { 22656 return void 0 === lt ? 2 : 4; 22657} 22658function en(t3, e3, n3, r3, i3) { 22659 let s3 = t3.v, o3 = 0 | s3[Q]; 22660 r3 = at(t3, o3) ? 1 : r3, i3 = !!i3 || 3 === r3, 2 === r3 && He(t3) && (s3 = t3.v, o3 = 0 | s3[Q]); 22661 let a3 = (t3 = rn(s3, e3)) === tt ? 7 : 0 | t3[Q], c3 = sn(a3, o3); 22662 var h3 = !(4 & c3); 22663 if (h3) { 22664 4 & c3 && (t3 = Vt(t3), a3 = 0, c3 = An(c3, o3), o3 = Qe(s3, o3, e3, t3)); 22665 let r4 = 0, i4 = 0; 22666 for (; r4 < t3.length; r4++) { 22667 const e4 = n3(t3[r4]); 22668 null != e4 && (t3[i4++] = e4); 22669 } 22670 i4 < r4 && (t3.length = i4), n3 = -513 & (4 | c3), c3 = n3 &= -1025, c3 &= -4097; 22671 } 22672 return c3 !== a3 && (rt(t3, c3), 2 & c3 && Object.freeze(t3)), nn(t3, c3, s3, o3, e3, r3, h3, i3); 22673} 22674function nn(t3, e3, n3, r3, i3, s3, o3, a3) { 22675 let c3 = e3; 22676 return 1 === s3 || 4 === s3 && (2 & e3 || !(16 & e3) && 32 & r3) ? on(e3) || ((e3 |= !t3.length || o3 && !(4096 & e3) || 32 & r3 && !(4096 & e3 || 16 & e3) ? 2 : 256) !== c3 && rt(t3, e3), Object.freeze(t3)) : (2 === s3 && on(e3) && (t3 = Vt(t3), c3 = 0, e3 = An(e3, r3), r3 = Qe(n3, r3, i3, t3)), on(e3) || (a3 || (e3 |= 16), e3 !== c3 && rt(t3, e3))), 2 & e3 || !(4096 & e3 || 16 & e3) || ze(n3, r3), t3; 22677} 22678function rn(t3, e3, n3) { 22679 return t3 = Je(t3, e3, n3), Array.isArray(t3) ? t3 : tt; 22680} 22681function sn(t3, e3) { 22682 return 2 & e3 && (t3 |= 2), 1 | t3; 22683} 22684function on(t3) { 22685 return !!(2 & t3) && !!(4 & t3) || !!(256 & t3); 22686} 22687function an(t3) { 22688 return ht(t3, true); 22689} 22690function cn(t3) { 22691 t3 = Vt(t3); 22692 for (let e3 = 0; e3 < t3.length; e3++) { 22693 const n3 = t3[e3] = Vt(t3[e3]); 22694 Array.isArray(n3[1]) && (n3[1] = it(n3[1])); 22695 } 22696 return st(t3); 22697} 22698function hn(t3, e3, n3, r3) { 22699 We(t3), Qe(t3 = t3.v, 0 | t3[Q], e3, ("0" === r3 ? 0 === Number(n3) : n3 === r3) ? void 0 : n3); 22700} 22701function un(t3, e3, n3) { 22702 if (2 & e3) throw Error(); 22703 const r3 = pt(e3); 22704 let i3 = rn(t3, n3, r3), s3 = i3 === tt ? 7 : 0 | i3[Q], o3 = sn(s3, e3); 22705 return (2 & o3 || on(o3) || 16 & o3) && (o3 === s3 || on(o3) || rt(i3, o3), i3 = Vt(i3), s3 = 0, o3 = An(o3, e3), Qe(t3, e3, n3, i3, r3)), o3 &= -13, o3 !== s3 && rt(i3, o3), i3; 22706} 22707function ln(t3, e3) { 22708 var n3 = Cs; 22709 return pn(fn(t3 = t3.v), t3, void 0, n3) === e3 ? e3 : -1; 22710} 22711function fn(t3) { 22712 if (B) return t3[X] ?? (t3[X] = /* @__PURE__ */ new Map()); 22713 if (X in t3) return t3[X]; 22714 const e3 = /* @__PURE__ */ new Map(); 22715 return Object.defineProperty(t3, X, { value: e3 }), e3; 22716} 22717function dn(t3, e3, n3, r3, i3) { 22718 const s3 = fn(t3), o3 = pn(s3, t3, e3, n3, i3); 22719 return o3 !== r3 && (o3 && (e3 = Qe(t3, e3, o3, void 0, i3)), s3.set(n3, r3)), e3; 22720} 22721function pn(t3, e3, n3, r3, i3) { 22722 let s3 = t3.get(r3); 22723 if (null != s3) return s3; 22724 s3 = 0; 22725 for (let t4 = 0; t4 < r3.length; t4++) { 22726 const o3 = r3[t4]; 22727 null != Je(e3, o3, i3) && (0 !== s3 && (n3 = Qe(e3, n3, s3, void 0, i3)), s3 = o3); 22728 } 22729 return t3.set(r3, s3), s3; 22730} 22731function gn(t3, e3, n3) { 22732 let r3 = 0 | t3[Q]; 22733 const i3 = pt(r3), s3 = Je(t3, n3, i3); 22734 let o3; 22735 if (null != s3 && s3[q] === ot) { 22736 if (!at(s3)) return He(s3), s3.v; 22737 o3 = s3.v; 22738 } else Array.isArray(s3) && (o3 = s3); 22739 if (o3) { 22740 const t4 = 0 | o3[Q]; 22741 2 & t4 && (o3 = Ve(o3, t4)); 22742 } 22743 return o3 = Ne(o3, e3), o3 !== s3 && Qe(t3, r3, n3, o3, i3), o3; 22744} 22745function mn(t3, e3, n3, r3, i3) { 22746 let s3 = false; 22747 if (null != (r3 = Je(t3, r3, i3, ((t4) => { 22748 const r4 = fe(t4, n3, false, e3); 22749 return s3 = r4 !== t4 && null != r4, r4; 22750 })))) return s3 && !at(r3) && ze(t3, e3), r3; 22751} 22752function yn(t3, e3, n3, r3) { 22753 let i3 = t3.v, s3 = 0 | i3[Q]; 22754 if (null == (e3 = mn(i3, s3, e3, n3, r3))) return e3; 22755 if (s3 = 0 | i3[Q], !at(t3, s3)) { 22756 const o3 = Xe(e3); 22757 o3 !== e3 && (He(t3) && (i3 = t3.v, s3 = 0 | i3[Q]), s3 = Qe(i3, s3, n3, e3 = o3, r3), ze(i3, s3)); 22758 } 22759 return e3; 22760} 22761function _n(t3, e3, n3, r3, i3, s3, o3, a3) { 22762 var c3 = at(t3, n3); 22763 s3 = c3 ? 1 : s3, o3 = !!o3 || 3 === s3, c3 = a3 && !c3, (2 === s3 || c3) && He(t3) && (n3 = 0 | (e3 = t3.v)[Q]); 22764 var h3 = (t3 = rn(e3, i3)) === tt ? 7 : 0 | t3[Q], u3 = sn(h3, n3); 22765 if (a3 = !(4 & u3)) { 22766 var l3 = t3, f3 = n3; 22767 const e4 = !!(2 & u3); 22768 e4 && (f3 |= 2); 22769 let i4 = !e4, s4 = true, o4 = 0, a4 = 0; 22770 for (; o4 < l3.length; o4++) { 22771 const t4 = fe(l3[o4], r3, false, f3); 22772 if (t4 instanceof r3) { 22773 if (!e4) { 22774 const e5 = at(t4); 22775 i4 &&= !e5, s4 &&= e5; 22776 } 22777 l3[a4++] = t4; 22778 } 22779 } 22780 a4 < o4 && (l3.length = a4), u3 |= 4, u3 = s4 ? -4097 & u3 : 4096 | u3, u3 = i4 ? 8 | u3 : -9 & u3; 22781 } 22782 if (u3 !== h3 && (rt(t3, u3), 2 & u3 && Object.freeze(t3)), c3 && !(8 & u3 || !t3.length && (1 === s3 || 4 === s3 && (2 & u3 || !(16 & u3) && 32 & n3)))) { 22783 for (on(u3) && (t3 = Vt(t3), u3 = An(u3, n3), n3 = Qe(e3, n3, i3, t3)), r3 = t3, c3 = u3, h3 = 0; h3 < r3.length; h3++) (l3 = r3[h3]) !== (u3 = Xe(l3)) && (r3[h3] = u3); 22784 c3 |= 8, rt(t3, u3 = c3 = r3.length ? 4096 | c3 : -4097 & c3); 22785 } 22786 return nn(t3, u3, e3, n3, i3, s3, a3, o3); 22787} 22788function vn(t3, e3, n3) { 22789 const r3 = t3.v; 22790 return _n(t3, r3, 0 | r3[Q], e3, n3, tn(), false, true); 22791} 22792function En(t3) { 22793 return null == t3 && (t3 = void 0), t3; 22794} 22795function wn(t3, e3, n3, r3, i3) { 22796 return Ze(t3, n3, r3 = En(r3), i3), r3 && !at(r3) && ze(t3.v), t3; 22797} 22798function Tn(t3, e3, n3, r3) { 22799 t: { 22800 var i3 = r3 = En(r3); 22801 We(t3); 22802 const s3 = t3.v; 22803 let o3 = 0 | s3[Q]; 22804 if (null == i3) { 22805 const t4 = fn(s3); 22806 if (pn(t4, s3, o3, n3) !== e3) break t; 22807 t4.set(n3, 0); 22808 } else o3 = dn(s3, o3, n3, e3); 22809 Qe(s3, o3, e3, i3); 22810 } 22811 r3 && !at(r3) && ze(t3.v); 22812} 22813function An(t3, e3) { 22814 return -273 & (2 & e3 ? 2 | t3 : -3 & t3); 22815} 22816function bn(t3, e3, n3, r3) { 22817 var i3 = r3; 22818 We(t3), t3 = _n(t3, r3 = t3.v, 0 | r3[Q], n3, e3, 2, true), i3 = null != i3 ? i3 : new n3(), t3.push(i3), e3 = n3 = t3 === tt ? 7 : 0 | t3[Q], (i3 = at(i3)) ? (n3 &= -9, 1 === t3.length && (n3 &= -4097)) : n3 |= 4096, n3 !== e3 && rt(t3, n3), i3 || ze(r3); 22819} 22820function kn(t3, e3, n3) { 22821 return ee($e(t3, e3, void 0, n3)); 22822} 22823function Sn(t3, e3) { 22824 return $e(t3, e3, void 0, void 0, $t) ?? 0; 22825} 22826function xn(t3, e3, n3) { 22827 if (null != n3) { 22828 if ("number" != typeof n3) throw N("int32"); 22829 if (!zt(n3)) throw N("int32"); 22830 n3 |= 0; 22831 } 22832 Ze(t3, e3, n3); 22833} 22834function Ln(t3, e3, n3) { 22835 Ze(t3, e3, qt(n3)); 22836} 22837function Rn(t3, e3, n3) { 22838 hn(t3, e3, ue(n3), ""); 22839} 22840function In(t3, e3, n3) { 22841 { 22842 We(t3); 22843 const o3 = t3.v; 22844 let a3 = 0 | o3[Q]; 22845 if (null == n3) Qe(o3, a3, e3); 22846 else { 22847 var r3 = t3 = n3 === tt ? 7 : 0 | n3[Q], i3 = on(t3), s3 = i3 || Object.isFrozen(n3); 22848 for (i3 || (t3 = 0), s3 || (n3 = Vt(n3), r3 = 0, t3 = An(t3, a3), s3 = false), t3 |= 5, t3 |= (4 & t3 ? 512 & t3 ? 512 : 1024 & t3 ? 1024 : 0 : void 0) ?? 1024, i3 = 0; i3 < n3.length; i3++) { 22849 const e4 = n3[i3], o4 = he(e4); 22850 Object.is(e4, o4) || (s3 && (n3 = Vt(n3), r3 = 0, t3 = An(t3, a3), s3 = false), n3[i3] = o4); 22851 } 22852 t3 !== r3 && (s3 && (n3 = Vt(n3), t3 = An(t3, a3)), rt(n3, t3)), Qe(o3, a3, e3, n3); 22853 } 22854 } 22855} 22856function Fn(t3, e3, n3) { 22857 We(t3), en(t3, e3, le, 2, true).push(he(n3)); 22858} 22859function Pn(t3, e3) { 22860 if ("string" == typeof t3) return new Mn(S(t3), e3); 22861 if (Array.isArray(t3)) return new Mn(new Uint8Array(t3), e3); 22862 if (t3.constructor === Uint8Array) return new Mn(t3, false); 22863 if (t3.constructor === ArrayBuffer) return t3 = new Uint8Array(t3), new Mn(t3, false); 22864 if (t3.constructor === F) return e3 = I(t3) || new Uint8Array(0), new Mn(e3, true, t3); 22865 if (t3 instanceof Uint8Array) return t3 = t3.constructor === Uint8Array ? t3 : new Uint8Array(t3.buffer, t3.byteOffset, t3.byteLength), new Mn(t3, false); 22866 throw Error(); 22867} 22868function Cn(t3, e3) { 22869 let n3, r3 = 0, i3 = 0, s3 = 0; 22870 const o3 = t3.h; 22871 let a3 = t3.g; 22872 do { 22873 n3 = o3[a3++], r3 |= (127 & n3) << s3, s3 += 7; 22874 } while (s3 < 32 && 128 & n3); 22875 if (s3 > 32) for (i3 |= (127 & n3) >> 4, s3 = 3; s3 < 32 && 128 & n3; s3 += 7) n3 = o3[a3++], i3 |= (127 & n3) << s3; 22876 if (Gn(t3, a3), !(128 & n3)) return e3(r3 >>> 0, i3 >>> 0); 22877 throw Error(); 22878} 22879function On(t3) { 22880 let e3 = 0, n3 = t3.g; 22881 const r3 = n3 + 10, i3 = t3.h; 22882 for (; n3 < r3; ) { 22883 const r4 = i3[n3++]; 22884 if (e3 |= r4, 0 == (128 & r4)) return Gn(t3, n3), !!(127 & e3); 22885 } 22886 throw Error(); 22887} 22888function Nn(t3) { 22889 const e3 = t3.h; 22890 let n3 = t3.g, r3 = e3[n3++], i3 = 127 & r3; 22891 if (128 & r3 && (r3 = e3[n3++], i3 |= (127 & r3) << 7, 128 & r3 && (r3 = e3[n3++], i3 |= (127 & r3) << 14, 128 & r3 && (r3 = e3[n3++], i3 |= (127 & r3) << 21, 128 & r3 && (r3 = e3[n3++], i3 |= r3 << 28, 128 & r3 && 128 & e3[n3++] && 128 & e3[n3++] && 128 & e3[n3++] && 128 & e3[n3++] && 128 & e3[n3++]))))) throw Error(); 22892 return Gn(t3, n3), i3; 22893} 22894function Un(t3) { 22895 return Nn(t3) >>> 0; 22896} 22897function Dn(t3) { 22898 var e3 = t3.h; 22899 const n3 = t3.g; 22900 var r3 = e3[n3], i3 = e3[n3 + 1]; 22901 const s3 = e3[n3 + 2]; 22902 return e3 = e3[n3 + 3], Gn(t3, t3.g + 4), t3 = 2 * ((i3 = (r3 << 0 | i3 << 8 | s3 << 16 | e3 << 24) >>> 0) >> 31) + 1, r3 = i3 >>> 23 & 255, i3 &= 8388607, 255 == r3 ? i3 ? NaN : t3 * (1 / 0) : 0 == r3 ? 1401298464324817e-60 * t3 * i3 : t3 * Math.pow(2, r3 - 150) * (i3 + 8388608); 22903} 22904function Bn(t3) { 22905 return Nn(t3); 22906} 22907function Gn(t3, e3) { 22908 if (t3.g = e3, e3 > t3.l) throw Error(); 22909} 22910function jn(t3, e3) { 22911 if (e3 < 0) throw Error(); 22912 const n3 = t3.g; 22913 if ((e3 = n3 + e3) > t3.l) throw Error(); 22914 return t3.g = e3, n3; 22915} 22916function Vn(t3, e3) { 22917 if (0 == e3) return R(); 22918 var n3 = jn(t3, e3); 22919 return t3.Y && t3.j ? n3 = t3.h.subarray(n3, n3 + e3) : (t3 = t3.h, n3 = n3 === (e3 = n3 + e3) ? new Uint8Array(0) : xt ? t3.slice(n3, e3) : new Uint8Array(t3.subarray(n3, e3))), 0 == n3.length ? R() : new F(n3, L); 22920} 22921function Hn(t3, e3, n3, r3) { 22922 if (Qn.length) { 22923 const i3 = Qn.pop(); 22924 return i3.o(r3), i3.g.init(t3, e3, n3, r3), i3; 22925 } 22926 return new Zn(t3, e3, n3, r3); 22927} 22928function Wn(t3) { 22929 t3.g.clear(), t3.l = -1, t3.h = -1, Qn.length < 100 && Qn.push(t3); 22930} 22931function zn(t3) { 22932 var e3 = t3.g; 22933 if (e3.g == e3.l) return false; 22934 t3.m = t3.g.g; 22935 var n3 = Un(t3.g); 22936 if (e3 = n3 >>> 3, !((n3 &= 7) >= 0 && n3 <= 5)) throw Error(); 22937 if (e3 < 1) throw Error(); 22938 return t3.l = e3, t3.h = n3, true; 22939} 22940function Kn(t3) { 22941 switch (t3.h) { 22942 case 0: 22943 0 != t3.h ? Kn(t3) : On(t3.g); 22944 break; 22945 case 1: 22946 Gn(t3 = t3.g, t3.g + 8); 22947 break; 22948 case 2: 22949 if (2 != t3.h) Kn(t3); 22950 else { 22951 var e3 = Un(t3.g); 22952 Gn(t3 = t3.g, t3.g + e3); 22953 } 22954 break; 22955 case 5: 22956 Gn(t3 = t3.g, t3.g + 4); 22957 break; 22958 case 3: 22959 for (e3 = t3.l; ; ) { 22960 if (!zn(t3)) throw Error(); 22961 if (4 == t3.h) { 22962 if (t3.l != e3) throw Error(); 22963 break; 22964 } 22965 Kn(t3); 22966 } 22967 break; 22968 default: 22969 throw Error(); 22970 } 22971} 22972function Yn(t3, e3, n3) { 22973 const r3 = t3.g.l; 22974 var i3 = Un(t3.g); 22975 let s3 = (i3 = t3.g.g + i3) - r3; 22976 if (s3 <= 0 && (t3.g.l = i3, n3(e3, t3, void 0, void 0, void 0), s3 = i3 - t3.g.g), s3) throw Error(); 22977 return t3.g.g = i3, t3.g.l = r3, e3; 22978} 22979function qn(t3) { 22980 var e3 = Un(t3.g), a3 = jn(t3 = t3.g, e3); 22981 if (t3 = t3.h, o) { 22982 var c3, h3 = t3; 22983 (c3 = s) || (c3 = s = new TextDecoder("utf-8", { fatal: true })), e3 = a3 + e3, h3 = 0 === a3 && e3 === h3.length ? h3 : h3.subarray(a3, e3); 22984 try { 22985 var u3 = c3.decode(h3); 22986 } catch (t4) { 22987 if (void 0 === i) { 22988 try { 22989 c3.decode(new Uint8Array([128])); 22990 } catch (t5) { 22991 } 22992 try { 22993 c3.decode(new Uint8Array([97])), i = true; 22994 } catch (t5) { 22995 i = false; 22996 } 22997 } 22998 throw !i && (s = void 0), t4; 22999 } 23000 } else { 23001 e3 = (u3 = a3) + e3, a3 = []; 23002 let i3, s3 = null; 23003 for (; u3 < e3; ) { 23004 var l3 = t3[u3++]; 23005 l3 < 128 ? a3.push(l3) : l3 < 224 ? u3 >= e3 ? n() : (i3 = t3[u3++], l3 < 194 || 128 != (192 & i3) ? (u3--, n()) : a3.push((31 & l3) << 6 | 63 & i3)) : l3 < 240 ? u3 >= e3 - 1 ? n() : (i3 = t3[u3++], 128 != (192 & i3) || 224 === l3 && i3 < 160 || 237 === l3 && i3 >= 160 || 128 != (192 & (c3 = t3[u3++])) ? (u3--, n()) : a3.push((15 & l3) << 12 | (63 & i3) << 6 | 63 & c3)) : l3 <= 244 ? u3 >= e3 - 2 ? n() : (i3 = t3[u3++], 128 != (192 & i3) || i3 - 144 + (l3 << 28) >> 30 != 0 || 128 != (192 & (c3 = t3[u3++])) || 128 != (192 & (h3 = t3[u3++])) ? (u3--, n()) : (l3 = (7 & l3) << 18 | (63 & i3) << 12 | (63 & c3) << 6 | 63 & h3, l3 -= 65536, a3.push(55296 + (l3 >> 10 & 1023), 56320 + (1023 & l3)))) : n(), a3.length >= 8192 && (s3 = r(s3, a3), a3.length = 0); 23006 } 23007 u3 = r(s3, a3); 23008 } 23009 return u3; 23010} 23011function $n(t3) { 23012 const e3 = Un(t3.g); 23013 return Vn(t3.g, e3); 23014} 23015function Jn(t3, e3, n3) { 23016 var r3 = Un(t3.g); 23017 for (r3 = t3.g.g + r3; t3.g.g < r3; ) n3.push(e3(t3.g)); 23018} 23019function tr(t3) { 23020 return t3 ? /^\d+$/.test(t3) ? (Gt(t3), new er(Rt, It)) : null : nr ||= new er(0, 0); 23021} 23022function rr(t3) { 23023 return t3 ? /^-?\d+$/.test(t3) ? (Gt(t3), new ir(Rt, It)) : null : sr ||= new ir(0, 0); 23024} 23025function or(t3, e3, n3) { 23026 for (; n3 > 0 || e3 > 127; ) t3.g.push(127 & e3 | 128), e3 = (e3 >>> 7 | n3 << 25) >>> 0, n3 >>>= 7; 23027 t3.g.push(e3); 23028} 23029function ar(t3, e3) { 23030 for (; e3 > 127; ) t3.g.push(127 & e3 | 128), e3 >>>= 7; 23031 t3.g.push(e3); 23032} 23033function cr(t3, e3) { 23034 if (e3 >= 0) ar(t3, e3); 23035 else { 23036 for (let n3 = 0; n3 < 9; n3++) t3.g.push(127 & e3 | 128), e3 >>= 7; 23037 t3.g.push(1); 23038 } 23039} 23040function hr(t3) { 23041 var e3 = Rt; 23042 t3.g.push(e3 >>> 0 & 255), t3.g.push(e3 >>> 8 & 255), t3.g.push(e3 >>> 16 & 255), t3.g.push(e3 >>> 24 & 255); 23043} 23044function ur(t3, e3) { 23045 0 !== e3.length && (t3.l.push(e3), t3.h += e3.length); 23046} 23047function lr(t3, e3, n3) { 23048 ar(t3.g, 8 * e3 + n3); 23049} 23050function fr(t3, e3) { 23051 return lr(t3, e3, 2), e3 = t3.g.end(), ur(t3, e3), e3.push(t3.h), e3; 23052} 23053function dr(t3, e3) { 23054 var n3 = e3.pop(); 23055 for (n3 = t3.h + t3.g.length() - n3; n3 > 127; ) e3.push(127 & n3 | 128), n3 >>>= 7, t3.h++; 23056 e3.push(n3), t3.h++; 23057} 23058function pr(t3, e3, n3) { 23059 lr(t3, e3, 2), ar(t3.g, n3.length), ur(t3, t3.g.end()), ur(t3, n3); 23060} 23061function gr(t3, e3, n3, r3) { 23062 null != n3 && (e3 = fr(t3, e3), r3(n3, t3), dr(t3, e3)); 23063} 23064function mr() { 23065 const t3 = class { 23066 constructor() { 23067 throw Error(); 23068 } 23069 }; 23070 return Object.setPrototypeOf(t3, t3.prototype), t3; 23071} 23072function xr(t3, e3, n3) { 23073 var r3 = t3.v; 23074 H && H in r3 && (r3 = r3[H]) && delete r3[e3.g], e3.h ? e3.j(t3, e3.h, e3.g, n3, e3.l) : e3.j(t3, e3.g, n3, e3.l); 23075} 23076function Ir(t3, e3) { 23077 return new Rr(t3, e3, yr); 23078} 23079function Fr(t3, e3, n3, r3, i3) { 23080 gr(t3, n3, Xr(e3, r3), i3); 23081} 23082function jr(t3, e3, n3, r3) { 23083 var i3 = r3[t3]; 23084 if (i3) return i3; 23085 (i3 = {}).qa = r3, i3.T = (function(t4) { 23086 switch (typeof t4) { 23087 case "boolean": 23088 return Pe ||= [0, void 0, true]; 23089 case "number": 23090 return t4 > 0 ? void 0 : 0 === t4 ? Ce ||= [0, void 0] : [-t4, void 0]; 23091 case "string": 23092 return [0, t4]; 23093 case "object": 23094 return t4; 23095 } 23096 })(r3[0]); 23097 var s3 = r3[1]; 23098 let o3 = 1; 23099 s3 && s3.constructor === Object && (i3.ba = s3, "function" == typeof (s3 = r3[++o3]) && (i3.ma = true, Br ??= s3, Gr ??= r3[o3 + 1], s3 = r3[o3 += 2])); 23100 const a3 = {}; 23101 for (; s3 && Array.isArray(s3) && s3.length && "number" == typeof s3[0] && s3[0] > 0; ) { 23102 for (var c3 = 0; c3 < s3.length; c3++) a3[s3[c3]] = s3; 23103 s3 = r3[++o3]; 23104 } 23105 for (c3 = 1; void 0 !== s3; ) { 23106 let t4; 23107 "number" == typeof s3 && (c3 += s3, s3 = r3[++o3]); 23108 var h3 = void 0; 23109 if (s3 instanceof Rr ? t4 = s3 : (t4 = Mr, o3--), t4?.l) { 23110 s3 = r3[++o3], h3 = r3; 23111 var u3 = o3; 23112 "function" == typeof s3 && (s3 = s3(), h3[u3] = s3), h3 = s3; 23113 } 23114 for (u3 = c3 + 1, "number" == typeof (s3 = r3[++o3]) && s3 < 0 && (u3 -= s3, s3 = r3[++o3]); c3 < u3; c3++) { 23115 const r4 = a3[c3]; 23116 h3 ? n3(i3, c3, t4, h3, r4) : e3(i3, c3, t4, r4); 23117 } 23118 } 23119 return r3[t3] = i3; 23120} 23121function Vr(t3) { 23122 return Array.isArray(t3) ? t3[0] instanceof Rr ? t3 : [Pr, t3] : [t3, void 0]; 23123} 23124function Xr(t3, e3) { 23125 return t3 instanceof Lr ? t3.v : Array.isArray(t3) ? Ne(t3, e3) : void 0; 23126} 23127function Hr(t3, e3, n3, r3) { 23128 const i3 = n3.g; 23129 t3[e3] = r3 ? (t4, e4, n4) => i3(t4, e4, n4, r3) : i3; 23130} 23131function Wr(t3, e3, n3, r3, i3) { 23132 const s3 = n3.g; 23133 let o3, a3; 23134 t3[e3] = (t4, e4, n4) => s3(t4, e4, n4, a3 ||= jr(Or, Hr, Wr, r3).T, o3 ||= zr(r3), i3); 23135} 23136function zr(t3) { 23137 let e3 = t3[Nr]; 23138 if (null != e3) return e3; 23139 const n3 = jr(Or, Hr, Wr, t3); 23140 return e3 = n3.ma ? (t4, e4) => Br(t4, e4, n3) : (t4, e4) => { 23141 for (; zn(e4) && 4 != e4.h; ) { 23142 var r3 = e4.l, i3 = n3[r3]; 23143 if (null == i3) { 23144 var s3 = n3.ba; 23145 s3 && (s3 = s3[r3]) && (null != (s3 = Yr(s3)) && (i3 = n3[r3] = s3)); 23146 } 23147 if (null == i3 || !i3(e4, t4, r3)) { 23148 if (i3 = (s3 = e4).m, Kn(s3), s3.ha) var o3 = void 0; 23149 else o3 = s3.g.g - i3, s3.g.g = i3, o3 = Vn(s3.g, o3); 23150 i3 = void 0, s3 = t4, o3 && ((i3 = s3[H] ?? (s3[H] = new xe()))[r3] ?? (i3[r3] = [])).push(o3); 23151 } 23152 } 23153 return (t4 = ke(t4)) && (t4.da = n3.qa[Dr]), true; 23154 }, t3[Nr] = e3, t3[Dr] = Kr.bind(t3), e3; 23155} 23156function Kr(t3, e3, n3, r3) { 23157 var i3 = this[Or]; 23158 const s3 = this[Nr], o3 = Ne(void 0, i3.T), a3 = ke(t3); 23159 if (a3) { 23160 var c3 = false, h3 = i3.ba; 23161 if (h3) { 23162 if (i3 = (e4, n4, i4) => { 23163 if (0 !== i4.length) if (h3[n4]) for (const t4 of i4) { 23164 e4 = Hn(t4); 23165 try { 23166 c3 = true, s3(o3, e4); 23167 } finally { 23168 Wn(e4); 23169 } 23170 } 23171 else r3?.(t3, n4, i4); 23172 }, null == e3) Se(a3, i3); 23173 else if (null != a3) { 23174 const t4 = a3[e3]; 23175 t4 && i3(a3, e3, t4); 23176 } 23177 if (c3) { 23178 let r4 = 0 | t3[Q]; 23179 if (2 & r4 && 2048 & r4 && !n3?.Ka) throw Error(); 23180 const i4 = pt(r4), s4 = (e4, s5) => { 23181 if (null != Je(t3, e4, i4)) { 23182 if (1 === n3?.Qa) return; 23183 throw Error(); 23184 } 23185 null != s5 && (r4 = Qe(t3, r4, e4, s5, i4)), delete a3[e4]; 23186 }; 23187 null == e3 ? ft(o3, 0 | o3[Q], ((t4, e4) => { 23188 s4(t4, e4); 23189 })) : s4(e3, Je(o3, e3, i4)); 23190 } 23191 } 23192 } 23193} 23194function Yr(t3) { 23195 const e3 = (t3 = Vr(t3))[0].g; 23196 if (t3 = t3[1]) { 23197 const n3 = zr(t3), r3 = jr(Or, Hr, Wr, t3).T; 23198 return (t4, i3, s3) => e3(t4, i3, s3, r3, n3); 23199 } 23200 return e3; 23201} 23202function qr(t3, e3, n3) { 23203 t3[e3] = n3.h; 23204} 23205function $r(t3, e3, n3, r3) { 23206 let i3, s3; 23207 const o3 = n3.h; 23208 t3[e3] = (t4, e4, n4) => o3(t4, e4, n4, s3 ||= jr(Cr, qr, $r, r3).T, i3 ||= Jr(r3)); 23209} 23210function Jr(t3) { 23211 let e3 = t3[Ur]; 23212 if (!e3) { 23213 const n3 = jr(Cr, qr, $r, t3); 23214 e3 = (t4, e4) => Zr(t4, e4, n3), t3[Ur] = e3; 23215 } 23216 return e3; 23217} 23218function Zr(t3, e3, n3) { 23219 ft(t3, 0 | t3[Q], ((t4, r3) => { 23220 if (null != r3) { 23221 var i3 = (function(t5, e4) { 23222 var n4 = t5[e4]; 23223 if (n4) return n4; 23224 if ((n4 = t5.ba) && (n4 = n4[e4])) { 23225 var r4 = (n4 = Vr(n4))[0].h; 23226 if (n4 = n4[1]) { 23227 const e5 = Jr(n4), i4 = jr(Cr, qr, $r, n4).T; 23228 n4 = t5.ma ? Gr(i4, e5) : (t6, n5, s3) => r4(t6, n5, s3, i4, e5); 23229 } else n4 = r4; 23230 return t5[e4] = n4; 23231 } 23232 })(n3, t4); 23233 i3 ? i3(e3, r3, t4) : t4 < 500 || U(K, 3); 23234 } 23235 })), (t3 = ke(t3)) && Se(t3, ((t4, n4, r3) => { 23236 for (ur(e3, e3.g.end()), t4 = 0; t4 < r3.length; t4++) ur(e3, I(r3[t4]) || new Uint8Array(0)); 23237 })); 23238} 23239function ti(t3, e3) { 23240 if (Array.isArray(e3)) { 23241 var n3 = 0 | e3[Q]; 23242 if (4 & n3) return e3; 23243 for (var r3 = 0, i3 = 0; r3 < e3.length; r3++) { 23244 const n4 = t3(e3[r3]); 23245 null != n4 && (e3[i3++] = n4); 23246 } 23247 return i3 < r3 && (e3.length = i3), (t3 = -1537 & (5 | n3)) !== n3 && rt(e3, t3), 2 & t3 && Object.freeze(e3), e3; 23248 } 23249} 23250function ei(t3, e3, n3) { 23251 return new Rr(t3, e3, n3); 23252} 23253function ni(t3, e3, n3) { 23254 return new Rr(t3, e3, n3); 23255} 23256function ri(t3, e3, n3) { 23257 Qe(t3, 0 | t3[Q], e3, n3, pt(0 | t3[Q])); 23258} 23259function si(t3, e3, n3) { 23260 null != (e3 = $t(e3)) && (lr(t3, n3, 5), t3 = t3.g, Pt(e3), hr(t3)); 23261} 23262function oi(t3, e3, n3) { 23263 if (e3 = (function(t4) { 23264 if (null == t4) return t4; 23265 const e4 = typeof t4; 23266 if ("bigint" === e4) return String(Xt(64, t4)); 23267 if (te(t4)) { 23268 if ("string" === e4) return se(t4); 23269 if ("number" === e4) return ie(t4); 23270 } 23271 })(e3), null != e3) { 23272 if ("string" == typeof e3) rr(e3); 23273 if (null != e3) switch (lr(t3, n3, 0), typeof e3) { 23274 case "number": 23275 t3 = t3.g, Mt(e3), or(t3, Rt, It); 23276 break; 23277 case "bigint": 23278 n3 = BigInt.asUintN(64, e3), n3 = new ir(Number(n3 & BigInt(4294967295)), Number(n3 >> BigInt(32))), or(t3.g, n3.h, n3.g); 23279 break; 23280 default: 23281 n3 = rr(e3), or(t3.g, n3.h, n3.g); 23282 } 23283 } 23284} 23285function ai(t3, e3, n3) { 23286 null != (e3 = ee(e3)) && null != e3 && (lr(t3, n3, 0), cr(t3.g, e3)); 23287} 23288function ci(t3, e3, n3) { 23289 null != (e3 = Zt(e3)) && (lr(t3, n3, 0), t3.g.g.push(e3 ? 1 : 0)); 23290} 23291function hi(t3, e3, n3) { 23292 null != (e3 = le(e3)) && pr(t3, n3, h(e3)); 23293} 23294function ui(t3, e3, n3, r3, i3) { 23295 gr(t3, n3, Xr(e3, r3), i3); 23296} 23297function li(t3, e3, n3) { 23298 null != (e3 = null == e3 || "string" == typeof e3 || e3 instanceof F ? e3 : void 0) && pr(t3, n3, Pn(e3, true).buffer); 23299} 23300function fi(t3, e3, n3) { 23301 null != (e3 = ne(e3)) && null != e3 && (lr(t3, n3, 0), ar(t3.g, e3)); 23302} 23303function di(t3, e3, n3) { 23304 return (5 === t3.h || 2 === t3.h) && (e3 = un(e3, 0 | e3[Q], n3), 2 == t3.h ? Jn(t3, Dn, e3) : e3.push(Dn(t3.g)), true); 23305} 23306function Ni(t3, e3) { 23307 return new Oi(t3, e3); 23308} 23309function Ui(t3, e3) { 23310 return (n3, r3) => { 23311 { 23312 const s3 = { ea: true }; 23313 r3 && Object.assign(s3, r3), n3 = Hn(n3, void 0, void 0, s3); 23314 try { 23315 const r4 = new t3(), s4 = r4.v; 23316 zr(e3)(s4, n3); 23317 var i3 = r4; 23318 } finally { 23319 Wn(n3); 23320 } 23321 } 23322 return i3; 23323 }; 23324} 23325function Di(t3) { 23326 return function() { 23327 const e3 = new class { 23328 constructor() { 23329 this.l = [], this.h = 0, this.g = new class { 23330 constructor() { 23331 this.g = []; 23332 } 23333 length() { 23334 return this.g.length; 23335 } 23336 end() { 23337 const t4 = this.g; 23338 return this.g = [], t4; 23339 } 23340 }(); 23341 } 23342 }(); 23343 Zr(this.v, e3, jr(Cr, qr, $r, t3)), ur(e3, e3.g.end()); 23344 const n3 = new Uint8Array(e3.h), r3 = e3.l, i3 = r3.length; 23345 let s3 = 0; 23346 for (let t4 = 0; t4 < i3; t4++) { 23347 const e4 = r3[t4]; 23348 n3.set(e4, s3), s3 += e4.length; 23349 } 23350 return e3.l = [n3], n3; 23351 }; 23352} 23353function Xi(t3) { 23354 var e3; 23355 return void 0 === ji && (ji = (function() { 23356 let t4 = null; 23357 if (!Vi) return t4; 23358 try { 23359 const e4 = (t5) => t5; 23360 t4 = Vi.createPolicy("goog#html", { createHTML: e4, createScript: e4, createScriptURL: e4 }); 23361 } catch (t5) { 23362 } 23363 return t4; 23364 })()), t3 = (e3 = ji) ? e3.createScriptURL(t3) : t3, new class { 23365 constructor(t4) { 23366 this.g = t4; 23367 } 23368 toString() { 23369 return this.g + ""; 23370 } 23371 }(t3); 23372} 23373function Hi(t3, ...e3) { 23374 if (0 === e3.length) return Xi(t3[0]); 23375 let n3 = t3[0]; 23376 for (let r3 = 0; r3 < e3.length; r3++) n3 += encodeURIComponent(e3[r3]) + t3[r3 + 1]; 23377 return Xi(n3); 23378} 23379function ns(t3, e3) { 23380 Fn(t3, 3, e3); 23381} 23382function rs(t3, e3) { 23383 Fn(t3, 4, e3); 23384} 23385function cs(t3, e3) { 23386 bn(t3, 1, is, e3); 23387} 23388function hs(t3, e3) { 23389 Fn(t3, 10, e3); 23390} 23391function us(t3, e3) { 23392 Fn(t3, 15, e3); 23393} 23394function Bo(t3, e3) { 23395 return e3 = e3 ? e3.clone() : new Ns(), void 0 !== t3.displayNamesLocale ? Ze(e3, 1, ue(t3.displayNamesLocale)) : void 0 === t3.displayNamesLocale && Ze(e3, 1), void 0 !== t3.maxResults ? xn(e3, 2, t3.maxResults) : "maxResults" in t3 && Ze(e3, 2), void 0 !== t3.scoreThreshold ? Ln(e3, 3, t3.scoreThreshold) : "scoreThreshold" in t3 && Ze(e3, 3), void 0 !== t3.categoryAllowlist ? In(e3, 4, t3.categoryAllowlist) : "categoryAllowlist" in t3 && Ze(e3, 4), void 0 !== t3.categoryDenylist ? In(e3, 5, t3.categoryDenylist) : "categoryDenylist" in t3 && Ze(e3, 5), e3; 23396} 23397function Go(t3) { 23398 const e3 = Number(t3); 23399 return Number.isSafeInteger(e3) ? e3 : String(t3); 23400} 23401function jo(t3, e3 = -1, n3 = "") { 23402 return { categories: t3.map(((t4) => ({ index: kn(t4, 1) ?? 0 ?? -1, score: Sn(t4, 2) ?? 0, categoryName: le($e(t4, 3)) ?? "" ?? "", displayName: le($e(t4, 4)) ?? "" ?? "" }))), headIndex: e3, headName: n3 }; 23403} 23404function Vo(t3) { 23405 const e3 = { classifications: vn(t3, Rs, 1).map(((t4) => jo(yn(t4, gs, 4)?.g() ?? [], kn(t4, 2) ?? 0, le($e(t4, 3)) ?? ""))) }; 23406 return null != (function(t4) { 23407 return null == t4 ? t4 : "bigint" == typeof t4 ? (wt(t4) ? t4 = Number(t4) : (t4 = Xt(64, t4), t4 = wt(t4) ? Number(t4) : String(t4)), t4) : te(t4) ? "number" == typeof t4 ? ie(t4) : se(t4) : void 0; 23408 })($e(t3, 2, void 0, void 0, ce)) && (e3.timestampMs = Go($e(t3, 2, void 0, void 0, ce) ?? Ye)), e3; 23409} 23410function Xo(t3) { 23411 var e3 = en(t3, 3, $t, tn()), n3 = en(t3, 2, ee, tn()), r3 = en(t3, 1, le, tn()), i3 = en(t3, 9, le, tn()); 23412 const s3 = { categories: [], keypoints: [] }; 23413 for (let t4 = 0; t4 < e3.length; t4++) s3.categories.push({ score: e3[t4], index: n3[t4] ?? -1, categoryName: r3[t4] ?? "", displayName: i3[t4] ?? "" }); 23414 if ((e3 = yn(t3, Es, 4)?.l()) && (s3.boundingBox = { originX: kn(e3, 1, qe) ?? 0, originY: kn(e3, 2, qe) ?? 0, width: kn(e3, 3, qe) ?? 0, height: kn(e3, 4, qe) ?? 0, angle: 0 }), yn(t3, Es, 4)?.g().length) for (const e4 of yn(t3, Es, 4).g()) s3.keypoints.push({ x: $e(e4, 1, void 0, qe, $t) ?? 0, y: $e(e4, 2, void 0, qe, $t) ?? 0, score: $e(e4, 4, void 0, qe, $t) ?? 0, label: le($e(e4, 3, void 0, qe)) ?? "" }); 23415 return s3; 23416} 23417function Ho(t3) { 23418 const e3 = []; 23419 for (const n3 of vn(t3, bs, 1)) e3.push({ x: Sn(n3, 1) ?? 0, y: Sn(n3, 2) ?? 0, z: Sn(n3, 3) ?? 0, visibility: Sn(n3, 4) ?? 0 }); 23420 return e3; 23421} 23422function Wo(t3) { 23423 const e3 = []; 23424 for (const n3 of vn(t3, Ts, 1)) e3.push({ x: Sn(n3, 1) ?? 0, y: Sn(n3, 2) ?? 0, z: Sn(n3, 3) ?? 0, visibility: Sn(n3, 4) ?? 0 }); 23425 return e3; 23426} 23427function zo(t3) { 23428 return Array.from(t3, ((t4) => t4 > 127 ? t4 - 256 : t4)); 23429} 23430function Ko(t3, e3) { 23431 if (t3.length !== e3.length) throw Error(`Cannot compute cosine similarity between embeddings of different sizes (${t3.length} vs. ${e3.length}).`); 23432 let n3 = 0, r3 = 0, i3 = 0; 23433 for (let s3 = 0; s3 < t3.length; s3++) n3 += t3[s3] * e3[s3], r3 += t3[s3] * t3[s3], i3 += e3[s3] * e3[s3]; 23434 if (r3 <= 0 || i3 <= 0) throw Error("Cannot compute cosine similarity on embedding with 0 norm."); 23435 return n3 / Math.sqrt(r3 * i3); 23436} 23437async function $o(t3) { 23438 if (t3) return true; 23439 if (void 0 === Yo) try { 23440 await WebAssembly.instantiate(qo), Yo = true; 23441 } catch { 23442 Yo = false; 23443 } 23444 return Yo; 23445} 23446async function Jo(t3, e3, n3) { 23447 return { wasmLoaderPath: `${e3}/${t3}_${n3 = `wasm${n3 ? "_module" : ""}${await $o(n3) ? "" : "_nosimd"}_internal`}.js`, wasmBinaryPath: `${e3}/${t3}_${n3}.wasm` }; 23448} 23449function Qo() { 23450 var t3 = navigator; 23451 return "undefined" != typeof OffscreenCanvas && (!(function(t4 = navigator) { 23452 return (t4 = t4.userAgent).includes("Safari") && !t4.includes("Chrome"); 23453 })(t3) || !!((t3 = t3.userAgent.match(/Version\/([\d]+).*Safari/)) && t3.length >= 1 && Number(t3[1]) >= 17)); 23454} 23455async function ta(t3) { 23456 if ("function" != typeof importScripts) { 23457 const e3 = document.createElement("script"); 23458 return e3.src = t3.toString(), e3.crossOrigin = "anonymous", new Promise(((t4, n3) => { 23459 e3.addEventListener("load", (() => { 23460 t4(); 23461 }), false), e3.addEventListener("error", ((t5) => { 23462 n3(t5); 23463 }), false), document.body.appendChild(e3); 23464 })); 23465 } 23466 try { 23467 importScripts(t3.toString()); 23468 } catch (e3) { 23469 if (!(e3 instanceof TypeError)) throw e3; 23470 await self.import(t3.toString()); 23471 } 23472} 23473function ea(t3) { 23474 return void 0 !== t3.videoWidth ? [t3.videoWidth, t3.videoHeight] : void 0 !== t3.naturalWidth ? [t3.naturalWidth, t3.naturalHeight] : void 0 !== t3.displayWidth ? [t3.displayWidth, t3.displayHeight] : [t3.width, t3.height]; 23475} 23476function na(t3, e3, n3) { 23477 t3.m || console.error("No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target"), n3(e3 = t3.i.stringToNewUTF8(e3)), t3.i._free(e3); 23478} 23479function ra(t3, e3, n3) { 23480 if (!t3.i.canvas) throw Error("No OpenGL canvas configured."); 23481 if (n3 ? t3.i._bindTextureToStream(n3) : t3.i._bindTextureToCanvas(), !(n3 = t3.i.canvas.getContext("webgl2") || t3.i.canvas.getContext("webgl"))) throw Error("Failed to obtain WebGL context from the provided canvas. `getContext()` should only be invoked with `webgl` or `webgl2`."); 23482 t3.i.gpuOriginForWebTexturesIsBottomLeft && n3.pixelStorei(n3.UNPACK_FLIP_Y_WEBGL, true), n3.texImage2D(n3.TEXTURE_2D, 0, n3.RGBA, n3.RGBA, n3.UNSIGNED_BYTE, e3), t3.i.gpuOriginForWebTexturesIsBottomLeft && n3.pixelStorei(n3.UNPACK_FLIP_Y_WEBGL, false); 23483 const [r3, i3] = ea(e3); 23484 return !t3.l || r3 === t3.i.canvas.width && i3 === t3.i.canvas.height || (t3.i.canvas.width = r3, t3.i.canvas.height = i3), [r3, i3]; 23485} 23486function ia(t3, e3, n3) { 23487 t3.m || console.error("No wasm multistream support detected: ensure dependency inclusion of :gl_graph_runner_internal_multi_input target"); 23488 const r3 = new Uint32Array(e3.length); 23489 for (let n4 = 0; n4 < e3.length; n4++) r3[n4] = t3.i.stringToNewUTF8(e3[n4]); 23490 e3 = t3.i._malloc(4 * r3.length), t3.i.HEAPU32.set(r3, e3 >> 2), n3(e3); 23491 for (const e4 of r3) t3.i._free(e4); 23492 t3.i._free(e3); 23493} 23494function sa(t3, e3, n3) { 23495 t3.i.simpleListeners = t3.i.simpleListeners || {}, t3.i.simpleListeners[e3] = n3; 23496} 23497function oa(t3, e3, n3) { 23498 let r3 = []; 23499 t3.i.simpleListeners = t3.i.simpleListeners || {}, t3.i.simpleListeners[e3] = (t4, e4, i3) => { 23500 e4 ? (n3(r3, i3), r3 = []) : r3.push(t4); 23501 }; 23502} 23503async function aa(t3, e3, n3, r3) { 23504 return t3 = await (async (t4, e4, n4, r4, i3) => { 23505 if (e4 && await ta(e4), !self.ModuleFactory) throw Error("ModuleFactory not set."); 23506 if (n4 && (await ta(n4), !self.ModuleFactory)) throw Error("ModuleFactory not set."); 23507 return self.Module && i3 && ((e4 = self.Module).locateFile = i3.locateFile, i3.mainScriptUrlOrBlob && (e4.mainScriptUrlOrBlob = i3.mainScriptUrlOrBlob)), i3 = await self.ModuleFactory(self.Module || i3), self.ModuleFactory = self.Module = void 0, new t4(i3, r4); 23508 })(t3, n3.wasmLoaderPath, n3.assetLoaderPath, e3, { locateFile: (t4) => t4.endsWith(".wasm") ? n3.wasmBinaryPath.toString() : n3.assetBinaryPath && t4.endsWith(".data") ? n3.assetBinaryPath.toString() : t4 }), await t3.o(r3), t3; 23509} 23510function ca(t3, e3) { 23511 const n3 = yn(t3.baseOptions, Vs, 1) || new Vs(); 23512 "string" == typeof e3 ? (Ze(n3, 2, ue(e3)), Ze(n3, 1)) : e3 instanceof Uint8Array && (Ze(n3, 1, ht(e3, false)), Ze(n3, 2)), wn(t3.baseOptions, 0, 1, n3); 23513} 23514function ha(t3) { 23515 try { 23516 const e3 = t3.H.length; 23517 if (1 === e3) throw Error(t3.H[0].message); 23518 if (e3 > 1) throw Error("Encountered multiple errors: " + t3.H.map(((t4) => t4.message)).join(", ")); 23519 } finally { 23520 t3.H = []; 23521 } 23522} 23523function ua(t3, e3) { 23524 t3.C = Math.max(t3.C, e3); 23525} 23526function la(t3, e3) { 23527 t3.B = new is(), Rn(t3.B, 2, "PassThroughCalculator"), ns(t3.B, "free_memory"), rs(t3.B, "free_memory_unused_out"), hs(e3, "free_memory"), cs(e3, t3.B); 23528} 23529function fa(t3, e3) { 23530 ns(t3.B, e3), rs(t3.B, e3 + "_unused_out"); 23531} 23532function da(t3) { 23533 t3.g.addBoolToStream(true, "free_memory", t3.C); 23534} 23535function ga(t3, e3) { 23536 if (!t3) throw Error(`Unable to obtain required WebGL resource: ${e3}`); 23537 return t3; 23538} 23539function ya(t3, e3, n3) { 23540 const r3 = t3.g; 23541 if (n3 = ga(r3.createShader(n3), "Failed to create WebGL shader"), r3.shaderSource(n3, e3), r3.compileShader(n3), !r3.getShaderParameter(n3, r3.COMPILE_STATUS)) throw Error(`Could not compile WebGL shader: ${r3.getShaderInfoLog(n3)}`); 23542 return r3.attachShader(t3.h, n3), n3; 23543} 23544function _a(t3, e3) { 23545 const n3 = t3.g, r3 = ga(n3.createVertexArray(), "Failed to create vertex array"); 23546 n3.bindVertexArray(r3); 23547 const i3 = ga(n3.createBuffer(), "Failed to create buffer"); 23548 n3.bindBuffer(n3.ARRAY_BUFFER, i3), n3.enableVertexAttribArray(t3.O), n3.vertexAttribPointer(t3.O, 2, n3.FLOAT, false, 0, 0), n3.bufferData(n3.ARRAY_BUFFER, new Float32Array([-1, -1, -1, 1, 1, 1, 1, -1]), n3.STATIC_DRAW); 23549 const s3 = ga(n3.createBuffer(), "Failed to create buffer"); 23550 return n3.bindBuffer(n3.ARRAY_BUFFER, s3), n3.enableVertexAttribArray(t3.L), n3.vertexAttribPointer(t3.L, 2, n3.FLOAT, false, 0, 0), n3.bufferData(n3.ARRAY_BUFFER, new Float32Array(e3 ? [0, 1, 0, 0, 1, 0, 1, 1] : [0, 0, 0, 1, 1, 1, 1, 0]), n3.STATIC_DRAW), n3.bindBuffer(n3.ARRAY_BUFFER, null), n3.bindVertexArray(null), new ma(n3, r3, i3, s3); 23551} 23552function va(t3, e3) { 23553 if (t3.g) { 23554 if (e3 !== t3.g) throw Error("Cannot change GL context once initialized"); 23555 } else t3.g = e3; 23556} 23557function Ea(t3, e3, n3, r3) { 23558 return va(t3, e3), t3.h || (t3.m(), t3.D()), n3 ? (t3.u || (t3.u = _a(t3, true)), n3 = t3.u) : (t3.A || (t3.A = _a(t3, false)), n3 = t3.A), e3.useProgram(t3.h), n3.bind(), t3.l(), t3 = r3(), n3.g.bindVertexArray(null), t3; 23559} 23560function wa(t3, e3, n3) { 23561 return va(t3, e3), t3 = ga(e3.createTexture(), "Failed to create texture"), e3.bindTexture(e3.TEXTURE_2D, t3), e3.texParameteri(e3.TEXTURE_2D, e3.TEXTURE_WRAP_S, e3.CLAMP_TO_EDGE), e3.texParameteri(e3.TEXTURE_2D, e3.TEXTURE_WRAP_T, e3.CLAMP_TO_EDGE), e3.texParameteri(e3.TEXTURE_2D, e3.TEXTURE_MIN_FILTER, n3 ?? e3.LINEAR), e3.texParameteri(e3.TEXTURE_2D, e3.TEXTURE_MAG_FILTER, n3 ?? e3.LINEAR), e3.bindTexture(e3.TEXTURE_2D, null), t3; 23562} 23563function Ta(t3, e3, n3) { 23564 va(t3, e3), t3.B || (t3.B = ga(e3.createFramebuffer(), "Failed to create framebuffe.")), e3.bindFramebuffer(e3.FRAMEBUFFER, t3.B), e3.framebufferTexture2D(e3.FRAMEBUFFER, e3.COLOR_ATTACHMENT0, e3.TEXTURE_2D, n3, 0); 23565} 23566function Aa(t3) { 23567 t3.g?.bindFramebuffer(t3.g.FRAMEBUFFER, null); 23568} 23569function xa(t3, e3) { 23570 switch (e3) { 23571 case 0: 23572 return t3.g.find(((t4) => t4 instanceof Uint8Array)); 23573 case 1: 23574 return t3.g.find(((t4) => t4 instanceof Float32Array)); 23575 case 2: 23576 return t3.g.find(((t4) => "undefined" != typeof WebGLTexture && t4 instanceof WebGLTexture)); 23577 default: 23578 throw Error(`Type is not supported: ${e3}`); 23579 } 23580} 23581function La(t3) { 23582 var e3 = xa(t3, 1); 23583 if (!e3) { 23584 if (e3 = xa(t3, 0)) e3 = new Float32Array(e3).map(((t4) => t4 / 255)); 23585 else { 23586 e3 = new Float32Array(t3.width * t3.height); 23587 const r3 = Ia(t3); 23588 var n3 = Ma(t3); 23589 if (Ta(n3, r3, Ra(t3)), "iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform) || navigator.userAgent.includes("Mac") && "document" in self && "ontouchend" in self.document) { 23590 n3 = new Float32Array(t3.width * t3.height * 4), r3.readPixels(0, 0, t3.width, t3.height, r3.RGBA, r3.FLOAT, n3); 23591 for (let t4 = 0, r4 = 0; t4 < e3.length; ++t4, r4 += 4) e3[t4] = n3[r4]; 23592 } else r3.readPixels(0, 0, t3.width, t3.height, r3.RED, r3.FLOAT, e3); 23593 } 23594 t3.g.push(e3); 23595 } 23596 return e3; 23597} 23598function Ra(t3) { 23599 let e3 = xa(t3, 2); 23600 if (!e3) { 23601 const n3 = Ia(t3); 23602 e3 = Pa(t3); 23603 const r3 = La(t3), i3 = Fa(t3); 23604 n3.texImage2D(n3.TEXTURE_2D, 0, i3, t3.width, t3.height, 0, n3.RED, n3.FLOAT, r3), Ca(t3); 23605 } 23606 return e3; 23607} 23608function Ia(t3) { 23609 if (!t3.canvas) throw Error("Conversion to different image formats require that a canvas is passed when initializing the image."); 23610 return t3.h || (t3.h = ga(t3.canvas.getContext("webgl2"), "You cannot use a canvas that is already bound to a different type of rendering context.")), t3.h; 23611} 23612function Fa(t3) { 23613 if (t3 = Ia(t3), !Oa) if (t3.getExtension("EXT_color_buffer_float") && t3.getExtension("OES_texture_float_linear") && t3.getExtension("EXT_float_blend")) Oa = t3.R32F; 23614 else { 23615 if (!t3.getExtension("EXT_color_buffer_half_float")) throw Error("GPU does not fully support 4-channel float32 or float16 formats"); 23616 Oa = t3.R16F; 23617 } 23618 return Oa; 23619} 23620function Ma(t3) { 23621 return t3.l || (t3.l = new ba()), t3.l; 23622} 23623function Pa(t3) { 23624 const e3 = Ia(t3); 23625 e3.viewport(0, 0, t3.width, t3.height), e3.activeTexture(e3.TEXTURE0); 23626 let n3 = xa(t3, 2); 23627 return n3 || (n3 = wa(Ma(t3), e3, t3.m ? e3.LINEAR : e3.NEAREST), t3.g.push(n3), t3.j = true), e3.bindTexture(e3.TEXTURE_2D, n3), n3; 23628} 23629function Ca(t3) { 23630 t3.h.bindTexture(t3.h.TEXTURE_2D, null); 23631} 23632function Ba(t3) { 23633 return { ...Da, fillColor: (t3 = t3 || {}).color, ...t3 }; 23634} 23635function Ga(t3, e3) { 23636 return t3 instanceof Function ? t3(e3) : t3; 23637} 23638function ja(t3, e3, n3) { 23639 return Math.max(Math.min(e3, n3), Math.min(Math.max(e3, n3), t3)); 23640} 23641function Va(t3) { 23642 if (!t3.l) throw Error("CPU rendering requested but CanvasRenderingContext2D not provided."); 23643 return t3.l; 23644} 23645function Xa(t3) { 23646 if (!t3.j) throw Error("GPU rendering requested but WebGL2RenderingContext not provided."); 23647 return t3.j; 23648} 23649function Ha(t3, e3, n3) { 23650 if (e3.R()) n3(e3.N()); 23651 else { 23652 const r3 = e3.ka() ? e3.ia() : e3.ja(); 23653 t3.m = t3.m ?? new ba(); 23654 const i3 = Xa(t3); 23655 n3((t3 = new Na([r3], e3.m, false, i3.canvas, t3.m, e3.width, e3.height)).N()), t3.close(); 23656 } 23657} 23658function Wa(t3, e3, n3, r3) { 23659 const i3 = (function(t4) { 23660 return t4.g || (t4.g = new ka()), t4.g; 23661 })(t3), s3 = Xa(t3), o3 = Array.isArray(n3) ? new ImageData(new Uint8ClampedArray(n3), 1, 1) : n3; 23662 Ea(i3, s3, true, (() => { 23663 !(function(t5, e4, n4, r4) { 23664 const i4 = t5.g; 23665 if (i4.activeTexture(i4.TEXTURE0), i4.bindTexture(i4.TEXTURE_2D, e4), i4.activeTexture(i4.TEXTURE1), i4.bindTexture(i4.TEXTURE_2D, t5.C), i4.texImage2D(i4.TEXTURE_2D, 0, i4.RGBA, i4.RGBA, i4.UNSIGNED_BYTE, n4), t5.I && (function(t6, e5) { 23666 if (t6 !== e5) return false; 23667 t6 = t6.entries(), e5 = e5.entries(); 23668 for (const [r5, i5] of t6) { 23669 t6 = r5; 23670 const s4 = i5; 23671 var n5 = e5.next(); 23672 if (n5.done) return false; 23673 const [o4, a3] = n5.value; 23674 if (n5 = a3, t6 !== o4 || s4[0] !== n5[0] || s4[1] !== n5[1] || s4[2] !== n5[2] || s4[3] !== n5[3]) return false; 23675 } 23676 return !!e5.next().done; 23677 })(t5.I, r4)) i4.activeTexture(i4.TEXTURE2), i4.bindTexture(i4.TEXTURE_2D, t5.j); 23678 else { 23679 t5.I = r4; 23680 const e5 = Array(1024).fill(0); 23681 r4.forEach(((t6, n5) => { 23682 if (4 !== t6.length) throw Error(`Color at index ${n5} is not a four-channel value.`); 23683 e5[4 * n5] = t6[0], e5[4 * n5 + 1] = t6[1], e5[4 * n5 + 2] = t6[2], e5[4 * n5 + 3] = t6[3]; 23684 })), i4.activeTexture(i4.TEXTURE2), i4.bindTexture(i4.TEXTURE_2D, t5.j), i4.texImage2D(i4.TEXTURE_2D, 0, i4.RGBA, 256, 1, 0, i4.RGBA, i4.UNSIGNED_BYTE, new Uint8Array(e5)); 23685 } 23686 })(i3, e3, o3, r3), s3.clearColor(0, 0, 0, 0), s3.clear(s3.COLOR_BUFFER_BIT), s3.drawArrays(s3.TRIANGLE_FAN, 0, 4); 23687 const t4 = i3.g; 23688 t4.activeTexture(t4.TEXTURE0), t4.bindTexture(t4.TEXTURE_2D, null), t4.activeTexture(t4.TEXTURE1), t4.bindTexture(t4.TEXTURE_2D, null), t4.activeTexture(t4.TEXTURE2), t4.bindTexture(t4.TEXTURE_2D, null); 23689 })); 23690} 23691function za(t3, e3, n3, r3) { 23692 const i3 = Xa(t3), s3 = (function(t4) { 23693 return t4.h || (t4.h = new Sa()), t4.h; 23694 })(t3), o3 = Array.isArray(n3) ? new ImageData(new Uint8ClampedArray(n3), 1, 1) : n3, a3 = Array.isArray(r3) ? new ImageData(new Uint8ClampedArray(r3), 1, 1) : r3; 23695 Ea(s3, i3, true, (() => { 23696 var t4 = s3.g; 23697 t4.activeTexture(t4.TEXTURE0), t4.bindTexture(t4.TEXTURE_2D, e3), t4.activeTexture(t4.TEXTURE1), t4.bindTexture(t4.TEXTURE_2D, s3.j), t4.texImage2D(t4.TEXTURE_2D, 0, t4.RGBA, t4.RGBA, t4.UNSIGNED_BYTE, o3), t4.activeTexture(t4.TEXTURE2), t4.bindTexture(t4.TEXTURE_2D, s3.C), t4.texImage2D(t4.TEXTURE_2D, 0, t4.RGBA, t4.RGBA, t4.UNSIGNED_BYTE, a3), i3.clearColor(0, 0, 0, 0), i3.clear(i3.COLOR_BUFFER_BIT), i3.drawArrays(i3.TRIANGLE_FAN, 0, 4), i3.bindTexture(i3.TEXTURE_2D, null), (t4 = s3.g).activeTexture(t4.TEXTURE0), t4.bindTexture(t4.TEXTURE_2D, null), t4.activeTexture(t4.TEXTURE1), t4.bindTexture(t4.TEXTURE_2D, null), t4.activeTexture(t4.TEXTURE2), t4.bindTexture(t4.TEXTURE_2D, null); 23698 })); 23699} 23700function Ya(t3, e3) { 23701 switch (e3) { 23702 case 0: 23703 return t3.g.find(((t4) => t4 instanceof ImageData)); 23704 case 1: 23705 return t3.g.find(((t4) => "undefined" != typeof ImageBitmap && t4 instanceof ImageBitmap)); 23706 case 2: 23707 return t3.g.find(((t4) => "undefined" != typeof WebGLTexture && t4 instanceof WebGLTexture)); 23708 default: 23709 throw Error(`Type is not supported: ${e3}`); 23710 } 23711} 23712function qa(t3) { 23713 var e3 = Ya(t3, 0); 23714 if (!e3) { 23715 e3 = Ja(t3); 23716 const n3 = Za(t3), r3 = new Uint8Array(t3.width * t3.height * 4); 23717 Ta(n3, e3, $a(t3)), e3.readPixels(0, 0, t3.width, t3.height, e3.RGBA, e3.UNSIGNED_BYTE, r3), Aa(n3), e3 = new ImageData(new Uint8ClampedArray(r3.buffer), t3.width, t3.height), t3.g.push(e3); 23718 } 23719 return e3; 23720} 23721function $a(t3) { 23722 let e3 = Ya(t3, 2); 23723 if (!e3) { 23724 const n3 = Ja(t3); 23725 e3 = Qa(t3); 23726 const r3 = Ya(t3, 1) || qa(t3); 23727 n3.texImage2D(n3.TEXTURE_2D, 0, n3.RGBA, n3.RGBA, n3.UNSIGNED_BYTE, r3), tc(t3); 23728 } 23729 return e3; 23730} 23731function Ja(t3) { 23732 if (!t3.canvas) throw Error("Conversion to different image formats require that a canvas is passed when initializing the image."); 23733 return t3.h || (t3.h = ga(t3.canvas.getContext("webgl2"), "You cannot use a canvas that is already bound to a different type of rendering context.")), t3.h; 23734} 23735function Za(t3) { 23736 return t3.l || (t3.l = new ba()), t3.l; 23737} 23738function Qa(t3) { 23739 const e3 = Ja(t3); 23740 e3.viewport(0, 0, t3.width, t3.height), e3.activeTexture(e3.TEXTURE0); 23741 let n3 = Ya(t3, 2); 23742 return n3 || (n3 = wa(Za(t3), e3), t3.g.push(n3), t3.m = true), e3.bindTexture(e3.TEXTURE_2D, n3), n3; 23743} 23744function tc(t3) { 23745 t3.h.bindTexture(t3.h.TEXTURE_2D, null); 23746} 23747function ec(t3) { 23748 const e3 = Ja(t3); 23749 return Ea(Za(t3), e3, true, (() => (function(t4, e4) { 23750 const n3 = t4.canvas; 23751 if (n3.width === t4.width && n3.height === t4.height) return e4(); 23752 const r3 = n3.width, i3 = n3.height; 23753 return n3.width = t4.width, n3.height = t4.height, t4 = e4(), n3.width = r3, n3.height = i3, t4; 23754 })(t3, (() => { 23755 if (e3.bindFramebuffer(e3.FRAMEBUFFER, null), e3.clearColor(0, 0, 0, 0), e3.clear(e3.COLOR_BUFFER_BIT), e3.drawArrays(e3.TRIANGLE_FAN, 0, 4), !(t3.canvas instanceof OffscreenCanvas)) throw Error("Conversion to ImageBitmap requires that the MediaPipe Tasks is initialized with an OffscreenCanvas"); 23756 return t3.canvas.transferToImageBitmap(); 23757 })))); 23758} 23759function ic(...t3) { 23760 return t3.map((([t4, e3]) => ({ start: t4, end: e3 }))); 23761} 23762async function cc(t3, e3, n3) { 23763 return (async function(t4, e4, n4, r3) { 23764 return aa(t4, e4, n4, r3); 23765 })(t3, n3.canvas ?? (Qo() ? void 0 : document.createElement("canvas")), e3, n3); 23766} 23767function hc(t3, e3, n3, r3) { 23768 if (t3.U) { 23769 const s3 = new Ls(); 23770 if (n3?.regionOfInterest) { 23771 if (!t3.oa) throw Error("This task doesn't support region-of-interest."); 23772 var i3 = n3.regionOfInterest; 23773 if (i3.left >= i3.right || i3.top >= i3.bottom) throw Error("Expected RectF with left < right and top < bottom."); 23774 if (i3.left < 0 || i3.top < 0 || i3.right > 1 || i3.bottom > 1) throw Error("Expected RectF values to be in [0,1]."); 23775 Ln(s3, 1, (i3.left + i3.right) / 2), Ln(s3, 2, (i3.top + i3.bottom) / 2), Ln(s3, 4, i3.right - i3.left), Ln(s3, 3, i3.bottom - i3.top); 23776 } else Ln(s3, 1, 0.5), Ln(s3, 2, 0.5), Ln(s3, 4, 1), Ln(s3, 3, 1); 23777 if (n3?.rotationDegrees) { 23778 if (n3?.rotationDegrees % 90 != 0) throw Error("Expected rotation to be a multiple of 90\xB0."); 23779 if (Ln(s3, 5, -Math.PI * n3.rotationDegrees / 180), n3?.rotationDegrees % 180 != 0) { 23780 const [t4, r4] = ea(e3); 23781 n3 = Sn(s3, 3) * r4 / t4, i3 = Sn(s3, 4) * t4 / r4, Ln(s3, 4, n3), Ln(s3, 3, i3); 23782 } 23783 } 23784 t3.g.addProtoToStream(s3.g(), "mediapipe.NormalizedRect", t3.U, r3); 23785 } 23786 t3.g.pa(e3, t3.X, r3 ?? performance.now()), t3.finishProcessing(); 23787} 23788function uc(t3, e3, n3) { 23789 if (t3.baseOptions?.g()) throw Error("Task is not initialized with image mode. 'runningMode' must be set to 'IMAGE'."); 23790 hc(t3, e3, n3, t3.C + 1); 23791} 23792function lc(t3, e3, n3, r3) { 23793 if (!t3.baseOptions?.g()) throw Error("Task is not initialized with video mode. 'runningMode' must be set to 'VIDEO'."); 23794 hc(t3, e3, n3, r3); 23795} 23796function fc(t3, e3, n3, r3) { 23797 var i3 = e3.data; 23798 const s3 = e3.width, o3 = s3 * (e3 = e3.height); 23799 if ((i3 instanceof Uint8Array || i3 instanceof Float32Array) && i3.length !== o3) throw Error("Unsupported channel count: " + i3.length / o3); 23800 return t3 = new Na([i3], n3, false, t3.g.i.canvas, t3.P, s3, e3), r3 ? t3.clone() : t3; 23801} 23802function kc(t3) { 23803 t3.j = { faceLandmarks: [], faceBlendshapes: [], facialTransformationMatrixes: [] }; 23804} 23805function Lc(t3) { 23806 t3.gestures = [], t3.landmarks = [], t3.worldLandmarks = [], t3.handedness = []; 23807} 23808function Rc(t3) { 23809 return 0 === t3.gestures.length ? { gestures: [], landmarks: [], worldLandmarks: [], handedness: [], handednesses: [] } : { gestures: t3.gestures, landmarks: t3.landmarks, worldLandmarks: t3.worldLandmarks, handedness: t3.handedness, handednesses: t3.handedness }; 23810} 23811function Ic(t3, e3 = true) { 23812 const n3 = []; 23813 for (const i3 of t3) { 23814 var r3 = ys(i3); 23815 t3 = []; 23816 for (const n4 of r3.g()) r3 = e3 && null != kn(n4, 1) ? kn(n4, 1) ?? 0 : -1, t3.push({ score: Sn(n4, 2) ?? 0, index: r3, categoryName: le($e(n4, 3)) ?? "" ?? "", displayName: le($e(n4, 4)) ?? "" ?? "" }); 23817 n3.push(t3); 23818 } 23819 return n3; 23820} 23821function Mc(t3) { 23822 return { landmarks: t3.landmarks, worldLandmarks: t3.worldLandmarks, handednesses: t3.handedness, handedness: t3.handedness }; 23823} 23824function Oc(t3) { 23825 t3.h = { faceLandmarks: [], faceBlendshapes: [], poseLandmarks: [], poseWorldLandmarks: [], poseSegmentationMasks: [], leftHandLandmarks: [], leftHandWorldLandmarks: [], rightHandLandmarks: [], rightHandWorldLandmarks: [] }; 23826} 23827function Nc(t3) { 23828 try { 23829 if (!t3.D) return t3.h; 23830 t3.D(t3.h); 23831 } finally { 23832 da(t3); 23833 } 23834} 23835function Uc(t3, e3) { 23836 t3 = ks(t3), e3.push(Ho(t3)); 23837} 23838function Vc(t3) { 23839 const e3 = (function(t4) { 23840 return vn(t4, is, 1); 23841 })(t3.ca()).filter(((t4) => (le($e(t4, 1)) ?? "").includes("mediapipe.tasks.TensorsToSegmentationCalculator"))); 23842 if (t3.u = [], e3.length > 1) throw Error("The graph has more than one mediapipe.tasks.TensorsToSegmentationCalculator."); 23843 1 === e3.length && (yn(e3[0], Qi, 7)?.j()?.g() ?? /* @__PURE__ */ new Map()).forEach(((e4, n3) => { 23844 t3.u[Number(n3)] = le($e(e4, 1)) ?? ""; 23845 })); 23846} 23847function Xc(t3) { 23848 t3.categoryMask = void 0, t3.confidenceMasks = void 0, t3.qualityScores = void 0; 23849} 23850function Hc(t3) { 23851 try { 23852 const e3 = new jc(t3.confidenceMasks, t3.categoryMask, t3.qualityScores); 23853 if (!t3.j) return e3; 23854 t3.j(e3); 23855 } finally { 23856 da(t3); 23857 } 23858} 23859function $c(t3) { 23860 t3.landmarks = [], t3.worldLandmarks = [], t3.segmentationMasks = void 0; 23861} 23862function Jc(t3) { 23863 try { 23864 const e3 = new qc(t3.landmarks, t3.worldLandmarks, t3.segmentationMasks); 23865 if (!t3.u) return e3; 23866 t3.u(e3); 23867 } finally { 23868 da(t3); 23869 } 23870} 23871var t, i, s, o, a, c, l, f, d, g, y, _, w, T, A, b, L, F, M, P, B, j, V, X, H, W, z, K, Y, q, $, J, Z, Q, tt, et, ot, ct, ut, lt, dt, mt, yt, _t, vt, wt, Tt, At, bt, kt, xt, Lt, Rt, It, Xt, Ht, Wt, zt, Kt, Yt, Qt, pe, ge, me, ye, Ee, Ae, xe, Le, Pe, Ce, Ye, qe, Mn, Xn, Zn, Qn, er, nr, ir, sr, yr, _r, vr, Er, wr, Tr, Ar, br, kr, Sr, Lr, Rr, Mr, Pr, Cr, Or, Nr, Ur, Dr, Br, Gr, Qr, ii, pi, gi, mi, yi, _i, vi, Ei, wi, Ti, Ai, bi, ki, Si, xi, Li, Ri, Ii, Fi, Mi, Pi, Ci, Oi, Bi, Gi, ji, Vi, Wi, zi, Ki, Yi, qi, $i, Ji, Zi, Qi, ts, es, is, ss, os, as, ls, fs, ds, ps, gs, ms, ys, _s, vs, Es, ws, Ts, As, bs, ks, Ss, xs, Ls, Rs, Is, Fs, Ms, Ps, Cs, Os, Ns, Us, Ds, Bs, Gs, js, Vs, Xs, Hs, Ws, zs, Ks, Ys, qs, $s, Js, Zs, Qs, to, eo, no, ro, io, so, oo, ao, co, ho, uo, lo, fo, po, go, mo, yo, _o, vo, Eo, wo, To, Ao, bo, ko, So, xo, Lo, Ro, Io, Fo, Mo, Po, Co, Oo, No, Uo, Do, Yo, qo, Zo, pa, ma, ba, ka, Sa, Oa, Na, Ua, Da, Ka, nc, rc, sc, oc, ac, dc, pc, gc, mc, yc, _c, vc, Ec, wc, Tc, Ac, bc, Sc, xc, Fc, Pc, Cc, Dc, Bc, Gc, jc, Wc, zc, Kc, Yc, qc, Zc; 23872var init_vision_bundle = __esm({ 23873 "node_modules/@mediapipe/tasks-vision/vision_bundle.mjs"() { 23874 t = "undefined" != typeof self ? self : {}; 23875 o = "undefined" != typeof TextDecoder; 23876 c = "undefined" != typeof TextEncoder; 23877 f = e(610401301, false); 23878 d = e(748402147, true); 23879 g = t.navigator; 23880 l = g && g.userAgentData || null, m[" "] = function() { 23881 }; 23882 y = {}; 23883 _ = null; 23884 w = "undefined" != typeof Uint8Array; 23885 T = !(!(f && l && l.brands.length > 0) && (-1 != p().indexOf("Trident") || -1 != p().indexOf("MSIE"))) && "function" == typeof btoa; 23886 A = /[-_.]/g; 23887 b = { "-": "+", _: "/", ".": "=" }; 23888 L = {}; 23889 F = class { 23890 h() { 23891 return new Uint8Array(I(this) || 0); 23892 } 23893 constructor(t3, e3) { 23894 if (C(e3), this.g = t3, null != t3 && 0 === t3.length) throw Error("ByteString should be constructed with non-empty values"); 23895 } 23896 }; 23897 B = "function" == typeof Symbol && "symbol" == typeof /* @__PURE__ */ Symbol(); 23898 j = G("jas", void 0, true); 23899 V = G(void 0, "0di"); 23900 X = G(void 0, "1oa"); 23901 H = G(void 0, /* @__PURE__ */ Symbol()); 23902 W = G(void 0, "0ub"); 23903 z = G(void 0, "0ubs"); 23904 K = G(void 0, "0ubsb"); 23905 Y = G(void 0, "0actk"); 23906 q = G("m_m", "Pa", true); 23907 $ = G(); 23908 J = { Ga: { value: 0, configurable: true, writable: true, enumerable: false } }; 23909 Z = Object.defineProperties; 23910 Q = B ? j : "Ga"; 23911 et = []; 23912 rt(et, 7), tt = Object.freeze(et); 23913 ot = {}; 23914 ct = {}; 23915 ut = class { 23916 constructor(t3, e3, n3) { 23917 this.g = t3, this.h = e3, this.l = n3; 23918 } 23919 next() { 23920 const t3 = this.g.next(); 23921 return t3.done || (t3.value = this.h.call(this.l, t3.value)), t3; 23922 } 23923 [Symbol.iterator]() { 23924 return this; 23925 } 23926 }; 23927 lt = Object.freeze({}); 23928 dt = {}; 23929 mt = gt(((t3) => "number" == typeof t3)); 23930 yt = gt(((t3) => "string" == typeof t3)); 23931 _t = gt(((t3) => "boolean" == typeof t3)); 23932 vt = "function" == typeof t.BigInt && "bigint" == typeof t.BigInt(0); 23933 wt = gt(((t3) => vt ? t3 >= At && t3 <= kt : "-" === t3[0] ? St(t3, Tt) : St(t3, bt))); 23934 Tt = Number.MIN_SAFE_INTEGER.toString(); 23935 At = vt ? BigInt(Number.MIN_SAFE_INTEGER) : void 0; 23936 bt = Number.MAX_SAFE_INTEGER.toString(); 23937 kt = vt ? BigInt(Number.MAX_SAFE_INTEGER) : void 0; 23938 xt = "function" == typeof Uint8Array.prototype.slice; 23939 Rt = 0; 23940 It = 0; 23941 Xt = "function" == typeof BigInt ? BigInt.asIntN : void 0; 23942 Ht = "function" == typeof BigInt ? BigInt.asUintN : void 0; 23943 Wt = Number.isSafeInteger; 23944 zt = Number.isFinite; 23945 Kt = Math.trunc; 23946 Yt = Et(0); 23947 Qt = /^-?([1-9][0-9]*|0)(\.[0-9]+)?$/; 23948 pe = {}; 23949 ge = (function() { 23950 try { 23951 return m(new class extends Map { 23952 constructor() { 23953 super(); 23954 } 23955 }()), false; 23956 } catch { 23957 return true; 23958 } 23959 })(); 23960 me = class { 23961 constructor() { 23962 this.g = /* @__PURE__ */ new Map(); 23963 } 23964 get(t3) { 23965 return this.g.get(t3); 23966 } 23967 set(t3, e3) { 23968 return this.g.set(t3, e3), this.size = this.g.size, this; 23969 } 23970 delete(t3) { 23971 return t3 = this.g.delete(t3), this.size = this.g.size, t3; 23972 } 23973 clear() { 23974 this.g.clear(), this.size = this.g.size; 23975 } 23976 has(t3) { 23977 return this.g.has(t3); 23978 } 23979 entries() { 23980 return this.g.entries(); 23981 } 23982 keys() { 23983 return this.g.keys(); 23984 } 23985 values() { 23986 return this.g.values(); 23987 } 23988 forEach(t3, e3) { 23989 return this.g.forEach(t3, e3); 23990 } 23991 [Symbol.iterator]() { 23992 return this.entries(); 23993 } 23994 }; 23995 ye = ge ? (Object.setPrototypeOf(me.prototype, Map.prototype), Object.defineProperties(me.prototype, { size: { value: 0, configurable: true, enumerable: true, writable: true } }), me) : class extends Map { 23996 constructor() { 23997 super(); 23998 } 23999 }; 24000 Ee = class extends ye { 24001 constructor(t3, e3, n3 = _e, r3 = _e) { 24002 super(), this.J = 0 | t3[Q], this.K = e3, this.S = n3, this.fa = this.K ? we : r3; 24003 for (let i3 = 0; i3 < t3.length; i3++) { 24004 const s3 = t3[i3], o3 = n3(s3[0], false, true); 24005 let a3 = s3[1]; 24006 e3 ? void 0 === a3 && (a3 = null) : a3 = r3(s3[1], false, true, void 0, void 0, this.J), super.set(o3, a3); 24007 } 24008 } 24009 V(t3) { 24010 return st(Array.from(super.entries(), t3)); 24011 } 24012 clear() { 24013 ve(this), super.clear(); 24014 } 24015 delete(t3) { 24016 return ve(this), super.delete(this.S(t3, true, false)); 24017 } 24018 entries() { 24019 if (this.K) { 24020 var t3 = super.keys(); 24021 t3 = new ut(t3, Te, this); 24022 } else t3 = super.entries(); 24023 return t3; 24024 } 24025 values() { 24026 if (this.K) { 24027 var t3 = super.keys(); 24028 t3 = new ut(t3, Ee.prototype.get, this); 24029 } else t3 = super.values(); 24030 return t3; 24031 } 24032 forEach(t3, e3) { 24033 this.K ? super.forEach(((n3, r3, i3) => { 24034 t3.call(e3, i3.get(r3), r3, i3); 24035 })) : super.forEach(t3, e3); 24036 } 24037 set(t3, e3) { 24038 return ve(this), null == (t3 = this.S(t3, true, false)) ? this : null == e3 ? (super.delete(t3), this) : super.set(t3, this.fa(e3, true, true, this.K, false, this.J)); 24039 } 24040 Ma(t3) { 24041 const e3 = this.S(t3[0], false, true); 24042 t3 = t3[1], t3 = this.K ? void 0 === t3 ? null : t3 : this.fa(t3, false, true, void 0, false, this.J), super.set(e3, t3); 24043 } 24044 has(t3) { 24045 return super.has(this.S(t3, false, false)); 24046 } 24047 get(t3) { 24048 t3 = this.S(t3, false, false); 24049 const e3 = super.get(t3); 24050 if (void 0 !== e3) { 24051 var n3 = this.K; 24052 return n3 ? ((n3 = this.fa(e3, false, true, n3, this.ra, this.J)) !== e3 && super.set(t3, n3), n3) : e3; 24053 } 24054 } 24055 [Symbol.iterator]() { 24056 return this.entries(); 24057 } 24058 }; 24059 Ee.prototype.toJSON = void 0; 24060 xe = class { 24061 }; 24062 Le = { Ka: true }; 24063 Ye = Et(0); 24064 qe = {}; 24065 Mn = class { 24066 constructor(t3, e3, n3) { 24067 if (this.buffer = t3, n3 && !e3) throw Error(); 24068 this.g = e3; 24069 } 24070 }; 24071 Xn = []; 24072 Zn = class { 24073 constructor(t3, e3, n3, r3) { 24074 if (Xn.length) { 24075 const i3 = Xn.pop(); 24076 i3.init(t3, e3, n3, r3), t3 = i3; 24077 } else t3 = new class { 24078 constructor(t4, e4, n4, r4) { 24079 this.h = null, this.j = false, this.g = this.l = this.m = 0, this.init(t4, e4, n4, r4); 24080 } 24081 init(t4, e4, n4, { Y: r4 = false, ea: i3 = false } = {}) { 24082 this.Y = r4, this.ea = i3, t4 && (t4 = Pn(t4, this.ea), this.h = t4.buffer, this.j = t4.g, this.m = e4 || 0, this.l = void 0 !== n4 ? this.m + n4 : this.h.length, this.g = this.m); 24083 } 24084 clear() { 24085 this.h = null, this.j = false, this.g = this.l = this.m = 0, this.Y = false; 24086 } 24087 }(t3, e3, n3, r3); 24088 this.g = t3, this.m = this.g.g, this.h = this.l = -1, this.o(r3); 24089 } 24090 o({ ha: t3 = false } = {}) { 24091 this.ha = t3; 24092 } 24093 }; 24094 Qn = []; 24095 er = class { 24096 constructor(t3, e3) { 24097 this.h = t3 >>> 0, this.g = e3 >>> 0; 24098 } 24099 }; 24100 ir = class { 24101 constructor(t3, e3) { 24102 this.h = t3 >>> 0, this.g = e3 >>> 0; 24103 } 24104 }; 24105 yr = mr(); 24106 _r = mr(); 24107 vr = mr(); 24108 Er = mr(); 24109 wr = mr(); 24110 Tr = mr(); 24111 Ar = mr(); 24112 br = mr(); 24113 kr = mr(); 24114 Sr = mr(); 24115 Lr = class { 24116 constructor(t3, e3) { 24117 this.v = Ue(t3, e3, void 0, 2048); 24118 } 24119 toJSON() { 24120 return Oe(this); 24121 } 24122 j() { 24123 var t3 = xo, e3 = this.v, n3 = t3.g, r3 = H; 24124 if (B && r3 && null != e3[r3]?.[n3] && U(W, 3), e3 = t3.g, $ && H && void 0 === $ && (r3 = (n3 = this.v)[H]) && (r3 = r3.da)) try { 24125 r3(n3, e3, Le); 24126 } catch (t4) { 24127 u(t4); 24128 } 24129 return t3.h ? t3.m(this, t3.h, t3.g, t3.l) : t3.m(this, t3.g, t3.defaultValue, t3.l); 24130 } 24131 clone() { 24132 const t3 = this.v, e3 = 0 | t3[Q]; 24133 return Ke(this, t3, e3) ? Ge(this, t3, true) : new this.constructor(Ve(t3, e3, false)); 24134 } 24135 }; 24136 Lr.prototype[q] = ot, Lr.prototype.toString = function() { 24137 return this.v.toString(); 24138 }; 24139 Rr = class { 24140 constructor(t3, e3, n3) { 24141 this.g = t3, this.h = e3, t3 = yr, this.l = !!t3 && n3 === t3 || false; 24142 } 24143 }; 24144 Mr = Ir((function(t3, e3, n3, r3, i3) { 24145 return 2 === t3.h && (Yn(t3, gn(e3, r3, n3), i3), true); 24146 }), Fr); 24147 Pr = Ir((function(t3, e3, n3, r3, i3) { 24148 return 2 === t3.h && (Yn(t3, gn(e3, r3, n3), i3), true); 24149 }), Fr); 24150 Cr = /* @__PURE__ */ Symbol(); 24151 Or = /* @__PURE__ */ Symbol(); 24152 Nr = /* @__PURE__ */ Symbol(); 24153 Ur = /* @__PURE__ */ Symbol(); 24154 Dr = /* @__PURE__ */ Symbol(); 24155 Qr = Et(0); 24156 ii = Ir((function(t3, e3, n3, r3, i3) { 24157 if (2 !== t3.h) return false; 24158 if (t3 = Vt(t3 = Yn(t3, Ne([void 0, void 0], r3), i3)), i3 = pt(r3 = 0 | e3[Q]), 2 & r3) throw Error(); 24159 let s3 = Je(e3, n3, i3); 24160 if (s3 instanceof Ee) 0 != (2 & s3.J) ? (s3 = s3.V(), s3.push(t3), Qe(e3, r3, n3, s3, i3)) : s3.Ma(t3); 24161 else if (Array.isArray(s3)) { 24162 var o3 = 0 | s3[Q]; 24163 8192 & o3 || rt(s3, o3 |= 8192), 2 & o3 && (s3 = cn(s3), Qe(e3, r3, n3, s3, i3)), s3.push(t3); 24164 } else Qe(e3, r3, n3, st([t3]), i3); 24165 return true; 24166 }), (function(t3, e3, n3, r3, i3) { 24167 if (e3 instanceof Ee) e3.forEach(((e4, s3) => { 24168 gr(t3, n3, Ne([s3, e4], r3), i3); 24169 })); 24170 else if (Array.isArray(e3)) { 24171 for (let s3 = 0; s3 < e3.length; s3++) { 24172 const o3 = e3[s3]; 24173 Array.isArray(o3) && gr(t3, n3, Ne(o3, r3), i3); 24174 } 24175 st(e3); 24176 } 24177 })); 24178 pi = ei((function(t3, e3, n3) { 24179 return 5 === t3.h && (ri(e3, n3, Dn(t3.g)), true); 24180 }), si, br); 24181 gi = ni(di, (function(t3, e3, n3) { 24182 if (null != (e3 = ti($t, e3))) for (let o3 = 0; o3 < e3.length; o3++) { 24183 var r3 = t3, i3 = n3, s3 = e3[o3]; 24184 null != s3 && (lr(r3, i3, 5), r3 = r3.g, Pt(s3), hr(r3)); 24185 } 24186 }), br); 24187 mi = ni(di, (function(t3, e3, n3) { 24188 if (null != (e3 = ti($t, e3)) && e3.length) { 24189 lr(t3, n3, 2), ar(t3.g, 4 * e3.length); 24190 for (let r3 = 0; r3 < e3.length; r3++) n3 = t3.g, Pt(e3[r3]), hr(n3); 24191 } 24192 }), br); 24193 yi = ei((function(t3, e3, n3) { 24194 return 5 === t3.h && (ri(e3, n3, 0 === (t3 = Dn(t3.g)) ? void 0 : t3), true); 24195 }), si, br); 24196 _i = ei((function(t3, e3, n3) { 24197 return 0 !== t3.h ? t3 = false : (ri(e3, n3, Cn(t3.g, Nt)), t3 = true), t3; 24198 }), oi, Tr); 24199 vi = ei((function(t3, e3, n3) { 24200 return 0 !== t3.h ? e3 = false : (ri(e3, n3, (t3 = Cn(t3.g, Nt)) === Qr ? void 0 : t3), e3 = true), e3; 24201 }), oi, Tr); 24202 Ei = ei((function(t3, e3, n3) { 24203 return 0 !== t3.h ? t3 = false : (ri(e3, n3, Cn(t3.g, Ot)), t3 = true), t3; 24204 }), (function(t3, e3, n3) { 24205 if (e3 = (function(t4) { 24206 if (null == t4) return t4; 24207 var e4 = typeof t4; 24208 if ("bigint" === e4) return String(Ht(64, t4)); 24209 if (te(t4)) { 24210 if ("string" === e4) return e4 = Kt(Number(t4)), Wt(e4) && e4 >= 0 ? t4 = String(e4) : (-1 !== (e4 = t4.indexOf(".")) && (t4 = t4.substring(0, e4)), (e4 = "-" !== t4[0] && ((e4 = t4.length) < 20 || 20 === e4 && t4 <= "18446744073709551615")) || (Gt(t4), t4 = Ut(Rt, It))), t4; 24211 if ("number" === e4) return (t4 = Kt(t4)) >= 0 && Wt(t4) || (Mt(t4), t4 = Ct(Rt, It)), t4; 24212 } 24213 })(e3), null != e3) { 24214 if ("string" == typeof e3) tr(e3); 24215 if (null != e3) switch (lr(t3, n3, 0), typeof e3) { 24216 case "number": 24217 t3 = t3.g, Mt(e3), or(t3, Rt, It); 24218 break; 24219 case "bigint": 24220 n3 = BigInt.asUintN(64, e3), n3 = new er(Number(n3 & BigInt(4294967295)), Number(n3 >> BigInt(32))), or(t3.g, n3.h, n3.g); 24221 break; 24222 default: 24223 n3 = tr(e3), or(t3.g, n3.h, n3.g); 24224 } 24225 } 24226 }), Ar); 24227 wi = ei((function(t3, e3, n3) { 24228 return 0 === t3.h && (ri(e3, n3, Nn(t3.g)), true); 24229 }), ai, Er); 24230 Ti = ni((function(t3, e3, n3) { 24231 return (0 === t3.h || 2 === t3.h) && (e3 = un(e3, 0 | e3[Q], n3), 2 == t3.h ? Jn(t3, Nn, e3) : e3.push(Nn(t3.g)), true); 24232 }), (function(t3, e3, n3) { 24233 if (null != (e3 = ti(ee, e3)) && e3.length) { 24234 n3 = fr(t3, n3); 24235 for (let n4 = 0; n4 < e3.length; n4++) cr(t3.g, e3[n4]); 24236 dr(t3, n3); 24237 } 24238 }), Er); 24239 Ai = ei((function(t3, e3, n3) { 24240 return 0 === t3.h && (ri(e3, n3, 0 === (t3 = Nn(t3.g)) ? void 0 : t3), true); 24241 }), ai, Er); 24242 bi = ei((function(t3, e3, n3) { 24243 return 0 === t3.h && (ri(e3, n3, On(t3.g)), true); 24244 }), ci, _r); 24245 ki = ei((function(t3, e3, n3) { 24246 return 0 === t3.h && (ri(e3, n3, false === (t3 = On(t3.g)) ? void 0 : t3), true); 24247 }), ci, _r); 24248 Si = ni((function(t3, e3, n3) { 24249 return 2 === t3.h && (t3 = qn(t3), un(e3, 0 | e3[Q], n3).push(t3), true); 24250 }), (function(t3, e3, n3) { 24251 if (null != (e3 = ti(le, e3))) for (let o3 = 0; o3 < e3.length; o3++) { 24252 var r3 = t3, i3 = n3, s3 = e3[o3]; 24253 null != s3 && pr(r3, i3, h(s3)); 24254 } 24255 }), vr); 24256 xi = ei((function(t3, e3, n3) { 24257 return 2 === t3.h && (ri(e3, n3, "" === (t3 = qn(t3)) ? void 0 : t3), true); 24258 }), hi, vr); 24259 Li = ei((function(t3, e3, n3) { 24260 return 2 === t3.h && (ri(e3, n3, qn(t3)), true); 24261 }), hi, vr); 24262 Ri = (function(t3, e3, n3 = yr) { 24263 return new Rr(t3, e3, n3); 24264 })((function(t3, e3, n3, r3, i3) { 24265 return 2 === t3.h && (r3 = Ne(void 0, r3), un(e3, 0 | e3[Q], n3).push(r3), Yn(t3, r3, i3), true); 24266 }), (function(t3, e3, n3, r3, i3) { 24267 if (Array.isArray(e3)) { 24268 for (let s3 = 0; s3 < e3.length; s3++) ui(t3, e3[s3], n3, r3, i3); 24269 1 & (t3 = 0 | e3[Q]) || rt(e3, 1 | t3); 24270 } 24271 })); 24272 Ii = Ir((function(t3, e3, n3, r3, i3, s3) { 24273 if (2 !== t3.h) return false; 24274 let o3 = 0 | e3[Q]; 24275 return dn(e3, o3, s3, n3, pt(o3)), Yn(t3, e3 = gn(e3, r3, n3), i3), true; 24276 }), ui); 24277 Fi = ei((function(t3, e3, n3) { 24278 return 2 === t3.h && (ri(e3, n3, $n(t3)), true); 24279 }), li, kr); 24280 Mi = ni((function(t3, e3, n3) { 24281 return (0 === t3.h || 2 === t3.h) && (e3 = un(e3, 0 | e3[Q], n3), 2 == t3.h ? Jn(t3, Un, e3) : e3.push(Un(t3.g)), true); 24282 }), (function(t3, e3, n3) { 24283 if (null != (e3 = ti(ne, e3))) for (let o3 = 0; o3 < e3.length; o3++) { 24284 var r3 = t3, i3 = n3, s3 = e3[o3]; 24285 null != s3 && (lr(r3, i3, 0), ar(r3.g, s3)); 24286 } 24287 }), wr); 24288 Pi = ei((function(t3, e3, n3) { 24289 return 0 === t3.h && (ri(e3, n3, 0 === (t3 = Un(t3.g)) ? void 0 : t3), true); 24290 }), fi, wr); 24291 Ci = ei((function(t3, e3, n3) { 24292 return 0 === t3.h && (ri(e3, n3, Nn(t3.g)), true); 24293 }), (function(t3, e3, n3) { 24294 null != (e3 = ee(e3)) && (e3 = parseInt(e3, 10), lr(t3, n3, 0), cr(t3.g, e3)); 24295 }), Sr); 24296 Oi = class { 24297 constructor(t3, e3) { 24298 var n3 = Qi; 24299 this.g = t3, this.h = e3, this.m = yn, this.j = wn, this.defaultValue = void 0, this.l = null != n3.Oa ? dt : void 0; 24300 } 24301 register() { 24302 m(this); 24303 } 24304 }; 24305 Bi = class extends Lr { 24306 constructor(t3) { 24307 super(t3); 24308 } 24309 }; 24310 Gi = [0, xi, ei((function(t3, e3, n3) { 24311 return 2 === t3.h && (ri(e3, n3, (t3 = $n(t3)) === R() ? void 0 : t3), true); 24312 }), (function(t3, e3, n3) { 24313 if (null != e3) { 24314 if (e3 instanceof Lr) { 24315 const r3 = e3.Ra; 24316 return void (r3 ? (e3 = r3(e3), null != e3 && pr(t3, n3, Pn(e3, true).buffer)) : U(K, 3)); 24317 } 24318 if (Array.isArray(e3)) return void U(K, 3); 24319 } 24320 li(t3, e3, n3); 24321 }), kr)]; 24322 Vi = globalThis.trustedTypes; 24323 Wi = [0, wi, Ci, bi, -1, Ti, Ci, -1, bi]; 24324 zi = class extends Lr { 24325 constructor(t3) { 24326 super(t3); 24327 } 24328 }; 24329 Ki = [0, bi, Li, bi, Ci, -1, ni((function(t3, e3, n3) { 24330 return (0 === t3.h || 2 === t3.h) && (e3 = un(e3, 0 | e3[Q], n3), 2 == t3.h ? Jn(t3, Bn, e3) : e3.push(Nn(t3.g)), true); 24331 }), (function(t3, e3, n3) { 24332 if (null != (e3 = ti(ee, e3)) && e3.length) { 24333 n3 = fr(t3, n3); 24334 for (let n4 = 0; n4 < e3.length; n4++) cr(t3.g, e3[n4]); 24335 dr(t3, n3); 24336 } 24337 }), Sr), Li, -1, [0, bi, -1], Ci, bi, -1]; 24338 Yi = [0, 3, bi, -1, 2, [0, [2], wi, Ii, [0, ei((function(t3, e3, n3) { 24339 return 0 === t3.h && (ri(e3, n3, Un(t3.g)), true); 24340 }), fi, wr)]], [0, Ci, bi, Ci, bi, Ci, bi, Li, -1], [0, [3, 4], Li, -1, Ii, [0, wi], Ii, [0, Ci]], [0]]; 24341 qi = [0, Li, -2]; 24342 $i = class extends Lr { 24343 constructor(t3) { 24344 super(t3); 24345 } 24346 }; 24347 Ji = [0]; 24348 Zi = [0, wi, bi, 1, bi, -4]; 24349 Qi = class extends Lr { 24350 constructor(t3) { 24351 super(t3, 2); 24352 } 24353 }; 24354 ts = {}; 24355 ts[336783863] = [0, Li, bi, -1, wi, [0, [1, 2, 3, 4, 5, 6, 7, 8, 9], Ii, Ji, Ii, Ki, Ii, qi, Ii, Zi, Ii, Wi, Ii, [0, Li, -2], Ii, [0, Li, Ci], Ii, Yi, Ii, [0, Ci, -1, bi]], [0, Li], bi, [0, [1, 3], [2, 4], Ii, [0, Ti], -1, Ii, [0, Si], -1, Ri, [0, Li, -1]], Li]; 24356 es = [0, vi, -1, ki, -3, vi, Ti, xi, Ai, vi, -1, ki, Ai, ki, -2, xi]; 24357 is = class extends Lr { 24358 constructor(t3) { 24359 super(t3, 500); 24360 } 24361 o(t3) { 24362 return wn(this, 0, 7, t3); 24363 } 24364 }; 24365 ss = [-1, {}]; 24366 os = [0, Li, 1, ss]; 24367 as = [0, Li, Si, ss]; 24368 ls = class extends Lr { 24369 constructor(t3) { 24370 super(t3, 500); 24371 } 24372 o(t3) { 24373 return wn(this, 0, 1001, t3); 24374 } 24375 }; 24376 fs = [-500, Ri, [-500, xi, -1, Si, -3, [-2, ts, bi], Ri, Gi, Ai, -1, os, as, Ri, [0, xi, ki], xi, es, Ai, Si, 987, Si], 4, Ri, [-500, Li, -1, [-1, {}], 998, Li], Ri, [-500, Li, Si, -1, [-2, {}, bi], 997, Si, -1], Ai, Ri, [-500, Li, Si, ss, 998, Si], Si, Ai, os, as, Ri, [0, xi, -1, ss], Si, -2, es, xi, -1, ki, [0, ki, Pi], 978, ss, Ri, Gi]; 24377 ls.prototype.g = Di(fs); 24378 ds = Ui(ls, fs); 24379 ps = class extends Lr { 24380 constructor(t3) { 24381 super(t3); 24382 } 24383 }; 24384 gs = class extends Lr { 24385 constructor(t3) { 24386 super(t3); 24387 } 24388 g() { 24389 return vn(this, ps, 1); 24390 } 24391 }; 24392 ms = [0, Ri, [0, wi, pi, Li, -1]]; 24393 ys = Ui(gs, ms); 24394 _s = class extends Lr { 24395 constructor(t3) { 24396 super(t3); 24397 } 24398 }; 24399 vs = class extends Lr { 24400 constructor(t3) { 24401 super(t3); 24402 } 24403 }; 24404 Es = class extends Lr { 24405 constructor(t3) { 24406 super(t3); 24407 } 24408 l() { 24409 return yn(this, _s, 2); 24410 } 24411 g() { 24412 return vn(this, vs, 5); 24413 } 24414 }; 24415 ws = Ui(class extends Lr { 24416 constructor(t3) { 24417 super(t3); 24418 } 24419 }, [0, Si, Ti, mi, [0, Ci, [0, wi, -3], [0, pi, -3], [0, wi, -1, [0, Ri, [0, wi, -2]]], Ri, [0, pi, -1, Li, pi]], Li, -1, _i, Ri, [0, wi, pi], Si, _i]); 24420 Ts = class extends Lr { 24421 constructor(t3) { 24422 super(t3); 24423 } 24424 }; 24425 As = Ui(class extends Lr { 24426 constructor(t3) { 24427 super(t3); 24428 } 24429 }, [0, Ri, [0, pi, -4]]); 24430 bs = class extends Lr { 24431 constructor(t3) { 24432 super(t3); 24433 } 24434 }; 24435 ks = Ui(class extends Lr { 24436 constructor(t3) { 24437 super(t3); 24438 } 24439 }, [0, Ri, [0, pi, -4]]); 24440 Ss = class extends Lr { 24441 constructor(t3) { 24442 super(t3); 24443 } 24444 }; 24445 xs = [0, wi, -1, mi, Ci]; 24446 Ls = class extends Lr { 24447 constructor(t3) { 24448 super(t3); 24449 } 24450 }; 24451 Ls.prototype.g = Di([0, pi, -4, _i]); 24452 Rs = class extends Lr { 24453 constructor(t3) { 24454 super(t3); 24455 } 24456 }; 24457 Is = Ui(class extends Lr { 24458 constructor(t3) { 24459 super(t3); 24460 } 24461 }, [0, Ri, [0, 1, wi, Li, ms], _i]); 24462 Fs = class extends Lr { 24463 constructor(t3) { 24464 super(t3); 24465 } 24466 }; 24467 Ms = class extends Lr { 24468 constructor(t3) { 24469 super(t3); 24470 } 24471 na() { 24472 const t3 = $e(this, 1, void 0, void 0, an); 24473 return null == t3 ? R() : t3; 24474 } 24475 }; 24476 Ps = class extends Lr { 24477 constructor(t3) { 24478 super(t3); 24479 } 24480 }; 24481 Cs = [1, 2]; 24482 Os = Ui(class extends Lr { 24483 constructor(t3) { 24484 super(t3); 24485 } 24486 }, [0, Ri, [0, Cs, Ii, [0, mi], Ii, [0, Fi], wi, Li], _i]); 24487 Ns = class extends Lr { 24488 constructor(t3) { 24489 super(t3); 24490 } 24491 }; 24492 Us = [0, Li, wi, pi, Si, -1]; 24493 Ds = class extends Lr { 24494 constructor(t3) { 24495 super(t3); 24496 } 24497 }; 24498 Bs = [0, bi, -1]; 24499 Gs = class extends Lr { 24500 constructor(t3) { 24501 super(t3); 24502 } 24503 }; 24504 js = [1, 2, 3, 4, 5, 6]; 24505 Vs = class extends Lr { 24506 constructor(t3) { 24507 super(t3); 24508 } 24509 g() { 24510 return null != $e(this, 1, void 0, void 0, an); 24511 } 24512 l() { 24513 return null != le($e(this, 2)); 24514 } 24515 }; 24516 Xs = class extends Lr { 24517 constructor(t3) { 24518 super(t3); 24519 } 24520 g() { 24521 return Zt($e(this, 2)) ?? false; 24522 } 24523 }; 24524 Hs = [0, Fi, Li, [0, wi, _i, -1], [0, Ei, _i]]; 24525 Ws = [0, Hs, bi, [0, js, Ii, Zi, Ii, Ki, Ii, Wi, Ii, Ji, Ii, qi, Ii, Yi], Ci]; 24526 zs = class extends Lr { 24527 constructor(t3) { 24528 super(t3); 24529 } 24530 }; 24531 Ks = [0, Ws, pi, -1, wi]; 24532 Ys = Ni(502141897, zs); 24533 ts[502141897] = Ks; 24534 qs = Ui(class extends Lr { 24535 constructor(t3) { 24536 super(t3); 24537 } 24538 }, [0, [0, Ci, -1, gi, Mi], xs]); 24539 $s = class extends Lr { 24540 constructor(t3) { 24541 super(t3); 24542 } 24543 }; 24544 Js = class extends Lr { 24545 constructor(t3) { 24546 super(t3); 24547 } 24548 }; 24549 Zs = [0, Ws, pi, [0, Ws], bi]; 24550 Qs = Ni(508968150, Js); 24551 ts[508968150] = [0, Ws, Ks, Zs, pi, [0, [0, Hs]]], ts[508968149] = Zs; 24552 to = class extends Lr { 24553 constructor(t3) { 24554 super(t3); 24555 } 24556 l() { 24557 return yn(this, Ns, 2); 24558 } 24559 g() { 24560 Ze(this, 2); 24561 } 24562 }; 24563 eo = [0, Ws, Us]; 24564 ts[478825465] = eo; 24565 no = class extends Lr { 24566 constructor(t3) { 24567 super(t3); 24568 } 24569 }; 24570 ro = class extends Lr { 24571 constructor(t3) { 24572 super(t3); 24573 } 24574 }; 24575 io = class extends Lr { 24576 constructor(t3) { 24577 super(t3); 24578 } 24579 }; 24580 so = class extends Lr { 24581 constructor(t3) { 24582 super(t3); 24583 } 24584 }; 24585 oo = class extends Lr { 24586 constructor(t3) { 24587 super(t3); 24588 } 24589 }; 24590 ao = [0, Ws, [0, Ws], eo, -1]; 24591 co = [0, Ws, pi, wi]; 24592 ho = [0, Ws, pi]; 24593 uo = [0, Ws, co, ho, pi]; 24594 lo = Ni(479097054, oo); 24595 ts[479097054] = [0, Ws, uo, ao], ts[463370452] = ao, ts[464864288] = co; 24596 fo = Ni(462713202, so); 24597 ts[462713202] = uo, ts[474472470] = ho; 24598 po = class extends Lr { 24599 constructor(t3) { 24600 super(t3); 24601 } 24602 }; 24603 go = class extends Lr { 24604 constructor(t3) { 24605 super(t3); 24606 } 24607 }; 24608 mo = class extends Lr { 24609 constructor(t3) { 24610 super(t3); 24611 } 24612 }; 24613 yo = class extends Lr { 24614 constructor(t3) { 24615 super(t3); 24616 } 24617 }; 24618 _o = [0, Ws, pi, -1, wi]; 24619 vo = [0, Ws, pi, bi]; 24620 yo.prototype.g = Di([0, Ws, ho, [0, Ws], Ks, Zs, _o, vo]); 24621 Eo = class extends Lr { 24622 constructor(t3) { 24623 super(t3); 24624 } 24625 }; 24626 wo = Ni(456383383, Eo); 24627 ts[456383383] = [0, Ws, Us]; 24628 To = class extends Lr { 24629 constructor(t3) { 24630 super(t3); 24631 } 24632 }; 24633 Ao = Ni(476348187, To); 24634 ts[476348187] = [0, Ws, Bs]; 24635 bo = class extends Lr { 24636 constructor(t3) { 24637 super(t3); 24638 } 24639 }; 24640 ko = class extends Lr { 24641 constructor(t3) { 24642 super(t3); 24643 } 24644 }; 24645 So = [0, Ci, -1]; 24646 xo = Ni(458105876, class extends Lr { 24647 constructor(t3) { 24648 super(t3); 24649 } 24650 g() { 24651 let t3; 24652 var e3 = this.v; 24653 const n3 = 0 | e3[Q]; 24654 return t3 = at(this, n3), e3 = (function(t4, e4, n4, r3) { 24655 var i3 = ko; 24656 !r3 && He(t4) && (n4 = 0 | (e4 = t4.v)[Q]); 24657 var s3 = Je(e4, 2); 24658 if (t4 = false, null == s3) { 24659 if (r3) return be(); 24660 s3 = []; 24661 } else if (s3.constructor === Ee) { 24662 if (!(2 & s3.J) || r3) return s3; 24663 s3 = s3.V(); 24664 } else Array.isArray(s3) ? t4 = !!(2 & (0 | s3[Q])) : s3 = []; 24665 if (r3) { 24666 if (!s3.length) return be(); 24667 t4 || (t4 = true, it(s3)); 24668 } else t4 && (t4 = false, st(s3), s3 = cn(s3)); 24669 return !t4 && 32 & n4 && nt(s3, 32), n4 = Qe(e4, n4, 2, r3 = new Ee(s3, i3, de, void 0)), t4 || ze(e4, n4), r3; 24670 })(this, e3, n3, t3), !t3 && ko && (e3.ra = true), e3; 24671 } 24672 }); 24673 ts[458105876] = [0, So, ii, [true, _i, [0, Li, -1, Si]], [0, Ti, bi, Ci]]; 24674 Lo = class extends Lr { 24675 constructor(t3) { 24676 super(t3); 24677 } 24678 }; 24679 Ro = Ni(458105758, Lo); 24680 ts[458105758] = [0, Ws, Li, So]; 24681 Io = class extends Lr { 24682 constructor(t3) { 24683 super(t3); 24684 } 24685 }; 24686 Fo = [0, yi, -1, ki]; 24687 Mo = class extends Lr { 24688 constructor(t3) { 24689 super(t3); 24690 } 24691 }; 24692 Po = class extends Lr { 24693 constructor(t3) { 24694 super(t3); 24695 } 24696 }; 24697 Co = [1, 2]; 24698 Po.prototype.g = Di([0, Co, Ii, Fo, Ii, [0, Ri, Fo]]); 24699 Oo = class extends Lr { 24700 constructor(t3) { 24701 super(t3); 24702 } 24703 }; 24704 No = Ni(443442058, Oo); 24705 ts[443442058] = [0, Ws, Li, wi, pi, Si, -1, bi, pi], ts[514774813] = _o; 24706 Uo = class extends Lr { 24707 constructor(t3) { 24708 super(t3); 24709 } 24710 }; 24711 Do = Ni(516587230, Uo); 24712 ts[516587230] = [0, Ws, _o, vo, pi], ts[518928384] = vo; 24713 qo = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253, 15, 253, 98, 11]); 24714 Zo = class { 24715 }; 24716 Zo.forVisionTasks = function(t3, e3 = false) { 24717 return Jo("vision", t3 ?? Hi``, e3); 24718 }, Zo.forTextTasks = function(t3, e3 = false) { 24719 return Jo("text", t3 ?? Hi``, e3); 24720 }, Zo.forGenAiTasks = function(t3, e3 = false) { 24721 return Jo("genai", t3 ?? Hi``, e3); 24722 }, Zo.forAudioTasks = function(t3, e3 = false) { 24723 return Jo("audio", t3 ?? Hi``, e3); 24724 }, Zo.isSimdSupported = function(t3 = false) { 24725 return $o(t3); 24726 }; 24727 pa = class { 24728 constructor(t3) { 24729 this.g = t3, this.H = [], this.C = 0, this.g.setAutoRenderToScreen(false); 24730 } 24731 l(t3, e3 = true) { 24732 if (e3) { 24733 const e4 = t3.baseOptions || {}; 24734 if (t3.baseOptions?.modelAssetBuffer && t3.baseOptions?.modelAssetPath) throw Error("Cannot set both baseOptions.modelAssetPath and baseOptions.modelAssetBuffer"); 24735 if (!(yn(this.baseOptions, Vs, 1)?.g() || yn(this.baseOptions, Vs, 1)?.l() || t3.baseOptions?.modelAssetBuffer || t3.baseOptions?.modelAssetPath)) throw Error("Either baseOptions.modelAssetPath or baseOptions.modelAssetBuffer must be set"); 24736 if ((function(t4, e5) { 24737 let n3 = yn(t4.baseOptions, Gs, 3); 24738 if (!n3) { 24739 var r3 = n3 = new Gs(), i3 = new $i(); 24740 Tn(r3, 4, js, i3); 24741 } 24742 "delegate" in e5 && ("GPU" === e5.delegate ? (e5 = n3, r3 = new zi(), Tn(e5, 2, js, r3)) : (e5 = n3, r3 = new $i(), Tn(e5, 4, js, r3))), wn(t4.baseOptions, 0, 3, n3); 24743 })(this, e4), e4.modelAssetPath) return fetch(e4.modelAssetPath.toString()).then(((t4) => { 24744 if (t4.ok) return t4.arrayBuffer(); 24745 throw Error(`Failed to fetch model: ${e4.modelAssetPath} (${t4.status})`); 24746 })).then(((t4) => { 24747 try { 24748 this.g.i.FS_unlink("/model.dat"); 24749 } catch { 24750 } 24751 this.g.i.FS_createDataFile("/", "model.dat", new Uint8Array(t4), true, false, false), ca(this, "/model.dat"), this.m(), this.L(); 24752 })); 24753 if (e4.modelAssetBuffer instanceof Uint8Array) ca(this, e4.modelAssetBuffer); 24754 else if (e4.modelAssetBuffer) return (async function(t4) { 24755 const e5 = []; 24756 for (var n3 = 0; ; ) { 24757 const { done: r3, value: i3 } = await t4.read(); 24758 if (r3) break; 24759 e5.push(i3), n3 += i3.length; 24760 } 24761 if (0 === e5.length) return new Uint8Array(0); 24762 if (1 === e5.length) return e5[0]; 24763 t4 = new Uint8Array(n3), n3 = 0; 24764 for (const r3 of e5) t4.set(r3, n3), n3 += r3.length; 24765 return t4; 24766 })(e4.modelAssetBuffer).then(((t4) => { 24767 ca(this, t4), this.m(), this.L(); 24768 })); 24769 } 24770 return this.m(), this.L(), Promise.resolve(); 24771 } 24772 L() { 24773 } 24774 ca() { 24775 let t3; 24776 if (this.g.ca(((e3) => { 24777 t3 = ds(e3); 24778 })), !t3) throw Error("Failed to retrieve CalculatorGraphConfig"); 24779 return t3; 24780 } 24781 setGraph(t3, e3) { 24782 this.g.attachErrorListener(((t4, e4) => { 24783 this.H.push(Error(e4)); 24784 })), this.g.Ja(), this.g.setGraph(t3, e3), this.B = void 0, ha(this); 24785 } 24786 finishProcessing() { 24787 this.g.finishProcessing(), ha(this); 24788 } 24789 close() { 24790 this.B = void 0, this.g.closeGraph(); 24791 } 24792 }; 24793 pa.prototype.close = pa.prototype.close; 24794 ma = class { 24795 constructor(t3, e3, n3, r3) { 24796 this.g = t3, this.h = e3, this.m = n3, this.l = r3; 24797 } 24798 bind() { 24799 this.g.bindVertexArray(this.h); 24800 } 24801 close() { 24802 this.g.deleteVertexArray(this.h), this.g.deleteBuffer(this.m), this.g.deleteBuffer(this.l); 24803 } 24804 }; 24805 ba = class { 24806 H() { 24807 return "\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D inputTexture;\n void main() {\n gl_FragColor = texture2D(inputTexture, vTex);\n }\n "; 24808 } 24809 m() { 24810 const t3 = this.g; 24811 if (this.h = ga(t3.createProgram(), "Failed to create WebGL program"), this.X = ya(this, "\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }", t3.VERTEX_SHADER), this.W = ya(this, this.H(), t3.FRAGMENT_SHADER), t3.linkProgram(this.h), !t3.getProgramParameter(this.h, t3.LINK_STATUS)) throw Error(`Error during program linking: ${t3.getProgramInfoLog(this.h)}`); 24812 this.O = t3.getAttribLocation(this.h, "aVertex"), this.L = t3.getAttribLocation(this.h, "aTex"); 24813 } 24814 D() { 24815 } 24816 l() { 24817 } 24818 close() { 24819 if (this.h) { 24820 const t3 = this.g; 24821 t3.deleteProgram(this.h), t3.deleteShader(this.X), t3.deleteShader(this.W); 24822 } 24823 this.B && this.g.deleteFramebuffer(this.B), this.A && this.A.close(), this.u && this.u.close(); 24824 } 24825 }; 24826 ka = class extends ba { 24827 H() { 24828 return "\n precision mediump float;\n uniform sampler2D backgroundTexture;\n uniform sampler2D maskTexture;\n uniform sampler2D colorMappingTexture;\n varying vec2 vTex;\n void main() {\n vec4 backgroundColor = texture2D(backgroundTexture, vTex);\n float category = texture2D(maskTexture, vTex).r;\n vec4 categoryColor = texture2D(colorMappingTexture, vec2(category, 0.0));\n gl_FragColor = mix(backgroundColor, categoryColor, categoryColor.a);\n }\n "; 24829 } 24830 D() { 24831 const t3 = this.g; 24832 t3.activeTexture(t3.TEXTURE1), this.C = wa(this, t3, t3.LINEAR), t3.activeTexture(t3.TEXTURE2), this.j = wa(this, t3, t3.NEAREST); 24833 } 24834 m() { 24835 super.m(); 24836 const t3 = this.g; 24837 this.P = ga(t3.getUniformLocation(this.h, "backgroundTexture"), "Uniform location"), this.U = ga(t3.getUniformLocation(this.h, "colorMappingTexture"), "Uniform location"), this.M = ga(t3.getUniformLocation(this.h, "maskTexture"), "Uniform location"); 24838 } 24839 l() { 24840 super.l(); 24841 const t3 = this.g; 24842 t3.uniform1i(this.M, 0), t3.uniform1i(this.P, 1), t3.uniform1i(this.U, 2); 24843 } 24844 close() { 24845 this.C && this.g.deleteTexture(this.C), this.j && this.g.deleteTexture(this.j), super.close(); 24846 } 24847 }; 24848 Sa = class extends ba { 24849 H() { 24850 return "\n precision mediump float;\n uniform sampler2D maskTexture;\n uniform sampler2D defaultTexture;\n uniform sampler2D overlayTexture;\n varying vec2 vTex;\n void main() {\n float confidence = texture2D(maskTexture, vTex).r;\n vec4 defaultColor = texture2D(defaultTexture, vTex);\n vec4 overlayColor = texture2D(overlayTexture, vTex);\n // Apply the alpha from the overlay and merge in the default color\n overlayColor = mix(defaultColor, overlayColor, overlayColor.a);\n gl_FragColor = mix(defaultColor, overlayColor, confidence);\n }\n "; 24851 } 24852 D() { 24853 const t3 = this.g; 24854 t3.activeTexture(t3.TEXTURE1), this.j = wa(this, t3), t3.activeTexture(t3.TEXTURE2), this.C = wa(this, t3); 24855 } 24856 m() { 24857 super.m(); 24858 const t3 = this.g; 24859 this.M = ga(t3.getUniformLocation(this.h, "defaultTexture"), "Uniform location"), this.P = ga(t3.getUniformLocation(this.h, "overlayTexture"), "Uniform location"), this.I = ga(t3.getUniformLocation(this.h, "maskTexture"), "Uniform location"); 24860 } 24861 l() { 24862 super.l(); 24863 const t3 = this.g; 24864 t3.uniform1i(this.I, 0), t3.uniform1i(this.M, 1), t3.uniform1i(this.P, 2); 24865 } 24866 close() { 24867 this.j && this.g.deleteTexture(this.j), this.C && this.g.deleteTexture(this.C), super.close(); 24868 } 24869 }; 24870 Na = class { 24871 constructor(t3, e3, n3, r3, i3, s3, o3) { 24872 this.g = t3, this.m = e3, this.j = n3, this.canvas = r3, this.l = i3, this.width = s3, this.height = o3, this.j && (0 === --Ua && console.error("You seem to be creating MPMask instances without invoking .close(). This leaks resources.")); 24873 } 24874 Fa() { 24875 return !!xa(this, 0); 24876 } 24877 ka() { 24878 return !!xa(this, 1); 24879 } 24880 R() { 24881 return !!xa(this, 2); 24882 } 24883 ja() { 24884 return (e3 = xa(t3 = this, 0)) || (e3 = La(t3), e3 = new Uint8Array(e3.map(((t4) => Math.round(255 * t4)))), t3.g.push(e3)), e3; 24885 var t3, e3; 24886 } 24887 ia() { 24888 return La(this); 24889 } 24890 N() { 24891 return Ra(this); 24892 } 24893 clone() { 24894 const t3 = []; 24895 for (const e3 of this.g) { 24896 let n3; 24897 if (e3 instanceof Uint8Array) n3 = new Uint8Array(e3); 24898 else if (e3 instanceof Float32Array) n3 = new Float32Array(e3); 24899 else { 24900 if (!(e3 instanceof WebGLTexture)) throw Error(`Type is not supported: ${e3}`); 24901 { 24902 const t4 = Ia(this), e4 = Ma(this); 24903 t4.activeTexture(t4.TEXTURE1), n3 = wa(e4, t4, this.m ? t4.LINEAR : t4.NEAREST), t4.bindTexture(t4.TEXTURE_2D, n3); 24904 const r3 = Fa(this); 24905 t4.texImage2D(t4.TEXTURE_2D, 0, r3, this.width, this.height, 0, t4.RED, t4.FLOAT, null), t4.bindTexture(t4.TEXTURE_2D, null), Ta(e4, t4, n3), Ea(e4, t4, false, (() => { 24906 Pa(this), t4.clearColor(0, 0, 0, 0), t4.clear(t4.COLOR_BUFFER_BIT), t4.drawArrays(t4.TRIANGLE_FAN, 0, 4), Ca(this); 24907 })), Aa(e4), Ca(this); 24908 } 24909 } 24910 t3.push(n3); 24911 } 24912 return new Na(t3, this.m, this.R(), this.canvas, this.l, this.width, this.height); 24913 } 24914 close() { 24915 this.j && Ia(this).deleteTexture(xa(this, 2)), Ua = -1; 24916 } 24917 }; 24918 Na.prototype.close = Na.prototype.close, Na.prototype.clone = Na.prototype.clone, Na.prototype.getAsWebGLTexture = Na.prototype.N, Na.prototype.getAsFloat32Array = Na.prototype.ia, Na.prototype.getAsUint8Array = Na.prototype.ja, Na.prototype.hasWebGLTexture = Na.prototype.R, Na.prototype.hasFloat32Array = Na.prototype.ka, Na.prototype.hasUint8Array = Na.prototype.Fa; 24919 Ua = 250; 24920 Da = { color: "white", lineWidth: 4, radius: 6 }; 24921 Ka = class { 24922 constructor(t3, e3) { 24923 "undefined" != typeof CanvasRenderingContext2D && t3 instanceof CanvasRenderingContext2D || t3 instanceof OffscreenCanvasRenderingContext2D ? (this.l = t3, this.j = e3) : this.j = t3; 24924 } 24925 ya(t3, e3) { 24926 if (t3) { 24927 var n3 = Va(this); 24928 e3 = Ba(e3), n3.save(); 24929 var r3 = n3.canvas, i3 = 0; 24930 for (const s3 of t3) n3.fillStyle = Ga(e3.fillColor, { index: i3, from: s3 }), n3.strokeStyle = Ga(e3.color, { index: i3, from: s3 }), n3.lineWidth = Ga(e3.lineWidth, { index: i3, from: s3 }), (t3 = new Path2D()).arc(s3.x * r3.width, s3.y * r3.height, Ga(e3.radius, { index: i3, from: s3 }), 0, 2 * Math.PI), n3.fill(t3), n3.stroke(t3), ++i3; 24931 n3.restore(); 24932 } 24933 } 24934 xa(t3, e3, n3) { 24935 if (t3 && e3) { 24936 var r3 = Va(this); 24937 n3 = Ba(n3), r3.save(); 24938 var i3 = r3.canvas, s3 = 0; 24939 for (const o3 of e3) { 24940 r3.beginPath(), e3 = t3[o3.start]; 24941 const a3 = t3[o3.end]; 24942 e3 && a3 && (r3.strokeStyle = Ga(n3.color, { index: s3, from: e3, to: a3 }), r3.lineWidth = Ga(n3.lineWidth, { index: s3, from: e3, to: a3 }), r3.moveTo(e3.x * i3.width, e3.y * i3.height), r3.lineTo(a3.x * i3.width, a3.y * i3.height)), ++s3, r3.stroke(); 24943 } 24944 r3.restore(); 24945 } 24946 } 24947 ua(t3, e3) { 24948 const n3 = Va(this); 24949 e3 = Ba(e3), n3.save(), n3.beginPath(), n3.lineWidth = Ga(e3.lineWidth, {}), n3.strokeStyle = Ga(e3.color, {}), n3.fillStyle = Ga(e3.fillColor, {}), n3.moveTo(t3.originX, t3.originY), n3.lineTo(t3.originX + t3.width, t3.originY), n3.lineTo(t3.originX + t3.width, t3.originY + t3.height), n3.lineTo(t3.originX, t3.originY + t3.height), n3.lineTo(t3.originX, t3.originY), n3.stroke(), n3.fill(), n3.restore(); 24950 } 24951 va(t3, e3, n3 = [0, 0, 0, 255]) { 24952 this.l ? (function(t4, e4, n4, r3) { 24953 const i3 = Xa(t4); 24954 Ha(t4, e4, ((e5) => { 24955 Wa(t4, e5, n4, r3), (e5 = Va(t4)).drawImage(i3.canvas, 0, 0, e5.canvas.width, e5.canvas.height); 24956 })); 24957 })(this, t3, n3, e3) : Wa(this, t3.N(), n3, e3); 24958 } 24959 wa(t3, e3, n3) { 24960 this.l ? (function(t4, e4, n4, r3) { 24961 const i3 = Xa(t4); 24962 Ha(t4, e4, ((e5) => { 24963 za(t4, e5, n4, r3), (e5 = Va(t4)).drawImage(i3.canvas, 0, 0, e5.canvas.width, e5.canvas.height); 24964 })); 24965 })(this, t3, e3, n3) : za(this, t3.N(), e3, n3); 24966 } 24967 close() { 24968 this.g?.close(), this.g = void 0, this.h?.close(), this.h = void 0, this.m?.close(), this.m = void 0; 24969 } 24970 }; 24971 Ka.prototype.close = Ka.prototype.close, Ka.prototype.drawConfidenceMask = Ka.prototype.wa, Ka.prototype.drawCategoryMask = Ka.prototype.va, Ka.prototype.drawBoundingBox = Ka.prototype.ua, Ka.prototype.drawConnectors = Ka.prototype.xa, Ka.prototype.drawLandmarks = Ka.prototype.ya, Ka.lerp = function(t3, e3, n3, r3, i3) { 24972 return ja(r3 * (1 - (t3 - e3) / (n3 - e3)) + i3 * (1 - (n3 - t3) / (n3 - e3)), r3, i3); 24973 }, Ka.clamp = ja; 24974 nc = class { 24975 constructor(t3, e3, n3, r3, i3, s3, o3) { 24976 this.g = t3, this.j = e3, this.m = n3, this.canvas = r3, this.l = i3, this.width = s3, this.height = o3, (this.j || this.m) && (0 === --rc && console.error("You seem to be creating MPImage instances without invoking .close(). This leaks resources.")); 24977 } 24978 Ea() { 24979 return !!Ya(this, 0); 24980 } 24981 la() { 24982 return !!Ya(this, 1); 24983 } 24984 R() { 24985 return !!Ya(this, 2); 24986 } 24987 Ca() { 24988 return qa(this); 24989 } 24990 Ba() { 24991 var t3 = Ya(this, 1); 24992 return t3 || ($a(this), Qa(this), t3 = ec(this), tc(this), this.g.push(t3), this.j = true), t3; 24993 } 24994 N() { 24995 return $a(this); 24996 } 24997 clone() { 24998 const t3 = []; 24999 for (const e3 of this.g) { 25000 let n3; 25001 if (e3 instanceof ImageData) n3 = new ImageData(e3.data, this.width, this.height); 25002 else if (e3 instanceof WebGLTexture) { 25003 const t4 = Ja(this), e4 = Za(this); 25004 t4.activeTexture(t4.TEXTURE1), n3 = wa(e4, t4), t4.bindTexture(t4.TEXTURE_2D, n3), t4.texImage2D(t4.TEXTURE_2D, 0, t4.RGBA, this.width, this.height, 0, t4.RGBA, t4.UNSIGNED_BYTE, null), t4.bindTexture(t4.TEXTURE_2D, null), Ta(e4, t4, n3), Ea(e4, t4, false, (() => { 25005 Qa(this), t4.clearColor(0, 0, 0, 0), t4.clear(t4.COLOR_BUFFER_BIT), t4.drawArrays(t4.TRIANGLE_FAN, 0, 4), tc(this); 25006 })), Aa(e4), tc(this); 25007 } else { 25008 if (!(e3 instanceof ImageBitmap)) throw Error(`Type is not supported: ${e3}`); 25009 $a(this), Qa(this), n3 = ec(this), tc(this); 25010 } 25011 t3.push(n3); 25012 } 25013 return new nc(t3, this.la(), this.R(), this.canvas, this.l, this.width, this.height); 25014 } 25015 close() { 25016 this.j && Ya(this, 1).close(), this.m && Ja(this).deleteTexture(Ya(this, 2)), rc = -1; 25017 } 25018 }; 25019 nc.prototype.close = nc.prototype.close, nc.prototype.clone = nc.prototype.clone, nc.prototype.getAsWebGLTexture = nc.prototype.N, nc.prototype.getAsImageBitmap = nc.prototype.Ba, nc.prototype.getAsImageData = nc.prototype.Ca, nc.prototype.hasWebGLTexture = nc.prototype.R, nc.prototype.hasImageBitmap = nc.prototype.la, nc.prototype.hasImageData = nc.prototype.Ea; 25020 rc = 250; 25021 sc = /* @__PURE__ */ (function(t3) { 25022 return class extends t3 { 25023 Ja() { 25024 this.i._registerModelResourcesGraphService(); 25025 } 25026 }; 25027 })((oc = class { 25028 constructor(t3, e3) { 25029 this.l = true, this.i = t3, this.g = null, this.h = 0, this.m = "function" == typeof this.i._addIntToInputStream, void 0 !== e3 ? this.i.canvas = e3 : Qo() ? this.i.canvas = new OffscreenCanvas(1, 1) : (console.warn("OffscreenCanvas not supported and GraphRunner constructor glCanvas parameter is undefined. Creating backup canvas."), this.i.canvas = document.createElement("canvas")); 25030 } 25031 async initializeGraph(t3) { 25032 const e3 = await (await fetch(t3)).arrayBuffer(); 25033 t3 = !(t3.endsWith(".pbtxt") || t3.endsWith(".textproto")), this.setGraph(new Uint8Array(e3), t3); 25034 } 25035 setGraphFromString(t3) { 25036 this.setGraph(new TextEncoder().encode(t3), false); 25037 } 25038 setGraph(t3, e3) { 25039 const n3 = t3.length, r3 = this.i._malloc(n3); 25040 this.i.HEAPU8.set(t3, r3), e3 ? this.i._changeBinaryGraph(n3, r3) : this.i._changeTextGraph(n3, r3), this.i._free(r3); 25041 } 25042 configureAudio(t3, e3, n3, r3, i3) { 25043 this.i._configureAudio || console.warn('Attempting to use configureAudio without support for input audio. Is build dep ":gl_graph_runner_audio" missing?'), na(this, r3 || "input_audio", ((r4) => { 25044 na(this, i3 = i3 || "audio_header", ((i4) => { 25045 this.i._configureAudio(r4, i4, t3, e3 ?? 0, n3); 25046 })); 25047 })); 25048 } 25049 setAutoResizeCanvas(t3) { 25050 this.l = t3; 25051 } 25052 setAutoRenderToScreen(t3) { 25053 this.i._setAutoRenderToScreen(t3); 25054 } 25055 setGpuBufferVerticalFlip(t3) { 25056 this.i.gpuOriginForWebTexturesIsBottomLeft = t3; 25057 } 25058 ca(t3) { 25059 sa(this, "__graph_config__", ((e3) => { 25060 t3(e3); 25061 })), na(this, "__graph_config__", ((t4) => { 25062 this.i._getGraphConfig(t4, void 0); 25063 })), delete this.i.simpleListeners.__graph_config__; 25064 } 25065 attachErrorListener(t3) { 25066 this.i.errorListener = t3; 25067 } 25068 attachEmptyPacketListener(t3, e3) { 25069 this.i.emptyPacketListeners = this.i.emptyPacketListeners || {}, this.i.emptyPacketListeners[t3] = e3; 25070 } 25071 addAudioToStream(t3, e3, n3) { 25072 this.addAudioToStreamWithShape(t3, 0, 0, e3, n3); 25073 } 25074 addAudioToStreamWithShape(t3, e3, n3, r3, i3) { 25075 const s3 = 4 * t3.length; 25076 this.h !== s3 && (this.g && this.i._free(this.g), this.g = this.i._malloc(s3), this.h = s3), this.i.HEAPF32.set(t3, this.g / 4), na(this, r3, ((t4) => { 25077 this.i._addAudioToInputStream(this.g, e3, n3, t4, i3); 25078 })); 25079 } 25080 addGpuBufferToStream(t3, e3, n3) { 25081 na(this, e3, ((e4) => { 25082 const [r3, i3] = ra(this, t3, e4); 25083 this.i._addBoundTextureToStream(e4, r3, i3, n3); 25084 })); 25085 } 25086 addBoolToStream(t3, e3, n3) { 25087 na(this, e3, ((e4) => { 25088 this.i._addBoolToInputStream(t3, e4, n3); 25089 })); 25090 } 25091 addDoubleToStream(t3, e3, n3) { 25092 na(this, e3, ((e4) => { 25093 this.i._addDoubleToInputStream(t3, e4, n3); 25094 })); 25095 } 25096 addFloatToStream(t3, e3, n3) { 25097 na(this, e3, ((e4) => { 25098 this.i._addFloatToInputStream(t3, e4, n3); 25099 })); 25100 } 25101 addIntToStream(t3, e3, n3) { 25102 na(this, e3, ((e4) => { 25103 this.i._addIntToInputStream(t3, e4, n3); 25104 })); 25105 } 25106 addUintToStream(t3, e3, n3) { 25107 na(this, e3, ((e4) => { 25108 this.i._addUintToInputStream(t3, e4, n3); 25109 })); 25110 } 25111 addStringToStream(t3, e3, n3) { 25112 na(this, e3, ((e4) => { 25113 na(this, t3, ((t4) => { 25114 this.i._addStringToInputStream(t4, e4, n3); 25115 })); 25116 })); 25117 } 25118 addStringRecordToStream(t3, e3, n3) { 25119 na(this, e3, ((e4) => { 25120 ia(this, Object.keys(t3), ((r3) => { 25121 ia(this, Object.values(t3), ((i3) => { 25122 this.i._addFlatHashMapToInputStream(r3, i3, Object.keys(t3).length, e4, n3); 25123 })); 25124 })); 25125 })); 25126 } 25127 addProtoToStream(t3, e3, n3, r3) { 25128 na(this, n3, ((n4) => { 25129 na(this, e3, ((e4) => { 25130 const i3 = this.i._malloc(t3.length); 25131 this.i.HEAPU8.set(t3, i3), this.i._addProtoToInputStream(i3, t3.length, e4, n4, r3), this.i._free(i3); 25132 })); 25133 })); 25134 } 25135 addEmptyPacketToStream(t3, e3) { 25136 na(this, t3, ((t4) => { 25137 this.i._addEmptyPacketToInputStream(t4, e3); 25138 })); 25139 } 25140 addBoolVectorToStream(t3, e3, n3) { 25141 na(this, e3, ((e4) => { 25142 const r3 = this.i._allocateBoolVector(t3.length); 25143 if (!r3) throw Error("Unable to allocate new bool vector on heap."); 25144 for (const e5 of t3) this.i._addBoolVectorEntry(r3, e5); 25145 this.i._addBoolVectorToInputStream(r3, e4, n3); 25146 })); 25147 } 25148 addDoubleVectorToStream(t3, e3, n3) { 25149 na(this, e3, ((e4) => { 25150 const r3 = this.i._allocateDoubleVector(t3.length); 25151 if (!r3) throw Error("Unable to allocate new double vector on heap."); 25152 for (const e5 of t3) this.i._addDoubleVectorEntry(r3, e5); 25153 this.i._addDoubleVectorToInputStream(r3, e4, n3); 25154 })); 25155 } 25156 addFloatVectorToStream(t3, e3, n3) { 25157 na(this, e3, ((e4) => { 25158 const r3 = this.i._allocateFloatVector(t3.length); 25159 if (!r3) throw Error("Unable to allocate new float vector on heap."); 25160 for (const e5 of t3) this.i._addFloatVectorEntry(r3, e5); 25161 this.i._addFloatVectorToInputStream(r3, e4, n3); 25162 })); 25163 } 25164 addIntVectorToStream(t3, e3, n3) { 25165 na(this, e3, ((e4) => { 25166 const r3 = this.i._allocateIntVector(t3.length); 25167 if (!r3) throw Error("Unable to allocate new int vector on heap."); 25168 for (const e5 of t3) this.i._addIntVectorEntry(r3, e5); 25169 this.i._addIntVectorToInputStream(r3, e4, n3); 25170 })); 25171 } 25172 addUintVectorToStream(t3, e3, n3) { 25173 na(this, e3, ((e4) => { 25174 const r3 = this.i._allocateUintVector(t3.length); 25175 if (!r3) throw Error("Unable to allocate new unsigned int vector on heap."); 25176 for (const e5 of t3) this.i._addUintVectorEntry(r3, e5); 25177 this.i._addUintVectorToInputStream(r3, e4, n3); 25178 })); 25179 } 25180 addStringVectorToStream(t3, e3, n3) { 25181 na(this, e3, ((e4) => { 25182 const r3 = this.i._allocateStringVector(t3.length); 25183 if (!r3) throw Error("Unable to allocate new string vector on heap."); 25184 for (const e5 of t3) na(this, e5, ((t4) => { 25185 this.i._addStringVectorEntry(r3, t4); 25186 })); 25187 this.i._addStringVectorToInputStream(r3, e4, n3); 25188 })); 25189 } 25190 addBoolToInputSidePacket(t3, e3) { 25191 na(this, e3, ((e4) => { 25192 this.i._addBoolToInputSidePacket(t3, e4); 25193 })); 25194 } 25195 addDoubleToInputSidePacket(t3, e3) { 25196 na(this, e3, ((e4) => { 25197 this.i._addDoubleToInputSidePacket(t3, e4); 25198 })); 25199 } 25200 addFloatToInputSidePacket(t3, e3) { 25201 na(this, e3, ((e4) => { 25202 this.i._addFloatToInputSidePacket(t3, e4); 25203 })); 25204 } 25205 addIntToInputSidePacket(t3, e3) { 25206 na(this, e3, ((e4) => { 25207 this.i._addIntToInputSidePacket(t3, e4); 25208 })); 25209 } 25210 addUintToInputSidePacket(t3, e3) { 25211 na(this, e3, ((e4) => { 25212 this.i._addUintToInputSidePacket(t3, e4); 25213 })); 25214 } 25215 addStringToInputSidePacket(t3, e3) { 25216 na(this, e3, ((e4) => { 25217 na(this, t3, ((t4) => { 25218 this.i._addStringToInputSidePacket(t4, e4); 25219 })); 25220 })); 25221 } 25222 addProtoToInputSidePacket(t3, e3, n3) { 25223 na(this, n3, ((n4) => { 25224 na(this, e3, ((e4) => { 25225 const r3 = this.i._malloc(t3.length); 25226 this.i.HEAPU8.set(t3, r3), this.i._addProtoToInputSidePacket(r3, t3.length, e4, n4), this.i._free(r3); 25227 })); 25228 })); 25229 } 25230 addBoolVectorToInputSidePacket(t3, e3) { 25231 na(this, e3, ((e4) => { 25232 const n3 = this.i._allocateBoolVector(t3.length); 25233 if (!n3) throw Error("Unable to allocate new bool vector on heap."); 25234 for (const e5 of t3) this.i._addBoolVectorEntry(n3, e5); 25235 this.i._addBoolVectorToInputSidePacket(n3, e4); 25236 })); 25237 } 25238 addDoubleVectorToInputSidePacket(t3, e3) { 25239 na(this, e3, ((e4) => { 25240 const n3 = this.i._allocateDoubleVector(t3.length); 25241 if (!n3) throw Error("Unable to allocate new double vector on heap."); 25242 for (const e5 of t3) this.i._addDoubleVectorEntry(n3, e5); 25243 this.i._addDoubleVectorToInputSidePacket(n3, e4); 25244 })); 25245 } 25246 addFloatVectorToInputSidePacket(t3, e3) { 25247 na(this, e3, ((e4) => { 25248 const n3 = this.i._allocateFloatVector(t3.length); 25249 if (!n3) throw Error("Unable to allocate new float vector on heap."); 25250 for (const e5 of t3) this.i._addFloatVectorEntry(n3, e5); 25251 this.i._addFloatVectorToInputSidePacket(n3, e4); 25252 })); 25253 } 25254 addIntVectorToInputSidePacket(t3, e3) { 25255 na(this, e3, ((e4) => { 25256 const n3 = this.i._allocateIntVector(t3.length); 25257 if (!n3) throw Error("Unable to allocate new int vector on heap."); 25258 for (const e5 of t3) this.i._addIntVectorEntry(n3, e5); 25259 this.i._addIntVectorToInputSidePacket(n3, e4); 25260 })); 25261 } 25262 addUintVectorToInputSidePacket(t3, e3) { 25263 na(this, e3, ((e4) => { 25264 const n3 = this.i._allocateUintVector(t3.length); 25265 if (!n3) throw Error("Unable to allocate new unsigned int vector on heap."); 25266 for (const e5 of t3) this.i._addUintVectorEntry(n3, e5); 25267 this.i._addUintVectorToInputSidePacket(n3, e4); 25268 })); 25269 } 25270 addStringVectorToInputSidePacket(t3, e3) { 25271 na(this, e3, ((e4) => { 25272 const n3 = this.i._allocateStringVector(t3.length); 25273 if (!n3) throw Error("Unable to allocate new string vector on heap."); 25274 for (const e5 of t3) na(this, e5, ((t4) => { 25275 this.i._addStringVectorEntry(n3, t4); 25276 })); 25277 this.i._addStringVectorToInputSidePacket(n3, e4); 25278 })); 25279 } 25280 attachBoolListener(t3, e3) { 25281 sa(this, t3, e3), na(this, t3, ((t4) => { 25282 this.i._attachBoolListener(t4); 25283 })); 25284 } 25285 attachBoolVectorListener(t3, e3) { 25286 oa(this, t3, e3), na(this, t3, ((t4) => { 25287 this.i._attachBoolVectorListener(t4); 25288 })); 25289 } 25290 attachIntListener(t3, e3) { 25291 sa(this, t3, e3), na(this, t3, ((t4) => { 25292 this.i._attachIntListener(t4); 25293 })); 25294 } 25295 attachIntVectorListener(t3, e3) { 25296 oa(this, t3, e3), na(this, t3, ((t4) => { 25297 this.i._attachIntVectorListener(t4); 25298 })); 25299 } 25300 attachUintListener(t3, e3) { 25301 sa(this, t3, e3), na(this, t3, ((t4) => { 25302 this.i._attachUintListener(t4); 25303 })); 25304 } 25305 attachUintVectorListener(t3, e3) { 25306 oa(this, t3, e3), na(this, t3, ((t4) => { 25307 this.i._attachUintVectorListener(t4); 25308 })); 25309 } 25310 attachDoubleListener(t3, e3) { 25311 sa(this, t3, e3), na(this, t3, ((t4) => { 25312 this.i._attachDoubleListener(t4); 25313 })); 25314 } 25315 attachDoubleVectorListener(t3, e3) { 25316 oa(this, t3, e3), na(this, t3, ((t4) => { 25317 this.i._attachDoubleVectorListener(t4); 25318 })); 25319 } 25320 attachFloatListener(t3, e3) { 25321 sa(this, t3, e3), na(this, t3, ((t4) => { 25322 this.i._attachFloatListener(t4); 25323 })); 25324 } 25325 attachFloatVectorListener(t3, e3) { 25326 oa(this, t3, e3), na(this, t3, ((t4) => { 25327 this.i._attachFloatVectorListener(t4); 25328 })); 25329 } 25330 attachStringListener(t3, e3) { 25331 sa(this, t3, e3), na(this, t3, ((t4) => { 25332 this.i._attachStringListener(t4); 25333 })); 25334 } 25335 attachStringVectorListener(t3, e3) { 25336 oa(this, t3, e3), na(this, t3, ((t4) => { 25337 this.i._attachStringVectorListener(t4); 25338 })); 25339 } 25340 attachProtoListener(t3, e3, n3) { 25341 sa(this, t3, e3), na(this, t3, ((t4) => { 25342 this.i._attachProtoListener(t4, n3 || false); 25343 })); 25344 } 25345 attachProtoVectorListener(t3, e3, n3) { 25346 oa(this, t3, e3), na(this, t3, ((t4) => { 25347 this.i._attachProtoVectorListener(t4, n3 || false); 25348 })); 25349 } 25350 attachAudioListener(t3, e3, n3) { 25351 this.i._attachAudioListener || console.warn('Attempting to use attachAudioListener without support for output audio. Is build dep ":gl_graph_runner_audio_out" missing?'), sa(this, t3, ((t4, n4) => { 25352 t4 = new Float32Array(t4.buffer, t4.byteOffset, t4.length / 4), e3(t4, n4); 25353 })), na(this, t3, ((t4) => { 25354 this.i._attachAudioListener(t4, n3 || false); 25355 })); 25356 } 25357 finishProcessing() { 25358 this.i._waitUntilIdle(); 25359 } 25360 closeGraph() { 25361 this.i._closeGraph(), this.i.simpleListeners = void 0, this.i.emptyPacketListeners = void 0; 25362 } 25363 }, class extends oc { 25364 get ga() { 25365 return this.i; 25366 } 25367 pa(t3, e3, n3) { 25368 na(this, e3, ((e4) => { 25369 const [r3, i3] = ra(this, t3, e4); 25370 this.ga._addBoundTextureAsImageToStream(e4, r3, i3, n3); 25371 })); 25372 } 25373 Z(t3, e3) { 25374 sa(this, t3, e3), na(this, t3, ((t4) => { 25375 this.ga._attachImageListener(t4); 25376 })); 25377 } 25378 aa(t3, e3) { 25379 oa(this, t3, e3), na(this, t3, ((t4) => { 25380 this.ga._attachImageVectorListener(t4); 25381 })); 25382 } 25383 })); 25384 ac = class extends sc { 25385 }; 25386 dc = class extends pa { 25387 constructor(t3, e3, n3, r3) { 25388 super(t3), this.g = t3, this.X = e3, this.U = n3, this.oa = r3, this.P = new ba(); 25389 } 25390 l(t3, e3 = true) { 25391 if ("runningMode" in t3 && Ze(this.baseOptions, 2, Jt(!!t3.runningMode && "IMAGE" !== t3.runningMode)), void 0 !== t3.canvas && this.g.i.canvas !== t3.canvas) throw Error("You must create a new task to reset the canvas."); 25392 return super.l(t3, e3); 25393 } 25394 close() { 25395 this.P.close(), super.close(); 25396 } 25397 }; 25398 dc.prototype.close = dc.prototype.close; 25399 pc = class extends dc { 25400 constructor(t3, e3) { 25401 super(new ac(t3, e3), "image_in", "norm_rect_in", false), this.j = { detections: [] }, wn(t3 = this.h = new zs(), 0, 1, e3 = new Xs()), Ln(this.h, 2, 0.5), Ln(this.h, 3, 0.3); 25402 } 25403 get baseOptions() { 25404 return yn(this.h, Xs, 1); 25405 } 25406 set baseOptions(t3) { 25407 wn(this.h, 0, 1, t3); 25408 } 25409 o(t3) { 25410 return "minDetectionConfidence" in t3 && Ln(this.h, 2, t3.minDetectionConfidence ?? 0.5), "minSuppressionThreshold" in t3 && Ln(this.h, 3, t3.minSuppressionThreshold ?? 0.3), this.l(t3); 25411 } 25412 F(t3, e3) { 25413 return this.j = { detections: [] }, uc(this, t3, e3), this.j; 25414 } 25415 G(t3, e3, n3) { 25416 return this.j = { detections: [] }, lc(this, t3, n3, e3), this.j; 25417 } 25418 m() { 25419 var t3 = new ls(); 25420 hs(t3, "image_in"), hs(t3, "norm_rect_in"), us(t3, "detections"); 25421 const e3 = new Qi(); 25422 xr(e3, Ys, this.h); 25423 const n3 = new is(); 25424 Rn(n3, 2, "mediapipe.tasks.vision.face_detector.FaceDetectorGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect_in"), rs(n3, "DETECTIONS:detections"), n3.o(e3), cs(t3, n3), this.g.attachProtoVectorListener("detections", ((t4, e4) => { 25425 for (const e5 of t4) t4 = ws(e5), this.j.detections.push(Xo(t4)); 25426 ua(this, e4); 25427 })), this.g.attachEmptyPacketListener("detections", ((t4) => { 25428 ua(this, t4); 25429 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25430 } 25431 }; 25432 pc.prototype.detectForVideo = pc.prototype.G, pc.prototype.detect = pc.prototype.F, pc.prototype.setOptions = pc.prototype.o, pc.createFromModelPath = async function(t3, e3) { 25433 return cc(pc, t3, { baseOptions: { modelAssetPath: e3 } }); 25434 }, pc.createFromModelBuffer = function(t3, e3) { 25435 return cc(pc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25436 }, pc.createFromOptions = function(t3, e3) { 25437 return cc(pc, t3, e3); 25438 }; 25439 gc = ic([61, 146], [146, 91], [91, 181], [181, 84], [84, 17], [17, 314], [314, 405], [405, 321], [321, 375], [375, 291], [61, 185], [185, 40], [40, 39], [39, 37], [37, 0], [0, 267], [267, 269], [269, 270], [270, 409], [409, 291], [78, 95], [95, 88], [88, 178], [178, 87], [87, 14], [14, 317], [317, 402], [402, 318], [318, 324], [324, 308], [78, 191], [191, 80], [80, 81], [81, 82], [82, 13], [13, 312], [312, 311], [311, 310], [310, 415], [415, 308]); 25440 mc = ic([263, 249], [249, 390], [390, 373], [373, 374], [374, 380], [380, 381], [381, 382], [382, 362], [263, 466], [466, 388], [388, 387], [387, 386], [386, 385], [385, 384], [384, 398], [398, 362]); 25441 yc = ic([276, 283], [283, 282], [282, 295], [295, 285], [300, 293], [293, 334], [334, 296], [296, 336]); 25442 _c = ic([474, 475], [475, 476], [476, 477], [477, 474]); 25443 vc = ic([33, 7], [7, 163], [163, 144], [144, 145], [145, 153], [153, 154], [154, 155], [155, 133], [33, 246], [246, 161], [161, 160], [160, 159], [159, 158], [158, 157], [157, 173], [173, 133]); 25444 Ec = ic([46, 53], [53, 52], [52, 65], [65, 55], [70, 63], [63, 105], [105, 66], [66, 107]); 25445 wc = ic([469, 470], [470, 471], [471, 472], [472, 469]); 25446 Tc = ic([10, 338], [338, 297], [297, 332], [332, 284], [284, 251], [251, 389], [389, 356], [356, 454], [454, 323], [323, 361], [361, 288], [288, 397], [397, 365], [365, 379], [379, 378], [378, 400], [400, 377], [377, 152], [152, 148], [148, 176], [176, 149], [149, 150], [150, 136], [136, 172], [172, 58], [58, 132], [132, 93], [93, 234], [234, 127], [127, 162], [162, 21], [21, 54], [54, 103], [103, 67], [67, 109], [109, 10]); 25447 Ac = [...gc, ...mc, ...yc, ...vc, ...Ec, ...Tc]; 25448 bc = ic([127, 34], [34, 139], [139, 127], [11, 0], [0, 37], [37, 11], [232, 231], [231, 120], [120, 232], [72, 37], [37, 39], [39, 72], [128, 121], [121, 47], [47, 128], [232, 121], [121, 128], [128, 232], [104, 69], [69, 67], [67, 104], [175, 171], [171, 148], [148, 175], [118, 50], [50, 101], [101, 118], [73, 39], [39, 40], [40, 73], [9, 151], [151, 108], [108, 9], [48, 115], [115, 131], [131, 48], [194, 204], [204, 211], [211, 194], [74, 40], [40, 185], [185, 74], [80, 42], [42, 183], [183, 80], [40, 92], [92, 186], [186, 40], [230, 229], [229, 118], [118, 230], [202, 212], [212, 214], [214, 202], [83, 18], [18, 17], [17, 83], [76, 61], [61, 146], [146, 76], [160, 29], [29, 30], [30, 160], [56, 157], [157, 173], [173, 56], [106, 204], [204, 194], [194, 106], [135, 214], [214, 192], [192, 135], [203, 165], [165, 98], [98, 203], [21, 71], [71, 68], [68, 21], [51, 45], [45, 4], [4, 51], [144, 24], [24, 23], [23, 144], [77, 146], [146, 91], [91, 77], [205, 50], [50, 187], [187, 205], [201, 200], [200, 18], [18, 201], [91, 106], [106, 182], [182, 91], [90, 91], [91, 181], [181, 90], [85, 84], [84, 17], [17, 85], [206, 203], [203, 36], [36, 206], [148, 171], [171, 140], [140, 148], [92, 40], [40, 39], [39, 92], [193, 189], [189, 244], [244, 193], [159, 158], [158, 28], [28, 159], [247, 246], [246, 161], [161, 247], [236, 3], [3, 196], [196, 236], [54, 68], [68, 104], [104, 54], [193, 168], [168, 8], [8, 193], [117, 228], [228, 31], [31, 117], [189, 193], [193, 55], [55, 189], [98, 97], [97, 99], [99, 98], [126, 47], [47, 100], [100, 126], [166, 79], [79, 218], [218, 166], [155, 154], [154, 26], [26, 155], [209, 49], [49, 131], [131, 209], [135, 136], [136, 150], [150, 135], [47, 126], [126, 217], [217, 47], [223, 52], [52, 53], [53, 223], [45, 51], [51, 134], [134, 45], [211, 170], [170, 140], [140, 211], [67, 69], [69, 108], [108, 67], [43, 106], [106, 91], [91, 43], [230, 119], [119, 120], [120, 230], [226, 130], [130, 247], [247, 226], [63, 53], [53, 52], [52, 63], [238, 20], [20, 242], [242, 238], [46, 70], [70, 156], [156, 46], [78, 62], [62, 96], [96, 78], [46, 53], [53, 63], [63, 46], [143, 34], [34, 227], [227, 143], [123, 117], [117, 111], [111, 123], [44, 125], [125, 19], [19, 44], [236, 134], [134, 51], [51, 236], [216, 206], [206, 205], [205, 216], [154, 153], [153, 22], [22, 154], [39, 37], [37, 167], [167, 39], [200, 201], [201, 208], [208, 200], [36, 142], [142, 100], [100, 36], [57, 212], [212, 202], [202, 57], [20, 60], [60, 99], [99, 20], [28, 158], [158, 157], [157, 28], [35, 226], [226, 113], [113, 35], [160, 159], [159, 27], [27, 160], [204, 202], [202, 210], [210, 204], [113, 225], [225, 46], [46, 113], [43, 202], [202, 204], [204, 43], [62, 76], [76, 77], [77, 62], [137, 123], [123, 116], [116, 137], [41, 38], [38, 72], [72, 41], [203, 129], [129, 142], [142, 203], [64, 98], [98, 240], [240, 64], [49, 102], [102, 64], [64, 49], [41, 73], [73, 74], [74, 41], [212, 216], [216, 207], [207, 212], [42, 74], [74, 184], [184, 42], [169, 170], [170, 211], [211, 169], [170, 149], [149, 176], [176, 170], [105, 66], [66, 69], [69, 105], [122, 6], [6, 168], [168, 122], [123, 147], [147, 187], [187, 123], [96, 77], [77, 90], [90, 96], [65, 55], [55, 107], [107, 65], [89, 90], [90, 180], [180, 89], [101, 100], [100, 120], [120, 101], [63, 105], [105, 104], [104, 63], [93, 137], [137, 227], [227, 93], [15, 86], [86, 85], [85, 15], [129, 102], [102, 49], [49, 129], [14, 87], [87, 86], [86, 14], [55, 8], [8, 9], [9, 55], [100, 47], [47, 121], [121, 100], [145, 23], [23, 22], [22, 145], [88, 89], [89, 179], [179, 88], [6, 122], [122, 196], [196, 6], [88, 95], [95, 96], [96, 88], [138, 172], [172, 136], [136, 138], [215, 58], [58, 172], [172, 215], [115, 48], [48, 219], [219, 115], [42, 80], [80, 81], [81, 42], [195, 3], [3, 51], [51, 195], [43, 146], [146, 61], [61, 43], [171, 175], [175, 199], [199, 171], [81, 82], [82, 38], [38, 81], [53, 46], [46, 225], [225, 53], [144, 163], [163, 110], [110, 144], [52, 65], [65, 66], [66, 52], [229, 228], [228, 117], [117, 229], [34, 127], [127, 234], [234, 34], [107, 108], [108, 69], [69, 107], [109, 108], [108, 151], [151, 109], [48, 64], [64, 235], [235, 48], [62, 78], [78, 191], [191, 62], [129, 209], [209, 126], [126, 129], [111, 35], [35, 143], [143, 111], [117, 123], [123, 50], [50, 117], [222, 65], [65, 52], [52, 222], [19, 125], [125, 141], [141, 19], [221, 55], [55, 65], [65, 221], [3, 195], [195, 197], [197, 3], [25, 7], [7, 33], [33, 25], [220, 237], [237, 44], [44, 220], [70, 71], [71, 139], [139, 70], [122, 193], [193, 245], [245, 122], [247, 130], [130, 33], [33, 247], [71, 21], [21, 162], [162, 71], [170, 169], [169, 150], [150, 170], [188, 174], [174, 196], [196, 188], [216, 186], [186, 92], [92, 216], [2, 97], [97, 167], [167, 2], [141, 125], [125, 241], [241, 141], [164, 167], [167, 37], [37, 164], [72, 38], [38, 12], [12, 72], [38, 82], [82, 13], [13, 38], [63, 68], [68, 71], [71, 63], [226, 35], [35, 111], [111, 226], [101, 50], [50, 205], [205, 101], [206, 92], [92, 165], [165, 206], [209, 198], [198, 217], [217, 209], [165, 167], [167, 97], [97, 165], [220, 115], [115, 218], [218, 220], [133, 112], [112, 243], [243, 133], [239, 238], [238, 241], [241, 239], [214, 135], [135, 169], [169, 214], [190, 173], [173, 133], [133, 190], [171, 208], [208, 32], [32, 171], [125, 44], [44, 237], [237, 125], [86, 87], [87, 178], [178, 86], [85, 86], [86, 179], [179, 85], [84, 85], [85, 180], [180, 84], [83, 84], [84, 181], [181, 83], [201, 83], [83, 182], [182, 201], [137, 93], [93, 132], [132, 137], [76, 62], [62, 183], [183, 76], [61, 76], [76, 184], [184, 61], [57, 61], [61, 185], [185, 57], [212, 57], [57, 186], [186, 212], [214, 207], [207, 187], [187, 214], [34, 143], [143, 156], [156, 34], [79, 239], [239, 237], [237, 79], [123, 137], [137, 177], [177, 123], [44, 1], [1, 4], [4, 44], [201, 194], [194, 32], [32, 201], [64, 102], [102, 129], [129, 64], [213, 215], [215, 138], [138, 213], [59, 166], [166, 219], [219, 59], [242, 99], [99, 97], [97, 242], [2, 94], [94, 141], [141, 2], [75, 59], [59, 235], [235, 75], [24, 110], [110, 228], [228, 24], [25, 130], [130, 226], [226, 25], [23, 24], [24, 229], [229, 23], [22, 23], [23, 230], [230, 22], [26, 22], [22, 231], [231, 26], [112, 26], [26, 232], [232, 112], [189, 190], [190, 243], [243, 189], [221, 56], [56, 190], [190, 221], [28, 56], [56, 221], [221, 28], [27, 28], [28, 222], [222, 27], [29, 27], [27, 223], [223, 29], [30, 29], [29, 224], [224, 30], [247, 30], [30, 225], [225, 247], [238, 79], [79, 20], [20, 238], [166, 59], [59, 75], [75, 166], [60, 75], [75, 240], [240, 60], [147, 177], [177, 215], [215, 147], [20, 79], [79, 166], [166, 20], [187, 147], [147, 213], [213, 187], [112, 233], [233, 244], [244, 112], [233, 128], [128, 245], [245, 233], [128, 114], [114, 188], [188, 128], [114, 217], [217, 174], [174, 114], [131, 115], [115, 220], [220, 131], [217, 198], [198, 236], [236, 217], [198, 131], [131, 134], [134, 198], [177, 132], [132, 58], [58, 177], [143, 35], [35, 124], [124, 143], [110, 163], [163, 7], [7, 110], [228, 110], [110, 25], [25, 228], [356, 389], [389, 368], [368, 356], [11, 302], [302, 267], [267, 11], [452, 350], [350, 349], [349, 452], [302, 303], [303, 269], [269, 302], [357, 343], [343, 277], [277, 357], [452, 453], [453, 357], [357, 452], [333, 332], [332, 297], [297, 333], [175, 152], [152, 377], [377, 175], [347, 348], [348, 330], [330, 347], [303, 304], [304, 270], [270, 303], [9, 336], [336, 337], [337, 9], [278, 279], [279, 360], [360, 278], [418, 262], [262, 431], [431, 418], [304, 408], [408, 409], [409, 304], [310, 415], [415, 407], [407, 310], [270, 409], [409, 410], [410, 270], [450, 348], [348, 347], [347, 450], [422, 430], [430, 434], [434, 422], [313, 314], [314, 17], [17, 313], [306, 307], [307, 375], [375, 306], [387, 388], [388, 260], [260, 387], [286, 414], [414, 398], [398, 286], [335, 406], [406, 418], [418, 335], [364, 367], [367, 416], [416, 364], [423, 358], [358, 327], [327, 423], [251, 284], [284, 298], [298, 251], [281, 5], [5, 4], [4, 281], [373, 374], [374, 253], [253, 373], [307, 320], [320, 321], [321, 307], [425, 427], [427, 411], [411, 425], [421, 313], [313, 18], [18, 421], [321, 405], [405, 406], [406, 321], [320, 404], [404, 405], [405, 320], [315, 16], [16, 17], [17, 315], [426, 425], [425, 266], [266, 426], [377, 400], [400, 369], [369, 377], [322, 391], [391, 269], [269, 322], [417, 465], [465, 464], [464, 417], [386, 257], [257, 258], [258, 386], [466, 260], [260, 388], [388, 466], [456, 399], [399, 419], [419, 456], [284, 332], [332, 333], [333, 284], [417, 285], [285, 8], [8, 417], [346, 340], [340, 261], [261, 346], [413, 441], [441, 285], [285, 413], [327, 460], [460, 328], [328, 327], [355, 371], [371, 329], [329, 355], [392, 439], [439, 438], [438, 392], [382, 341], [341, 256], [256, 382], [429, 420], [420, 360], [360, 429], [364, 394], [394, 379], [379, 364], [277, 343], [343, 437], [437, 277], [443, 444], [444, 283], [283, 443], [275, 440], [440, 363], [363, 275], [431, 262], [262, 369], [369, 431], [297, 338], [338, 337], [337, 297], [273, 375], [375, 321], [321, 273], [450, 451], [451, 349], [349, 450], [446, 342], [342, 467], [467, 446], [293, 334], [334, 282], [282, 293], [458, 461], [461, 462], [462, 458], [276, 353], [353, 383], [383, 276], [308, 324], [324, 325], [325, 308], [276, 300], [300, 293], [293, 276], [372, 345], [345, 447], [447, 372], [352, 345], [345, 340], [340, 352], [274, 1], [1, 19], [19, 274], [456, 248], [248, 281], [281, 456], [436, 427], [427, 425], [425, 436], [381, 256], [256, 252], [252, 381], [269, 391], [391, 393], [393, 269], [200, 199], [199, 428], [428, 200], [266, 330], [330, 329], [329, 266], [287, 273], [273, 422], [422, 287], [250, 462], [462, 328], [328, 250], [258, 286], [286, 384], [384, 258], [265, 353], [353, 342], [342, 265], [387, 259], [259, 257], [257, 387], [424, 431], [431, 430], [430, 424], [342, 353], [353, 276], [276, 342], [273, 335], [335, 424], [424, 273], [292, 325], [325, 307], [307, 292], [366, 447], [447, 345], [345, 366], [271, 303], [303, 302], [302, 271], [423, 266], [266, 371], [371, 423], [294, 455], [455, 460], [460, 294], [279, 278], [278, 294], [294, 279], [271, 272], [272, 304], [304, 271], [432, 434], [434, 427], [427, 432], [272, 407], [407, 408], [408, 272], [394, 430], [430, 431], [431, 394], [395, 369], [369, 400], [400, 395], [334, 333], [333, 299], [299, 334], [351, 417], [417, 168], [168, 351], [352, 280], [280, 411], [411, 352], [325, 319], [319, 320], [320, 325], [295, 296], [296, 336], [336, 295], [319, 403], [403, 404], [404, 319], [330, 348], [348, 349], [349, 330], [293, 298], [298, 333], [333, 293], [323, 454], [454, 447], [447, 323], [15, 16], [16, 315], [315, 15], [358, 429], [429, 279], [279, 358], [14, 15], [15, 316], [316, 14], [285, 336], [336, 9], [9, 285], [329, 349], [349, 350], [350, 329], [374, 380], [380, 252], [252, 374], [318, 402], [402, 403], [403, 318], [6, 197], [197, 419], [419, 6], [318, 319], [319, 325], [325, 318], [367, 364], [364, 365], [365, 367], [435, 367], [367, 397], [397, 435], [344, 438], [438, 439], [439, 344], [272, 271], [271, 311], [311, 272], [195, 5], [5, 281], [281, 195], [273, 287], [287, 291], [291, 273], [396, 428], [428, 199], [199, 396], [311, 271], [271, 268], [268, 311], [283, 444], [444, 445], [445, 283], [373, 254], [254, 339], [339, 373], [282, 334], [334, 296], [296, 282], [449, 347], [347, 346], [346, 449], [264, 447], [447, 454], [454, 264], [336, 296], [296, 299], [299, 336], [338, 10], [10, 151], [151, 338], [278, 439], [439, 455], [455, 278], [292, 407], [407, 415], [415, 292], [358, 371], [371, 355], [355, 358], [340, 345], [345, 372], [372, 340], [346, 347], [347, 280], [280, 346], [442, 443], [443, 282], [282, 442], [19, 94], [94, 370], [370, 19], [441, 442], [442, 295], [295, 441], [248, 419], [419, 197], [197, 248], [263, 255], [255, 359], [359, 263], [440, 275], [275, 274], [274, 440], [300, 383], [383, 368], [368, 300], [351, 412], [412, 465], [465, 351], [263, 467], [467, 466], [466, 263], [301, 368], [368, 389], [389, 301], [395, 378], [378, 379], [379, 395], [412, 351], [351, 419], [419, 412], [436, 426], [426, 322], [322, 436], [2, 164], [164, 393], [393, 2], [370, 462], [462, 461], [461, 370], [164, 0], [0, 267], [267, 164], [302, 11], [11, 12], [12, 302], [268, 12], [12, 13], [13, 268], [293, 300], [300, 301], [301, 293], [446, 261], [261, 340], [340, 446], [330, 266], [266, 425], [425, 330], [426, 423], [423, 391], [391, 426], [429, 355], [355, 437], [437, 429], [391, 327], [327, 326], [326, 391], [440, 457], [457, 438], [438, 440], [341, 382], [382, 362], [362, 341], [459, 457], [457, 461], [461, 459], [434, 430], [430, 394], [394, 434], [414, 463], [463, 362], [362, 414], [396, 369], [369, 262], [262, 396], [354, 461], [461, 457], [457, 354], [316, 403], [403, 402], [402, 316], [315, 404], [404, 403], [403, 315], [314, 405], [405, 404], [404, 314], [313, 406], [406, 405], [405, 313], [421, 418], [418, 406], [406, 421], [366, 401], [401, 361], [361, 366], [306, 408], [408, 407], [407, 306], [291, 409], [409, 408], [408, 291], [287, 410], [410, 409], [409, 287], [432, 436], [436, 410], [410, 432], [434, 416], [416, 411], [411, 434], [264, 368], [368, 383], [383, 264], [309, 438], [438, 457], [457, 309], [352, 376], [376, 401], [401, 352], [274, 275], [275, 4], [4, 274], [421, 428], [428, 262], [262, 421], [294, 327], [327, 358], [358, 294], [433, 416], [416, 367], [367, 433], [289, 455], [455, 439], [439, 289], [462, 370], [370, 326], [326, 462], [2, 326], [326, 370], [370, 2], [305, 460], [460, 455], [455, 305], [254, 449], [449, 448], [448, 254], [255, 261], [261, 446], [446, 255], [253, 450], [450, 449], [449, 253], [252, 451], [451, 450], [450, 252], [256, 452], [452, 451], [451, 256], [341, 453], [453, 452], [452, 341], [413, 464], [464, 463], [463, 413], [441, 413], [413, 414], [414, 441], [258, 442], [442, 441], [441, 258], [257, 443], [443, 442], [442, 257], [259, 444], [444, 443], [443, 259], [260, 445], [445, 444], [444, 260], [467, 342], [342, 445], [445, 467], [459, 458], [458, 250], [250, 459], [289, 392], [392, 290], [290, 289], [290, 328], [328, 460], [460, 290], [376, 433], [433, 435], [435, 376], [250, 290], [290, 392], [392, 250], [411, 416], [416, 433], [433, 411], [341, 463], [463, 464], [464, 341], [453, 464], [464, 465], [465, 453], [357, 465], [465, 412], [412, 357], [343, 412], [412, 399], [399, 343], [360, 363], [363, 440], [440, 360], [437, 399], [399, 456], [456, 437], [420, 456], [456, 363], [363, 420], [401, 435], [435, 288], [288, 401], [372, 383], [383, 353], [353, 372], [339, 255], [255, 249], [249, 339], [448, 261], [261, 255], [255, 448], [133, 243], [243, 190], [190, 133], [133, 155], [155, 112], [112, 133], [33, 246], [246, 247], [247, 33], [33, 130], [130, 25], [25, 33], [398, 384], [384, 286], [286, 398], [362, 398], [398, 414], [414, 362], [362, 463], [463, 341], [341, 362], [263, 359], [359, 467], [467, 263], [263, 249], [249, 255], [255, 263], [466, 467], [467, 260], [260, 466], [75, 60], [60, 166], [166, 75], [238, 239], [239, 79], [79, 238], [162, 127], [127, 139], [139, 162], [72, 11], [11, 37], [37, 72], [121, 232], [232, 120], [120, 121], [73, 72], [72, 39], [39, 73], [114, 128], [128, 47], [47, 114], [233, 232], [232, 128], [128, 233], [103, 104], [104, 67], [67, 103], [152, 175], [175, 148], [148, 152], [119, 118], [118, 101], [101, 119], [74, 73], [73, 40], [40, 74], [107, 9], [9, 108], [108, 107], [49, 48], [48, 131], [131, 49], [32, 194], [194, 211], [211, 32], [184, 74], [74, 185], [185, 184], [191, 80], [80, 183], [183, 191], [185, 40], [40, 186], [186, 185], [119, 230], [230, 118], [118, 119], [210, 202], [202, 214], [214, 210], [84, 83], [83, 17], [17, 84], [77, 76], [76, 146], [146, 77], [161, 160], [160, 30], [30, 161], [190, 56], [56, 173], [173, 190], [182, 106], [106, 194], [194, 182], [138, 135], [135, 192], [192, 138], [129, 203], [203, 98], [98, 129], [54, 21], [21, 68], [68, 54], [5, 51], [51, 4], [4, 5], [145, 144], [144, 23], [23, 145], [90, 77], [77, 91], [91, 90], [207, 205], [205, 187], [187, 207], [83, 201], [201, 18], [18, 83], [181, 91], [91, 182], [182, 181], [180, 90], [90, 181], [181, 180], [16, 85], [85, 17], [17, 16], [205, 206], [206, 36], [36, 205], [176, 148], [148, 140], [140, 176], [165, 92], [92, 39], [39, 165], [245, 193], [193, 244], [244, 245], [27, 159], [159, 28], [28, 27], [30, 247], [247, 161], [161, 30], [174, 236], [236, 196], [196, 174], [103, 54], [54, 104], [104, 103], [55, 193], [193, 8], [8, 55], [111, 117], [117, 31], [31, 111], [221, 189], [189, 55], [55, 221], [240, 98], [98, 99], [99, 240], [142, 126], [126, 100], [100, 142], [219, 166], [166, 218], [218, 219], [112, 155], [155, 26], [26, 112], [198, 209], [209, 131], [131, 198], [169, 135], [135, 150], [150, 169], [114, 47], [47, 217], [217, 114], [224, 223], [223, 53], [53, 224], [220, 45], [45, 134], [134, 220], [32, 211], [211, 140], [140, 32], [109, 67], [67, 108], [108, 109], [146, 43], [43, 91], [91, 146], [231, 230], [230, 120], [120, 231], [113, 226], [226, 247], [247, 113], [105, 63], [63, 52], [52, 105], [241, 238], [238, 242], [242, 241], [124, 46], [46, 156], [156, 124], [95, 78], [78, 96], [96, 95], [70, 46], [46, 63], [63, 70], [116, 143], [143, 227], [227, 116], [116, 123], [123, 111], [111, 116], [1, 44], [44, 19], [19, 1], [3, 236], [236, 51], [51, 3], [207, 216], [216, 205], [205, 207], [26, 154], [154, 22], [22, 26], [165, 39], [39, 167], [167, 165], [199, 200], [200, 208], [208, 199], [101, 36], [36, 100], [100, 101], [43, 57], [57, 202], [202, 43], [242, 20], [20, 99], [99, 242], [56, 28], [28, 157], [157, 56], [124, 35], [35, 113], [113, 124], [29, 160], [160, 27], [27, 29], [211, 204], [204, 210], [210, 211], [124, 113], [113, 46], [46, 124], [106, 43], [43, 204], [204, 106], [96, 62], [62, 77], [77, 96], [227, 137], [137, 116], [116, 227], [73, 41], [41, 72], [72, 73], [36, 203], [203, 142], [142, 36], [235, 64], [64, 240], [240, 235], [48, 49], [49, 64], [64, 48], [42, 41], [41, 74], [74, 42], [214, 212], [212, 207], [207, 214], [183, 42], [42, 184], [184, 183], [210, 169], [169, 211], [211, 210], [140, 170], [170, 176], [176, 140], [104, 105], [105, 69], [69, 104], [193, 122], [122, 168], [168, 193], [50, 123], [123, 187], [187, 50], [89, 96], [96, 90], [90, 89], [66, 65], [65, 107], [107, 66], [179, 89], [89, 180], [180, 179], [119, 101], [101, 120], [120, 119], [68, 63], [63, 104], [104, 68], [234, 93], [93, 227], [227, 234], [16, 15], [15, 85], [85, 16], [209, 129], [129, 49], [49, 209], [15, 14], [14, 86], [86, 15], [107, 55], [55, 9], [9, 107], [120, 100], [100, 121], [121, 120], [153, 145], [145, 22], [22, 153], [178, 88], [88, 179], [179, 178], [197, 6], [6, 196], [196, 197], [89, 88], [88, 96], [96, 89], [135, 138], [138, 136], [136, 135], [138, 215], [215, 172], [172, 138], [218, 115], [115, 219], [219, 218], [41, 42], [42, 81], [81, 41], [5, 195], [195, 51], [51, 5], [57, 43], [43, 61], [61, 57], [208, 171], [171, 199], [199, 208], [41, 81], [81, 38], [38, 41], [224, 53], [53, 225], [225, 224], [24, 144], [144, 110], [110, 24], [105, 52], [52, 66], [66, 105], [118, 229], [229, 117], [117, 118], [227, 34], [34, 234], [234, 227], [66, 107], [107, 69], [69, 66], [10, 109], [109, 151], [151, 10], [219, 48], [48, 235], [235, 219], [183, 62], [62, 191], [191, 183], [142, 129], [129, 126], [126, 142], [116, 111], [111, 143], [143, 116], [118, 117], [117, 50], [50, 118], [223, 222], [222, 52], [52, 223], [94, 19], [19, 141], [141, 94], [222, 221], [221, 65], [65, 222], [196, 3], [3, 197], [197, 196], [45, 220], [220, 44], [44, 45], [156, 70], [70, 139], [139, 156], [188, 122], [122, 245], [245, 188], [139, 71], [71, 162], [162, 139], [149, 170], [170, 150], [150, 149], [122, 188], [188, 196], [196, 122], [206, 216], [216, 92], [92, 206], [164, 2], [2, 167], [167, 164], [242, 141], [141, 241], [241, 242], [0, 164], [164, 37], [37, 0], [11, 72], [72, 12], [12, 11], [12, 38], [38, 13], [13, 12], [70, 63], [63, 71], [71, 70], [31, 226], [226, 111], [111, 31], [36, 101], [101, 205], [205, 36], [203, 206], [206, 165], [165, 203], [126, 209], [209, 217], [217, 126], [98, 165], [165, 97], [97, 98], [237, 220], [220, 218], [218, 237], [237, 239], [239, 241], [241, 237], [210, 214], [214, 169], [169, 210], [140, 171], [171, 32], [32, 140], [241, 125], [125, 237], [237, 241], [179, 86], [86, 178], [178, 179], [180, 85], [85, 179], [179, 180], [181, 84], [84, 180], [180, 181], [182, 83], [83, 181], [181, 182], [194, 201], [201, 182], [182, 194], [177, 137], [137, 132], [132, 177], [184, 76], [76, 183], [183, 184], [185, 61], [61, 184], [184, 185], [186, 57], [57, 185], [185, 186], [216, 212], [212, 186], [186, 216], [192, 214], [214, 187], [187, 192], [139, 34], [34, 156], [156, 139], [218, 79], [79, 237], [237, 218], [147, 123], [123, 177], [177, 147], [45, 44], [44, 4], [4, 45], [208, 201], [201, 32], [32, 208], [98, 64], [64, 129], [129, 98], [192, 213], [213, 138], [138, 192], [235, 59], [59, 219], [219, 235], [141, 242], [242, 97], [97, 141], [97, 2], [2, 141], [141, 97], [240, 75], [75, 235], [235, 240], [229, 24], [24, 228], [228, 229], [31, 25], [25, 226], [226, 31], [230, 23], [23, 229], [229, 230], [231, 22], [22, 230], [230, 231], [232, 26], [26, 231], [231, 232], [233, 112], [112, 232], [232, 233], [244, 189], [189, 243], [243, 244], [189, 221], [221, 190], [190, 189], [222, 28], [28, 221], [221, 222], [223, 27], [27, 222], [222, 223], [224, 29], [29, 223], [223, 224], [225, 30], [30, 224], [224, 225], [113, 247], [247, 225], [225, 113], [99, 60], [60, 240], [240, 99], [213, 147], [147, 215], [215, 213], [60, 20], [20, 166], [166, 60], [192, 187], [187, 213], [213, 192], [243, 112], [112, 244], [244, 243], [244, 233], [233, 245], [245, 244], [245, 128], [128, 188], [188, 245], [188, 114], [114, 174], [174, 188], [134, 131], [131, 220], [220, 134], [174, 217], [217, 236], [236, 174], [236, 198], [198, 134], [134, 236], [215, 177], [177, 58], [58, 215], [156, 143], [143, 124], [124, 156], [25, 110], [110, 7], [7, 25], [31, 228], [228, 25], [25, 31], [264, 356], [356, 368], [368, 264], [0, 11], [11, 267], [267, 0], [451, 452], [452, 349], [349, 451], [267, 302], [302, 269], [269, 267], [350, 357], [357, 277], [277, 350], [350, 452], [452, 357], [357, 350], [299, 333], [333, 297], [297, 299], [396, 175], [175, 377], [377, 396], [280, 347], [347, 330], [330, 280], [269, 303], [303, 270], [270, 269], [151, 9], [9, 337], [337, 151], [344, 278], [278, 360], [360, 344], [424, 418], [418, 431], [431, 424], [270, 304], [304, 409], [409, 270], [272, 310], [310, 407], [407, 272], [322, 270], [270, 410], [410, 322], [449, 450], [450, 347], [347, 449], [432, 422], [422, 434], [434, 432], [18, 313], [313, 17], [17, 18], [291, 306], [306, 375], [375, 291], [259, 387], [387, 260], [260, 259], [424, 335], [335, 418], [418, 424], [434, 364], [364, 416], [416, 434], [391, 423], [423, 327], [327, 391], [301, 251], [251, 298], [298, 301], [275, 281], [281, 4], [4, 275], [254, 373], [373, 253], [253, 254], [375, 307], [307, 321], [321, 375], [280, 425], [425, 411], [411, 280], [200, 421], [421, 18], [18, 200], [335, 321], [321, 406], [406, 335], [321, 320], [320, 405], [405, 321], [314, 315], [315, 17], [17, 314], [423, 426], [426, 266], [266, 423], [396, 377], [377, 369], [369, 396], [270, 322], [322, 269], [269, 270], [413, 417], [417, 464], [464, 413], [385, 386], [386, 258], [258, 385], [248, 456], [456, 419], [419, 248], [298, 284], [284, 333], [333, 298], [168, 417], [417, 8], [8, 168], [448, 346], [346, 261], [261, 448], [417, 413], [413, 285], [285, 417], [326, 327], [327, 328], [328, 326], [277, 355], [355, 329], [329, 277], [309, 392], [392, 438], [438, 309], [381, 382], [382, 256], [256, 381], [279, 429], [429, 360], [360, 279], [365, 364], [364, 379], [379, 365], [355, 277], [277, 437], [437, 355], [282, 443], [443, 283], [283, 282], [281, 275], [275, 363], [363, 281], [395, 431], [431, 369], [369, 395], [299, 297], [297, 337], [337, 299], [335, 273], [273, 321], [321, 335], [348, 450], [450, 349], [349, 348], [359, 446], [446, 467], [467, 359], [283, 293], [293, 282], [282, 283], [250, 458], [458, 462], [462, 250], [300, 276], [276, 383], [383, 300], [292, 308], [308, 325], [325, 292], [283, 276], [276, 293], [293, 283], [264, 372], [372, 447], [447, 264], [346, 352], [352, 340], [340, 346], [354, 274], [274, 19], [19, 354], [363, 456], [456, 281], [281, 363], [426, 436], [436, 425], [425, 426], [380, 381], [381, 252], [252, 380], [267, 269], [269, 393], [393, 267], [421, 200], [200, 428], [428, 421], [371, 266], [266, 329], [329, 371], [432, 287], [287, 422], [422, 432], [290, 250], [250, 328], [328, 290], [385, 258], [258, 384], [384, 385], [446, 265], [265, 342], [342, 446], [386, 387], [387, 257], [257, 386], [422, 424], [424, 430], [430, 422], [445, 342], [342, 276], [276, 445], [422, 273], [273, 424], [424, 422], [306, 292], [292, 307], [307, 306], [352, 366], [366, 345], [345, 352], [268, 271], [271, 302], [302, 268], [358, 423], [423, 371], [371, 358], [327, 294], [294, 460], [460, 327], [331, 279], [279, 294], [294, 331], [303, 271], [271, 304], [304, 303], [436, 432], [432, 427], [427, 436], [304, 272], [272, 408], [408, 304], [395, 394], [394, 431], [431, 395], [378, 395], [395, 400], [400, 378], [296, 334], [334, 299], [299, 296], [6, 351], [351, 168], [168, 6], [376, 352], [352, 411], [411, 376], [307, 325], [325, 320], [320, 307], [285, 295], [295, 336], [336, 285], [320, 319], [319, 404], [404, 320], [329, 330], [330, 349], [349, 329], [334, 293], [293, 333], [333, 334], [366, 323], [323, 447], [447, 366], [316, 15], [15, 315], [315, 316], [331, 358], [358, 279], [279, 331], [317, 14], [14, 316], [316, 317], [8, 285], [285, 9], [9, 8], [277, 329], [329, 350], [350, 277], [253, 374], [374, 252], [252, 253], [319, 318], [318, 403], [403, 319], [351, 6], [6, 419], [419, 351], [324, 318], [318, 325], [325, 324], [397, 367], [367, 365], [365, 397], [288, 435], [435, 397], [397, 288], [278, 344], [344, 439], [439, 278], [310, 272], [272, 311], [311, 310], [248, 195], [195, 281], [281, 248], [375, 273], [273, 291], [291, 375], [175, 396], [396, 199], [199, 175], [312, 311], [311, 268], [268, 312], [276, 283], [283, 445], [445, 276], [390, 373], [373, 339], [339, 390], [295, 282], [282, 296], [296, 295], [448, 449], [449, 346], [346, 448], [356, 264], [264, 454], [454, 356], [337, 336], [336, 299], [299, 337], [337, 338], [338, 151], [151, 337], [294, 278], [278, 455], [455, 294], [308, 292], [292, 415], [415, 308], [429, 358], [358, 355], [355, 429], [265, 340], [340, 372], [372, 265], [352, 346], [346, 280], [280, 352], [295, 442], [442, 282], [282, 295], [354, 19], [19, 370], [370, 354], [285, 441], [441, 295], [295, 285], [195, 248], [248, 197], [197, 195], [457, 440], [440, 274], [274, 457], [301, 300], [300, 368], [368, 301], [417, 351], [351, 465], [465, 417], [251, 301], [301, 389], [389, 251], [394, 395], [395, 379], [379, 394], [399, 412], [412, 419], [419, 399], [410, 436], [436, 322], [322, 410], [326, 2], [2, 393], [393, 326], [354, 370], [370, 461], [461, 354], [393, 164], [164, 267], [267, 393], [268, 302], [302, 12], [12, 268], [312, 268], [268, 13], [13, 312], [298, 293], [293, 301], [301, 298], [265, 446], [446, 340], [340, 265], [280, 330], [330, 425], [425, 280], [322, 426], [426, 391], [391, 322], [420, 429], [429, 437], [437, 420], [393, 391], [391, 326], [326, 393], [344, 440], [440, 438], [438, 344], [458, 459], [459, 461], [461, 458], [364, 434], [434, 394], [394, 364], [428, 396], [396, 262], [262, 428], [274, 354], [354, 457], [457, 274], [317, 316], [316, 402], [402, 317], [316, 315], [315, 403], [403, 316], [315, 314], [314, 404], [404, 315], [314, 313], [313, 405], [405, 314], [313, 421], [421, 406], [406, 313], [323, 366], [366, 361], [361, 323], [292, 306], [306, 407], [407, 292], [306, 291], [291, 408], [408, 306], [291, 287], [287, 409], [409, 291], [287, 432], [432, 410], [410, 287], [427, 434], [434, 411], [411, 427], [372, 264], [264, 383], [383, 372], [459, 309], [309, 457], [457, 459], [366, 352], [352, 401], [401, 366], [1, 274], [274, 4], [4, 1], [418, 421], [421, 262], [262, 418], [331, 294], [294, 358], [358, 331], [435, 433], [433, 367], [367, 435], [392, 289], [289, 439], [439, 392], [328, 462], [462, 326], [326, 328], [94, 2], [2, 370], [370, 94], [289, 305], [305, 455], [455, 289], [339, 254], [254, 448], [448, 339], [359, 255], [255, 446], [446, 359], [254, 253], [253, 449], [449, 254], [253, 252], [252, 450], [450, 253], [252, 256], [256, 451], [451, 252], [256, 341], [341, 452], [452, 256], [414, 413], [413, 463], [463, 414], [286, 441], [441, 414], [414, 286], [286, 258], [258, 441], [441, 286], [258, 257], [257, 442], [442, 258], [257, 259], [259, 443], [443, 257], [259, 260], [260, 444], [444, 259], [260, 467], [467, 445], [445, 260], [309, 459], [459, 250], [250, 309], [305, 289], [289, 290], [290, 305], [305, 290], [290, 460], [460, 305], [401, 376], [376, 435], [435, 401], [309, 250], [250, 392], [392, 309], [376, 411], [411, 433], [433, 376], [453, 341], [341, 464], [464, 453], [357, 453], [453, 465], [465, 357], [343, 357], [357, 412], [412, 343], [437, 343], [343, 399], [399, 437], [344, 360], [360, 440], [440, 344], [420, 437], [437, 456], [456, 420], [360, 420], [420, 363], [363, 360], [361, 401], [401, 288], [288, 361], [265, 372], [372, 353], [353, 265], [390, 339], [339, 249], [249, 390], [339, 448], [448, 255], [255, 339]); 25449 Sc = class extends dc { 25450 constructor(t3, e3) { 25451 super(new ac(t3, e3), "image_in", "norm_rect", false), this.j = { faceLandmarks: [], faceBlendshapes: [], facialTransformationMatrixes: [] }, this.outputFacialTransformationMatrixes = this.outputFaceBlendshapes = false, wn(t3 = this.h = new Js(), 0, 1, e3 = new Xs()), this.A = new $s(), wn(this.h, 0, 3, this.A), this.u = new zs(), wn(this.h, 0, 2, this.u), xn(this.u, 4, 1), Ln(this.u, 2, 0.5), Ln(this.A, 2, 0.5), Ln(this.h, 4, 0.5); 25452 } 25453 get baseOptions() { 25454 return yn(this.h, Xs, 1); 25455 } 25456 set baseOptions(t3) { 25457 wn(this.h, 0, 1, t3); 25458 } 25459 o(t3) { 25460 return "numFaces" in t3 && xn(this.u, 4, t3.numFaces ?? 1), "minFaceDetectionConfidence" in t3 && Ln(this.u, 2, t3.minFaceDetectionConfidence ?? 0.5), "minTrackingConfidence" in t3 && Ln(this.h, 4, t3.minTrackingConfidence ?? 0.5), "minFacePresenceConfidence" in t3 && Ln(this.A, 2, t3.minFacePresenceConfidence ?? 0.5), "outputFaceBlendshapes" in t3 && (this.outputFaceBlendshapes = !!t3.outputFaceBlendshapes), "outputFacialTransformationMatrixes" in t3 && (this.outputFacialTransformationMatrixes = !!t3.outputFacialTransformationMatrixes), this.l(t3); 25461 } 25462 F(t3, e3) { 25463 return kc(this), uc(this, t3, e3), this.j; 25464 } 25465 G(t3, e3, n3) { 25466 return kc(this), lc(this, t3, n3, e3), this.j; 25467 } 25468 m() { 25469 var t3 = new ls(); 25470 hs(t3, "image_in"), hs(t3, "norm_rect"), us(t3, "face_landmarks"); 25471 const e3 = new Qi(); 25472 xr(e3, Qs, this.h); 25473 const n3 = new is(); 25474 Rn(n3, 2, "mediapipe.tasks.vision.face_landmarker.FaceLandmarkerGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "NORM_LANDMARKS:face_landmarks"), n3.o(e3), cs(t3, n3), this.g.attachProtoVectorListener("face_landmarks", ((t4, e4) => { 25475 for (const e5 of t4) t4 = ks(e5), this.j.faceLandmarks.push(Ho(t4)); 25476 ua(this, e4); 25477 })), this.g.attachEmptyPacketListener("face_landmarks", ((t4) => { 25478 ua(this, t4); 25479 })), this.outputFaceBlendshapes && (us(t3, "blendshapes"), rs(n3, "BLENDSHAPES:blendshapes"), this.g.attachProtoVectorListener("blendshapes", ((t4, e4) => { 25480 if (this.outputFaceBlendshapes) for (const e5 of t4) t4 = ys(e5), this.j.faceBlendshapes.push(jo(t4.g() ?? [])); 25481 ua(this, e4); 25482 })), this.g.attachEmptyPacketListener("blendshapes", ((t4) => { 25483 ua(this, t4); 25484 }))), this.outputFacialTransformationMatrixes && (us(t3, "face_geometry"), rs(n3, "FACE_GEOMETRY:face_geometry"), this.g.attachProtoVectorListener("face_geometry", ((t4, e4) => { 25485 if (this.outputFacialTransformationMatrixes) for (const e5 of t4) (t4 = yn(t4 = qs(e5), Ss, 2)) && this.j.facialTransformationMatrixes.push({ rows: kn(t4, 1) ?? 0 ?? 0, columns: kn(t4, 2) ?? 0 ?? 0, data: en(t4, 3, $t, tn()).slice() ?? [] }); 25486 ua(this, e4); 25487 })), this.g.attachEmptyPacketListener("face_geometry", ((t4) => { 25488 ua(this, t4); 25489 }))), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25490 } 25491 }; 25492 Sc.prototype.detectForVideo = Sc.prototype.G, Sc.prototype.detect = Sc.prototype.F, Sc.prototype.setOptions = Sc.prototype.o, Sc.createFromModelPath = function(t3, e3) { 25493 return cc(Sc, t3, { baseOptions: { modelAssetPath: e3 } }); 25494 }, Sc.createFromModelBuffer = function(t3, e3) { 25495 return cc(Sc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25496 }, Sc.createFromOptions = function(t3, e3) { 25497 return cc(Sc, t3, e3); 25498 }, Sc.FACE_LANDMARKS_LIPS = gc, Sc.FACE_LANDMARKS_LEFT_EYE = mc, Sc.FACE_LANDMARKS_LEFT_EYEBROW = yc, Sc.FACE_LANDMARKS_LEFT_IRIS = _c, Sc.FACE_LANDMARKS_RIGHT_EYE = vc, Sc.FACE_LANDMARKS_RIGHT_EYEBROW = Ec, Sc.FACE_LANDMARKS_RIGHT_IRIS = wc, Sc.FACE_LANDMARKS_FACE_OVAL = Tc, Sc.FACE_LANDMARKS_CONTOURS = Ac, Sc.FACE_LANDMARKS_TESSELATION = bc; 25499 xc = ic([0, 1], [1, 2], [2, 3], [3, 4], [0, 5], [5, 6], [6, 7], [7, 8], [5, 9], [9, 10], [10, 11], [11, 12], [9, 13], [13, 14], [14, 15], [15, 16], [13, 17], [0, 17], [17, 18], [18, 19], [19, 20]); 25500 Fc = class extends dc { 25501 constructor(t3, e3) { 25502 super(new ac(t3, e3), "image_in", "norm_rect", false), this.gestures = [], this.landmarks = [], this.worldLandmarks = [], this.handedness = [], wn(t3 = this.j = new oo(), 0, 1, e3 = new Xs()), this.u = new so(), wn(this.j, 0, 2, this.u), this.D = new io(), wn(this.u, 0, 3, this.D), this.A = new ro(), wn(this.u, 0, 2, this.A), this.h = new no(), wn(this.j, 0, 3, this.h), Ln(this.A, 2, 0.5), Ln(this.u, 4, 0.5), Ln(this.D, 2, 0.5); 25503 } 25504 get baseOptions() { 25505 return yn(this.j, Xs, 1); 25506 } 25507 set baseOptions(t3) { 25508 wn(this.j, 0, 1, t3); 25509 } 25510 o(t3) { 25511 if (xn(this.A, 3, t3.numHands ?? 1), "minHandDetectionConfidence" in t3 && Ln(this.A, 2, t3.minHandDetectionConfidence ?? 0.5), "minTrackingConfidence" in t3 && Ln(this.u, 4, t3.minTrackingConfidence ?? 0.5), "minHandPresenceConfidence" in t3 && Ln(this.D, 2, t3.minHandPresenceConfidence ?? 0.5), t3.cannedGesturesClassifierOptions) { 25512 var e3 = new to(), n3 = e3, r3 = Bo(t3.cannedGesturesClassifierOptions, yn(this.h, to, 3)?.l()); 25513 wn(n3, 0, 2, r3), wn(this.h, 0, 3, e3); 25514 } else void 0 === t3.cannedGesturesClassifierOptions && yn(this.h, to, 3)?.g(); 25515 return t3.customGesturesClassifierOptions ? (wn(n3 = e3 = new to(), 0, 2, r3 = Bo(t3.customGesturesClassifierOptions, yn(this.h, to, 4)?.l())), wn(this.h, 0, 4, e3)) : void 0 === t3.customGesturesClassifierOptions && yn(this.h, to, 4)?.g(), this.l(t3); 25516 } 25517 Ha(t3, e3) { 25518 return Lc(this), uc(this, t3, e3), Rc(this); 25519 } 25520 Ia(t3, e3, n3) { 25521 return Lc(this), lc(this, t3, n3, e3), Rc(this); 25522 } 25523 m() { 25524 var t3 = new ls(); 25525 hs(t3, "image_in"), hs(t3, "norm_rect"), us(t3, "hand_gestures"), us(t3, "hand_landmarks"), us(t3, "world_hand_landmarks"), us(t3, "handedness"); 25526 const e3 = new Qi(); 25527 xr(e3, lo, this.j); 25528 const n3 = new is(); 25529 Rn(n3, 2, "mediapipe.tasks.vision.gesture_recognizer.GestureRecognizerGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "HAND_GESTURES:hand_gestures"), rs(n3, "LANDMARKS:hand_landmarks"), rs(n3, "WORLD_LANDMARKS:world_hand_landmarks"), rs(n3, "HANDEDNESS:handedness"), n3.o(e3), cs(t3, n3), this.g.attachProtoVectorListener("hand_landmarks", ((t4, e4) => { 25530 for (const e5 of t4) { 25531 t4 = ks(e5); 25532 const n4 = []; 25533 for (const e6 of vn(t4, bs, 1)) n4.push({ x: Sn(e6, 1) ?? 0, y: Sn(e6, 2) ?? 0, z: Sn(e6, 3) ?? 0, visibility: Sn(e6, 4) ?? 0 }); 25534 this.landmarks.push(n4); 25535 } 25536 ua(this, e4); 25537 })), this.g.attachEmptyPacketListener("hand_landmarks", ((t4) => { 25538 ua(this, t4); 25539 })), this.g.attachProtoVectorListener("world_hand_landmarks", ((t4, e4) => { 25540 for (const e5 of t4) { 25541 t4 = As(e5); 25542 const n4 = []; 25543 for (const e6 of vn(t4, Ts, 1)) n4.push({ x: Sn(e6, 1) ?? 0, y: Sn(e6, 2) ?? 0, z: Sn(e6, 3) ?? 0, visibility: Sn(e6, 4) ?? 0 }); 25544 this.worldLandmarks.push(n4); 25545 } 25546 ua(this, e4); 25547 })), this.g.attachEmptyPacketListener("world_hand_landmarks", ((t4) => { 25548 ua(this, t4); 25549 })), this.g.attachProtoVectorListener("hand_gestures", ((t4, e4) => { 25550 this.gestures.push(...Ic(t4, false)), ua(this, e4); 25551 })), this.g.attachEmptyPacketListener("hand_gestures", ((t4) => { 25552 ua(this, t4); 25553 })), this.g.attachProtoVectorListener("handedness", ((t4, e4) => { 25554 this.handedness.push(...Ic(t4)), ua(this, e4); 25555 })), this.g.attachEmptyPacketListener("handedness", ((t4) => { 25556 ua(this, t4); 25557 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25558 } 25559 }; 25560 Fc.prototype.recognizeForVideo = Fc.prototype.Ia, Fc.prototype.recognize = Fc.prototype.Ha, Fc.prototype.setOptions = Fc.prototype.o, Fc.createFromModelPath = function(t3, e3) { 25561 return cc(Fc, t3, { baseOptions: { modelAssetPath: e3 } }); 25562 }, Fc.createFromModelBuffer = function(t3, e3) { 25563 return cc(Fc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25564 }, Fc.createFromOptions = function(t3, e3) { 25565 return cc(Fc, t3, e3); 25566 }, Fc.HAND_CONNECTIONS = xc; 25567 Pc = class extends dc { 25568 constructor(t3, e3) { 25569 super(new ac(t3, e3), "image_in", "norm_rect", false), this.landmarks = [], this.worldLandmarks = [], this.handedness = [], wn(t3 = this.h = new so(), 0, 1, e3 = new Xs()), this.u = new io(), wn(this.h, 0, 3, this.u), this.j = new ro(), wn(this.h, 0, 2, this.j), xn(this.j, 3, 1), Ln(this.j, 2, 0.5), Ln(this.u, 2, 0.5), Ln(this.h, 4, 0.5); 25570 } 25571 get baseOptions() { 25572 return yn(this.h, Xs, 1); 25573 } 25574 set baseOptions(t3) { 25575 wn(this.h, 0, 1, t3); 25576 } 25577 o(t3) { 25578 return "numHands" in t3 && xn(this.j, 3, t3.numHands ?? 1), "minHandDetectionConfidence" in t3 && Ln(this.j, 2, t3.minHandDetectionConfidence ?? 0.5), "minTrackingConfidence" in t3 && Ln(this.h, 4, t3.minTrackingConfidence ?? 0.5), "minHandPresenceConfidence" in t3 && Ln(this.u, 2, t3.minHandPresenceConfidence ?? 0.5), this.l(t3); 25579 } 25580 F(t3, e3) { 25581 return this.landmarks = [], this.worldLandmarks = [], this.handedness = [], uc(this, t3, e3), Mc(this); 25582 } 25583 G(t3, e3, n3) { 25584 return this.landmarks = [], this.worldLandmarks = [], this.handedness = [], lc(this, t3, n3, e3), Mc(this); 25585 } 25586 m() { 25587 var t3 = new ls(); 25588 hs(t3, "image_in"), hs(t3, "norm_rect"), us(t3, "hand_landmarks"), us(t3, "world_hand_landmarks"), us(t3, "handedness"); 25589 const e3 = new Qi(); 25590 xr(e3, fo, this.h); 25591 const n3 = new is(); 25592 Rn(n3, 2, "mediapipe.tasks.vision.hand_landmarker.HandLandmarkerGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "LANDMARKS:hand_landmarks"), rs(n3, "WORLD_LANDMARKS:world_hand_landmarks"), rs(n3, "HANDEDNESS:handedness"), n3.o(e3), cs(t3, n3), this.g.attachProtoVectorListener("hand_landmarks", ((t4, e4) => { 25593 for (const e5 of t4) t4 = ks(e5), this.landmarks.push(Ho(t4)); 25594 ua(this, e4); 25595 })), this.g.attachEmptyPacketListener("hand_landmarks", ((t4) => { 25596 ua(this, t4); 25597 })), this.g.attachProtoVectorListener("world_hand_landmarks", ((t4, e4) => { 25598 for (const e5 of t4) t4 = As(e5), this.worldLandmarks.push(Wo(t4)); 25599 ua(this, e4); 25600 })), this.g.attachEmptyPacketListener("world_hand_landmarks", ((t4) => { 25601 ua(this, t4); 25602 })), this.g.attachProtoVectorListener("handedness", ((t4, e4) => { 25603 var n4 = this.handedness, r3 = n4.push; 25604 const i3 = []; 25605 for (const e5 of t4) { 25606 t4 = ys(e5); 25607 const n5 = []; 25608 for (const e6 of t4.g()) n5.push({ score: Sn(e6, 2) ?? 0, index: kn(e6, 1) ?? 0 ?? -1, categoryName: le($e(e6, 3)) ?? "" ?? "", displayName: le($e(e6, 4)) ?? "" ?? "" }); 25609 i3.push(n5); 25610 } 25611 r3.call(n4, ...i3), ua(this, e4); 25612 })), this.g.attachEmptyPacketListener("handedness", ((t4) => { 25613 ua(this, t4); 25614 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25615 } 25616 }; 25617 Pc.prototype.detectForVideo = Pc.prototype.G, Pc.prototype.detect = Pc.prototype.F, Pc.prototype.setOptions = Pc.prototype.o, Pc.createFromModelPath = function(t3, e3) { 25618 return cc(Pc, t3, { baseOptions: { modelAssetPath: e3 } }); 25619 }, Pc.createFromModelBuffer = function(t3, e3) { 25620 return cc(Pc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25621 }, Pc.createFromOptions = function(t3, e3) { 25622 return cc(Pc, t3, e3); 25623 }, Pc.HAND_CONNECTIONS = xc; 25624 Cc = ic([0, 1], [1, 2], [2, 3], [3, 7], [0, 4], [4, 5], [5, 6], [6, 8], [9, 10], [11, 12], [11, 13], [13, 15], [15, 17], [15, 19], [15, 21], [17, 19], [12, 14], [14, 16], [16, 18], [16, 20], [16, 22], [18, 20], [11, 23], [12, 24], [23, 24], [23, 25], [24, 26], [25, 27], [26, 28], [27, 29], [28, 30], [29, 31], [30, 32], [27, 31], [28, 32]); 25625 Dc = class extends dc { 25626 constructor(t3, e3) { 25627 super(new ac(t3, e3), "input_frames_image", null, false), this.h = { faceLandmarks: [], faceBlendshapes: [], poseLandmarks: [], poseWorldLandmarks: [], poseSegmentationMasks: [], leftHandLandmarks: [], leftHandWorldLandmarks: [], rightHandLandmarks: [], rightHandWorldLandmarks: [] }, this.outputPoseSegmentationMasks = this.outputFaceBlendshapes = false, wn(t3 = this.j = new yo(), 0, 1, e3 = new Xs()), this.I = new io(), wn(this.j, 0, 2, this.I), this.W = new po(), wn(this.j, 0, 3, this.W), this.u = new zs(), wn(this.j, 0, 4, this.u), this.O = new $s(), wn(this.j, 0, 5, this.O), this.A = new go(), wn(this.j, 0, 6, this.A), this.M = new mo(), wn(this.j, 0, 7, this.M), Ln(this.u, 2, 0.5), Ln(this.u, 3, 0.3), Ln(this.O, 2, 0.5), Ln(this.A, 2, 0.5), Ln(this.A, 3, 0.3), Ln(this.M, 2, 0.5), Ln(this.I, 2, 0.5); 25628 } 25629 get baseOptions() { 25630 return yn(this.j, Xs, 1); 25631 } 25632 set baseOptions(t3) { 25633 wn(this.j, 0, 1, t3); 25634 } 25635 o(t3) { 25636 return "minFaceDetectionConfidence" in t3 && Ln(this.u, 2, t3.minFaceDetectionConfidence ?? 0.5), "minFaceSuppressionThreshold" in t3 && Ln(this.u, 3, t3.minFaceSuppressionThreshold ?? 0.3), "minFacePresenceConfidence" in t3 && Ln(this.O, 2, t3.minFacePresenceConfidence ?? 0.5), "outputFaceBlendshapes" in t3 && (this.outputFaceBlendshapes = !!t3.outputFaceBlendshapes), "minPoseDetectionConfidence" in t3 && Ln(this.A, 2, t3.minPoseDetectionConfidence ?? 0.5), "minPoseSuppressionThreshold" in t3 && Ln(this.A, 3, t3.minPoseSuppressionThreshold ?? 0.3), "minPosePresenceConfidence" in t3 && Ln(this.M, 2, t3.minPosePresenceConfidence ?? 0.5), "outputPoseSegmentationMasks" in t3 && (this.outputPoseSegmentationMasks = !!t3.outputPoseSegmentationMasks), "minHandLandmarksConfidence" in t3 && Ln(this.I, 2, t3.minHandLandmarksConfidence ?? 0.5), this.l(t3); 25637 } 25638 F(t3, e3, n3) { 25639 const r3 = "function" != typeof e3 ? e3 : {}; 25640 return this.D = "function" == typeof e3 ? e3 : n3, Oc(this), uc(this, t3, r3), Nc(this); 25641 } 25642 G(t3, e3, n3, r3) { 25643 const i3 = "function" != typeof n3 ? n3 : {}; 25644 return this.D = "function" == typeof n3 ? n3 : r3, Oc(this), lc(this, t3, i3, e3), Nc(this); 25645 } 25646 m() { 25647 var t3 = new ls(); 25648 hs(t3, "input_frames_image"), us(t3, "pose_landmarks"), us(t3, "pose_world_landmarks"), us(t3, "face_landmarks"), us(t3, "left_hand_landmarks"), us(t3, "left_hand_world_landmarks"), us(t3, "right_hand_landmarks"), us(t3, "right_hand_world_landmarks"); 25649 const e3 = new Qi(), n3 = new Bi(); 25650 Rn(n3, 1, "type.googleapis.com/mediapipe.tasks.vision.holistic_landmarker.proto.HolisticLandmarkerGraphOptions"), (function(t4, e4) { 25651 if (null != e4) if (Array.isArray(e4)) Ze(t4, 2, Ie(e4, 0, Me)); 25652 else { 25653 if (!("string" == typeof e4 || e4 instanceof F || x(e4))) throw Error("invalid value in Any.value field: " + e4 + " expected a ByteString, a base64 encoded string, a Uint8Array or a jspb array"); 25654 hn(t4, 2, ht(e4, false), R()); 25655 } 25656 })(n3, this.j.g()); 25657 const r3 = new is(); 25658 Rn(r3, 2, "mediapipe.tasks.vision.holistic_landmarker.HolisticLandmarkerGraph"), bn(r3, 8, Bi, n3), ns(r3, "IMAGE:input_frames_image"), rs(r3, "POSE_LANDMARKS:pose_landmarks"), rs(r3, "POSE_WORLD_LANDMARKS:pose_world_landmarks"), rs(r3, "FACE_LANDMARKS:face_landmarks"), rs(r3, "LEFT_HAND_LANDMARKS:left_hand_landmarks"), rs(r3, "LEFT_HAND_WORLD_LANDMARKS:left_hand_world_landmarks"), rs(r3, "RIGHT_HAND_LANDMARKS:right_hand_landmarks"), rs(r3, "RIGHT_HAND_WORLD_LANDMARKS:right_hand_world_landmarks"), r3.o(e3), cs(t3, r3), la(this, t3), this.g.attachProtoListener("pose_landmarks", ((t4, e4) => { 25659 Uc(t4, this.h.poseLandmarks), ua(this, e4); 25660 })), this.g.attachEmptyPacketListener("pose_landmarks", ((t4) => { 25661 ua(this, t4); 25662 })), this.g.attachProtoListener("pose_world_landmarks", ((t4, e4) => { 25663 var n4 = this.h.poseWorldLandmarks; 25664 t4 = As(t4), n4.push(Wo(t4)), ua(this, e4); 25665 })), this.g.attachEmptyPacketListener("pose_world_landmarks", ((t4) => { 25666 ua(this, t4); 25667 })), this.outputPoseSegmentationMasks && (rs(r3, "POSE_SEGMENTATION_MASK:pose_segmentation_mask"), fa(this, "pose_segmentation_mask"), this.g.Z("pose_segmentation_mask", ((t4, e4) => { 25668 this.h.poseSegmentationMasks = [fc(this, t4, true, !this.D)], ua(this, e4); 25669 })), this.g.attachEmptyPacketListener("pose_segmentation_mask", ((t4) => { 25670 this.h.poseSegmentationMasks = [], ua(this, t4); 25671 }))), this.g.attachProtoListener("face_landmarks", ((t4, e4) => { 25672 Uc(t4, this.h.faceLandmarks), ua(this, e4); 25673 })), this.g.attachEmptyPacketListener("face_landmarks", ((t4) => { 25674 ua(this, t4); 25675 })), this.outputFaceBlendshapes && (us(t3, "extra_blendshapes"), rs(r3, "FACE_BLENDSHAPES:extra_blendshapes"), this.g.attachProtoListener("extra_blendshapes", ((t4, e4) => { 25676 var n4 = this.h.faceBlendshapes; 25677 this.outputFaceBlendshapes && (t4 = ys(t4), n4.push(jo(t4.g() ?? []))), ua(this, e4); 25678 })), this.g.attachEmptyPacketListener("extra_blendshapes", ((t4) => { 25679 ua(this, t4); 25680 }))), this.g.attachProtoListener("left_hand_landmarks", ((t4, e4) => { 25681 Uc(t4, this.h.leftHandLandmarks), ua(this, e4); 25682 })), this.g.attachEmptyPacketListener("left_hand_landmarks", ((t4) => { 25683 ua(this, t4); 25684 })), this.g.attachProtoListener("left_hand_world_landmarks", ((t4, e4) => { 25685 var n4 = this.h.leftHandWorldLandmarks; 25686 t4 = As(t4), n4.push(Wo(t4)), ua(this, e4); 25687 })), this.g.attachEmptyPacketListener("left_hand_world_landmarks", ((t4) => { 25688 ua(this, t4); 25689 })), this.g.attachProtoListener("right_hand_landmarks", ((t4, e4) => { 25690 Uc(t4, this.h.rightHandLandmarks), ua(this, e4); 25691 })), this.g.attachEmptyPacketListener("right_hand_landmarks", ((t4) => { 25692 ua(this, t4); 25693 })), this.g.attachProtoListener("right_hand_world_landmarks", ((t4, e4) => { 25694 var n4 = this.h.rightHandWorldLandmarks; 25695 t4 = As(t4), n4.push(Wo(t4)), ua(this, e4); 25696 })), this.g.attachEmptyPacketListener("right_hand_world_landmarks", ((t4) => { 25697 ua(this, t4); 25698 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25699 } 25700 }; 25701 Dc.prototype.detectForVideo = Dc.prototype.G, Dc.prototype.detect = Dc.prototype.F, Dc.prototype.setOptions = Dc.prototype.o, Dc.createFromModelPath = function(t3, e3) { 25702 return cc(Dc, t3, { baseOptions: { modelAssetPath: e3 } }); 25703 }, Dc.createFromModelBuffer = function(t3, e3) { 25704 return cc(Dc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25705 }, Dc.createFromOptions = function(t3, e3) { 25706 return cc(Dc, t3, e3); 25707 }, Dc.HAND_CONNECTIONS = xc, Dc.POSE_CONNECTIONS = Cc, Dc.FACE_LANDMARKS_LIPS = gc, Dc.FACE_LANDMARKS_LEFT_EYE = mc, Dc.FACE_LANDMARKS_LEFT_EYEBROW = yc, Dc.FACE_LANDMARKS_LEFT_IRIS = _c, Dc.FACE_LANDMARKS_RIGHT_EYE = vc, Dc.FACE_LANDMARKS_RIGHT_EYEBROW = Ec, Dc.FACE_LANDMARKS_RIGHT_IRIS = wc, Dc.FACE_LANDMARKS_FACE_OVAL = Tc, Dc.FACE_LANDMARKS_CONTOURS = Ac, Dc.FACE_LANDMARKS_TESSELATION = bc; 25708 Bc = class extends dc { 25709 constructor(t3, e3) { 25710 super(new ac(t3, e3), "input_image", "norm_rect", true), this.j = { classifications: [] }, wn(t3 = this.h = new Eo(), 0, 1, e3 = new Xs()); 25711 } 25712 get baseOptions() { 25713 return yn(this.h, Xs, 1); 25714 } 25715 set baseOptions(t3) { 25716 wn(this.h, 0, 1, t3); 25717 } 25718 o(t3) { 25719 return wn(this.h, 0, 2, Bo(t3, yn(this.h, Ns, 2))), this.l(t3); 25720 } 25721 sa(t3, e3) { 25722 return this.j = { classifications: [] }, uc(this, t3, e3), this.j; 25723 } 25724 ta(t3, e3, n3) { 25725 return this.j = { classifications: [] }, lc(this, t3, n3, e3), this.j; 25726 } 25727 m() { 25728 var t3 = new ls(); 25729 hs(t3, "input_image"), hs(t3, "norm_rect"), us(t3, "classifications"); 25730 const e3 = new Qi(); 25731 xr(e3, wo, this.h); 25732 const n3 = new is(); 25733 Rn(n3, 2, "mediapipe.tasks.vision.image_classifier.ImageClassifierGraph"), ns(n3, "IMAGE:input_image"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "CLASSIFICATIONS:classifications"), n3.o(e3), cs(t3, n3), this.g.attachProtoListener("classifications", ((t4, e4) => { 25734 this.j = Vo(Is(t4)), ua(this, e4); 25735 })), this.g.attachEmptyPacketListener("classifications", ((t4) => { 25736 ua(this, t4); 25737 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25738 } 25739 }; 25740 Bc.prototype.classifyForVideo = Bc.prototype.ta, Bc.prototype.classify = Bc.prototype.sa, Bc.prototype.setOptions = Bc.prototype.o, Bc.createFromModelPath = function(t3, e3) { 25741 return cc(Bc, t3, { baseOptions: { modelAssetPath: e3 } }); 25742 }, Bc.createFromModelBuffer = function(t3, e3) { 25743 return cc(Bc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25744 }, Bc.createFromOptions = function(t3, e3) { 25745 return cc(Bc, t3, e3); 25746 }; 25747 Gc = class extends dc { 25748 constructor(t3, e3) { 25749 super(new ac(t3, e3), "image_in", "norm_rect", true), this.h = new To(), this.embeddings = { embeddings: [] }, wn(t3 = this.h, 0, 1, e3 = new Xs()); 25750 } 25751 get baseOptions() { 25752 return yn(this.h, Xs, 1); 25753 } 25754 set baseOptions(t3) { 25755 wn(this.h, 0, 1, t3); 25756 } 25757 o(t3) { 25758 var e3 = this.h, n3 = yn(this.h, Ds, 2); 25759 return n3 = n3 ? n3.clone() : new Ds(), void 0 !== t3.l2Normalize ? Ze(n3, 1, Jt(t3.l2Normalize)) : "l2Normalize" in t3 && Ze(n3, 1), void 0 !== t3.quantize ? Ze(n3, 2, Jt(t3.quantize)) : "quantize" in t3 && Ze(n3, 2), wn(e3, 0, 2, n3), this.l(t3); 25760 } 25761 za(t3, e3) { 25762 return uc(this, t3, e3), this.embeddings; 25763 } 25764 Aa(t3, e3, n3) { 25765 return lc(this, t3, n3, e3), this.embeddings; 25766 } 25767 m() { 25768 var t3 = new ls(); 25769 hs(t3, "image_in"), hs(t3, "norm_rect"), us(t3, "embeddings_out"); 25770 const e3 = new Qi(); 25771 xr(e3, Ao, this.h); 25772 const n3 = new is(); 25773 Rn(n3, 2, "mediapipe.tasks.vision.image_embedder.ImageEmbedderGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "EMBEDDINGS:embeddings_out"), n3.o(e3), cs(t3, n3), this.g.attachProtoListener("embeddings_out", ((t4, e4) => { 25774 t4 = Os(t4), this.embeddings = (function(t5) { 25775 return { embeddings: vn(t5, Ps, 1).map(((t6) => { 25776 const e5 = { headIndex: kn(t6, 3) ?? 0 ?? -1, headName: le($e(t6, 4)) ?? "" ?? "" }; 25777 var n4 = t6.v; 25778 return void 0 !== mn(n4, 0 | n4[Q], Fs, ln(t6, 1)) ? (t6 = en(t6 = yn(t6, Fs, ln(t6, 1), void 0), 1, $t, tn()), e5.floatEmbedding = t6.slice()) : (n4 = new Uint8Array(0), e5.quantizedEmbedding = yn(t6, Ms, ln(t6, 2), void 0)?.na()?.h() ?? n4), e5; 25779 })), timestampMs: Go($e(t5, 2, void 0, void 0, ce) ?? Ye) }; 25780 })(t4), ua(this, e4); 25781 })), this.g.attachEmptyPacketListener("embeddings_out", ((t4) => { 25782 ua(this, t4); 25783 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25784 } 25785 }; 25786 Gc.cosineSimilarity = function(t3, e3) { 25787 if (t3.floatEmbedding && e3.floatEmbedding) t3 = Ko(t3.floatEmbedding, e3.floatEmbedding); 25788 else { 25789 if (!t3.quantizedEmbedding || !e3.quantizedEmbedding) throw Error("Cannot compute cosine similarity between quantized and float embeddings."); 25790 t3 = Ko(zo(t3.quantizedEmbedding), zo(e3.quantizedEmbedding)); 25791 } 25792 return t3; 25793 }, Gc.prototype.embedForVideo = Gc.prototype.Aa, Gc.prototype.embed = Gc.prototype.za, Gc.prototype.setOptions = Gc.prototype.o, Gc.createFromModelPath = function(t3, e3) { 25794 return cc(Gc, t3, { baseOptions: { modelAssetPath: e3 } }); 25795 }, Gc.createFromModelBuffer = function(t3, e3) { 25796 return cc(Gc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25797 }, Gc.createFromOptions = function(t3, e3) { 25798 return cc(Gc, t3, e3); 25799 }; 25800 jc = class { 25801 constructor(t3, e3, n3) { 25802 this.confidenceMasks = t3, this.categoryMask = e3, this.qualityScores = n3; 25803 } 25804 close() { 25805 this.confidenceMasks?.forEach(((t3) => { 25806 t3.close(); 25807 })), this.categoryMask?.close(); 25808 } 25809 }; 25810 jc.prototype.close = jc.prototype.close; 25811 Wc = class extends dc { 25812 constructor(t3, e3) { 25813 super(new ac(t3, e3), "image_in", "norm_rect", false), this.u = [], this.outputCategoryMask = false, this.outputConfidenceMasks = true, this.h = new Lo(), this.A = new bo(), wn(this.h, 0, 3, this.A), wn(t3 = this.h, 0, 1, e3 = new Xs()); 25814 } 25815 get baseOptions() { 25816 return yn(this.h, Xs, 1); 25817 } 25818 set baseOptions(t3) { 25819 wn(this.h, 0, 1, t3); 25820 } 25821 o(t3) { 25822 return void 0 !== t3.displayNamesLocale ? Ze(this.h, 2, ue(t3.displayNamesLocale)) : "displayNamesLocale" in t3 && Ze(this.h, 2), "outputCategoryMask" in t3 && (this.outputCategoryMask = t3.outputCategoryMask ?? false), "outputConfidenceMasks" in t3 && (this.outputConfidenceMasks = t3.outputConfidenceMasks ?? true), super.l(t3); 25823 } 25824 L() { 25825 Vc(this); 25826 } 25827 segment(t3, e3, n3) { 25828 const r3 = "function" != typeof e3 ? e3 : {}; 25829 return this.j = "function" == typeof e3 ? e3 : n3, Xc(this), uc(this, t3, r3), Hc(this); 25830 } 25831 La(t3, e3, n3, r3) { 25832 const i3 = "function" != typeof n3 ? n3 : {}; 25833 return this.j = "function" == typeof n3 ? n3 : r3, Xc(this), lc(this, t3, i3, e3), Hc(this); 25834 } 25835 Da() { 25836 return this.u; 25837 } 25838 m() { 25839 var t3 = new ls(); 25840 hs(t3, "image_in"), hs(t3, "norm_rect"); 25841 const e3 = new Qi(); 25842 xr(e3, Ro, this.h); 25843 const n3 = new is(); 25844 Rn(n3, 2, "mediapipe.tasks.vision.image_segmenter.ImageSegmenterGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), n3.o(e3), cs(t3, n3), la(this, t3), this.outputConfidenceMasks && (us(t3, "confidence_masks"), rs(n3, "CONFIDENCE_MASKS:confidence_masks"), fa(this, "confidence_masks"), this.g.aa("confidence_masks", ((t4, e4) => { 25845 this.confidenceMasks = t4.map(((t5) => fc(this, t5, true, !this.j))), ua(this, e4); 25846 })), this.g.attachEmptyPacketListener("confidence_masks", ((t4) => { 25847 this.confidenceMasks = [], ua(this, t4); 25848 }))), this.outputCategoryMask && (us(t3, "category_mask"), rs(n3, "CATEGORY_MASK:category_mask"), fa(this, "category_mask"), this.g.Z("category_mask", ((t4, e4) => { 25849 this.categoryMask = fc(this, t4, false, !this.j), ua(this, e4); 25850 })), this.g.attachEmptyPacketListener("category_mask", ((t4) => { 25851 this.categoryMask = void 0, ua(this, t4); 25852 }))), us(t3, "quality_scores"), rs(n3, "QUALITY_SCORES:quality_scores"), this.g.attachFloatVectorListener("quality_scores", ((t4, e4) => { 25853 this.qualityScores = t4, ua(this, e4); 25854 })), this.g.attachEmptyPacketListener("quality_scores", ((t4) => { 25855 this.categoryMask = void 0, ua(this, t4); 25856 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25857 } 25858 }; 25859 Wc.prototype.getLabels = Wc.prototype.Da, Wc.prototype.segmentForVideo = Wc.prototype.La, Wc.prototype.segment = Wc.prototype.segment, Wc.prototype.setOptions = Wc.prototype.o, Wc.createFromModelPath = function(t3, e3) { 25860 return cc(Wc, t3, { baseOptions: { modelAssetPath: e3 } }); 25861 }, Wc.createFromModelBuffer = function(t3, e3) { 25862 return cc(Wc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25863 }, Wc.createFromOptions = function(t3, e3) { 25864 return cc(Wc, t3, e3); 25865 }; 25866 zc = class { 25867 constructor(t3, e3, n3) { 25868 this.confidenceMasks = t3, this.categoryMask = e3, this.qualityScores = n3; 25869 } 25870 close() { 25871 this.confidenceMasks?.forEach(((t3) => { 25872 t3.close(); 25873 })), this.categoryMask?.close(); 25874 } 25875 }; 25876 zc.prototype.close = zc.prototype.close; 25877 Kc = class extends dc { 25878 constructor(t3, e3) { 25879 super(new ac(t3, e3), "image_in", "norm_rect_in", false), this.outputCategoryMask = false, this.outputConfidenceMasks = true, this.h = new Lo(), this.u = new bo(), wn(this.h, 0, 3, this.u), wn(t3 = this.h, 0, 1, e3 = new Xs()); 25880 } 25881 get baseOptions() { 25882 return yn(this.h, Xs, 1); 25883 } 25884 set baseOptions(t3) { 25885 wn(this.h, 0, 1, t3); 25886 } 25887 o(t3) { 25888 return "outputCategoryMask" in t3 && (this.outputCategoryMask = t3.outputCategoryMask ?? false), "outputConfidenceMasks" in t3 && (this.outputConfidenceMasks = t3.outputConfidenceMasks ?? true), super.l(t3); 25889 } 25890 segment(t3, e3, n3, r3) { 25891 const i3 = "function" != typeof n3 ? n3 : {}; 25892 if (this.j = "function" == typeof n3 ? n3 : r3, this.qualityScores = this.categoryMask = this.confidenceMasks = void 0, n3 = this.C + 1, r3 = new Po(), e3.keypoint && e3.scribble) throw Error("Cannot provide both keypoint and scribble."); 25893 if (e3.keypoint) { 25894 var s3 = new Io(); 25895 hn(s3, 3, Jt(true), false), hn(s3, 1, qt(e3.keypoint.x), 0), hn(s3, 2, qt(e3.keypoint.y), 0), Tn(r3, 1, Co, s3); 25896 } else { 25897 if (!e3.scribble) throw Error("Must provide either a keypoint or a scribble."); 25898 { 25899 const t4 = new Mo(); 25900 for (s3 of e3.scribble) hn(e3 = new Io(), 3, Jt(true), false), hn(e3, 1, qt(s3.x), 0), hn(e3, 2, qt(s3.y), 0), bn(t4, 1, Io, e3); 25901 Tn(r3, 2, Co, t4); 25902 } 25903 } 25904 this.g.addProtoToStream(r3.g(), "mediapipe.tasks.vision.interactive_segmenter.proto.RegionOfInterest", "roi_in", n3), uc(this, t3, i3); 25905 t: { 25906 try { 25907 const t4 = new zc(this.confidenceMasks, this.categoryMask, this.qualityScores); 25908 if (!this.j) { 25909 var o3 = t4; 25910 break t; 25911 } 25912 this.j(t4); 25913 } finally { 25914 da(this); 25915 } 25916 o3 = void 0; 25917 } 25918 return o3; 25919 } 25920 m() { 25921 var t3 = new ls(); 25922 hs(t3, "image_in"), hs(t3, "roi_in"), hs(t3, "norm_rect_in"); 25923 const e3 = new Qi(); 25924 xr(e3, Ro, this.h); 25925 const n3 = new is(); 25926 Rn(n3, 2, "mediapipe.tasks.vision.interactive_segmenter.InteractiveSegmenterGraphV2"), ns(n3, "IMAGE:image_in"), ns(n3, "ROI:roi_in"), ns(n3, "NORM_RECT:norm_rect_in"), n3.o(e3), cs(t3, n3), la(this, t3), this.outputConfidenceMasks && (us(t3, "confidence_masks"), rs(n3, "CONFIDENCE_MASKS:confidence_masks"), fa(this, "confidence_masks"), this.g.aa("confidence_masks", ((t4, e4) => { 25927 this.confidenceMasks = t4.map(((t5) => fc(this, t5, true, !this.j))), ua(this, e4); 25928 })), this.g.attachEmptyPacketListener("confidence_masks", ((t4) => { 25929 this.confidenceMasks = [], ua(this, t4); 25930 }))), this.outputCategoryMask && (us(t3, "category_mask"), rs(n3, "CATEGORY_MASK:category_mask"), fa(this, "category_mask"), this.g.Z("category_mask", ((t4, e4) => { 25931 this.categoryMask = fc(this, t4, false, !this.j), ua(this, e4); 25932 })), this.g.attachEmptyPacketListener("category_mask", ((t4) => { 25933 this.categoryMask = void 0, ua(this, t4); 25934 }))), us(t3, "quality_scores"), rs(n3, "QUALITY_SCORES:quality_scores"), this.g.attachFloatVectorListener("quality_scores", ((t4, e4) => { 25935 this.qualityScores = t4, ua(this, e4); 25936 })), this.g.attachEmptyPacketListener("quality_scores", ((t4) => { 25937 this.categoryMask = void 0, ua(this, t4); 25938 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25939 } 25940 }; 25941 Kc.prototype.segment = Kc.prototype.segment, Kc.prototype.setOptions = Kc.prototype.o, Kc.createFromModelPath = function(t3, e3) { 25942 return cc(Kc, t3, { baseOptions: { modelAssetPath: e3 } }); 25943 }, Kc.createFromModelBuffer = function(t3, e3) { 25944 return cc(Kc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25945 }, Kc.createFromOptions = function(t3, e3) { 25946 return cc(Kc, t3, e3); 25947 }; 25948 Yc = class extends dc { 25949 constructor(t3, e3) { 25950 super(new ac(t3, e3), "input_frame_gpu", "norm_rect", false), this.j = { detections: [] }, wn(t3 = this.h = new Oo(), 0, 1, e3 = new Xs()); 25951 } 25952 get baseOptions() { 25953 return yn(this.h, Xs, 1); 25954 } 25955 set baseOptions(t3) { 25956 wn(this.h, 0, 1, t3); 25957 } 25958 o(t3) { 25959 return void 0 !== t3.displayNamesLocale ? Ze(this.h, 2, ue(t3.displayNamesLocale)) : "displayNamesLocale" in t3 && Ze(this.h, 2), void 0 !== t3.maxResults ? xn(this.h, 3, t3.maxResults) : "maxResults" in t3 && Ze(this.h, 3), void 0 !== t3.scoreThreshold ? Ln(this.h, 4, t3.scoreThreshold) : "scoreThreshold" in t3 && Ze(this.h, 4), void 0 !== t3.categoryAllowlist ? In(this.h, 5, t3.categoryAllowlist) : "categoryAllowlist" in t3 && Ze(this.h, 5), void 0 !== t3.categoryDenylist ? In(this.h, 6, t3.categoryDenylist) : "categoryDenylist" in t3 && Ze(this.h, 6), this.l(t3); 25960 } 25961 F(t3, e3) { 25962 return this.j = { detections: [] }, uc(this, t3, e3), this.j; 25963 } 25964 G(t3, e3, n3) { 25965 return this.j = { detections: [] }, lc(this, t3, n3, e3), this.j; 25966 } 25967 m() { 25968 var t3 = new ls(); 25969 hs(t3, "input_frame_gpu"), hs(t3, "norm_rect"), us(t3, "detections"); 25970 const e3 = new Qi(); 25971 xr(e3, No, this.h); 25972 const n3 = new is(); 25973 Rn(n3, 2, "mediapipe.tasks.vision.ObjectDetectorGraph"), ns(n3, "IMAGE:input_frame_gpu"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "DETECTIONS:detections"), n3.o(e3), cs(t3, n3), this.g.attachProtoVectorListener("detections", ((t4, e4) => { 25974 for (const e5 of t4) t4 = ws(e5), this.j.detections.push(Xo(t4)); 25975 ua(this, e4); 25976 })), this.g.attachEmptyPacketListener("detections", ((t4) => { 25977 ua(this, t4); 25978 })), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 25979 } 25980 }; 25981 Yc.prototype.detectForVideo = Yc.prototype.G, Yc.prototype.detect = Yc.prototype.F, Yc.prototype.setOptions = Yc.prototype.o, Yc.createFromModelPath = async function(t3, e3) { 25982 return cc(Yc, t3, { baseOptions: { modelAssetPath: e3 } }); 25983 }, Yc.createFromModelBuffer = function(t3, e3) { 25984 return cc(Yc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 25985 }, Yc.createFromOptions = function(t3, e3) { 25986 return cc(Yc, t3, e3); 25987 }; 25988 qc = class { 25989 constructor(t3, e3, n3) { 25990 this.landmarks = t3, this.worldLandmarks = e3, this.segmentationMasks = n3; 25991 } 25992 close() { 25993 this.segmentationMasks?.forEach(((t3) => { 25994 t3.close(); 25995 })); 25996 } 25997 }; 25998 qc.prototype.close = qc.prototype.close; 25999 Zc = class extends dc { 26000 constructor(t3, e3) { 26001 super(new ac(t3, e3), "image_in", "norm_rect", false), this.landmarks = [], this.worldLandmarks = [], this.outputSegmentationMasks = false, wn(t3 = this.h = new Uo(), 0, 1, e3 = new Xs()), this.A = new mo(), wn(this.h, 0, 3, this.A), this.j = new go(), wn(this.h, 0, 2, this.j), xn(this.j, 4, 1), Ln(this.j, 2, 0.5), Ln(this.A, 2, 0.5), Ln(this.h, 4, 0.5); 26002 } 26003 get baseOptions() { 26004 return yn(this.h, Xs, 1); 26005 } 26006 set baseOptions(t3) { 26007 wn(this.h, 0, 1, t3); 26008 } 26009 o(t3) { 26010 return "numPoses" in t3 && xn(this.j, 4, t3.numPoses ?? 1), "minPoseDetectionConfidence" in t3 && Ln(this.j, 2, t3.minPoseDetectionConfidence ?? 0.5), "minTrackingConfidence" in t3 && Ln(this.h, 4, t3.minTrackingConfidence ?? 0.5), "minPosePresenceConfidence" in t3 && Ln(this.A, 2, t3.minPosePresenceConfidence ?? 0.5), "outputSegmentationMasks" in t3 && (this.outputSegmentationMasks = t3.outputSegmentationMasks ?? false), this.l(t3); 26011 } 26012 F(t3, e3, n3) { 26013 const r3 = "function" != typeof e3 ? e3 : {}; 26014 return this.u = "function" == typeof e3 ? e3 : n3, $c(this), uc(this, t3, r3), Jc(this); 26015 } 26016 G(t3, e3, n3, r3) { 26017 const i3 = "function" != typeof n3 ? n3 : {}; 26018 return this.u = "function" == typeof n3 ? n3 : r3, $c(this), lc(this, t3, i3, e3), Jc(this); 26019 } 26020 m() { 26021 var t3 = new ls(); 26022 hs(t3, "image_in"), hs(t3, "norm_rect"), us(t3, "normalized_landmarks"), us(t3, "world_landmarks"), us(t3, "segmentation_masks"); 26023 const e3 = new Qi(); 26024 xr(e3, Do, this.h); 26025 const n3 = new is(); 26026 Rn(n3, 2, "mediapipe.tasks.vision.pose_landmarker.PoseLandmarkerGraph"), ns(n3, "IMAGE:image_in"), ns(n3, "NORM_RECT:norm_rect"), rs(n3, "NORM_LANDMARKS:normalized_landmarks"), rs(n3, "WORLD_LANDMARKS:world_landmarks"), n3.o(e3), cs(t3, n3), la(this, t3), this.g.attachProtoVectorListener("normalized_landmarks", ((t4, e4) => { 26027 this.landmarks = []; 26028 for (const e5 of t4) t4 = ks(e5), this.landmarks.push(Ho(t4)); 26029 ua(this, e4); 26030 })), this.g.attachEmptyPacketListener("normalized_landmarks", ((t4) => { 26031 this.landmarks = [], ua(this, t4); 26032 })), this.g.attachProtoVectorListener("world_landmarks", ((t4, e4) => { 26033 this.worldLandmarks = []; 26034 for (const e5 of t4) t4 = As(e5), this.worldLandmarks.push(Wo(t4)); 26035 ua(this, e4); 26036 })), this.g.attachEmptyPacketListener("world_landmarks", ((t4) => { 26037 this.worldLandmarks = [], ua(this, t4); 26038 })), this.outputSegmentationMasks && (rs(n3, "SEGMENTATION_MASK:segmentation_masks"), fa(this, "segmentation_masks"), this.g.aa("segmentation_masks", ((t4, e4) => { 26039 this.segmentationMasks = t4.map(((t5) => fc(this, t5, true, !this.u))), ua(this, e4); 26040 })), this.g.attachEmptyPacketListener("segmentation_masks", ((t4) => { 26041 this.segmentationMasks = [], ua(this, t4); 26042 }))), t3 = t3.g(), this.setGraph(new Uint8Array(t3), true); 26043 } 26044 }; 26045 Zc.prototype.detectForVideo = Zc.prototype.G, Zc.prototype.detect = Zc.prototype.F, Zc.prototype.setOptions = Zc.prototype.o, Zc.createFromModelPath = function(t3, e3) { 26046 return cc(Zc, t3, { baseOptions: { modelAssetPath: e3 } }); 26047 }, Zc.createFromModelBuffer = function(t3, e3) { 26048 return cc(Zc, t3, { baseOptions: { modelAssetBuffer: e3 } }); 26049 }, Zc.createFromOptions = function(t3, e3) { 26050 return cc(Zc, t3, e3); 26051 }, Zc.POSE_CONNECTIONS = Cc; 26052 } 26053}); 26054
vendor: 341,595 bytes, lines 26055-32509
26055// node_modules/@daily-co/daily-js/dist/daily-esm.js 26056var daily_esm_exports = {}; 26057__export(daily_esm_exports, { 26058 DAILY_ACCESS_LEVEL_FULL: () => vi2, 26059 DAILY_ACCESS_LEVEL_LOBBY: () => gi2, 26060 DAILY_ACCESS_LEVEL_NONE: () => mi2, 26061 DAILY_ACCESS_UNKNOWN: () => fi2, 26062 DAILY_CAMERA_ERROR_CAM_AND_MIC_IN_USE: () => Ii2, 26063 DAILY_CAMERA_ERROR_CAM_IN_USE: () => Ai2, 26064 DAILY_CAMERA_ERROR_CONSTRAINTS: () => Ni2, 26065 DAILY_CAMERA_ERROR_MIC_IN_USE: () => ji2, 26066 DAILY_CAMERA_ERROR_NOT_FOUND: () => Di2, 26067 DAILY_CAMERA_ERROR_PERMISSIONS: () => xi2, 26068 DAILY_CAMERA_ERROR_UNDEF_MEDIADEVICES: () => Li2, 26069 DAILY_CAMERA_ERROR_UNKNOWN: () => Ri2, 26070 DAILY_EVENT_ACCESS_STATE_UPDATED: () => Zi2, 26071 DAILY_EVENT_ACTIVE_SPEAKER_CHANGE: () => Eo2, 26072 DAILY_EVENT_ACTIVE_SPEAKER_MODE_CHANGE: () => To2, 26073 DAILY_EVENT_APP_MSG: () => yo2, 26074 DAILY_EVENT_CAMERA_ERROR: () => zi2, 26075 DAILY_EVENT_CPU_LOAD_CHANGE: () => Ao2, 26076 DAILY_EVENT_ERROR: () => Jo2, 26077 DAILY_EVENT_EXIT_FULLSCREEN: () => xo2, 26078 DAILY_EVENT_FACE_COUNTS_UPDATED: () => jo2, 26079 DAILY_EVENT_FULLSCREEN: () => Io2, 26080 DAILY_EVENT_IFRAME_LAUNCH_CONFIG: () => Bi2, 26081 DAILY_EVENT_IFRAME_READY_FOR_LAUNCH_CONFIG: () => Fi2, 26082 DAILY_EVENT_INPUT_SETTINGS_UPDATED: () => Uo2, 26083 DAILY_EVENT_JOINED_MEETING: () => Hi2, 26084 DAILY_EVENT_JOINING_MEETING: () => Wi2, 26085 DAILY_EVENT_LANG_UPDATED: () => Fo2, 26086 DAILY_EVENT_LEFT_MEETING: () => Gi2, 26087 DAILY_EVENT_LIVE_STREAMING_ERROR: () => Ro2, 26088 DAILY_EVENT_LIVE_STREAMING_STARTED: () => Lo2, 26089 DAILY_EVENT_LIVE_STREAMING_STOPPED: () => No2, 26090 DAILY_EVENT_LIVE_STREAMING_UPDATED: () => Do2, 26091 DAILY_EVENT_LOADED: () => $i2, 26092 DAILY_EVENT_LOADING: () => Vi2, 26093 DAILY_EVENT_LOAD_ATTEMPT_FAILED: () => Ji2, 26094 DAILY_EVENT_LOCAL_SCREEN_SHARE_CANCELED: () => Co2, 26095 DAILY_EVENT_LOCAL_SCREEN_SHARE_STARTED: () => ko2, 26096 DAILY_EVENT_LOCAL_SCREEN_SHARE_STOPPED: () => Mo2, 26097 DAILY_EVENT_MEETING_SESSION_DATA_ERROR: () => no2, 26098 DAILY_EVENT_MEETING_SESSION_STATE_UPDATED: () => to2, 26099 DAILY_EVENT_MEETING_SESSION_SUMMARY_UPDATED: () => eo2, 26100 DAILY_EVENT_NETWORK_CONNECTION: () => Po2, 26101 DAILY_EVENT_NETWORK_QUALITY_CHANGE: () => Oo2, 26102 DAILY_EVENT_NONFATAL_ERROR: () => Vo2, 26103 DAILY_EVENT_PARTICIPANT_COUNTS_UPDATED: () => Xi2, 26104 DAILY_EVENT_PARTICIPANT_JOINED: () => Qi2, 26105 DAILY_EVENT_PARTICIPANT_LEFT: () => Yi2, 26106 DAILY_EVENT_PARTICIPANT_UPDATED: () => Ki2, 26107 DAILY_EVENT_RECEIVE_SETTINGS_UPDATED: () => Bo2, 26108 DAILY_EVENT_RECORDING_DATA: () => mo2, 26109 DAILY_EVENT_RECORDING_ERROR: () => vo2, 26110 DAILY_EVENT_RECORDING_STARTED: () => po2, 26111 DAILY_EVENT_RECORDING_STATS: () => fo2, 26112 DAILY_EVENT_RECORDING_STOPPED: () => ho2, 26113 DAILY_EVENT_RECORDING_UPLOAD_COMPLETED: () => go2, 26114 DAILY_EVENT_REMOTE_MEDIA_PLAYER_STARTED: () => _o2, 26115 DAILY_EVENT_REMOTE_MEDIA_PLAYER_STOPPED: () => So2, 26116 DAILY_EVENT_REMOTE_MEDIA_PLAYER_UPDATED: () => wo2, 26117 DAILY_EVENT_STARTED_CAMERA: () => qi2, 26118 DAILY_EVENT_THEME_UPDATED: () => Ui2, 26119 DAILY_EVENT_TRACK_STARTED: () => so2, 26120 DAILY_EVENT_TRACK_STOPPED: () => ao2, 26121 DAILY_EVENT_TRANSCRIPTION_ERROR: () => uo2, 26122 DAILY_EVENT_TRANSCRIPTION_MSG: () => bo2, 26123 DAILY_EVENT_TRANSCRIPTION_STARTED: () => co2, 26124 DAILY_EVENT_TRANSCRIPTION_STOPPED: () => lo2, 26125 DAILY_EVENT_WAITING_PARTICIPANT_ADDED: () => ro2, 26126 DAILY_EVENT_WAITING_PARTICIPANT_REMOVED: () => oo2, 26127 DAILY_EVENT_WAITING_PARTICIPANT_UPDATED: () => io2, 26128 DAILY_FATAL_ERROR_CONNECTION: () => Pi2, 26129 DAILY_FATAL_ERROR_EJECTED: () => _i2, 26130 DAILY_FATAL_ERROR_EOL: () => Ti2, 26131 DAILY_FATAL_ERROR_EXP_ROOM: () => ki2, 26132 DAILY_FATAL_ERROR_EXP_TOKEN: () => Mi2, 26133 DAILY_FATAL_ERROR_MEETING_FULL: () => Ei2, 26134 DAILY_FATAL_ERROR_NBF_ROOM: () => wi2, 26135 DAILY_FATAL_ERROR_NBF_TOKEN: () => Si2, 26136 DAILY_FATAL_ERROR_NOT_ALLOWED: () => Oi2, 26137 DAILY_FATAL_ERROR_NO_ROOM: () => Ci2, 26138 DAILY_RECEIVE_SETTINGS_ALL_PARTICIPANTS_KEY: () => bi2, 26139 DAILY_RECEIVE_SETTINGS_BASE_KEY: () => yi2, 26140 DAILY_STATE_ERROR: () => ai2, 26141 DAILY_STATE_JOINED: () => oi2, 26142 DAILY_STATE_JOINING: () => ii2, 26143 DAILY_STATE_LEFT: () => si2, 26144 DAILY_STATE_NEW: () => ti2, 26145 DAILY_TRACK_STATE_BLOCKED: () => ci2, 26146 DAILY_TRACK_STATE_INTERRUPTED: () => pi2, 26147 DAILY_TRACK_STATE_LOADING: () => di2, 26148 DAILY_TRACK_STATE_OFF: () => li2, 26149 DAILY_TRACK_STATE_PLAYABLE: () => hi2, 26150 DAILY_TRACK_STATE_SENDABLE: () => ui2, 26151 default: () => Ha2 26152}); 26153function e2(e3, t3) { 26154 if (null == e3) return {}; 26155 var n3, r3, i3 = (function(e4, t4) { 26156 if (null == e4) return {}; 26157 var n4 = {}; 26158 for (var r4 in e4) if ({}.hasOwnProperty.call(e4, r4)) { 26159 if (-1 !== t4.indexOf(r4)) continue; 26160 n4[r4] = e4[r4]; 26161 } 26162 return n4; 26163 })(e3, t3); 26164 if (Object.getOwnPropertySymbols) { 26165 var o3 = Object.getOwnPropertySymbols(e3); 26166 for (r3 = 0; r3 < o3.length; r3++) n3 = o3[r3], -1 === t3.indexOf(n3) && {}.propertyIsEnumerable.call(e3, n3) && (i3[n3] = e3[n3]); 26167 } 26168 return i3; 26169} 26170function t2(e3, t3) { 26171 if (!(e3 instanceof t3)) throw new TypeError("Cannot call a class as a function"); 26172} 26173function n2(e3) { 26174 return n2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e4) { 26175 return typeof e4; 26176 } : function(e4) { 26177 return e4 && "function" == typeof Symbol && e4.constructor === Symbol && e4 !== Symbol.prototype ? "symbol" : typeof e4; 26178 }, n2(e3); 26179} 26180function r2(e3) { 26181 var t3 = (function(e4, t4) { 26182 if ("object" != n2(e4) || !e4) return e4; 26183 var r3 = e4[Symbol.toPrimitive]; 26184 if (void 0 !== r3) { 26185 var i3 = r3.call(e4, t4 || "default"); 26186 if ("object" != n2(i3)) return i3; 26187 throw new TypeError("@@toPrimitive must return a primitive value."); 26188 } 26189 return ("string" === t4 ? String : Number)(e4); 26190 })(e3, "string"); 26191 return "symbol" == n2(t3) ? t3 : t3 + ""; 26192} 26193function i2(e3, t3) { 26194 for (var n3 = 0; n3 < t3.length; n3++) { 26195 var i3 = t3[n3]; 26196 i3.enumerable = i3.enumerable || false, i3.configurable = true, "value" in i3 && (i3.writable = true), Object.defineProperty(e3, r2(i3.key), i3); 26197 } 26198} 26199function o2(e3, t3, n3) { 26200 return t3 && i2(e3.prototype, t3), n3 && i2(e3, n3), Object.defineProperty(e3, "prototype", { writable: false }), e3; 26201} 26202function s2(e3, t3) { 26203 if (t3 && ("object" == n2(t3) || "function" == typeof t3)) return t3; 26204 if (void 0 !== t3) throw new TypeError("Derived constructors may only return object or undefined"); 26205 return (function(e4) { 26206 if (void 0 === e4) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 26207 return e4; 26208 })(e3); 26209} 26210function a2(e3) { 26211 return a2 = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e4) { 26212 return e4.__proto__ || Object.getPrototypeOf(e4); 26213 }, a2(e3); 26214} 26215function c2(e3, t3) { 26216 return c2 = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e4, t4) { 26217 return e4.__proto__ = t4, e4; 26218 }, c2(e3, t3); 26219} 26220function l2(e3, t3) { 26221 if ("function" != typeof t3 && null !== t3) throw new TypeError("Super expression must either be null or a function"); 26222 e3.prototype = Object.create(t3 && t3.prototype, { constructor: { value: e3, writable: true, configurable: true } }), Object.defineProperty(e3, "prototype", { writable: false }), t3 && c2(e3, t3); 26223} 26224function u2(e3, t3, n3) { 26225 return (t3 = r2(t3)) in e3 ? Object.defineProperty(e3, t3, { value: n3, enumerable: true, configurable: true, writable: true }) : e3[t3] = n3, e3; 26226} 26227function d2(e3, t3, n3, r3, i3, o3, s3) { 26228 try { 26229 var a3 = e3[o3](s3), c3 = a3.value; 26230 } catch (e4) { 26231 return void n3(e4); 26232 } 26233 a3.done ? t3(c3) : Promise.resolve(c3).then(r3, i3); 26234} 26235function p2(e3) { 26236 return function() { 26237 var t3 = this, n3 = arguments; 26238 return new Promise((function(r3, i3) { 26239 var o3 = e3.apply(t3, n3); 26240 function s3(e4) { 26241 d2(o3, r3, i3, s3, a3, "next", e4); 26242 } 26243 function a3(e4) { 26244 d2(o3, r3, i3, s3, a3, "throw", e4); 26245 } 26246 s3(void 0); 26247 })); 26248 }; 26249} 26250function h2(e3, t3) { 26251 (null == t3 || t3 > e3.length) && (t3 = e3.length); 26252 for (var n3 = 0, r3 = Array(t3); n3 < t3; n3++) r3[n3] = e3[n3]; 26253 return r3; 26254} 26255function f2(e3, t3) { 26256 return (function(e4) { 26257 if (Array.isArray(e4)) return e4; 26258 })(e3) || (function(e4, t4) { 26259 var n3 = null == e4 ? null : "undefined" != typeof Symbol && e4[Symbol.iterator] || e4["@@iterator"]; 26260 if (null != n3) { 26261 var r3, i3, o3, s3, a3 = [], c3 = true, l3 = false; 26262 try { 26263 if (o3 = (n3 = n3.call(e4)).next, 0 === t4) { 26264 if (Object(n3) !== n3) return; 26265 c3 = false; 26266 } else for (; !(c3 = (r3 = o3.call(n3)).done) && (a3.push(r3.value), a3.length !== t4); c3 = true) ; 26267 } catch (e5) { 26268 l3 = true, i3 = e5; 26269 } finally { 26270 try { 26271 if (!c3 && null != n3.return && (s3 = n3.return(), Object(s3) !== s3)) return; 26272 } finally { 26273 if (l3) throw i3; 26274 } 26275 } 26276 return a3; 26277 } 26278 })(e3, t3) || (function(e4, t4) { 26279 if (e4) { 26280 if ("string" == typeof e4) return h2(e4, t4); 26281 var n3 = {}.toString.call(e4).slice(8, -1); 26282 return "Object" === n3 && e4.constructor && (n3 = e4.constructor.name), "Map" === n3 || "Set" === n3 ? Array.from(e4) : "Arguments" === n3 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n3) ? h2(e4, t4) : void 0; 26283 } 26284 })(e3, t3) || (function() { 26285 throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 26286 })(); 26287} 26288function v2(e3) { 26289 return e3 && e3.__esModule && Object.prototype.hasOwnProperty.call(e3, "default") ? e3.default : e3; 26290} 26291function w2(e3, t3, n3) { 26292 for (n3 of e3.keys()) if (S2(n3, t3)) return n3; 26293} 26294function S2(e3, t3) { 26295 var n3, r3, i3; 26296 if (e3 === t3) return true; 26297 if (e3 && t3 && (n3 = e3.constructor) === t3.constructor) { 26298 if (n3 === Date) return e3.getTime() === t3.getTime(); 26299 if (n3 === RegExp) return e3.toString() === t3.toString(); 26300 if (n3 === Array) { 26301 if ((r3 = e3.length) === t3.length) for (; r3-- && S2(e3[r3], t3[r3]); ) ; 26302 return -1 === r3; 26303 } 26304 if (n3 === Set) { 26305 if (e3.size !== t3.size) return false; 26306 for (r3 of e3) { 26307 if ((i3 = r3) && "object" == typeof i3 && !(i3 = w2(t3, i3))) return false; 26308 if (!t3.has(i3)) return false; 26309 } 26310 return true; 26311 } 26312 if (n3 === Map) { 26313 if (e3.size !== t3.size) return false; 26314 for (r3 of e3) { 26315 if ((i3 = r3[0]) && "object" == typeof i3 && !(i3 = w2(t3, i3))) return false; 26316 if (!S2(r3[1], t3.get(i3))) return false; 26317 } 26318 return true; 26319 } 26320 if (n3 === ArrayBuffer) e3 = new Uint8Array(e3), t3 = new Uint8Array(t3); 26321 else if (n3 === DataView) { 26322 if ((r3 = e3.byteLength) === t3.byteLength) for (; r3-- && e3.getInt8(r3) === t3.getInt8(r3); ) ; 26323 return -1 === r3; 26324 } 26325 if (ArrayBuffer.isView(e3)) { 26326 if ((r3 = e3.byteLength) === t3.byteLength) for (; r3-- && e3[r3] === t3[r3]; ) ; 26327 return -1 === r3; 26328 } 26329 if (!n3 || "object" == typeof e3) { 26330 for (n3 in r3 = 0, e3) { 26331 if (_2.call(e3, n3) && ++r3 && !_2.call(t3, n3)) return false; 26332 if (!(n3 in t3) || !S2(e3[n3], t3[n3])) return false; 26333 } 26334 return Object.keys(t3).length === r3; 26335 } 26336 } 26337 return e3 != e3 && t3 != t3; 26338} 26339function N2() { 26340 return Date.now() + Math.random().toString(); 26341} 26342function R2() { 26343 throw new Error("Method must be implemented in subclass"); 26344} 26345function F2(e3, t3) { 26346 return null != t3 && t3.proxyUrl ? t3.proxyUrl + ("/" === t3.proxyUrl.slice(-1) ? "" : "/") + e3.substring(8) : e3; 26347} 26348function B2(e3) { 26349 return null != e3 && e3.callObjectBundleUrlOverride ? e3.callObjectBundleUrlOverride : F2("https://c.daily.co/call-machine/versioned/".concat("0.82.0", "/static/call-machine-object-bundle.js"), e3); 26350} 26351function U2(e3) { 26352 try { 26353 new URL(e3); 26354 } catch (e4) { 26355 return false; 26356 } 26357 return true; 26358} 26359function q2(e3, t3, n3) { 26360 const r3 = n3 || $2, i3 = r3.__SENTRY__ = r3.__SENTRY__ || {}, o3 = i3[J2] = i3[J2] || {}; 26361 return o3[e3] || (o3[e3] = t3()); 26362} 26363function G2(e3) { 26364 if (!("console" in $2)) return e3(); 26365 const t3 = $2.console, n3 = {}, r3 = Object.keys(H2); 26366 r3.forEach(((e4) => { 26367 const r4 = H2[e4]; 26368 n3[e4] = t3[e4], t3[e4] = r4; 26369 })); 26370 try { 26371 return e3(); 26372 } finally { 26373 r3.forEach(((e4) => { 26374 t3[e4] = n3[e4]; 26375 })); 26376 } 26377} 26378function Z2(e3) { 26379 return e3[e3.length - 1] || {}; 26380} 26381function te2(e3) { 26382 try { 26383 return e3 && "function" == typeof e3 && e3.name || ee2; 26384 } catch (e4) { 26385 return ee2; 26386 } 26387} 26388function ne2(e3) { 26389 const t3 = e3.exception; 26390 if (t3) { 26391 const e4 = []; 26392 try { 26393 return t3.values.forEach(((t4) => { 26394 t4.stacktrace.frames && e4.push(...t4.stacktrace.frames); 26395 })), e4; 26396 } catch (e5) { 26397 return; 26398 } 26399 } 26400} 26401function oe2(e3, t3) { 26402 re2[e3] = re2[e3] || [], re2[e3].push(t3); 26403} 26404function se2(e3, t3) { 26405 if (!ie2[e3]) { 26406 ie2[e3] = true; 26407 try { 26408 t3(); 26409 } catch (t4) { 26410 z2 && Q2.error(`Error while instrumenting ${e3}`, t4); 26411 } 26412 } 26413} 26414function ae2(e3, t3) { 26415 const n3 = e3 && re2[e3]; 26416 if (n3) for (const r3 of n3) try { 26417 r3(t3); 26418 } catch (t4) { 26419 z2 && Q2.error(`Error while triggering instrumentation handler. 26420Type: ${e3} 26421Name: ${te2(r3)} 26422Error:`, t4); 26423 } 26424} 26425function le2() { 26426 ce2 = $2.onerror, $2.onerror = function(e3, t3, n3, r3, i3) { 26427 return ae2("error", { column: r3, error: i3, line: n3, msg: e3, url: t3 }), !!ce2 && ce2.apply(this, arguments); 26428 }, $2.onerror.__SENTRY_INSTRUMENTED__ = true; 26429} 26430function de2() { 26431 ue2 = $2.onunhandledrejection, $2.onunhandledrejection = function(e3) { 26432 return ae2("unhandledrejection", e3), !ue2 || ue2.apply(this, arguments); 26433 }, $2.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true; 26434} 26435function pe2() { 26436 return he2($2), $2; 26437} 26438function he2(e3) { 26439 const t3 = e3.__SENTRY__ = e3.__SENTRY__ || {}; 26440 return t3.version = t3.version || J2, t3[J2] = t3[J2] || {}; 26441} 26442function ve2(e3) { 26443 switch (fe2.call(e3)) { 26444 case "[object Error]": 26445 case "[object Exception]": 26446 case "[object DOMException]": 26447 case "[object WebAssembly.Exception]": 26448 return true; 26449 default: 26450 return Ce2(e3, Error); 26451 } 26452} 26453function ge2(e3, t3) { 26454 return fe2.call(e3) === `[object ${t3}]`; 26455} 26456function me2(e3) { 26457 return ge2(e3, "ErrorEvent"); 26458} 26459function ye2(e3) { 26460 return ge2(e3, "DOMError"); 26461} 26462function be2(e3) { 26463 return ge2(e3, "String"); 26464} 26465function _e2(e3) { 26466 return "object" == typeof e3 && null !== e3 && "__sentry_template_string__" in e3 && "__sentry_template_values__" in e3; 26467} 26468function we2(e3) { 26469 return null === e3 || _e2(e3) || "object" != typeof e3 && "function" != typeof e3; 26470} 26471function Se2(e3) { 26472 return ge2(e3, "Object"); 26473} 26474function ke2(e3) { 26475 return "undefined" != typeof Event && Ce2(e3, Event); 26476} 26477function Me2(e3) { 26478 return Boolean(e3 && e3.then && "function" == typeof e3.then); 26479} 26480function Ce2(e3, t3) { 26481 try { 26482 return e3 instanceof t3; 26483 } catch (e4) { 26484 return false; 26485 } 26486} 26487function Ee2(e3) { 26488 return !("object" != typeof e3 || null === e3 || !e3.__isVue && !e3._isVue); 26489} 26490function Oe2(e3, t3 = {}) { 26491 if (!e3) return "<unknown>"; 26492 try { 26493 let n3 = e3; 26494 const r3 = 5, i3 = []; 26495 let o3 = 0, s3 = 0; 26496 const a3 = " > ", c3 = a3.length; 26497 let l3; 26498 const u3 = Array.isArray(t3) ? t3 : t3.keyAttrs, d3 = !Array.isArray(t3) && t3.maxStringLength || 80; 26499 for (; n3 && o3++ < r3 && (l3 = Pe2(n3, u3), !("html" === l3 || o3 > 1 && s3 + i3.length * c3 + l3.length >= d3)); ) i3.push(l3), s3 += l3.length, n3 = n3.parentNode; 26500 return i3.reverse().join(a3); 26501 } catch (e4) { 26502 return "<unknown>"; 26503 } 26504} 26505function Pe2(e3, t3) { 26506 const n3 = e3, r3 = []; 26507 if (!n3 || !n3.tagName) return ""; 26508 if (Te2.HTMLElement && n3 instanceof HTMLElement && n3.dataset) { 26509 if (n3.dataset.sentryComponent) return n3.dataset.sentryComponent; 26510 if (n3.dataset.sentryElement) return n3.dataset.sentryElement; 26511 } 26512 r3.push(n3.tagName.toLowerCase()); 26513 const i3 = t3 && t3.length ? t3.filter(((e4) => n3.getAttribute(e4))).map(((e4) => [e4, n3.getAttribute(e4)])) : null; 26514 if (i3 && i3.length) i3.forEach(((e4) => { 26515 r3.push(`[${e4[0]}="${e4[1]}"]`); 26516 })); 26517 else { 26518 n3.id && r3.push(`#${n3.id}`); 26519 const e4 = n3.className; 26520 if (e4 && be2(e4)) { 26521 const t4 = e4.split(/\s+/); 26522 for (const e5 of t4) r3.push(`.${e5}`); 26523 } 26524 } 26525 const o3 = ["aria-label", "type", "name", "title", "alt"]; 26526 for (const e4 of o3) { 26527 const t4 = n3.getAttribute(e4); 26528 t4 && r3.push(`[${e4}="${t4}"]`); 26529 } 26530 return r3.join(""); 26531} 26532function Ae2(e3, t3 = 0) { 26533 return "string" != typeof e3 || 0 === t3 || e3.length <= t3 ? e3 : `${e3.slice(0, t3)}...`; 26534} 26535function je2(e3, t3) { 26536 if (!Array.isArray(e3)) return ""; 26537 const n3 = []; 26538 for (let t4 = 0; t4 < e3.length; t4++) { 26539 const r3 = e3[t4]; 26540 try { 26541 Ee2(r3) ? n3.push("[VueViewModel]") : n3.push(String(r3)); 26542 } catch (e4) { 26543 n3.push("[value cannot be serialized]"); 26544 } 26545 } 26546 return n3.join(t3); 26547} 26548function Ie2(e3, t3, n3 = false) { 26549 return !!be2(e3) && (ge2(t3, "RegExp") ? t3.test(e3) : !!be2(t3) && (n3 ? e3 === t3 : e3.includes(t3))); 26550} 26551function xe2(e3, t3 = [], n3 = false) { 26552 return t3.some(((t4) => Ie2(e3, t4, n3))); 26553} 26554function Le2(e3, t3, n3) { 26555 if (!(t3 in e3)) return; 26556 const r3 = e3[t3], i3 = n3(r3); 26557 "function" == typeof i3 && Ne2(i3, r3); 26558 try { 26559 e3[t3] = i3; 26560 } catch (n4) { 26561 z2 && Q2.log(`Failed to replace method "${t3}" in object`, e3); 26562 } 26563} 26564function De2(e3, t3, n3) { 26565 try { 26566 Object.defineProperty(e3, t3, { value: n3, writable: true, configurable: true }); 26567 } catch (n4) { 26568 z2 && Q2.log(`Failed to add non-enumerable property "${t3}" to object`, e3); 26569 } 26570} 26571function Ne2(e3, t3) { 26572 try { 26573 const n3 = t3.prototype || {}; 26574 e3.prototype = t3.prototype = n3, De2(e3, "__sentry_original__", t3); 26575 } catch (e4) { 26576 } 26577} 26578function Re2(e3) { 26579 return e3.__sentry_original__; 26580} 26581function Fe2(e3) { 26582 if (ve2(e3)) return { message: e3.message, name: e3.name, stack: e3.stack, ...Ue2(e3) }; 26583 if (ke2(e3)) { 26584 const t3 = { type: e3.type, target: Be2(e3.target), currentTarget: Be2(e3.currentTarget), ...Ue2(e3) }; 26585 return "undefined" != typeof CustomEvent && Ce2(e3, CustomEvent) && (t3.detail = e3.detail), t3; 26586 } 26587 return e3; 26588} 26589function Be2(e3) { 26590 try { 26591 return t3 = e3, "undefined" != typeof Element && Ce2(t3, Element) ? Oe2(e3) : Object.prototype.toString.call(e3); 26592 } catch (e4) { 26593 return "<unknown>"; 26594 } 26595 var t3; 26596} 26597function Ue2(e3) { 26598 if ("object" == typeof e3 && null !== e3) { 26599 const t3 = {}; 26600 for (const n3 in e3) Object.prototype.hasOwnProperty.call(e3, n3) && (t3[n3] = e3[n3]); 26601 return t3; 26602 } 26603 return {}; 26604} 26605function Ve2(e3) { 26606 return Je2(e3, /* @__PURE__ */ new Map()); 26607} 26608function Je2(e3, t3) { 26609 if ((function(e4) { 26610 if (!Se2(e4)) return false; 26611 try { 26612 const t4 = Object.getPrototypeOf(e4).constructor.name; 26613 return !t4 || "Object" === t4; 26614 } catch (e5) { 26615 return true; 26616 } 26617 })(e3)) { 26618 const n3 = t3.get(e3); 26619 if (void 0 !== n3) return n3; 26620 const r3 = {}; 26621 t3.set(e3, r3); 26622 for (const n4 of Object.getOwnPropertyNames(e3)) void 0 !== e3[n4] && (r3[n4] = Je2(e3[n4], t3)); 26623 return r3; 26624 } 26625 if (Array.isArray(e3)) { 26626 const n3 = t3.get(e3); 26627 if (void 0 !== n3) return n3; 26628 const r3 = []; 26629 return t3.set(e3, r3), e3.forEach(((e4) => { 26630 r3.push(Je2(e4, t3)); 26631 })), r3; 26632 } 26633 return e3; 26634} 26635function $e2() { 26636 return Date.now() / 1e3; 26637} 26638function ze2() { 26639 const e3 = $2, t3 = e3.crypto || e3.msCrypto; 26640 let n3 = () => 16 * Math.random(); 26641 try { 26642 if (t3 && t3.randomUUID) return t3.randomUUID().replace(/-/g, ""); 26643 t3 && t3.getRandomValues && (n3 = () => { 26644 const e4 = new Uint8Array(1); 26645 return t3.getRandomValues(e4), e4[0]; 26646 }); 26647 } catch (e4) { 26648 } 26649 return ("10000000100040008000" + 1e11).replace(/[018]/g, ((e4) => (e4 ^ (15 & n3()) >> e4 / 4).toString(16))); 26650} 26651function We2(e3) { 26652 return e3.exception && e3.exception.values ? e3.exception.values[0] : void 0; 26653} 26654function He2(e3) { 26655 const { message: t3, event_id: n3 } = e3; 26656 if (t3) return t3; 26657 const r3 = We2(e3); 26658 return r3 ? r3.type && r3.value ? `${r3.type}: ${r3.value}` : r3.type || r3.value || n3 || "<unknown>" : n3 || "<unknown>"; 26659} 26660function Ge2(e3, t3, n3) { 26661 const r3 = e3.exception = e3.exception || {}, i3 = r3.values = r3.values || [], o3 = i3[0] = i3[0] || {}; 26662 o3.value || (o3.value = t3 || ""), o3.type || (o3.type = n3 || "Error"); 26663} 26664function Qe2(e3, t3) { 26665 const n3 = We2(e3); 26666 if (!n3) return; 26667 const r3 = n3.mechanism; 26668 if (n3.mechanism = { type: "generic", handled: true, ...r3, ...t3 }, t3 && "data" in t3) { 26669 const e4 = { ...r3 && r3.data, ...t3.data }; 26670 n3.mechanism.data = e4; 26671 } 26672} 26673function Ke2(e3) { 26674 if ((function(e4) { 26675 try { 26676 return e4.__sentry_captured__; 26677 } catch (e5) { 26678 } 26679 })(e3)) return true; 26680 try { 26681 De2(e3, "__sentry_captured__", true); 26682 } catch (e4) { 26683 } 26684 return false; 26685} 26686function Xe2(e3) { 26687 return new et2(((t3) => { 26688 t3(e3); 26689 })); 26690} 26691function Ze2(e3) { 26692 return new et2(((t3, n3) => { 26693 n3(e3); 26694 })); 26695} 26696function tt2(e3) { 26697 const t3 = qe2(), n3 = { sid: ze2(), init: true, timestamp: t3, started: t3, duration: 0, status: "ok", errors: 0, ignoreDuration: false, toJSON: () => (function(e4) { 26698 return Ve2({ sid: `${e4.sid}`, init: e4.init, started: new Date(1e3 * e4.started).toISOString(), timestamp: new Date(1e3 * e4.timestamp).toISOString(), status: e4.status, errors: e4.errors, did: "number" == typeof e4.did || "string" == typeof e4.did ? `${e4.did}` : void 0, duration: e4.duration, abnormal_mechanism: e4.abnormal_mechanism, attrs: { release: e4.release, environment: e4.environment, ip_address: e4.ipAddress, user_agent: e4.userAgent } }); 26699 })(n3) }; 26700 return e3 && nt2(n3, e3), n3; 26701} 26702function nt2(e3, t3 = {}) { 26703 if (t3.user && (!e3.ipAddress && t3.user.ip_address && (e3.ipAddress = t3.user.ip_address), e3.did || t3.did || (e3.did = t3.user.id || t3.user.email || t3.user.username)), e3.timestamp = t3.timestamp || qe2(), t3.abnormal_mechanism && (e3.abnormal_mechanism = t3.abnormal_mechanism), t3.ignoreDuration && (e3.ignoreDuration = t3.ignoreDuration), t3.sid && (e3.sid = 32 === t3.sid.length ? t3.sid : ze2()), void 0 !== t3.init && (e3.init = t3.init), !e3.did && t3.did && (e3.did = `${t3.did}`), "number" == typeof t3.started && (e3.started = t3.started), e3.ignoreDuration) e3.duration = void 0; 26704 else if ("number" == typeof t3.duration) e3.duration = t3.duration; 26705 else { 26706 const t4 = e3.timestamp - e3.started; 26707 e3.duration = t4 >= 0 ? t4 : 0; 26708 } 26709 t3.release && (e3.release = t3.release), t3.environment && (e3.environment = t3.environment), !e3.ipAddress && t3.ipAddress && (e3.ipAddress = t3.ipAddress), !e3.userAgent && t3.userAgent && (e3.userAgent = t3.userAgent), "number" == typeof t3.errors && (e3.errors = t3.errors), t3.status && (e3.status = t3.status); 26710} 26711function rt2() { 26712 return ze2(); 26713} 26714function it2() { 26715 return ze2().substring(16); 26716} 26717function ot2(e3, t3, n3 = 2) { 26718 if (!t3 || "object" != typeof t3 || n3 <= 0) return t3; 26719 if (e3 && t3 && 0 === Object.keys(t3).length) return e3; 26720 const r3 = { ...e3 }; 26721 for (const e4 in t3) Object.prototype.hasOwnProperty.call(t3, e4) && (r3[e4] = ot2(r3[e4], t3[e4], n3 - 1)); 26722 return r3; 26723} 26724function at2(e3, t3) { 26725 t3 ? De2(e3, st2, t3) : delete e3[st2]; 26726} 26727function ct2(e3) { 26728 return e3[st2]; 26729} 26730function pt2() { 26731 const e3 = he2(pe2()); 26732 return e3.stack = e3.stack || new dt2(q2("defaultCurrentScope", (() => new ut2())), q2("defaultIsolationScope", (() => new ut2()))); 26733} 26734function ht2(e3) { 26735 return pt2().withScope(e3); 26736} 26737function ft2(e3, t3) { 26738 const n3 = pt2(); 26739 return n3.withScope((() => (n3.getStackTop().scope = e3, t3(e3)))); 26740} 26741function vt2(e3) { 26742 return pt2().withScope((() => e3(pt2().getIsolationScope()))); 26743} 26744function gt2(e3) { 26745 const t3 = he2(e3); 26746 return t3.acs ? t3.acs : { withIsolationScope: vt2, withScope: ht2, withSetScope: ft2, withSetIsolationScope: (e4, t4) => vt2(t4), getCurrentScope: () => pt2().getScope(), getIsolationScope: () => pt2().getIsolationScope() }; 26747} 26748function mt2() { 26749 return gt2(pe2()).getCurrentScope(); 26750} 26751function yt2() { 26752 return gt2(pe2()).getIsolationScope(); 26753} 26754function bt2() { 26755 return mt2().getClient(); 26756} 26757function _t2(e3) { 26758 const t3 = e3.getPropagationContext(), { traceId: n3, spanId: r3, parentSpanId: i3 } = t3; 26759 return Ve2({ trace_id: n3, span_id: r3, parent_span_id: i3 }); 26760} 26761function wt2(e3) { 26762 const t3 = e3._sentryMetrics; 26763 if (!t3) return; 26764 const n3 = {}; 26765 for (const [, [e4, r3]] of t3) { 26766 (n3[e4] || (n3[e4] = [])).push(Ve2(r3)); 26767 } 26768 return n3; 26769} 26770function kt2(e3) { 26771 const t3 = (function(e4) { 26772 if (!e4 || !be2(e4) && !Array.isArray(e4)) return; 26773 if (Array.isArray(e4)) return e4.reduce(((e5, t4) => { 26774 const n4 = Mt2(t4); 26775 return Object.entries(n4).forEach((([t5, n5]) => { 26776 e5[t5] = n5; 26777 })), e5; 26778 }), {}); 26779 return Mt2(e4); 26780 })(e3); 26781 if (!t3) return; 26782 const n3 = Object.entries(t3).reduce(((e4, [t4, n4]) => { 26783 if (t4.match(St2)) { 26784 e4[t4.slice(7)] = n4; 26785 } 26786 return e4; 26787 }), {}); 26788 return Object.keys(n3).length > 0 ? n3 : void 0; 26789} 26790function Mt2(e3) { 26791 return e3.split(",").map(((e4) => e4.split("=").map(((e5) => decodeURIComponent(e5.trim()))))).reduce(((e4, [t3, n3]) => (t3 && n3 && (e4[t3] = n3), e4)), {}); 26792} 26793function Et2(e3) { 26794 const { spanId: t3, traceId: n3, isRemote: r3 } = e3.spanContext(); 26795 return Ve2({ parent_span_id: r3 ? t3 : Pt2(e3).parent_span_id, span_id: r3 ? it2() : t3, trace_id: n3 }); 26796} 26797function Tt2(e3) { 26798 return "number" == typeof e3 ? Ot2(e3) : Array.isArray(e3) ? e3[0] + e3[1] / 1e9 : e3 instanceof Date ? Ot2(e3.getTime()) : qe2(); 26799} 26800function Ot2(e3) { 26801 return e3 > 9999999999 ? e3 / 1e3 : e3; 26802} 26803function Pt2(e3) { 26804 if ((function(e4) { 26805 return "function" == typeof e4.getSpanJSON; 26806 })(e3)) return e3.getSpanJSON(); 26807 try { 26808 const { spanId: t3, traceId: n3 } = e3.spanContext(); 26809 if ((function(e4) { 26810 const t4 = e4; 26811 return !!(t4.attributes && t4.startTime && t4.name && t4.endTime && t4.status); 26812 })(e3)) { 26813 const { attributes: r3, startTime: i3, name: o3, endTime: s3, parentSpanId: a3, status: c3 } = e3; 26814 return Ve2({ span_id: t3, trace_id: n3, data: r3, description: o3, parent_span_id: a3, start_timestamp: Tt2(i3), timestamp: Tt2(s3) || void 0, status: At2(c3), op: r3["sentry.op"], origin: r3["sentry.origin"], _metrics_summary: wt2(e3) }); 26815 } 26816 return { span_id: t3, trace_id: n3 }; 26817 } catch (e4) { 26818 return {}; 26819 } 26820} 26821function At2(e3) { 26822 if (e3 && 0 !== e3.code) return 1 === e3.code ? "ok" : e3.message || "unknown_error"; 26823} 26824function jt2(e3) { 26825 return e3._sentryRootSpan || e3; 26826} 26827function It2() { 26828 Ct2 || (G2((() => { 26829 console.warn("[Sentry] Deprecation warning: Returning null from `beforeSendSpan` will be disallowed from SDK version 9.0.0 onwards. The callback will only support mutating spans. To drop certain spans, configure the respective integrations directly."); 26830 })), Ct2 = true); 26831} 26832function Lt2(e3, t3) { 26833 const n3 = t3.getOptions(), { publicKey: r3 } = t3.getDsn() || {}, i3 = Ve2({ environment: n3.environment || xt2, release: n3.release, public_key: r3, trace_id: e3 }); 26834 return t3.emit("createDsc", i3), i3; 26835} 26836function Dt2(e3) { 26837 const t3 = bt2(); 26838 if (!t3) return {}; 26839 const n3 = jt2(e3), r3 = n3._frozenDsc; 26840 if (r3) return r3; 26841 const i3 = n3.spanContext().traceState, o3 = i3 && i3.get("sentry.dsc"), s3 = o3 && kt2(o3); 26842 if (s3) return s3; 26843 const a3 = Lt2(e3.spanContext().traceId, t3), c3 = Pt2(n3), l3 = c3.data || {}, u3 = l3["sentry.sample_rate"]; 26844 null != u3 && (a3.sample_rate = `${u3}`); 26845 const d3 = l3["sentry.source"], p3 = c3.description; 26846 return "url" !== d3 && p3 && (a3.transaction = p3), (function(e4) { 26847 if ("boolean" == typeof __SENTRY_TRACING__ && !__SENTRY_TRACING__) return false; 26848 const t4 = bt2(), n4 = e4 || t4 && t4.getOptions(); 26849 return !!n4 && (n4.enableTracing || "tracesSampleRate" in n4 || "tracesSampler" in n4); 26850 })() && (a3.sampled = String((function(e4) { 26851 const { traceFlags: t4 } = e4.spanContext(); 26852 return 1 === t4; 26853 })(n3))), t3.emit("createDsc", a3, n3), a3; 26854} 26855function Rt2(e3, t3 = false) { 26856 const { host: n3, path: r3, pass: i3, port: o3, projectId: s3, protocol: a3, publicKey: c3 } = e3; 26857 return `${a3}://${c3}${t3 && i3 ? `:${i3}` : ""}@${n3}${o3 ? `:${o3}` : ""}/${r3 ? `${r3}/` : r3}${s3}`; 26858} 26859function Ft2(e3) { 26860 return { protocol: e3.protocol, publicKey: e3.publicKey || "", pass: e3.pass || "", host: e3.host, port: e3.port || "", path: e3.path || "", projectId: e3.projectId }; 26861} 26862function Bt2(e3) { 26863 const t3 = "string" == typeof e3 ? (function(e4) { 26864 const t4 = Nt2.exec(e4); 26865 if (!t4) return void G2((() => { 26866 console.error(`Invalid Sentry Dsn: ${e4}`); 26867 })); 26868 const [n3, r3, i3 = "", o3 = "", s3 = "", a3 = ""] = t4.slice(1); 26869 let c3 = "", l3 = a3; 26870 const u3 = l3.split("/"); 26871 if (u3.length > 1 && (c3 = u3.slice(0, -1).join("/"), l3 = u3.pop()), l3) { 26872 const e5 = l3.match(/^\d+/); 26873 e5 && (l3 = e5[0]); 26874 } 26875 return Ft2({ host: o3, pass: i3, path: c3, projectId: l3, port: s3, protocol: n3, publicKey: r3 }); 26876 })(e3) : Ft2(e3); 26877 if (t3 && (function(e4) { 26878 if (!z2) return true; 26879 const { port: t4, projectId: n3, protocol: r3 } = e4; 26880 return !(["protocol", "publicKey", "host", "projectId"].find(((t5) => !e4[t5] && (Q2.error(`Invalid Sentry Dsn: ${t5} missing`), true))) || (n3.match(/^\d+$/) ? /* @__PURE__ */ (function(e5) { 26881 return "http" === e5 || "https" === e5; 26882 })(r3) ? t4 && isNaN(parseInt(t4, 10)) && (Q2.error(`Invalid Sentry Dsn: Invalid port ${t4}`), 1) : (Q2.error(`Invalid Sentry Dsn: Invalid protocol ${r3}`), 1) : (Q2.error(`Invalid Sentry Dsn: Invalid projectId ${n3}`), 1))); 26883 })(t3)) return t3; 26884} 26885function Ut2(e3, t3 = 100, n3 = 1 / 0) { 26886 try { 26887 return Jt2("", e3, t3, n3); 26888 } catch (e4) { 26889 return { ERROR: `**non-serializable** (${e4})` }; 26890 } 26891} 26892function Vt2(e3, t3 = 3, n3 = 102400) { 26893 const r3 = Ut2(e3, t3); 26894 return i3 = r3, (function(e4) { 26895 return ~-encodeURI(e4).split(/%..|./).length; 26896 })(JSON.stringify(i3)) > n3 ? Vt2(e3, t3 - 1, n3) : r3; 26897 var i3; 26898} 26899function Jt2(e3, t3, n3 = 1 / 0, r3 = 1 / 0, i3 = /* @__PURE__ */ (function() { 26900 const e4 = "function" == typeof WeakSet, t4 = e4 ? /* @__PURE__ */ new WeakSet() : []; 26901 return [function(n4) { 26902 if (e4) return !!t4.has(n4) || (t4.add(n4), false); 26903 for (let e5 = 0; e5 < t4.length; e5++) if (t4[e5] === n4) return true; 26904 return t4.push(n4), false; 26905 }, function(n4) { 26906 if (e4) t4.delete(n4); 26907 else for (let e5 = 0; e5 < t4.length; e5++) if (t4[e5] === n4) { 26908 t4.splice(e5, 1); 26909 break; 26910 } 26911 }]; 26912})()) { 26913 const [o3, s3] = i3; 26914 if (null == t3 || ["boolean", "string"].includes(typeof t3) || "number" == typeof t3 && Number.isFinite(t3)) return t3; 26915 const a3 = (function(e4, t4) { 26916 try { 26917 if ("domain" === e4 && t4 && "object" == typeof t4 && t4._events) return "[Domain]"; 26918 if ("domainEmitter" === e4) return "[DomainEmitter]"; 26919 if ("undefined" != typeof global && t4 === global) return "[Global]"; 26920 if ("undefined" != typeof window && t4 === window) return "[Window]"; 26921 if ("undefined" != typeof document && t4 === document) return "[Document]"; 26922 if (Ee2(t4)) return "[VueViewModel]"; 26923 if (Se2(n4 = t4) && "nativeEvent" in n4 && "preventDefault" in n4 && "stopPropagation" in n4) return "[SyntheticEvent]"; 26924 if ("number" == typeof t4 && !Number.isFinite(t4)) return `[${t4}]`; 26925 if ("function" == typeof t4) return `[Function: ${te2(t4)}]`; 26926 if ("symbol" == typeof t4) return `[${String(t4)}]`; 26927 if ("bigint" == typeof t4) return `[BigInt: ${String(t4)}]`; 26928 const r4 = (function(e5) { 26929 const t5 = Object.getPrototypeOf(e5); 26930 return t5 ? t5.constructor.name : "null prototype"; 26931 })(t4); 26932 return /^HTML(\w*)Element$/.test(r4) ? `[HTMLElement: ${r4}]` : `[object ${r4}]`; 26933 } catch (e5) { 26934 return `**non-serializable** (${e5})`; 26935 } 26936 var n4; 26937 })(e3, t3); 26938 if (!a3.startsWith("[object ")) return a3; 26939 if (t3.__sentry_skip_normalization__) return t3; 26940 const c3 = "number" == typeof t3.__sentry_override_normalization_depth__ ? t3.__sentry_override_normalization_depth__ : n3; 26941 if (0 === c3) return a3.replace("object ", ""); 26942 if (o3(t3)) return "[Circular ~]"; 26943 const l3 = t3; 26944 if (l3 && "function" == typeof l3.toJSON) try { 26945 return Jt2("", l3.toJSON(), c3 - 1, r3, i3); 26946 } catch (e4) { 26947 } 26948 const u3 = Array.isArray(t3) ? [] : {}; 26949 let d3 = 0; 26950 const p3 = Fe2(t3); 26951 for (const e4 in p3) { 26952 if (!Object.prototype.hasOwnProperty.call(p3, e4)) continue; 26953 if (d3 >= r3) { 26954 u3[e4] = "[MaxProperties ~]"; 26955 break; 26956 } 26957 const t4 = p3[e4]; 26958 u3[e4] = Jt2(e4, t4, c3 - 1, r3, i3), d3++; 26959 } 26960 return s3(t3), u3; 26961} 26962function $t2(e3, t3 = []) { 26963 return [e3, t3]; 26964} 26965function qt2(e3, t3) { 26966 const [n3, r3] = e3; 26967 return [n3, [...r3, t3]]; 26968} 26969function zt2(e3, t3) { 26970 const n3 = e3[1]; 26971 for (const e4 of n3) { 26972 if (t3(e4, e4[0].type)) return true; 26973 } 26974 return false; 26975} 26976function Wt2(e3) { 26977 return $2.__SENTRY__ && $2.__SENTRY__.encodePolyfill ? $2.__SENTRY__.encodePolyfill(e3) : new TextEncoder().encode(e3); 26978} 26979function Ht2(e3) { 26980 const [t3, n3] = e3; 26981 let r3 = JSON.stringify(t3); 26982 function i3(e4) { 26983 "string" == typeof r3 ? r3 = "string" == typeof e4 ? r3 + e4 : [Wt2(r3), e4] : r3.push("string" == typeof e4 ? Wt2(e4) : e4); 26984 } 26985 for (const e4 of n3) { 26986 const [t4, n4] = e4; 26987 if (i3(` 26988${JSON.stringify(t4)} 26989`), "string" == typeof n4 || n4 instanceof Uint8Array) i3(n4); 26990 else { 26991 let e5; 26992 try { 26993 e5 = JSON.stringify(n4); 26994 } catch (t5) { 26995 e5 = JSON.stringify(Ut2(n4)); 26996 } 26997 i3(e5); 26998 } 26999 } 27000 return "string" == typeof r3 ? r3 : (function(e4) { 27001 const t4 = e4.reduce(((e5, t5) => e5 + t5.length), 0), n4 = new Uint8Array(t4); 27002 let r4 = 0; 27003 for (const t5 of e4) n4.set(t5, r4), r4 += t5.length; 27004 return n4; 27005 })(r3); 27006} 27007function Gt2(e3) { 27008 const t3 = "string" == typeof e3.data ? Wt2(e3.data) : e3.data; 27009 return [Ve2({ type: "attachment", length: t3.length, filename: e3.filename, content_type: e3.contentType, attachment_type: e3.attachmentType }), t3]; 27010} 27011function Kt2(e3) { 27012 return Qt2[e3]; 27013} 27014function Yt2(e3) { 27015 if (!e3 || !e3.sdk) return; 27016 const { name: t3, version: n3 } = e3.sdk; 27017 return { name: t3, version: n3 }; 27018} 27019function Xt2(e3, t3, n3, r3) { 27020 const i3 = Yt2(n3), o3 = e3.type && "replay_event" !== e3.type ? e3.type : "event"; 27021 !(function(e4, t4) { 27022 t4 && (e4.sdk = e4.sdk || {}, e4.sdk.name = e4.sdk.name || t4.name, e4.sdk.version = e4.sdk.version || t4.version, e4.sdk.integrations = [...e4.sdk.integrations || [], ...t4.integrations || []], e4.sdk.packages = [...e4.sdk.packages || [], ...t4.packages || []]); 27023 })(e3, n3 && n3.sdk); 27024 const s3 = (function(e4, t4, n4, r4) { 27025 const i4 = e4.sdkProcessingMetadata && e4.sdkProcessingMetadata.dynamicSamplingContext; 27026 return { event_id: e4.event_id, sent_at: (/* @__PURE__ */ new Date()).toISOString(), ...t4 && { sdk: t4 }, ...!!n4 && r4 && { dsn: Rt2(r4) }, ...i4 && { trace: Ve2({ ...i4 }) } }; 27027 })(e3, i3, r3, t3); 27028 delete e3.sdkProcessingMetadata; 27029 return $t2(s3, [[{ type: o3 }, e3]]); 27030} 27031function Zt2(e3, t3, n3, r3 = 0) { 27032 return new et2(((i3, o3) => { 27033 const s3 = e3[r3]; 27034 if (null === t3 || "function" != typeof s3) i3(t3); 27035 else { 27036 const a3 = s3({ ...t3 }, n3); 27037 V2 && s3.id && null === a3 && Q2.log(`Event processor "${s3.id}" dropped event`), Me2(a3) ? a3.then(((t4) => Zt2(e3, t4, n3, r3 + 1).then(i3))).then(null, o3) : Zt2(e3, a3, n3, r3 + 1).then(i3).then(null, o3); 27038 } 27039 })); 27040} 27041function rn2(e3, t3) { 27042 const { fingerprint: n3, span: r3, breadcrumbs: i3, sdkProcessingMetadata: o3 } = t3; 27043 !(function(e4, t4) { 27044 const { extra: n4, tags: r4, user: i4, contexts: o4, level: s3, transactionName: a3 } = t4, c3 = Ve2(n4); 27045 c3 && Object.keys(c3).length && (e4.extra = { ...c3, ...e4.extra }); 27046 const l3 = Ve2(r4); 27047 l3 && Object.keys(l3).length && (e4.tags = { ...l3, ...e4.tags }); 27048 const u3 = Ve2(i4); 27049 u3 && Object.keys(u3).length && (e4.user = { ...u3, ...e4.user }); 27050 const d3 = Ve2(o4); 27051 d3 && Object.keys(d3).length && (e4.contexts = { ...d3, ...e4.contexts }); 27052 s3 && (e4.level = s3); 27053 a3 && "transaction" !== e4.type && (e4.transaction = a3); 27054 })(e3, t3), r3 && (function(e4, t4) { 27055 e4.contexts = { trace: Et2(t4), ...e4.contexts }, e4.sdkProcessingMetadata = { dynamicSamplingContext: Dt2(t4), ...e4.sdkProcessingMetadata }; 27056 const n4 = jt2(t4), r4 = Pt2(n4).description; 27057 r4 && !e4.transaction && "transaction" === e4.type && (e4.transaction = r4); 27058 })(e3, r3), (function(e4, t4) { 27059 e4.fingerprint = e4.fingerprint ? Array.isArray(e4.fingerprint) ? e4.fingerprint : [e4.fingerprint] : [], t4 && (e4.fingerprint = e4.fingerprint.concat(t4)); 27060 e4.fingerprint && !e4.fingerprint.length && delete e4.fingerprint; 27061 })(e3, n3), (function(e4, t4) { 27062 const n4 = [...e4.breadcrumbs || [], ...t4]; 27063 e4.breadcrumbs = n4.length ? n4 : void 0; 27064 })(e3, i3), (function(e4, t4) { 27065 e4.sdkProcessingMetadata = { ...e4.sdkProcessingMetadata, ...t4 }; 27066 })(e3, o3); 27067} 27068function on2(e3, t3) { 27069 const { extra: n3, tags: r3, user: i3, contexts: o3, level: s3, sdkProcessingMetadata: a3, breadcrumbs: c3, fingerprint: l3, eventProcessors: u3, attachments: d3, propagationContext: p3, transactionName: h3, span: f3 } = t3; 27070 sn2(e3, "extra", n3), sn2(e3, "tags", r3), sn2(e3, "user", i3), sn2(e3, "contexts", o3), e3.sdkProcessingMetadata = ot2(e3.sdkProcessingMetadata, a3, 2), s3 && (e3.level = s3), h3 && (e3.transactionName = h3), f3 && (e3.span = f3), c3.length && (e3.breadcrumbs = [...e3.breadcrumbs, ...c3]), l3.length && (e3.fingerprint = [...e3.fingerprint, ...l3]), u3.length && (e3.eventProcessors = [...e3.eventProcessors, ...u3]), d3.length && (e3.attachments = [...e3.attachments, ...d3]), e3.propagationContext = { ...e3.propagationContext, ...p3 }; 27071} 27072function sn2(e3, t3, n3) { 27073 e3[t3] = ot2(e3[t3], n3, 1); 27074} 27075function an2(e3, t3, n3, r3, i3, o3) { 27076 const { normalizeDepth: s3 = 3, normalizeMaxBreadth: a3 = 1e3 } = e3, c3 = { ...t3, event_id: t3.event_id || n3.event_id || ze2(), timestamp: t3.timestamp || $e2() }, l3 = n3.integrations || e3.integrations.map(((e4) => e4.name)); 27077 !(function(e4, t4) { 27078 const { environment: n4, release: r4, dist: i4, maxValueLength: o4 = 250 } = t4; 27079 e4.environment = e4.environment || n4 || xt2, !e4.release && r4 && (e4.release = r4); 27080 !e4.dist && i4 && (e4.dist = i4); 27081 e4.message && (e4.message = Ae2(e4.message, o4)); 27082 const s4 = e4.exception && e4.exception.values && e4.exception.values[0]; 27083 s4 && s4.value && (s4.value = Ae2(s4.value, o4)); 27084 const a4 = e4.request; 27085 a4 && a4.url && (a4.url = Ae2(a4.url, o4)); 27086 })(c3, e3), (function(e4, t4) { 27087 t4.length > 0 && (e4.sdk = e4.sdk || {}, e4.sdk.integrations = [...e4.sdk.integrations || [], ...t4]); 27088 })(c3, l3), i3 && i3.emit("applyFrameMetadata", t3), void 0 === t3.type && (function(e4, t4) { 27089 const n4 = (function(e5) { 27090 const t5 = $2._sentryDebugIds; 27091 if (!t5) return {}; 27092 const n5 = Object.keys(t5); 27093 return nn2 && n5.length === tn2 || (tn2 = n5.length, nn2 = n5.reduce(((n6, r4) => { 27094 en2 || (en2 = {}); 27095 const i4 = en2[r4]; 27096 if (i4) n6[i4[0]] = i4[1]; 27097 else { 27098 const i5 = e5(r4); 27099 for (let e6 = i5.length - 1; e6 >= 0; e6--) { 27100 const o4 = i5[e6], s4 = o4 && o4.filename, a4 = t5[r4]; 27101 if (s4 && a4) { 27102 n6[s4] = a4, en2[r4] = [s4, a4]; 27103 break; 27104 } 27105 } 27106 } 27107 return n6; 27108 }), {})), nn2; 27109 })(t4); 27110 try { 27111 e4.exception.values.forEach(((e5) => { 27112 e5.stacktrace.frames.forEach(((e6) => { 27113 n4 && e6.filename && (e6.debug_id = n4[e6.filename]); 27114 })); 27115 })); 27116 } catch (e5) { 27117 } 27118 })(c3, e3.stackParser); 27119 const u3 = (function(e4, t4) { 27120 if (!t4) return e4; 27121 const n4 = e4 ? e4.clone() : new ut2(); 27122 return n4.update(t4), n4; 27123 })(r3, n3.captureContext); 27124 n3.mechanism && Qe2(c3, n3.mechanism); 27125 const d3 = i3 ? i3.getEventProcessors() : [], p3 = q2("globalScope", (() => new ut2())).getScopeData(); 27126 if (o3) { 27127 on2(p3, o3.getScopeData()); 27128 } 27129 if (u3) { 27130 on2(p3, u3.getScopeData()); 27131 } 27132 const h3 = [...n3.attachments || [], ...p3.attachments]; 27133 h3.length && (n3.attachments = h3), rn2(c3, p3); 27134 return Zt2([...d3, ...p3.eventProcessors], c3, n3).then(((e4) => (e4 && (function(e5) { 27135 const t4 = {}; 27136 try { 27137 e5.exception.values.forEach(((e6) => { 27138 e6.stacktrace.frames.forEach(((e7) => { 27139 e7.debug_id && (e7.abs_path ? t4[e7.abs_path] = e7.debug_id : e7.filename && (t4[e7.filename] = e7.debug_id), delete e7.debug_id); 27140 })); 27141 })); 27142 } catch (e6) { 27143 } 27144 if (0 === Object.keys(t4).length) return; 27145 e5.debug_meta = e5.debug_meta || {}, e5.debug_meta.images = e5.debug_meta.images || []; 27146 const n4 = e5.debug_meta.images; 27147 Object.entries(t4).forEach((([e6, t5]) => { 27148 n4.push({ type: "sourcemap", code_file: e6, debug_id: t5 }); 27149 })); 27150 })(e4), "number" == typeof s3 && s3 > 0 ? (function(e5, t4, n4) { 27151 if (!e5) return null; 27152 const r4 = { ...e5, ...e5.breadcrumbs && { breadcrumbs: e5.breadcrumbs.map(((e6) => ({ ...e6, ...e6.data && { data: Ut2(e6.data, t4, n4) } }))) }, ...e5.user && { user: Ut2(e5.user, t4, n4) }, ...e5.contexts && { contexts: Ut2(e5.contexts, t4, n4) }, ...e5.extra && { extra: Ut2(e5.extra, t4, n4) } }; 27153 e5.contexts && e5.contexts.trace && r4.contexts && (r4.contexts.trace = e5.contexts.trace, e5.contexts.trace.data && (r4.contexts.trace.data = Ut2(e5.contexts.trace.data, t4, n4))); 27154 e5.spans && (r4.spans = e5.spans.map(((e6) => ({ ...e6, ...e6.data && { data: Ut2(e6.data, t4, n4) } })))); 27155 e5.contexts && e5.contexts.flags && r4.contexts && (r4.contexts.flags = Ut2(e5.contexts.flags, 3, n4)); 27156 return r4; 27157 })(e4, s3, a3) : e4))); 27158} 27159function cn2(e3) { 27160 if (e3) return (function(e4) { 27161 return e4 instanceof ut2 || "function" == typeof e4; 27162 })(e3) || (function(e4) { 27163 return Object.keys(e4).some(((e5) => ln2.includes(e5))); 27164 })(e3) ? { captureContext: e3 } : e3; 27165} 27166function un2(e3, t3) { 27167 return mt2().captureEvent(e3, t3); 27168} 27169function dn2(e3) { 27170 const t3 = bt2(), n3 = yt2(), r3 = mt2(), { release: i3, environment: o3 = xt2 } = t3 && t3.getOptions() || {}, { userAgent: s3 } = $2.navigator || {}, a3 = tt2({ release: i3, environment: o3, user: r3.getUser() || n3.getUser(), ...s3 && { userAgent: s3 }, ...e3 }), c3 = n3.getSession(); 27171 return c3 && "ok" === c3.status && nt2(c3, { status: "exited" }), pn2(), n3.setSession(a3), r3.setSession(a3), a3; 27172} 27173function pn2() { 27174 const e3 = yt2(), t3 = mt2(), n3 = t3.getSession() || e3.getSession(); 27175 n3 && (function(e4, t4) { 27176 let n4 = {}; 27177 t4 ? n4 = { status: t4 } : "ok" === e4.status && (n4 = { status: "exited" }), nt2(e4, n4); 27178 })(n3), hn2(), e3.setSession(), t3.setSession(); 27179} 27180function hn2() { 27181 const e3 = yt2(), t3 = mt2(), n3 = bt2(), r3 = t3.getSession() || e3.getSession(); 27182 r3 && n3 && n3.captureSession(r3); 27183} 27184function fn2(e3 = false) { 27185 e3 ? pn2() : hn2(); 27186} 27187function vn2(e3, t3, n3) { 27188 return t3 || `${(function(e4) { 27189 return `${(function(e5) { 27190 const t4 = e5.protocol ? `${e5.protocol}:` : "", n4 = e5.port ? `:${e5.port}` : ""; 27191 return `${t4}//${e5.host}${n4}${e5.path ? `/${e5.path}` : ""}/api/`; 27192 })(e4)}${e4.projectId}/envelope/`; 27193 })(e3)}?${(function(e4, t4) { 27194 const n4 = { sentry_version: "7" }; 27195 return e4.publicKey && (n4.sentry_key = e4.publicKey), t4 && (n4.sentry_client = `${t4.name}/${t4.version}`), new URLSearchParams(n4).toString(); 27196 })(e3, n3)}`; 27197} 27198function mn2(e3, t3) { 27199 for (const n3 of t3) n3 && n3.afterAllSetup && n3.afterAllSetup(e3); 27200} 27201function yn2(e3, t3, n3) { 27202 if (n3[t3.name]) V2 && Q2.log(`Integration skipped because it was already installed: ${t3.name}`); 27203 else { 27204 if (n3[t3.name] = t3, -1 === gn2.indexOf(t3.name) && "function" == typeof t3.setupOnce && (t3.setupOnce(), gn2.push(t3.name)), t3.setup && "function" == typeof t3.setup && t3.setup(e3), "function" == typeof t3.preprocessEvent) { 27205 const n4 = t3.preprocessEvent.bind(t3); 27206 e3.on("preprocessEvent", ((t4, r3) => n4(t4, r3, e3))); 27207 } 27208 if ("function" == typeof t3.processEvent) { 27209 const n4 = t3.processEvent.bind(t3), r3 = Object.assign(((t4, r4) => n4(t4, r4, e3)), { id: t3.name }); 27210 e3.addEventProcessor(r3); 27211 } 27212 V2 && Q2.log(`Integration installed: ${t3.name}`); 27213 } 27214} 27215function Sn2(e3) { 27216 return void 0 === e3.type; 27217} 27218function kn2(e3) { 27219 return "transaction" === e3.type; 27220} 27221function Mn2(e3) { 27222 const t3 = []; 27223 function n3(e4) { 27224 return t3.splice(t3.indexOf(e4), 1)[0] || Promise.resolve(void 0); 27225 } 27226 return { $: t3, add: function(r3) { 27227 if (!(void 0 === e3 || t3.length < e3)) return Ze2(new bn2("Not adding Promise because buffer limit was reached.")); 27228 const i3 = r3(); 27229 return -1 === t3.indexOf(i3) && t3.push(i3), i3.then((() => n3(i3))).then(null, (() => n3(i3).then(null, (() => { 27230 })))), i3; 27231 }, drain: function(e4) { 27232 return new et2(((n4, r3) => { 27233 let i3 = t3.length; 27234 if (!i3) return n4(true); 27235 const o3 = setTimeout((() => { 27236 e4 && e4 > 0 && n4(false); 27237 }), e4); 27238 t3.forEach(((e5) => { 27239 Xe2(e5).then((() => { 27240 --i3 || (clearTimeout(o3), n4(true)); 27241 }), r3); 27242 })); 27243 })); 27244 } }; 27245} 27246function Cn2(e3, { statusCode: t3, headers: n3 }, r3 = Date.now()) { 27247 const i3 = { ...e3 }, o3 = n3 && n3["x-sentry-rate-limits"], s3 = n3 && n3["retry-after"]; 27248 if (o3) for (const e4 of o3.trim().split(",")) { 27249 const [t4, n4, , , o4] = e4.split(":", 5), s4 = parseInt(t4, 10), a3 = 1e3 * (isNaN(s4) ? 60 : s4); 27250 if (n4) for (const e5 of n4.split(";")) "metric_bucket" === e5 && o4 && !o4.split(";").includes("custom") || (i3[e5] = r3 + a3); 27251 else i3.all = r3 + a3; 27252 } 27253 else s3 ? i3.all = r3 + (function(e4, t4 = Date.now()) { 27254 const n4 = parseInt(`${e4}`, 10); 27255 if (!isNaN(n4)) return 1e3 * n4; 27256 const r4 = Date.parse(`${e4}`); 27257 return isNaN(r4) ? 6e4 : r4 - t4; 27258 })(s3, r3) : 429 === t3 && (i3.all = r3 + 6e4); 27259 return i3; 27260} 27261function En2(e3, t3, n3 = Mn2(e3.bufferSize || 64)) { 27262 let r3 = {}; 27263 return { send: function(i3) { 27264 const o3 = []; 27265 if (zt2(i3, ((t4, n4) => { 27266 const i4 = Kt2(n4); 27267 if ((function(e4, t5, n5 = Date.now()) { 27268 return (function(e5, t6) { 27269 return e5[t6] || e5.all || 0; 27270 })(e4, t5) > n5; 27271 })(r3, i4)) { 27272 const r4 = Tn2(t4, n4); 27273 e3.recordDroppedEvent("ratelimit_backoff", i4, r4); 27274 } else o3.push(t4); 27275 })), 0 === o3.length) return Xe2({}); 27276 const s3 = $t2(i3[0], o3), a3 = (t4) => { 27277 zt2(s3, ((n4, r4) => { 27278 const i4 = Tn2(n4, r4); 27279 e3.recordDroppedEvent(t4, Kt2(r4), i4); 27280 })); 27281 }; 27282 return n3.add((() => t3({ body: Ht2(s3) }).then(((e4) => (void 0 !== e4.statusCode && (e4.statusCode < 200 || e4.statusCode >= 300) && V2 && Q2.warn(`Sentry responded with status code ${e4.statusCode} to sent event.`), r3 = Cn2(r3, e4), e4)), ((e4) => { 27283 throw a3("network_error"), e4; 27284 })))).then(((e4) => e4), ((e4) => { 27285 if (e4 instanceof bn2) return V2 && Q2.error("Skipped sending event because buffer is full."), a3("queue_overflow"), Xe2({}); 27286 throw e4; 27287 })); 27288 }, flush: (e4) => n3.drain(e4) }; 27289} 27290function Tn2(e3, t3) { 27291 if ("event" === t3 || "transaction" === t3) return Array.isArray(e3) ? e3[1] : void 0; 27292} 27293function Pn2(e3, t3) { 27294 const n3 = bt2(), r3 = yt2(); 27295 if (!n3) return; 27296 const { beforeBreadcrumb: i3 = null, maxBreadcrumbs: o3 = On2 } = n3.getOptions(); 27297 if (o3 <= 0) return; 27298 const s3 = { timestamp: $e2(), ...e3 }, a3 = i3 ? G2((() => i3(s3, t3))) : s3; 27299 null !== a3 && (n3.emit && n3.emit("beforeAddBreadcrumb", a3, t3), r3.addBreadcrumb(a3, o3)); 27300} 27301function Dn2(e3) { 27302 try { 27303 let t3; 27304 try { 27305 t3 = e3.exception.values[0].stacktrace.frames; 27306 } catch (e4) { 27307 } 27308 return t3 ? (function(e4 = []) { 27309 for (let t4 = e4.length - 1; t4 >= 0; t4--) { 27310 const n3 = e4[t4]; 27311 if (n3 && "<anonymous>" !== n3.filename && "[native code]" !== n3.filename) return n3.filename || null; 27312 } 27313 return null; 27314 })(t3) : null; 27315 } catch (t3) { 27316 return V2 && Q2.error(`Cannot extract url for event ${He2(e3)}`), null; 27317 } 27318} 27319function Nn2(e3, t3, n3 = 250, r3, i3, o3, s3) { 27320 if (!(o3.exception && o3.exception.values && s3 && Ce2(s3.originalException, Error))) return; 27321 const a3 = o3.exception.values.length > 0 ? o3.exception.values[o3.exception.values.length - 1] : void 0; 27322 var c3, l3; 27323 a3 && (o3.exception.values = (c3 = Rn2(e3, t3, i3, s3.originalException, r3, o3.exception.values, a3, 0), l3 = n3, c3.map(((e4) => (e4.value && (e4.value = Ae2(e4.value, l3)), e4))))); 27324} 27325function Rn2(e3, t3, n3, r3, i3, o3, s3, a3) { 27326 if (o3.length >= n3 + 1) return o3; 27327 let c3 = [...o3]; 27328 if (Ce2(r3[i3], Error)) { 27329 Fn2(s3, a3); 27330 const o4 = e3(t3, r3[i3]), l3 = c3.length; 27331 Bn2(o4, i3, l3, a3), c3 = Rn2(e3, t3, n3, r3[i3], i3, [o4, ...c3], o4, l3); 27332 } 27333 return Array.isArray(r3.errors) && r3.errors.forEach(((r4, o4) => { 27334 if (Ce2(r4, Error)) { 27335 Fn2(s3, a3); 27336 const l3 = e3(t3, r4), u3 = c3.length; 27337 Bn2(l3, `errors[${o4}]`, u3, a3), c3 = Rn2(e3, t3, n3, r4, i3, [l3, ...c3], l3, u3); 27338 } 27339 })), c3; 27340} 27341function Fn2(e3, t3) { 27342 e3.mechanism = e3.mechanism || { type: "generic", handled: true }, e3.mechanism = { ...e3.mechanism, ..."AggregateError" === e3.type && { is_exception_group: true }, exception_id: t3 }; 27343} 27344function Bn2(e3, t3, n3, r3) { 27345 e3.mechanism = e3.mechanism || { type: "generic", handled: true }, e3.mechanism = { ...e3.mechanism, type: "chained", source: t3, exception_id: n3, parent_id: r3 }; 27346} 27347function Un2(e3) { 27348 if (!e3) return {}; 27349 const t3 = e3.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/); 27350 if (!t3) return {}; 27351 const n3 = t3[6] || "", r3 = t3[8] || ""; 27352 return { host: t3[4], path: t3[5], protocol: t3[2], search: n3, hash: r3, relative: t3[5] + n3 + r3 }; 27353} 27354function Vn2() { 27355 "console" in $2 && W2.forEach((function(e3) { 27356 e3 in $2.console && Le2($2.console, e3, (function(t3) { 27357 return H2[e3] = t3, function(...t4) { 27358 ae2("console", { args: t4, level: e3 }); 27359 const n3 = H2[e3]; 27360 n3 && n3.apply($2.console, t4); 27361 }; 27362 })); 27363 })); 27364} 27365function Jn2(e3) { 27366 return "warn" === e3 ? "warning" : ["fatal", "error", "warning", "log", "info", "debug"].includes(e3) ? e3 : "log"; 27367} 27368function qn2(e3, t3) { 27369 let n3 = ne2(e3), r3 = ne2(t3); 27370 if (!n3 && !r3) return true; 27371 if (n3 && !r3 || !n3 && r3) return false; 27372 if (r3.length !== n3.length) return false; 27373 for (let e4 = 0; e4 < r3.length; e4++) { 27374 const t4 = r3[e4], i3 = n3[e4]; 27375 if (t4.filename !== i3.filename || t4.lineno !== i3.lineno || t4.colno !== i3.colno || t4.function !== i3.function) return false; 27376 } 27377 return true; 27378} 27379function zn2(e3, t3) { 27380 let n3 = e3.fingerprint, r3 = t3.fingerprint; 27381 if (!n3 && !r3) return true; 27382 if (n3 && !r3 || !n3 && r3) return false; 27383 try { 27384 return !(n3.join("") !== r3.join("")); 27385 } catch (e4) { 27386 return false; 27387 } 27388} 27389function Wn2(e3) { 27390 return e3.exception && e3.exception.values && e3.exception.values[0]; 27391} 27392function Hn2(e3) { 27393 return void 0 === e3 ? void 0 : e3 >= 400 && e3 < 500 ? "warning" : e3 >= 500 ? "error" : void 0; 27394} 27395function Qn2(e3) { 27396 return e3 && /^function\s+\w+\(\)\s+\{\s+\[native code\]\s+\}$/.test(e3.toString()); 27397} 27398function Kn2() { 27399 if ("string" == typeof EdgeRuntime) return true; 27400 if (!(function() { 27401 if (!("fetch" in Gn2)) return false; 27402 try { 27403 return new Headers(), new Request("http://www.example.com"), new Response(), true; 27404 } catch (e4) { 27405 return false; 27406 } 27407 })()) return false; 27408 if (Qn2(Gn2.fetch)) return true; 27409 let e3 = false; 27410 const t3 = Gn2.document; 27411 if (t3 && "function" == typeof t3.createElement) try { 27412 const n3 = t3.createElement("iframe"); 27413 n3.hidden = true, t3.head.appendChild(n3), n3.contentWindow && n3.contentWindow.fetch && (e3 = Qn2(n3.contentWindow.fetch)), t3.head.removeChild(n3); 27414 } catch (e4) { 27415 z2 && Q2.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ", e4); 27416 } 27417 return e3; 27418} 27419function Yn2(e3, t3) { 27420 const n3 = "fetch"; 27421 oe2(n3, e3), se2(n3, (() => (function(e4, t4 = false) { 27422 if (t4 && !Kn2()) return; 27423 Le2($2, "fetch", (function(t5) { 27424 return function(...n4) { 27425 const r3 = new Error(), { method: i3, url: o3 } = (function(e5) { 27426 if (0 === e5.length) return { method: "GET", url: "" }; 27427 if (2 === e5.length) { 27428 const [t7, n5] = e5; 27429 return { url: Zn2(t7), method: Xn2(n5, "method") ? String(n5.method).toUpperCase() : "GET" }; 27430 } 27431 const t6 = e5[0]; 27432 return { url: Zn2(t6), method: Xn2(t6, "method") ? String(t6.method).toUpperCase() : "GET" }; 27433 })(n4), s3 = { args: n4, fetchData: { method: i3, url: o3 }, startTimestamp: 1e3 * qe2(), virtualError: r3 }; 27434 return e4 || ae2("fetch", { ...s3 }), t5.apply($2, n4).then((async (t6) => (e4 ? e4(t6) : ae2("fetch", { ...s3, endTimestamp: 1e3 * qe2(), response: t6 }), t6)), ((e5) => { 27435 throw ae2("fetch", { ...s3, endTimestamp: 1e3 * qe2(), error: e5 }), ve2(e5) && void 0 === e5.stack && (e5.stack = r3.stack, De2(e5, "framesToPop", 1)), e5; 27436 })); 27437 }; 27438 })); 27439 })(void 0, t3))); 27440} 27441function Xn2(e3, t3) { 27442 return !!e3 && "object" == typeof e3 && !!e3[t3]; 27443} 27444function Zn2(e3) { 27445 return "string" == typeof e3 ? e3 : e3 ? Xn2(e3, "url") ? e3.url : e3.toString ? e3.toString() : "" : ""; 27446} 27447function rr2() { 27448 return nr2 > 0; 27449} 27450function ir2(e3, t3 = {}) { 27451 if (!/* @__PURE__ */ (function(e4) { 27452 return "function" == typeof e4; 27453 })(e3)) return e3; 27454 try { 27455 const t4 = e3.__sentry_wrapped__; 27456 if (t4) return "function" == typeof t4 ? t4 : e3; 27457 if (Re2(e3)) return e3; 27458 } catch (t4) { 27459 return e3; 27460 } 27461 const n3 = function(...n4) { 27462 try { 27463 const r3 = n4.map(((e4) => ir2(e4, t3))); 27464 return e3.apply(this, r3); 27465 } catch (e4) { 27466 throw nr2++, setTimeout((() => { 27467 nr2--; 27468 })), (function(...e5) { 27469 const t4 = gt2(pe2()); 27470 if (2 === e5.length) { 27471 const [n5, r3] = e5; 27472 return n5 ? t4.withSetScope(n5, r3) : t4.withScope(r3); 27473 } 27474 t4.withScope(e5[0]); 27475 })(((r3) => { 27476 var i3, o3; 27477 r3.addEventProcessor(((e5) => (t3.mechanism && (Ge2(e5, void 0, void 0), Qe2(e5, t3.mechanism)), e5.extra = { ...e5.extra, arguments: n4 }, e5))), i3 = e4, mt2().captureException(i3, cn2(o3)); 27478 })), e4; 27479 } 27480 }; 27481 try { 27482 for (const t4 in e3) Object.prototype.hasOwnProperty.call(e3, t4) && (n3[t4] = e3[t4]); 27483 } catch (e4) { 27484 } 27485 Ne2(n3, e3), De2(e3, "__sentry_wrapped__", n3); 27486 try { 27487 Object.getOwnPropertyDescriptor(n3, "name").configurable && Object.defineProperty(n3, "name", { get: () => e3.name }); 27488 } catch (e4) { 27489 } 27490 return n3; 27491} 27492function sr2(e3, t3) { 27493 const n3 = lr2(e3, t3), r3 = { type: pr2(t3), value: hr2(t3) }; 27494 return n3.length && (r3.stacktrace = { frames: n3 }), void 0 === r3.type && "" === r3.value && (r3.value = "Unrecoverable error caught"), r3; 27495} 27496function ar2(e3, t3, n3, r3) { 27497 const i3 = bt2(), o3 = i3 && i3.getOptions().normalizeDepth, s3 = (function(e4) { 27498 for (const t4 in e4) if (Object.prototype.hasOwnProperty.call(e4, t4)) { 27499 const n4 = e4[t4]; 27500 if (n4 instanceof Error) return n4; 27501 } 27502 return; 27503 })(t3), a3 = { __serialized__: Vt2(t3, o3) }; 27504 if (s3) return { exception: { values: [sr2(e3, s3)] }, extra: a3 }; 27505 const c3 = { exception: { values: [{ type: ke2(t3) ? t3.constructor.name : r3 ? "UnhandledRejection" : "Error", value: gr2(t3, { isUnhandledRejection: r3 }) }] }, extra: a3 }; 27506 if (n3) { 27507 const t4 = lr2(e3, n3); 27508 t4.length && (c3.exception.values[0].stacktrace = { frames: t4 }); 27509 } 27510 return c3; 27511} 27512function cr2(e3, t3) { 27513 return { exception: { values: [sr2(e3, t3)] } }; 27514} 27515function lr2(e3, t3) { 27516 const n3 = t3.stacktrace || t3.stack || "", r3 = (function(e4) { 27517 if (e4 && ur2.test(e4.message)) return 1; 27518 return 0; 27519 })(t3), i3 = (function(e4) { 27520 if ("number" == typeof e4.framesToPop) return e4.framesToPop; 27521 return 0; 27522 })(t3); 27523 try { 27524 return e3(n3, r3, i3); 27525 } catch (e4) { 27526 } 27527 return []; 27528} 27529function dr2(e3) { 27530 return "undefined" != typeof WebAssembly && void 0 !== WebAssembly.Exception && e3 instanceof WebAssembly.Exception; 27531} 27532function pr2(e3) { 27533 const t3 = e3 && e3.name; 27534 if (!t3 && dr2(e3)) { 27535 return e3.message && Array.isArray(e3.message) && 2 == e3.message.length ? e3.message[0] : "WebAssembly.Exception"; 27536 } 27537 return t3; 27538} 27539function hr2(e3) { 27540 const t3 = e3 && e3.message; 27541 return t3 ? t3.error && "string" == typeof t3.error.message ? t3.error.message : dr2(e3) && Array.isArray(e3.message) && 2 == e3.message.length ? e3.message[1] : t3 : "No error message"; 27542} 27543function fr2(e3, t3, n3, r3, i3) { 27544 let o3; 27545 if (me2(t3) && t3.error) { 27546 return cr2(e3, t3.error); 27547 } 27548 if (ye2(t3) || ge2(t3, "DOMException")) { 27549 const i4 = t3; 27550 if ("stack" in t3) o3 = cr2(e3, t3); 27551 else { 27552 const t4 = i4.name || (ye2(i4) ? "DOMError" : "DOMException"), s3 = i4.message ? `${t4}: ${i4.message}` : t4; 27553 o3 = vr2(e3, s3, n3, r3), Ge2(o3, s3); 27554 } 27555 return "code" in i4 && (o3.tags = { ...o3.tags, "DOMException.code": `${i4.code}` }), o3; 27556 } 27557 if (ve2(t3)) return cr2(e3, t3); 27558 if (Se2(t3) || ke2(t3)) { 27559 return o3 = ar2(e3, t3, n3, i3), Qe2(o3, { synthetic: true }), o3; 27560 } 27561 return o3 = vr2(e3, t3, n3, r3), Ge2(o3, `${t3}`, void 0), Qe2(o3, { synthetic: true }), o3; 27562} 27563function vr2(e3, t3, n3, r3) { 27564 const i3 = {}; 27565 if (r3 && n3) { 27566 const r4 = lr2(e3, n3); 27567 r4.length && (i3.exception = { values: [{ value: t3, stacktrace: { frames: r4 } }] }), Qe2(i3, { synthetic: true }); 27568 } 27569 if (_e2(t3)) { 27570 const { __sentry_template_string__: e4, __sentry_template_values__: n4 } = t3; 27571 return i3.logentry = { message: e4, params: n4 }, i3; 27572 } 27573 return i3.message = t3, i3; 27574} 27575function gr2(e3, { isUnhandledRejection: t3 }) { 27576 const n3 = (function(e4, t4 = 40) { 27577 const n4 = Object.keys(Fe2(e4)); 27578 n4.sort(); 27579 const r4 = n4[0]; 27580 if (!r4) return "[object has no keys]"; 27581 if (r4.length >= t4) return Ae2(r4, t4); 27582 for (let e5 = n4.length; e5 > 0; e5--) { 27583 const r5 = n4.slice(0, e5).join(", "); 27584 if (!(r5.length > t4)) return e5 === n4.length ? r5 : Ae2(r5, t4); 27585 } 27586 return ""; 27587 })(e3), r3 = t3 ? "promise rejection" : "exception"; 27588 if (me2(e3)) return `Event \`ErrorEvent\` captured as ${r3} with message \`${e3.message}\``; 27589 if (ke2(e3)) { 27590 return `Event \`${(function(e4) { 27591 try { 27592 const t4 = Object.getPrototypeOf(e4); 27593 return t4 ? t4.constructor.name : void 0; 27594 } catch (e5) { 27595 } 27596 })(e3)}\` (type=${e3.type}) captured as ${r3}`; 27597 } 27598 return `Object captured as ${r3} with keys: ${n3}`; 27599} 27600function Mr2() { 27601 if (!br2.document) return; 27602 const e3 = ae2.bind(null, "dom"), t3 = Cr2(e3, true); 27603 br2.document.addEventListener("click", t3, false), br2.document.addEventListener("keypress", t3, false), ["EventTarget", "Node"].forEach(((t4) => { 27604 const n3 = br2[t4], r3 = n3 && n3.prototype; 27605 r3 && r3.hasOwnProperty && r3.hasOwnProperty("addEventListener") && (Le2(r3, "addEventListener", (function(t5) { 27606 return function(n4, r4, i3) { 27607 if ("click" === n4 || "keypress" == n4) try { 27608 const r5 = this.__sentry_instrumentation_handlers__ = this.__sentry_instrumentation_handlers__ || {}, o3 = r5[n4] = r5[n4] || { refCount: 0 }; 27609 if (!o3.handler) { 27610 const r6 = Cr2(e3); 27611 o3.handler = r6, t5.call(this, n4, r6, i3); 27612 } 27613 o3.refCount++; 27614 } catch (e4) { 27615 } 27616 return t5.call(this, n4, r4, i3); 27617 }; 27618 })), Le2(r3, "removeEventListener", (function(e4) { 27619 return function(t5, n4, r4) { 27620 if ("click" === t5 || "keypress" == t5) try { 27621 const n5 = this.__sentry_instrumentation_handlers__ || {}, i3 = n5[t5]; 27622 i3 && (i3.refCount--, i3.refCount <= 0 && (e4.call(this, t5, i3.handler, r4), i3.handler = void 0, delete n5[t5]), 0 === Object.keys(n5).length && delete this.__sentry_instrumentation_handlers__); 27623 } catch (e5) { 27624 } 27625 return e4.call(this, t5, n4, r4); 27626 }; 27627 }))); 27628 })); 27629} 27630function Cr2(e3, t3 = false) { 27631 return (n3) => { 27632 if (!n3 || n3._sentryCaptured) return; 27633 const r3 = (function(e4) { 27634 try { 27635 return e4.target; 27636 } catch (e5) { 27637 return null; 27638 } 27639 })(n3); 27640 if ((function(e4, t4) { 27641 return "keypress" === e4 && (!t4 || !t4.tagName || "INPUT" !== t4.tagName && "TEXTAREA" !== t4.tagName && !t4.isContentEditable); 27642 })(n3.type, r3)) return; 27643 De2(n3, "_sentryCaptured", true), r3 && !r3._sentryId && De2(r3, "_sentryId", ze2()); 27644 const i3 = "keypress" === n3.type ? "input" : n3.type; 27645 if (!(function(e4) { 27646 if (e4.type !== wr2) return false; 27647 try { 27648 if (!e4.target || e4.target._sentryId !== Sr2) return false; 27649 } catch (e5) { 27650 } 27651 return true; 27652 })(n3)) { 27653 e3({ event: n3, name: i3, global: t3 }), wr2 = n3.type, Sr2 = r3 ? r3._sentryId : void 0; 27654 } 27655 clearTimeout(_r2), _r2 = br2.setTimeout((() => { 27656 Sr2 = void 0, wr2 = void 0; 27657 }), 1e3); 27658 }; 27659} 27660function Er2(e3) { 27661 const t3 = "history"; 27662 oe2(t3, e3), se2(t3, Tr2); 27663} 27664function Tr2() { 27665 if (!(function() { 27666 const e4 = er2.chrome, t4 = e4 && e4.app && e4.app.runtime, n3 = "history" in er2 && !!er2.history.pushState && !!er2.history.replaceState; 27667 return !t4 && n3; 27668 })()) return; 27669 const e3 = br2.onpopstate; 27670 function t3(e4) { 27671 return function(...t4) { 27672 const n3 = t4.length > 2 ? t4[2] : void 0; 27673 if (n3) { 27674 const e5 = kr2, t5 = String(n3); 27675 kr2 = t5; 27676 ae2("history", { from: e5, to: t5 }); 27677 } 27678 return e4.apply(this, t4); 27679 }; 27680 } 27681 br2.onpopstate = function(...t4) { 27682 const n3 = br2.location.href, r3 = kr2; 27683 kr2 = n3; 27684 if (ae2("history", { from: r3, to: n3 }), e3) try { 27685 return e3.apply(this, t4); 27686 } catch (e4) { 27687 } 27688 }, Le2(br2.history, "pushState", t3), Le2(br2.history, "replaceState", t3); 27689} 27690function Pr2(e3) { 27691 Or2[e3] = void 0; 27692} 27693function jr2() { 27694 if (!br2.XMLHttpRequest) return; 27695 const e3 = XMLHttpRequest.prototype; 27696 e3.open = new Proxy(e3.open, { apply(e4, t3, n3) { 27697 const r3 = new Error(), i3 = 1e3 * qe2(), o3 = be2(n3[0]) ? n3[0].toUpperCase() : void 0, s3 = (function(e5) { 27698 if (be2(e5)) return e5; 27699 try { 27700 return e5.toString(); 27701 } catch (e6) { 27702 } 27703 return; 27704 })(n3[1]); 27705 if (!o3 || !s3) return e4.apply(t3, n3); 27706 t3[Ar2] = { method: o3, url: s3, request_headers: {} }, "POST" === o3 && s3.match(/sentry_key/) && (t3.__sentry_own_request__ = true); 27707 const a3 = () => { 27708 const e5 = t3[Ar2]; 27709 if (e5 && 4 === t3.readyState) { 27710 try { 27711 e5.status_code = t3.status; 27712 } catch (e6) { 27713 } 27714 ae2("xhr", { endTimestamp: 1e3 * qe2(), startTimestamp: i3, xhr: t3, virtualError: r3 }); 27715 } 27716 }; 27717 return "onreadystatechange" in t3 && "function" == typeof t3.onreadystatechange ? t3.onreadystatechange = new Proxy(t3.onreadystatechange, { apply: (e5, t4, n4) => (a3(), e5.apply(t4, n4)) }) : t3.addEventListener("readystatechange", a3), t3.setRequestHeader = new Proxy(t3.setRequestHeader, { apply(e5, t4, n4) { 27718 const [r4, i4] = n4, o4 = t4[Ar2]; 27719 return o4 && be2(r4) && be2(i4) && (o4.request_headers[r4.toLowerCase()] = i4), e5.apply(t4, n4); 27720 } }), e4.apply(t3, n3); 27721 } }), e3.send = new Proxy(e3.send, { apply(e4, t3, n3) { 27722 const r3 = t3[Ar2]; 27723 if (!r3) return e4.apply(t3, n3); 27724 void 0 !== n3[0] && (r3.body = n3[0]); 27725 return ae2("xhr", { startTimestamp: 1e3 * qe2(), xhr: t3 }), e4.apply(t3, n3); 27726 } }); 27727} 27728function Ir2(e3, t3 = (function(e4) { 27729 const t4 = Or2[e4]; 27730 if (t4) return t4; 27731 let n3 = br2[e4]; 27732 if (Qn2(n3)) return Or2[e4] = n3.bind(br2); 27733 const r3 = br2.document; 27734 if (r3 && "function" == typeof r3.createElement) try { 27735 const t5 = r3.createElement("iframe"); 27736 t5.hidden = true, r3.head.appendChild(t5); 27737 const i3 = t5.contentWindow; 27738 i3 && i3[e4] && (n3 = i3[e4]), r3.head.removeChild(t5); 27739 } catch (t5) { 27740 yr2 && Q2.warn(`Could not create sandbox iframe for ${e4} check, bailing to window.${e4}: `, t5); 27741 } 27742 return n3 ? Or2[e4] = n3.bind(br2) : n3; 27743})("fetch")) { 27744 let n3 = 0, r3 = 0; 27745 return En2(e3, (function(i3) { 27746 const o3 = i3.body.length; 27747 n3 += o3, r3++; 27748 const s3 = { body: i3.body, method: "POST", referrerPolicy: "origin", headers: e3.headers, keepalive: n3 <= 6e4 && r3 < 15, ...e3.fetchOptions }; 27749 if (!t3) return Pr2("fetch"), Ze2("No fetch implementation available"); 27750 try { 27751 return t3(e3.url, s3).then(((e4) => (n3 -= o3, r3--, { statusCode: e4.status, headers: { "x-sentry-rate-limits": e4.headers.get("X-Sentry-Rate-Limits"), "retry-after": e4.headers.get("Retry-After") } }))); 27752 } catch (e4) { 27753 return Pr2("fetch"), n3 -= o3, r3--, Ze2(e4); 27754 } 27755 })); 27756} 27757function xr2(e3, t3, n3, r3) { 27758 const i3 = { filename: e3, function: "<anonymous>" === t3 ? K2 : t3, in_app: true }; 27759 return void 0 !== n3 && (i3.lineno = n3), void 0 !== r3 && (i3.colno = r3), i3; 27760} 27761function zr2(e3) { 27762 return function(...t3) { 27763 const n3 = t3[0]; 27764 return t3[0] = ir2(n3, { mechanism: { data: { function: te2(e3) }, handled: false, type: "instrument" } }), e3.apply(this, t3); 27765 }; 27766} 27767function Wr2(e3) { 27768 return function(t3) { 27769 return e3.apply(this, [ir2(t3, { mechanism: { data: { function: "requestAnimationFrame", handler: te2(e3) }, handled: false, type: "instrument" } })]); 27770 }; 27771} 27772function Hr2(e3) { 27773 return function(...t3) { 27774 const n3 = this; 27775 return ["onload", "onerror", "onprogress", "onreadystatechange"].forEach(((e4) => { 27776 e4 in n3 && "function" == typeof n3[e4] && Le2(n3, e4, (function(t4) { 27777 const n4 = { mechanism: { data: { function: e4, handler: te2(t4) }, handled: false, type: "instrument" } }, r3 = Re2(t4); 27778 return r3 && (n4.mechanism.data.handler = te2(r3)), ir2(t4, n4); 27779 })); 27780 })), e3.apply(this, t3); 27781 }; 27782} 27783function Gr2(e3) { 27784 const t3 = tr2[e3], n3 = t3 && t3.prototype; 27785 n3 && n3.hasOwnProperty && n3.hasOwnProperty("addEventListener") && (Le2(n3, "addEventListener", (function(t4) { 27786 return function(n4, r3, i3) { 27787 try { 27788 "function" == typeof r3.handleEvent && (r3.handleEvent = ir2(r3.handleEvent, { mechanism: { data: { function: "handleEvent", handler: te2(r3), target: e3 }, handled: false, type: "instrument" } })); 27789 } catch (e4) { 27790 } 27791 return t4.apply(this, [n4, ir2(r3, { mechanism: { data: { function: "addEventListener", handler: te2(r3), target: e3 }, handled: false, type: "instrument" } }), i3]); 27792 }; 27793 })), Le2(n3, "removeEventListener", (function(e4) { 27794 return function(t4, n4, r3) { 27795 try { 27796 const i3 = n4.__sentry_wrapped__; 27797 i3 && e4.call(this, t4, i3, r3); 27798 } catch (e5) { 27799 } 27800 return e4.call(this, t4, n4, r3); 27801 }; 27802 }))); 27803} 27804function Yr2(e3) { 27805 or2 && Q2.log(`Global Handler attached: ${e3}`); 27806} 27807function Xr2() { 27808 const e3 = bt2(); 27809 return e3 && e3.getOptions() || { stackParser: () => [], attachStacktrace: false }; 27810} 27811function rs2() { 27812 return !is2() && "undefined" != typeof window && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : ""; 27813} 27814function is2() { 27815 return "undefined" != typeof navigator && navigator.product && "ReactNative" === navigator.product; 27816} 27817function os2() { 27818 return navigator && navigator.mediaDevices && navigator.mediaDevices.getUserMedia; 27819} 27820function ss2() { 27821 return !!(navigator && navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) && ((function(e3, t3) { 27822 if (!e3 || !t3) return true; 27823 switch (e3) { 27824 case "Chrome": 27825 return t3.major >= 75; 27826 case "Safari": 27827 return RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection") && !(13 === t3.major && 0 === t3.minor && 0 === t3.point); 27828 case "Firefox": 27829 return t3.major >= 67; 27830 } 27831 return true; 27832 })(ms2(), ys2()) || is2()); 27833} 27834function as2() { 27835 if (is2()) return false; 27836 if (!document) return false; 27837 var e3 = document.createElement("iframe"); 27838 return !!e3.requestFullscreen || !!e3.webkitRequestFullscreen; 27839} 27840function ps2() { 27841 var e3 = arguments.length > 0 && void 0 !== arguments[0] && arguments[0]; 27842 return !is2() && (ds2 !== cs2 && (e3 ? (function() { 27843 if (gs2()) return false; 27844 return ["Chrome", "Firefox"].includes(ms2()); 27845 })() : (function() { 27846 if (gs2()) return false; 27847 var e4 = ms2(); 27848 if ("Safari" === e4) { 27849 var t3 = Ss2(); 27850 if (t3.major < 15 || 15 === t3.major && t3.minor < 4) return false; 27851 } 27852 if ("Chrome" === e4) { 27853 return bs2().major >= 77; 27854 } 27855 if ("Firefox" === e4) { 27856 return ks2().major >= 97; 27857 } 27858 return ["Chrome", "Firefox", "Safari"].includes(e4); 27859 })())); 27860} 27861function hs2() { 27862 if (is2()) return false; 27863 if (vs2()) return false; 27864 if ("undefined" == typeof AudioWorkletNode) return false; 27865 switch (ms2()) { 27866 case "Chrome": 27867 case "Firefox": 27868 return true; 27869 case "Safari": 27870 var e3 = ys2(); 27871 return e3.major > 17 || 17 === e3.major && e3.minor >= 4; 27872 } 27873 return false; 27874} 27875function fs2() { 27876 return os2() && !(function() { 27877 var e3, t3 = ms2(); 27878 if (!rs2()) return true; 27879 switch (t3) { 27880 case "Chrome": 27881 return (e3 = bs2()).major && e3.major > 0 && e3.major < 75; 27882 case "Firefox": 27883 return (e3 = ks2()).major < 91; 27884 case "Safari": 27885 return (e3 = Ss2()).major < 13 || 13 === e3.major && e3.minor < 1; 27886 default: 27887 return true; 27888 } 27889 })(); 27890} 27891function vs2() { 27892 return rs2().match(/Linux; Android/); 27893} 27894function gs2() { 27895 var e3, t3 = rs2(), n3 = t3.match(/Mac/) && (!is2() && "undefined" != typeof window && null !== (e3 = window) && void 0 !== e3 && null !== (e3 = e3.navigator) && void 0 !== e3 && e3.maxTouchPoints ? window.navigator.maxTouchPoints : 0) >= 5; 27896 return !!(t3.match(/Mobi/) || t3.match(/Android/) || n3) || (!!rs2().match(/DailyAnd\//) || void 0); 27897} 27898function ms2() { 27899 if ("undefined" != typeof window) { 27900 var e3 = rs2(); 27901 return _s2() ? "Safari" : e3.indexOf("Edge") > -1 ? "Edge" : e3.match(/Chrome\//) ? "Chrome" : e3.indexOf("Safari") > -1 || ws2() ? "Safari" : e3.indexOf("Firefox") > -1 ? "Firefox" : e3.indexOf("MSIE") > -1 || e3.indexOf(".NET") > -1 ? "IE" : "Unknown Browser"; 27902 } 27903} 27904function ys2() { 27905 switch (ms2()) { 27906 case "Chrome": 27907 return bs2(); 27908 case "Safari": 27909 return Ss2(); 27910 case "Firefox": 27911 return ks2(); 27912 case "Edge": 27913 return (function() { 27914 var e3 = 0, t3 = 0; 27915 if ("undefined" != typeof window) { 27916 var n3 = rs2().match(/Edge\/(\d+).(\d+)/); 27917 if (n3) try { 27918 e3 = parseInt(n3[1]), t3 = parseInt(n3[2]); 27919 } catch (e4) { 27920 } 27921 } 27922 return { major: e3, minor: t3 }; 27923 })(); 27924 } 27925} 27926function bs2() { 27927 var e3 = 0, t3 = 0, n3 = 0, r3 = 0, i3 = false; 27928 if ("undefined" != typeof window) { 27929 var o3 = rs2(), s3 = o3.match(/Chrome\/(\d+).(\d+).(\d+).(\d+)/); 27930 if (s3) try { 27931 e3 = parseInt(s3[1]), t3 = parseInt(s3[2]), n3 = parseInt(s3[3]), r3 = parseInt(s3[4]), i3 = o3.indexOf("OPR/") > -1; 27932 } catch (e4) { 27933 } 27934 } 27935 return { major: e3, minor: t3, build: n3, patch: r3, opera: i3 }; 27936} 27937function _s2() { 27938 return !!rs2().match(/iPad|iPhone|iPod/i) && os2(); 27939} 27940function ws2() { 27941 return rs2().indexOf("AppleWebKit/605.1.15") > -1; 27942} 27943function Ss2() { 27944 var e3 = 0, t3 = 0, n3 = 0; 27945 if ("undefined" != typeof window) { 27946 var r3 = rs2().match(/Version\/(\d+).(\d+)(.(\d+))?/); 27947 if (r3) try { 27948 e3 = parseInt(r3[1]), t3 = parseInt(r3[2]), n3 = parseInt(r3[4]); 27949 } catch (e4) { 27950 } 27951 else (_s2() || ws2()) && (e3 = 14, t3 = 0, n3 = 3); 27952 } 27953 return { major: e3, minor: t3, point: n3 }; 27954} 27955function ks2() { 27956 var e3 = 0, t3 = 0; 27957 if ("undefined" != typeof window) { 27958 var n3 = rs2().match(/Firefox\/(\d+).(\d+)/); 27959 if (n3) try { 27960 e3 = parseInt(n3[1]), t3 = parseInt(n3[2]); 27961 } catch (e4) { 27962 } 27963 } 27964 return { major: e3, minor: t3 }; 27965} 27966function Cs2(e3, t3) { 27967 var n3 = Object.keys(e3); 27968 if (Object.getOwnPropertySymbols) { 27969 var r3 = Object.getOwnPropertySymbols(e3); 27970 t3 && (r3 = r3.filter((function(t4) { 27971 return Object.getOwnPropertyDescriptor(e3, t4).enumerable; 27972 }))), n3.push.apply(n3, r3); 27973 } 27974 return n3; 27975} 27976function Es2(e3) { 27977 for (var t3 = 1; t3 < arguments.length; t3++) { 27978 var n3 = null != arguments[t3] ? arguments[t3] : {}; 27979 t3 % 2 ? Cs2(Object(n3), true).forEach((function(t4) { 27980 u2(e3, t4, n3[t4]); 27981 })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(n3)) : Cs2(Object(n3)).forEach((function(t4) { 27982 Object.defineProperty(e3, t4, Object.getOwnPropertyDescriptor(n3, t4)); 27983 })); 27984 } 27985 return e3; 27986} 27987function Ts2() { 27988 try { 27989 var e3 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() { 27990 }))); 27991 } catch (e4) { 27992 } 27993 return (Ts2 = function() { 27994 return !!e3; 27995 })(); 27996} 27997function Ps2(e3, t3) { 27998 var n3 = Object.keys(e3); 27999 if (Object.getOwnPropertySymbols) { 28000 var r3 = Object.getOwnPropertySymbols(e3); 28001 t3 && (r3 = r3.filter((function(t4) { 28002 return Object.getOwnPropertyDescriptor(e3, t4).enumerable; 28003 }))), n3.push.apply(n3, r3); 28004 } 28005 return n3; 28006} 28007function As2() { 28008 try { 28009 var e3 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() { 28010 }))); 28011 } catch (e4) { 28012 } 28013 return (As2 = function() { 28014 return !!e3; 28015 })(); 28016} 28017function Ns2() { 28018 try { 28019 var e3 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() { 28020 }))); 28021 } catch (e4) { 28022 } 28023 return (Ns2 = function() { 28024 return !!e3; 28025 })(); 28026} 28027function Rs2(e3) { 28028 var t3 = "function" == typeof Map ? /* @__PURE__ */ new Map() : void 0; 28029 return Rs2 = function(e4) { 28030 if (null === e4 || !(function(e5) { 28031 try { 28032 return -1 !== Function.toString.call(e5).indexOf("[native code]"); 28033 } catch (t4) { 28034 return "function" == typeof e5; 28035 } 28036 })(e4)) return e4; 28037 if ("function" != typeof e4) throw new TypeError("Super expression must either be null or a function"); 28038 if (void 0 !== t3) { 28039 if (t3.has(e4)) return t3.get(e4); 28040 t3.set(e4, n3); 28041 } 28042 function n3() { 28043 return (function(e5, t4, n4) { 28044 if (Ns2()) return Reflect.construct.apply(null, arguments); 28045 var r3 = [null]; 28046 r3.push.apply(r3, t4); 28047 var i3 = new (e5.bind.apply(e5, r3))(); 28048 return n4 && c2(i3, n4.prototype), i3; 28049 })(e4, arguments, a2(this).constructor); 28050 } 28051 return n3.prototype = Object.create(e4.prototype, { constructor: { value: n3, enumerable: false, writable: true, configurable: true } }), c2(n3, e4); 28052 }, Rs2(e3); 28053} 28054function Fs2() { 28055 try { 28056 var e3 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() { 28057 }))); 28058 } catch (e4) { 28059 } 28060 return (Fs2 = function() { 28061 return !!e3; 28062 })(); 28063} 28064function Bs2(e3) { 28065 var t3, n3 = null === (t3 = window._daily) || void 0 === t3 ? void 0 : t3.pendings; 28066 if (n3) { 28067 var r3 = n3.indexOf(e3); 28068 -1 !== r3 && n3.splice(r3, 1); 28069 } 28070} 28071function Zs2(e3, t3) { 28072 for (var n3 = t3.getState(), r3 = 0, i3 = ["cam", "screen"]; r3 < i3.length; r3++) for (var o3 = i3[r3], s3 = 0, a3 = ["video", "audio"]; s3 < a3.length; s3++) { 28073 var c3 = a3[s3], l3 = "cam" === o3 ? c3 : "screen".concat(c3.charAt(0).toUpperCase() + c3.slice(1)), u3 = e3.tracks[l3]; 28074 if (u3) { 28075 var d3 = e3.local ? Gs2(n3, o3, c3) : Qs2(n3, e3.session_id, o3, c3); 28076 "playable" === u3.state && (u3.track = d3), u3.persistentTrack = d3; 28077 } 28078 } 28079} 28080function ea2(e3, t3) { 28081 try { 28082 var n3 = t3.getState(); 28083 for (var r3 in e3.tracks) if (!ta2(r3)) { 28084 var i3 = e3.tracks[r3].kind; 28085 if (i3) { 28086 var o3 = e3.tracks[r3]; 28087 if (o3) { 28088 var s3 = e3.local ? Xs2(n3, r3) : Qs2(n3, e3.session_id, r3, i3); 28089 "playable" === o3.state && (e3.tracks[r3].track = s3), o3.persistentTrack = s3; 28090 } 28091 } else console.error("unknown type for custom track"); 28092 } 28093 } catch (e4) { 28094 console.error(e4); 28095 } 28096} 28097function ta2(e3) { 28098 return ["video", "audio", "screenVideo", "screenAudio"].includes(e3); 28099} 28100function na2(e3, t3, n3) { 28101 var r3 = n3.getState(); 28102 if (e3.local) { 28103 if (e3.audio) try { 28104 e3.audioTrack = r3.local.streams.cam.stream.getAudioTracks()[0], e3.audioTrack || (e3.audio = false); 28105 } catch (e4) { 28106 } 28107 if (e3.video) try { 28108 e3.videoTrack = r3.local.streams.cam.stream.getVideoTracks()[0], e3.videoTrack || (e3.video = false); 28109 } catch (e4) { 28110 } 28111 if (e3.screen) try { 28112 e3.screenVideoTrack = r3.local.streams.screen.stream.getVideoTracks()[0], e3.screenAudioTrack = r3.local.streams.screen.stream.getAudioTracks()[0], e3.screenVideoTrack || e3.screenAudioTrack || (e3.screen = false); 28113 } catch (e4) { 28114 } 28115 } else { 28116 var i3 = true; 28117 try { 28118 var o3 = r3.participants[e3.session_id]; 28119 o3 && o3.public && o3.public.rtcType && "peer-to-peer" === o3.public.rtcType.impl && o3.private && !["connected", "completed"].includes(o3.private.peeringState) && (i3 = false); 28120 } catch (e4) { 28121 console.error(e4); 28122 } 28123 if (!i3) return e3.audio = false, e3.audioTrack = false, e3.video = false, e3.videoTrack = false, e3.screen = false, void (e3.screenTrack = false); 28124 try { 28125 r3.streams; 28126 if (e3.audio && Hs2(r3, e3.session_id, "cam-audio")) { 28127 var s3 = Qs2(r3, e3.session_id, "cam", "audio"); 28128 s3 && (t3 && t3.audioTrack && t3.audioTrack.id === s3.id ? e3.audioTrack = s3 : s3.muted || (e3.audioTrack = s3)), e3.audioTrack || (e3.audio = false); 28129 } 28130 if (e3.video && Hs2(r3, e3.session_id, "cam-video")) { 28131 var a3 = Qs2(r3, e3.session_id, "cam", "video"); 28132 a3 && (t3 && t3.videoTrack && t3.videoTrack.id === a3.id ? e3.videoTrack = a3 : a3.muted || (e3.videoTrack = a3)), e3.videoTrack || (e3.video = false); 28133 } 28134 if (e3.screen && Hs2(r3, e3.session_id, "screen-audio")) { 28135 var c3 = Qs2(r3, e3.session_id, "screen", "audio"); 28136 c3 && (t3 && t3.screenAudioTrack && t3.screenAudioTrack.id === c3.id ? e3.screenAudioTrack = c3 : c3.muted || (e3.screenAudioTrack = c3)); 28137 } 28138 if (e3.screen && Hs2(r3, e3.session_id, "screen-video")) { 28139 var l3 = Qs2(r3, e3.session_id, "screen", "video"); 28140 l3 && (t3 && t3.screenVideoTrack && t3.screenVideoTrack.id === l3.id ? e3.screenVideoTrack = l3 : l3.muted || (e3.screenVideoTrack = l3)); 28141 } 28142 e3.screenVideoTrack || e3.screenAudioTrack || (e3.screen = false); 28143 } catch (e4) { 28144 console.error("unexpected error matching up tracks", e4); 28145 } 28146 } 28147} 28148function ra2(e3, t3) { 28149 var n3 = "undefined" != typeof Symbol && e3[Symbol.iterator] || e3["@@iterator"]; 28150 if (!n3) { 28151 if (Array.isArray(e3) || (n3 = (function(e4, t4) { 28152 if (e4) { 28153 if ("string" == typeof e4) return ia2(e4, t4); 28154 var n4 = {}.toString.call(e4).slice(8, -1); 28155 return "Object" === n4 && e4.constructor && (n4 = e4.constructor.name), "Map" === n4 || "Set" === n4 ? Array.from(e4) : "Arguments" === n4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n4) ? ia2(e4, t4) : void 0; 28156 } 28157 })(e3)) || t3 && e3 && "number" == typeof e3.length) { 28158 n3 && (e3 = n3); 28159 var r3 = 0, i3 = function() { 28160 }; 28161 return { s: i3, n: function() { 28162 return r3 >= e3.length ? { done: true } : { done: false, value: e3[r3++] }; 28163 }, e: function(e4) { 28164 throw e4; 28165 }, f: i3 }; 28166 } 28167 throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 28168 } 28169 var o3, s3 = true, a3 = false; 28170 return { s: function() { 28171 n3 = n3.call(e3); 28172 }, n: function() { 28173 var e4 = n3.next(); 28174 return s3 = e4.done, e4; 28175 }, e: function(e4) { 28176 a3 = true, o3 = e4; 28177 }, f: function() { 28178 try { 28179 s3 || null == n3.return || n3.return(); 28180 } finally { 28181 if (a3) throw o3; 28182 } 28183 } }; 28184} 28185function ia2(e3, t3) { 28186 (null == t3 || t3 > e3.length) && (t3 = e3.length); 28187 for (var n3 = 0, r3 = Array(t3); n3 < t3; n3++) r3[n3] = e3[n3]; 28188 return r3; 28189} 28190function aa2(e3, t3) { 28191 var n3 = "undefined" != typeof Symbol && e3[Symbol.iterator] || e3["@@iterator"]; 28192 if (!n3) { 28193 if (Array.isArray(e3) || (n3 = (function(e4, t4) { 28194 if (e4) { 28195 if ("string" == typeof e4) return ca2(e4, t4); 28196 var n4 = {}.toString.call(e4).slice(8, -1); 28197 return "Object" === n4 && e4.constructor && (n4 = e4.constructor.name), "Map" === n4 || "Set" === n4 ? Array.from(e4) : "Arguments" === n4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n4) ? ca2(e4, t4) : void 0; 28198 } 28199 })(e3)) || t3 && e3 && "number" == typeof e3.length) { 28200 n3 && (e3 = n3); 28201 var r3 = 0, i3 = function() { 28202 }; 28203 return { s: i3, n: function() { 28204 return r3 >= e3.length ? { done: true } : { done: false, value: e3[r3++] }; 28205 }, e: function(e4) { 28206 throw e4; 28207 }, f: i3 }; 28208 } 28209 throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 28210 } 28211 var o3, s3 = true, a3 = false; 28212 return { s: function() { 28213 n3 = n3.call(e3); 28214 }, n: function() { 28215 var e4 = n3.next(); 28216 return s3 = e4.done, e4; 28217 }, e: function(e4) { 28218 a3 = true, o3 = e4; 28219 }, f: function() { 28220 try { 28221 s3 || null == n3.return || n3.return(); 28222 } finally { 28223 if (a3) throw o3; 28224 } 28225 } }; 28226} 28227function ca2(e3, t3) { 28228 (null == t3 || t3 > e3.length) && (t3 = e3.length); 28229 for (var n3 = 0, r3 = Array(t3); n3 < t3; n3++) r3[n3] = e3[n3]; 28230 return r3; 28231} 28232function da2(e3) { 28233 ha2() ? (function(e4) { 28234 oa2.has(e4) || (oa2.set(e4, {}), navigator.mediaDevices.enumerateDevices().then((function(t3) { 28235 oa2.has(e4) && (oa2.get(e4).lastDevicesString = JSON.stringify(t3), sa2 || (sa2 = (function() { 28236 var e5 = p2((function* () { 28237 var e6, t4 = yield navigator.mediaDevices.enumerateDevices(), n3 = ra2(oa2.keys()); 28238 try { 28239 for (n3.s(); !(e6 = n3.n()).done; ) { 28240 var r3 = e6.value, i3 = JSON.stringify(t4); 28241 i3 !== oa2.get(r3).lastDevicesString && (oa2.get(r3).lastDevicesString = i3, r3(t4)); 28242 } 28243 } catch (e7) { 28244 n3.e(e7); 28245 } finally { 28246 n3.f(); 28247 } 28248 })); 28249 return function() { 28250 return e5.apply(this, arguments); 28251 }; 28252 })(), navigator.mediaDevices.addEventListener("devicechange", sa2))); 28253 })).catch((function() { 28254 }))); 28255 })(e3) : (function(e4) { 28256 la2.has(e4) || (la2.set(e4, {}), navigator.mediaDevices.enumerateDevices().then((function(t3) { 28257 la2.has(e4) && (la2.get(e4).lastDevicesString = JSON.stringify(t3), ua2 || (ua2 = setInterval(p2((function* () { 28258 var e5, t4 = yield navigator.mediaDevices.enumerateDevices(), n3 = aa2(la2.keys()); 28259 try { 28260 for (n3.s(); !(e5 = n3.n()).done; ) { 28261 var r3 = e5.value, i3 = JSON.stringify(t4); 28262 i3 !== la2.get(r3).lastDevicesString && (la2.get(r3).lastDevicesString = i3, r3(t4)); 28263 } 28264 } catch (e6) { 28265 n3.e(e6); 28266 } finally { 28267 n3.f(); 28268 } 28269 })), 3e3))); 28270 }))); 28271 })(e3); 28272} 28273function pa2(e3) { 28274 ha2() ? (function(e4) { 28275 oa2.has(e4) && (oa2.delete(e4), 0 === oa2.size && sa2 && (navigator.mediaDevices.removeEventListener("devicechange", sa2), sa2 = null)); 28276 })(e3) : (function(e4) { 28277 la2.has(e4) && (la2.delete(e4), 0 === la2.size && ua2 && (clearInterval(ua2), ua2 = null)); 28278 })(e3); 28279} 28280function ha2() { 28281 var e3; 28282 return is2() || void 0 !== (null === (e3 = navigator.mediaDevices) || void 0 === e3 ? void 0 : e3.ondevicechange); 28283} 28284function va2(e3, t3) { 28285 var n3 = t3.isLocalScreenVideo; 28286 return e3 && "live" === e3.readyState && !(function(e4, t4) { 28287 return (!t4.isLocalScreenVideo || "Chrome" !== ms2()) && e4.muted && !fa2.has(e4.id); 28288 })(e3, { isLocalScreenVideo: n3 }); 28289} 28290function ga2(e3, t3) { 28291 var n3 = Object.keys(e3); 28292 if (Object.getOwnPropertySymbols) { 28293 var r3 = Object.getOwnPropertySymbols(e3); 28294 t3 && (r3 = r3.filter((function(t4) { 28295 return Object.getOwnPropertyDescriptor(e3, t4).enumerable; 28296 }))), n3.push.apply(n3, r3); 28297 } 28298 return n3; 28299} 28300function ma2(e3) { 28301 for (var t3 = 1; t3 < arguments.length; t3++) { 28302 var n3 = null != arguments[t3] ? arguments[t3] : {}; 28303 t3 % 2 ? ga2(Object(n3), true).forEach((function(t4) { 28304 u2(e3, t4, n3[t4]); 28305 })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(n3)) : ga2(Object(n3)).forEach((function(t4) { 28306 Object.defineProperty(e3, t4, Object.getOwnPropertyDescriptor(n3, t4)); 28307 })); 28308 } 28309 return e3; 28310} 28311function Pa2(e3, t3) { 28312 var n3 = Object.keys(e3); 28313 if (Object.getOwnPropertySymbols) { 28314 var r3 = Object.getOwnPropertySymbols(e3); 28315 t3 && (r3 = r3.filter((function(t4) { 28316 return Object.getOwnPropertyDescriptor(e3, t4).enumerable; 28317 }))), n3.push.apply(n3, r3); 28318 } 28319 return n3; 28320} 28321function Aa2(e3) { 28322 for (var t3 = 1; t3 < arguments.length; t3++) { 28323 var n3 = null != arguments[t3] ? arguments[t3] : {}; 28324 t3 % 2 ? Pa2(Object(n3), true).forEach((function(t4) { 28325 u2(e3, t4, n3[t4]); 28326 })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e3, Object.getOwnPropertyDescriptors(n3)) : Pa2(Object(n3)).forEach((function(t4) { 28327 Object.defineProperty(e3, t4, Object.getOwnPropertyDescriptor(n3, t4)); 28328 })); 28329 } 28330 return e3; 28331} 28332function ja2() { 28333 try { 28334 var e3 = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() { 28335 }))); 28336 } catch (e4) { 28337 } 28338 return (ja2 = function() { 28339 return !!e3; 28340 })(); 28341} 28342function Ia2(e3, t3) { 28343 var n3 = "undefined" != typeof Symbol && e3[Symbol.iterator] || e3["@@iterator"]; 28344 if (!n3) { 28345 if (Array.isArray(e3) || (n3 = (function(e4, t4) { 28346 if (e4) { 28347 if ("string" == typeof e4) return xa2(e4, t4); 28348 var n4 = {}.toString.call(e4).slice(8, -1); 28349 return "Object" === n4 && e4.constructor && (n4 = e4.constructor.name), "Map" === n4 || "Set" === n4 ? Array.from(e4) : "Arguments" === n4 || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n4) ? xa2(e4, t4) : void 0; 28350 } 28351 })(e3)) || t3 && e3 && "number" == typeof e3.length) { 28352 n3 && (e3 = n3); 28353 var r3 = 0, i3 = function() { 28354 }; 28355 return { s: i3, n: function() { 28356 return r3 >= e3.length ? { done: true } : { done: false, value: e3[r3++] }; 28357 }, e: function(e4) { 28358 throw e4; 28359 }, f: i3 }; 28360 } 28361 throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); 28362 } 28363 var o3, s3 = true, a3 = false; 28364 return { s: function() { 28365 n3 = n3.call(e3); 28366 }, n: function() { 28367 var e4 = n3.next(); 28368 return s3 = e4.done, e4; 28369 }, e: function(e4) { 28370 a3 = true, o3 = e4; 28371 }, f: function() { 28372 try { 28373 s3 || null == n3.return || n3.return(); 28374 } finally { 28375 if (a3) throw o3; 28376 } 28377 } }; 28378} 28379function xa2(e3, t3) { 28380 (null == t3 || t3 > e3.length) && (t3 = e3.length); 28381 for (var n3 = 0, r3 = Array(t3); n3 < t3; n3++) r3[n3] = e3[n3]; 28382 return r3; 28383} 28384function Ga2(e3, t3) { 28385 var n3 = {}; 28386 for (var r3 in e3) if (e3[r3] instanceof MediaStreamTrack) console.warn("MediaStreamTrack found in props or cache.", r3), n3[r3] = Qo2; 28387 else if ("dailyConfig" === r3) { 28388 if (e3[r3].modifyLocalSdpHook) { 28389 var i3 = window._daily.instances[t3].customCallbacks || {}; 28390 i3.modifyLocalSdpHook = e3[r3].modifyLocalSdpHook, window._daily.instances[t3].customCallbacks = i3, delete e3[r3].modifyLocalSdpHook; 28391 } 28392 if (e3[r3].modifyRemoteSdpHook) { 28393 var o3 = window._daily.instances[t3].customCallbacks || {}; 28394 o3.modifyRemoteSdpHook = e3[r3].modifyRemoteSdpHook, window._daily.instances[t3].customCallbacks = o3, delete e3[r3].modifyRemoteSdpHook; 28395 } 28396 n3[r3] = e3[r3]; 28397 } else n3[r3] = e3[r3]; 28398 return n3; 28399} 28400function Qa2(e3) { 28401 var t3 = arguments.length > 2 ? arguments[2] : void 0; 28402 if (e3 !== oi2) { 28403 var n3 = "".concat(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "This daily-js method", " only supported after join."); 28404 throw t3 && (n3 += " ".concat(t3)), console.error(n3), new Error(n3); 28405 } 28406} 28407function Ka2(e3, t3) { 28408 return [ii2, oi2].includes(e3) || t3; 28409} 28410function Ya2(e3, t3) { 28411 var n3 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "This daily-js method", r3 = arguments.length > 3 ? arguments[3] : void 0; 28412 if (Ka2(e3, t3)) { 28413 var i3 = "".concat(n3, " not supported after joining a meeting."); 28414 throw r3 && (i3 += " ".concat(r3)), console.error(i3), new Error(i3); 28415 } 28416} 28417function Xa2(e3) { 28418 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "This daily-js method", n3 = arguments.length > 2 ? arguments[2] : void 0; 28419 if (!e3) { 28420 var r3 = "".concat(t3, arguments.length > 3 && void 0 !== arguments[3] && arguments[3] ? " requires preAuth() or startCamera() to initialize call state." : " requires preAuth(), startCamera(), or join() to initialize call state."); 28421 throw n3 && (r3 += " ".concat(n3)), console.error(r3), new Error(r3); 28422 } 28423} 28424function Za2(e3) { 28425 if (e3) { 28426 var t3 = "A pre-call quality test is in progress. Please try ".concat(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "This daily-js method", " again once testing has completed. Use stopTestCallQuality() to end it early."); 28427 throw console.error(t3), new Error(t3); 28428 } 28429} 28430function ec2(e3) { 28431 if (!e3) { 28432 var t3 = "".concat(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "This daily-js method", " is only supported on custom callObject instances"); 28433 throw console.error(t3), new Error(t3); 28434 } 28435} 28436function tc2(e3) { 28437 if (e3) { 28438 var t3 = "".concat(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "This daily-js method", " is only supported as part of Daily's Prebuilt"); 28439 throw console.error(t3), new Error(t3); 28440 } 28441} 28442function nc2() { 28443 if (is2()) throw new Error("This daily-js method is not currently supported in React Native"); 28444} 28445function rc2() { 28446 if (!is2()) throw new Error("This daily-js method is only supported in React Native"); 28447} 28448function ic2(e3) { 28449 if (void 0 === e3) return true; 28450 var t3; 28451 if ("string" == typeof e3) t3 = e3; 28452 else try { 28453 t3 = JSON.stringify(e3), S2(JSON.parse(t3), e3) || console.warn("The userData provided will be modified when serialized."); 28454 } catch (e4) { 28455 throw Error("userData must be serializable to JSON: ".concat(e4)); 28456 } 28457 if (t3.length > 4096) throw Error("userData is too large (".concat(t3.length, " characters). Maximum size suppported is ").concat(4096, ".")); 28458 return true; 28459} 28460function oc2(e3, t3) { 28461 for (var n3 = t3.allowAllParticipantsKey, r3 = function(e4) { 28462 var t4 = ["local"]; 28463 return n3 || t4.push("*"), e4 && !t4.includes(e4); 28464 }, i3 = function(e4) { 28465 return !!(void 0 === e4.layer || Number.isInteger(e4.layer) && e4.layer >= 0 || "inherit" === e4.layer); 28466 }, o3 = function(e4) { 28467 return !!e4 && (!(e4.video && !i3(e4.video)) && !(e4.screenVideo && !i3(e4.screenVideo))); 28468 }, s3 = 0, a3 = Object.entries(e3); s3 < a3.length; s3++) { 28469 var c3 = f2(a3[s3], 2), l3 = c3[0], u3 = c3[1]; 28470 if (!r3(l3) || !o3(u3)) return false; 28471 } 28472 return true; 28473} 28474function sc2(e3) { 28475 if ("object" !== n2(e3)) return false; 28476 for (var t3 = 0, r3 = Object.entries(e3); t3 < r3.length; t3++) { 28477 var i3 = f2(r3[t3], 2), o3 = i3[0], s3 = i3[1]; 28478 switch (o3) { 28479 case "video": 28480 if ("object" !== n2(s3)) return false; 28481 for (var a3 = 0, c3 = Object.entries(s3); a3 < c3.length; a3++) { 28482 var l3 = f2(c3[a3], 2), u3 = l3[0], d3 = l3[1]; 28483 switch (u3) { 28484 case "processor": 28485 if (!lc2(d3)) return false; 28486 break; 28487 case "settings": 28488 if (!uc2(d3)) return false; 28489 break; 28490 default: 28491 return false; 28492 } 28493 } 28494 break; 28495 case "audio": 28496 if ("object" !== n2(s3)) return false; 28497 for (var p3 = 0, h3 = Object.entries(s3); p3 < h3.length; p3++) { 28498 var v3 = f2(h3[p3], 2), g3 = v3[0], m3 = v3[1]; 28499 switch (g3) { 28500 case "processor": 28501 if (!cc2(m3)) return false; 28502 break; 28503 case "settings": 28504 if (!uc2(m3)) return false; 28505 break; 28506 default: 28507 return false; 28508 } 28509 } 28510 break; 28511 default: 28512 return false; 28513 } 28514 } 28515 return true; 28516} 28517function ac2(e3, t3, n3) { 28518 var r3, i3 = []; 28519 e3.video && e3.video.processor && (ps2(null !== (r3 = null == t3 ? void 0 : t3.useLegacyVideoProcessor) && void 0 !== r3 && r3) || (e3.video.settings ? delete e3.video.processor : delete e3.video, i3.push("video"))); 28520 e3.audio && e3.audio.processor && (hs2() || (e3.audio.settings ? delete e3.audio.processor : delete e3.audio, i3.push("audio"))), i3.length > 0 && console.error("Ignoring settings for browser- or platform-unsupported input processor(s): ".concat(i3.join(", "))), e3.audio && e3.audio.settings && (e3.audio.settings.customTrack ? (n3.audioTrack = e3.audio.settings.customTrack, e3.audio.settings = { customTrack: Qo2 }) : delete n3.audioTrack), e3.video && e3.video.settings && (e3.video.settings.customTrack ? (n3.videoTrack = e3.video.settings.customTrack, e3.video.settings = { customTrack: Qo2 }) : delete n3.videoTrack); 28521} 28522function cc2(e3) { 28523 if (is2()) return console.warn("Video processing is not yet supported in React Native"), false; 28524 var t3 = ["type"]; 28525 return !!e3 && ("object" === n2(e3) && (Object.keys(e3).filter((function(e4) { 28526 return !t3.includes(e4); 28527 })).forEach((function(t4) { 28528 console.warn("invalid key inputSettings -> audio -> processor : ".concat(t4)), delete e3[t4]; 28529 })), !!(function(e4) { 28530 if ("string" != typeof e4) return false; 28531 if (!Object.values(Yo2).includes(e4)) return console.error("inputSettings audio processor type invalid"), false; 28532 return true; 28533 })(e3.type))); 28534} 28535function lc2(e3) { 28536 if (is2()) return console.warn("Video processing is not yet supported in React Native"), false; 28537 var t3 = ["type", "config"]; 28538 if (!e3) return false; 28539 if ("object" !== n2(e3)) return false; 28540 if (!(function(e4) { 28541 if ("string" != typeof e4) return false; 28542 if (!Object.values(Ko2).includes(e4)) return console.error("inputSettings video processor type invalid"), false; 28543 return true; 28544 })(e3.type)) return false; 28545 if (e3.config) { 28546 if ("object" !== n2(e3.config)) return false; 28547 if (!(function(e4, t4) { 28548 var n3 = Object.keys(t4); 28549 if (0 === n3.length) return true; 28550 var r3 = "invalid object in inputSettings -> video -> processor -> config"; 28551 switch (e4) { 28552 case Ko2.BGBLUR: 28553 return n3.length > 1 || "strength" !== n3[0] ? (console.error(r3), false) : !("number" != typeof t4.strength || t4.strength <= 0 || t4.strength > 1 || isNaN(t4.strength)) || (console.error("".concat(r3, "; expected: {0 < strength <= 1}, got: ").concat(t4.strength)), false); 28554 case Ko2.BGIMAGE: 28555 return !(void 0 !== t4.source && !(function(e5) { 28556 if ("default" === e5.source) return e5.type = "default", true; 28557 if (e5.source instanceof ArrayBuffer) return true; 28558 if (U2(e5.source)) return e5.type = "url", !!(function(e6) { 28559 var t6 = new URL(e6), n5 = t6.pathname; 28560 if ("data:" === t6.protocol) try { 28561 var r4 = n5.substring(n5.indexOf(":") + 1, n5.indexOf(";")).split("/")[1]; 28562 return Zo2.includes(r4); 28563 } catch (e7) { 28564 return console.error("failed to deduce blob content type", e7), false; 28565 } 28566 var i3 = n5.split(".").at(-1).toLowerCase().trim(); 28567 return Zo2.includes(i3); 28568 })(e5.source) || (console.error("invalid image type; supported types: [".concat(Zo2.join(", "), "]")), false); 28569 return t5 = e5.source, n4 = Number(t5), isNaN(n4) || !Number.isInteger(n4) || n4 <= 0 || n4 > 10 ? (console.error("invalid image selection; must be an int, > 0, <= ".concat(10)), false) : (e5.type = "daily-preselect", true); 28570 var t5, n4; 28571 })(t4)); 28572 default: 28573 return true; 28574 } 28575 })(e3.type, e3.config)) return false; 28576 } 28577 return Object.keys(e3).filter((function(e4) { 28578 return !t3.includes(e4); 28579 })).forEach((function(t4) { 28580 console.warn("invalid key inputSettings -> video -> processor : ".concat(t4)), delete e3[t4]; 28581 })), true; 28582} 28583function uc2(e3) { 28584 return "object" === n2(e3) && (!e3.customTrack || e3.customTrack instanceof MediaStreamTrack); 28585} 28586function dc2() { 28587 var e3 = Object.values(Ko2).join(" | "), t3 = Object.values(Yo2).join(" | "); 28588 return "inputSettings must be of the form: { video?: { processor?: { type: [ ".concat(e3, " ], config?: {} } }, audio?: { processor: {type: [ ").concat(t3, " ] } } }"); 28589} 28590function pc2(e3) { 28591 var t3 = e3.allowAllParticipantsKey; 28592 return "receiveSettings must be of the form { [<remote participant id> | ".concat(yi2).concat(t3 ? ' | "'.concat("*", '"') : "", "]: ") + '{ [video: [{ layer: [<non-negative integer> | "inherit"] } | "inherit"]], [screenVideo: [{ layer: [<non-negative integer> | "inherit"] } | "inherit"]] }}}'; 28593} 28594function hc2() { 28595 return "customIntegrations should be an object of type ".concat(JSON.stringify(qa2), "."); 28596} 28597function fc2(e3) { 28598 if (e3 && "object" !== n2(e3) || Array.isArray(e3)) return console.error("customTrayButtons should be an Object of the type ".concat(JSON.stringify($a2), ".")), false; 28599 if (e3) for (var t3 = 0, r3 = Object.entries(e3); t3 < r3.length; t3++) for (var i3 = f2(r3[t3], 1)[0], o3 = 0, s3 = Object.entries(e3[i3]); o3 < s3.length; o3++) { 28600 var a3 = f2(s3[o3], 2), c3 = a3[0], l3 = a3[1], u3 = $a2.id[c3]; 28601 if (!u3) return console.error("customTrayButton does not support key ".concat(c3)), false; 28602 switch (c3) { 28603 case "iconPath": 28604 case "iconPathDarkMode": 28605 if (!U2(l3)) return console.error("customTrayButton ".concat(c3, " should be a url.")), false; 28606 break; 28607 case "visualState": 28608 if (!["default", "sidebar-open", "active"].includes(l3)) return console.error("customTrayButton ".concat(c3, " should be ").concat(u3, ". Got: ").concat(l3)), false; 28609 break; 28610 default: 28611 if (n2(l3) !== u3) return console.error("customTrayButton ".concat(c3, " should be a ").concat(u3, ".")), false; 28612 } 28613 } 28614 return true; 28615} 28616function vc2(e3) { 28617 if (!e3 || e3 && "object" !== n2(e3) || Array.isArray(e3)) return console.error(hc2()), false; 28618 for (var t3 = function(e4) { 28619 return "".concat(e4, " should be ").concat(qa2.id[e4]); 28620 }, r3 = function(e4, t4) { 28621 return console.error("customIntegration ".concat(e4, ": ").concat(t4)); 28622 }, i3 = 0, o3 = Object.entries(e3); i3 < o3.length; i3++) { 28623 var s3 = f2(o3[i3], 1)[0]; 28624 if (!("label" in e3[s3])) return r3(s3, "label is required"), false; 28625 if (!("location" in e3[s3])) return r3(s3, "location is required"), false; 28626 if (!("src" in e3[s3]) && !("srcdoc" in e3[s3])) return r3(s3, "src or srcdoc is required"), false; 28627 for (var a3 = 0, c3 = Object.entries(e3[s3]); a3 < c3.length; a3++) { 28628 var l3 = f2(c3[a3], 2), u3 = l3[0], d3 = l3[1]; 28629 switch (u3) { 28630 case "allow": 28631 case "csp": 28632 case "name": 28633 case "referrerPolicy": 28634 case "sandbox": 28635 if ("string" != typeof d3) return r3(s3, t3(u3)), false; 28636 break; 28637 case "iconURL": 28638 if (!U2(d3)) return r3(s3, "".concat(u3, " should be a url")), false; 28639 break; 28640 case "src": 28641 if ("srcdoc" in e3[s3]) return r3(s3, "cannot have both src and srcdoc"), false; 28642 if (!U2(d3)) return r3(s3, 'src "'.concat(d3, '" is not a valid URL')), false; 28643 break; 28644 case "srcdoc": 28645 if ("src" in e3[s3]) return r3(s3, "cannot have both src and srcdoc"), false; 28646 if ("string" != typeof d3) return r3(s3, t3(u3)), false; 28647 break; 28648 case "location": 28649 if (!["main", "sidebar"].includes(d3)) return r3(s3, t3(u3)), false; 28650 break; 28651 case "controlledBy": 28652 if ("*" !== d3 && "owners" !== d3 && (!Array.isArray(d3) || d3.some((function(e4) { 28653 return "string" != typeof e4; 28654 })))) return r3(s3, t3(u3)), false; 28655 break; 28656 case "shared": 28657 if ((!Array.isArray(d3) || d3.some((function(e4) { 28658 return "string" != typeof e4; 28659 }))) && "owners" !== d3 && "boolean" != typeof d3) return r3(s3, t3(u3)), false; 28660 break; 28661 default: 28662 if (!qa2.id[u3]) return console.error("customIntegration does not support key ".concat(u3)), false; 28663 } 28664 } 28665 } 28666 return true; 28667} 28668function gc2(e3, t3) { 28669 if (void 0 === t3) return false; 28670 switch (n2(t3)) { 28671 case "string": 28672 return n2(e3) === t3; 28673 case "object": 28674 if ("object" !== n2(e3)) return false; 28675 for (var r3 in e3) if (!gc2(e3[r3], t3[r3])) return false; 28676 return true; 28677 default: 28678 return false; 28679 } 28680} 28681function mc2(e3, t3) { 28682 var n3 = e3.sessionId, r3 = e3.toEndPoint, i3 = e3.callerId, o3 = e3.useSipRefer; 28683 if (!n3 || !r3) throw new Error("".concat(t3, "() requires a sessionId and toEndPoint")); 28684 if ("string" != typeof n3 || "string" != typeof r3) throw new Error("Invalid paramater: sessionId and toEndPoint must be of type string"); 28685 if (o3 && !r3.startsWith("sip:")) throw new Error('"toEndPoint" must be a "sip" address'); 28686 if (!r3.startsWith("sip:") && !r3.startsWith("+")) throw new Error("toEndPoint: ".concat(r3, ' must starts with either "sip:" or "+"')); 28687 if (i3 && "string" != typeof i3) throw new Error("callerId must be of type string"); 28688 if (i3 && !r3.startsWith("+")) throw new Error("callerId is only valid when transferring to a PSTN number"); 28689} 28690function yc2(e3) { 28691 if ("object" !== n2(e3)) throw new Error('RemoteMediaPlayerSettings: must be "object" type'); 28692 if (e3.state && !Object.values(Xo2).includes(e3.state)) throw new Error("Invalid value for RemoteMediaPlayerSettings.state, valid values are: " + JSON.stringify(Xo2)); 28693 if (e3.volume) { 28694 if ("number" != typeof e3.volume) throw new Error('RemoteMediaPlayerSettings.volume: must be "number" type'); 28695 if (e3.volume < 0 || e3.volume > 2) throw new Error("RemoteMediaPlayerSettings.volume: must be between 0.0 - 2.0"); 28696 } 28697} 28698function bc2(e3, t3, n3) { 28699 return !("number" != typeof e3 || e3 < t3 || e3 > n3); 28700} 28701function _c2(e3, t3) { 28702 return e3 && !t3 && delete e3.data, e3; 28703} 28704var g2, m2, y2, b2, _2, k2, M2, C2, E2, T2, O2, P2, A2, j2, I2, x2, L2, D2, V2, J2, $2, z2, W2, H2, Q2, K2, Y2, X2, ee2, re2, ie2, ce2, ue2, fe2, Te2, qe2, Ye2, et2, st2, lt2, ut2, dt2, St2, Ct2, xt2, Nt2, Qt2, en2, tn2, nn2, ln2, gn2, bn2, _n2, wn2, On2, An2, jn2, In2, xn2, Ln2, $n2, Gn2, er2, tr2, nr2, or2, ur2, mr2, yr2, br2, _r2, wr2, Sr2, kr2, Or2, Ar2, Lr2, Dr2, Nr2, Rr2, Fr2, Br2, Ur2, Vr2, Jr2, $r2, qr2, Qr2, Kr2, Zr2, ei2, ti2, ni2, ri2, ii2, oi2, si2, ai2, ci2, li2, ui2, di2, pi2, hi2, fi2, vi2, gi2, mi2, yi2, bi2, _i2, wi2, Si2, ki2, Mi2, Ci2, Ei2, Ti2, Oi2, Pi2, Ai2, ji2, Ii2, xi2, Li2, Di2, Ni2, Ri2, Fi2, Bi2, Ui2, Vi2, Ji2, $i2, qi2, zi2, Wi2, Hi2, Gi2, Qi2, Ki2, Yi2, Xi2, Zi2, eo2, to2, no2, ro2, io2, oo2, so2, ao2, co2, lo2, uo2, po2, ho2, fo2, vo2, go2, mo2, yo2, bo2, _o2, wo2, So2, ko2, Mo2, Co2, Eo2, To2, Oo2, Po2, Ao2, jo2, Io2, xo2, Lo2, Do2, No2, Ro2, Fo2, Bo2, Uo2, Vo2, Jo2, $o2, qo2, zo2, Wo2, Ho2, Go2, Qo2, Ko2, Yo2, Xo2, Zo2, es2, ts2, ns2, cs2, ls2, us2, ds2, Ms2, Os2, js2, Is2, xs2, Ls2, Ds2, Us2, Vs2, Js2, $s2, qs2, zs2, Ws2, Hs2, Gs2, Qs2, Ks2, Ys2, Xs2, oa2, sa2, la2, ua2, fa2, ya2, ba2, _a2, wa2, Sa2, ka2, Ma2, Ca2, Ea2, Ta2, Oa2, La2, Da2, Na2, Ra2, Fa2, Ba2, Ua2, Va2, Ja2, $a2, qa2, za2, Wa2, Ha2; 28705var init_daily_esm = __esm({ 28706 "node_modules/@daily-co/daily-js/dist/daily-esm.js"() { 28707 m2 = { exports: {} }; 28708 y2 = (function() { 28709 if (g2) return m2.exports; 28710 g2 = 1; 28711 var e3, t3 = "object" == typeof Reflect ? Reflect : null, n3 = t3 && "function" == typeof t3.apply ? t3.apply : function(e4, t4, n4) { 28712 return Function.prototype.apply.call(e4, t4, n4); 28713 }; 28714 e3 = t3 && "function" == typeof t3.ownKeys ? t3.ownKeys : Object.getOwnPropertySymbols ? function(e4) { 28715 return Object.getOwnPropertyNames(e4).concat(Object.getOwnPropertySymbols(e4)); 28716 } : function(e4) { 28717 return Object.getOwnPropertyNames(e4); 28718 }; 28719 var r3 = Number.isNaN || function(e4) { 28720 return e4 != e4; 28721 }; 28722 function i3() { 28723 i3.init.call(this); 28724 } 28725 m2.exports = i3, m2.exports.once = function(e4, t4) { 28726 return new Promise((function(n4, r4) { 28727 function i4(n5) { 28728 e4.removeListener(t4, o4), r4(n5); 28729 } 28730 function o4() { 28731 "function" == typeof e4.removeListener && e4.removeListener("error", i4), n4([].slice.call(arguments)); 28732 } 28733 f3(e4, t4, o4, { once: true }), "error" !== t4 && (function(e5, t5, n5) { 28734 "function" == typeof e5.on && f3(e5, "error", t5, n5); 28735 })(e4, i4, { once: true }); 28736 })); 28737 }, i3.EventEmitter = i3, i3.prototype._events = void 0, i3.prototype._eventsCount = 0, i3.prototype._maxListeners = void 0; 28738 var o3 = 10; 28739 function s3(e4) { 28740 if ("function" != typeof e4) throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof e4); 28741 } 28742 function a3(e4) { 28743 return void 0 === e4._maxListeners ? i3.defaultMaxListeners : e4._maxListeners; 28744 } 28745 function c3(e4, t4, n4, r4) { 28746 var i4, o4, c4, l4; 28747 if (s3(n4), void 0 === (o4 = e4._events) ? (o4 = e4._events = /* @__PURE__ */ Object.create(null), e4._eventsCount = 0) : (void 0 !== o4.newListener && (e4.emit("newListener", t4, n4.listener ? n4.listener : n4), o4 = e4._events), c4 = o4[t4]), void 0 === c4) c4 = o4[t4] = n4, ++e4._eventsCount; 28748 else if ("function" == typeof c4 ? c4 = o4[t4] = r4 ? [n4, c4] : [c4, n4] : r4 ? c4.unshift(n4) : c4.push(n4), (i4 = a3(e4)) > 0 && c4.length > i4 && !c4.warned) { 28749 c4.warned = true; 28750 var u4 = new Error("Possible EventEmitter memory leak detected. " + c4.length + " " + String(t4) + " listeners added. Use emitter.setMaxListeners() to increase limit"); 28751 u4.name = "MaxListenersExceededWarning", u4.emitter = e4, u4.type = t4, u4.count = c4.length, l4 = u4, console && console.warn && console.warn(l4); 28752 } 28753 return e4; 28754 } 28755 function l3() { 28756 if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = true, 0 === arguments.length ? this.listener.call(this.target) : this.listener.apply(this.target, arguments); 28757 } 28758 function u3(e4, t4, n4) { 28759 var r4 = { fired: false, wrapFn: void 0, target: e4, type: t4, listener: n4 }, i4 = l3.bind(r4); 28760 return i4.listener = n4, r4.wrapFn = i4, i4; 28761 } 28762 function d3(e4, t4, n4) { 28763 var r4 = e4._events; 28764 if (void 0 === r4) return []; 28765 var i4 = r4[t4]; 28766 return void 0 === i4 ? [] : "function" == typeof i4 ? n4 ? [i4.listener || i4] : [i4] : n4 ? (function(e5) { 28767 for (var t5 = new Array(e5.length), n5 = 0; n5 < t5.length; ++n5) t5[n5] = e5[n5].listener || e5[n5]; 28768 return t5; 28769 })(i4) : h3(i4, i4.length); 28770 } 28771 function p3(e4) { 28772 var t4 = this._events; 28773 if (void 0 !== t4) { 28774 var n4 = t4[e4]; 28775 if ("function" == typeof n4) return 1; 28776 if (void 0 !== n4) return n4.length; 28777 } 28778 return 0; 28779 } 28780 function h3(e4, t4) { 28781 for (var n4 = new Array(t4), r4 = 0; r4 < t4; ++r4) n4[r4] = e4[r4]; 28782 return n4; 28783 } 28784 function f3(e4, t4, n4, r4) { 28785 if ("function" == typeof e4.on) r4.once ? e4.once(t4, n4) : e4.on(t4, n4); 28786 else { 28787 if ("function" != typeof e4.addEventListener) throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof e4); 28788 e4.addEventListener(t4, (function i4(o4) { 28789 r4.once && e4.removeEventListener(t4, i4), n4(o4); 28790 })); 28791 } 28792 } 28793 return Object.defineProperty(i3, "defaultMaxListeners", { enumerable: true, get: function() { 28794 return o3; 28795 }, set: function(e4) { 28796 if ("number" != typeof e4 || e4 < 0 || r3(e4)) throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + e4 + "."); 28797 o3 = e4; 28798 } }), i3.init = function() { 28799 void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0; 28800 }, i3.prototype.setMaxListeners = function(e4) { 28801 if ("number" != typeof e4 || e4 < 0 || r3(e4)) throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + e4 + "."); 28802 return this._maxListeners = e4, this; 28803 }, i3.prototype.getMaxListeners = function() { 28804 return a3(this); 28805 }, i3.prototype.emit = function(e4) { 28806 for (var t4 = [], r4 = 1; r4 < arguments.length; r4++) t4.push(arguments[r4]); 28807 var i4 = "error" === e4, o4 = this._events; 28808 if (void 0 !== o4) i4 = i4 && void 0 === o4.error; 28809 else if (!i4) return false; 28810 if (i4) { 28811 var s4; 28812 if (t4.length > 0 && (s4 = t4[0]), s4 instanceof Error) throw s4; 28813 var a4 = new Error("Unhandled error." + (s4 ? " (" + s4.message + ")" : "")); 28814 throw a4.context = s4, a4; 28815 } 28816 var c4 = o4[e4]; 28817 if (void 0 === c4) return false; 28818 if ("function" == typeof c4) n3(c4, this, t4); 28819 else { 28820 var l4 = c4.length, u4 = h3(c4, l4); 28821 for (r4 = 0; r4 < l4; ++r4) n3(u4[r4], this, t4); 28822 } 28823 return true; 28824 }, i3.prototype.addListener = function(e4, t4) { 28825 return c3(this, e4, t4, false); 28826 }, i3.prototype.on = i3.prototype.addListener, i3.prototype.prependListener = function(e4, t4) { 28827 return c3(this, e4, t4, true); 28828 }, i3.prototype.once = function(e4, t4) { 28829 return s3(t4), this.on(e4, u3(this, e4, t4)), this; 28830 }, i3.prototype.prependOnceListener = function(e4, t4) { 28831 return s3(t4), this.prependListener(e4, u3(this, e4, t4)), this; 28832 }, i3.prototype.removeListener = function(e4, t4) { 28833 var n4, r4, i4, o4, a4; 28834 if (s3(t4), void 0 === (r4 = this._events)) return this; 28835 if (void 0 === (n4 = r4[e4])) return this; 28836 if (n4 === t4 || n4.listener === t4) 0 == --this._eventsCount ? this._events = /* @__PURE__ */ Object.create(null) : (delete r4[e4], r4.removeListener && this.emit("removeListener", e4, n4.listener || t4)); 28837 else if ("function" != typeof n4) { 28838 for (i4 = -1, o4 = n4.length - 1; o4 >= 0; o4--) if (n4[o4] === t4 || n4[o4].listener === t4) { 28839 a4 = n4[o4].listener, i4 = o4; 28840 break; 28841 } 28842 if (i4 < 0) return this; 28843 0 === i4 ? n4.shift() : (function(e5, t5) { 28844 for (; t5 + 1 < e5.length; t5++) e5[t5] = e5[t5 + 1]; 28845 e5.pop(); 28846 })(n4, i4), 1 === n4.length && (r4[e4] = n4[0]), void 0 !== r4.removeListener && this.emit("removeListener", e4, a4 || t4); 28847 } 28848 return this; 28849 }, i3.prototype.off = i3.prototype.removeListener, i3.prototype.removeAllListeners = function(e4) { 28850 var t4, n4, r4; 28851 if (void 0 === (n4 = this._events)) return this; 28852 if (void 0 === n4.removeListener) return 0 === arguments.length ? (this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0) : void 0 !== n4[e4] && (0 == --this._eventsCount ? this._events = /* @__PURE__ */ Object.create(null) : delete n4[e4]), this; 28853 if (0 === arguments.length) { 28854 var i4, o4 = Object.keys(n4); 28855 for (r4 = 0; r4 < o4.length; ++r4) "removeListener" !== (i4 = o4[r4]) && this.removeAllListeners(i4); 28856 return this.removeAllListeners("removeListener"), this._events = /* @__PURE__ */ Object.create(null), this._eventsCount = 0, this; 28857 } 28858 if ("function" == typeof (t4 = n4[e4])) this.removeListener(e4, t4); 28859 else if (void 0 !== t4) for (r4 = t4.length - 1; r4 >= 0; r4--) this.removeListener(e4, t4[r4]); 28860 return this; 28861 }, i3.prototype.listeners = function(e4) { 28862 return d3(this, e4, true); 28863 }, i3.prototype.rawListeners = function(e4) { 28864 return d3(this, e4, false); 28865 }, i3.listenerCount = function(e4, t4) { 28866 return "function" == typeof e4.listenerCount ? e4.listenerCount(t4) : p3.call(e4, t4); 28867 }, i3.prototype.listenerCount = p3, i3.prototype.eventNames = function() { 28868 return this._eventsCount > 0 ? e3(this._events) : []; 28869 }, m2.exports; 28870 })(); 28871 b2 = v2(y2); 28872 _2 = Object.prototype.hasOwnProperty; 28873 k2 = { "Amazon Silk": "amazon_silk", "Android Browser": "android", Bada: "bada", BlackBerry: "blackberry", Chrome: "chrome", Chromium: "chromium", Electron: "electron", Epiphany: "epiphany", Firefox: "firefox", Focus: "focus", Generic: "generic", "Google Search": "google_search", Googlebot: "googlebot", "Internet Explorer": "ie", "K-Meleon": "k_meleon", Maxthon: "maxthon", "Microsoft Edge": "edge", "MZ Browser": "mz", "NAVER Whale Browser": "naver", Opera: "opera", "Opera Coast": "opera_coast", PhantomJS: "phantomjs", Puffin: "puffin", QupZilla: "qupzilla", QQ: "qq", QQLite: "qqlite", Safari: "safari", Sailfish: "sailfish", "Samsung Internet for Android": "samsung_internet", SeaMonkey: "seamonkey", Sleipnir: "sleipnir", Swing: "swing", Tizen: "tizen", "UC Browser": "uc", Vivaldi: "vivaldi", "WebOS Browser": "webos", WeChat: "wechat", "Yandex Browser": "yandex", Roku: "roku" }; 28874 M2 = { amazon_silk: "Amazon Silk", android: "Android Browser", bada: "Bada", blackberry: "BlackBerry", chrome: "Chrome", chromium: "Chromium", electron: "Electron", epiphany: "Epiphany", firefox: "Firefox", focus: "Focus", generic: "Generic", googlebot: "Googlebot", google_search: "Google Search", ie: "Internet Explorer", k_meleon: "K-Meleon", maxthon: "Maxthon", edge: "Microsoft Edge", mz: "MZ Browser", naver: "NAVER Whale Browser", opera: "Opera", opera_coast: "Opera Coast", phantomjs: "PhantomJS", puffin: "Puffin", qupzilla: "QupZilla", qq: "QQ Browser", qqlite: "QQ Browser Lite", safari: "Safari", sailfish: "Sailfish", samsung_internet: "Samsung Internet for Android", seamonkey: "SeaMonkey", sleipnir: "Sleipnir", swing: "Swing", tizen: "Tizen", uc: "UC Browser", vivaldi: "Vivaldi", webos: "WebOS Browser", wechat: "WeChat", yandex: "Yandex Browser" }; 28875 C2 = { tablet: "tablet", mobile: "mobile", desktop: "desktop", tv: "tv" }; 28876 E2 = { WindowsPhone: "Windows Phone", Windows: "Windows", MacOS: "macOS", iOS: "iOS", Android: "Android", WebOS: "WebOS", BlackBerry: "BlackBerry", Bada: "Bada", Tizen: "Tizen", Linux: "Linux", ChromeOS: "Chrome OS", PlayStation4: "PlayStation 4", Roku: "Roku" }; 28877 T2 = { EdgeHTML: "EdgeHTML", Blink: "Blink", Trident: "Trident", Presto: "Presto", Gecko: "Gecko", WebKit: "WebKit" }; 28878 O2 = class _O { 28879 static getFirstMatch(e3, t3) { 28880 const n3 = t3.match(e3); 28881 return n3 && n3.length > 0 && n3[1] || ""; 28882 } 28883 static getSecondMatch(e3, t3) { 28884 const n3 = t3.match(e3); 28885 return n3 && n3.length > 1 && n3[2] || ""; 28886 } 28887 static matchAndReturnConst(e3, t3, n3) { 28888 if (e3.test(t3)) return n3; 28889 } 28890 static getWindowsVersionName(e3) { 28891 switch (e3) { 28892 case "NT": 28893 return "NT"; 28894 case "XP": 28895 case "NT 5.1": 28896 return "XP"; 28897 case "NT 5.0": 28898 return "2000"; 28899 case "NT 5.2": 28900 return "2003"; 28901 case "NT 6.0": 28902 return "Vista"; 28903 case "NT 6.1": 28904 return "7"; 28905 case "NT 6.2": 28906 return "8"; 28907 case "NT 6.3": 28908 return "8.1"; 28909 case "NT 10.0": 28910 return "10"; 28911 default: 28912 return; 28913 } 28914 } 28915 static getMacOSVersionName(e3) { 28916 const t3 = e3.split(".").splice(0, 2).map(((e4) => parseInt(e4, 10) || 0)); 28917 if (t3.push(0), 10 === t3[0]) switch (t3[1]) { 28918 case 5: 28919 return "Leopard"; 28920 case 6: 28921 return "Snow Leopard"; 28922 case 7: 28923 return "Lion"; 28924 case 8: 28925 return "Mountain Lion"; 28926 case 9: 28927 return "Mavericks"; 28928 case 10: 28929 return "Yosemite"; 28930 case 11: 28931 return "El Capitan"; 28932 case 12: 28933 return "Sierra"; 28934 case 13: 28935 return "High Sierra"; 28936 case 14: 28937 return "Mojave"; 28938 case 15: 28939 return "Catalina"; 28940 default: 28941 return; 28942 } 28943 } 28944 static getAndroidVersionName(e3) { 28945 const t3 = e3.split(".").splice(0, 2).map(((e4) => parseInt(e4, 10) || 0)); 28946 if (t3.push(0), !(1 === t3[0] && t3[1] < 5)) return 1 === t3[0] && t3[1] < 6 ? "Cupcake" : 1 === t3[0] && t3[1] >= 6 ? "Donut" : 2 === t3[0] && t3[1] < 2 ? "Eclair" : 2 === t3[0] && 2 === t3[1] ? "Froyo" : 2 === t3[0] && t3[1] > 2 ? "Gingerbread" : 3 === t3[0] ? "Honeycomb" : 4 === t3[0] && t3[1] < 1 ? "Ice Cream Sandwich" : 4 === t3[0] && t3[1] < 4 ? "Jelly Bean" : 4 === t3[0] && t3[1] >= 4 ? "KitKat" : 5 === t3[0] ? "Lollipop" : 6 === t3[0] ? "Marshmallow" : 7 === t3[0] ? "Nougat" : 8 === t3[0] ? "Oreo" : 9 === t3[0] ? "Pie" : void 0; 28947 } 28948 static getVersionPrecision(e3) { 28949 return e3.split(".").length; 28950 } 28951 static compareVersions(e3, t3, n3 = false) { 28952 const r3 = _O.getVersionPrecision(e3), i3 = _O.getVersionPrecision(t3); 28953 let o3 = Math.max(r3, i3), s3 = 0; 28954 const a3 = _O.map([e3, t3], ((e4) => { 28955 const t4 = o3 - _O.getVersionPrecision(e4), n4 = e4 + new Array(t4 + 1).join(".0"); 28956 return _O.map(n4.split("."), ((e5) => new Array(20 - e5.length).join("0") + e5)).reverse(); 28957 })); 28958 for (n3 && (s3 = o3 - Math.min(r3, i3)), o3 -= 1; o3 >= s3; ) { 28959 if (a3[0][o3] > a3[1][o3]) return 1; 28960 if (a3[0][o3] === a3[1][o3]) { 28961 if (o3 === s3) return 0; 28962 o3 -= 1; 28963 } else if (a3[0][o3] < a3[1][o3]) return -1; 28964 } 28965 } 28966 static map(e3, t3) { 28967 const n3 = []; 28968 let r3; 28969 if (Array.prototype.map) return Array.prototype.map.call(e3, t3); 28970 for (r3 = 0; r3 < e3.length; r3 += 1) n3.push(t3(e3[r3])); 28971 return n3; 28972 } 28973 static find(e3, t3) { 28974 let n3, r3; 28975 if (Array.prototype.find) return Array.prototype.find.call(e3, t3); 28976 for (n3 = 0, r3 = e3.length; n3 < r3; n3 += 1) { 28977 const r4 = e3[n3]; 28978 if (t3(r4, n3)) return r4; 28979 } 28980 } 28981 static assign(e3, ...t3) { 28982 const n3 = e3; 28983 let r3, i3; 28984 if (Object.assign) return Object.assign(e3, ...t3); 28985 for (r3 = 0, i3 = t3.length; r3 < i3; r3 += 1) { 28986 const e4 = t3[r3]; 28987 if ("object" == typeof e4 && null !== e4) { 28988 Object.keys(e4).forEach(((t4) => { 28989 n3[t4] = e4[t4]; 28990 })); 28991 } 28992 } 28993 return e3; 28994 } 28995 static getBrowserAlias(e3) { 28996 return k2[e3]; 28997 } 28998 static getBrowserTypeByAlias(e3) { 28999 return M2[e3] || ""; 29000 } 29001 }; 29002 P2 = /version\/(\d+(\.?_?\d+)+)/i; 29003 A2 = [{ test: [/googlebot/i], describe(e3) { 29004 const t3 = { name: "Googlebot" }, n3 = O2.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e3) || O2.getFirstMatch(P2, e3); 29005 return n3 && (t3.version = n3), t3; 29006 } }, { test: [/opera/i], describe(e3) { 29007 const t3 = { name: "Opera" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e3); 29008 return n3 && (t3.version = n3), t3; 29009 } }, { test: [/opr\/|opios/i], describe(e3) { 29010 const t3 = { name: "Opera" }, n3 = O2.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e3) || O2.getFirstMatch(P2, e3); 29011 return n3 && (t3.version = n3), t3; 29012 } }, { test: [/SamsungBrowser/i], describe(e3) { 29013 const t3 = { name: "Samsung Internet for Android" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e3); 29014 return n3 && (t3.version = n3), t3; 29015 } }, { test: [/Whale/i], describe(e3) { 29016 const t3 = { name: "NAVER Whale Browser" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e3); 29017 return n3 && (t3.version = n3), t3; 29018 } }, { test: [/MZBrowser/i], describe(e3) { 29019 const t3 = { name: "MZ Browser" }, n3 = O2.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29020 return n3 && (t3.version = n3), t3; 29021 } }, { test: [/focus/i], describe(e3) { 29022 const t3 = { name: "Focus" }, n3 = O2.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29023 return n3 && (t3.version = n3), t3; 29024 } }, { test: [/swing/i], describe(e3) { 29025 const t3 = { name: "Swing" }, n3 = O2.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29026 return n3 && (t3.version = n3), t3; 29027 } }, { test: [/coast/i], describe(e3) { 29028 const t3 = { name: "Opera Coast" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e3); 29029 return n3 && (t3.version = n3), t3; 29030 } }, { test: [/opt\/\d+(?:.?_?\d+)+/i], describe(e3) { 29031 const t3 = { name: "Opera Touch" }, n3 = O2.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29032 return n3 && (t3.version = n3), t3; 29033 } }, { test: [/yabrowser/i], describe(e3) { 29034 const t3 = { name: "Yandex Browser" }, n3 = O2.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29035 return n3 && (t3.version = n3), t3; 29036 } }, { test: [/ucbrowser/i], describe(e3) { 29037 const t3 = { name: "UC Browser" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e3); 29038 return n3 && (t3.version = n3), t3; 29039 } }, { test: [/Maxthon|mxios/i], describe(e3) { 29040 const t3 = { name: "Maxthon" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e3); 29041 return n3 && (t3.version = n3), t3; 29042 } }, { test: [/epiphany/i], describe(e3) { 29043 const t3 = { name: "Epiphany" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e3); 29044 return n3 && (t3.version = n3), t3; 29045 } }, { test: [/puffin/i], describe(e3) { 29046 const t3 = { name: "Puffin" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e3); 29047 return n3 && (t3.version = n3), t3; 29048 } }, { test: [/sleipnir/i], describe(e3) { 29049 const t3 = { name: "Sleipnir" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e3); 29050 return n3 && (t3.version = n3), t3; 29051 } }, { test: [/k-meleon/i], describe(e3) { 29052 const t3 = { name: "K-Meleon" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e3); 29053 return n3 && (t3.version = n3), t3; 29054 } }, { test: [/micromessenger/i], describe(e3) { 29055 const t3 = { name: "WeChat" }, n3 = O2.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29056 return n3 && (t3.version = n3), t3; 29057 } }, { test: [/qqbrowser/i], describe(e3) { 29058 const t3 = { name: /qqbrowserlite/i.test(e3) ? "QQ Browser Lite" : "QQ Browser" }, n3 = O2.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29059 return n3 && (t3.version = n3), t3; 29060 } }, { test: [/msie|trident/i], describe(e3) { 29061 const t3 = { name: "Internet Explorer" }, n3 = O2.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e3); 29062 return n3 && (t3.version = n3), t3; 29063 } }, { test: [/\sedg\//i], describe(e3) { 29064 const t3 = { name: "Microsoft Edge" }, n3 = O2.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e3); 29065 return n3 && (t3.version = n3), t3; 29066 } }, { test: [/edg([ea]|ios)/i], describe(e3) { 29067 const t3 = { name: "Microsoft Edge" }, n3 = O2.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e3); 29068 return n3 && (t3.version = n3), t3; 29069 } }, { test: [/vivaldi/i], describe(e3) { 29070 const t3 = { name: "Vivaldi" }, n3 = O2.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e3); 29071 return n3 && (t3.version = n3), t3; 29072 } }, { test: [/seamonkey/i], describe(e3) { 29073 const t3 = { name: "SeaMonkey" }, n3 = O2.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e3); 29074 return n3 && (t3.version = n3), t3; 29075 } }, { test: [/sailfish/i], describe(e3) { 29076 const t3 = { name: "Sailfish" }, n3 = O2.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e3); 29077 return n3 && (t3.version = n3), t3; 29078 } }, { test: [/silk/i], describe(e3) { 29079 const t3 = { name: "Amazon Silk" }, n3 = O2.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e3); 29080 return n3 && (t3.version = n3), t3; 29081 } }, { test: [/phantom/i], describe(e3) { 29082 const t3 = { name: "PhantomJS" }, n3 = O2.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e3); 29083 return n3 && (t3.version = n3), t3; 29084 } }, { test: [/slimerjs/i], describe(e3) { 29085 const t3 = { name: "SlimerJS" }, n3 = O2.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e3); 29086 return n3 && (t3.version = n3), t3; 29087 } }, { test: [/blackberry|\bbb\d+/i, /rim\stablet/i], describe(e3) { 29088 const t3 = { name: "BlackBerry" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e3); 29089 return n3 && (t3.version = n3), t3; 29090 } }, { test: [/(web|hpw)[o0]s/i], describe(e3) { 29091 const t3 = { name: "WebOS Browser" }, n3 = O2.getFirstMatch(P2, e3) || O2.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e3); 29092 return n3 && (t3.version = n3), t3; 29093 } }, { test: [/bada/i], describe(e3) { 29094 const t3 = { name: "Bada" }, n3 = O2.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e3); 29095 return n3 && (t3.version = n3), t3; 29096 } }, { test: [/tizen/i], describe(e3) { 29097 const t3 = { name: "Tizen" }, n3 = O2.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29098 return n3 && (t3.version = n3), t3; 29099 } }, { test: [/qupzilla/i], describe(e3) { 29100 const t3 = { name: "QupZilla" }, n3 = O2.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29101 return n3 && (t3.version = n3), t3; 29102 } }, { test: [/firefox|iceweasel|fxios/i], describe(e3) { 29103 const t3 = { name: "Firefox" }, n3 = O2.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e3); 29104 return n3 && (t3.version = n3), t3; 29105 } }, { test: [/electron/i], describe(e3) { 29106 const t3 = { name: "Electron" }, n3 = O2.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e3); 29107 return n3 && (t3.version = n3), t3; 29108 } }, { test: [/MiuiBrowser/i], describe(e3) { 29109 const t3 = { name: "Miui" }, n3 = O2.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e3); 29110 return n3 && (t3.version = n3), t3; 29111 } }, { test: [/chromium/i], describe(e3) { 29112 const t3 = { name: "Chromium" }, n3 = O2.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e3) || O2.getFirstMatch(P2, e3); 29113 return n3 && (t3.version = n3), t3; 29114 } }, { test: [/chrome|crios|crmo/i], describe(e3) { 29115 const t3 = { name: "Chrome" }, n3 = O2.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e3); 29116 return n3 && (t3.version = n3), t3; 29117 } }, { test: [/GSA/i], describe(e3) { 29118 const t3 = { name: "Google Search" }, n3 = O2.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e3); 29119 return n3 && (t3.version = n3), t3; 29120 } }, { test(e3) { 29121 const t3 = !e3.test(/like android/i), n3 = e3.test(/android/i); 29122 return t3 && n3; 29123 }, describe(e3) { 29124 const t3 = { name: "Android Browser" }, n3 = O2.getFirstMatch(P2, e3); 29125 return n3 && (t3.version = n3), t3; 29126 } }, { test: [/playstation 4/i], describe(e3) { 29127 const t3 = { name: "PlayStation 4" }, n3 = O2.getFirstMatch(P2, e3); 29128 return n3 && (t3.version = n3), t3; 29129 } }, { test: [/safari|applewebkit/i], describe(e3) { 29130 const t3 = { name: "Safari" }, n3 = O2.getFirstMatch(P2, e3); 29131 return n3 && (t3.version = n3), t3; 29132 } }, { test: [/.*/i], describe(e3) { 29133 const t3 = -1 !== e3.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /; 29134 return { name: O2.getFirstMatch(t3, e3), version: O2.getSecondMatch(t3, e3) }; 29135 } }]; 29136 j2 = [{ test: [/Roku\/DVP/], describe(e3) { 29137 const t3 = O2.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e3); 29138 return { name: E2.Roku, version: t3 }; 29139 } }, { test: [/windows phone/i], describe(e3) { 29140 const t3 = O2.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e3); 29141 return { name: E2.WindowsPhone, version: t3 }; 29142 } }, { test: [/windows /i], describe(e3) { 29143 const t3 = O2.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e3), n3 = O2.getWindowsVersionName(t3); 29144 return { name: E2.Windows, version: t3, versionName: n3 }; 29145 } }, { test: [/Macintosh(.*?) FxiOS(.*?)\//], describe(e3) { 29146 const t3 = { name: E2.iOS }, n3 = O2.getSecondMatch(/(Version\/)(\d[\d.]+)/, e3); 29147 return n3 && (t3.version = n3), t3; 29148 } }, { test: [/macintosh/i], describe(e3) { 29149 const t3 = O2.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e3).replace(/[_\s]/g, "."), n3 = O2.getMacOSVersionName(t3), r3 = { name: E2.MacOS, version: t3 }; 29150 return n3 && (r3.versionName = n3), r3; 29151 } }, { test: [/(ipod|iphone|ipad)/i], describe(e3) { 29152 const t3 = O2.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e3).replace(/[_\s]/g, "."); 29153 return { name: E2.iOS, version: t3 }; 29154 } }, { test(e3) { 29155 const t3 = !e3.test(/like android/i), n3 = e3.test(/android/i); 29156 return t3 && n3; 29157 }, describe(e3) { 29158 const t3 = O2.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e3), n3 = O2.getAndroidVersionName(t3), r3 = { name: E2.Android, version: t3 }; 29159 return n3 && (r3.versionName = n3), r3; 29160 } }, { test: [/(web|hpw)[o0]s/i], describe(e3) { 29161 const t3 = O2.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e3), n3 = { name: E2.WebOS }; 29162 return t3 && t3.length && (n3.version = t3), n3; 29163 } }, { test: [/blackberry|\bbb\d+/i, /rim\stablet/i], describe(e3) { 29164 const t3 = O2.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, e3) || O2.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, e3) || O2.getFirstMatch(/\bbb(\d+)/i, e3); 29165 return { name: E2.BlackBerry, version: t3 }; 29166 } }, { test: [/bada/i], describe(e3) { 29167 const t3 = O2.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e3); 29168 return { name: E2.Bada, version: t3 }; 29169 } }, { test: [/tizen/i], describe(e3) { 29170 const t3 = O2.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e3); 29171 return { name: E2.Tizen, version: t3 }; 29172 } }, { test: [/linux/i], describe: () => ({ name: E2.Linux }) }, { test: [/CrOS/], describe: () => ({ name: E2.ChromeOS }) }, { test: [/PlayStation 4/], describe(e3) { 29173 const t3 = O2.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e3); 29174 return { name: E2.PlayStation4, version: t3 }; 29175 } }]; 29176 I2 = [{ test: [/googlebot/i], describe: () => ({ type: "bot", vendor: "Google" }) }, { test: [/huawei/i], describe(e3) { 29177 const t3 = O2.getFirstMatch(/(can-l01)/i, e3) && "Nova", n3 = { type: C2.mobile, vendor: "Huawei" }; 29178 return t3 && (n3.model = t3), n3; 29179 } }, { test: [/nexus\s*(?:7|8|9|10).*/i], describe: () => ({ type: C2.tablet, vendor: "Nexus" }) }, { test: [/ipad/i], describe: () => ({ type: C2.tablet, vendor: "Apple", model: "iPad" }) }, { test: [/Macintosh(.*?) FxiOS(.*?)\//], describe: () => ({ type: C2.tablet, vendor: "Apple", model: "iPad" }) }, { test: [/kftt build/i], describe: () => ({ type: C2.tablet, vendor: "Amazon", model: "Kindle Fire HD 7" }) }, { test: [/silk/i], describe: () => ({ type: C2.tablet, vendor: "Amazon" }) }, { test: [/tablet(?! pc)/i], describe: () => ({ type: C2.tablet }) }, { test(e3) { 29180 const t3 = e3.test(/ipod|iphone/i), n3 = e3.test(/like (ipod|iphone)/i); 29181 return t3 && !n3; 29182 }, describe(e3) { 29183 const t3 = O2.getFirstMatch(/(ipod|iphone)/i, e3); 29184 return { type: C2.mobile, vendor: "Apple", model: t3 }; 29185 } }, { test: [/nexus\s*[0-6].*/i, /galaxy nexus/i], describe: () => ({ type: C2.mobile, vendor: "Nexus" }) }, { test: [/[^-]mobi/i], describe: () => ({ type: C2.mobile }) }, { test: (e3) => "blackberry" === e3.getBrowserName(true), describe: () => ({ type: C2.mobile, vendor: "BlackBerry" }) }, { test: (e3) => "bada" === e3.getBrowserName(true), describe: () => ({ type: C2.mobile }) }, { test: (e3) => "windows phone" === e3.getBrowserName(), describe: () => ({ type: C2.mobile, vendor: "Microsoft" }) }, { test(e3) { 29186 const t3 = Number(String(e3.getOSVersion()).split(".")[0]); 29187 return "android" === e3.getOSName(true) && t3 >= 3; 29188 }, describe: () => ({ type: C2.tablet }) }, { test: (e3) => "android" === e3.getOSName(true), describe: () => ({ type: C2.mobile }) }, { test: (e3) => "macos" === e3.getOSName(true), describe: () => ({ type: C2.desktop, vendor: "Apple" }) }, { test: (e3) => "windows" === e3.getOSName(true), describe: () => ({ type: C2.desktop }) }, { test: (e3) => "linux" === e3.getOSName(true), describe: () => ({ type: C2.desktop }) }, { test: (e3) => "playstation 4" === e3.getOSName(true), describe: () => ({ type: C2.tv }) }, { test: (e3) => "roku" === e3.getOSName(true), describe: () => ({ type: C2.tv }) }]; 29189 x2 = [{ test: (e3) => "microsoft edge" === e3.getBrowserName(true), describe(e3) { 29190 if (/\sedg\//i.test(e3)) return { name: T2.Blink }; 29191 const t3 = O2.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e3); 29192 return { name: T2.EdgeHTML, version: t3 }; 29193 } }, { test: [/trident/i], describe(e3) { 29194 const t3 = { name: T2.Trident }, n3 = O2.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e3); 29195 return n3 && (t3.version = n3), t3; 29196 } }, { test: (e3) => e3.test(/presto/i), describe(e3) { 29197 const t3 = { name: T2.Presto }, n3 = O2.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e3); 29198 return n3 && (t3.version = n3), t3; 29199 } }, { test(e3) { 29200 const t3 = e3.test(/gecko/i), n3 = e3.test(/like gecko/i); 29201 return t3 && !n3; 29202 }, describe(e3) { 29203 const t3 = { name: T2.Gecko }, n3 = O2.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e3); 29204 return n3 && (t3.version = n3), t3; 29205 } }, { test: [/(apple)?webkit\/537\.36/i], describe: () => ({ name: T2.Blink }) }, { test: [/(apple)?webkit/i], describe(e3) { 29206 const t3 = { name: T2.WebKit }, n3 = O2.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e3); 29207 return n3 && (t3.version = n3), t3; 29208 } }]; 29209 L2 = class { 29210 constructor(e3, t3 = false) { 29211 if (null == e3 || "" === e3) throw new Error("UserAgent parameter can't be empty"); 29212 this._ua = e3, this.parsedResult = {}, true !== t3 && this.parse(); 29213 } 29214 getUA() { 29215 return this._ua; 29216 } 29217 test(e3) { 29218 return e3.test(this._ua); 29219 } 29220 parseBrowser() { 29221 this.parsedResult.browser = {}; 29222 const e3 = O2.find(A2, ((e4) => { 29223 if ("function" == typeof e4.test) return e4.test(this); 29224 if (e4.test instanceof Array) return e4.test.some(((e5) => this.test(e5))); 29225 throw new Error("Browser's test function is not valid"); 29226 })); 29227 return e3 && (this.parsedResult.browser = e3.describe(this.getUA())), this.parsedResult.browser; 29228 } 29229 getBrowser() { 29230 return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser(); 29231 } 29232 getBrowserName(e3) { 29233 return e3 ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || ""; 29234 } 29235 getBrowserVersion() { 29236 return this.getBrowser().version; 29237 } 29238 getOS() { 29239 return this.parsedResult.os ? this.parsedResult.os : this.parseOS(); 29240 } 29241 parseOS() { 29242 this.parsedResult.os = {}; 29243 const e3 = O2.find(j2, ((e4) => { 29244 if ("function" == typeof e4.test) return e4.test(this); 29245 if (e4.test instanceof Array) return e4.test.some(((e5) => this.test(e5))); 29246 throw new Error("Browser's test function is not valid"); 29247 })); 29248 return e3 && (this.parsedResult.os = e3.describe(this.getUA())), this.parsedResult.os; 29249 } 29250 getOSName(e3) { 29251 const { name: t3 } = this.getOS(); 29252 return e3 ? String(t3).toLowerCase() || "" : t3 || ""; 29253 } 29254 getOSVersion() { 29255 return this.getOS().version; 29256 } 29257 getPlatform() { 29258 return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform(); 29259 } 29260 getPlatformType(e3 = false) { 29261 const { type: t3 } = this.getPlatform(); 29262 return e3 ? String(t3).toLowerCase() || "" : t3 || ""; 29263 } 29264 parsePlatform() { 29265 this.parsedResult.platform = {}; 29266 const e3 = O2.find(I2, ((e4) => { 29267 if ("function" == typeof e4.test) return e4.test(this); 29268 if (e4.test instanceof Array) return e4.test.some(((e5) => this.test(e5))); 29269 throw new Error("Browser's test function is not valid"); 29270 })); 29271 return e3 && (this.parsedResult.platform = e3.describe(this.getUA())), this.parsedResult.platform; 29272 } 29273 getEngine() { 29274 return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine(); 29275 } 29276 getEngineName(e3) { 29277 return e3 ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || ""; 29278 } 29279 parseEngine() { 29280 this.parsedResult.engine = {}; 29281 const e3 = O2.find(x2, ((e4) => { 29282 if ("function" == typeof e4.test) return e4.test(this); 29283 if (e4.test instanceof Array) return e4.test.some(((e5) => this.test(e5))); 29284 throw new Error("Browser's test function is not valid"); 29285 })); 29286 return e3 && (this.parsedResult.engine = e3.describe(this.getUA())), this.parsedResult.engine; 29287 } 29288 parse() { 29289 return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this; 29290 } 29291 getResult() { 29292 return O2.assign({}, this.parsedResult); 29293 } 29294 satisfies(e3) { 29295 const t3 = {}; 29296 let n3 = 0; 29297 const r3 = {}; 29298 let i3 = 0; 29299 if (Object.keys(e3).forEach(((o3) => { 29300 const s3 = e3[o3]; 29301 "string" == typeof s3 ? (r3[o3] = s3, i3 += 1) : "object" == typeof s3 && (t3[o3] = s3, n3 += 1); 29302 })), n3 > 0) { 29303 const e4 = Object.keys(t3), n4 = O2.find(e4, ((e5) => this.isOS(e5))); 29304 if (n4) { 29305 const e5 = this.satisfies(t3[n4]); 29306 if (void 0 !== e5) return e5; 29307 } 29308 const r4 = O2.find(e4, ((e5) => this.isPlatform(e5))); 29309 if (r4) { 29310 const e5 = this.satisfies(t3[r4]); 29311 if (void 0 !== e5) return e5; 29312 } 29313 } 29314 if (i3 > 0) { 29315 const e4 = Object.keys(r3), t4 = O2.find(e4, ((e5) => this.isBrowser(e5, true))); 29316 if (void 0 !== t4) return this.compareVersion(r3[t4]); 29317 } 29318 } 29319 isBrowser(e3, t3 = false) { 29320 const n3 = this.getBrowserName().toLowerCase(); 29321 let r3 = e3.toLowerCase(); 29322 const i3 = O2.getBrowserTypeByAlias(r3); 29323 return t3 && i3 && (r3 = i3.toLowerCase()), r3 === n3; 29324 } 29325 compareVersion(e3) { 29326 let t3 = [0], n3 = e3, r3 = false; 29327 const i3 = this.getBrowserVersion(); 29328 if ("string" == typeof i3) return ">" === e3[0] || "<" === e3[0] ? (n3 = e3.substr(1), "=" === e3[1] ? (r3 = true, n3 = e3.substr(2)) : t3 = [], ">" === e3[0] ? t3.push(1) : t3.push(-1)) : "=" === e3[0] ? n3 = e3.substr(1) : "~" === e3[0] && (r3 = true, n3 = e3.substr(1)), t3.indexOf(O2.compareVersions(i3, n3, r3)) > -1; 29329 } 29330 isOS(e3) { 29331 return this.getOSName(true) === String(e3).toLowerCase(); 29332 } 29333 isPlatform(e3) { 29334 return this.getPlatformType(true) === String(e3).toLowerCase(); 29335 } 29336 isEngine(e3) { 29337 return this.getEngineName(true) === String(e3).toLowerCase(); 29338 } 29339 is(e3, t3 = false) { 29340 return this.isBrowser(e3, t3) || this.isOS(e3) || this.isPlatform(e3); 29341 } 29342 some(e3 = []) { 29343 return e3.some(((e4) => this.is(e4))); 29344 } 29345 }; 29346 D2 = class { 29347 static getParser(e3, t3 = false) { 29348 if ("string" != typeof e3) throw new Error("UserAgent should be a string"); 29349 return new L2(e3, t3); 29350 } 29351 static parse(e3) { 29352 return new L2(e3).getResult(); 29353 } 29354 static get BROWSER_MAP() { 29355 return M2; 29356 } 29357 static get ENGINE_MAP() { 29358 return T2; 29359 } 29360 static get OS_MAP() { 29361 return E2; 29362 } 29363 static get PLATFORMS_MAP() { 29364 return C2; 29365 } 29366 }; 29367 V2 = "undefined" == typeof __SENTRY_DEBUG__ || __SENTRY_DEBUG__; 29368 J2 = "8.55.0"; 29369 $2 = globalThis; 29370 z2 = "undefined" == typeof __SENTRY_DEBUG__ || __SENTRY_DEBUG__; 29371 W2 = ["debug", "info", "warn", "error", "log", "assert", "trace"]; 29372 H2 = {}; 29373 Q2 = q2("logger", (function() { 29374 let e3 = false; 29375 const t3 = { enable: () => { 29376 e3 = true; 29377 }, disable: () => { 29378 e3 = false; 29379 }, isEnabled: () => e3 }; 29380 return z2 ? W2.forEach(((n3) => { 29381 t3[n3] = (...t4) => { 29382 e3 && G2((() => { 29383 $2.console[n3](`Sentry Logger [${n3}]:`, ...t4); 29384 })); 29385 }; 29386 })) : W2.forEach(((e4) => { 29387 t3[e4] = () => { 29388 }; 29389 })), t3; 29390 })); 29391 K2 = "?"; 29392 Y2 = /\(error: (.*)\)/; 29393 X2 = /captureMessage|captureException/; 29394 ee2 = "<anonymous>"; 29395 re2 = {}; 29396 ie2 = {}; 29397 ce2 = null; 29398 ue2 = null; 29399 fe2 = Object.prototype.toString; 29400 Te2 = $2; 29401 qe2 = (function() { 29402 const { performance: e3 } = $2; 29403 if (!e3 || !e3.now) return $e2; 29404 const t3 = Date.now() - e3.now(), n3 = null == e3.timeOrigin ? t3 : e3.timeOrigin; 29405 return () => (n3 + e3.now()) / 1e3; 29406 })(); 29407 (() => { 29408 const { performance: e3 } = $2; 29409 if (!e3 || !e3.now) return; 29410 const t3 = 36e5, n3 = e3.now(), r3 = Date.now(), i3 = e3.timeOrigin ? Math.abs(e3.timeOrigin + n3 - r3) : t3, o3 = i3 < t3, s3 = e3.timing && e3.timing.navigationStart, a3 = "number" == typeof s3 ? Math.abs(s3 + n3 - r3) : t3; 29411 (o3 || a3 < t3) && (i3 <= a3 && e3.timeOrigin); 29412 })(), (function(e3) { 29413 e3[e3.PENDING = 0] = "PENDING"; 29414 e3[e3.RESOLVED = 1] = "RESOLVED"; 29415 e3[e3.REJECTED = 2] = "REJECTED"; 29416 })(Ye2 || (Ye2 = {})); 29417 et2 = class _et { 29418 constructor(e3) { 29419 _et.prototype.__init.call(this), _et.prototype.__init2.call(this), _et.prototype.__init3.call(this), _et.prototype.__init4.call(this), this._state = Ye2.PENDING, this._handlers = []; 29420 try { 29421 e3(this._resolve, this._reject); 29422 } catch (e4) { 29423 this._reject(e4); 29424 } 29425 } 29426 then(e3, t3) { 29427 return new _et(((n3, r3) => { 29428 this._handlers.push([false, (t4) => { 29429 if (e3) try { 29430 n3(e3(t4)); 29431 } catch (e4) { 29432 r3(e4); 29433 } 29434 else n3(t4); 29435 }, (e4) => { 29436 if (t3) try { 29437 n3(t3(e4)); 29438 } catch (e5) { 29439 r3(e5); 29440 } 29441 else r3(e4); 29442 }]), this._executeHandlers(); 29443 })); 29444 } 29445 catch(e3) { 29446 return this.then(((e4) => e4), e3); 29447 } 29448 finally(e3) { 29449 return new _et(((t3, n3) => { 29450 let r3, i3; 29451 return this.then(((t4) => { 29452 i3 = false, r3 = t4, e3 && e3(); 29453 }), ((t4) => { 29454 i3 = true, r3 = t4, e3 && e3(); 29455 })).then((() => { 29456 i3 ? n3(r3) : t3(r3); 29457 })); 29458 })); 29459 } 29460 __init() { 29461 this._resolve = (e3) => { 29462 this._setResult(Ye2.RESOLVED, e3); 29463 }; 29464 } 29465 __init2() { 29466 this._reject = (e3) => { 29467 this._setResult(Ye2.REJECTED, e3); 29468 }; 29469 } 29470 __init3() { 29471 this._setResult = (e3, t3) => { 29472 this._state === Ye2.PENDING && (Me2(t3) ? t3.then(this._resolve, this._reject) : (this._state = e3, this._value = t3, this._executeHandlers())); 29473 }; 29474 } 29475 __init4() { 29476 this._executeHandlers = () => { 29477 if (this._state === Ye2.PENDING) return; 29478 const e3 = this._handlers.slice(); 29479 this._handlers = [], e3.forEach(((e4) => { 29480 e4[0] || (this._state === Ye2.RESOLVED && e4[1](this._value), this._state === Ye2.REJECTED && e4[2](this._value), e4[0] = true); 29481 })); 29482 }; 29483 } 29484 }; 29485 st2 = "_sentrySpan"; 29486 lt2 = class _lt { 29487 constructor() { 29488 this._notifyingListeners = false, this._scopeListeners = [], this._eventProcessors = [], this._breadcrumbs = [], this._attachments = [], this._user = {}, this._tags = {}, this._extra = {}, this._contexts = {}, this._sdkProcessingMetadata = {}, this._propagationContext = { traceId: rt2(), spanId: it2() }; 29489 } 29490 clone() { 29491 const e3 = new _lt(); 29492 return e3._breadcrumbs = [...this._breadcrumbs], e3._tags = { ...this._tags }, e3._extra = { ...this._extra }, e3._contexts = { ...this._contexts }, this._contexts.flags && (e3._contexts.flags = { values: [...this._contexts.flags.values] }), e3._user = this._user, e3._level = this._level, e3._session = this._session, e3._transactionName = this._transactionName, e3._fingerprint = this._fingerprint, e3._eventProcessors = [...this._eventProcessors], e3._requestSession = this._requestSession, e3._attachments = [...this._attachments], e3._sdkProcessingMetadata = { ...this._sdkProcessingMetadata }, e3._propagationContext = { ...this._propagationContext }, e3._client = this._client, e3._lastEventId = this._lastEventId, at2(e3, ct2(this)), e3; 29493 } 29494 setClient(e3) { 29495 this._client = e3; 29496 } 29497 setLastEventId(e3) { 29498 this._lastEventId = e3; 29499 } 29500 getClient() { 29501 return this._client; 29502 } 29503 lastEventId() { 29504 return this._lastEventId; 29505 } 29506 addScopeListener(e3) { 29507 this._scopeListeners.push(e3); 29508 } 29509 addEventProcessor(e3) { 29510 return this._eventProcessors.push(e3), this; 29511 } 29512 setUser(e3) { 29513 return this._user = e3 || { email: void 0, id: void 0, ip_address: void 0, username: void 0 }, this._session && nt2(this._session, { user: e3 }), this._notifyScopeListeners(), this; 29514 } 29515 getUser() { 29516 return this._user; 29517 } 29518 getRequestSession() { 29519 return this._requestSession; 29520 } 29521 setRequestSession(e3) { 29522 return this._requestSession = e3, this; 29523 } 29524 setTags(e3) { 29525 return this._tags = { ...this._tags, ...e3 }, this._notifyScopeListeners(), this; 29526 } 29527 setTag(e3, t3) { 29528 return this._tags = { ...this._tags, [e3]: t3 }, this._notifyScopeListeners(), this; 29529 } 29530 setExtras(e3) { 29531 return this._extra = { ...this._extra, ...e3 }, this._notifyScopeListeners(), this; 29532 } 29533 setExtra(e3, t3) { 29534 return this._extra = { ...this._extra, [e3]: t3 }, this._notifyScopeListeners(), this; 29535 } 29536 setFingerprint(e3) { 29537 return this._fingerprint = e3, this._notifyScopeListeners(), this; 29538 } 29539 setLevel(e3) { 29540 return this._level = e3, this._notifyScopeListeners(), this; 29541 } 29542 setTransactionName(e3) { 29543 return this._transactionName = e3, this._notifyScopeListeners(), this; 29544 } 29545 setContext(e3, t3) { 29546 return null === t3 ? delete this._contexts[e3] : this._contexts[e3] = t3, this._notifyScopeListeners(), this; 29547 } 29548 setSession(e3) { 29549 return e3 ? this._session = e3 : delete this._session, this._notifyScopeListeners(), this; 29550 } 29551 getSession() { 29552 return this._session; 29553 } 29554 update(e3) { 29555 if (!e3) return this; 29556 const t3 = "function" == typeof e3 ? e3(this) : e3, [n3, r3] = t3 instanceof ut2 ? [t3.getScopeData(), t3.getRequestSession()] : Se2(t3) ? [e3, e3.requestSession] : [], { tags: i3, extra: o3, user: s3, contexts: a3, level: c3, fingerprint: l3 = [], propagationContext: u3 } = n3 || {}; 29557 return this._tags = { ...this._tags, ...i3 }, this._extra = { ...this._extra, ...o3 }, this._contexts = { ...this._contexts, ...a3 }, s3 && Object.keys(s3).length && (this._user = s3), c3 && (this._level = c3), l3.length && (this._fingerprint = l3), u3 && (this._propagationContext = u3), r3 && (this._requestSession = r3), this; 29558 } 29559 clear() { 29560 return this._breadcrumbs = [], this._tags = {}, this._extra = {}, this._user = {}, this._contexts = {}, this._level = void 0, this._transactionName = void 0, this._fingerprint = void 0, this._requestSession = void 0, this._session = void 0, at2(this, void 0), this._attachments = [], this.setPropagationContext({ traceId: rt2() }), this._notifyScopeListeners(), this; 29561 } 29562 addBreadcrumb(e3, t3) { 29563 const n3 = "number" == typeof t3 ? t3 : 100; 29564 if (n3 <= 0) return this; 29565 const r3 = { timestamp: $e2(), ...e3 }; 29566 return this._breadcrumbs.push(r3), this._breadcrumbs.length > n3 && (this._breadcrumbs = this._breadcrumbs.slice(-n3), this._client && this._client.recordDroppedEvent("buffer_overflow", "log_item")), this._notifyScopeListeners(), this; 29567 } 29568 getLastBreadcrumb() { 29569 return this._breadcrumbs[this._breadcrumbs.length - 1]; 29570 } 29571 clearBreadcrumbs() { 29572 return this._breadcrumbs = [], this._notifyScopeListeners(), this; 29573 } 29574 addAttachment(e3) { 29575 return this._attachments.push(e3), this; 29576 } 29577 clearAttachments() { 29578 return this._attachments = [], this; 29579 } 29580 getScopeData() { 29581 return { breadcrumbs: this._breadcrumbs, attachments: this._attachments, contexts: this._contexts, tags: this._tags, extra: this._extra, user: this._user, level: this._level, fingerprint: this._fingerprint || [], eventProcessors: this._eventProcessors, propagationContext: this._propagationContext, sdkProcessingMetadata: this._sdkProcessingMetadata, transactionName: this._transactionName, span: ct2(this) }; 29582 } 29583 setSDKProcessingMetadata(e3) { 29584 return this._sdkProcessingMetadata = ot2(this._sdkProcessingMetadata, e3, 2), this; 29585 } 29586 setPropagationContext(e3) { 29587 return this._propagationContext = { spanId: it2(), ...e3 }, this; 29588 } 29589 getPropagationContext() { 29590 return this._propagationContext; 29591 } 29592 captureException(e3, t3) { 29593 const n3 = t3 && t3.event_id ? t3.event_id : ze2(); 29594 if (!this._client) return Q2.warn("No client configured on scope - will not capture exception!"), n3; 29595 const r3 = new Error("Sentry syntheticException"); 29596 return this._client.captureException(e3, { originalException: e3, syntheticException: r3, ...t3, event_id: n3 }, this), n3; 29597 } 29598 captureMessage(e3, t3, n3) { 29599 const r3 = n3 && n3.event_id ? n3.event_id : ze2(); 29600 if (!this._client) return Q2.warn("No client configured on scope - will not capture message!"), r3; 29601 const i3 = new Error(e3); 29602 return this._client.captureMessage(e3, t3, { originalException: e3, syntheticException: i3, ...n3, event_id: r3 }, this), r3; 29603 } 29604 captureEvent(e3, t3) { 29605 const n3 = t3 && t3.event_id ? t3.event_id : ze2(); 29606 return this._client ? (this._client.captureEvent(e3, { ...t3, event_id: n3 }, this), n3) : (Q2.warn("No client configured on scope - will not capture event!"), n3); 29607 } 29608 _notifyScopeListeners() { 29609 this._notifyingListeners || (this._notifyingListeners = true, this._scopeListeners.forEach(((e3) => { 29610 e3(this); 29611 })), this._notifyingListeners = false); 29612 } 29613 }; 29614 ut2 = lt2; 29615 dt2 = class { 29616 constructor(e3, t3) { 29617 let n3, r3; 29618 n3 = e3 || new ut2(), r3 = t3 || new ut2(), this._stack = [{ scope: n3 }], this._isolationScope = r3; 29619 } 29620 withScope(e3) { 29621 const t3 = this._pushScope(); 29622 let n3; 29623 try { 29624 n3 = e3(t3); 29625 } catch (e4) { 29626 throw this._popScope(), e4; 29627 } 29628 return Me2(n3) ? n3.then(((e4) => (this._popScope(), e4)), ((e4) => { 29629 throw this._popScope(), e4; 29630 })) : (this._popScope(), n3); 29631 } 29632 getClient() { 29633 return this.getStackTop().client; 29634 } 29635 getScope() { 29636 return this.getStackTop().scope; 29637 } 29638 getIsolationScope() { 29639 return this._isolationScope; 29640 } 29641 getStackTop() { 29642 return this._stack[this._stack.length - 1]; 29643 } 29644 _pushScope() { 29645 const e3 = this.getScope().clone(); 29646 return this._stack.push({ client: this.getClient(), scope: e3 }), e3; 29647 } 29648 _popScope() { 29649 return !(this._stack.length <= 1) && !!this._stack.pop(); 29650 } 29651 }; 29652 St2 = /^sentry-/; 29653 Ct2 = false; 29654 xt2 = "production"; 29655 Nt2 = /^(?:(\w+):)\/\/(?:(\w+)(?::(\w+)?)?@)([\w.-]+)(?::(\d+))?\/(.+)/; 29656 Qt2 = { session: "session", sessions: "session", attachment: "attachment", transaction: "transaction", event: "error", client_report: "internal", user_report: "default", profile: "profile", profile_chunk: "profile", replay_event: "replay", replay_recording: "replay", check_in: "monitor", feedback: "feedback", span: "span", statsd: "metric_bucket", raw_security: "security" }; 29657 ln2 = ["user", "level", "extra", "contexts", "tags", "fingerprint", "requestSession", "propagationContext"]; 29658 gn2 = []; 29659 bn2 = class extends Error { 29660 constructor(e3, t3 = "warn") { 29661 super(e3), this.message = e3, this.logLevel = t3; 29662 } 29663 }; 29664 _n2 = "Not capturing exception because it's already been captured."; 29665 wn2 = class { 29666 constructor(e3) { 29667 if (this._options = e3, this._integrations = {}, this._numProcessing = 0, this._outcomes = {}, this._hooks = {}, this._eventProcessors = [], e3.dsn ? this._dsn = Bt2(e3.dsn) : V2 && Q2.warn("No DSN provided, client will not send events."), this._dsn) { 29668 const t4 = vn2(this._dsn, e3.tunnel, e3._metadata ? e3._metadata.sdk : void 0); 29669 this._transport = e3.transport({ tunnel: this._options.tunnel, recordDroppedEvent: this.recordDroppedEvent.bind(this), ...e3.transportOptions, url: t4 }); 29670 } 29671 const t3 = ["enableTracing", "tracesSampleRate", "tracesSampler"].find(((t4) => t4 in e3 && null == e3[t4])); 29672 t3 && G2((() => { 29673 console.warn(`[Sentry] Deprecation warning: \`${t3}\` is set to undefined, which leads to tracing being enabled. In v9, a value of \`undefined\` will result in tracing being disabled.`); 29674 })); 29675 } 29676 captureException(e3, t3, n3) { 29677 const r3 = ze2(); 29678 if (Ke2(e3)) return V2 && Q2.log(_n2), r3; 29679 const i3 = { event_id: r3, ...t3 }; 29680 return this._process(this.eventFromException(e3, i3).then(((e4) => this._captureEvent(e4, i3, n3)))), i3.event_id; 29681 } 29682 captureMessage(e3, t3, n3, r3) { 29683 const i3 = { event_id: ze2(), ...n3 }, o3 = _e2(e3) ? e3 : String(e3), s3 = we2(e3) ? this.eventFromMessage(o3, t3, i3) : this.eventFromException(e3, i3); 29684 return this._process(s3.then(((e4) => this._captureEvent(e4, i3, r3)))), i3.event_id; 29685 } 29686 captureEvent(e3, t3, n3) { 29687 const r3 = ze2(); 29688 if (t3 && t3.originalException && Ke2(t3.originalException)) return V2 && Q2.log(_n2), r3; 29689 const i3 = { event_id: r3, ...t3 }, o3 = (e3.sdkProcessingMetadata || {}).capturedSpanScope; 29690 return this._process(this._captureEvent(e3, i3, o3 || n3)), i3.event_id; 29691 } 29692 captureSession(e3) { 29693 "string" != typeof e3.release ? V2 && Q2.warn("Discarded session because of missing or non-string release") : (this.sendSession(e3), nt2(e3, { init: false })); 29694 } 29695 getDsn() { 29696 return this._dsn; 29697 } 29698 getOptions() { 29699 return this._options; 29700 } 29701 getSdkMetadata() { 29702 return this._options._metadata; 29703 } 29704 getTransport() { 29705 return this._transport; 29706 } 29707 flush(e3) { 29708 const t3 = this._transport; 29709 return t3 ? (this.emit("flush"), this._isClientDoneProcessing(e3).then(((n3) => t3.flush(e3).then(((e4) => n3 && e4))))) : Xe2(true); 29710 } 29711 close(e3) { 29712 return this.flush(e3).then(((e4) => (this.getOptions().enabled = false, this.emit("close"), e4))); 29713 } 29714 getEventProcessors() { 29715 return this._eventProcessors; 29716 } 29717 addEventProcessor(e3) { 29718 this._eventProcessors.push(e3); 29719 } 29720 init() { 29721 (this._isEnabled() || this._options.integrations.some((({ name: e3 }) => e3.startsWith("Spotlight")))) && this._setupIntegrations(); 29722 } 29723 getIntegrationByName(e3) { 29724 return this._integrations[e3]; 29725 } 29726 addIntegration(e3) { 29727 const t3 = this._integrations[e3.name]; 29728 yn2(this, e3, this._integrations), t3 || mn2(this, [e3]); 29729 } 29730 sendEvent(e3, t3 = {}) { 29731 this.emit("beforeSendEvent", e3, t3); 29732 let n3 = Xt2(e3, this._dsn, this._options._metadata, this._options.tunnel); 29733 for (const e4 of t3.attachments || []) n3 = qt2(n3, Gt2(e4)); 29734 const r3 = this.sendEnvelope(n3); 29735 r3 && r3.then(((t4) => this.emit("afterSendEvent", e3, t4)), null); 29736 } 29737 sendSession(e3) { 29738 const t3 = (function(e4, t4, n3, r3) { 29739 const i3 = Yt2(n3); 29740 return $t2({ sent_at: (/* @__PURE__ */ new Date()).toISOString(), ...i3 && { sdk: i3 }, ...!!r3 && t4 && { dsn: Rt2(t4) } }, ["aggregates" in e4 ? [{ type: "sessions" }, e4] : [{ type: "session" }, e4.toJSON()]]); 29741 })(e3, this._dsn, this._options._metadata, this._options.tunnel); 29742 this.sendEnvelope(t3); 29743 } 29744 recordDroppedEvent(e3, t3, n3) { 29745 if (this._options.sendClientReports) { 29746 const r3 = "number" == typeof n3 ? n3 : 1, i3 = `${e3}:${t3}`; 29747 V2 && Q2.log(`Recording outcome: "${i3}"${r3 > 1 ? ` (${r3} times)` : ""}`), this._outcomes[i3] = (this._outcomes[i3] || 0) + r3; 29748 } 29749 } 29750 on(e3, t3) { 29751 const n3 = this._hooks[e3] = this._hooks[e3] || []; 29752 return n3.push(t3), () => { 29753 const e4 = n3.indexOf(t3); 29754 e4 > -1 && n3.splice(e4, 1); 29755 }; 29756 } 29757 emit(e3, ...t3) { 29758 const n3 = this._hooks[e3]; 29759 n3 && n3.forEach(((e4) => e4(...t3))); 29760 } 29761 sendEnvelope(e3) { 29762 return this.emit("beforeEnvelope", e3), this._isEnabled() && this._transport ? this._transport.send(e3).then(null, ((e4) => (V2 && Q2.error("Error while sending envelope:", e4), e4))) : (V2 && Q2.error("Transport disabled"), Xe2({})); 29763 } 29764 _setupIntegrations() { 29765 const { integrations: e3 } = this._options; 29766 this._integrations = (function(e4, t3) { 29767 const n3 = {}; 29768 return t3.forEach(((t4) => { 29769 t4 && yn2(e4, t4, n3); 29770 })), n3; 29771 })(this, e3), mn2(this, e3); 29772 } 29773 _updateSessionFromEvent(e3, t3) { 29774 let n3 = "fatal" === t3.level, r3 = false; 29775 const i3 = t3.exception && t3.exception.values; 29776 if (i3) { 29777 r3 = true; 29778 for (const e4 of i3) { 29779 const t4 = e4.mechanism; 29780 if (t4 && false === t4.handled) { 29781 n3 = true; 29782 break; 29783 } 29784 } 29785 } 29786 const o3 = "ok" === e3.status; 29787 (o3 && 0 === e3.errors || o3 && n3) && (nt2(e3, { ...n3 && { status: "crashed" }, errors: e3.errors || Number(r3 || n3) }), this.captureSession(e3)); 29788 } 29789 _isClientDoneProcessing(e3) { 29790 return new et2(((t3) => { 29791 let n3 = 0; 29792 const r3 = setInterval((() => { 29793 0 == this._numProcessing ? (clearInterval(r3), t3(true)) : (n3 += 1, e3 && n3 >= e3 && (clearInterval(r3), t3(false))); 29794 }), 1); 29795 })); 29796 } 29797 _isEnabled() { 29798 return false !== this.getOptions().enabled && void 0 !== this._transport; 29799 } 29800 _prepareEvent(e3, t3, n3 = mt2(), r3 = yt2()) { 29801 const i3 = this.getOptions(), o3 = Object.keys(this._integrations); 29802 return !t3.integrations && o3.length > 0 && (t3.integrations = o3), this.emit("preprocessEvent", e3, t3), e3.type || r3.setLastEventId(e3.event_id || t3.event_id), an2(i3, e3, t3, n3, this, r3).then(((e4) => { 29803 if (null === e4) return e4; 29804 e4.contexts = { trace: _t2(n3), ...e4.contexts }; 29805 const t4 = (function(e5, t5) { 29806 const n4 = t5.getPropagationContext(); 29807 return n4.dsc || Lt2(n4.traceId, e5); 29808 })(this, n3); 29809 return e4.sdkProcessingMetadata = { dynamicSamplingContext: t4, ...e4.sdkProcessingMetadata }, e4; 29810 })); 29811 } 29812 _captureEvent(e3, t3 = {}, n3) { 29813 return this._processEvent(e3, t3, n3).then(((e4) => e4.event_id), ((e4) => { 29814 V2 && (e4 instanceof bn2 && "log" === e4.logLevel ? Q2.log(e4.message) : Q2.warn(e4)); 29815 })); 29816 } 29817 _processEvent(e3, t3, n3) { 29818 const r3 = this.getOptions(), { sampleRate: i3 } = r3, o3 = kn2(e3), s3 = Sn2(e3), a3 = e3.type || "error", c3 = `before send for type \`${a3}\``, l3 = void 0 === i3 ? void 0 : (function(e4) { 29819 if ("boolean" == typeof e4) return Number(e4); 29820 const t4 = "string" == typeof e4 ? parseFloat(e4) : e4; 29821 if (!("number" != typeof t4 || isNaN(t4) || t4 < 0 || t4 > 1)) return t4; 29822 V2 && Q2.warn(`[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(e4)} of type ${JSON.stringify(typeof e4)}.`); 29823 })(i3); 29824 if (s3 && "number" == typeof l3 && Math.random() > l3) return this.recordDroppedEvent("sample_rate", "error", e3), Ze2(new bn2(`Discarding event because it's not included in the random sample (sampling rate = ${i3})`, "log")); 29825 const u3 = "replay_event" === a3 ? "replay" : a3, d3 = (e3.sdkProcessingMetadata || {}).capturedSpanIsolationScope; 29826 return this._prepareEvent(e3, t3, n3, d3).then(((n4) => { 29827 if (null === n4) throw this.recordDroppedEvent("event_processor", u3, e3), new bn2("An event processor returned `null`, will not send event.", "log"); 29828 if (t3.data && true === t3.data.__sentry__) return n4; 29829 const i4 = (function(e4, t4, n5, r4) { 29830 const { beforeSend: i5, beforeSendTransaction: o4, beforeSendSpan: s4 } = t4; 29831 if (Sn2(n5) && i5) return i5(n5, r4); 29832 if (kn2(n5)) { 29833 if (n5.spans && s4) { 29834 const t5 = []; 29835 for (const r5 of n5.spans) { 29836 const n6 = s4(r5); 29837 n6 ? t5.push(n6) : (It2(), e4.recordDroppedEvent("before_send", "span")); 29838 } 29839 n5.spans = t5; 29840 } 29841 if (o4) { 29842 if (n5.spans) { 29843 const e5 = n5.spans.length; 29844 n5.sdkProcessingMetadata = { ...n5.sdkProcessingMetadata, spanCountBeforeProcessing: e5 }; 29845 } 29846 return o4(n5, r4); 29847 } 29848 } 29849 return n5; 29850 })(this, r3, n4, t3); 29851 return (function(e4, t4) { 29852 const n5 = `${t4} must return \`null\` or a valid event.`; 29853 if (Me2(e4)) return e4.then(((e5) => { 29854 if (!Se2(e5) && null !== e5) throw new bn2(n5); 29855 return e5; 29856 }), ((e5) => { 29857 throw new bn2(`${t4} rejected with ${e5}`); 29858 })); 29859 if (!Se2(e4) && null !== e4) throw new bn2(n5); 29860 return e4; 29861 })(i4, c3); 29862 })).then(((r4) => { 29863 if (null === r4) { 29864 if (this.recordDroppedEvent("before_send", u3, e3), o3) { 29865 const t4 = 1 + (e3.spans || []).length; 29866 this.recordDroppedEvent("before_send", "span", t4); 29867 } 29868 throw new bn2(`${c3} returned \`null\`, will not send event.`, "log"); 29869 } 29870 const i4 = n3 && n3.getSession(); 29871 if (!o3 && i4 && this._updateSessionFromEvent(i4, r4), o3) { 29872 const e4 = (r4.sdkProcessingMetadata && r4.sdkProcessingMetadata.spanCountBeforeProcessing || 0) - (r4.spans ? r4.spans.length : 0); 29873 e4 > 0 && this.recordDroppedEvent("before_send", "span", e4); 29874 } 29875 const s4 = r4.transaction_info; 29876 if (o3 && s4 && r4.transaction !== e3.transaction) { 29877 const e4 = "custom"; 29878 r4.transaction_info = { ...s4, source: e4 }; 29879 } 29880 return this.sendEvent(r4, t3), r4; 29881 })).then(null, ((e4) => { 29882 if (e4 instanceof bn2) throw e4; 29883 throw this.captureException(e4, { data: { __sentry__: true }, originalException: e4 }), new bn2(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event. 29884Reason: ${e4}`); 29885 })); 29886 } 29887 _process(e3) { 29888 this._numProcessing++, e3.then(((e4) => (this._numProcessing--, e4)), ((e4) => (this._numProcessing--, e4))); 29889 } 29890 _clearOutcomes() { 29891 const e3 = this._outcomes; 29892 return this._outcomes = {}, Object.entries(e3).map((([e4, t3]) => { 29893 const [n3, r3] = e4.split(":"); 29894 return { reason: n3, category: r3, quantity: t3 }; 29895 })); 29896 } 29897 _flushOutcomes() { 29898 V2 && Q2.log("Flushing outcomes..."); 29899 const e3 = this._clearOutcomes(); 29900 if (0 === e3.length) return void (V2 && Q2.log("No outcomes to send")); 29901 if (!this._dsn) return void (V2 && Q2.log("No dsn provided, will not send outcomes")); 29902 V2 && Q2.log("Sending outcomes:", e3); 29903 const t3 = (n3 = e3, $t2((r3 = this._options.tunnel && Rt2(this._dsn)) ? { dsn: r3 } : {}, [[{ type: "client_report" }, { timestamp: i3 || $e2(), discarded_events: n3 }]])); 29904 var n3, r3, i3; 29905 this.sendEnvelope(t3); 29906 } 29907 }; 29908 On2 = 100; 29909 jn2 = /* @__PURE__ */ new WeakMap(); 29910 In2 = () => ({ name: "FunctionToString", setupOnce() { 29911 An2 = Function.prototype.toString; 29912 try { 29913 Function.prototype.toString = function(...e3) { 29914 const t3 = Re2(this), n3 = jn2.has(bt2()) && void 0 !== t3 ? t3 : this; 29915 return An2.apply(n3, e3); 29916 }; 29917 } catch (e3) { 29918 } 29919 }, setup(e3) { 29920 jn2.set(e3, true); 29921 } }); 29922 xn2 = [/^Script error\.?$/, /^Javascript error: Script error\.? on line 0$/, /^ResizeObserver loop completed with undelivered notifications.$/, /^Cannot redefine property: googletag$/, "undefined is not an object (evaluating 'a.L')", `can't redefine non-configurable property "solana"`, "vv().getRestrictions is not a function. (In 'vv().getRestrictions(1,a)', 'vv().getRestrictions' is undefined)", "Can't find variable: _AutofillCallbackHandler", /^Non-Error promise rejection captured with value: Object Not Found Matching Id:\d+, MethodName:simulateEvent, ParamCount:\d+$/]; 29923 Ln2 = (e3 = {}) => ({ name: "InboundFilters", processEvent(t3, n3, r3) { 29924 const i3 = r3.getOptions(), o3 = (function(e4 = {}, t4 = {}) { 29925 return { allowUrls: [...e4.allowUrls || [], ...t4.allowUrls || []], denyUrls: [...e4.denyUrls || [], ...t4.denyUrls || []], ignoreErrors: [...e4.ignoreErrors || [], ...t4.ignoreErrors || [], ...e4.disableErrorDefaults ? [] : xn2], ignoreTransactions: [...e4.ignoreTransactions || [], ...t4.ignoreTransactions || []], ignoreInternal: void 0 === e4.ignoreInternal || e4.ignoreInternal }; 29926 })(e3, i3); 29927 return (function(e4, t4) { 29928 if (t4.ignoreInternal && (function(e5) { 29929 try { 29930 return "SentryError" === e5.exception.values[0].type; 29931 } catch (e6) { 29932 } 29933 return false; 29934 })(e4)) return V2 && Q2.warn(`Event dropped due to being internal Sentry Error. 29935Event: ${He2(e4)}`), true; 29936 if ((function(e5, t5) { 29937 if (e5.type || !t5 || !t5.length) return false; 29938 return (function(e6) { 29939 const t6 = []; 29940 e6.message && t6.push(e6.message); 29941 let n4; 29942 try { 29943 n4 = e6.exception.values[e6.exception.values.length - 1]; 29944 } catch (e7) { 29945 } 29946 n4 && n4.value && (t6.push(n4.value), n4.type && t6.push(`${n4.type}: ${n4.value}`)); 29947 return t6; 29948 })(e5).some(((e6) => xe2(e6, t5))); 29949 })(e4, t4.ignoreErrors)) return V2 && Q2.warn(`Event dropped due to being matched by \`ignoreErrors\` option. 29950Event: ${He2(e4)}`), true; 29951 if ((function(e5) { 29952 if (e5.type) return false; 29953 if (!e5.exception || !e5.exception.values || 0 === e5.exception.values.length) return false; 29954 return !e5.message && !e5.exception.values.some(((e6) => e6.stacktrace || e6.type && "Error" !== e6.type || e6.value)); 29955 })(e4)) return V2 && Q2.warn(`Event dropped due to not having an error message, error type or stacktrace. 29956Event: ${He2(e4)}`), true; 29957 if ((function(e5, t5) { 29958 if ("transaction" !== e5.type || !t5 || !t5.length) return false; 29959 const n4 = e5.transaction; 29960 return !!n4 && xe2(n4, t5); 29961 })(e4, t4.ignoreTransactions)) return V2 && Q2.warn(`Event dropped due to being matched by \`ignoreTransactions\` option. 29962Event: ${He2(e4)}`), true; 29963 if ((function(e5, t5) { 29964 if (!t5 || !t5.length) return false; 29965 const n4 = Dn2(e5); 29966 return !!n4 && xe2(n4, t5); 29967 })(e4, t4.denyUrls)) return V2 && Q2.warn(`Event dropped due to being matched by \`denyUrls\` option. 29968Event: ${He2(e4)}. 29969Url: ${Dn2(e4)}`), true; 29970 if (!(function(e5, t5) { 29971 if (!t5 || !t5.length) return true; 29972 const n4 = Dn2(e5); 29973 return !n4 || xe2(n4, t5); 29974 })(e4, t4.allowUrls)) return V2 && Q2.warn(`Event dropped due to not being matched by \`allowUrls\` option. 29975Event: ${He2(e4)}. 29976Url: ${Dn2(e4)}`), true; 29977 return false; 29978 })(t3, o3) ? null : t3; 29979 } }); 29980 $n2 = () => { 29981 let e3; 29982 return { name: "Dedupe", processEvent(t3) { 29983 if (t3.type) return t3; 29984 try { 29985 if ((function(e4, t4) { 29986 if (!t4) return false; 29987 if ((function(e5, t5) { 29988 const n3 = e5.message, r3 = t5.message; 29989 if (!n3 && !r3) return false; 29990 if (n3 && !r3 || !n3 && r3) return false; 29991 if (n3 !== r3) return false; 29992 if (!zn2(e5, t5)) return false; 29993 if (!qn2(e5, t5)) return false; 29994 return true; 29995 })(e4, t4)) return true; 29996 if ((function(e5, t5) { 29997 const n3 = Wn2(t5), r3 = Wn2(e5); 29998 if (!n3 || !r3) return false; 29999 if (n3.type !== r3.type || n3.value !== r3.value) return false; 30000 if (!zn2(e5, t5)) return false; 30001 if (!qn2(e5, t5)) return false; 30002 return true; 30003 })(e4, t4)) return true; 30004 return false; 30005 })(t3, e3)) return V2 && Q2.warn("Event dropped due to being a duplicate of previously captured event."), null; 30006 } catch (e4) { 30007 } 30008 return e3 = t3; 30009 } }; 30010 }; 30011 Gn2 = $2; 30012 er2 = $2; 30013 tr2 = $2; 30014 nr2 = 0; 30015 or2 = "undefined" == typeof __SENTRY_DEBUG__ || __SENTRY_DEBUG__; 30016 ur2 = /Minified React error #\d+;/i; 30017 mr2 = class extends wn2 { 30018 constructor(e3) { 30019 const t3 = { parentSpanIsAlwaysRootSpan: true, ...e3 }; 30020 !(function(e4, t4, n3 = [t4], r3 = "npm") { 30021 const i3 = e4._metadata || {}; 30022 i3.sdk || (i3.sdk = { name: `sentry.javascript.${t4}`, packages: n3.map(((e5) => ({ name: `${r3}:@sentry/${e5}`, version: J2 }))), version: J2 }), e4._metadata = i3; 30023 })(t3, "browser", ["browser"], tr2.SENTRY_SDK_SOURCE || "npm"), super(t3), t3.sendClientReports && tr2.document && tr2.document.addEventListener("visibilitychange", (() => { 30024 "hidden" === tr2.document.visibilityState && this._flushOutcomes(); 30025 })); 30026 } 30027 eventFromException(e3, t3) { 30028 return (function(e4, t4, n3, r3) { 30029 const i3 = fr2(e4, t4, n3 && n3.syntheticException || void 0, r3); 30030 return Qe2(i3), i3.level = "error", n3 && n3.event_id && (i3.event_id = n3.event_id), Xe2(i3); 30031 })(this._options.stackParser, e3, t3, this._options.attachStacktrace); 30032 } 30033 eventFromMessage(e3, t3 = "info", n3) { 30034 return (function(e4, t4, n4 = "info", r3, i3) { 30035 const o3 = vr2(e4, t4, r3 && r3.syntheticException || void 0, i3); 30036 return o3.level = n4, r3 && r3.event_id && (o3.event_id = r3.event_id), Xe2(o3); 30037 })(this._options.stackParser, e3, t3, n3, this._options.attachStacktrace); 30038 } 30039 captureUserFeedback(e3) { 30040 if (!this._isEnabled()) return void (or2 && Q2.warn("SDK not enabled, will not capture user feedback.")); 30041 const t3 = (function(e4, { metadata: t4, tunnel: n3, dsn: r3 }) { 30042 const i3 = { event_id: e4.event_id, sent_at: (/* @__PURE__ */ new Date()).toISOString(), ...t4 && t4.sdk && { sdk: { name: t4.sdk.name, version: t4.sdk.version } }, ...!!n3 && !!r3 && { dsn: Rt2(r3) } }, o3 = /* @__PURE__ */ (function(e5) { 30043 return [{ type: "user_report" }, e5]; 30044 })(e4); 30045 return $t2(i3, [o3]); 30046 })(e3, { metadata: this.getSdkMetadata(), dsn: this.getDsn(), tunnel: this.getOptions().tunnel }); 30047 this.sendEnvelope(t3); 30048 } 30049 _prepareEvent(e3, t3, n3) { 30050 return e3.platform = e3.platform || "javascript", super._prepareEvent(e3, t3, n3); 30051 } 30052 }; 30053 yr2 = "undefined" == typeof __SENTRY_DEBUG__ || __SENTRY_DEBUG__; 30054 br2 = $2; 30055 Or2 = {}; 30056 Ar2 = "__sentry_xhr_v3__"; 30057 Lr2 = /^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i; 30058 Dr2 = /^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i; 30059 Nr2 = /\((\S*)(?::(\d+))(?::(\d+))\)/; 30060 Rr2 = /^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i; 30061 Fr2 = /(\S+) line (\d+)(?: > eval line \d+)* > eval/i; 30062 Br2 = (function(...e3) { 30063 const t3 = e3.sort(((e4, t4) => e4[0] - t4[0])).map(((e4) => e4[1])); 30064 return (e4, n3 = 0, r3 = 0) => { 30065 const i3 = [], o3 = e4.split("\n"); 30066 for (let e5 = n3; e5 < o3.length; e5++) { 30067 const n4 = o3[e5]; 30068 if (n4.length > 1024) continue; 30069 const s3 = Y2.test(n4) ? n4.replace(Y2, "$1") : n4; 30070 if (!s3.match(/\S*Error: /)) { 30071 for (const e6 of t3) { 30072 const t4 = e6(s3); 30073 if (t4) { 30074 i3.push(t4); 30075 break; 30076 } 30077 } 30078 if (i3.length >= 50 + r3) break; 30079 } 30080 } 30081 return (function(e5) { 30082 if (!e5.length) return []; 30083 const t4 = Array.from(e5); 30084 /sentryWrapped/.test(Z2(t4).function || "") && t4.pop(); 30085 t4.reverse(), X2.test(Z2(t4).function || "") && (t4.pop(), X2.test(Z2(t4).function || "") && t4.pop()); 30086 return t4.slice(0, 50).map(((e6) => ({ ...e6, filename: e6.filename || Z2(t4).filename, function: e6.function || K2 }))); 30087 })(i3.slice(r3)); 30088 }; 30089 })(...[[30, (e3) => { 30090 const t3 = Lr2.exec(e3); 30091 if (t3) { 30092 const [, e4, n4, r3] = t3; 30093 return xr2(e4, K2, +n4, +r3); 30094 } 30095 const n3 = Dr2.exec(e3); 30096 if (n3) { 30097 if (n3[2] && 0 === n3[2].indexOf("eval")) { 30098 const e5 = Nr2.exec(n3[2]); 30099 e5 && (n3[2] = e5[1], n3[3] = e5[2], n3[4] = e5[3]); 30100 } 30101 const [e4, t4] = Ur2(n3[1] || K2, n3[2]); 30102 return xr2(t4, e4, n3[3] ? +n3[3] : void 0, n3[4] ? +n3[4] : void 0); 30103 } 30104 }], [50, (e3) => { 30105 const t3 = Rr2.exec(e3); 30106 if (t3) { 30107 if (t3[3] && t3[3].indexOf(" > eval") > -1) { 30108 const e5 = Fr2.exec(t3[3]); 30109 e5 && (t3[1] = t3[1] || "eval", t3[3] = e5[1], t3[4] = e5[2], t3[5] = ""); 30110 } 30111 let e4 = t3[3], n3 = t3[1] || K2; 30112 return [n3, e4] = Ur2(n3, e4), xr2(e4, n3, t3[4] ? +t3[4] : void 0, t3[5] ? +t3[5] : void 0); 30113 } 30114 }]]); 30115 Ur2 = (e3, t3) => { 30116 const n3 = -1 !== e3.indexOf("safari-extension"), r3 = -1 !== e3.indexOf("safari-web-extension"); 30117 return n3 || r3 ? [-1 !== e3.indexOf("@") ? e3.split("@")[0] : K2, n3 ? `safari-extension:${t3}` : `safari-web-extension:${t3}`] : [e3, t3]; 30118 }; 30119 Vr2 = 1024; 30120 Jr2 = (e3 = {}) => { 30121 const t3 = { console: true, dom: true, fetch: true, history: true, sentry: true, xhr: true, ...e3 }; 30122 return { name: "Breadcrumbs", setup(e4) { 30123 var n3; 30124 t3.console && (function(e5) { 30125 const t4 = "console"; 30126 oe2(t4, e5), se2(t4, Vn2); 30127 })(/* @__PURE__ */ (function(e5) { 30128 return function(t4) { 30129 if (bt2() !== e5) return; 30130 const n4 = { category: "console", data: { arguments: t4.args, logger: "console" }, level: Jn2(t4.level), message: je2(t4.args, " ") }; 30131 if ("assert" === t4.level) { 30132 if (false !== t4.args[0]) return; 30133 n4.message = `Assertion failed: ${je2(t4.args.slice(1), " ") || "console.assert"}`, n4.data.arguments = t4.args.slice(1); 30134 } 30135 Pn2(n4, { input: t4.args, level: t4.level }); 30136 }; 30137 })(e4)), t3.dom && (n3 = /* @__PURE__ */ (function(e5, t4) { 30138 return function(n4) { 30139 if (bt2() !== e5) return; 30140 let r3, i3, o3 = "object" == typeof t4 ? t4.serializeAttribute : void 0, s3 = "object" == typeof t4 && "number" == typeof t4.maxStringLength ? t4.maxStringLength : void 0; 30141 s3 && s3 > Vr2 && (or2 && Q2.warn(`\`dom.maxStringLength\` cannot exceed 1024, but a value of ${s3} was configured. Sentry will use 1024 instead.`), s3 = Vr2), "string" == typeof o3 && (o3 = [o3]); 30142 try { 30143 const e6 = n4.event, t5 = (function(e7) { 30144 return !!e7 && !!e7.target; 30145 })(e6) ? e6.target : e6; 30146 r3 = Oe2(t5, { keyAttrs: o3, maxStringLength: s3 }), i3 = (function(e7) { 30147 if (!Te2.HTMLElement) return null; 30148 let t6 = e7; 30149 for (let e8 = 0; e8 < 5; e8++) { 30150 if (!t6) return null; 30151 if (t6 instanceof HTMLElement) { 30152 if (t6.dataset.sentryComponent) return t6.dataset.sentryComponent; 30153 if (t6.dataset.sentryElement) return t6.dataset.sentryElement; 30154 } 30155 t6 = t6.parentNode; 30156 } 30157 return null; 30158 })(t5); 30159 } catch (e6) { 30160 r3 = "<unknown>"; 30161 } 30162 if (0 === r3.length) return; 30163 const a3 = { category: `ui.${n4.name}`, message: r3 }; 30164 i3 && (a3.data = { "ui.component_name": i3 }), Pn2(a3, { event: n4.event, name: n4.name, global: n4.global }); 30165 }; 30166 })(e4, t3.dom), oe2("dom", n3), se2("dom", Mr2)), t3.xhr && (function(e5) { 30167 oe2("xhr", e5), se2("xhr", jr2); 30168 })(/* @__PURE__ */ (function(e5) { 30169 return function(t4) { 30170 if (bt2() !== e5) return; 30171 const { startTimestamp: n4, endTimestamp: r3 } = t4, i3 = t4.xhr[Ar2]; 30172 if (!n4 || !r3 || !i3) return; 30173 const { method: o3, url: s3, status_code: a3, body: c3 } = i3, l3 = { method: o3, url: s3, status_code: a3 }, u3 = { xhr: t4.xhr, input: c3, startTimestamp: n4, endTimestamp: r3 }; 30174 Pn2({ category: "xhr", data: l3, type: "http", level: Hn2(a3) }, u3); 30175 }; 30176 })(e4)), t3.fetch && Yn2(/* @__PURE__ */ (function(e5) { 30177 return function(t4) { 30178 if (bt2() !== e5) return; 30179 const { startTimestamp: n4, endTimestamp: r3 } = t4; 30180 if (r3 && (!t4.fetchData.url.match(/sentry_key/) || "POST" !== t4.fetchData.method)) if (t4.error) { 30181 Pn2({ category: "fetch", data: t4.fetchData, level: "error", type: "http" }, { data: t4.error, input: t4.args, startTimestamp: n4, endTimestamp: r3 }); 30182 } else { 30183 const e6 = t4.response, i3 = { ...t4.fetchData, status_code: e6 && e6.status }, o3 = { input: t4.args, response: e6, startTimestamp: n4, endTimestamp: r3 }; 30184 Pn2({ category: "fetch", data: i3, type: "http", level: Hn2(i3.status_code) }, o3); 30185 } 30186 }; 30187 })(e4)), t3.history && Er2(/* @__PURE__ */ (function(e5) { 30188 return function(t4) { 30189 if (bt2() !== e5) return; 30190 let n4 = t4.from, r3 = t4.to; 30191 const i3 = Un2(tr2.location.href); 30192 let o3 = n4 ? Un2(n4) : void 0; 30193 const s3 = Un2(r3); 30194 o3 && o3.path || (o3 = i3), i3.protocol === s3.protocol && i3.host === s3.host && (r3 = s3.relative), i3.protocol === o3.protocol && i3.host === o3.host && (n4 = o3.relative), Pn2({ category: "navigation", data: { from: n4, to: r3 } }); 30195 }; 30196 })(e4)), t3.sentry && e4.on("beforeSendEvent", /* @__PURE__ */ (function(e5) { 30197 return function(t4) { 30198 bt2() === e5 && Pn2({ category: "sentry." + ("transaction" === t4.type ? "transaction" : "event"), event_id: t4.event_id, level: t4.level, message: He2(t4) }, { event: t4 }); 30199 }; 30200 })(e4)); 30201 } }; 30202 }; 30203 $r2 = ["EventTarget", "Window", "Node", "ApplicationCache", "AudioTrackList", "BroadcastChannel", "ChannelMergerNode", "CryptoOperation", "EventSource", "FileReader", "HTMLUnknownElement", "IDBDatabase", "IDBRequest", "IDBTransaction", "KeyOperation", "MediaController", "MessagePort", "ModalWindow", "Notification", "SVGElementInstance", "Screen", "SharedWorker", "TextTrack", "TextTrackCue", "TextTrackList", "WebSocket", "WebSocketWorker", "Worker", "XMLHttpRequest", "XMLHttpRequestEventTarget", "XMLHttpRequestUpload"]; 30204 qr2 = (e3 = {}) => { 30205 const t3 = { XMLHttpRequest: true, eventTarget: true, requestAnimationFrame: true, setInterval: true, setTimeout: true, ...e3 }; 30206 return { name: "BrowserApiErrors", setupOnce() { 30207 t3.setTimeout && Le2(tr2, "setTimeout", zr2), t3.setInterval && Le2(tr2, "setInterval", zr2), t3.requestAnimationFrame && Le2(tr2, "requestAnimationFrame", Wr2), t3.XMLHttpRequest && "XMLHttpRequest" in tr2 && Le2(XMLHttpRequest.prototype, "send", Hr2); 30208 const e4 = t3.eventTarget; 30209 if (e4) { 30210 (Array.isArray(e4) ? e4 : $r2).forEach(Gr2); 30211 } 30212 } }; 30213 }; 30214 Qr2 = () => ({ name: "BrowserSession", setupOnce() { 30215 void 0 !== tr2.document ? (dn2({ ignoreDuration: true }), fn2(), Er2((({ from: e3, to: t3 }) => { 30216 void 0 !== e3 && e3 !== t3 && (dn2({ ignoreDuration: true }), fn2()); 30217 }))) : or2 && Q2.warn("Using the `browserSessionIntegration` in non-browser environments is not supported."); 30218 } }); 30219 Kr2 = (e3 = {}) => { 30220 const t3 = { onerror: true, onunhandledrejection: true, ...e3 }; 30221 return { name: "GlobalHandlers", setupOnce() { 30222 Error.stackTraceLimit = 50; 30223 }, setup(e4) { 30224 t3.onerror && (!(function(e5) { 30225 !(function(e6) { 30226 const t4 = "error"; 30227 oe2(t4, e6), se2(t4, le2); 30228 })(((t4) => { 30229 const { stackParser: n3, attachStacktrace: r3 } = Xr2(); 30230 if (bt2() !== e5 || rr2()) return; 30231 const { msg: i3, url: o3, line: s3, column: a3, error: c3 } = t4, l3 = (function(e6, t5, n4, r4) { 30232 const i4 = e6.exception = e6.exception || {}, o4 = i4.values = i4.values || [], s4 = o4[0] = o4[0] || {}, a4 = s4.stacktrace = s4.stacktrace || {}, c4 = a4.frames = a4.frames || [], l4 = r4, u3 = n4, d3 = be2(t5) && t5.length > 0 ? t5 : (function() { 30233 try { 30234 return Te2.document.location.href; 30235 } catch (e7) { 30236 return ""; 30237 } 30238 })(); 30239 0 === c4.length && c4.push({ colno: l4, filename: d3, function: K2, in_app: true, lineno: u3 }); 30240 return e6; 30241 })(fr2(n3, c3 || i3, void 0, r3, false), o3, s3, a3); 30242 l3.level = "error", un2(l3, { originalException: c3, mechanism: { handled: false, type: "onerror" } }); 30243 })); 30244 })(e4), Yr2("onerror")), t3.onunhandledrejection && (!(function(e5) { 30245 !(function(e6) { 30246 const t4 = "unhandledrejection"; 30247 oe2(t4, e6), se2(t4, de2); 30248 })(((t4) => { 30249 const { stackParser: n3, attachStacktrace: r3 } = Xr2(); 30250 if (bt2() !== e5 || rr2()) return; 30251 const i3 = (function(e6) { 30252 if (we2(e6)) return e6; 30253 try { 30254 if ("reason" in e6) return e6.reason; 30255 if ("detail" in e6 && "reason" in e6.detail) return e6.detail.reason; 30256 } catch (e7) { 30257 } 30258 return e6; 30259 })(t4), o3 = we2(i3) ? { exception: { values: [{ type: "UnhandledRejection", value: `Non-Error promise rejection captured with value: ${String(i3)}` }] } } : fr2(n3, i3, void 0, r3, true); 30260 o3.level = "error", un2(o3, { originalException: i3, mechanism: { handled: false, type: "onunhandledrejection" } }); 30261 })); 30262 })(e4), Yr2("onunhandledrejection")); 30263 } }; 30264 }; 30265 Zr2 = () => ({ name: "HttpContext", preprocessEvent(e3) { 30266 if (!tr2.navigator && !tr2.location && !tr2.document) return; 30267 const t3 = e3.request && e3.request.url || tr2.location && tr2.location.href, { referrer: n3 } = tr2.document || {}, { userAgent: r3 } = tr2.navigator || {}, i3 = { ...e3.request && e3.request.headers, ...n3 && { Referer: n3 }, ...r3 && { "User-Agent": r3 } }, o3 = { ...e3.request, ...t3 && { url: t3 }, headers: i3 }; 30268 e3.request = o3; 30269 } }); 30270 ei2 = (e3 = {}) => { 30271 const t3 = e3.limit || 5, n3 = e3.key || "cause"; 30272 return { name: "LinkedErrors", preprocessEvent(e4, r3, i3) { 30273 const o3 = i3.getOptions(); 30274 Nn2(sr2, o3.stackParser, o3.maxValueLength, n3, t3, e4, r3); 30275 } }; 30276 }; 30277 ti2 = "new"; 30278 ni2 = "loading"; 30279 ri2 = "loaded"; 30280 ii2 = "joining-meeting"; 30281 oi2 = "joined-meeting"; 30282 si2 = "left-meeting"; 30283 ai2 = "error"; 30284 ci2 = "blocked"; 30285 li2 = "off"; 30286 ui2 = "sendable"; 30287 di2 = "loading"; 30288 pi2 = "interrupted"; 30289 hi2 = "playable"; 30290 fi2 = "unknown"; 30291 vi2 = "full"; 30292 gi2 = "lobby"; 30293 mi2 = "none"; 30294 yi2 = "base"; 30295 bi2 = "*"; 30296 _i2 = "ejected"; 30297 wi2 = "nbf-room"; 30298 Si2 = "nbf-token"; 30299 ki2 = "exp-room"; 30300 Mi2 = "exp-token"; 30301 Ci2 = "no-room"; 30302 Ei2 = "meeting-full"; 30303 Ti2 = "end-of-life"; 30304 Oi2 = "not-allowed"; 30305 Pi2 = "connection-error"; 30306 Ai2 = "cam-in-use"; 30307 ji2 = "mic-in-use"; 30308 Ii2 = "cam-mic-in-use"; 30309 xi2 = "permissions"; 30310 Li2 = "undefined-mediadevices"; 30311 Di2 = "not-found"; 30312 Ni2 = "constraints"; 30313 Ri2 = "unknown"; 30314 Fi2 = "iframe-ready-for-launch-config"; 30315 Bi2 = "iframe-launch-config"; 30316 Ui2 = "theme-updated"; 30317 Vi2 = "loading"; 30318 Ji2 = "load-attempt-failed"; 30319 $i2 = "loaded"; 30320 qi2 = "started-camera"; 30321 zi2 = "camera-error"; 30322 Wi2 = "joining-meeting"; 30323 Hi2 = "joined-meeting"; 30324 Gi2 = "left-meeting"; 30325 Qi2 = "participant-joined"; 30326 Ki2 = "participant-updated"; 30327 Yi2 = "participant-left"; 30328 Xi2 = "participant-counts-updated"; 30329 Zi2 = "access-state-updated"; 30330 eo2 = "meeting-session-summary-updated"; 30331 to2 = "meeting-session-state-updated"; 30332 no2 = "meeting-session-data-error"; 30333 ro2 = "waiting-participant-added"; 30334 io2 = "waiting-participant-updated"; 30335 oo2 = "waiting-participant-removed"; 30336 so2 = "track-started"; 30337 ao2 = "track-stopped"; 30338 co2 = "transcription-started"; 30339 lo2 = "transcription-stopped"; 30340 uo2 = "transcription-error"; 30341 po2 = "recording-started"; 30342 ho2 = "recording-stopped"; 30343 fo2 = "recording-stats"; 30344 vo2 = "recording-error"; 30345 go2 = "recording-upload-completed"; 30346 mo2 = "recording-data"; 30347 yo2 = "app-message"; 30348 bo2 = "transcription-message"; 30349 _o2 = "remote-media-player-started"; 30350 wo2 = "remote-media-player-updated"; 30351 So2 = "remote-media-player-stopped"; 30352 ko2 = "local-screen-share-started"; 30353 Mo2 = "local-screen-share-stopped"; 30354 Co2 = "local-screen-share-canceled"; 30355 Eo2 = "active-speaker-change"; 30356 To2 = "active-speaker-mode-change"; 30357 Oo2 = "network-quality-change"; 30358 Po2 = "network-connection"; 30359 Ao2 = "cpu-load-change"; 30360 jo2 = "face-counts-updated"; 30361 Io2 = "fullscreen"; 30362 xo2 = "exited-fullscreen"; 30363 Lo2 = "live-streaming-started"; 30364 Do2 = "live-streaming-updated"; 30365 No2 = "live-streaming-stopped"; 30366 Ro2 = "live-streaming-error"; 30367 Fo2 = "lang-updated"; 30368 Bo2 = "receive-settings-updated"; 30369 Uo2 = "input-settings-updated"; 30370 Vo2 = "nonfatal-error"; 30371 Jo2 = "error"; 30372 $o2 = 4096; 30373 qo2 = 102400; 30374 zo2 = "iframe-call-message"; 30375 Wo2 = "local-screen-start"; 30376 Ho2 = "daily-method-update-live-streaming-endpoints"; 30377 Go2 = "transmit-log"; 30378 Qo2 = "daily-custom-track"; 30379 Ko2 = { NONE: "none", BGBLUR: "background-blur", BGIMAGE: "background-image", FACE_DETECTION: "face-detection" }; 30380 Yo2 = { NONE: "none", NOISE_CANCELLATION: "noise-cancellation" }; 30381 Xo2 = { PLAY: "play", PAUSE: "pause" }; 30382 Zo2 = ["jpg", "png", "jpeg"]; 30383 es2 = "add-endpoints"; 30384 ts2 = "remove-endpoints"; 30385 ns2 = "sip-call-transfer"; 30386 cs2 = "none"; 30387 ls2 = "software"; 30388 us2 = "hardware"; 30389 ds2 = (function() { 30390 try { 30391 var e3, t3 = document.createElement("canvas"), n3 = false; 30392 (e3 = t3.getContext("webgl2", { failIfMajorPerformanceCaveat: true })) || (n3 = true, e3 = t3.getContext("webgl2")); 30393 var r3 = null != e3; 30394 return t3.remove(), r3 ? n3 ? ls2 : us2 : cs2; 30395 } catch (e4) { 30396 return cs2; 30397 } 30398 })(); 30399 Ms2 = (function() { 30400 return o2((function e3() { 30401 t2(this, e3); 30402 }), [{ key: "addListenerForMessagesFromCallMachine", value: function(e3, t3, n3) { 30403 R2(); 30404 } }, { key: "addListenerForMessagesFromDailyJs", value: function(e3, t3, n3) { 30405 R2(); 30406 } }, { key: "sendMessageToCallMachine", value: function(e3, t3, n3, r3) { 30407 R2(); 30408 } }, { key: "sendMessageToDailyJs", value: function(e3, t3) { 30409 R2(); 30410 } }, { key: "removeListener", value: function(e3) { 30411 R2(); 30412 } }]); 30413 })(); 30414 Os2 = (function() { 30415 function e3() { 30416 var n3, r3, i3, o3; 30417 return t2(this, e3), r3 = this, i3 = a2(i3 = e3), (n3 = s2(r3, Ts2() ? Reflect.construct(i3, o3 || [], a2(r3).constructor) : i3.apply(r3, o3)))._wrappedListeners = {}, n3._messageCallbacks = {}, n3; 30418 } 30419 return l2(e3, Ms2), o2(e3, [{ key: "addListenerForMessagesFromCallMachine", value: function(e4, t3, n3) { 30420 var r3 = this, i3 = function(i4) { 30421 if (i4.data && "iframe-call-message" === i4.data.what && (!i4.data.callClientId || i4.data.callClientId === t3) && (!i4.data.from || "module" !== i4.data.from)) { 30422 var o3 = Es2({}, i4.data); 30423 if (delete o3.from, o3.callbackStamp && r3._messageCallbacks[o3.callbackStamp]) { 30424 var s3 = o3.callbackStamp; 30425 r3._messageCallbacks[s3].call(n3, o3), delete r3._messageCallbacks[s3]; 30426 } 30427 delete o3.what, delete o3.callbackStamp, e4.call(n3, o3); 30428 } 30429 }; 30430 this._wrappedListeners[e4] = i3, window.addEventListener("message", i3); 30431 } }, { key: "addListenerForMessagesFromDailyJs", value: function(e4, t3, n3) { 30432 var r3 = function(r4) { 30433 var i3; 30434 if (!(!r4.data || r4.data.what !== zo2 || !r4.data.action || r4.data.from && "module" !== r4.data.from || r4.data.callClientId && t3 && r4.data.callClientId !== t3 || null != r4 && null !== (i3 = r4.data) && void 0 !== i3 && i3.callFrameId)) { 30435 var o3 = r4.data; 30436 e4.call(n3, o3); 30437 } 30438 }; 30439 this._wrappedListeners[e4] = r3, window.addEventListener("message", r3); 30440 } }, { key: "sendMessageToCallMachine", value: function(e4, t3, n3, r3) { 30441 if (!n3) throw new Error("undefined callClientId. Are you trying to use a DailyCall instance previously destroyed?"); 30442 var i3 = Es2({}, e4); 30443 if (i3.what = zo2, i3.from = "module", i3.callClientId = n3, t3) { 30444 var o3 = N2(); 30445 this._messageCallbacks[o3] = t3, i3.callbackStamp = o3; 30446 } 30447 var s3 = r3 ? r3.contentWindow : window, a3 = this._callMachineTargetOrigin(r3); 30448 a3 && s3.postMessage(i3, a3); 30449 } }, { key: "sendMessageToDailyJs", value: function(e4, t3) { 30450 e4.what = zo2, e4.callClientId = t3, e4.from = "embedded", window.postMessage(e4, this._targetOriginFromWindowLocation()); 30451 } }, { key: "removeListener", value: function(e4) { 30452 var t3 = this._wrappedListeners[e4]; 30453 t3 && (window.removeEventListener("message", t3), delete this._wrappedListeners[e4]); 30454 } }, { key: "forwardPackagedMessageToCallMachine", value: function(e4, t3, n3) { 30455 var r3 = Es2({}, e4); 30456 r3.callClientId = n3; 30457 var i3 = t3 ? t3.contentWindow : window, o3 = this._callMachineTargetOrigin(t3); 30458 o3 && i3.postMessage(r3, o3); 30459 } }, { key: "addListenerForPackagedMessagesFromCallMachine", value: function(e4, t3) { 30460 var n3 = function(n4) { 30461 if (n4.data && "iframe-call-message" === n4.data.what && (!n4.data.callClientId || n4.data.callClientId === t3) && (!n4.data.from || "module" !== n4.data.from)) { 30462 var r3 = n4.data; 30463 e4(r3); 30464 } 30465 }; 30466 return this._wrappedListeners[e4] = n3, window.addEventListener("message", n3), e4; 30467 } }, { key: "removeListenerForPackagedMessagesFromCallMachine", value: function(e4) { 30468 var t3 = this._wrappedListeners[e4]; 30469 t3 && (window.removeEventListener("message", t3), delete this._wrappedListeners[e4]); 30470 } }, { key: "_callMachineTargetOrigin", value: function(e4) { 30471 return e4 ? e4.src ? new URL(e4.src).origin : void 0 : this._targetOriginFromWindowLocation(); 30472 } }, { key: "_targetOriginFromWindowLocation", value: function() { 30473 return "file:" === window.location.protocol ? "*" : window.location.origin; 30474 } }]); 30475 })(); 30476 js2 = (function() { 30477 function e3() { 30478 var n3, r3, i3, o3; 30479 return t2(this, e3), r3 = this, i3 = a2(i3 = e3), n3 = s2(r3, As2() ? Reflect.construct(i3, o3 || [], a2(r3).constructor) : i3.apply(r3, o3)), global.callMachineToDailyJsEmitter = global.callMachineToDailyJsEmitter || new y2.EventEmitter(), global.dailyJsToCallMachineEmitter = global.dailyJsToCallMachineEmitter || new y2.EventEmitter(), n3._wrappedListeners = {}, n3._messageCallbacks = {}, n3; 30480 } 30481 return l2(e3, Ms2), o2(e3, [{ key: "addListenerForMessagesFromCallMachine", value: function(e4, t3, n3) { 30482 this._addListener(e4, global.callMachineToDailyJsEmitter, t3, n3, "received call machine message"); 30483 } }, { key: "addListenerForMessagesFromDailyJs", value: function(e4, t3, n3) { 30484 this._addListener(e4, global.dailyJsToCallMachineEmitter, t3, n3, "received daily-js message"); 30485 } }, { key: "sendMessageToCallMachine", value: function(e4, t3, n3) { 30486 this._sendMessage(e4, global.dailyJsToCallMachineEmitter, n3, t3, "sending message to call machine"); 30487 } }, { key: "sendMessageToDailyJs", value: function(e4, t3) { 30488 this._sendMessage(e4, global.callMachineToDailyJsEmitter, t3, null, "sending message to daily-js"); 30489 } }, { key: "removeListener", value: function(e4) { 30490 var t3 = this._wrappedListeners[e4]; 30491 t3 && (global.callMachineToDailyJsEmitter.removeListener("message", t3), global.dailyJsToCallMachineEmitter.removeListener("message", t3), delete this._wrappedListeners[e4]); 30492 } }, { key: "_addListener", value: function(e4, t3, n3, r3, i3) { 30493 var o3 = this, s3 = function(t4) { 30494 if (t4.callClientId === n3) { 30495 if (t4.callbackStamp && o3._messageCallbacks[t4.callbackStamp]) { 30496 var i4 = t4.callbackStamp; 30497 o3._messageCallbacks[i4].call(r3, t4), delete o3._messageCallbacks[i4]; 30498 } 30499 e4.call(r3, t4); 30500 } 30501 }; 30502 this._wrappedListeners[e4] = s3, t3.addListener("message", s3); 30503 } }, { key: "_sendMessage", value: function(e4, t3, n3, r3, i3) { 30504 var o3 = (function(e5) { 30505 for (var t4 = 1; t4 < arguments.length; t4++) { 30506 var n4 = null != arguments[t4] ? arguments[t4] : {}; 30507 t4 % 2 ? Ps2(Object(n4), true).forEach((function(t5) { 30508 u2(e5, t5, n4[t5]); 30509 })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e5, Object.getOwnPropertyDescriptors(n4)) : Ps2(Object(n4)).forEach((function(t5) { 30510 Object.defineProperty(e5, t5, Object.getOwnPropertyDescriptor(n4, t5)); 30511 })); 30512 } 30513 return e5; 30514 })({}, e4); 30515 if (o3.callClientId = n3, r3) { 30516 var s3 = N2(); 30517 this._messageCallbacks[s3] = r3, o3.callbackStamp = s3; 30518 } 30519 t3.emit("message", o3); 30520 } }]); 30521 })(); 30522 Is2 = "replace"; 30523 xs2 = "shallow-merge"; 30524 Ls2 = [Is2, xs2]; 30525 Ds2 = (function() { 30526 function e3() { 30527 var n3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r3 = n3.data, i3 = n3.mergeStrategy, o3 = void 0 === i3 ? Is2 : i3; 30528 t2(this, e3), e3._validateMergeStrategy(o3), e3._validateData(r3, o3), this.mergeStrategy = o3, this.data = r3; 30529 } 30530 return o2(e3, [{ key: "isNoOp", value: function() { 30531 return e3.isNoOpUpdate(this.data, this.mergeStrategy); 30532 } }], [{ key: "isNoOpUpdate", value: function(e4, t3) { 30533 return 0 === Object.keys(e4).length && t3 === xs2; 30534 } }, { key: "_validateMergeStrategy", value: function(e4) { 30535 if (!Ls2.includes(e4)) throw Error("Unrecognized mergeStrategy provided. Options are: [".concat(Ls2, "]")); 30536 } }, { key: "_validateData", value: function(e4, t3) { 30537 if (!(function(e5) { 30538 if (null == e5 || "object" !== n2(e5)) return false; 30539 var t4 = Object.getPrototypeOf(e5); 30540 return null == t4 || t4 === Object.prototype; 30541 })(e4)) throw Error("Meeting session data must be a plain (map-like) object"); 30542 var r3; 30543 try { 30544 if (r3 = JSON.stringify(e4), t3 === Is2) { 30545 var i3 = JSON.parse(r3); 30546 S2(i3, e4) || console.warn("The meeting session data provided will be modified when serialized.", i3, e4); 30547 } else if (t3 === xs2) { 30548 for (var o3 in e4) if (Object.hasOwnProperty.call(e4, o3) && void 0 !== e4[o3]) { 30549 var s3 = JSON.parse(JSON.stringify(e4[o3])); 30550 S2(e4[o3], s3) || console.warn("At least one key in the meeting session data provided will be modified when serialized.", s3, e4[o3]); 30551 } 30552 } 30553 } catch (e5) { 30554 throw Error("Meeting session data must be serializable to JSON: ".concat(e5)); 30555 } 30556 if (r3.length > qo2) throw Error("Meeting session data is too large (".concat(r3.length, " characters). Maximum size suppported is ").concat(qo2, ".")); 30557 } }]); 30558 })(); 30559 Us2 = (function() { 30560 return o2((function e3(n3) { 30561 t2(this, e3), this._currentLoad = null, this._callClientId = n3; 30562 }), [{ key: "load", value: function() { 30563 var e3, t3 = this, n3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r3 = arguments.length > 1 ? arguments[1] : void 0, i3 = arguments.length > 2 ? arguments[2] : void 0; 30564 if (this.loaded) return window._daily.instances[this._callClientId].callMachine.reset(), void r3(true); 30565 e3 = this._callClientId, window._daily.pendings.push(e3), this._currentLoad && this._currentLoad.cancel(), this._currentLoad = new Vs2(n3, (function() { 30566 r3(false); 30567 }), (function(e4, n4) { 30568 n4 || Bs2(t3._callClientId), i3(e4, n4); 30569 })), this._currentLoad.start(); 30570 } }, { key: "cancel", value: function() { 30571 this._currentLoad && this._currentLoad.cancel(), Bs2(this._callClientId); 30572 } }, { key: "loaded", get: function() { 30573 return this._currentLoad && this._currentLoad.succeeded; 30574 } }]); 30575 })(); 30576 Vs2 = (function() { 30577 return o2((function e3() { 30578 var n3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r3 = arguments.length > 1 ? arguments[1] : void 0, i3 = arguments.length > 2 ? arguments[2] : void 0; 30579 t2(this, e3), this._attemptsRemaining = 3, this._currentAttempt = null, this._dailyConfig = n3, this._successCallback = r3, this._failureCallback = i3; 30580 }), [{ key: "start", value: function() { 30581 var e3 = this; 30582 if (!this._currentAttempt) { 30583 var t3 = function(n3) { 30584 e3._currentAttempt.cancelled || (e3._attemptsRemaining--, e3._failureCallback(n3, e3._attemptsRemaining > 0), e3._attemptsRemaining <= 0 || setTimeout((function() { 30585 e3._currentAttempt.cancelled || (e3._currentAttempt = new qs2(e3._dailyConfig, e3._successCallback, t3), e3._currentAttempt.start()); 30586 }), 3e3)); 30587 }; 30588 this._currentAttempt = new qs2(this._dailyConfig, this._successCallback, t3), this._currentAttempt.start(); 30589 } 30590 } }, { key: "cancel", value: function() { 30591 this._currentAttempt && this._currentAttempt.cancel(); 30592 } }, { key: "cancelled", get: function() { 30593 return this._currentAttempt && this._currentAttempt.cancelled; 30594 } }, { key: "succeeded", get: function() { 30595 return this._currentAttempt && this._currentAttempt.succeeded; 30596 } }]); 30597 })(); 30598 Js2 = (function() { 30599 function e3() { 30600 return t2(this, e3), n3 = this, i3 = arguments, r3 = a2(r3 = e3), s2(n3, Fs2() ? Reflect.construct(r3, i3 || [], a2(n3).constructor) : r3.apply(n3, i3)); 30601 var n3, r3, i3; 30602 } 30603 return l2(e3, Rs2(Error)), o2(e3); 30604 })(); 30605 $s2 = 2e4; 30606 qs2 = (function() { 30607 return o2((function e4(n3, r3, i3) { 30608 t2(this, e4), this._loadAttemptImpl = is2() || !n3.avoidEval ? new zs2(n3, r3, i3) : new Ws2(n3, r3, i3); 30609 }), [{ key: "start", value: (e3 = p2((function* () { 30610 return this._loadAttemptImpl.start(); 30611 })), function() { 30612 return e3.apply(this, arguments); 30613 }) }, { key: "cancel", value: function() { 30614 this._loadAttemptImpl.cancel(); 30615 } }, { key: "cancelled", get: function() { 30616 return this._loadAttemptImpl.cancelled; 30617 } }, { key: "succeeded", get: function() { 30618 return this._loadAttemptImpl.succeeded; 30619 } }]); 30620 var e3; 30621 })(); 30622 zs2 = (function() { 30623 return o2((function e4(n4, r4, i4) { 30624 t2(this, e4), this.cancelled = false, this.succeeded = false, this._networkTimedOut = false, this._networkTimeout = null, this._iosCache = "undefined" != typeof iOSCallObjectBundleCache && iOSCallObjectBundleCache, this._refetchHeaders = null, this._dailyConfig = n4, this._successCallback = r4, this._failureCallback = i4; 30625 }), [{ key: "start", value: (i3 = p2((function* () { 30626 var e4 = B2(this._dailyConfig); 30627 !(yield this._tryLoadFromIOSCache(e4)) && this._loadFromNetwork(e4); 30628 })), function() { 30629 return i3.apply(this, arguments); 30630 }) }, { key: "cancel", value: function() { 30631 clearTimeout(this._networkTimeout), this.cancelled = true; 30632 } }, { key: "_tryLoadFromIOSCache", value: (r3 = p2((function* (e4) { 30633 if (!this._iosCache) return false; 30634 try { 30635 var t3 = yield this._iosCache.get(e4); 30636 return !!this.cancelled || !!t3 && (t3.code ? (Function('"use strict";' + t3.code)(), this.succeeded = true, this._successCallback(), true) : (this._refetchHeaders = t3.refetchHeaders, false)); 30637 } catch (e5) { 30638 return false; 30639 } 30640 })), function(e4) { 30641 return r3.apply(this, arguments); 30642 }) }, { key: "_loadFromNetwork", value: (n3 = p2((function* (e4) { 30643 var t3 = this; 30644 this._networkTimeout = setTimeout((function() { 30645 t3._networkTimedOut = true, t3._failureCallback({ msg: "Timed out (>".concat($s2, " ms) when loading call object bundle ").concat(e4), type: "timeout" }); 30646 }), $s2); 30647 try { 30648 var n4 = this._refetchHeaders ? { headers: this._refetchHeaders } : {}, r4 = yield fetch(e4, n4); 30649 if (clearTimeout(this._networkTimeout), this.cancelled || this._networkTimedOut) throw new Js2(); 30650 var i4 = yield this._getBundleCodeFromResponse(e4, r4); 30651 if (this.cancelled) throw new Js2(); 30652 Function('"use strict";' + i4)(), this._iosCache && this._iosCache.set(e4, i4, r4.headers), this.succeeded = true, this._successCallback(); 30653 } catch (t4) { 30654 if (clearTimeout(this._networkTimeout), t4 instanceof Js2 || this.cancelled || this._networkTimedOut) return; 30655 this._failureCallback({ msg: "Failed to load call object bundle ".concat(e4, ": ").concat(t4), type: t4.message }); 30656 } 30657 })), function(e4) { 30658 return n3.apply(this, arguments); 30659 }) }, { key: "_getBundleCodeFromResponse", value: (e3 = p2((function* (e4, t3) { 30660 if (t3.ok) return yield t3.text(); 30661 if (this._iosCache && 304 === t3.status) return (yield this._iosCache.renew(e4, t3.headers)).code; 30662 throw new Error("Received ".concat(t3.status, " response")); 30663 })), function(t3, n4) { 30664 return e3.apply(this, arguments); 30665 }) }]); 30666 var e3, n3, r3, i3; 30667 })(); 30668 Ws2 = (function() { 30669 return o2((function e3(n3, r3, i3) { 30670 t2(this, e3), this.cancelled = false, this.succeeded = false, this._dailyConfig = n3, this._successCallback = r3, this._failureCallback = i3, this._attemptId = N2(), this._networkTimeout = null, this._scriptElement = null; 30671 }), [{ key: "start", value: function() { 30672 window._dailyCallMachineLoadWaitlist || (window._dailyCallMachineLoadWaitlist = /* @__PURE__ */ new Set()); 30673 var e3 = B2(this._dailyConfig); 30674 "object" === ("undefined" == typeof document ? "undefined" : n2(document)) ? this._startLoading(e3) : this._failureCallback({ msg: "Call object bundle must be loaded in a DOM/web context", type: "missing context" }); 30675 } }, { key: "cancel", value: function() { 30676 this._stopLoading(), this.cancelled = true; 30677 } }, { key: "_startLoading", value: function(e3) { 30678 var t3 = this; 30679 this._signUpForCallMachineLoadWaitlist(), this._networkTimeout = setTimeout((function() { 30680 t3._stopLoading(), t3._failureCallback({ msg: "Timed out (>".concat($s2, " ms) when loading call object bundle ").concat(e3), type: "timeout" }); 30681 }), $s2); 30682 var n3 = document.getElementsByTagName("head")[0], r3 = document.createElement("script"); 30683 this._scriptElement = r3, r3.onload = function() { 30684 t3._stopLoading(), t3.succeeded = true, t3._successCallback(); 30685 }, r3.onerror = function(e4) { 30686 t3._stopLoading(), t3._failureCallback({ msg: "Failed to load call object bundle ".concat(e4.target.src), type: e4.message }); 30687 }, r3.src = e3, n3.appendChild(r3); 30688 } }, { key: "_stopLoading", value: function() { 30689 this._withdrawFromCallMachineLoadWaitlist(), clearTimeout(this._networkTimeout), this._scriptElement && (this._scriptElement.onload = null, this._scriptElement.onerror = null); 30690 } }, { key: "_signUpForCallMachineLoadWaitlist", value: function() { 30691 window._dailyCallMachineLoadWaitlist.add(this._attemptId); 30692 } }, { key: "_withdrawFromCallMachineLoadWaitlist", value: function() { 30693 window._dailyCallMachineLoadWaitlist.delete(this._attemptId); 30694 } }]); 30695 })(); 30696 Hs2 = function(e3, t3, n3) { 30697 return true === Ks2(e3.local, t3, n3); 30698 }; 30699 Gs2 = function(e3, t3, n3) { 30700 return e3.local.streams && e3.local.streams[t3] && e3.local.streams[t3].stream && e3.local.streams[t3].stream["get".concat("video" === n3 ? "Video" : "Audio", "Tracks")]()[0]; 30701 }; 30702 Qs2 = function(e3, t3, n3, r3) { 30703 var i3 = Ys2(e3, t3, n3, r3); 30704 return i3 && i3.pendingTrack; 30705 }; 30706 Ks2 = function(e3, t3, n3) { 30707 if (!e3) return false; 30708 var r3 = function(e4) { 30709 switch (e4) { 30710 case "avatar": 30711 return true; 30712 case "staged": 30713 return e4; 30714 default: 30715 return !!e4; 30716 } 30717 }, i3 = e3.public.subscribedTracks; 30718 return i3 && i3[t3] ? -1 === ["cam-audio", "cam-video", "screen-video", "screen-audio", "rmpAudio", "rmpVideo"].indexOf(n3) && i3[t3].custom ? [true, "staged"].includes(i3[t3].custom) ? r3(i3[t3].custom) : r3(i3[t3].custom[n3]) : r3(i3[t3][n3]) : !i3 || r3(i3.ALL); 30719 }; 30720 Ys2 = function(e3, t3, n3, r3) { 30721 var i3 = Object.values(e3.streams || {}).filter((function(e4) { 30722 return e4.participantId === t3 && e4.type === n3 && e4.pendingTrack && e4.pendingTrack.kind === r3; 30723 })).sort((function(e4, t4) { 30724 return new Date(t4.starttime) - new Date(e4.starttime); 30725 })); 30726 return i3 && i3[0]; 30727 }; 30728 Xs2 = function(e3, t3) { 30729 var n3 = e3.local.public.customTracks; 30730 if (n3 && n3[t3]) return n3[t3].track; 30731 }; 30732 oa2 = /* @__PURE__ */ new Map(); 30733 sa2 = null; 30734 la2 = /* @__PURE__ */ new Map(); 30735 ua2 = null; 30736 fa2 = /* @__PURE__ */ new Set(); 30737 ya2 = Object.freeze({ VIDEO: "video", AUDIO: "audio", SCREEN_VIDEO: "screenVideo", SCREEN_AUDIO: "screenAudio", CUSTOM_VIDEO: "customVideo", CUSTOM_AUDIO: "customAudio" }); 30738 ba2 = Object.freeze({ PARTICIPANTS: "participants", STREAMING: "streaming", TRANSCRIPTION: "transcription" }); 30739 _a2 = Object.values(ya2); 30740 wa2 = ["v", "a", "sv", "sa", "cv", "ca"]; 30741 Object.freeze(_a2.reduce((function(e3, t3, n3) { 30742 return e3[t3] = wa2[n3], e3; 30743 }), {})), Object.freeze(wa2.reduce((function(e3, t3, n3) { 30744 return e3[t3] = _a2[n3], e3; 30745 }), {})); 30746 Sa2 = [ya2.VIDEO, ya2.AUDIO, ya2.SCREEN_VIDEO, ya2.SCREEN_AUDIO]; 30747 ka2 = Object.values(ba2); 30748 Ma2 = ["p", "s", "t"]; 30749 Object.freeze(ka2.reduce((function(e3, t3, n3) { 30750 return e3[t3] = Ma2[n3], e3; 30751 }), {})), Object.freeze(Ma2.reduce((function(e3, t3, n3) { 30752 return e3[t3] = ka2[n3], e3; 30753 }), {})); 30754 Ca2 = (function() { 30755 function e3() { 30756 var n3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r3 = n3.base, i3 = n3.byUserId, o3 = n3.byParticipantId; 30757 t2(this, e3), this.base = r3, this.byUserId = i3, this.byParticipantId = o3; 30758 } 30759 return o2(e3, [{ key: "clone", value: function() { 30760 var t3 = new e3(); 30761 if (this.base instanceof Ea2 ? t3.base = this.base.clone() : t3.base = this.base, void 0 !== this.byUserId) for (var n3 in t3.byUserId = {}, this.byUserId) { 30762 var r3 = this.byUserId[n3]; 30763 t3.byUserId[n3] = r3 instanceof Ea2 ? r3.clone() : r3; 30764 } 30765 if (void 0 !== this.byParticipantId) for (var i3 in t3.byParticipantId = {}, this.byParticipantId) { 30766 var o3 = this.byParticipantId[i3]; 30767 t3.byParticipantId[i3] = o3 instanceof Ea2 ? o3.clone() : o3; 30768 } 30769 return t3; 30770 } }, { key: "toJSONObject", value: function() { 30771 var e4 = {}; 30772 if ("boolean" == typeof this.base ? e4.base = this.base : this.base instanceof Ea2 && (e4.base = this.base.toJSONObject()), void 0 !== this.byUserId) for (var t3 in e4.byUserId = {}, this.byUserId) { 30773 var n3 = this.byUserId[t3]; 30774 e4.byUserId[t3] = n3 instanceof Ea2 ? n3.toJSONObject() : n3; 30775 } 30776 if (void 0 !== this.byParticipantId) for (var r3 in e4.byParticipantId = {}, this.byParticipantId) { 30777 var i3 = this.byParticipantId[r3]; 30778 e4.byParticipantId[r3] = i3 instanceof Ea2 ? i3.toJSONObject() : i3; 30779 } 30780 return e4; 30781 } }, { key: "toMinifiedJSONObject", value: function() { 30782 var e4 = {}; 30783 if (void 0 !== this.base && ("boolean" == typeof this.base ? e4.b = this.base : e4.b = this.base.toMinifiedJSONObject()), void 0 !== this.byUserId) for (var t3 in e4.u = {}, this.byUserId) { 30784 var n3 = this.byUserId[t3]; 30785 e4.u[t3] = "boolean" == typeof n3 ? n3 : n3.toMinifiedJSONObject(); 30786 } 30787 if (void 0 !== this.byParticipantId) for (var r3 in e4.p = {}, this.byParticipantId) { 30788 var i3 = this.byParticipantId[r3]; 30789 e4.p[r3] = "boolean" == typeof i3 ? i3 : i3.toMinifiedJSONObject(); 30790 } 30791 return e4; 30792 } }, { key: "normalize", value: function() { 30793 return this.base instanceof Ea2 && (this.base = this.base.normalize()), this.byUserId && (this.byUserId = Object.fromEntries(Object.entries(this.byUserId).map((function(e4) { 30794 var t3 = f2(e4, 2), n3 = t3[0], r3 = t3[1]; 30795 return [n3, r3 instanceof Ea2 ? r3.normalize() : r3]; 30796 })))), this.byParticipantId && (this.byParticipantId = Object.fromEntries(Object.entries(this.byParticipantId).map((function(e4) { 30797 var t3 = f2(e4, 2), n3 = t3[0], r3 = t3[1]; 30798 return [n3, r3 instanceof Ea2 ? r3.normalize() : r3]; 30799 })))), this; 30800 } }], [{ key: "fromJSONObject", value: function(t3) { 30801 var n3, r3, i3; 30802 if (void 0 !== t3.base && (n3 = "boolean" == typeof t3.base ? t3.base : Ea2.fromJSONObject(t3.base)), void 0 !== t3.byUserId) for (var o3 in r3 = {}, t3.byUserId) { 30803 var s3 = t3.byUserId[o3]; 30804 r3[o3] = "boolean" == typeof s3 ? s3 : Ea2.fromJSONObject(s3); 30805 } 30806 if (void 0 !== t3.byParticipantId) for (var a3 in i3 = {}, t3.byParticipantId) { 30807 var c3 = t3.byParticipantId[a3]; 30808 i3[a3] = "boolean" == typeof c3 ? c3 : Ea2.fromJSONObject(c3); 30809 } 30810 return new e3({ base: n3, byUserId: r3, byParticipantId: i3 }); 30811 } }, { key: "fromMinifiedJSONObject", value: function(t3) { 30812 var n3, r3, i3; 30813 if (void 0 !== t3.b && (n3 = "boolean" == typeof t3.b ? t3.b : Ea2.fromMinifiedJSONObject(t3.b)), void 0 !== t3.u) for (var o3 in r3 = {}, t3.u) { 30814 var s3 = t3.u[o3]; 30815 r3[o3] = "boolean" == typeof s3 ? s3 : Ea2.fromMinifiedJSONObject(s3); 30816 } 30817 if (void 0 !== t3.p) for (var a3 in i3 = {}, t3.p) { 30818 var c3 = t3.p[a3]; 30819 i3[a3] = "boolean" == typeof c3 ? c3 : Ea2.fromMinifiedJSONObject(c3); 30820 } 30821 return new e3({ base: n3, byUserId: r3, byParticipantId: i3 }); 30822 } }, { key: "validateJSONObject", value: function(e4) { 30823 if ("object" !== n2(e4)) return [false, "canReceive must be an object"]; 30824 for (var t3 = ["base", "byUserId", "byParticipantId"], r3 = 0, i3 = Object.keys(e4); r3 < i3.length; r3++) { 30825 var o3 = i3[r3]; 30826 if (!t3.includes(o3)) return [false, "canReceive can only contain keys (".concat(t3.join(", "), ")")]; 30827 if ("base" === o3) { 30828 var s3 = f2(Ea2.validateJSONObject(e4.base, true), 2), a3 = s3[0], c3 = s3[1]; 30829 if (!a3) return [false, c3]; 30830 } else { 30831 if ("object" !== n2(e4[o3])) return [false, "invalid (non-object) value for field '".concat(o3, "' in canReceive")]; 30832 for (var l3 = 0, u3 = Object.values(e4[o3]); l3 < u3.length; l3++) { 30833 var d3 = u3[l3], p3 = f2(Ea2.validateJSONObject(d3), 2), h3 = p3[0], v3 = p3[1]; 30834 if (!h3) return [false, v3]; 30835 } 30836 } 30837 } 30838 return [true]; 30839 } }]); 30840 })(); 30841 Ea2 = (function() { 30842 function e3() { 30843 var n3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, r3 = n3.video, i3 = n3.audio, o3 = n3.screenVideo, s3 = n3.screenAudio, a3 = n3.customVideo, c3 = n3.customAudio; 30844 t2(this, e3), this.video = r3, this.audio = i3, this.screenVideo = o3, this.screenAudio = s3, this.customVideo = a3, this.customAudio = c3; 30845 } 30846 return o2(e3, [{ key: "clone", value: function() { 30847 var t3 = new e3(); 30848 return void 0 !== this.video && (t3.video = this.video), void 0 !== this.audio && (t3.audio = this.audio), void 0 !== this.screenVideo && (t3.screenVideo = this.screenVideo), void 0 !== this.screenAudio && (t3.screenAudio = this.screenAudio), void 0 !== this.customVideo && (t3.customVideo = ma2({}, this.customVideo)), void 0 !== this.customAudio && (t3.customAudio = ma2({}, this.customAudio)), t3; 30849 } }, { key: "toJSONObject", value: function() { 30850 var e4 = {}; 30851 return void 0 !== this.video && (e4.video = this.video), void 0 !== this.audio && (e4.audio = this.audio), void 0 !== this.screenVideo && (e4.screenVideo = this.screenVideo), void 0 !== this.screenAudio && (e4.screenAudio = this.screenAudio), void 0 !== this.customVideo && (e4.customVideo = ma2({}, this.customVideo)), void 0 !== this.customAudio && (e4.customAudio = ma2({}, this.customAudio)), e4; 30852 } }, { key: "toMinifiedJSONObject", value: function() { 30853 var e4 = {}; 30854 return void 0 !== this.video && (e4.v = this.video), void 0 !== this.audio && (e4.a = this.audio), void 0 !== this.screenVideo && (e4.sv = this.screenVideo), void 0 !== this.screenAudio && (e4.sa = this.screenAudio), void 0 !== this.customVideo && (e4.cv = ma2({}, this.customVideo)), void 0 !== this.customAudio && (e4.ca = ma2({}, this.customAudio)), e4; 30855 } }, { key: "normalize", value: function() { 30856 function e4(e5, t3) { 30857 return e5 && 1 === Object.keys(e5).length && e5["*"] === t3; 30858 } 30859 return !(true !== this.video || true !== this.audio || true !== this.screenVideo || true !== this.screenAudio || !e4(this.customVideo, true) || !e4(this.customAudio, true)) || (false !== this.video || false !== this.audio || false !== this.screenVideo || false !== this.screenAudio || !e4(this.customVideo, false) || !e4(this.customAudio, false)) && this; 30860 } }], [{ key: "fromBoolean", value: function(t3) { 30861 return new e3({ video: t3, audio: t3, screenVideo: t3, screenAudio: t3, customVideo: { "*": t3 }, customAudio: { "*": t3 } }); 30862 } }, { key: "fromJSONObject", value: function(t3) { 30863 return new e3({ video: t3.video, audio: t3.audio, screenVideo: t3.screenVideo, screenAudio: t3.screenAudio, customVideo: void 0 !== t3.customVideo ? ma2({}, t3.customVideo) : void 0, customAudio: void 0 !== t3.customAudio ? ma2({}, t3.customAudio) : void 0 }); 30864 } }, { key: "fromMinifiedJSONObject", value: function(t3) { 30865 return new e3({ video: t3.v, audio: t3.a, screenVideo: t3.sv, screenAudio: t3.sa, customVideo: t3.cv, customAudio: t3.ca }); 30866 } }, { key: "validateJSONObject", value: function(e4, t3) { 30867 if ("boolean" == typeof e4) return [true]; 30868 if ("object" !== n2(e4)) return [false, "invalid (non-object, non-boolean) value in canReceive"]; 30869 for (var r3 = Object.keys(e4), i3 = 0, o3 = r3; i3 < o3.length; i3++) { 30870 var s3 = o3[i3]; 30871 if (!_a2.includes(s3)) return [false, "invalid media type '".concat(s3, "' in canReceive")]; 30872 if (Sa2.includes(s3)) { 30873 if ("boolean" != typeof e4[s3]) return [false, "invalid (non-boolean) value for media type '".concat(s3, "' in canReceive")]; 30874 } else { 30875 if ("object" !== n2(e4[s3])) return [false, "invalid (non-object) value for media type '".concat(s3, "' in canReceive")]; 30876 for (var a3 = 0, c3 = Object.values(e4[s3]); a3 < c3.length; a3++) { 30877 if ("boolean" != typeof c3[a3]) return [false, "invalid (non-boolean) value for entry within '".concat(s3, "' in canReceive")]; 30878 } 30879 if (t3 && void 0 === e4[s3]["*"]) return [false, `canReceive "base" permission must specify "*" as an entry within '`.concat(s3, "'")]; 30880 } 30881 } 30882 return t3 && r3.length !== _a2.length ? [false, 'canReceive "base" permission must specify all media types: '.concat(_a2.join(", "), " (or be set to a boolean shorthand)")] : [true]; 30883 } }]); 30884 })(); 30885 Ta2 = ["result"]; 30886 Oa2 = ["preserveIframe"]; 30887 La2 = {}; 30888 Da2 = "video"; 30889 Na2 = "voice"; 30890 Ra2 = is2() ? { data: {} } : { data: {}, topology: "none" }; 30891 Fa2 = { present: 0, hidden: 0 }; 30892 Ba2 = { maxBitrate: { min: 1e5, max: 25e5 }, maxFramerate: { min: 1, max: 30 }, scaleResolutionDownBy: { min: 1, max: 8 } }; 30893 Ua2 = Object.keys(Ba2); 30894 Va2 = ["state", "volume", "simulcastEncodings"]; 30895 Ja2 = { androidInCallNotification: { title: "string", subtitle: "string", iconName: "string", disableForCustomOverride: "boolean" }, disableAutoDeviceManagement: { audio: "boolean", video: "boolean" } }; 30896 $a2 = { id: { iconPath: "string", iconPathDarkMode: "string", label: "string", tooltip: "string", visualState: "'default' | 'sidebar-open' | 'active'" } }; 30897 qa2 = { id: { allow: "string", controlledBy: "'*' | 'owners' | string[]", csp: "string", iconURL: "string", label: "string", loading: "'eager' | 'lazy'", location: "'main' | 'sidebar'", name: "string", referrerPolicy: "string", sandbox: "string", src: "string", srcdoc: "string", shared: "string[] | 'owners' | boolean" } }; 30898 za2 = { customIntegrations: { validate: vc2, help: hc2() }, customTrayButtons: { validate: fc2, help: "customTrayButtons should be a dictionary of the type ".concat(JSON.stringify($a2)) }, url: { validate: function(e3) { 30899 return "string" == typeof e3; 30900 }, help: "url should be a string" }, baseUrl: { validate: function(e3) { 30901 return "string" == typeof e3; 30902 }, help: "baseUrl should be a string" }, token: { validate: function(e3) { 30903 return "string" == typeof e3; 30904 }, help: "token should be a string", queryString: "t" }, dailyConfig: { validate: function(e3, t3) { 30905 try { 30906 return t3.validateDailyConfig(e3), true; 30907 } catch (e4) { 30908 console.error("Failed to validate dailyConfig", e4); 30909 } 30910 return false; 30911 }, help: "Unsupported dailyConfig. Check error logs for detailed info." }, reactNativeConfig: { validate: function(e3) { 30912 return gc2(e3, Ja2); 30913 }, help: "reactNativeConfig should look like ".concat(JSON.stringify(Ja2), ", all fields optional") }, lang: { validate: function(e3) { 30914 return ["da", "de", "en-us", "en", "es", "fi", "fr", "it", "jp", "ka", "nl", "no", "pl", "pt", "pt-BR", "ru", "sv", "tr", "user"].includes(e3); 30915 }, help: "language not supported. Options are: da, de, en-us, en, es, fi, fr, it, jp, ka, nl, no, pl, pt, pt-BR, ru, sv, tr, user" }, userName: true, userData: { validate: function(e3) { 30916 try { 30917 return ic2(e3), true; 30918 } catch (e4) { 30919 return console.error(e4), false; 30920 } 30921 }, help: "invalid userData type provided" }, startVideoOff: true, startAudioOff: true, allowLocalVideo: true, allowLocalAudio: true, activeSpeakerMode: true, showLeaveButton: true, showLocalVideo: true, showParticipantsBar: true, showFullscreenButton: true, showUserNameChangeUI: true, iframeStyle: true, customLayout: true, cssFile: true, cssText: true, bodyClass: true, videoSource: { validate: function(e3, t3) { 30922 if ("boolean" == typeof e3) return t3._preloadCache.allowLocalVideo = e3, true; 30923 var n3; 30924 if (e3 instanceof MediaStreamTrack) t3._sharedTracks.videoTrack = e3, n3 = { customTrack: Qo2 }; 30925 else { 30926 if (delete t3._sharedTracks.videoTrack, "string" != typeof e3) return console.error("videoSource must be a MediaStreamTrack, boolean, or a string"), false; 30927 n3 = { deviceId: e3 }; 30928 } 30929 return t3._updatePreloadCacheInputSettings({ video: { settings: n3 } }, false), true; 30930 } }, audioSource: { validate: function(e3, t3) { 30931 if ("boolean" == typeof e3) return t3._preloadCache.allowLocalAudio = e3, true; 30932 var n3; 30933 if (e3 instanceof MediaStreamTrack) t3._sharedTracks.audioTrack = e3, n3 = { customTrack: Qo2 }; 30934 else { 30935 if (delete t3._sharedTracks.audioTrack, "string" != typeof e3) return console.error("audioSource must be a MediaStreamTrack, boolean, or a string"), false; 30936 n3 = { deviceId: e3 }; 30937 } 30938 return t3._updatePreloadCacheInputSettings({ audio: { settings: n3 } }, false), true; 30939 } }, subscribeToTracksAutomatically: { validate: function(e3, t3) { 30940 return t3._preloadCache.subscribeToTracksAutomatically = e3, true; 30941 } }, theme: { validate: function(e3) { 30942 var t3 = ["accent", "accentText", "background", "backgroundAccent", "baseText", "border", "mainAreaBg", "mainAreaBgAccent", "mainAreaText", "supportiveText"], r3 = function(e4) { 30943 for (var n3 = 0, r4 = Object.keys(e4); n3 < r4.length; n3++) { 30944 var i3 = r4[n3]; 30945 if (!t3.includes(i3)) return console.error('unsupported color "'.concat(i3, '". Valid colors: ').concat(t3.join(", "))), false; 30946 if (!e4[i3].match(/^#[0-9a-f]{6}|#[0-9a-f]{3}$/i)) return console.error("".concat(i3, ' theme color should be provided in valid hex color format. Received: "').concat(e4[i3], '"')), false; 30947 } 30948 return true; 30949 }; 30950 return "object" === n2(e3) && ("light" in e3 && "dark" in e3 || "colors" in e3) ? "light" in e3 && "dark" in e3 ? "colors" in e3.light ? "colors" in e3.dark ? r3(e3.light.colors) && r3(e3.dark.colors) : (console.error('Dark theme is missing "colors" property.', e3), false) : (console.error('Light theme is missing "colors" property.', e3), false) : r3(e3.colors) : (console.error('Theme must contain either both "light" and "dark" properties, or "colors".', e3), false); 30951 }, help: "unsupported theme configuration. Check error logs for detailed info." }, layoutConfig: { validate: function(e3) { 30952 if ("grid" in e3) { 30953 var t3 = e3.grid; 30954 if ("maxTilesPerPage" in t3) { 30955 if (!Number.isInteger(t3.maxTilesPerPage)) return console.error("grid.maxTilesPerPage should be an integer. You passed ".concat(t3.maxTilesPerPage, ".")), false; 30956 if (t3.maxTilesPerPage > 49) return console.error("grid.maxTilesPerPage can't be larger than 49 without sacrificing browser performance. Please contact us at https://www.daily.co/contact to talk about your use case."), false; 30957 } 30958 if ("minTilesPerPage" in t3) { 30959 if (!Number.isInteger(t3.minTilesPerPage)) return console.error("grid.minTilesPerPage should be an integer. You passed ".concat(t3.minTilesPerPage, ".")), false; 30960 if (t3.minTilesPerPage < 1) return console.error("grid.minTilesPerPage can't be lower than 1."), false; 30961 if ("maxTilesPerPage" in t3 && t3.minTilesPerPage > t3.maxTilesPerPage) return console.error("grid.minTilesPerPage can't be higher than grid.maxTilesPerPage."), false; 30962 } 30963 } 30964 return true; 30965 }, help: "unsupported layoutConfig. Check error logs for detailed info." }, receiveSettings: { validate: function(e3) { 30966 return oc2(e3, { allowAllParticipantsKey: false }); 30967 }, help: pc2({ allowAllParticipantsKey: false }) }, sendSettings: { validate: function(e3, t3) { 30968 return !!(function(e4, t4) { 30969 try { 30970 return t4.validateUpdateSendSettings(e4), true; 30971 } catch (e5) { 30972 return console.error("Failed to validate send settings", e5), false; 30973 } 30974 })(e3, t3) && (t3._preloadCache.sendSettings = e3, true); 30975 }, help: "Invalid sendSettings provided. Check error logs for detailed info." }, inputSettings: { validate: function(e3, t3) { 30976 var n3; 30977 return !!sc2(e3) && (t3._inputSettings || (t3._inputSettings = {}), ac2(e3, null === (n3 = t3.properties) || void 0 === n3 ? void 0 : n3.dailyConfig, t3._sharedTracks), t3._updatePreloadCacheInputSettings(e3, true), true); 30978 }, help: dc2() }, layout: { validate: function(e3) { 30979 return "custom-v1" === e3 || "browser" === e3 || "none" === e3; 30980 }, help: 'layout may only be set to "custom-v1"', queryString: "layout" }, emb: { queryString: "emb" }, embHref: { queryString: "embHref" }, dailyJsVersion: { queryString: "dailyJsVersion" }, proxy: { queryString: "proxy" }, strictMode: true, allowMultipleCallInstances: true }; 30981 Wa2 = { styles: { validate: function(e3) { 30982 for (var t3 in e3) if ("cam" !== t3 && "screen" !== t3) return false; 30983 if (e3.cam) { 30984 for (var n3 in e3.cam) if ("div" !== n3 && "video" !== n3) return false; 30985 } 30986 if (e3.screen) { 30987 for (var r3 in e3.screen) if ("div" !== r3 && "video" !== r3) return false; 30988 } 30989 return true; 30990 }, help: "styles format should be a subset of: { cam: {div: {}, video: {}}, screen: {div: {}, video: {}} }" }, setSubscribedTracks: { validate: function(e3, t3) { 30991 if (t3._preloadCache.subscribeToTracksAutomatically) return false; 30992 var n3 = [true, false, "staged"]; 30993 if (n3.includes(e3) || !is2() && "avatar" === e3) return true; 30994 var r3 = ["audio", "video", "screenAudio", "screenVideo", "rmpAudio", "rmpVideo"], i3 = function(e4) { 30995 var t4 = arguments.length > 1 && void 0 !== arguments[1] && arguments[1]; 30996 for (var o3 in e4) if ("custom" === o3) { 30997 if (!n3.includes(e4[o3]) && !i3(e4[o3], true)) return false; 30998 } else { 30999 var s3 = !t4 && !r3.includes(o3), a3 = !n3.includes(e4[o3]); 31000 if (s3 || a3) return false; 31001 } 31002 return true; 31003 }; 31004 return i3(e3); 31005 }, help: "setSubscribedTracks cannot be used when setSubscribeToTracksAutomatically is enabled, and should be of the form: " + "true".concat(is2() ? "" : " | 'avatar'", " | false | 'staged' | { [audio: true|false|'staged'], [video: true|false|'staged'], [screenAudio: true|false|'staged'], [screenVideo: true|false|'staged'] }") }, setAudio: true, setVideo: true, setScreenShare: { validate: function(e3) { 31006 return false === e3; 31007 }, help: "setScreenShare must be false, as it's only meant for stopping remote participants' screen shares" }, eject: true, updatePermissions: { validate: function(e3) { 31008 for (var t3 = 0, n3 = Object.entries(e3); t3 < n3.length; t3++) { 31009 var r3 = f2(n3[t3], 2), i3 = r3[0], o3 = r3[1]; 31010 switch (i3) { 31011 case "hasPresence": 31012 if ("boolean" != typeof o3) return false; 31013 break; 31014 case "canSend": 31015 if (o3 instanceof Set || o3 instanceof Array || Array.isArray(o3)) { 31016 var s3, a3 = ["video", "audio", "screenVideo", "screenAudio", "customVideo", "customAudio"], c3 = Ia2(o3); 31017 try { 31018 for (c3.s(); !(s3 = c3.n()).done; ) { 31019 var l3 = s3.value; 31020 if (!a3.includes(l3)) return false; 31021 } 31022 } catch (e4) { 31023 c3.e(e4); 31024 } finally { 31025 c3.f(); 31026 } 31027 } else if ("boolean" != typeof o3) return false; 31028 (o3 instanceof Array || Array.isArray(o3)) && (e3.canSend = new Set(o3)); 31029 break; 31030 case "canReceive": 31031 var u3 = f2(Ca2.validateJSONObject(o3), 2), d3 = u3[0], p3 = u3[1]; 31032 if (!d3) return console.error(p3), false; 31033 break; 31034 case "canAdmin": 31035 if (o3 instanceof Set || o3 instanceof Array || Array.isArray(o3)) { 31036 var h3, v3 = ["participants", "streaming", "transcription"], g3 = Ia2(o3); 31037 try { 31038 for (g3.s(); !(h3 = g3.n()).done; ) { 31039 var m3 = h3.value; 31040 if (!v3.includes(m3)) return false; 31041 } 31042 } catch (e4) { 31043 g3.e(e4); 31044 } finally { 31045 g3.f(); 31046 } 31047 } else if ("boolean" != typeof o3) return false; 31048 (o3 instanceof Array || Array.isArray(o3)) && (e3.canAdmin = new Set(o3)); 31049 break; 31050 default: 31051 return false; 31052 } 31053 } 31054 return true; 31055 }, help: "updatePermissions can take hasPresence, canSend, canReceive, and canAdmin permissions. hasPresence must be a boolean. canSend can be a boolean or an Array or Set of media types (video, audio, screenVideo, screenAudio, customVideo, customAudio). canReceive must be an object specifying base, byUserId, and/or byParticipantId fields (see documentation for more details). canAdmin can be a boolean or an Array or Set of admin types (participants, streaming, transcription)." } }; 31056 Promise.any || (Promise.any = (function() { 31057 var e3 = p2((function* (e4) { 31058 return new Promise((function(t3, n3) { 31059 var r3 = []; 31060 e4.forEach((function(i3) { 31061 return Promise.resolve(i3).then((function(e5) { 31062 t3(e5); 31063 })).catch((function(t4) { 31064 r3.push(t4), r3.length === e4.length && n3(r3); 31065 })); 31066 })); 31067 })); 31068 })); 31069 return function(t3) { 31070 return e3.apply(this, arguments); 31071 }; 31072 })()); 31073 Ha2 = (function() { 31074 function r3(e3) { 31075 var n3, i4, o3, c4, l3, d4, h4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; 31076 if (t2(this, r3), o3 = this, c4 = a2(c4 = r3), u2(i4 = s2(o3, ja2() ? Reflect.construct(c4, l3 || [], a2(o3).constructor) : c4.apply(o3, l3)), "startListeningForDeviceChanges", (function() { 31077 da2(i4.handleDeviceChange); 31078 })), u2(i4, "stopListeningForDeviceChanges", (function() { 31079 pa2(i4.handleDeviceChange); 31080 })), u2(i4, "handleDeviceChange", (function(e4) { 31081 e4 = e4.map((function(e5) { 31082 return JSON.parse(JSON.stringify(e5)); 31083 })), i4.emitDailyJSEvent({ action: "available-devices-updated", availableDevices: e4 }); 31084 })), u2(i4, "handleNativeAppStateChange", (function() { 31085 var e4 = p2((function* (e5) { 31086 if ("destroyed" === e5) return console.warn("App has been destroyed before leaving the meeting. Cleaning up all the resources!"), void (yield i4.destroy()); 31087 var t3 = "active" === e5; 31088 i4.disableReactNativeAutoDeviceManagement("video") || (t3 ? i4.camUnmutedBeforeLosingNativeActiveState && i4.setLocalVideo(true) : (i4.camUnmutedBeforeLosingNativeActiveState = i4.localVideo(), i4.camUnmutedBeforeLosingNativeActiveState && i4.setLocalVideo(false))); 31089 })); 31090 return function(t3) { 31091 return e4.apply(this, arguments); 31092 }; 31093 })()), u2(i4, "handleNativeAudioFocusChange", (function(e4) { 31094 i4.disableReactNativeAutoDeviceManagement("audio") || (i4._hasNativeAudioFocus = e4, i4.toggleParticipantAudioBasedOnNativeAudioFocus(), i4._hasNativeAudioFocus ? i4.micUnmutedBeforeLosingNativeAudioFocus && i4.setLocalAudio(true) : (i4.micUnmutedBeforeLosingNativeAudioFocus = i4.localAudio(), i4.setLocalAudio(false))); 31095 })), u2(i4, "handleNativeSystemScreenCaptureStop", (function() { 31096 i4.stopScreenShare(); 31097 })), i4.strictMode = void 0 === h4.strictMode || h4.strictMode, i4.allowMultipleCallInstances = null !== (n3 = h4.allowMultipleCallInstances) && void 0 !== n3 && n3, Object.keys(La2).length && (i4._logDuplicateInstanceAttempt(), !i4.allowMultipleCallInstances)) { 31098 if (i4.strictMode) throw new Error("Duplicate DailyIframe instances are not allowed"); 31099 console.warn("Using strictMode: false to allow multiple call instances is now deprecated. Set `allowMultipleCallInstances: true`"); 31100 } 31101 if (window._daily || (window._daily = { pendings: [], instances: {} }), i4.callClientId = N2(), La2[(d4 = i4).callClientId] = d4, window._daily.instances[i4.callClientId] = {}, i4._sharedTracks = {}, window._daily.instances[i4.callClientId].tracks = i4._sharedTracks, h4.dailyJsVersion = r3.version(), i4._iframe = e3, i4._callObjectMode = "none" === h4.layout && !i4._iframe, i4._preloadCache = { subscribeToTracksAutomatically: true, outputDeviceId: null, inputSettings: null, sendSettings: null, videoTrackForNetworkConnectivityTest: null, videoTrackForConnectionQualityTest: null }, void 0 !== h4.showLocalVideo ? i4._callObjectMode ? console.error("showLocalVideo is not available in call object mode") : i4._showLocalVideo = !!h4.showLocalVideo : i4._showLocalVideo = true, void 0 !== h4.showParticipantsBar ? i4._callObjectMode ? console.error("showParticipantsBar is not available in call object mode") : i4._showParticipantsBar = !!h4.showParticipantsBar : i4._showParticipantsBar = true, void 0 !== h4.customIntegrations ? i4._callObjectMode ? console.error("customIntegrations is not available in call object mode") : i4._customIntegrations = h4.customIntegrations : i4._customIntegrations = {}, void 0 !== h4.customTrayButtons ? i4._callObjectMode ? console.error("customTrayButtons is not available in call object mode") : i4._customTrayButtons = h4.customTrayButtons : i4._customTrayButtons = {}, void 0 !== h4.activeSpeakerMode ? i4._callObjectMode ? console.error("activeSpeakerMode is not available in call object mode") : i4._activeSpeakerMode = !!h4.activeSpeakerMode : i4._activeSpeakerMode = false, h4.receiveSettings ? i4._callObjectMode ? i4._receiveSettings = h4.receiveSettings : console.error("receiveSettings is only available in call object mode") : i4._receiveSettings = {}, i4.validateProperties(h4), i4.properties = Aa2({}, h4), i4._inputSettings || (i4._inputSettings = {}), i4._callObjectLoader = i4._callObjectMode ? new Us2(i4.callClientId) : null, i4._callState = ti2, i4._isPreparingToJoin = false, i4._accessState = { access: fi2 }, i4._meetingSessionSummary = {}, i4._finalSummaryOfPrevSession = {}, i4._meetingSessionState = _c2(Ra2, i4._callObjectMode), i4._nativeInCallAudioMode = Da2, i4._participants = {}, i4._isScreenSharing = false, i4._participantCounts = Fa2, i4._rmpPlayerState = {}, i4._waitingParticipants = {}, i4._network = { threshold: "good", quality: 100, networkState: "unknown", stats: {} }, i4._activeSpeaker = {}, i4._localAudioLevel = 0, i4._isLocalAudioLevelObserverRunning = false, i4._remoteParticipantsAudioLevel = {}, i4._isRemoteParticipantsAudioLevelObserverRunning = false, i4._maxAppMessageSize = $o2, i4._messageChannel = is2() ? new js2() : new Os2(), i4._iframe && (i4._iframe.requestFullscreen ? i4._iframe.addEventListener("fullscreenchange", (function() { 31102 document.fullscreenElement === i4._iframe ? (i4.emitDailyJSEvent({ action: Io2 }), i4.sendMessageToCallMachine({ action: Io2 })) : (i4.emitDailyJSEvent({ action: xo2 }), i4.sendMessageToCallMachine({ action: xo2 })); 31103 })) : i4._iframe.webkitRequestFullscreen && i4._iframe.addEventListener("webkitfullscreenchange", (function() { 31104 document.webkitFullscreenElement === i4._iframe ? (i4.emitDailyJSEvent({ action: Io2 }), i4.sendMessageToCallMachine({ action: Io2 })) : (i4.emitDailyJSEvent({ action: xo2 }), i4.sendMessageToCallMachine({ action: xo2 })); 31105 }))), is2()) { 31106 var f3 = i4.nativeUtils(); 31107 f3.addAudioFocusChangeListener && f3.removeAudioFocusChangeListener && f3.addAppStateChangeListener && f3.removeAppStateChangeListener && f3.addSystemScreenCaptureStopListener && f3.removeSystemScreenCaptureStopListener || console.warn("expected (add|remove)(AudioFocusChange|AppActiveStateChange|SystemScreenCaptureStop)Listener to be available in React Native"), i4._hasNativeAudioFocus = true, f3.addAudioFocusChangeListener(i4.handleNativeAudioFocusChange), f3.addAppStateChangeListener(i4.handleNativeAppStateChange), f3.addSystemScreenCaptureStopListener(i4.handleNativeSystemScreenCaptureStop); 31108 } 31109 return i4._callObjectMode && i4.startListeningForDeviceChanges(), i4._messageChannel.addListenerForMessagesFromCallMachine(i4.handleMessageFromCallMachine, i4.callClientId, i4), i4; 31110 } 31111 return l2(r3, b2), o2(r3, [{ key: "destroy", value: (ee3 = p2((function* () { 31112 var e3; 31113 try { 31114 yield this.leave(); 31115 } catch (e4) { 31116 } 31117 var t3 = this._iframe; 31118 if (t3) { 31119 var n3 = t3.parentElement; 31120 n3 && n3.removeChild(t3); 31121 } 31122 if (this._messageChannel.removeListener(this.handleMessageFromCallMachine), is2()) { 31123 var r4 = this.nativeUtils(); 31124 r4.removeAudioFocusChangeListener(this.handleNativeAudioFocusChange), r4.removeAppStateChangeListener(this.handleNativeAppStateChange), r4.removeSystemScreenCaptureStopListener(this.handleNativeSystemScreenCaptureStop); 31125 } 31126 this._callObjectMode && this.stopListeningForDeviceChanges(), this.resetMeetingDependentVars(), this._destroyed = true, this.emitDailyJSEvent({ action: "call-instance-destroyed" }), delete La2[this.callClientId], (null === (e3 = window) || void 0 === e3 || null === (e3 = e3._daily) || void 0 === e3 ? void 0 : e3.instances) && delete window._daily.instances[this.callClientId], this.strictMode && (this.callClientId = void 0); 31127 })), function() { 31128 return ee3.apply(this, arguments); 31129 }) }, { key: "isDestroyed", value: function() { 31130 return !!this._destroyed; 31131 } }, { key: "loadCss", value: function(e3) { 31132 var t3 = e3.bodyClass, n3 = e3.cssFile, r4 = e3.cssText; 31133 return nc2(), this.sendMessageToCallMachine({ action: "load-css", cssFile: this.absoluteUrl(n3), bodyClass: t3, cssText: r4 }), this; 31134 } }, { key: "iframe", value: function() { 31135 return nc2(), this._iframe; 31136 } }, { key: "meetingState", value: function() { 31137 return this._callState; 31138 } }, { key: "accessState", value: function() { 31139 return ec2(this._callObjectMode, "accessState()"), this._accessState; 31140 } }, { key: "participants", value: function() { 31141 return this._participants; 31142 } }, { key: "participantCounts", value: function() { 31143 return this._participantCounts; 31144 } }, { key: "waitingParticipants", value: function() { 31145 return ec2(this._callObjectMode, "waitingParticipants()"), this._waitingParticipants; 31146 } }, { key: "validateParticipantProperties", value: function(e3, t3) { 31147 for (var n3 in t3) { 31148 if (!Wa2[n3]) throw new Error("unrecognized updateParticipant property ".concat(n3)); 31149 if (Wa2[n3].validate && !Wa2[n3].validate(t3[n3], this, this._participants[e3])) throw new Error(Wa2[n3].help); 31150 } 31151 } }, { key: "updateParticipant", value: function(e3, t3) { 31152 return this._participants.local && this._participants.local.session_id === e3 && (e3 = "local"), e3 && t3 && (this.validateParticipantProperties(e3, t3), this.sendMessageToCallMachine({ action: "update-participant", id: e3, properties: t3 })), this; 31153 } }, { key: "updateParticipants", value: function(e3) { 31154 var t3 = this._participants.local && this._participants.local.session_id; 31155 for (var n3 in e3) n3 === t3 && (n3 = "local"), n3 && e3[n3] && this.validateParticipantProperties(n3, e3[n3]); 31156 return this.sendMessageToCallMachine({ action: "update-participants", participants: e3 }), this; 31157 } }, { key: "updateWaitingParticipant", value: (Z3 = p2((function* () { 31158 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", r4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; 31159 if (ec2(this._callObjectMode, "updateWaitingParticipant()"), Qa2(this._callState, "updateWaitingParticipant()"), "string" != typeof t3 || "object" !== n2(r4)) throw new Error("updateWaitingParticipant() must take an id string and a updates object"); 31160 return new Promise((function(n3, i4) { 31161 e3.sendMessageToCallMachine({ action: "daily-method-update-waiting-participant", id: t3, updates: r4 }, (function(e4) { 31162 e4.error && i4(e4.error), e4.id || i4(new Error("unknown error in updateWaitingParticipant()")), n3({ id: e4.id }); 31163 })); 31164 })); 31165 })), function() { 31166 return Z3.apply(this, arguments); 31167 }) }, { key: "updateWaitingParticipants", value: (X3 = p2((function* () { 31168 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31169 if (ec2(this._callObjectMode, "updateWaitingParticipants()"), Qa2(this._callState, "updateWaitingParticipants()"), "object" !== n2(t3)) throw new Error("updateWaitingParticipants() must take a mapping between ids and update objects"); 31170 return new Promise((function(n3, r4) { 31171 e3.sendMessageToCallMachine({ action: "daily-method-update-waiting-participants", updatesById: t3 }, (function(e4) { 31172 e4.error && r4(e4.error), e4.ids || r4(new Error("unknown error in updateWaitingParticipants()")), n3({ ids: e4.ids }); 31173 })); 31174 })); 31175 })), function() { 31176 return X3.apply(this, arguments); 31177 }) }, { key: "requestAccess", value: (Y3 = p2((function* () { 31178 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, n3 = t3.access, r4 = void 0 === n3 ? { level: vi2 } : n3, i4 = t3.name, o3 = void 0 === i4 ? "" : i4; 31179 return ec2(this._callObjectMode, "requestAccess()"), Qa2(this._callState, "requestAccess()"), new Promise((function(t4, n4) { 31180 e3.sendMessageToCallMachine({ action: "daily-method-request-access", access: r4, name: o3 }, (function(e4) { 31181 e4.error && n4(e4.error), e4.access || n4(new Error("unknown error in requestAccess()")), t4({ access: e4.access, granted: e4.granted }); 31182 })); 31183 })); 31184 })), function() { 31185 return Y3.apply(this, arguments); 31186 }) }, { key: "localAudio", value: function() { 31187 return this._participants.local ? !["blocked", "off"].includes(this._participants.local.tracks.audio.state) : null; 31188 } }, { key: "localVideo", value: function() { 31189 return this._participants.local ? !["blocked", "off"].includes(this._participants.local.tracks.video.state) : null; 31190 } }, { key: "setLocalAudio", value: function(e3) { 31191 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; 31192 return "forceDiscardTrack" in t3 && (is2() ? (console.warn("forceDiscardTrack option not supported in React Native; ignoring"), t3 = {}) : e3 && (console.warn("forceDiscardTrack option only supported when calling setLocalAudio(false); ignoring"), t3 = {})), this.sendMessageToCallMachine({ action: "local-audio", state: e3, options: t3 }), this; 31193 } }, { key: "localScreenAudio", value: function() { 31194 return this._participants.local ? !["blocked", "off"].includes(this._participants.local.tracks.screenAudio.state) : null; 31195 } }, { key: "localScreenVideo", value: function() { 31196 return this._participants.local ? !["blocked", "off"].includes(this._participants.local.tracks.screenVideo.state) : null; 31197 } }, { key: "updateScreenShare", value: function(e3) { 31198 if (this._isScreenSharing) return this.sendMessageToCallMachine({ action: "local-screen-update", options: e3 }), this; 31199 console.warn("There is no screen share in progress. Try calling startScreenShare first."); 31200 } }, { key: "setLocalVideo", value: function(e3) { 31201 return this.sendMessageToCallMachine({ action: "local-video", state: e3 }), this; 31202 } }, { key: "_setAllowLocalAudio", value: function(e3) { 31203 if (this._preloadCache.allowLocalAudio = e3, this._callMachineInitialized) return this.sendMessageToCallMachine({ action: "set-allow-local-audio", state: e3 }), this; 31204 } }, { key: "_setAllowLocalVideo", value: function(e3) { 31205 if (this._preloadCache.allowLocalVideo = e3, this._callMachineInitialized) return this.sendMessageToCallMachine({ action: "set-allow-local-video", state: e3 }), this; 31206 } }, { key: "getReceiveSettings", value: (K3 = p2((function* (e3) { 31207 var t3 = this, r4 = (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}).showInheritedValues, i4 = void 0 !== r4 && r4; 31208 if (ec2(this._callObjectMode, "getReceiveSettings()"), !this._callMachineInitialized) return this._receiveSettings; 31209 switch (n2(e3)) { 31210 case "string": 31211 return new Promise((function(n3) { 31212 t3.sendMessageToCallMachine({ action: "get-single-participant-receive-settings", id: e3, showInheritedValues: i4 }, (function(e4) { 31213 n3(e4.receiveSettings); 31214 })); 31215 })); 31216 case "undefined": 31217 return this._receiveSettings; 31218 default: 31219 throw new Error('first argument to getReceiveSettings() must be a participant id (or "base"), or there should be no arguments'); 31220 } 31221 })), function(e3) { 31222 return K3.apply(this, arguments); 31223 }) }, { key: "updateReceiveSettings", value: (Q3 = p2((function* (e3) { 31224 var t3 = this; 31225 if (ec2(this._callObjectMode, "updateReceiveSettings()"), !oc2(e3, { allowAllParticipantsKey: true })) throw new Error(pc2({ allowAllParticipantsKey: true })); 31226 return Qa2(this._callState, "updateReceiveSettings()", "To specify receive settings earlier, use the receiveSettings config property."), new Promise((function(n3) { 31227 t3.sendMessageToCallMachine({ action: "update-receive-settings", receiveSettings: e3 }, (function(e4) { 31228 n3({ receiveSettings: e4.receiveSettings }); 31229 })); 31230 })); 31231 })), function(e3) { 31232 return Q3.apply(this, arguments); 31233 }) }, { key: "_prepInputSettingsForSharing", value: function(e3, t3) { 31234 if (e3) { 31235 var n3 = {}; 31236 if (e3.audio) { 31237 var r4, i4, o3; 31238 e3.audio.settings && (!Object.keys(e3.audio.settings).length && t3 || (n3.audio = { settings: Aa2({}, e3.audio.settings) })), t3 && null !== (r4 = n3.audio) && void 0 !== r4 && null !== (r4 = r4.settings) && void 0 !== r4 && r4.customTrack && (n3.audio.settings = { customTrack: this._sharedTracks.audioTrack }); 31239 var s3 = "none" === (null === (i4 = e3.audio.processor) || void 0 === i4 ? void 0 : i4.type) && (null === (o3 = e3.audio.processor) || void 0 === o3 ? void 0 : o3._isDefaultWhenNone); 31240 if (e3.audio.processor && !s3) { 31241 var a3 = Aa2({}, e3.audio.processor); 31242 delete a3._isDefaultWhenNone, n3.audio = Aa2(Aa2({}, n3.audio), {}, { processor: a3 }); 31243 } 31244 } 31245 if (e3.video) { 31246 var c4, l3, u3; 31247 e3.video.settings && (!Object.keys(e3.video.settings).length && t3 || (n3.video = { settings: Aa2({}, e3.video.settings) })), t3 && null !== (c4 = n3.video) && void 0 !== c4 && null !== (c4 = c4.settings) && void 0 !== c4 && c4.customTrack && (n3.video.settings = { customTrack: this._sharedTracks.videoTrack }); 31248 var d4 = "none" === (null === (l3 = e3.video.processor) || void 0 === l3 ? void 0 : l3.type) && (null === (u3 = e3.video.processor) || void 0 === u3 ? void 0 : u3._isDefaultWhenNone); 31249 if (e3.video.processor && !d4) { 31250 var p3 = Aa2({}, e3.video.processor); 31251 delete p3._isDefaultWhenNone, n3.video = Aa2(Aa2({}, n3.video), {}, { processor: p3 }); 31252 } 31253 } 31254 return n3; 31255 } 31256 } }, { key: "getInputSettings", value: function() { 31257 var e3 = this; 31258 return nc2(), new Promise((function(t3) { 31259 t3(e3._getInputSettings()); 31260 })); 31261 } }, { key: "_getInputSettings", value: function() { 31262 var e3, t3, n3, r4, i4, o3, s3 = { processor: { type: "none", _isDefaultWhenNone: true } }; 31263 this._inputSettings ? (e3 = (null === (n3 = this._inputSettings) || void 0 === n3 ? void 0 : n3.video) || s3, t3 = (null === (r4 = this._inputSettings) || void 0 === r4 ? void 0 : r4.audio) || s3) : (e3 = (null === (i4 = this._preloadCache) || void 0 === i4 || null === (i4 = i4.inputSettings) || void 0 === i4 ? void 0 : i4.video) || s3, t3 = (null === (o3 = this._preloadCache) || void 0 === o3 || null === (o3 = o3.inputSettings) || void 0 === o3 ? void 0 : o3.audio) || s3); 31264 var a3 = { audio: t3, video: e3 }; 31265 return this._prepInputSettingsForSharing(a3, true); 31266 } }, { key: "_updatePreloadCacheInputSettings", value: function(e3, t3) { 31267 var n3 = this._inputSettings || {}, r4 = {}; 31268 if (e3.video) { 31269 var i4, o3, s3; 31270 if (r4.video = {}, e3.video.settings) r4.video.settings = {}, t3 || e3.video.settings.customTrack || null === (s3 = n3.video) || void 0 === s3 || !s3.settings ? r4.video.settings = e3.video.settings : r4.video.settings = Aa2(Aa2({}, n3.video.settings), e3.video.settings), Object.keys(r4.video.settings).length || delete r4.video.settings; 31271 else null !== (i4 = n3.video) && void 0 !== i4 && i4.settings && (r4.video.settings = n3.video.settings); 31272 e3.video.processor ? r4.video.processor = e3.video.processor : null !== (o3 = n3.video) && void 0 !== o3 && o3.processor && (r4.video.processor = n3.video.processor); 31273 } else n3.video && (r4.video = n3.video); 31274 if (e3.audio) { 31275 var a3, c4, l3; 31276 if (r4.audio = {}, e3.audio.settings) r4.audio.settings = {}, t3 || e3.audio.settings.customTrack || null === (l3 = n3.audio) || void 0 === l3 || !l3.settings ? r4.audio.settings = e3.audio.settings : r4.audio.settings = Aa2(Aa2({}, n3.audio.settings), e3.audio.settings), Object.keys(r4.audio.settings).length || delete r4.audio.settings; 31277 else null !== (a3 = n3.audio) && void 0 !== a3 && a3.settings && (r4.audio.settings = n3.audio.settings); 31278 e3.audio.processor ? r4.audio.processor = e3.audio.processor : null !== (c4 = n3.audio) && void 0 !== c4 && c4.processor && (r4.audio.processor = n3.audio.processor); 31279 } else n3.audio && (r4.audio = n3.audio); 31280 this._maybeUpdateInputSettings(r4); 31281 } }, { key: "_devicesFromInputSettings", value: function(e3) { 31282 var t3, n3, r4 = (null == e3 || null === (t3 = e3.video) || void 0 === t3 || null === (t3 = t3.settings) || void 0 === t3 ? void 0 : t3.deviceId) || null, i4 = (null == e3 || null === (n3 = e3.audio) || void 0 === n3 || null === (n3 = n3.settings) || void 0 === n3 ? void 0 : n3.deviceId) || null, o3 = this._preloadCache.outputDeviceId || null; 31283 return { camera: r4 ? { deviceId: r4 } : {}, mic: i4 ? { deviceId: i4 } : {}, speaker: o3 ? { deviceId: o3 } : {} }; 31284 } }, { key: "updateInputSettings", value: (G3 = p2((function* (e3) { 31285 var t3 = this; 31286 return nc2(), sc2(e3) ? e3.video || e3.audio ? (ac2(e3, this.properties.dailyConfig, this._sharedTracks), this._callObjectMode && !this._callMachineInitialized ? (this._updatePreloadCacheInputSettings(e3, true), this._getInputSettings()) : new Promise((function(n3, r4) { 31287 t3.sendMessageToCallMachine({ action: "update-input-settings", inputSettings: e3 }, (function(i4) { 31288 if (i4.error) r4(i4.error); 31289 else { 31290 if (i4.returnPreloadCache) return t3._updatePreloadCacheInputSettings(e3, true), void n3(t3._getInputSettings()); 31291 t3._maybeUpdateInputSettings(i4.inputSettings), n3(t3._prepInputSettingsForSharing(i4.inputSettings, true)); 31292 } 31293 })); 31294 }))) : this._getInputSettings() : (console.error(dc2()), Promise.reject(dc2())); 31295 })), function(e3) { 31296 return G3.apply(this, arguments); 31297 }) }, { key: "setBandwidth", value: function(e3) { 31298 var t3 = e3.kbs, n3 = e3.trackConstraints; 31299 if (nc2(), this._callMachineInitialized) return this.sendMessageToCallMachine({ action: "set-bandwidth", kbs: t3, trackConstraints: n3 }), this; 31300 } }, { key: "getDailyLang", value: function() { 31301 var e3 = this; 31302 if (nc2(), this._callMachineInitialized) return new Promise((function(t3) { 31303 e3.sendMessageToCallMachine({ action: "get-daily-lang" }, (function(e4) { 31304 delete e4.action, delete e4.callbackStamp, t3(e4); 31305 })); 31306 })); 31307 } }, { key: "setDailyLang", value: function(e3) { 31308 return nc2(), this.sendMessageToCallMachine({ action: "set-daily-lang", lang: e3 }), this; 31309 } }, { key: "setProxyUrl", value: function(e3) { 31310 return this.sendMessageToCallMachine({ action: "set-proxy-url", proxyUrl: e3 }), this; 31311 } }, { key: "setIceConfig", value: function(e3) { 31312 return this.sendMessageToCallMachine({ action: "set-ice-config", iceConfig: e3 }), this; 31313 } }, { key: "meetingSessionSummary", value: function() { 31314 return [si2, ai2].includes(this._callState) ? this._finalSummaryOfPrevSession : this._meetingSessionSummary; 31315 } }, { key: "getMeetingSession", value: (H3 = p2((function* () { 31316 var e3 = this; 31317 return console.warn("getMeetingSession() is deprecated: use meetingSessionSummary(), which will return immediately"), Qa2(this._callState, "getMeetingSession()"), new Promise((function(t3) { 31318 e3.sendMessageToCallMachine({ action: "get-meeting-session" }, (function(e4) { 31319 delete e4.action, delete e4.callbackStamp, t3(e4); 31320 })); 31321 })); 31322 })), function() { 31323 return H3.apply(this, arguments); 31324 }) }, { key: "meetingSessionState", value: function() { 31325 return Qa2(this._callState, "meetingSessionState"), this._meetingSessionState; 31326 } }, { key: "setMeetingSessionData", value: function(e3) { 31327 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "replace"; 31328 ec2(this._callObjectMode, "setMeetingSessionData()"), Qa2(this._callState, "setMeetingSessionData"); 31329 try { 31330 !(function(e4, t4) { 31331 new Ds2({ data: e4, mergeStrategy: t4 }); 31332 })(e3, t3); 31333 } catch (e4) { 31334 throw console.error(e4), e4; 31335 } 31336 try { 31337 this.sendMessageToCallMachine({ action: "set-session-data", data: e3, mergeStrategy: t3 }); 31338 } catch (e4) { 31339 throw new Error("Error setting meeting session data: ".concat(e4)); 31340 } 31341 } }, { key: "setUserName", value: function(e3, t3) { 31342 var n3 = this; 31343 return this.properties.userName = e3, new Promise((function(r4) { 31344 n3.sendMessageToCallMachine({ action: "set-user-name", name: null != e3 ? e3 : "", thisMeetingOnly: is2() || !!t3 && !!t3.thisMeetingOnly }, (function(e4) { 31345 delete e4.action, delete e4.callbackStamp, r4(e4); 31346 })); 31347 })); 31348 } }, { key: "setUserData", value: (W3 = p2((function* (e3) { 31349 var t3 = this; 31350 try { 31351 ic2(e3); 31352 } catch (e4) { 31353 throw console.error(e4), e4; 31354 } 31355 if (this.properties.userData = e3, this._callMachineInitialized) return new Promise((function(n3) { 31356 try { 31357 t3.sendMessageToCallMachine({ action: "set-user-data", userData: e3 }, (function(e4) { 31358 delete e4.action, delete e4.callbackStamp, n3(e4); 31359 })); 31360 } catch (e4) { 31361 throw new Error("Error setting user data: ".concat(e4)); 31362 } 31363 })); 31364 })), function(e3) { 31365 return W3.apply(this, arguments); 31366 }) }, { key: "validateAudioLevelInterval", value: function(e3) { 31367 if (e3 && (e3 < 100 || "number" != typeof e3)) throw new Error("The interval must be a number greater than or equal to 100 milliseconds."); 31368 } }, { key: "startLocalAudioLevelObserver", value: function(e3) { 31369 var t3 = this; 31370 if ("undefined" == typeof AudioWorkletNode && !is2()) throw new Error("startLocalAudioLevelObserver() is not supported on this browser"); 31371 if (this.validateAudioLevelInterval(e3), this._callMachineInitialized) return this._isLocalAudioLevelObserverRunning = true, new Promise((function(n3, r4) { 31372 t3.sendMessageToCallMachine({ action: "start-local-audio-level-observer", interval: e3 }, (function(e4) { 31373 t3._isLocalAudioLevelObserverRunning = !e4.error, e4.error ? r4({ error: e4.error }) : n3(); 31374 })); 31375 })); 31376 this._preloadCache.localAudioLevelObserver = { enabled: true, interval: e3 }; 31377 } }, { key: "isLocalAudioLevelObserverRunning", value: function() { 31378 return this._isLocalAudioLevelObserverRunning; 31379 } }, { key: "stopLocalAudioLevelObserver", value: function() { 31380 this._preloadCache.localAudioLevelObserver = null, this._localAudioLevel = 0, this._isLocalAudioLevelObserverRunning = false, this.sendMessageToCallMachine({ action: "stop-local-audio-level-observer" }); 31381 } }, { key: "startRemoteParticipantsAudioLevelObserver", value: function(e3) { 31382 var t3 = this; 31383 if (this.validateAudioLevelInterval(e3), this._callMachineInitialized) return this._isRemoteParticipantsAudioLevelObserverRunning = true, new Promise((function(n3, r4) { 31384 t3.sendMessageToCallMachine({ action: "start-remote-participants-audio-level-observer", interval: e3 }, (function(e4) { 31385 t3._isRemoteParticipantsAudioLevelObserverRunning = !e4.error, e4.error ? r4({ error: e4.error }) : n3(); 31386 })); 31387 })); 31388 this._preloadCache.remoteParticipantsAudioLevelObserver = { enabled: true, interval: e3 }; 31389 } }, { key: "isRemoteParticipantsAudioLevelObserverRunning", value: function() { 31390 return this._isRemoteParticipantsAudioLevelObserverRunning; 31391 } }, { key: "stopRemoteParticipantsAudioLevelObserver", value: function() { 31392 this._preloadCache.remoteParticipantsAudioLevelObserver = null, this._remoteParticipantsAudioLevel = {}, this._isRemoteParticipantsAudioLevelObserverRunning = false, this.sendMessageToCallMachine({ action: "stop-remote-participants-audio-level-observer" }); 31393 } }, { key: "startCamera", value: (z3 = p2((function* () { 31394 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31395 if (ec2(this._callObjectMode, "startCamera()"), Ya2(this._callState, this._isPreparingToJoin, "startCamera()", "Did you mean to use setLocalAudio() and/or setLocalVideo() instead?"), this.needsLoad()) try { 31396 yield this.load(t3); 31397 } catch (e4) { 31398 return Promise.reject(e4); 31399 } 31400 else { 31401 if (this._didPreAuth) { 31402 if (t3.url && t3.url !== this.properties.url) return console.error("url in startCamera() is different than the one used in preAuth()"), Promise.reject(); 31403 if (t3.token && t3.token !== this.properties.token) return console.error("token in startCamera() is different than the one used in preAuth()"), Promise.reject(); 31404 } 31405 this.validateProperties(t3), this.properties = Aa2(Aa2({}, this.properties), t3); 31406 } 31407 return new Promise((function(t4) { 31408 e3._preloadCache.inputSettings = e3._prepInputSettingsForSharing(e3._inputSettings, false), e3.sendMessageToCallMachine({ action: "start-camera", properties: Ga2(e3.properties, e3.callClientId), preloadCache: Ga2(e3._preloadCache, e3.callClientId) }, (function(e4) { 31409 t4({ camera: e4.camera, mic: e4.mic, speaker: e4.speaker }); 31410 })); 31411 })); 31412 })), function() { 31413 return z3.apply(this, arguments); 31414 }) }, { key: "validateCustomTrack", value: function(e3, t3, n3) { 31415 if (n3 && n3.length > 50) throw new Error("Custom track `trackName` must not be more than 50 characters"); 31416 if (t3 && "music" !== t3 && "speech" !== t3 && !(t3 instanceof Object)) throw new Error("Custom track `mode` must be either `music` | `speech` | `DailyMicAudioModeSettings` or `undefined`"); 31417 if (!!n3 && ["cam-audio", "cam-video", "screen-video", "screen-audio", "rmpAudio", "rmpVideo", "customVideoDefaults"].includes(n3)) throw new Error("Custom track `trackName` must not match a track name already used by daily: cam-audio, cam-video, customVideoDefaults, screen-video, screen-audio, rmpAudio, rmpVideo"); 31418 if (!(e3 instanceof MediaStreamTrack)) throw new Error("Custom tracks provided must be instances of MediaStreamTrack"); 31419 } }, { key: "startCustomTrack", value: function() { 31420 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : { track, mode, trackName, ignoreAudioLevel }; 31421 return nc2(), Qa2(this._callState, "startCustomTrack()"), this.validateCustomTrack(t3.track, t3.mode, t3.trackName), new Promise((function(n3, r4) { 31422 e3._sharedTracks.customTrack = t3.track, t3.track = Qo2, e3.sendMessageToCallMachine({ action: "start-custom-track", properties: t3 }, (function(e4) { 31423 e4.error ? r4({ error: e4.error }) : n3(e4.mediaTag); 31424 })); 31425 })); 31426 } }, { key: "stopCustomTrack", value: function(e3) { 31427 var t3 = this; 31428 return nc2(), Qa2(this._callState, "stopCustomTrack()"), new Promise((function(n3) { 31429 t3.sendMessageToCallMachine({ action: "stop-custom-track", mediaTag: e3 }, (function(e4) { 31430 n3(e4.mediaTag); 31431 })); 31432 })); 31433 } }, { key: "setCamera", value: function(e3) { 31434 var t3 = this; 31435 return rc2(), Xa2(this._callMachineInitialized, "setCamera()"), new Promise((function(n3) { 31436 t3.sendMessageToCallMachine({ action: "set-camera", cameraDeviceId: e3 }, (function(e4) { 31437 n3({ device: e4.device }); 31438 })); 31439 })); 31440 } }, { key: "setAudioDevice", value: (q3 = p2((function* (e3) { 31441 return rc2(), this.nativeUtils().setAudioDevice(e3), { deviceId: yield this.nativeUtils().getAudioDevice() }; 31442 })), function(e3) { 31443 return q3.apply(this, arguments); 31444 }) }, { key: "cycleCamera", value: function() { 31445 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31446 return new Promise((function(n3) { 31447 e3.sendMessageToCallMachine({ action: "cycle-camera", properties: t3 }, (function(e4) { 31448 n3({ device: e4.device }); 31449 })); 31450 })); 31451 } }, { key: "cycleMic", value: function() { 31452 var e3 = this; 31453 return nc2(), new Promise((function(t3) { 31454 e3.sendMessageToCallMachine({ action: "cycle-mic" }, (function(e4) { 31455 t3({ device: e4.device }); 31456 })); 31457 })); 31458 } }, { key: "getCameraFacingMode", value: function() { 31459 var e3 = this; 31460 return rc2(), new Promise((function(t3) { 31461 e3.sendMessageToCallMachine({ action: "get-camera-facing-mode" }, (function(e4) { 31462 t3(e4.facingMode); 31463 })); 31464 })); 31465 } }, { key: "setInputDevicesAsync", value: ($3 = p2((function* (e3) { 31466 var t3 = this, n3 = e3.audioDeviceId, r4 = e3.videoDeviceId, i4 = e3.audioSource, o3 = e3.videoSource; 31467 if (nc2(), void 0 !== i4 && (n3 = i4), void 0 !== o3 && (r4 = o3), "boolean" == typeof n3 && (this._setAllowLocalAudio(n3), n3 = void 0), "boolean" == typeof r4 && (this._setAllowLocalVideo(r4), r4 = void 0), !n3 && !r4) return yield this.getInputDevices(); 31468 var s3 = {}; 31469 return n3 && (n3 instanceof MediaStreamTrack ? (this._sharedTracks.audioTrack = n3, n3 = Qo2, s3.audio = { settings: { customTrack: n3 } }) : (delete this._sharedTracks.audioTrack, s3.audio = { settings: { deviceId: n3 } })), r4 && (r4 instanceof MediaStreamTrack ? (this._sharedTracks.videoTrack = r4, r4 = Qo2, s3.video = { settings: { customTrack: r4 } }) : (delete this._sharedTracks.videoTrack, s3.video = { settings: { deviceId: r4 } })), this._callObjectMode && this.needsLoad() ? (this._updatePreloadCacheInputSettings(s3, false), this._devicesFromInputSettings(this._inputSettings)) : new Promise((function(e4) { 31470 t3.sendMessageToCallMachine({ action: "set-input-devices", audioDeviceId: n3, videoDeviceId: r4 }, (function(n4) { 31471 if (delete n4.action, delete n4.callbackStamp, n4.returnPreloadCache) return t3._updatePreloadCacheInputSettings(s3, false), void e4(t3._devicesFromInputSettings(t3._inputSettings)); 31472 e4(n4); 31473 })); 31474 })); 31475 })), function(e3) { 31476 return $3.apply(this, arguments); 31477 }) }, { key: "setOutputDeviceAsync", value: (J3 = p2((function* (e3) { 31478 var t3 = this, n3 = e3.outputDeviceId; 31479 if (nc2(), !n3 || "string" != typeof n3) throw new Error("outputDeviceId must be provided and must be a valid device id"); 31480 return this._preloadCache.outputDeviceId = n3, this._callObjectMode && this.needsLoad() ? this._devicesFromInputSettings(this._inputSettings) : new Promise((function(e4, r4) { 31481 t3.sendMessageToCallMachine({ action: "set-output-device", outputDeviceId: n3 }, (function(n4) { 31482 if (delete n4.action, delete n4.callbackStamp, n4.error) { 31483 var i4 = new Error(n4.error.message); 31484 return i4.type = n4.error.type, void r4(i4); 31485 } 31486 n4.returnPreloadCache ? e4(t3._devicesFromInputSettings(t3._inputSettings)) : e4(n4); 31487 })); 31488 })); 31489 })), function(e3) { 31490 return J3.apply(this, arguments); 31491 }) }, { key: "getInputDevices", value: (V3 = p2((function* () { 31492 var e3 = this; 31493 return this._callObjectMode && this.needsLoad() ? this._devicesFromInputSettings(this._inputSettings) : new Promise((function(t3) { 31494 e3.sendMessageToCallMachine({ action: "get-input-devices" }, (function(n3) { 31495 n3.returnPreloadCache ? t3(e3._devicesFromInputSettings(e3._inputSettings)) : t3({ camera: n3.camera, mic: n3.mic, speaker: n3.speaker }); 31496 })); 31497 })); 31498 })), function() { 31499 return V3.apply(this, arguments); 31500 }) }, { key: "nativeInCallAudioMode", value: function() { 31501 return rc2(), this._nativeInCallAudioMode; 31502 } }, { key: "setNativeInCallAudioMode", value: function(e3) { 31503 if (rc2(), [Da2, Na2].includes(e3)) { 31504 if (e3 !== this._nativeInCallAudioMode) return this._nativeInCallAudioMode = e3, !this.disableReactNativeAutoDeviceManagement("audio") && Ka2(this._callState, this._isPreparingToJoin) && this.nativeUtils().setAudioMode(this._nativeInCallAudioMode), this; 31505 } else console.error("invalid in-call audio mode specified: ", e3); 31506 } }, { key: "preAuth", value: (U3 = p2((function* () { 31507 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31508 if (ec2(this._callObjectMode, "preAuth()"), Ya2(this._callState, this._isPreparingToJoin, "preAuth()"), this.needsLoad() && (yield this.load(t3)), !t3.url) throw new Error("preAuth() requires at least a url to be provided"); 31509 return this.validateProperties(t3), this.properties = Aa2(Aa2({}, this.properties), t3), new Promise((function(t4, n3) { 31510 e3._preloadCache.inputSettings = e3._prepInputSettingsForSharing(e3._inputSettings, false), e3.sendMessageToCallMachine({ action: "daily-method-preauth", properties: Ga2(e3.properties, e3.callClientId), preloadCache: Ga2(e3._preloadCache, e3.callClientId) }, (function(r4) { 31511 return r4.error ? n3(r4.error) : r4.access ? (e3._didPreAuth = true, void t4({ access: r4.access })) : n3(new Error("unknown error in preAuth()")); 31512 })); 31513 })); 31514 })), function() { 31515 return U3.apply(this, arguments); 31516 }) }, { key: "load", value: (R3 = p2((function* (e3) { 31517 var t3 = this; 31518 if (this.needsLoad()) { 31519 if (this._destroyed && (this._logUseAfterDestroy(), this.strictMode)) throw new Error("Use after destroy"); 31520 if (e3 && (this.validateProperties(e3), this.properties = Aa2(Aa2({}, this.properties), e3)), !this._callObjectMode && !this.properties.url) throw new Error("can't load iframe meeting because url property isn't set"); 31521 return this._updateCallState(ni2), this.emitDailyJSEvent({ action: Vi2 }), this._callObjectMode ? new Promise((function(e4, n3) { 31522 t3._callObjectLoader.cancel(); 31523 var r4 = Date.now(); 31524 t3._callObjectLoader.load(t3.properties.dailyConfig, (function(n4) { 31525 t3._bundleLoadTime = n4 ? "no-op" : Date.now() - r4, t3._updateCallState(ri2), n4 && t3.emitDailyJSEvent({ action: $i2 }), e4(); 31526 }), (function(e5, r5) { 31527 if (t3.emitDailyJSEvent({ action: Ji2 }), !r5) { 31528 t3._updateCallState(ai2), t3.resetMeetingDependentVars(); 31529 var i4 = { action: Jo2, errorMsg: e5.msg, error: { type: "connection-error", msg: "Failed to load call object bundle.", details: { on: "load", sourceError: e5, bundleUrl: B2(t3.properties.dailyConfig) } } }; 31530 t3._maybeSendToSentry(i4), t3.emitDailyJSEvent(i4), n3(e5.msg); 31531 } 31532 })); 31533 })) : (this._iframe.src = F2(this.assembleMeetingUrl(), this.properties.dailyConfig), new Promise((function(e4, n3) { 31534 t3._loadedCallback = function(r4) { 31535 t3._callState !== ai2 ? (t3._updateCallState(ri2), (t3.properties.cssFile || t3.properties.cssText) && t3.loadCss(t3.properties), e4()) : n3(r4); 31536 }; 31537 }))); 31538 } 31539 })), function(e3) { 31540 return R3.apply(this, arguments); 31541 }) }, { key: "join", value: (L3 = p2((function* () { 31542 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31543 this._testCallInProgress && this.stopTestCallQuality(); 31544 var n3 = false; 31545 if (this.needsLoad()) { 31546 this.updateIsPreparingToJoin(true); 31547 try { 31548 yield this.load(t3); 31549 } catch (e4) { 31550 return this.updateIsPreparingToJoin(false), Promise.reject(e4); 31551 } 31552 } else { 31553 if (n3 = !(!this.properties.cssFile && !this.properties.cssText), this._didPreAuth) { 31554 if (t3.url && t3.url !== this.properties.url) return console.error("url in join() is different than the one used in preAuth()"), this.updateIsPreparingToJoin(false), Promise.reject(); 31555 if (t3.token && t3.token !== this.properties.token) return console.error("token in join() is different than the one used in preAuth()"), this.updateIsPreparingToJoin(false), Promise.reject(); 31556 } 31557 if (t3.url && !this._callObjectMode && t3.url && t3.url !== this.properties.url) return console.error("url in join() is different than the one used in load() (".concat(this.properties.url, " -> ").concat(t3.url, ")")), this.updateIsPreparingToJoin(false), Promise.reject(); 31558 this.validateProperties(t3), this.properties = Aa2(Aa2({}, this.properties), t3); 31559 } 31560 return void 0 !== t3.showLocalVideo && (this._callObjectMode ? console.error("showLocalVideo is not available in callObject mode") : this._showLocalVideo = !!t3.showLocalVideo), void 0 !== t3.showParticipantsBar && (this._callObjectMode ? console.error("showParticipantsBar is not available in callObject mode") : this._showParticipantsBar = !!t3.showParticipantsBar), this._callState === oi2 || this._callState === ii2 ? (console.warn("already joined meeting, call leave() before joining again"), void this.updateIsPreparingToJoin(false)) : (this._updateCallState(ii2, false), this.emitDailyJSEvent({ action: Wi2 }), this._preloadCache.inputSettings = this._prepInputSettingsForSharing(this._inputSettings || {}, false), this.sendMessageToCallMachine({ action: "join-meeting", properties: Ga2(this.properties, this.callClientId), preloadCache: Ga2(this._preloadCache, this.callClientId) }), new Promise((function(t4, r4) { 31561 e3._joinedCallback = function(i4, o3) { 31562 if (e3._callState !== ai2) { 31563 if (e3._updateCallState(oi2), i4) for (var s3 in i4) { 31564 if (e3._callObjectMode) { 31565 var a3 = e3._callMachine().store; 31566 Zs2(i4[s3], a3), ea2(i4[s3], a3), na2(i4[s3], e3._participants[s3], a3); 31567 } 31568 e3._participants[s3] = Aa2({}, i4[s3]), e3.toggleParticipantAudioBasedOnNativeAudioFocus(); 31569 } 31570 n3 && e3.loadCss(e3.properties), t4(i4); 31571 } else r4(o3); 31572 }; 31573 }))); 31574 })), function() { 31575 return L3.apply(this, arguments); 31576 }) }, { key: "leave", value: (x3 = p2((function* () { 31577 var e3 = this; 31578 return this._testCallInProgress && this.stopTestCallQuality(), new Promise((function(t3) { 31579 e3._callState === si2 || e3._callState === ai2 ? t3() : e3._callObjectLoader && !e3._callObjectLoader.loaded ? (e3._callObjectLoader.cancel(), e3._updateCallState(si2), e3.resetMeetingDependentVars(), e3.emitDailyJSEvent({ action: si2 }), t3()) : (e3._resolveLeave = t3, e3.sendMessageToCallMachine({ action: "leave-meeting" })); 31580 })); 31581 })), function() { 31582 return x3.apply(this, arguments); 31583 }) }, { key: "startScreenShare", value: (I3 = p2((function* () { 31584 var e3 = this, t3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31585 if (Xa2(this._callMachineInitialized, "startScreenShare()"), t3.screenVideoSendSettings && this._validateVideoSendSettings("screenVideo", t3.screenVideoSendSettings), t3.mediaStream && (this._sharedTracks.screenMediaStream = t3.mediaStream, t3.mediaStream = Qo2), "undefined" != typeof DailyNativeUtils && void 0 !== DailyNativeUtils.isIOS && DailyNativeUtils.isIOS) { 31586 var n3 = this.nativeUtils(); 31587 if (yield n3.isScreenBeingCaptured()) return void this.emitDailyJSEvent({ action: Vo2, type: "screen-share-error", errorMsg: "Could not start the screen sharing. The screen is already been captured!" }); 31588 n3.setSystemScreenCaptureStartCallback((function() { 31589 n3.setSystemScreenCaptureStartCallback(null), e3.sendMessageToCallMachine({ action: Wo2, captureOptions: t3 }); 31590 })), n3.presentSystemScreenCapturePrompt(); 31591 } else this.sendMessageToCallMachine({ action: Wo2, captureOptions: t3 }); 31592 })), function() { 31593 return I3.apply(this, arguments); 31594 }) }, { key: "stopScreenShare", value: function() { 31595 Xa2(this._callMachineInitialized, "stopScreenShare()"), this.sendMessageToCallMachine({ action: "local-screen-stop" }); 31596 } }, { key: "startRecording", value: function() { 31597 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, t3 = e3.type; 31598 if (t3 && "cloud" !== t3 && "raw-tracks" !== t3 && "local" !== t3) throw new Error("invalid type: ".concat(t3, ", allowed values 'cloud', 'raw-tracks', or 'local'")); 31599 this.sendMessageToCallMachine(Aa2({ action: "local-recording-start" }, e3)); 31600 } }, { key: "updateRecording", value: function(e3) { 31601 var t3 = e3.layout, n3 = void 0 === t3 ? { preset: "default" } : t3, r4 = e3.instanceId; 31602 this.sendMessageToCallMachine({ action: "daily-method-update-recording", layout: n3, instanceId: r4 }); 31603 } }, { key: "stopRecording", value: function() { 31604 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31605 this.sendMessageToCallMachine(Aa2({ action: "local-recording-stop" }, e3)); 31606 } }, { key: "startLiveStreaming", value: function() { 31607 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31608 this.sendMessageToCallMachine(Aa2({ action: "daily-method-start-live-streaming" }, e3)); 31609 } }, { key: "updateLiveStreaming", value: function(e3) { 31610 var t3 = e3.layout, n3 = void 0 === t3 ? { preset: "default" } : t3, r4 = e3.instanceId; 31611 this.sendMessageToCallMachine({ action: "daily-method-update-live-streaming", layout: n3, instanceId: r4 }); 31612 } }, { key: "addLiveStreamingEndpoints", value: function(e3) { 31613 var t3 = e3.endpoints, n3 = e3.instanceId; 31614 this.sendMessageToCallMachine({ action: Ho2, endpointsOp: es2, endpoints: t3, instanceId: n3 }); 31615 } }, { key: "removeLiveStreamingEndpoints", value: function(e3) { 31616 var t3 = e3.endpoints, n3 = e3.instanceId; 31617 this.sendMessageToCallMachine({ action: Ho2, endpointsOp: ts2, endpoints: t3, instanceId: n3 }); 31618 } }, { key: "stopLiveStreaming", value: function() { 31619 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 31620 this.sendMessageToCallMachine(Aa2({ action: "daily-method-stop-live-streaming" }, e3)); 31621 } }, { key: "validateDailyConfig", value: function(e3) { 31622 e3.camSimulcastEncodings && (console.warn("camSimulcastEncodings is deprecated. Use sendSettings, found in DailyCallOptions, to provide camera simulcast settings."), this.validateSimulcastEncodings(e3.camSimulcastEncodings)), e3.screenSimulcastEncodings && console.warn("screenSimulcastEncodings is deprecated. Use sendSettings, found in DailyCallOptions, to provide screen simulcast settings."), vs2() && e3.noAutoDefaultDeviceChange && console.warn("noAutoDefaultDeviceChange is not supported on Android, and will be ignored."); 31623 } }, { key: "validateSimulcastEncodings", value: function(e3) { 31624 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null, n3 = arguments.length > 2 && void 0 !== arguments[2] && arguments[2]; 31625 if (e3) { 31626 if (!(e3 instanceof Array || Array.isArray(e3))) throw new Error("encodings must be an Array"); 31627 if (!bc2(e3.length, 1, 3)) throw new Error("encodings must be an Array with between 1 to ".concat(3, " layers")); 31628 for (var r4 = 0; r4 < e3.length; r4++) { 31629 var i4 = e3[r4]; 31630 for (var o3 in this._validateEncodingLayerHasValidProperties(i4), i4) if (Ua2.includes(o3)) { 31631 if ("number" != typeof i4[o3]) throw new Error("".concat(o3, " must be a number")); 31632 if (t3) { 31633 var s3 = t3[o3], a3 = s3.min, c4 = s3.max; 31634 if (!bc2(i4[o3], a3, c4)) throw new Error("".concat(o3, " value not in range. valid range: ").concat(a3, " to ").concat(c4)); 31635 } 31636 } else if (!["active", "scalabilityMode"].includes(o3)) throw new Error("Invalid key ".concat(o3, ", valid keys are:") + Object.values(Ua2)); 31637 if (n3 && !i4.hasOwnProperty("maxBitrate")) throw new Error("maxBitrate is not specified"); 31638 } 31639 } 31640 } }, { key: "startRemoteMediaPlayer", value: (j3 = p2((function* (e3) { 31641 var t3 = this, n3 = e3.url, r4 = e3.settings, i4 = void 0 === r4 ? { state: Xo2.PLAY } : r4; 31642 try { 31643 !(function(e4) { 31644 if ("string" != typeof e4) throw new Error('url parameter must be "string" type'); 31645 })(n3), yc2(i4), (function(e4) { 31646 for (var t4 in e4) if (!Va2.includes(t4)) throw new Error("Invalid key ".concat(t4, ", valid keys are: ").concat(Va2)); 31647 e4.simulcastEncodings && this.validateSimulcastEncodings(e4.simulcastEncodings, Ba2, true); 31648 })(i4); 31649 } catch (e4) { 31650 throw console.error("invalid argument Error: ".concat(e4)), console.error('startRemoteMediaPlayer arguments must be of the form:\n { url: "playback url",\n settings?:\n {state: "play"|"pause", simulcastEncodings?: [{}] } }'), e4; 31651 } 31652 return new Promise((function(e4, r5) { 31653 t3.sendMessageToCallMachine({ action: "daily-method-start-remote-media-player", url: n3, settings: i4 }, (function(t4) { 31654 t4.error ? r5({ error: t4.error, errorMsg: t4.errorMsg }) : e4({ session_id: t4.session_id, remoteMediaPlayerState: { state: t4.state, settings: t4.settings } }); 31655 })); 31656 })); 31657 })), function(e3) { 31658 return j3.apply(this, arguments); 31659 }) }, { key: "stopRemoteMediaPlayer", value: (A3 = p2((function* (e3) { 31660 var t3 = this; 31661 if ("string" != typeof e3) throw new Error(" remotePlayerID must be of type string"); 31662 return new Promise((function(n3, r4) { 31663 t3.sendMessageToCallMachine({ action: "daily-method-stop-remote-media-player", session_id: e3 }, (function(e4) { 31664 e4.error ? r4({ error: e4.error, errorMsg: e4.errorMsg }) : n3(); 31665 })); 31666 })); 31667 })), function(e3) { 31668 return A3.apply(this, arguments); 31669 }) }, { key: "updateRemoteMediaPlayer", value: (P3 = p2((function* (e3) { 31670 var t3 = this, n3 = e3.session_id, r4 = e3.settings; 31671 try { 31672 yc2(r4); 31673 } catch (e4) { 31674 throw console.error("invalid argument Error: ".concat(e4)), console.error('updateRemoteMediaPlayer arguments must be of the form:\n session_id: "participant session",\n { settings?: {state: "play"|"pause"} }'), e4; 31675 } 31676 return new Promise((function(e4, i4) { 31677 t3.sendMessageToCallMachine({ action: "daily-method-update-remote-media-player", session_id: n3, settings: r4 }, (function(t4) { 31678 t4.error ? i4({ error: t4.error, errorMsg: t4.errorMsg }) : e4({ session_id: t4.session_id, remoteMediaPlayerState: { state: t4.state, settings: t4.settings } }); 31679 })); 31680 })); 31681 })), function(e3) { 31682 return P3.apply(this, arguments); 31683 }) }, { key: "startTranscription", value: function(e3) { 31684 Qa2(this._callState, "startTranscription()"), this.sendMessageToCallMachine(Aa2({ action: "daily-method-start-transcription" }, e3)); 31685 } }, { key: "updateTranscription", value: function(e3) { 31686 if (Qa2(this._callState, "updateTranscription()"), !e3) throw new Error("updateTranscription Error: options is mandatory"); 31687 if ("object" !== n2(e3)) throw new Error("updateTranscription Error: options must be object type"); 31688 if (e3.participants && !Array.isArray(e3.participants)) throw new Error("updateTranscription Error: participants must be an array"); 31689 this.sendMessageToCallMachine(Aa2({ action: "daily-method-update-transcription" }, e3)); 31690 } }, { key: "stopTranscription", value: function(e3) { 31691 if (Qa2(this._callState, "stopTranscription()"), e3 && "object" !== n2(e3)) throw new Error("stopTranscription Error: options must be object type"); 31692 if (e3 && !e3.instanceId) throw new Error('"instanceId" not provided'); 31693 this.sendMessageToCallMachine(Aa2({ action: "daily-method-stop-transcription" }, e3)); 31694 } }, { key: "startDialOut", value: (O3 = p2((function* (e3) { 31695 var t3 = this; 31696 Qa2(this._callState, "startDialOut()"); 31697 var n3 = function(e4) { 31698 if (e4) { 31699 if (!Array.isArray(e4)) throw new Error("Error starting dial out: audio codec must be an array"); 31700 if (e4.length <= 0) throw new Error("Error starting dial out: audio codec array specified but empty"); 31701 e4.forEach((function(e5) { 31702 if ("string" != typeof e5) throw new Error("Error starting dial out: audio codec must be a string"); 31703 if ("OPUS" !== e5 && "PCMU" !== e5 && "PCMA" !== e5 && "G722" !== e5) throw new Error("Error starting dial out: audio codec must be one of OPUS, PCMU, PCMA, G722"); 31704 })); 31705 } 31706 }; 31707 if (!e3.sipUri && !e3.phoneNumber) throw new Error("Error starting dial out: either a sip uri or phone number must be provided"); 31708 if (e3.sipUri && e3.phoneNumber) throw new Error("Error starting dial out: only one of sip uri or phone number must be provided"); 31709 if (e3.sipUri) { 31710 if ("string" != typeof e3.sipUri) throw new Error("Error starting dial out: sipUri must be a string"); 31711 if (!e3.sipUri.startsWith("sip:")) throw new Error("Error starting dial out: Invalid SIP URI, must start with 'sip:'"); 31712 if (e3.video && "boolean" != typeof e3.video) throw new Error("Error starting dial out: video must be a boolean value"); 31713 !(function(e4) { 31714 if (e4 && (n3(e4.audio), e4.video)) { 31715 if (!Array.isArray(e4.video)) throw new Error("Error starting dial out: video codec must be an array"); 31716 if (e4.video.length <= 0) throw new Error("Error starting dial out: video codec array specified but empty"); 31717 e4.video.forEach((function(e5) { 31718 if ("string" != typeof e5) throw new Error("Error starting dial out: video codec must be a string"); 31719 if ("H264" !== e5 && "VP8" !== e5) throw new Error("Error starting dial out: video codec must be H264 or VP8"); 31720 })); 31721 } 31722 })(e3.codecs); 31723 } 31724 if (e3.phoneNumber) { 31725 if ("string" != typeof e3.phoneNumber) throw new Error("Error starting dial out: phoneNumber must be a string"); 31726 if (!/^\+\d{1,}$/.test(e3.phoneNumber)) throw new Error("Error starting dial out: Invalid phone number, must be valid phone number as per E.164"); 31727 e3.codecs && n3(e3.codecs.audio); 31728 } 31729 if (e3.callerId) { 31730 if ("string" != typeof e3.callerId) throw new Error("Error starting dial out: callerId must be a string"); 31731 if (e3.sipUri) throw new Error("Error starting dial out: callerId not allowed with sipUri"); 31732 } 31733 if (e3.displayName) { 31734 if ("string" != typeof e3.displayName) throw new Error("Error starting dial out: displayName must be a string"); 31735 if (e3.displayName.length >= 200) throw new Error("Error starting dial out: displayName length must be less than 200"); 31736 } 31737 if (e3.userId) { 31738 if ("string" != typeof e3.userId) throw new Error("Error starting dial out: userId must be a string"); 31739 if (e3.userId.length > 36) throw new Error("Error starting dial out: userId length must be less than or equal to 36"); 31740 } 31741 if (e3.permissions && e3.permissions.canReceive) { 31742 var r4 = f2(Ca2.validateJSONObject(e3.permissions.canReceive), 2), i4 = r4[0], o3 = r4[1]; 31743 if (!i4) throw new Error(o3); 31744 } 31745 return new Promise((function(n4, r5) { 31746 t3.sendMessageToCallMachine(Aa2({ action: "dialout-start" }, e3), (function(e4) { 31747 e4.error ? r5(e4.error) : n4(e4); 31748 })); 31749 })); 31750 })), function(e3) { 31751 return O3.apply(this, arguments); 31752 }) }, { key: "stopDialOut", value: function(e3) { 31753 var t3 = this; 31754 return Qa2(this._callState, "stopDialOut()"), new Promise((function(n3, r4) { 31755 t3.sendMessageToCallMachine(Aa2({ action: "dialout-stop" }, e3), (function(e4) { 31756 e4.error ? r4(e4.error) : n3(e4); 31757 })); 31758 })); 31759 } }, { key: "sipCallTransfer", value: (T3 = p2((function* (e3) { 31760 var t3 = this; 31761 if (Qa2(this._callState, "sipCallTransfer()"), !e3) throw new Error("sipCallTransfer() requires a sessionId and toEndPoint"); 31762 return e3.useSipRefer = false, mc2(e3, "sipCallTransfer"), new Promise((function(n3, r4) { 31763 t3.sendMessageToCallMachine(Aa2({ action: ns2 }, e3), (function(e4) { 31764 e4.error ? r4(e4.error) : n3(e4); 31765 })); 31766 })); 31767 })), function(e3) { 31768 return T3.apply(this, arguments); 31769 }) }, { key: "sipRefer", value: (E3 = p2((function* (e3) { 31770 var t3 = this; 31771 if (Qa2(this._callState, "sipRefer()"), !e3) throw new Error("sessionId and toEndPoint are mandatory parameter"); 31772 return e3.useSipRefer = true, mc2(e3, "sipRefer"), new Promise((function(n3, r4) { 31773 t3.sendMessageToCallMachine(Aa2({ action: ns2 }, e3), (function(e4) { 31774 e4.error ? r4(e4.error) : n3(e4); 31775 })); 31776 })); 31777 })), function(e3) { 31778 return E3.apply(this, arguments); 31779 }) }, { key: "sendDTMF", value: (C3 = p2((function* (e3) { 31780 var t3 = this; 31781 return Qa2(this._callState, "sendDTMF()"), (function(e4) { 31782 var t4 = e4.sessionId, n3 = e4.tones; 31783 if (!t4 || !n3) throw new Error("sessionId and tones are mandatory parameter"); 31784 if ("string" != typeof t4 || "string" != typeof n3) throw new Error("sessionId and tones should be of string type"); 31785 if (n3.length > 20) throw new Error("tones string must be upto 20 characters"); 31786 var r4 = /[^0-9A-D*#]/g, i4 = n3.match(r4); 31787 if (i4 && i4[0]) throw new Error("".concat(i4[0], " is not valid DTMF tone")); 31788 })(e3), new Promise((function(n3, r4) { 31789 t3.sendMessageToCallMachine(Aa2({ action: "send-dtmf" }, e3), (function(e4) { 31790 e4.error ? r4(e4.error) : n3(e4); 31791 })); 31792 })); 31793 })), function(e3) { 31794 return C3.apply(this, arguments); 31795 }) }, { key: "getNetworkStats", value: function() { 31796 var e3 = this; 31797 if (this._callState !== oi2) { 31798 return Promise.resolve(Aa2({ stats: { latest: {} } }, this._network)); 31799 } 31800 return new Promise((function(t3) { 31801 e3.sendMessageToCallMachine({ action: "get-calc-stats" }, (function(n3) { 31802 t3(Aa2(Aa2({}, e3._network), {}, { stats: n3.stats })); 31803 })); 31804 })); 31805 } }, { key: "testWebsocketConnectivity", value: (M3 = p2((function* () { 31806 var e3 = this; 31807 if (Za2(this._testCallInProgress, "testWebsocketConnectivity()"), this.needsLoad()) try { 31808 yield this.load(); 31809 } catch (e4) { 31810 return Promise.reject(e4); 31811 } 31812 return new Promise((function(t3, n3) { 31813 e3.sendMessageToCallMachine({ action: "test-websocket-connectivity" }, (function(e4) { 31814 e4.error ? n3(e4.error) : t3(e4.results); 31815 })); 31816 })); 31817 })), function() { 31818 return M3.apply(this, arguments); 31819 }) }, { key: "abortTestWebsocketConnectivity", value: function() { 31820 this.sendMessageToCallMachine({ action: "abort-test-websocket-connectivity" }); 31821 } }, { key: "_validateVideoTrackForNetworkTests", value: function(e3) { 31822 return e3 ? e3 instanceof MediaStreamTrack ? !!va2(e3, { isLocalScreenVideo: false }) || (console.error("Video track is not playable. This test needs a live video track."), false) : (console.error("Video track needs to be of type `MediaStreamTrack`."), false) : (console.error("Missing video track. You must provide a video track in order to run this test."), false); 31823 } }, { key: "testCallQuality", value: (k3 = p2((function* () { 31824 var t3 = this; 31825 nc2(), ec2(this._callObjectMode, "testCallQuality()"), Xa2(this._callMachineInitialized, "testCallQuality()", null, true), Ya2(this._callState, this._isPreparingToJoin, "testCallQuality()"); 31826 var n3 = this._testCallAlreadyInProgress, r4 = function(e3) { 31827 n3 || (t3._testCallInProgress = e3); 31828 }; 31829 if (r4(true), this.needsLoad()) try { 31830 var i4 = this._callState; 31831 yield this.load(), this._callState = i4; 31832 } catch (e3) { 31833 return r4(false), Promise.reject(e3); 31834 } 31835 return new Promise((function(n4) { 31836 t3.sendMessageToCallMachine({ action: "test-call-quality", dailyJsVersion: t3.properties.dailyJsVersion }, (function(i5) { 31837 var o3 = i5.results, s3 = o3.result, a3 = e2(o3, Ta2); 31838 if ("failed" === s3) { 31839 var c4, l3 = Aa2({}, a3); 31840 null !== (c4 = a3.error) && void 0 !== c4 && c4.details ? (a3.error.details = JSON.parse(a3.error.details), l3.error = Aa2(Aa2({}, l3.error), {}, { details: Aa2({}, l3.error.details) }), l3.error.details.duringTest = "testCallQuality") : (l3.error = l3.error ? Aa2({}, l3.error) : {}, l3.error.details = { duringTest: "testCallQuality" }), t3._maybeSendToSentry(l3); 31841 } 31842 r4(false), n4(Aa2({ result: s3 }, a3)); 31843 })); 31844 })); 31845 })), function() { 31846 return k3.apply(this, arguments); 31847 }) }, { key: "stopTestCallQuality", value: function() { 31848 this.sendMessageToCallMachine({ action: "stop-test-call-quality" }); 31849 } }, { key: "testConnectionQuality", value: (w3 = p2((function* (e3) { 31850 var t3; 31851 is2() ? (console.warn("testConnectionQuality() is deprecated: use testPeerToPeerCallQuality() instead"), t3 = yield this.testPeerToPeerCallQuality(e3)) : (console.warn("testConnectionQuality() is deprecated: use testCallQuality() instead"), t3 = yield this.testCallQuality()); 31852 var n3 = { result: t3.result, secondsElapsed: t3.secondsElapsed }; 31853 return t3.data && (n3.data = { maxRTT: t3.data.maxRoundTripTime, packetLoss: t3.data.avgRecvPacketLoss }), n3; 31854 })), function(e3) { 31855 return w3.apply(this, arguments); 31856 }) }, { key: "testPeerToPeerCallQuality", value: (_3 = p2((function* (e3) { 31857 var t3 = this; 31858 if (Za2(this._testCallInProgress, "testPeerToPeerCallQuality()"), this.needsLoad()) try { 31859 yield this.load(); 31860 } catch (e4) { 31861 return Promise.reject(e4); 31862 } 31863 var n3 = e3.videoTrack, r4 = e3.duration; 31864 if (!this._validateVideoTrackForNetworkTests(n3)) throw new Error("Video track error"); 31865 return this._sharedTracks.videoTrackForConnectionQualityTest = n3, new Promise((function(e4, n4) { 31866 t3.sendMessageToCallMachine({ action: "test-p2p-call-quality", duration: r4 }, (function(t4) { 31867 t4.error ? n4(t4.error) : e4(t4.results); 31868 })); 31869 })); 31870 })), function(e3) { 31871 return _3.apply(this, arguments); 31872 }) }, { key: "stopTestConnectionQuality", value: function() { 31873 is2() ? (console.warn("stopTestConnectionQuality() is deprecated: use testPeerToPeerCallQuality() and stopTestPeerToPeerCallQuality() instead"), this.stopTestPeerToPeerCallQuality()) : (console.warn("stopTestConnectionQuality() is deprecated: use testCallQuality() and stopTestCallQuality() instead"), this.stopTestCallQuality()); 31874 } }, { key: "stopTestPeerToPeerCallQuality", value: function() { 31875 this.sendMessageToCallMachine({ action: "stop-test-p2p-call-quality" }); 31876 } }, { key: "testNetworkConnectivity", value: (y3 = p2((function* (e3) { 31877 var t3 = this; 31878 if (Za2(this._testCallInProgress, "testNetworkConnectivity()"), this.needsLoad()) try { 31879 yield this.load(); 31880 } catch (e4) { 31881 return Promise.reject(e4); 31882 } 31883 if (!this._validateVideoTrackForNetworkTests(e3)) throw new Error("Video track error"); 31884 return this._sharedTracks.videoTrackForNetworkConnectivityTest = e3, new Promise((function(e4, n3) { 31885 t3.sendMessageToCallMachine({ action: "test-network-connectivity" }, (function(t4) { 31886 t4.error ? n3(t4.error) : e4(t4.results); 31887 })); 31888 })); 31889 })), function(e3) { 31890 return y3.apply(this, arguments); 31891 }) }, { key: "abortTestNetworkConnectivity", value: function() { 31892 this.sendMessageToCallMachine({ action: "abort-test-network-connectivity" }); 31893 } }, { key: "getCpuLoadStats", value: function() { 31894 var e3 = this; 31895 return new Promise((function(t3) { 31896 if (e3._callState === oi2) { 31897 e3.sendMessageToCallMachine({ action: "get-cpu-load-stats" }, (function(e4) { 31898 t3(e4.cpuStats); 31899 })); 31900 } else t3({ cpuLoadState: void 0, cpuLoadStateReason: void 0, stats: {} }); 31901 })); 31902 } }, { key: "_validateEncodingLayerHasValidProperties", value: function(e3) { 31903 var t3; 31904 if (!((null === (t3 = Object.keys(e3)) || void 0 === t3 ? void 0 : t3.length) > 0)) throw new Error("Empty encoding is not allowed. At least one of these valid keys should be specified:" + Object.values(Ua2)); 31905 } }, { key: "_validateVideoSendSettings", value: function(e3, t3) { 31906 var r4 = "screenVideo" === e3 ? ["default-screen-video", "detail-optimized", "motion-optimized", "motion-and-detail-balanced"] : ["default-video", "bandwidth-optimized", "bandwidth-and-quality-balanced", "quality-optimized", "adaptive-2-layers", "adaptive-3-layers"], i4 = "Video send settings should be either an object or one of the supported presets: ".concat(r4.join()); 31907 if ("string" == typeof t3) { 31908 if (!r4.includes(t3)) throw new Error(i4); 31909 } else { 31910 if ("object" !== n2(t3)) throw new Error(i4); 31911 if (!t3.maxQuality && !t3.encodings && void 0 === t3.allowAdaptiveLayers) throw new Error("Video send settings must contain at least maxQuality, allowAdaptiveLayers or encodings attribute"); 31912 if (t3.maxQuality && -1 === ["low", "medium", "high"].indexOf(t3.maxQuality)) throw new Error("maxQuality must be either low, medium or high"); 31913 if (t3.encodings) { 31914 var o3 = false; 31915 switch (Object.keys(t3.encodings).length) { 31916 case 1: 31917 o3 = !t3.encodings.low; 31918 break; 31919 case 2: 31920 o3 = !t3.encodings.low || !t3.encodings.medium; 31921 break; 31922 case 3: 31923 o3 = !t3.encodings.low || !t3.encodings.medium || !t3.encodings.high; 31924 break; 31925 default: 31926 o3 = true; 31927 } 31928 if (o3) throw new Error("Encodings must be defined as: low, low and medium, or low, medium and high."); 31929 t3.encodings.low && this._validateEncodingLayerHasValidProperties(t3.encodings.low), t3.encodings.medium && this._validateEncodingLayerHasValidProperties(t3.encodings.medium), t3.encodings.high && this._validateEncodingLayerHasValidProperties(t3.encodings.high); 31930 } 31931 } 31932 } }, { key: "validateUpdateSendSettings", value: function(e3) { 31933 var t3 = this; 31934 if (!e3 || 0 === Object.keys(e3).length) throw new Error("Send settings must contain at least information for one track!"); 31935 Object.entries(e3).forEach((function(e4) { 31936 var n3 = f2(e4, 2), r4 = n3[0], i4 = n3[1]; 31937 t3._validateVideoSendSettings(r4, i4); 31938 })); 31939 } }, { key: "updateSendSettings", value: function(e3) { 31940 var t3 = this; 31941 return this.validateUpdateSendSettings(e3), this.needsLoad() ? (this._preloadCache.sendSettings = e3, { sendSettings: this._preloadCache.sendSettings }) : new Promise((function(n3, r4) { 31942 t3.sendMessageToCallMachine({ action: "update-send-settings", sendSettings: e3 }, (function(e4) { 31943 e4.error ? r4(e4.error) : n3(e4.sendSettings); 31944 })); 31945 })); 31946 } }, { key: "getSendSettings", value: function() { 31947 return this._sendSettings || this._preloadCache.sendSettings; 31948 } }, { key: "getLocalAudioLevel", value: function() { 31949 return this._localAudioLevel; 31950 } }, { key: "getRemoteParticipantsAudioLevel", value: function() { 31951 return this._remoteParticipantsAudioLevel; 31952 } }, { key: "getActiveSpeaker", value: function() { 31953 return nc2(), this._activeSpeaker; 31954 } }, { key: "setActiveSpeakerMode", value: function(e3) { 31955 return nc2(), this.sendMessageToCallMachine({ action: "set-active-speaker-mode", enabled: e3 }), this; 31956 } }, { key: "activeSpeakerMode", value: function() { 31957 return nc2(), this._activeSpeakerMode; 31958 } }, { key: "subscribeToTracksAutomatically", value: function() { 31959 return this._preloadCache.subscribeToTracksAutomatically; 31960 } }, { key: "setSubscribeToTracksAutomatically", value: function(e3) { 31961 return Qa2(this._callState, "setSubscribeToTracksAutomatically()", "Use the subscribeToTracksAutomatically configuration property."), this._preloadCache.subscribeToTracksAutomatically = e3, this.sendMessageToCallMachine({ action: "daily-method-subscribe-to-tracks-automatically", enabled: e3 }), this; 31962 } }, { key: "enumerateDevices", value: (m3 = p2((function* () { 31963 var e3 = this; 31964 if (this._callObjectMode) { 31965 var t3 = yield navigator.mediaDevices.enumerateDevices(); 31966 return "Firefox" === ms2() && ys2().major > 115 && ys2().major < 123 && (t3 = t3.filter((function(e4) { 31967 return "audiooutput" !== e4.kind; 31968 }))), { devices: t3.map((function(e4) { 31969 var t4 = JSON.parse(JSON.stringify(e4)); 31970 if (!is2() && "videoinput" === e4.kind && e4.getCapabilities) { 31971 var n3, r4 = e4.getCapabilities(); 31972 t4.facing = (null == r4 || null === (n3 = r4.facingMode) || void 0 === n3 ? void 0 : n3.length) >= 1 ? r4.facingMode[0] : void 0; 31973 } 31974 return t4; 31975 })) }; 31976 } 31977 return new Promise((function(t4) { 31978 e3.sendMessageToCallMachine({ action: "enumerate-devices" }, (function(e4) { 31979 t4({ devices: e4.devices }); 31980 })); 31981 })); 31982 })), function() { 31983 return m3.apply(this, arguments); 31984 }) }, { key: "sendAppMessage", value: function(e3) { 31985 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : "*"; 31986 if (Qa2(this._callState, "sendAppMessage()"), JSON.stringify(e3).length > this._maxAppMessageSize) throw new Error("Message data too large. Max size is " + this._maxAppMessageSize); 31987 return this.sendMessageToCallMachine({ action: "app-msg", data: e3, to: t3 }), this; 31988 } }, { key: "addFakeParticipant", value: function(e3) { 31989 return nc2(), Qa2(this._callState, "addFakeParticipant()"), this.sendMessageToCallMachine(Aa2({ action: "add-fake-participant" }, e3)), this; 31990 } }, { key: "setShowNamesMode", value: function(e3) { 31991 return tc2(this._callObjectMode, "setShowNamesMode()"), nc2(), e3 && "always" !== e3 && "never" !== e3 ? (console.error('setShowNamesMode argument should be "always", "never", or false'), this) : (this.sendMessageToCallMachine({ action: "set-show-names", mode: e3 }), this); 31992 } }, { key: "setShowLocalVideo", value: function() { 31993 var e3 = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; 31994 return tc2(this._callObjectMode, "setShowLocalVideo()"), nc2(), Qa2(this._callState, "setShowLocalVideo()"), "boolean" != typeof e3 ? (console.error("setShowLocalVideo only accepts a boolean value"), this) : (this.sendMessageToCallMachine({ action: "set-show-local-video", show: e3 }), this._showLocalVideo = e3, this); 31995 } }, { key: "showLocalVideo", value: function() { 31996 return tc2(this._callObjectMode, "showLocalVideo()"), nc2(), this._showLocalVideo; 31997 } }, { key: "setShowParticipantsBar", value: function() { 31998 var e3 = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0]; 31999 return tc2(this._callObjectMode, "setShowParticipantsBar()"), nc2(), Qa2(this._callState, "setShowParticipantsBar()"), "boolean" != typeof e3 ? (console.error("setShowParticipantsBar only accepts a boolean value"), this) : (this.sendMessageToCallMachine({ action: "set-show-participants-bar", show: e3 }), this._showParticipantsBar = e3, this); 32000 } }, { key: "showParticipantsBar", value: function() { 32001 return tc2(this._callObjectMode, "showParticipantsBar()"), nc2(), this._showParticipantsBar; 32002 } }, { key: "customIntegrations", value: function() { 32003 return nc2(), tc2(this._callObjectMode, "customIntegrations()"), this._customIntegrations; 32004 } }, { key: "setCustomIntegrations", value: function(e3) { 32005 return nc2(), tc2(this._callObjectMode, "setCustomIntegrations()"), Qa2(this._callState, "setCustomIntegrations()"), vc2(e3) ? (this.sendMessageToCallMachine({ action: "set-custom-integrations", integrations: e3 }), this._customIntegrations = e3, this) : this; 32006 } }, { key: "startCustomIntegrations", value: function(e3) { 32007 var t3 = this; 32008 if (nc2(), tc2(this._callObjectMode, "startCustomIntegrations()"), Qa2(this._callState, "startCustomIntegrations()"), Array.isArray(e3) && e3.some((function(e4) { 32009 return "string" != typeof e4; 32010 })) || !Array.isArray(e3) && "string" != typeof e3) return console.error("startCustomIntegrations() only accepts string | string[]"), this; 32011 var n3 = "string" == typeof e3 ? [e3] : e3, r4 = n3.filter((function(e4) { 32012 return !(e4 in t3._customIntegrations); 32013 })); 32014 return r4.length ? (console.error(`Can't find custom integration(s): "`.concat(r4.join(", "), '"')), this) : (this.sendMessageToCallMachine({ action: "start-custom-integrations", ids: n3 }), this); 32015 } }, { key: "stopCustomIntegrations", value: function(e3) { 32016 var t3 = this; 32017 if (nc2(), tc2(this._callObjectMode, "stopCustomIntegrations()"), Qa2(this._callState, "stopCustomIntegrations()"), Array.isArray(e3) && e3.some((function(e4) { 32018 return "string" != typeof e4; 32019 })) || !Array.isArray(e3) && "string" != typeof e3) return console.error("stopCustomIntegrations() only accepts string | string[]"), this; 32020 var n3 = "string" == typeof e3 ? [e3] : e3, r4 = n3.filter((function(e4) { 32021 return !(e4 in t3._customIntegrations); 32022 })); 32023 return r4.length ? (console.error(`Can't find custom integration(s): "`.concat(r4.join(", "), '"')), this) : (this.sendMessageToCallMachine({ action: "stop-custom-integrations", ids: n3 }), this); 32024 } }, { key: "customTrayButtons", value: function() { 32025 return tc2(this._callObjectMode, "customTrayButtons()"), nc2(), this._customTrayButtons; 32026 } }, { key: "updateCustomTrayButtons", value: function(e3) { 32027 return tc2(this._callObjectMode, "updateCustomTrayButtons()"), nc2(), Qa2(this._callState, "updateCustomTrayButtons()"), fc2(e3) ? (this.sendMessageToCallMachine({ action: "update-custom-tray-buttons", btns: e3 }), this._customTrayButtons = e3, this) : (console.error("updateCustomTrayButtons only accepts a dictionary of the type ".concat(JSON.stringify($a2))), this); 32028 } }, { key: "theme", value: function() { 32029 return tc2(this._callObjectMode, "theme()"), this.properties.theme; 32030 } }, { key: "setTheme", value: function(e3) { 32031 var t3 = this; 32032 return tc2(this._callObjectMode, "setTheme()"), new Promise((function(n3, r4) { 32033 try { 32034 t3.validateProperties({ theme: e3 }), t3.properties.theme = Aa2({}, e3), t3.sendMessageToCallMachine({ action: "set-theme", theme: t3.properties.theme }); 32035 try { 32036 t3.emitDailyJSEvent({ action: Ui2, theme: t3.properties.theme }); 32037 } catch (e4) { 32038 console.log("could not emit 'theme-updated'", e4); 32039 } 32040 n3(t3.properties.theme); 32041 } catch (e4) { 32042 r4(e4); 32043 } 32044 })); 32045 } }, { key: "requestFullscreen", value: (g3 = p2((function* () { 32046 if (nc2(), this._iframe && !document.fullscreenElement && as2()) try { 32047 (yield this._iframe.requestFullscreen) ? this._iframe.requestFullscreen() : this._iframe.webkitRequestFullscreen(); 32048 } catch (e3) { 32049 console.log("could not make video call fullscreen", e3); 32050 } 32051 })), function() { 32052 return g3.apply(this, arguments); 32053 }) }, { key: "exitFullscreen", value: function() { 32054 nc2(), document.fullscreenElement ? document.exitFullscreen() : document.webkitFullscreenElement && document.webkitExitFullscreen(); 32055 } }, { key: "getSidebarView", value: (v3 = p2((function* () { 32056 var e3 = this; 32057 return this._callObjectMode ? (console.error("getSidebarView is not available in callObject mode"), Promise.resolve(null)) : new Promise((function(t3) { 32058 e3.sendMessageToCallMachine({ action: "get-sidebar-view" }, (function(e4) { 32059 t3(e4.view); 32060 })); 32061 })); 32062 })), function() { 32063 return v3.apply(this, arguments); 32064 }) }, { key: "setSidebarView", value: function(e3) { 32065 return this._callObjectMode ? (console.error("setSidebarView is not available in callObject mode"), this) : (this.sendMessageToCallMachine({ action: "set-sidebar-view", view: e3 }), this); 32066 } }, { key: "room", value: (h3 = p2((function* () { 32067 var e3 = this, t3 = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).includeRoomConfigDefaults, n3 = void 0 === t3 || t3; 32068 return this._accessState.access === fi2 || this.needsLoad() ? this.properties.url ? { roomUrlPendingJoin: this.properties.url } : null : new Promise((function(t4) { 32069 e3.sendMessageToCallMachine({ action: "lib-room-info", includeRoomConfigDefaults: n3 }, (function(e4) { 32070 delete e4.action, delete e4.callbackStamp, t4(e4); 32071 })); 32072 })); 32073 })), function() { 32074 return h3.apply(this, arguments); 32075 }) }, { key: "geo", value: (d3 = p2((function* () { 32076 try { 32077 var e3 = yield fetch("https://gs.daily.co/_ks_/x-swsl/:"); 32078 return { current: (yield e3.json()).geo }; 32079 } catch (e4) { 32080 return console.error("geo lookup failed", e4), { current: "" }; 32081 } 32082 })), function() { 32083 return d3.apply(this, arguments); 32084 }) }, { key: "setNetworkTopology", value: (c3 = p2((function* (e3) { 32085 var t3 = this; 32086 return nc2(), Qa2(this._callState, "setNetworkTopology()"), new Promise((function(n3, r4) { 32087 t3.sendMessageToCallMachine({ action: "set-network-topology", opts: e3 }, (function(e4) { 32088 e4.error ? r4({ error: e4.error }) : n3({ workerId: e4.workerId }); 32089 })); 32090 })); 32091 })), function(e3) { 32092 return c3.apply(this, arguments); 32093 }) }, { key: "getNetworkTopology", value: (i3 = p2((function* () { 32094 var e3 = this; 32095 return new Promise((function(t3, n3) { 32096 e3.needsLoad() && t3({ topology: "none" }), e3.sendMessageToCallMachine({ action: "get-network-topology" }, (function(e4) { 32097 e4.error ? n3({ error: e4.error }) : t3({ topology: e4.topology }); 32098 })); 32099 })); 32100 })), function() { 32101 return i3.apply(this, arguments); 32102 }) }, { key: "setPlayNewParticipantSound", value: function(e3) { 32103 if (nc2(), "number" != typeof e3 && true !== e3 && false !== e3) throw new Error("argument to setShouldPlayNewParticipantSound should be true, false, or a number, but is ".concat(e3)); 32104 this.sendMessageToCallMachine({ action: "daily-method-set-play-ding", arg: e3 }); 32105 } }, { key: "on", value: function(e3, t3) { 32106 return b2.prototype.on.call(this, e3, t3); 32107 } }, { key: "once", value: function(e3, t3) { 32108 return b2.prototype.once.call(this, e3, t3); 32109 } }, { key: "off", value: function(e3, t3) { 32110 return b2.prototype.off.call(this, e3, t3); 32111 } }, { key: "validateProperties", value: function(e3) { 32112 var t3, n3; 32113 if (null != e3 && null !== (t3 = e3.dailyConfig) && void 0 !== t3 && t3.userMediaAudioConstraints) { 32114 var r4, i4; 32115 is2() || console.warn("userMediaAudioConstraints is deprecated. You can override constraints with inputSettings.audio.settings, found in DailyCallOptions."); 32116 var o3 = e3.inputSettings || {}; 32117 o3.audio = (null === (r4 = e3.inputSettings) || void 0 === r4 ? void 0 : r4.audio) || {}, o3.audio.settings = (null === (i4 = e3.inputSettings) || void 0 === i4 || null === (i4 = i4.audio) || void 0 === i4 ? void 0 : i4.settings) || {}, o3.audio.settings = Aa2(Aa2({}, o3.audio.settings), e3.dailyConfig.userMediaAudioConstraints), e3.inputSettings = o3, delete e3.dailyConfig.userMediaAudioConstraints; 32118 } 32119 if (null != e3 && null !== (n3 = e3.dailyConfig) && void 0 !== n3 && n3.userMediaVideoConstraints) { 32120 var s3, a3; 32121 is2() || console.warn("userMediaVideoConstraints is deprecated. You can override constraints with inputSettings.video.settings, found in DailyCallOptions."); 32122 var c4 = e3.inputSettings || {}; 32123 c4.video = (null === (s3 = e3.inputSettings) || void 0 === s3 ? void 0 : s3.video) || {}, c4.video.settings = (null === (a3 = e3.inputSettings) || void 0 === a3 || null === (a3 = a3.video) || void 0 === a3 ? void 0 : a3.settings) || {}, c4.video.settings = Aa2(Aa2({}, c4.video.settings), e3.dailyConfig.userMediaVideoConstraints), e3.inputSettings = c4, delete e3.dailyConfig.userMediaVideoConstraints; 32124 } 32125 for (var l3 in e3) { 32126 if (!za2[l3]) throw new Error("unrecognized property '".concat(l3, "'")); 32127 if (za2[l3].validate && !za2[l3].validate(e3[l3], this)) throw new Error("property '".concat(l3, "': ").concat(za2[l3].help)); 32128 } 32129 } }, { key: "assembleMeetingUrl", value: function() { 32130 var e3, t3, n3 = Aa2(Aa2({}, this.properties), {}, { emb: this.callClientId, embHref: encodeURIComponent(window.location.href), proxy: null !== (e3 = this.properties.dailyConfig) && void 0 !== e3 && e3.proxyUrl ? encodeURIComponent(null === (t3 = this.properties.dailyConfig) || void 0 === t3 ? void 0 : t3.proxyUrl) : void 0 }), r4 = n3.url.match(/\?/) ? "&" : "?"; 32131 return n3.url + r4 + Object.keys(za2).filter((function(e4) { 32132 return za2[e4].queryString && void 0 !== n3[e4]; 32133 })).map((function(e4) { 32134 return "".concat(za2[e4].queryString, "=").concat(n3[e4]); 32135 })).join("&"); 32136 } }, { key: "needsLoad", value: function() { 32137 return [ti2, ni2, si2, ai2].includes(this._callState); 32138 } }, { key: "sendMessageToCallMachine", value: function(e3, t3) { 32139 if (this._destroyed && (this._logUseAfterDestroy(), this.strictMode)) throw new Error("Use after destroy"); 32140 this._messageChannel.sendMessageToCallMachine(e3, t3, this.callClientId, this._iframe); 32141 } }, { key: "forwardPackagedMessageToCallMachine", value: function(e3) { 32142 this._messageChannel.forwardPackagedMessageToCallMachine(e3, this._iframe, this.callClientId); 32143 } }, { key: "addListenerForPackagedMessagesFromCallMachine", value: function(e3) { 32144 return this._messageChannel.addListenerForPackagedMessagesFromCallMachine(e3, this.callClientId); 32145 } }, { key: "removeListenerForPackagedMessagesFromCallMachine", value: function(e3) { 32146 this._messageChannel.removeListenerForPackagedMessagesFromCallMachine(e3); 32147 } }, { key: "handleMessageFromCallMachine", value: function(t3) { 32148 switch (t3.action) { 32149 case Fi2: 32150 this.sendMessageToCallMachine(Aa2({ action: Bi2 }, this.properties)); 32151 break; 32152 case "call-machine-initialized": 32153 this._callMachineInitialized = true; 32154 var n3 = { action: Go2, level: "log", code: 1011, stats: { event: "bundle load", time: "no-op" === this._bundleLoadTime ? 0 : this._bundleLoadTime, preLoaded: "no-op" === this._bundleLoadTime, url: B2(this.properties.dailyConfig) } }; 32155 this.sendMessageToCallMachine(n3), this._delayDuplicateInstanceLog && this._logDuplicateInstanceAttempt(); 32156 break; 32157 case $i2: 32158 this._loadedCallback && (this._loadedCallback(), this._loadedCallback = null), this.emitDailyJSEvent(t3); 32159 break; 32160 case Hi2: 32161 var r4, i4 = Aa2({}, t3); 32162 delete i4.internal, this._maxAppMessageSize = (null === (r4 = t3.internal) || void 0 === r4 ? void 0 : r4._maxAppMessageSize) || $o2, this._joinedCallback && (this._joinedCallback(t3.participants), this._joinedCallback = null), this.emitDailyJSEvent(i4); 32163 break; 32164 case Qi2: 32165 case Ki2: 32166 if (this._callState === si2) return; 32167 if (t3.participant && t3.participant.session_id) { 32168 var o3 = t3.participant.local ? "local" : t3.participant.session_id; 32169 if (this._callObjectMode) { 32170 var s3 = this._callMachine().store; 32171 Zs2(t3.participant, s3), ea2(t3.participant, s3), na2(t3.participant, this._participants[o3], s3); 32172 } 32173 try { 32174 this.maybeParticipantTracksStopped(this._participants[o3], t3.participant), this.maybeParticipantTracksStarted(this._participants[o3], t3.participant), this.maybeEventRecordingStopped(this._participants[o3], t3.participant), this.maybeEventRecordingStarted(this._participants[o3], t3.participant); 32175 } catch (e3) { 32176 console.error("track events error", e3); 32177 } 32178 this.compareEqualForParticipantUpdateEvent(t3.participant, this._participants[o3]) || (this._participants[o3] = Aa2({}, t3.participant), this.toggleParticipantAudioBasedOnNativeAudioFocus(), this.emitDailyJSEvent(t3)); 32179 } 32180 break; 32181 case Yi2: 32182 if (t3.participant && t3.participant.session_id) { 32183 var a3 = this._participants[t3.participant.session_id]; 32184 a3 && this.maybeParticipantTracksStopped(a3, null), delete this._participants[t3.participant.session_id], this.emitDailyJSEvent(t3); 32185 } 32186 break; 32187 case Xi2: 32188 S2(this._participantCounts, t3.participantCounts) || (this._participantCounts = t3.participantCounts, this.emitDailyJSEvent(t3)); 32189 break; 32190 case Zi2: 32191 var c4 = { access: t3.access }; 32192 t3.awaitingAccess && (c4.awaitingAccess = t3.awaitingAccess), S2(this._accessState, c4) || (this._accessState = c4, this.emitDailyJSEvent(t3)); 32193 break; 32194 case eo2: 32195 if (t3.meetingSession) { 32196 this._meetingSessionSummary = t3.meetingSession, this.emitDailyJSEvent(t3); 32197 var l3 = Aa2(Aa2({}, t3), {}, { action: "meeting-session-updated" }); 32198 this.emitDailyJSEvent(l3); 32199 } 32200 break; 32201 case Jo2: 32202 var u3; 32203 this._iframe && !t3.preserveIframe && (this._iframe.src = ""), this._updateCallState(ai2), this.resetMeetingDependentVars(), this._loadedCallback && (this._loadedCallback(t3.errorMsg), this._loadedCallback = null), t3.preserveIframe; 32204 var d4 = e2(t3, Oa2); 32205 null != d4 && null !== (u3 = d4.error) && void 0 !== u3 && u3.details && (d4.error.details = JSON.parse(d4.error.details)), this._maybeSendToSentry(t3), this._joinedCallback && (this._joinedCallback(null, d4), this._joinedCallback = null), this.emitDailyJSEvent(d4); 32206 break; 32207 case Gi2: 32208 this._callState !== ai2 && this._updateCallState(si2), this.resetMeetingDependentVars(), this._resolveLeave && (this._resolveLeave(), this._resolveLeave = null), this.emitDailyJSEvent(t3); 32209 break; 32210 case "selected-devices-updated": 32211 t3.devices && this.emitDailyJSEvent(t3); 32212 break; 32213 case Oo2: 32214 var p3 = t3.state, h4 = t3.threshold, f3 = t3.quality, v4 = p3.state, g4 = p3.reasons; 32215 v4 === this._network.networkState && S2(g4, this._network.networkStateReasons) && h4 === this._network.threshold && f3 === this._network.quality || (this._network.networkState = v4, this._network.networkStateReasons = g4, this._network.quality = f3, this._network.threshold = h4, t3.networkState = v4, g4.length && (t3.networkStateReasons = g4), delete t3.state, this.emitDailyJSEvent(t3)); 32216 break; 32217 case Ao2: 32218 t3 && t3.cpuLoadState && this.emitDailyJSEvent(t3); 32219 break; 32220 case jo2: 32221 t3 && void 0 !== t3.faceCounts && this.emitDailyJSEvent(t3); 32222 break; 32223 case Eo2: 32224 var m4 = t3.activeSpeaker; 32225 this._activeSpeaker.peerId !== m4.peerId && (this._activeSpeaker.peerId = m4.peerId, this.emitDailyJSEvent({ action: t3.action, activeSpeaker: this._activeSpeaker })); 32226 break; 32227 case "show-local-video-changed": 32228 if (this._callObjectMode) return; 32229 var y4 = t3.show; 32230 this._showLocalVideo = y4, this.emitDailyJSEvent({ action: t3.action, show: y4 }); 32231 break; 32232 case To2: 32233 var b3 = t3.enabled; 32234 this._activeSpeakerMode !== b3 && (this._activeSpeakerMode = b3, this.emitDailyJSEvent({ action: t3.action, enabled: this._activeSpeakerMode })); 32235 break; 32236 case ro2: 32237 case io2: 32238 case oo2: 32239 this._waitingParticipants = t3.allWaitingParticipants, this.emitDailyJSEvent({ action: t3.action, participant: t3.participant }); 32240 break; 32241 case Bo2: 32242 S2(this._receiveSettings, t3.receiveSettings) || (this._receiveSettings = t3.receiveSettings, this.emitDailyJSEvent({ action: t3.action, receiveSettings: t3.receiveSettings })); 32243 break; 32244 case Uo2: 32245 this._maybeUpdateInputSettings(t3.inputSettings); 32246 break; 32247 case "send-settings-updated": 32248 S2(this._sendSettings, t3.sendSettings) || (this._sendSettings = t3.sendSettings, this._preloadCache.sendSettings = null, this.emitDailyJSEvent({ action: t3.action, sendSettings: t3.sendSettings })); 32249 break; 32250 case "local-audio-level": 32251 this._localAudioLevel = t3.audioLevel, this._preloadCache.localAudioLevelObserver = null, this.emitDailyJSEvent(t3); 32252 break; 32253 case "remote-participants-audio-level": 32254 this._remoteParticipantsAudioLevel = t3.participantsAudioLevel, this._preloadCache.remoteParticipantsAudioLevelObserver = null, this.emitDailyJSEvent(t3); 32255 break; 32256 case _o2: 32257 var _4 = t3.session_id; 32258 this._rmpPlayerState[_4] = t3.playerState, this.emitDailyJSEvent(t3); 32259 break; 32260 case So2: 32261 delete this._rmpPlayerState[t3.session_id], this.emitDailyJSEvent(t3); 32262 break; 32263 case wo2: 32264 var w4 = t3.session_id, k4 = this._rmpPlayerState[w4]; 32265 k4 && this.compareEqualForRMPUpdateEvent(k4, t3.remoteMediaPlayerState) || (this._rmpPlayerState[w4] = t3.remoteMediaPlayerState, this.emitDailyJSEvent(t3)); 32266 break; 32267 case "custom-button-click": 32268 case "sidebar-view-changed": 32269 this.emitDailyJSEvent(t3); 32270 break; 32271 case to2: 32272 var M4 = this._meetingSessionState.topology !== (t3.meetingSessionState && t3.meetingSessionState.topology); 32273 this._meetingSessionState = _c2(t3.meetingSessionState, this._callObjectMode), (this._callObjectMode || M4) && this.emitDailyJSEvent(t3); 32274 break; 32275 case ko2: 32276 this._isScreenSharing = true, this.emitDailyJSEvent(t3); 32277 break; 32278 case Mo2: 32279 case Co2: 32280 this._isScreenSharing = false, this.emitDailyJSEvent(t3); 32281 break; 32282 case po2: 32283 case ho2: 32284 case fo2: 32285 case vo2: 32286 case go2: 32287 case co2: 32288 case lo2: 32289 case uo2: 32290 case qi2: 32291 case zi2: 32292 case yo2: 32293 case bo2: 32294 case "test-completed": 32295 case Po2: 32296 case mo2: 32297 case Lo2: 32298 case Do2: 32299 case No2: 32300 case Ro2: 32301 case Vo2: 32302 case Fo2: 32303 case "dialin-ready": 32304 case "dialin-connected": 32305 case "dialin-error": 32306 case "dialin-stopped": 32307 case "dialin-warning": 32308 case "dialout-connected": 32309 case "dialout-answered": 32310 case "dialout-error": 32311 case "dialout-stopped": 32312 case "dialout-warning": 32313 this.emitDailyJSEvent(t3); 32314 break; 32315 case "request-fullscreen": 32316 this.requestFullscreen(); 32317 break; 32318 case "request-exit-fullscreen": 32319 this.exitFullscreen(); 32320 } 32321 } }, { key: "maybeEventRecordingStopped", value: function(e3, t3) { 32322 var n3 = "record"; 32323 e3 && (t3.local || false !== t3[n3] || e3[n3] === t3[n3] || this.emitDailyJSEvent({ action: ho2 })); 32324 } }, { key: "maybeEventRecordingStarted", value: function(e3, t3) { 32325 var n3 = "record"; 32326 e3 && (t3.local || true !== t3[n3] || e3[n3] === t3[n3] || this.emitDailyJSEvent({ action: po2 })); 32327 } }, { key: "_trackStatePlayable", value: function(e3) { 32328 return !(!e3 || e3.state !== hi2); 32329 } }, { key: "_trackChanged", value: function(e3, t3) { 32330 return !((null == e3 ? void 0 : e3.id) === (null == t3 ? void 0 : t3.id)); 32331 } }, { key: "maybeEventTrackStopped", value: function(e3, t3, n3) { 32332 var r4, i4, o3 = null !== (r4 = null == t3 ? void 0 : t3.tracks[e3]) && void 0 !== r4 ? r4 : null, s3 = null !== (i4 = null == n3 ? void 0 : n3.tracks[e3]) && void 0 !== i4 ? i4 : null, a3 = null == o3 ? void 0 : o3.track; 32333 if (a3) { 32334 var c4 = this._trackStatePlayable(o3), l3 = this._trackStatePlayable(s3), u3 = this._trackChanged(a3, null == s3 ? void 0 : s3.track); 32335 c4 && (l3 && !u3 || this.emitDailyJSEvent({ action: ao2, track: a3, participant: null != n3 ? n3 : t3, type: e3 })); 32336 } 32337 } }, { key: "maybeEventTrackStarted", value: function(e3, t3, n3) { 32338 var r4, i4, o3 = null !== (r4 = null == t3 ? void 0 : t3.tracks[e3]) && void 0 !== r4 ? r4 : null, s3 = null !== (i4 = null == n3 ? void 0 : n3.tracks[e3]) && void 0 !== i4 ? i4 : null, a3 = null == s3 ? void 0 : s3.track; 32339 if (a3) { 32340 var c4 = this._trackStatePlayable(o3), l3 = this._trackStatePlayable(s3), u3 = this._trackChanged(null == o3 ? void 0 : o3.track, a3); 32341 l3 && (c4 && !u3 || this.emitDailyJSEvent({ action: so2, track: a3, participant: n3, type: e3 })); 32342 } 32343 } }, { key: "maybeParticipantTracksStopped", value: function(e3, t3) { 32344 if (e3) for (var n3 in e3.tracks) this.maybeEventTrackStopped(n3, e3, t3); 32345 } }, { key: "maybeParticipantTracksStarted", value: function(e3, t3) { 32346 if (t3) for (var n3 in t3.tracks) this.maybeEventTrackStarted(n3, e3, t3); 32347 } }, { key: "compareEqualForRMPUpdateEvent", value: function(e3, t3) { 32348 var n3, r4; 32349 return e3.state === t3.state && (null === (n3 = e3.settings) || void 0 === n3 ? void 0 : n3.volume) === (null === (r4 = t3.settings) || void 0 === r4 ? void 0 : r4.volume); 32350 } }, { key: "emitDailyJSEvent", value: function(e3) { 32351 try { 32352 e3.callClientId = this.callClientId, this.emit(e3.action, e3); 32353 } catch (t3) { 32354 console.log("could not emit", e3, t3); 32355 } 32356 } }, { key: "compareEqualForParticipantUpdateEvent", value: function(e3, t3) { 32357 return !!S2(e3, t3) && ((!e3.videoTrack || !t3.videoTrack || e3.videoTrack.id === t3.videoTrack.id && e3.videoTrack.muted === t3.videoTrack.muted && e3.videoTrack.enabled === t3.videoTrack.enabled) && (!e3.audioTrack || !t3.audioTrack || e3.audioTrack.id === t3.audioTrack.id && e3.audioTrack.muted === t3.audioTrack.muted && e3.audioTrack.enabled === t3.audioTrack.enabled)); 32358 } }, { key: "nativeUtils", value: function() { 32359 return is2() ? "undefined" == typeof DailyNativeUtils ? (console.warn("in React Native, DailyNativeUtils is expected to be available"), null) : DailyNativeUtils : null; 32360 } }, { key: "updateIsPreparingToJoin", value: function(e3) { 32361 this._updateCallState(this._callState, e3); 32362 } }, { key: "_updateCallState", value: function(e3) { 32363 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this._isPreparingToJoin; 32364 if (e3 !== this._callState || t3 !== this._isPreparingToJoin) { 32365 var n3 = this._callState, r4 = this._isPreparingToJoin; 32366 this._callState = e3, this._isPreparingToJoin = t3; 32367 var i4 = this._callState === oi2; 32368 this.updateShowAndroidOngoingMeetingNotification(i4); 32369 var o3 = Ka2(n3, r4), s3 = Ka2(this._callState, this._isPreparingToJoin); 32370 o3 !== s3 && (this.updateKeepDeviceAwake(s3), this.updateDeviceAudioMode(s3), this.updateNoOpRecordingEnsuringBackgroundContinuity(s3)); 32371 } 32372 } }, { key: "resetMeetingDependentVars", value: function() { 32373 this._participants = {}, this._participantCounts = Fa2, this._waitingParticipants = {}, this._activeSpeaker = {}, this._activeSpeakerMode = false, this._didPreAuth = false, this._accessState = { access: fi2 }, this._finalSummaryOfPrevSession = this._meetingSessionSummary, this._meetingSessionSummary = {}, this._meetingSessionState = _c2(Ra2, this._callObjectMode), this._isScreenSharing = false, this._receiveSettings = {}, this._inputSettings = void 0, this._sendSettings = {}, this._localAudioLevel = 0, this._isLocalAudioLevelObserverRunning = false, this._remoteParticipantsAudioLevel = {}, this._isRemoteParticipantsAudioLevelObserverRunning = false, this._maxAppMessageSize = $o2, this._callMachineInitialized = false, this._bundleLoadTime = void 0, this._preloadCache; 32374 } }, { key: "updateKeepDeviceAwake", value: function(e3) { 32375 is2() && this.nativeUtils().setKeepDeviceAwake(e3, this.callClientId); 32376 } }, { key: "updateDeviceAudioMode", value: function(e3) { 32377 if (is2() && !this.disableReactNativeAutoDeviceManagement("audio")) { 32378 var t3 = e3 ? this._nativeInCallAudioMode : "idle"; 32379 this.nativeUtils().setAudioMode(t3); 32380 } 32381 } }, { key: "updateShowAndroidOngoingMeetingNotification", value: function(e3) { 32382 if (is2() && this.nativeUtils().setShowOngoingMeetingNotification) { 32383 var t3, n3, r4, i4; 32384 if (this.properties.reactNativeConfig && this.properties.reactNativeConfig.androidInCallNotification) { 32385 var o3 = this.properties.reactNativeConfig.androidInCallNotification; 32386 t3 = o3.title, n3 = o3.subtitle, r4 = o3.iconName, i4 = o3.disableForCustomOverride; 32387 } 32388 i4 && (e3 = false), this.nativeUtils().setShowOngoingMeetingNotification(e3, t3, n3, r4, this.callClientId); 32389 } 32390 } }, { key: "updateNoOpRecordingEnsuringBackgroundContinuity", value: function(e3) { 32391 is2() && this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity && this.nativeUtils().enableNoOpRecordingEnsuringBackgroundContinuity(e3); 32392 } }, { key: "toggleParticipantAudioBasedOnNativeAudioFocus", value: function() { 32393 var e3; 32394 if (is2()) { 32395 var t3 = null === (e3 = this._callMachine()) || void 0 === e3 || null === (e3 = e3.store) || void 0 === e3 ? void 0 : e3.getState(); 32396 for (var n3 in null == t3 ? void 0 : t3.streams) { 32397 var r4 = t3.streams[n3]; 32398 r4 && r4.pendingTrack && "audio" === r4.pendingTrack.kind && (r4.pendingTrack.enabled = this._hasNativeAudioFocus); 32399 } 32400 } 32401 } }, { key: "disableReactNativeAutoDeviceManagement", value: function(e3) { 32402 return this.properties.reactNativeConfig && this.properties.reactNativeConfig.disableAutoDeviceManagement && this.properties.reactNativeConfig.disableAutoDeviceManagement[e3]; 32403 } }, { key: "absoluteUrl", value: function(e3) { 32404 if (void 0 !== e3) { 32405 var t3 = document.createElement("a"); 32406 return t3.href = e3, t3.href; 32407 } 32408 } }, { key: "sayHello", value: function() { 32409 var e3 = "hello, world."; 32410 return console.log(e3), e3; 32411 } }, { key: "_logUseAfterDestroy", value: function() { 32412 var e3 = Object.values(La2)[0]; 32413 if (this.needsLoad()) { 32414 if (e3 && !e3.needsLoad()) { 32415 var t3 = { action: Go2, level: "error", code: this.strictMode ? 9995 : 9997 }; 32416 e3.sendMessageToCallMachine(t3); 32417 } else if (!this.strictMode) { 32418 console.error("You are are attempting to use a call instance that was previously destroyed, which is unsupported. Please remove `strictMode: false` from your constructor properties to enable strict mode to track down and fix this unsupported usage."); 32419 } 32420 } else { 32421 var n3 = { action: Go2, level: "error", code: this.strictMode ? 9995 : 9997 }; 32422 this._messageChannel.sendMessageToCallMachine(n3, null, this.callClientId, this._iframe); 32423 } 32424 } }, { key: "_logDuplicateInstanceAttempt", value: function() { 32425 for (var e3 = 0, t3 = Object.values(La2); e3 < t3.length; e3++) { 32426 var n3 = t3[e3]; 32427 n3._callMachineInitialized ? (n3.sendMessageToCallMachine({ action: Go2, level: "warn", code: this.allowMultipleCallInstances ? 9993 : 9992 }), n3._delayDuplicateInstanceLog = false) : n3._delayDuplicateInstanceLog = true; 32428 } 32429 } }, { key: "_maybeSendToSentry", value: function(e3) { 32430 var t3, n3, i4, o3; 32431 if (null !== (t3 = e3.error) && void 0 !== t3 && t3.type) { 32432 if (![Pi2, Ti2, Ci2].includes(e3.error.type)) return; 32433 if (e3.error.type === Ci2 && e3.error.msg.includes("deleted")) return; 32434 } 32435 var s3 = null !== (n3 = this.properties) && void 0 !== n3 && n3.url ? new URL(this.properties.url) : void 0, a3 = "production"; 32436 s3 && s3.host.includes(".staging.daily") && (a3 = "staging"); 32437 var c4, l3, u3, d4, p3, h4 = (function(e4) { 32438 const t4 = [Ln2(), In2(), qr2(), Jr2(), Kr2(), ei2(), $n2(), Zr2()]; 32439 return false !== e4.autoSessionTracking && t4.push(Qr2()), t4; 32440 })({}).filter((function(e4) { 32441 return !["BrowserApiErrors", "Breadcrumbs", "GlobalHandlers"].includes(e4.name); 32442 })), f3 = new mr2({ dsn: "https://[email protected]/168844", transport: Ir2, stackParser: Br2, integrations: h4, environment: a3 }), v4 = new ut2(); 32443 if (v4.setClient(f3), f3.init(), this.session_id && v4.setExtra("sessionId", this.session_id), this.properties) { 32444 var g4 = Aa2({}, this.properties); 32445 g4.userName = g4.userName ? "[Filtered]" : void 0, g4.userData = g4.userData ? "[Filtered]" : void 0, g4.token = g4.token ? "[Filtered]" : void 0, v4.setExtra("properties", g4); 32446 } 32447 if (s3) { 32448 var m4 = s3.searchParams.get("domain"); 32449 if (!m4) { 32450 var y4 = s3.host.match(/(.*?)\./); 32451 m4 = y4 && y4[1] || ""; 32452 } 32453 m4 && v4.setTag("domain", m4); 32454 } 32455 e3.error && (v4.setTag("fatalErrorType", e3.error.type), v4.setExtra("errorDetails", e3.error.details), (null === (c4 = e3.error.details) || void 0 === c4 ? void 0 : c4.uri) && v4.setTag("serverAddress", e3.error.details.uri), (null === (l3 = e3.error.details) || void 0 === l3 ? void 0 : l3.workerGroup) && v4.setTag("workerGroup", e3.error.details.workerGroup), (null === (u3 = e3.error.details) || void 0 === u3 ? void 0 : u3.geoGroup) && v4.setTag("geoGroup", e3.error.details.geoGroup), (null === (d4 = e3.error.details) || void 0 === d4 ? void 0 : d4.on) && v4.setTag("connectionAttempt", e3.error.details.on), null !== (p3 = e3.error.details) && void 0 !== p3 && p3.bundleUrl && (v4.setTag("bundleUrl", e3.error.details.bundleUrl), v4.setTag("bundleError", e3.error.details.sourceError.type))); 32456 v4.setTags({ callMode: this._callObjectMode ? is2() ? "reactNative" : null !== (i4 = this.properties) && void 0 !== i4 && null !== (i4 = i4.dailyConfig) && void 0 !== i4 && null !== (i4 = i4.callMode) && void 0 !== i4 && i4.includes("prebuilt") ? this.properties.dailyConfig.callMode : "custom" : "prebuilt-frame", version: r3.version() }); 32457 var b3 = (null === (o3 = e3.error) || void 0 === o3 ? void 0 : o3.msg) || e3.errorMsg; 32458 v4.captureException(new Error(b3)); 32459 } }, { key: "_callMachine", value: function() { 32460 var e3; 32461 return null === (e3 = window._daily) || void 0 === e3 || null === (e3 = e3.instances) || void 0 === e3 || null === (e3 = e3[this.callClientId]) || void 0 === e3 ? void 0 : e3.callMachine; 32462 } }, { key: "_maybeUpdateInputSettings", value: function(e3) { 32463 if (!S2(this._inputSettings, e3)) { 32464 var t3 = this._getInputSettings(); 32465 this._inputSettings = e3; 32466 var n3 = this._getInputSettings(); 32467 S2(t3, n3) || this.emitDailyJSEvent({ action: Uo2, inputSettings: n3 }); 32468 } 32469 } }], [{ key: "supportedBrowser", value: function() { 32470 if (is2()) return { supported: true, mobile: true, name: "React Native", version: null, supportsScreenShare: true, supportsSfu: true, supportsVideoProcessing: false, supportsAudioProcessing: false }; 32471 var e3 = D2.getParser(rs2()); 32472 return { supported: !!fs2(), mobile: "mobile" === e3.getPlatformType(), name: e3.getBrowserName(), version: e3.getBrowserVersion(), supportsFullscreen: !!as2(), supportsScreenShare: !!ss2(), supportsSfu: !!fs2(), supportsVideoProcessing: ps2(), supportsAudioProcessing: hs2() }; 32473 } }, { key: "version", value: function() { 32474 return "0.82.0"; 32475 } }, { key: "createCallObject", value: function() { 32476 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 32477 return e3.layout = "none", new r3(null, e3); 32478 } }, { key: "wrap", value: function(e3) { 32479 var t3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}; 32480 if (nc2(), !e3 || !e3.contentWindow || "string" != typeof e3.src) throw new Error("DailyIframe::Wrap needs an iframe-like first argument"); 32481 return t3.layout || (t3.customLayout ? t3.layout = "custom-v1" : t3.layout = "browser"), new r3(e3, t3); 32482 } }, { key: "createFrame", value: function(e3, t3) { 32483 var n3, i4; 32484 nc2(), e3 && t3 ? (n3 = e3, i4 = t3) : e3 && e3.append ? (n3 = e3, i4 = {}) : (n3 = document.body, i4 = e3 || {}); 32485 var o3 = i4.iframeStyle; 32486 o3 || (o3 = n3 === document.body ? { position: "fixed", border: "1px solid black", backgroundColor: "white", width: "375px", height: "450px", right: "1em", bottom: "1em" } : { border: 0, width: "100%", height: "100%" }); 32487 var s3 = document.createElement("iframe"); 32488 window.navigator && window.navigator.userAgent.match(/Chrome\/61\./) ? s3.allow = "microphone, camera" : s3.allow = "microphone; camera; autoplay; display-capture; screen-wake-lock", s3.style.visibility = "hidden", n3.appendChild(s3), s3.style.visibility = null, Object.keys(o3).forEach((function(e4) { 32489 return s3.style[e4] = o3[e4]; 32490 })), i4.layout || (i4.customLayout ? i4.layout = "custom-v1" : i4.layout = "browser"); 32491 try { 32492 return new r3(s3, i4); 32493 } catch (e4) { 32494 throw n3.removeChild(s3), e4; 32495 } 32496 } }, { key: "createTransparentFrame", value: function() { 32497 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; 32498 nc2(); 32499 var t3 = document.createElement("iframe"); 32500 return t3.allow = "microphone; camera; autoplay", t3.style.cssText = "\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n pointer-events: none;\n ", document.body.appendChild(t3), e3.layout || (e3.layout = "custom-v1"), r3.wrap(t3, e3); 32501 } }, { key: "getCallInstance", value: function() { 32502 var e3 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : void 0; 32503 return e3 ? La2[e3] : Object.values(La2)[0]; 32504 } }]); 32505 var i3, c3, d3, h3, v3, g3, m3, y3, _3, w3, k3, M3, C3, E3, T3, O3, P3, A3, j3, I3, x3, L3, R3, U3, V3, J3, $3, q3, z3, W3, H3, G3, Q3, K3, Y3, X3, Z3, ee3; 32506 })(); 32507 } 32508}); 32509
vendor: 174,870 bytes, lines 32510-37942
32510// node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js 32511var turbo_es2017_esm_exports = {}; 32512__export(turbo_es2017_esm_exports, { 32513 FetchEnctype: () => FetchEnctype, 32514 FetchMethod: () => FetchMethod, 32515 FetchRequest: () => FetchRequest, 32516 FetchResponse: () => FetchResponse, 32517 FrameElement: () => FrameElement, 32518 FrameLoadingStyle: () => FrameLoadingStyle, 32519 FrameRenderer: () => FrameRenderer, 32520 PageRenderer: () => PageRenderer, 32521 PageSnapshot: () => PageSnapshot, 32522 StreamActions: () => StreamActions, 32523 StreamElement: () => StreamElement, 32524 StreamSourceElement: () => StreamSourceElement, 32525 cache: () => cache, 32526 config: () => config, 32527 connectStreamSource: () => connectStreamSource, 32528 disconnectStreamSource: () => disconnectStreamSource, 32529 fetch: () => fetchWithTurboHeaders, 32530 fetchEnctypeFromString: () => fetchEnctypeFromString, 32531 fetchMethodFromString: () => fetchMethodFromString, 32532 isSafe: () => isSafe, 32533 morphBodyElements: () => morphBodyElements, 32534 morphChildren: () => morphChildren, 32535 morphElements: () => morphElements, 32536 morphTurboFrameElements: () => morphTurboFrameElements, 32537 navigator: () => sessionNavigator, 32538 registerAdapter: () => registerAdapter, 32539 renderStreamMessage: () => renderStreamMessage, 32540 session: () => session, 32541 setConfirmMethod: () => setConfirmMethod, 32542 setFormMode: () => setFormMode, 32543 setProgressBarDelay: () => setProgressBarDelay, 32544 start: () => start, 32545 visit: () => visit 32546}); 32547var FrameLoadingStyle = { 32548 eager: "eager", 32549 lazy: "lazy" 32550}; 32551var FrameElement = class _FrameElement extends HTMLElement { 32552 static delegateConstructor = void 0; 32553 loaded = Promise.resolve(); 32554 static get observedAttributes() { 32555 return ["disabled", "loading", "src"]; 32556 } 32557 constructor() { 32558 super(); 32559 this.delegate = new _FrameElement.delegateConstructor(this); 32560 } 32561 connectedCallback() { 32562 this.delegate.connect(); 32563 } 32564 disconnectedCallback() { 32565 this.delegate.disconnect(); 32566 } 32567 reload() { 32568 return this.delegate.sourceURLReloaded(); 32569 } 32570 attributeChangedCallback(name) { 32571 if (name == "loading") { 32572 this.delegate.loadingStyleChanged(); 32573 } else if (name == "src") { 32574 this.delegate.sourceURLChanged(); 32575 } else if (name == "disabled") { 32576 this.delegate.disabledChanged(); 32577 } 32578 } 32579 /** 32580 * Gets the URL to lazily load source HTML from 32581 */ 32582 get src() { 32583 return this.getAttribute("src"); 32584 } 32585 /** 32586 * Sets the URL to lazily load source HTML from 32587 */ 32588 set src(value) { 32589 if (value) { 32590 this.setAttribute("src", value); 32591 } else { 32592 this.removeAttribute("src"); 32593 } 32594 } 32595 /** 32596 * Gets the refresh mode for the frame. 32597 */ 32598 get refresh() { 32599 return this.getAttribute("refresh"); 32600 } 32601 /** 32602 * Sets the refresh mode for the frame. 32603 */ 32604 set refresh(value) { 32605 if (value) { 32606 this.setAttribute("refresh", value); 32607 } else { 32608 this.removeAttribute("refresh"); 32609 } 32610 } 32611 get shouldReloadWithMorph() { 32612 return this.src && this.refresh === "morph"; 32613 } 32614 /** 32615 * Determines if the element is loading 32616 */ 32617 get loading() { 32618 return frameLoadingStyleFromString(this.getAttribute("loading") || ""); 32619 } 32620 /** 32621 * Sets the value of if the element is loading 32622 */ 32623 set loading(value) { 32624 if (value) { 32625 this.setAttribute("loading", value); 32626 } else { 32627 this.removeAttribute("loading"); 32628 } 32629 } 32630 /** 32631 * Gets the disabled state of the frame. 32632 * 32633 * If disabled, no requests will be intercepted by the frame. 32634 */ 32635 get disabled() { 32636 return this.hasAttribute("disabled"); 32637 } 32638 /** 32639 * Sets the disabled state of the frame. 32640 * 32641 * If disabled, no requests will be intercepted by the frame. 32642 */ 32643 set disabled(value) { 32644 if (value) { 32645 this.setAttribute("disabled", ""); 32646 } else { 32647 this.removeAttribute("disabled"); 32648 } 32649 } 32650 /** 32651 * Gets the autoscroll state of the frame. 32652 * 32653 * If true, the frame will be scrolled into view automatically on update. 32654 */ 32655 get autoscroll() { 32656 return this.hasAttribute("autoscroll"); 32657 } 32658 /** 32659 * Sets the autoscroll state of the frame. 32660 * 32661 * If true, the frame will be scrolled into view automatically on update. 32662 */ 32663 set autoscroll(value) { 32664 if (value) { 32665 this.setAttribute("autoscroll", ""); 32666 } else { 32667 this.removeAttribute("autoscroll"); 32668 } 32669 } 32670 /** 32671 * Determines if the element has finished loading 32672 */ 32673 get complete() { 32674 return !this.delegate.isLoading; 32675 } 32676 /** 32677 * Gets the active state of the frame. 32678 * 32679 * If inactive, source changes will not be observed. 32680 */ 32681 get isActive() { 32682 return this.ownerDocument === document && !this.isPreview; 32683 } 32684 /** 32685 * Sets the active state of the frame. 32686 * 32687 * If inactive, source changes will not be observed. 32688 */ 32689 get isPreview() { 32690 return this.ownerDocument?.documentElement?.hasAttribute("data-turbo-preview"); 32691 } 32692}; 32693function frameLoadingStyleFromString(style) { 32694 switch (style.toLowerCase()) { 32695 case "lazy": 32696 return FrameLoadingStyle.lazy; 32697 default: 32698 return FrameLoadingStyle.eager; 32699 } 32700} 32701var drive = { 32702 enabled: true, 32703 progressBarDelay: 500, 32704 unvisitableExtensions: /* @__PURE__ */ new Set( 32705 [ 32706 ".7z", 32707 ".aac", 32708 ".apk", 32709 ".avi", 32710 ".bmp", 32711 ".bz2", 32712 ".css", 32713 ".csv", 32714 ".deb", 32715 ".dmg", 32716 ".doc", 32717 ".docx", 32718 ".exe", 32719 ".gif", 32720 ".gz", 32721 ".heic", 32722 ".heif", 32723 ".ico", 32724 ".iso", 32725 ".jpeg", 32726 ".jpg", 32727 ".js", 32728 ".json", 32729 ".m4a", 32730 ".mkv", 32731 ".mov", 32732 ".mp3", 32733 ".mp4", 32734 ".mpeg", 32735 ".mpg", 32736 ".msi", 32737 ".ogg", 32738 ".ogv", 32739 ".pdf", 32740 ".pkg", 32741 ".png", 32742 ".ppt", 32743 ".pptx", 32744 ".rar", 32745 ".rtf", 32746 ".svg", 32747 ".tar", 32748 ".tif", 32749 ".tiff", 32750 ".txt", 32751 ".wav", 32752 ".webm", 32753 ".webp", 32754 ".wma", 32755 ".wmv", 32756 ".xls", 32757 ".xlsx", 32758 ".xml", 32759 ".zip" 32760 ] 32761 ) 32762}; 32763function activateScriptElement(element) { 32764 if (element.getAttribute("data-turbo-eval") == "false") { 32765 return element; 32766 } else { 32767 const createdScriptElement = document.createElement("script"); 32768 const cspNonce = getCspNonce(); 32769 if (cspNonce) { 32770 createdScriptElement.nonce = cspNonce; 32771 } 32772 createdScriptElement.textContent = element.textContent; 32773 createdScriptElement.async = false; 32774 copyElementAttributes(createdScriptElement, element); 32775 return createdScriptElement; 32776 } 32777} 32778function copyElementAttributes(destinationElement, sourceElement) { 32779 for (const { name, value } of sourceElement.attributes) { 32780 destinationElement.setAttribute(name, value); 32781 } 32782} 32783function createDocumentFragment(html) { 32784 const template = document.createElement("template"); 32785 template.innerHTML = html; 32786 return template.content; 32787} 32788function dispatch(eventName, { target, cancelable, detail } = {}) { 32789 const event = new CustomEvent(eventName, { 32790 cancelable, 32791 bubbles: true, 32792 composed: true, 32793 detail 32794 }); 32795 if (target && target.isConnected) { 32796 target.dispatchEvent(event); 32797 } else { 32798 document.documentElement.dispatchEvent(event); 32799 } 32800 return event; 32801} 32802function cancelEvent(event) { 32803 event.preventDefault(); 32804 event.stopImmediatePropagation(); 32805} 32806function nextRepaint() { 32807 if (document.visibilityState === "hidden") { 32808 return nextEventLoopTick(); 32809 } else { 32810 return nextAnimationFrame(); 32811 } 32812} 32813function nextAnimationFrame() { 32814 return new Promise((resolve) => requestAnimationFrame(() => resolve())); 32815} 32816function nextEventLoopTick() { 32817 return new Promise((resolve) => setTimeout(() => resolve(), 0)); 32818} 32819function parseHTMLDocument(html = "") { 32820 return new DOMParser().parseFromString(html, "text/html"); 32821} 32822function unindent(strings, ...values) { 32823 const lines = interpolate(strings, values).replace(/^\n/, "").split("\n"); 32824 const match = lines[0].match(/^\s+/); 32825 const indent = match ? match[0].length : 0; 32826 return lines.map((line) => line.slice(indent)).join("\n"); 32827} 32828function interpolate(strings, values) { 32829 return strings.reduce((result, string, i3) => { 32830 const value = values[i3] == void 0 ? "" : values[i3]; 32831 return result + string + value; 32832 }, ""); 32833} 32834function uuid() { 32835 return Array.from({ length: 36 }).map((_3, i3) => { 32836 if (i3 == 8 || i3 == 13 || i3 == 18 || i3 == 23) { 32837 return "-"; 32838 } else if (i3 == 14) { 32839 return "4"; 32840 } else if (i3 == 19) { 32841 return (Math.floor(Math.random() * 4) + 8).toString(16); 32842 } else { 32843 return Math.floor(Math.random() * 16).toString(16); 32844 } 32845 }).join(""); 32846} 32847function getAttribute(attributeName, ...elements) { 32848 for (const value of elements.map((element) => element?.getAttribute(attributeName))) { 32849 if (typeof value == "string") return value; 32850 } 32851 return null; 32852} 32853function hasAttribute(attributeName, ...elements) { 32854 return elements.some((element) => element && element.hasAttribute(attributeName)); 32855} 32856function markAsBusy(...elements) { 32857 for (const element of elements) { 32858 if (element.localName == "turbo-frame") { 32859 element.setAttribute("busy", ""); 32860 } 32861 element.setAttribute("aria-busy", "true"); 32862 } 32863} 32864function clearBusyState(...elements) { 32865 for (const element of elements) { 32866 if (element.localName == "turbo-frame") { 32867 element.removeAttribute("busy"); 32868 } 32869 element.removeAttribute("aria-busy"); 32870 } 32871} 32872function waitForLoad(element, timeoutInMilliseconds = 2e3) { 32873 return new Promise((resolve) => { 32874 const onComplete = () => { 32875 element.removeEventListener("error", onComplete); 32876 element.removeEventListener("load", onComplete); 32877 resolve(); 32878 }; 32879 element.addEventListener("load", onComplete, { once: true }); 32880 element.addEventListener("error", onComplete, { once: true }); 32881 setTimeout(resolve, timeoutInMilliseconds); 32882 }); 32883} 32884function getHistoryMethodForAction(action) { 32885 switch (action) { 32886 case "replace": 32887 return history.replaceState; 32888 case "advance": 32889 case "restore": 32890 return history.pushState; 32891 } 32892} 32893function isAction(action) { 32894 return action == "advance" || action == "replace" || action == "restore"; 32895} 32896function getVisitAction(...elements) { 32897 const action = getAttribute("data-turbo-action", ...elements); 32898 return isAction(action) ? action : null; 32899} 32900function getMetaElement(name) { 32901 return document.querySelector(`meta[name="${name}"]`); 32902} 32903function getMetaContent(name) { 32904 const element = getMetaElement(name); 32905 return element && element.content; 32906} 32907function getCspNonce() { 32908 const element = getMetaElement("csp-nonce"); 32909 if (element) { 32910 const { nonce, content } = element; 32911 return nonce == "" ? content : nonce; 32912 } 32913} 32914function setMetaContent(name, content) { 32915 let element = getMetaElement(name); 32916 if (!element) { 32917 element = document.createElement("meta"); 32918 element.setAttribute("name", name); 32919 document.head.appendChild(element); 32920 } 32921 element.setAttribute("content", content); 32922 return element; 32923} 32924function findClosestRecursively(element, selector) { 32925 if (element instanceof Element) { 32926 return element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector); 32927 } 32928} 32929function elementIsFocusable(element) { 32930 const inertDisabledOrHidden = "[inert], :disabled, [hidden], details:not([open]), dialog:not([open])"; 32931 return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == "function"; 32932} 32933function queryAutofocusableElement(elementOrDocumentFragment) { 32934 return Array.from(elementOrDocumentFragment.querySelectorAll("[autofocus]")).find(elementIsFocusable); 32935} 32936async function around(callback, reader) { 32937 const before = reader(); 32938 callback(); 32939 await nextAnimationFrame(); 32940 const after = reader(); 32941 return [before, after]; 32942} 32943function doesNotTargetIFrame(name) { 32944 if (name === "_blank") { 32945 return false; 32946 } else if (name) { 32947 for (const element of document.getElementsByName(name)) { 32948 if (element instanceof HTMLIFrameElement) return false; 32949 } 32950 return true; 32951 } else { 32952 return true; 32953 } 32954} 32955function findLinkFromClickTarget(target) { 32956 const link = findClosestRecursively(target, "a[href], a[xlink\\:href]"); 32957 if (!link) return null; 32958 if (link.href.startsWith("#")) return null; 32959 if (link.hasAttribute("download")) return null; 32960 const linkTarget = link.getAttribute("target"); 32961 if (linkTarget && linkTarget !== "_self") return null; 32962 return link; 32963} 32964function debounce(fn3, delay) { 32965 let timeoutId = null; 32966 return (...args) => { 32967 const callback = () => fn3.apply(this, args); 32968 clearTimeout(timeoutId); 32969 timeoutId = setTimeout(callback, delay); 32970 }; 32971} 32972var submitter = { 32973 "aria-disabled": { 32974 beforeSubmit: (submitter2) => { 32975 submitter2.setAttribute("aria-disabled", "true"); 32976 submitter2.addEventListener("click", cancelEvent); 32977 }, 32978 afterSubmit: (submitter2) => { 32979 submitter2.removeAttribute("aria-disabled"); 32980 submitter2.removeEventListener("click", cancelEvent); 32981 } 32982 }, 32983 "disabled": { 32984 beforeSubmit: (submitter2) => submitter2.disabled = true, 32985 afterSubmit: (submitter2) => submitter2.disabled = false 32986 } 32987}; 32988var Config = class { 32989 #submitter = null; 32990 constructor(config2) { 32991 Object.assign(this, config2); 32992 } 32993 get submitter() { 32994 return this.#submitter; 32995 } 32996 set submitter(value) { 32997 this.#submitter = submitter[value] || value; 32998 } 32999}; 33000var forms = new Config({ 33001 mode: "on", 33002 submitter: "disabled" 33003}); 33004var config = { 33005 drive, 33006 forms 33007}; 33008function expandURL(locatable) { 33009 return new URL(locatable.toString(), document.baseURI); 33010} 33011function getAnchor(url) { 33012 let anchorMatch; 33013 if (url.hash) { 33014 return url.hash.slice(1); 33015 } else if (anchorMatch = url.href.match(/#(.*)$/)) { 33016 return anchorMatch[1]; 33017 } 33018} 33019function getAction$1(form, submitter2) { 33020 const action = submitter2?.getAttribute("formaction") || form.getAttribute("action") || form.action; 33021 return expandURL(action); 33022} 33023function getExtension(url) { 33024 return (getLastPathComponent(url).match(/\.[^.]*$/) || [])[0] || ""; 33025} 33026function isPrefixedBy(baseURL, url) { 33027 const prefix = addTrailingSlash(url.origin + url.pathname); 33028 return addTrailingSlash(baseURL.href) === prefix || baseURL.href.startsWith(prefix); 33029} 33030function locationIsVisitable(location2, rootLocation) { 33031 return isPrefixedBy(location2, rootLocation) && !config.drive.unvisitableExtensions.has(getExtension(location2)); 33032} 33033function getLocationForLink(link) { 33034 return expandURL(link.getAttribute("href") || ""); 33035} 33036function getRequestURL(url) { 33037 const anchor = getAnchor(url); 33038 return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href; 33039} 33040function toCacheKey(url) { 33041 return getRequestURL(url); 33042} 33043function urlsAreEqual(left, right) { 33044 return expandURL(left).href == expandURL(right).href; 33045} 33046function getPathComponents(url) { 33047 return url.pathname.split("/").slice(1); 33048} 33049function getLastPathComponent(url) { 33050 return getPathComponents(url).slice(-1)[0]; 33051} 33052function addTrailingSlash(value) { 33053 return value.endsWith("/") ? value : value + "/"; 33054} 33055var FetchResponse = class { 33056 constructor(response) { 33057 this.response = response; 33058 } 33059 get succeeded() { 33060 return this.response.ok; 33061 } 33062 get failed() { 33063 return !this.succeeded; 33064 } 33065 get clientError() { 33066 return this.statusCode >= 400 && this.statusCode <= 499; 33067 } 33068 get serverError() { 33069 return this.statusCode >= 500 && this.statusCode <= 599; 33070 } 33071 get redirected() { 33072 return this.response.redirected; 33073 } 33074 get location() { 33075 return expandURL(this.response.url); 33076 } 33077 get isHTML() { 33078 return this.contentType && this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/); 33079 } 33080 get statusCode() { 33081 return this.response.status; 33082 } 33083 get contentType() { 33084 return this.header("Content-Type"); 33085 } 33086 get responseText() { 33087 return this.response.clone().text(); 33088 } 33089 get responseHTML() { 33090 if (this.isHTML) { 33091 return this.response.clone().text(); 33092 } else { 33093 return Promise.resolve(void 0); 33094 } 33095 } 33096 header(name) { 33097 return this.response.headers.get(name); 33098 } 33099}; 33100var LimitedSet = class extends Set { 33101 constructor(maxSize) { 33102 super(); 33103 this.maxSize = maxSize; 33104 } 33105 add(value) { 33106 if (this.size >= this.maxSize) { 33107 const iterator = this.values(); 33108 const oldestValue = iterator.next().value; 33109 this.delete(oldestValue); 33110 } 33111 super.add(value); 33112 } 33113}; 33114var recentRequests = new LimitedSet(20); 33115function fetchWithTurboHeaders(url, options = {}) { 33116 const modifiedHeaders = new Headers(options.headers || {}); 33117 const requestUID = uuid(); 33118 recentRequests.add(requestUID); 33119 modifiedHeaders.append("X-Turbo-Request-Id", requestUID); 33120 return window.fetch(url, { 33121 ...options, 33122 headers: modifiedHeaders 33123 }); 33124} 33125function fetchMethodFromString(method) { 33126 switch (method.toLowerCase()) { 33127 case "get": 33128 return FetchMethod.get; 33129 case "post": 33130 return FetchMethod.post; 33131 case "put": 33132 return FetchMethod.put; 33133 case "patch": 33134 return FetchMethod.patch; 33135 case "delete": 33136 return FetchMethod.delete; 33137 } 33138} 33139var FetchMethod = { 33140 get: "get", 33141 post: "post", 33142 put: "put", 33143 patch: "patch", 33144 delete: "delete" 33145}; 33146function fetchEnctypeFromString(encoding) { 33147 switch (encoding.toLowerCase()) { 33148 case FetchEnctype.multipart: 33149 return FetchEnctype.multipart; 33150 case FetchEnctype.plain: 33151 return FetchEnctype.plain; 33152 default: 33153 return FetchEnctype.urlEncoded; 33154 } 33155} 33156var FetchEnctype = { 33157 urlEncoded: "application/x-www-form-urlencoded", 33158 multipart: "multipart/form-data", 33159 plain: "text/plain" 33160}; 33161var FetchRequest = class { 33162 abortController = new AbortController(); 33163 #resolveRequestPromise = (_value) => { 33164 }; 33165 constructor(delegate, method, location2, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) { 33166 const [url, body] = buildResourceAndBody(expandURL(location2), method, requestBody, enctype); 33167 this.delegate = delegate; 33168 this.url = url; 33169 this.target = target; 33170 this.fetchOptions = { 33171 credentials: "same-origin", 33172 redirect: "follow", 33173 method: method.toUpperCase(), 33174 headers: { ...this.defaultHeaders }, 33175 body, 33176 signal: this.abortSignal, 33177 referrer: this.delegate.referrer?.href 33178 }; 33179 this.enctype = enctype; 33180 } 33181 get method() { 33182 return this.fetchOptions.method; 33183 } 33184 set method(value) { 33185 const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData(); 33186 const fetchMethod = fetchMethodFromString(value) || FetchMethod.get; 33187 this.url.search = ""; 33188 const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype); 33189 this.url = url; 33190 this.fetchOptions.body = body; 33191 this.fetchOptions.method = fetchMethod.toUpperCase(); 33192 } 33193 get headers() { 33194 return this.fetchOptions.headers; 33195 } 33196 set headers(value) { 33197 this.fetchOptions.headers = value; 33198 } 33199 get body() { 33200 if (this.isSafe) { 33201 return this.url.searchParams; 33202 } else { 33203 return this.fetchOptions.body; 33204 } 33205 } 33206 set body(value) { 33207 this.fetchOptions.body = value; 33208 } 33209 get location() { 33210 return this.url; 33211 } 33212 get params() { 33213 return this.url.searchParams; 33214 } 33215 get entries() { 33216 return this.body ? Array.from(this.body.entries()) : []; 33217 } 33218 cancel() { 33219 this.abortController.abort(); 33220 } 33221 async perform() { 33222 const { fetchOptions } = this; 33223 this.delegate.prepareRequest(this); 33224 const event = await this.#allowRequestToBeIntercepted(fetchOptions); 33225 try { 33226 this.delegate.requestStarted(this); 33227 if (event.detail.fetchRequest) { 33228 this.response = event.detail.fetchRequest.response; 33229 } else { 33230 this.response = fetchWithTurboHeaders(this.url.href, fetchOptions); 33231 } 33232 const response = await this.response; 33233 return await this.receive(response); 33234 } catch (error2) { 33235 if (error2.name !== "AbortError") { 33236 if (this.#willDelegateErrorHandling(error2)) { 33237 this.delegate.requestErrored(this, error2); 33238 } 33239 throw error2; 33240 } 33241 } finally { 33242 this.delegate.requestFinished(this); 33243 } 33244 } 33245 async receive(response) { 33246 const fetchResponse = new FetchResponse(response); 33247 const event = dispatch("turbo:before-fetch-response", { 33248 cancelable: true, 33249 detail: { fetchResponse }, 33250 target: this.target 33251 }); 33252 if (event.defaultPrevented) { 33253 this.delegate.requestPreventedHandlingResponse(this, fetchResponse); 33254 } else if (fetchResponse.succeeded) { 33255 this.delegate.requestSucceededWithResponse(this, fetchResponse); 33256 } else { 33257 this.delegate.requestFailedWithResponse(this, fetchResponse); 33258 } 33259 return fetchResponse; 33260 } 33261 get defaultHeaders() { 33262 return { 33263 Accept: "text/html, application/xhtml+xml" 33264 }; 33265 } 33266 get isSafe() { 33267 return isSafe(this.method); 33268 } 33269 get abortSignal() { 33270 return this.abortController.signal; 33271 } 33272 acceptResponseType(mimeType) { 33273 this.headers["Accept"] = [mimeType, this.headers["Accept"]].join(", "); 33274 } 33275 async #allowRequestToBeIntercepted(fetchOptions) { 33276 const requestInterception = new Promise((resolve) => this.#resolveRequestPromise = resolve); 33277 const event = dispatch("turbo:before-fetch-request", { 33278 cancelable: true, 33279 detail: { 33280 fetchOptions, 33281 url: this.url, 33282 resume: this.#resolveRequestPromise 33283 }, 33284 target: this.target 33285 }); 33286 this.url = event.detail.url; 33287 if (event.defaultPrevented) await requestInterception; 33288 return event; 33289 } 33290 #willDelegateErrorHandling(error2) { 33291 const event = dispatch("turbo:fetch-request-error", { 33292 target: this.target, 33293 cancelable: true, 33294 detail: { request: this, error: error2 } 33295 }); 33296 return !event.defaultPrevented; 33297 } 33298}; 33299function isSafe(fetchMethod) { 33300 return fetchMethodFromString(fetchMethod) == FetchMethod.get; 33301} 33302function buildResourceAndBody(resource, method, requestBody, enctype) { 33303 const searchParams = Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams; 33304 if (isSafe(method)) { 33305 return [mergeIntoURLSearchParams(resource, searchParams), null]; 33306 } else if (enctype == FetchEnctype.urlEncoded) { 33307 return [resource, searchParams]; 33308 } else { 33309 return [resource, requestBody]; 33310 } 33311} 33312function entriesExcludingFiles(requestBody) { 33313 const entries = []; 33314 for (const [name, value] of requestBody) { 33315 if (value instanceof File) continue; 33316 else entries.push([name, value]); 33317 } 33318 return entries; 33319} 33320function mergeIntoURLSearchParams(url, requestBody) { 33321 const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody)); 33322 url.search = searchParams.toString(); 33323 return url; 33324} 33325var AppearanceObserver = class { 33326 started = false; 33327 constructor(delegate, element) { 33328 this.delegate = delegate; 33329 this.element = element; 33330 this.intersectionObserver = new IntersectionObserver(this.intersect); 33331 } 33332 start() { 33333 if (!this.started) { 33334 this.started = true; 33335 this.intersectionObserver.observe(this.element); 33336 } 33337 } 33338 stop() { 33339 if (this.started) { 33340 this.started = false; 33341 this.intersectionObserver.unobserve(this.element); 33342 } 33343 } 33344 intersect = (entries) => { 33345 const lastEntry = entries.slice(-1)[0]; 33346 if (lastEntry?.isIntersecting) { 33347 this.delegate.elementAppearedInViewport(this.element); 33348 } 33349 }; 33350}; 33351var StreamMessage = class { 33352 static contentType = "text/vnd.turbo-stream.html"; 33353 static wrap(message) { 33354 if (typeof message == "string") { 33355 return new this(createDocumentFragment(message)); 33356 } else { 33357 return message; 33358 } 33359 } 33360 constructor(fragment) { 33361 this.fragment = importStreamElements(fragment); 33362 } 33363}; 33364function importStreamElements(fragment) { 33365 for (const element of fragment.querySelectorAll("turbo-stream")) { 33366 const streamElement = document.importNode(element, true); 33367 for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll("script")) { 33368 inertScriptElement.replaceWith(activateScriptElement(inertScriptElement)); 33369 } 33370 element.replaceWith(streamElement); 33371 } 33372 return fragment; 33373} 33374var identity = (key) => key; 33375var LRUCache = class { 33376 keys = []; 33377 entries = {}; 33378 #toCacheKey; 33379 constructor(size, toCacheKey2 = identity) { 33380 this.size = size; 33381 this.#toCacheKey = toCacheKey2; 33382 } 33383 has(key) { 33384 return this.#toCacheKey(key) in this.entries; 33385 } 33386 get(key) { 33387 if (this.has(key)) { 33388 const entry = this.read(key); 33389 this.touch(key); 33390 return entry; 33391 } 33392 } 33393 put(key, entry) { 33394 this.write(key, entry); 33395 this.touch(key); 33396 return entry; 33397 } 33398 clear() { 33399 for (const key of Object.keys(this.entries)) { 33400 this.evict(key); 33401 } 33402 } 33403 // Private 33404 read(key) { 33405 return this.entries[this.#toCacheKey(key)]; 33406 } 33407 write(key, entry) { 33408 this.entries[this.#toCacheKey(key)] = entry; 33409 } 33410 touch(key) { 33411 key = this.#toCacheKey(key); 33412 const index = this.keys.indexOf(key); 33413 if (index > -1) this.keys.splice(index, 1); 33414 this.keys.unshift(key); 33415 this.trim(); 33416 } 33417 trim() { 33418 for (const key of this.keys.splice(this.size)) { 33419 this.evict(key); 33420 } 33421 } 33422 evict(key) { 33423 delete this.entries[key]; 33424 } 33425}; 33426var PREFETCH_DELAY = 100; 33427var PrefetchCache = class extends LRUCache { 33428 #prefetchTimeout = null; 33429 #maxAges = {}; 33430 constructor(size = 1, prefetchDelay = PREFETCH_DELAY) { 33431 super(size, toCacheKey); 33432 this.prefetchDelay = prefetchDelay; 33433 } 33434 putLater(url, request2, ttl) { 33435 this.#prefetchTimeout = setTimeout(() => { 33436 request2.perform(); 33437 this.put(url, request2, ttl); 33438 this.#prefetchTimeout = null; 33439 }, this.prefetchDelay); 33440 } 33441 put(url, request2, ttl = cacheTtl) { 33442 super.put(url, request2); 33443 this.#maxAges[toCacheKey(url)] = new Date((/* @__PURE__ */ new Date()).getTime() + ttl); 33444 } 33445 clear() { 33446 super.clear(); 33447 if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout); 33448 } 33449 evict(key) { 33450 super.evict(key); 33451 delete this.#maxAges[key]; 33452 } 33453 has(key) { 33454 if (super.has(key)) { 33455 const maxAge = this.#maxAges[toCacheKey(key)]; 33456 return maxAge && maxAge > Date.now(); 33457 } else { 33458 return false; 33459 } 33460 } 33461}; 33462var cacheTtl = 10 * 1e3; 33463var prefetchCache = new PrefetchCache(); 33464var FormSubmissionState = { 33465 initialized: "initialized", 33466 requesting: "requesting", 33467 waiting: "waiting", 33468 receiving: "receiving", 33469 stopping: "stopping", 33470 stopped: "stopped" 33471}; 33472var FormSubmission = class _FormSubmission { 33473 state = FormSubmissionState.initialized; 33474 static confirmMethod(message) { 33475 return Promise.resolve(confirm(message)); 33476 } 33477 constructor(delegate, formElement, submitter2, mustRedirect = false) { 33478 const method = getMethod(formElement, submitter2); 33479 const action = getAction(getFormAction(formElement, submitter2), method); 33480 const body = buildFormData(formElement, submitter2); 33481 const enctype = getEnctype(formElement, submitter2); 33482 this.delegate = delegate; 33483 this.formElement = formElement; 33484 this.submitter = submitter2; 33485 this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype); 33486 this.mustRedirect = mustRedirect; 33487 } 33488 get method() { 33489 return this.fetchRequest.method; 33490 } 33491 set method(value) { 33492 this.fetchRequest.method = value; 33493 } 33494 get action() { 33495 return this.fetchRequest.url.toString(); 33496 } 33497 set action(value) { 33498 this.fetchRequest.url = expandURL(value); 33499 } 33500 get body() { 33501 return this.fetchRequest.body; 33502 } 33503 get enctype() { 33504 return this.fetchRequest.enctype; 33505 } 33506 get isSafe() { 33507 return this.fetchRequest.isSafe; 33508 } 33509 get location() { 33510 return this.fetchRequest.url; 33511 } 33512 // The submission process 33513 async start() { 33514 const { initialized, requesting } = FormSubmissionState; 33515 const confirmationMessage = getAttribute("data-turbo-confirm", this.submitter, this.formElement); 33516 if (typeof confirmationMessage === "string") { 33517 const confirmMethod = typeof config.forms.confirm === "function" ? config.forms.confirm : _FormSubmission.confirmMethod; 33518 const answer = await confirmMethod(confirmationMessage, this.formElement, this.submitter); 33519 if (!answer) { 33520 return; 33521 } 33522 } 33523 if (this.state == initialized) { 33524 this.state = requesting; 33525 return this.fetchRequest.perform(); 33526 } 33527 } 33528 stop() { 33529 const { stopping, stopped } = FormSubmissionState; 33530 if (this.state != stopping && this.state != stopped) { 33531 this.state = stopping; 33532 this.fetchRequest.cancel(); 33533 return true; 33534 } 33535 } 33536 // Fetch request delegate 33537 prepareRequest(request2) { 33538 if (!request2.isSafe) { 33539 const token = getCookieValue(getMetaContent("csrf-param")) || getMetaContent("csrf-token"); 33540 if (token) { 33541 request2.headers["X-CSRF-Token"] = token; 33542 } 33543 } 33544 if (this.requestAcceptsTurboStreamResponse(request2)) { 33545 request2.acceptResponseType(StreamMessage.contentType); 33546 } 33547 } 33548 requestStarted(_request) { 33549 this.state = FormSubmissionState.waiting; 33550 if (this.submitter) config.forms.submitter.beforeSubmit(this.submitter); 33551 this.setSubmitsWith(); 33552 markAsBusy(this.formElement); 33553 dispatch("turbo:submit-start", { 33554 target: this.formElement, 33555 detail: { formSubmission: this } 33556 }); 33557 this.delegate.formSubmissionStarted(this); 33558 } 33559 requestPreventedHandlingResponse(request2, response) { 33560 prefetchCache.clear(); 33561 this.result = { success: response.succeeded, fetchResponse: response }; 33562 } 33563 requestSucceededWithResponse(request2, response) { 33564 if (response.clientError || response.serverError) { 33565 this.delegate.formSubmissionFailedWithResponse(this, response); 33566 return; 33567 } 33568 prefetchCache.clear(); 33569 if (this.requestMustRedirect(request2) && responseSucceededWithoutRedirect(response)) { 33570 const error2 = new Error("Form responses must redirect to another location"); 33571 this.delegate.formSubmissionErrored(this, error2); 33572 } else { 33573 this.state = FormSubmissionState.receiving; 33574 this.result = { success: true, fetchResponse: response }; 33575 this.delegate.formSubmissionSucceededWithResponse(this, response); 33576 } 33577 } 33578 requestFailedWithResponse(request2, response) { 33579 this.result = { success: false, fetchResponse: response }; 33580 this.delegate.formSubmissionFailedWithResponse(this, response); 33581 } 33582 requestErrored(request2, error2) { 33583 this.result = { success: false, error: error2 }; 33584 this.delegate.formSubmissionErrored(this, error2); 33585 } 33586 requestFinished(_request) { 33587 this.state = FormSubmissionState.stopped; 33588 if (this.submitter) config.forms.submitter.afterSubmit(this.submitter); 33589 this.resetSubmitterText(); 33590 clearBusyState(this.formElement); 33591 dispatch("turbo:submit-end", { 33592 target: this.formElement, 33593 detail: { formSubmission: this, ...this.result } 33594 }); 33595 this.delegate.formSubmissionFinished(this); 33596 } 33597 // Private 33598 setSubmitsWith() { 33599 if (!this.submitter || !this.submitsWith) return; 33600 if (this.submitter.matches("button")) { 33601 this.originalSubmitText = this.submitter.innerHTML; 33602 this.submitter.innerHTML = this.submitsWith; 33603 } else if (this.submitter.matches("input")) { 33604 const input = this.submitter; 33605 this.originalSubmitText = input.value; 33606 input.value = this.submitsWith; 33607 } 33608 } 33609 resetSubmitterText() { 33610 if (!this.submitter || !this.originalSubmitText) return; 33611 if (this.submitter.matches("button")) { 33612 this.submitter.innerHTML = this.originalSubmitText; 33613 } else if (this.submitter.matches("input")) { 33614 const input = this.submitter; 33615 input.value = this.originalSubmitText; 33616 } 33617 } 33618 requestMustRedirect(request2) { 33619 return !request2.isSafe && this.mustRedirect; 33620 } 33621 requestAcceptsTurboStreamResponse(request2) { 33622 return !request2.isSafe || hasAttribute("data-turbo-stream", this.submitter, this.formElement); 33623 } 33624 get submitsWith() { 33625 return this.submitter?.getAttribute("data-turbo-submits-with"); 33626 } 33627}; 33628function buildFormData(formElement, submitter2) { 33629 const formData = new FormData(formElement); 33630 const name = submitter2?.getAttribute("name"); 33631 const value = submitter2?.getAttribute("value"); 33632 if (name) { 33633 formData.append(name, value || ""); 33634 } 33635 return formData; 33636} 33637function getCookieValue(cookieName) { 33638 if (cookieName != null) { 33639 const cookies = document.cookie ? document.cookie.split("; ") : []; 33640 const cookie = cookies.find((cookie2) => cookie2.startsWith(cookieName)); 33641 if (cookie) { 33642 const value = cookie.split("=").slice(1).join("="); 33643 return value ? decodeURIComponent(value) : void 0; 33644 } 33645 } 33646} 33647function responseSucceededWithoutRedirect(response) { 33648 return response.statusCode == 200 && !response.redirected; 33649} 33650function getFormAction(formElement, submitter2) { 33651 const formElementAction = typeof formElement.action === "string" ? formElement.action : null; 33652 if (submitter2?.hasAttribute("formaction")) { 33653 return submitter2.getAttribute("formaction") || ""; 33654 } else { 33655 return formElement.getAttribute("action") || formElementAction || ""; 33656 } 33657} 33658function getAction(formAction, fetchMethod) { 33659 const action = expandURL(formAction); 33660 if (isSafe(fetchMethod)) { 33661 action.search = ""; 33662 } 33663 return action; 33664} 33665function getMethod(formElement, submitter2) { 33666 const method = submitter2?.getAttribute("formmethod") || formElement.getAttribute("method") || ""; 33667 return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get; 33668} 33669function getEnctype(formElement, submitter2) { 33670 return fetchEnctypeFromString(submitter2?.getAttribute("formenctype") || formElement.enctype); 33671} 33672var Snapshot = class { 33673 constructor(element) { 33674 this.element = element; 33675 } 33676 get activeElement() { 33677 return this.element.ownerDocument.activeElement; 33678 } 33679 get children() { 33680 return [...this.element.children]; 33681 } 33682 hasAnchor(anchor) { 33683 return this.getElementForAnchor(anchor) != null; 33684 } 33685 getElementForAnchor(anchor) { 33686 return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null; 33687 } 33688 get isConnected() { 33689 return this.element.isConnected; 33690 } 33691 get firstAutofocusableElement() { 33692 return queryAutofocusableElement(this.element); 33693 } 33694 get permanentElements() { 33695 return queryPermanentElementsAll(this.element); 33696 } 33697 getPermanentElementById(id) { 33698 return getPermanentElementById(this.element, id); 33699 } 33700 getPermanentElementMapForSnapshot(snapshot) { 33701 const permanentElementMap = {}; 33702 for (const currentPermanentElement of this.permanentElements) { 33703 const { id } = currentPermanentElement; 33704 const newPermanentElement = snapshot.getPermanentElementById(id); 33705 if (newPermanentElement) { 33706 permanentElementMap[id] = [currentPermanentElement, newPermanentElement]; 33707 } 33708 } 33709 return permanentElementMap; 33710 } 33711}; 33712function getPermanentElementById(node, id) { 33713 return node.querySelector(`#${id}[data-turbo-permanent]`); 33714} 33715function queryPermanentElementsAll(node) { 33716 return node.querySelectorAll("[id][data-turbo-permanent]"); 33717} 33718var FormSubmitObserver = class { 33719 started = false; 33720 constructor(delegate, eventTarget) { 33721 this.delegate = delegate; 33722 this.eventTarget = eventTarget; 33723 } 33724 start() { 33725 if (!this.started) { 33726 this.eventTarget.addEventListener("submit", this.submitCaptured, true); 33727 this.started = true; 33728 } 33729 } 33730 stop() { 33731 if (this.started) { 33732 this.eventTarget.removeEventListener("submit", this.submitCaptured, true); 33733 this.started = false; 33734 } 33735 } 33736 submitCaptured = () => { 33737 this.eventTarget.removeEventListener("submit", this.submitBubbled, false); 33738 this.eventTarget.addEventListener("submit", this.submitBubbled, false); 33739 }; 33740 submitBubbled = (event) => { 33741 if (!event.defaultPrevented) { 33742 const form = event.target instanceof HTMLFormElement ? event.target : void 0; 33743 const submitter2 = event.submitter || void 0; 33744 if (form && submissionDoesNotDismissDialog(form, submitter2) && submissionDoesNotTargetIFrame(form, submitter2) && this.delegate.willSubmitForm(form, submitter2)) { 33745 event.preventDefault(); 33746 event.stopImmediatePropagation(); 33747 this.delegate.formSubmitted(form, submitter2); 33748 } 33749 } 33750 }; 33751}; 33752function submissionDoesNotDismissDialog(form, submitter2) { 33753 const method = submitter2?.getAttribute("formmethod") || form.getAttribute("method"); 33754 return method != "dialog"; 33755} 33756function submissionDoesNotTargetIFrame(form, submitter2) { 33757 const target = submitter2?.getAttribute("formtarget") || form.getAttribute("target"); 33758 return doesNotTargetIFrame(target); 33759} 33760var View = class { 33761 #resolveRenderPromise = (_value) => { 33762 }; 33763 #resolveInterceptionPromise = (_value) => { 33764 }; 33765 constructor(delegate, element) { 33766 this.delegate = delegate; 33767 this.element = element; 33768 } 33769 // Scrolling 33770 scrollToAnchor(anchor) { 33771 const element = this.snapshot.getElementForAnchor(anchor); 33772 if (element) { 33773 this.focusElement(element); 33774 this.scrollToElement(element); 33775 } else { 33776 this.scrollToPosition({ x: 0, y: 0 }); 33777 } 33778 } 33779 scrollToAnchorFromLocation(location2) { 33780 this.scrollToAnchor(getAnchor(location2)); 33781 } 33782 scrollToElement(element) { 33783 element.scrollIntoView(); 33784 } 33785 focusElement(element) { 33786 if (element instanceof HTMLElement) { 33787 if (element.hasAttribute("tabindex")) { 33788 element.focus(); 33789 } else { 33790 element.setAttribute("tabindex", "-1"); 33791 element.focus(); 33792 element.removeAttribute("tabindex"); 33793 } 33794 } 33795 } 33796 scrollToPosition({ x: x3, y: y3 }) { 33797 this.scrollRoot.scrollTo(x3, y3); 33798 } 33799 scrollToTop() { 33800 this.scrollToPosition({ x: 0, y: 0 }); 33801 } 33802 get scrollRoot() { 33803 return window; 33804 } 33805 // Rendering 33806 async render(renderer) { 33807 const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer; 33808 const shouldInvalidate = willRender; 33809 if (shouldRender) { 33810 try { 33811 this.renderPromise = new Promise((resolve) => this.#resolveRenderPromise = resolve); 33812 this.renderer = renderer; 33813 await this.prepareToRenderSnapshot(renderer); 33814 const renderInterception = new Promise((resolve) => this.#resolveInterceptionPromise = resolve); 33815 const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod }; 33816 const immediateRender = this.delegate.allowsImmediateRender(snapshot, options); 33817 if (!immediateRender) await renderInterception; 33818 await this.renderSnapshot(renderer); 33819 this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod); 33820 this.delegate.preloadOnLoadLinksForView(this.element); 33821 this.finishRenderingSnapshot(renderer); 33822 } finally { 33823 delete this.renderer; 33824 this.#resolveRenderPromise(void 0); 33825 delete this.renderPromise; 33826 } 33827 } else if (shouldInvalidate) { 33828 this.invalidate(renderer.reloadReason); 33829 } 33830 } 33831 invalidate(reason) { 33832 this.delegate.viewInvalidated(reason); 33833 } 33834 async prepareToRenderSnapshot(renderer) { 33835 this.markAsPreview(renderer.isPreview); 33836 await renderer.prepareToRender(); 33837 } 33838 markAsPreview(isPreview) { 33839 if (isPreview) { 33840 this.element.setAttribute("data-turbo-preview", ""); 33841 } else { 33842 this.element.removeAttribute("data-turbo-preview"); 33843 } 33844 } 33845 markVisitDirection(direction) { 33846 this.element.setAttribute("data-turbo-visit-direction", direction); 33847 } 33848 unmarkVisitDirection() { 33849 this.element.removeAttribute("data-turbo-visit-direction"); 33850 } 33851 async renderSnapshot(renderer) { 33852 await renderer.render(); 33853 } 33854 finishRenderingSnapshot(renderer) { 33855 renderer.finishRendering(); 33856 } 33857}; 33858var FrameView = class extends View { 33859 missing() { 33860 this.element.innerHTML = `<strong class="turbo-frame-error">Content missing</strong>`; 33861 } 33862 get snapshot() { 33863 return new Snapshot(this.element); 33864 } 33865}; 33866var LinkInterceptor = class { 33867 constructor(delegate, element) { 33868 this.delegate = delegate; 33869 this.element = element; 33870 } 33871 start() { 33872 this.element.addEventListener("click", this.clickBubbled); 33873 document.addEventListener("turbo:click", this.linkClicked); 33874 document.addEventListener("turbo:before-visit", this.willVisit); 33875 } 33876 stop() { 33877 this.element.removeEventListener("click", this.clickBubbled); 33878 document.removeEventListener("turbo:click", this.linkClicked); 33879 document.removeEventListener("turbo:before-visit", this.willVisit); 33880 } 33881 clickBubbled = (event) => { 33882 if (this.clickEventIsSignificant(event)) { 33883 this.clickEvent = event; 33884 } else { 33885 delete this.clickEvent; 33886 } 33887 }; 33888 linkClicked = (event) => { 33889 if (this.clickEvent && this.clickEventIsSignificant(event)) { 33890 if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) { 33891 this.clickEvent.preventDefault(); 33892 event.preventDefault(); 33893 this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent); 33894 } 33895 } 33896 delete this.clickEvent; 33897 }; 33898 willVisit = (_event) => { 33899 delete this.clickEvent; 33900 }; 33901 clickEventIsSignificant(event) { 33902 const target = event.composed ? event.target?.parentElement : event.target; 33903 const element = findLinkFromClickTarget(target) || target; 33904 return element instanceof Element && element.closest("turbo-frame, html") == this.element; 33905 } 33906}; 33907var LinkClickObserver = class { 33908 started = false; 33909 constructor(delegate, eventTarget) { 33910 this.delegate = delegate; 33911 this.eventTarget = eventTarget; 33912 } 33913 start() { 33914 if (!this.started) { 33915 this.eventTarget.addEventListener("click", this.clickCaptured, true); 33916 this.started = true; 33917 } 33918 } 33919 stop() { 33920 if (this.started) { 33921 this.eventTarget.removeEventListener("click", this.clickCaptured, true); 33922 this.started = false; 33923 } 33924 } 33925 clickCaptured = () => { 33926 this.eventTarget.removeEventListener("click", this.clickBubbled, false); 33927 this.eventTarget.addEventListener("click", this.clickBubbled, false); 33928 }; 33929 clickBubbled = (event) => { 33930 if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) { 33931 const target = event.composedPath && event.composedPath()[0] || event.target; 33932 const link = findLinkFromClickTarget(target); 33933 if (link && doesNotTargetIFrame(link.target)) { 33934 const location2 = getLocationForLink(link); 33935 if (this.delegate.willFollowLinkToLocation(link, location2, event)) { 33936 event.preventDefault(); 33937 this.delegate.followedLinkToLocation(link, location2); 33938 } 33939 } 33940 } 33941 }; 33942 clickEventIsSignificant(event) { 33943 return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey); 33944 } 33945}; 33946var FormLinkClickObserver = class { 33947 constructor(delegate, element) { 33948 this.delegate = delegate; 33949 this.linkInterceptor = new LinkClickObserver(this, element); 33950 } 33951 start() { 33952 this.linkInterceptor.start(); 33953 } 33954 stop() { 33955 this.linkInterceptor.stop(); 33956 } 33957 // Link hover observer delegate 33958 canPrefetchRequestToLocation(link, location2) { 33959 return false; 33960 } 33961 prefetchAndCacheRequestToLocation(link, location2) { 33962 return; 33963 } 33964 // Link click observer delegate 33965 willFollowLinkToLocation(link, location2, originalEvent) { 33966 return this.delegate.willSubmitFormLinkToLocation(link, location2, originalEvent) && (link.hasAttribute("data-turbo-method") || link.hasAttribute("data-turbo-stream")); 33967 } 33968 followedLinkToLocation(link, location2) { 33969 const form = document.createElement("form"); 33970 const type = "hidden"; 33971 for (const [name, value] of location2.searchParams) { 33972 form.append(Object.assign(document.createElement("input"), { type, name, value })); 33973 } 33974 const action = Object.assign(location2, { search: "" }); 33975 form.setAttribute("data-turbo", "true"); 33976 form.setAttribute("action", action.href); 33977 form.setAttribute("hidden", ""); 33978 const method = link.getAttribute("data-turbo-method"); 33979 if (method) form.setAttribute("method", method); 33980 const turboFrame = link.getAttribute("data-turbo-frame"); 33981 if (turboFrame) form.setAttribute("data-turbo-frame", turboFrame); 33982 const turboAction = getVisitAction(link); 33983 if (turboAction) form.setAttribute("data-turbo-action", turboAction); 33984 const turboConfirm = link.getAttribute("data-turbo-confirm"); 33985 if (turboConfirm) form.setAttribute("data-turbo-confirm", turboConfirm); 33986 const turboStream = link.hasAttribute("data-turbo-stream"); 33987 if (turboStream) form.setAttribute("data-turbo-stream", ""); 33988 this.delegate.submittedFormLinkToLocation(link, location2, form); 33989 document.body.appendChild(form); 33990 form.addEventListener("turbo:submit-end", () => form.remove(), { once: true }); 33991 requestAnimationFrame(() => form.requestSubmit()); 33992 } 33993}; 33994var Bardo = class { 33995 static async preservingPermanentElements(delegate, permanentElementMap, callback) { 33996 const bardo = new this(delegate, permanentElementMap); 33997 bardo.enter(); 33998 await callback(); 33999 bardo.leave(); 34000 } 34001 constructor(delegate, permanentElementMap) { 34002 this.delegate = delegate; 34003 this.permanentElementMap = permanentElementMap; 34004 } 34005 enter() { 34006 for (const id in this.permanentElementMap) { 34007 const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id]; 34008 this.delegate.enteringBardo(currentPermanentElement, newPermanentElement); 34009 this.replaceNewPermanentElementWithPlaceholder(newPermanentElement); 34010 } 34011 } 34012 leave() { 34013 for (const id in this.permanentElementMap) { 34014 const [currentPermanentElement] = this.permanentElementMap[id]; 34015 this.replaceCurrentPermanentElementWithClone(currentPermanentElement); 34016 this.replacePlaceholderWithPermanentElement(currentPermanentElement); 34017 this.delegate.leavingBardo(currentPermanentElement); 34018 } 34019 } 34020 replaceNewPermanentElementWithPlaceholder(permanentElement) { 34021 const placeholder = createPlaceholderForPermanentElement(permanentElement); 34022 permanentElement.replaceWith(placeholder); 34023 } 34024 replaceCurrentPermanentElementWithClone(permanentElement) { 34025 const clone = permanentElement.cloneNode(true); 34026 permanentElement.replaceWith(clone); 34027 } 34028 replacePlaceholderWithPermanentElement(permanentElement) { 34029 const placeholder = this.getPlaceholderById(permanentElement.id); 34030 placeholder?.replaceWith(permanentElement); 34031 } 34032 getPlaceholderById(id) { 34033 return this.placeholders.find((element) => element.content == id); 34034 } 34035 get placeholders() { 34036 return [...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]; 34037 } 34038}; 34039function createPlaceholderForPermanentElement(permanentElement) { 34040 const element = document.createElement("meta"); 34041 element.setAttribute("name", "turbo-permanent-placeholder"); 34042 element.setAttribute("content", permanentElement.id); 34043 return element; 34044} 34045var Renderer = class { 34046 #activeElement = null; 34047 static renderElement(currentElement, newElement) { 34048 } 34049 constructor(currentSnapshot, newSnapshot, isPreview, willRender = true) { 34050 this.currentSnapshot = currentSnapshot; 34051 this.newSnapshot = newSnapshot; 34052 this.isPreview = isPreview; 34053 this.willRender = willRender; 34054 this.renderElement = this.constructor.renderElement; 34055 this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject }); 34056 } 34057 get shouldRender() { 34058 return true; 34059 } 34060 get shouldAutofocus() { 34061 return true; 34062 } 34063 get reloadReason() { 34064 return; 34065 } 34066 prepareToRender() { 34067 return; 34068 } 34069 render() { 34070 } 34071 finishRendering() { 34072 if (this.resolvingFunctions) { 34073 this.resolvingFunctions.resolve(); 34074 delete this.resolvingFunctions; 34075 } 34076 } 34077 async preservingPermanentElements(callback) { 34078 await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback); 34079 } 34080 focusFirstAutofocusableElement() { 34081 if (this.shouldAutofocus) { 34082 const element = this.connectedSnapshot.firstAutofocusableElement; 34083 if (element) { 34084 element.focus(); 34085 } 34086 } 34087 } 34088 // Bardo delegate 34089 enteringBardo(currentPermanentElement) { 34090 if (this.#activeElement) return; 34091 if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) { 34092 this.#activeElement = this.currentSnapshot.activeElement; 34093 } 34094 } 34095 leavingBardo(currentPermanentElement) { 34096 if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) { 34097 this.#activeElement.focus(); 34098 this.#activeElement = null; 34099 } 34100 } 34101 get connectedSnapshot() { 34102 return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot; 34103 } 34104 get currentElement() { 34105 return this.currentSnapshot.element; 34106 } 34107 get newElement() { 34108 return this.newSnapshot.element; 34109 } 34110 get permanentElementMap() { 34111 return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot); 34112 } 34113 get renderMethod() { 34114 return "replace"; 34115 } 34116}; 34117var FrameRenderer = class extends Renderer { 34118 static renderElement(currentElement, newElement) { 34119 const destinationRange = document.createRange(); 34120 destinationRange.selectNodeContents(currentElement); 34121 destinationRange.deleteContents(); 34122 const frameElement = newElement; 34123 const sourceRange = frameElement.ownerDocument?.createRange(); 34124 if (sourceRange) { 34125 sourceRange.selectNodeContents(frameElement); 34126 currentElement.appendChild(sourceRange.extractContents()); 34127 } 34128 } 34129 constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) { 34130 super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender); 34131 this.delegate = delegate; 34132 } 34133 get shouldRender() { 34134 return true; 34135 } 34136 async render() { 34137 await nextRepaint(); 34138 this.preservingPermanentElements(() => { 34139 this.loadFrameElement(); 34140 }); 34141 this.scrollFrameIntoView(); 34142 await nextRepaint(); 34143 this.focusFirstAutofocusableElement(); 34144 await nextRepaint(); 34145 this.activateScriptElements(); 34146 } 34147 loadFrameElement() { 34148 this.delegate.willRenderFrame(this.currentElement, this.newElement); 34149 this.renderElement(this.currentElement, this.newElement); 34150 } 34151 scrollFrameIntoView() { 34152 if (this.currentElement.autoscroll || this.newElement.autoscroll) { 34153 const element = this.currentElement.firstElementChild; 34154 const block = readScrollLogicalPosition(this.currentElement.getAttribute("data-autoscroll-block"), "end"); 34155 const behavior = readScrollBehavior(this.currentElement.getAttribute("data-autoscroll-behavior"), "auto"); 34156 if (element) { 34157 element.scrollIntoView({ block, behavior }); 34158 return true; 34159 } 34160 } 34161 return false; 34162 } 34163 activateScriptElements() { 34164 for (const inertScriptElement of this.newScriptElements) { 34165 const activatedScriptElement = activateScriptElement(inertScriptElement); 34166 inertScriptElement.replaceWith(activatedScriptElement); 34167 } 34168 } 34169 get newScriptElements() { 34170 return this.currentElement.querySelectorAll("script"); 34171 } 34172}; 34173function readScrollLogicalPosition(value, defaultValue) { 34174 if (value == "end" || value == "start" || value == "center" || value == "nearest") { 34175 return value; 34176 } else { 34177 return defaultValue; 34178 } 34179} 34180function readScrollBehavior(value, defaultValue) { 34181 if (value == "auto" || value == "smooth") { 34182 return value; 34183 } else { 34184 return defaultValue; 34185 } 34186} 34187var Idiomorph = (function() { 34188 const noOp = () => { 34189 }; 34190 const defaults = { 34191 morphStyle: "outerHTML", 34192 callbacks: { 34193 beforeNodeAdded: noOp, 34194 afterNodeAdded: noOp, 34195 beforeNodeMorphed: noOp, 34196 afterNodeMorphed: noOp, 34197 beforeNodeRemoved: noOp, 34198 afterNodeRemoved: noOp, 34199 beforeAttributeUpdated: noOp 34200 }, 34201 head: { 34202 style: "merge", 34203 shouldPreserve: (elt) => elt.getAttribute("im-preserve") === "true", 34204 shouldReAppend: (elt) => elt.getAttribute("im-re-append") === "true", 34205 shouldRemove: noOp, 34206 afterHeadMorphed: noOp 34207 }, 34208 restoreFocus: true 34209 }; 34210 function morph(oldNode, newContent, config2 = {}) { 34211 oldNode = normalizeElement(oldNode); 34212 const newNode = normalizeParent(newContent); 34213 const ctx = createMorphContext(oldNode, newNode, config2); 34214 const morphedNodes = saveAndRestoreFocus(ctx, () => { 34215 return withHeadBlocking( 34216 ctx, 34217 oldNode, 34218 newNode, 34219 /** @param {MorphContext} ctx */ 34220 (ctx2) => { 34221 if (ctx2.morphStyle === "innerHTML") { 34222 morphChildren2(ctx2, oldNode, newNode); 34223 return Array.from(oldNode.childNodes); 34224 } else { 34225 return morphOuterHTML(ctx2, oldNode, newNode); 34226 } 34227 } 34228 ); 34229 }); 34230 ctx.pantry.remove(); 34231 return morphedNodes; 34232 } 34233 function morphOuterHTML(ctx, oldNode, newNode) { 34234 const oldParent = normalizeParent(oldNode); 34235 morphChildren2( 34236 ctx, 34237 oldParent, 34238 newNode, 34239 // these two optional params are the secret sauce 34240 oldNode, 34241 // start point for iteration 34242 oldNode.nextSibling 34243 // end point for iteration 34244 ); 34245 return Array.from(oldParent.childNodes); 34246 } 34247 function saveAndRestoreFocus(ctx, fn3) { 34248 if (!ctx.config.restoreFocus) return fn3(); 34249 let activeElement = ( 34250 /** @type {HTMLInputElement|HTMLTextAreaElement|null} */ 34251 document.activeElement 34252 ); 34253 if (!(activeElement instanceof HTMLInputElement || activeElement instanceof HTMLTextAreaElement)) { 34254 return fn3(); 34255 } 34256 const { id: activeElementId, selectionStart, selectionEnd } = activeElement; 34257 const results = fn3(); 34258 if (activeElementId && activeElementId !== document.activeElement?.getAttribute("id")) { 34259 activeElement = ctx.target.querySelector(`[id="${activeElementId}"]`); 34260 activeElement?.focus(); 34261 } 34262 if (activeElement && !activeElement.selectionEnd && selectionEnd) { 34263 activeElement.setSelectionRange(selectionStart, selectionEnd); 34264 } 34265 return results; 34266 } 34267 const morphChildren2 = /* @__PURE__ */ (function() { 34268 function morphChildren3(ctx, oldParent, newParent, insertionPoint = null, endPoint = null) { 34269 if (oldParent instanceof HTMLTemplateElement && newParent instanceof HTMLTemplateElement) { 34270 oldParent = oldParent.content; 34271 newParent = newParent.content; 34272 } 34273 insertionPoint ||= oldParent.firstChild; 34274 for (const newChild of newParent.childNodes) { 34275 if (insertionPoint && insertionPoint != endPoint) { 34276 const bestMatch = findBestMatch( 34277 ctx, 34278 newChild, 34279 insertionPoint, 34280 endPoint 34281 ); 34282 if (bestMatch) { 34283 if (bestMatch !== insertionPoint) { 34284 removeNodesBetween(ctx, insertionPoint, bestMatch); 34285 } 34286 morphNode(bestMatch, newChild, ctx); 34287 insertionPoint = bestMatch.nextSibling; 34288 continue; 34289 } 34290 } 34291 if (newChild instanceof Element) { 34292 const newChildId = ( 34293 /** @type {String} */ 34294 newChild.getAttribute("id") 34295 ); 34296 if (ctx.persistentIds.has(newChildId)) { 34297 const movedChild = moveBeforeById( 34298 oldParent, 34299 newChildId, 34300 insertionPoint, 34301 ctx 34302 ); 34303 morphNode(movedChild, newChild, ctx); 34304 insertionPoint = movedChild.nextSibling; 34305 continue; 34306 } 34307 } 34308 const insertedNode = createNode( 34309 oldParent, 34310 newChild, 34311 insertionPoint, 34312 ctx 34313 ); 34314 if (insertedNode) { 34315 insertionPoint = insertedNode.nextSibling; 34316 } 34317 } 34318 while (insertionPoint && insertionPoint != endPoint) { 34319 const tempNode = insertionPoint; 34320 insertionPoint = insertionPoint.nextSibling; 34321 removeNode(ctx, tempNode); 34322 } 34323 } 34324 function createNode(oldParent, newChild, insertionPoint, ctx) { 34325 if (ctx.callbacks.beforeNodeAdded(newChild) === false) return null; 34326 if (ctx.idMap.has(newChild)) { 34327 const newEmptyChild = document.createElement( 34328 /** @type {Element} */ 34329 newChild.tagName 34330 ); 34331 oldParent.insertBefore(newEmptyChild, insertionPoint); 34332 morphNode(newEmptyChild, newChild, ctx); 34333 ctx.callbacks.afterNodeAdded(newEmptyChild); 34334 return newEmptyChild; 34335 } else { 34336 const newClonedChild = document.importNode(newChild, true); 34337 oldParent.insertBefore(newClonedChild, insertionPoint); 34338 ctx.callbacks.afterNodeAdded(newClonedChild); 34339 return newClonedChild; 34340 } 34341 } 34342 const findBestMatch = /* @__PURE__ */ (function() { 34343 function findBestMatch2(ctx, node, startPoint, endPoint) { 34344 let softMatch = null; 34345 let nextSibling = node.nextSibling; 34346 let siblingSoftMatchCount = 0; 34347 let cursor = startPoint; 34348 while (cursor && cursor != endPoint) { 34349 if (isSoftMatch(cursor, node)) { 34350 if (isIdSetMatch(ctx, cursor, node)) { 34351 return cursor; 34352 } 34353 if (softMatch === null) { 34354 if (!ctx.idMap.has(cursor)) { 34355 softMatch = cursor; 34356 } 34357 } 34358 } 34359 if (softMatch === null && nextSibling && isSoftMatch(cursor, nextSibling)) { 34360 siblingSoftMatchCount++; 34361 nextSibling = nextSibling.nextSibling; 34362 if (siblingSoftMatchCount >= 2) { 34363 softMatch = void 0; 34364 } 34365 } 34366 if (ctx.activeElementAndParents.includes(cursor)) break; 34367 cursor = cursor.nextSibling; 34368 } 34369 return softMatch || null; 34370 } 34371 function isIdSetMatch(ctx, oldNode, newNode) { 34372 let oldSet = ctx.idMap.get(oldNode); 34373 let newSet = ctx.idMap.get(newNode); 34374 if (!newSet || !oldSet) return false; 34375 for (const id of oldSet) { 34376 if (newSet.has(id)) { 34377 return true; 34378 } 34379 } 34380 return false; 34381 } 34382 function isSoftMatch(oldNode, newNode) { 34383 const oldElt = ( 34384 /** @type {Element} */ 34385 oldNode 34386 ); 34387 const newElt = ( 34388 /** @type {Element} */ 34389 newNode 34390 ); 34391 return oldElt.nodeType === newElt.nodeType && oldElt.tagName === newElt.tagName && // If oldElt has an `id` with possible state and it doesn't match newElt.id then avoid morphing. 34392 // We'll still match an anonymous node with an IDed newElt, though, because if it got this far, 34393 // its not persistent, and new nodes can't have any hidden state. 34394 // We can't use .id because of form input shadowing, and we can't count on .getAttribute's presence because it could be a document-fragment 34395 (!oldElt.getAttribute?.("id") || oldElt.getAttribute?.("id") === newElt.getAttribute?.("id")); 34396 } 34397 return findBestMatch2; 34398 })(); 34399 function removeNode(ctx, node) { 34400 if (ctx.idMap.has(node)) { 34401 moveBefore(ctx.pantry, node, null); 34402 } else { 34403 if (ctx.callbacks.beforeNodeRemoved(node) === false) return; 34404 node.parentNode?.removeChild(node); 34405 ctx.callbacks.afterNodeRemoved(node); 34406 } 34407 } 34408 function removeNodesBetween(ctx, startInclusive, endExclusive) { 34409 let cursor = startInclusive; 34410 while (cursor && cursor !== endExclusive) { 34411 let tempNode = ( 34412 /** @type {Node} */ 34413 cursor 34414 ); 34415 cursor = cursor.nextSibling; 34416 removeNode(ctx, tempNode); 34417 } 34418 return cursor; 34419 } 34420 function moveBeforeById(parentNode, id, after, ctx) { 34421 const target = ( 34422 /** @type {Element} - will always be found */ 34423 // ctx.target.id unsafe because of form input shadowing 34424 // ctx.target could be a document fragment which doesn't have `getAttribute` 34425 ctx.target.getAttribute?.("id") === id && ctx.target || ctx.target.querySelector(`[id="${id}"]`) || ctx.pantry.querySelector(`[id="${id}"]`) 34426 ); 34427 removeElementFromAncestorsIdMaps(target, ctx); 34428 moveBefore(parentNode, target, after); 34429 return target; 34430 } 34431 function removeElementFromAncestorsIdMaps(element, ctx) { 34432 const id = ( 34433 /** @type {String} */ 34434 element.getAttribute("id") 34435 ); 34436 while (element = element.parentNode) { 34437 let idSet = ctx.idMap.get(element); 34438 if (idSet) { 34439 idSet.delete(id); 34440 if (!idSet.size) { 34441 ctx.idMap.delete(element); 34442 } 34443 } 34444 } 34445 } 34446 function moveBefore(parentNode, element, after) { 34447 if (parentNode.moveBefore) { 34448 try { 34449 parentNode.moveBefore(element, after); 34450 } catch (e3) { 34451 parentNode.insertBefore(element, after); 34452 } 34453 } else { 34454 parentNode.insertBefore(element, after); 34455 } 34456 } 34457 return morphChildren3; 34458 })(); 34459 const morphNode = /* @__PURE__ */ (function() { 34460 function morphNode2(oldNode, newContent, ctx) { 34461 if (ctx.ignoreActive && oldNode === document.activeElement) { 34462 return null; 34463 } 34464 if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) { 34465 return oldNode; 34466 } 34467 if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; 34468 else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== "morph") { 34469 handleHeadElement( 34470 oldNode, 34471 /** @type {HTMLHeadElement} */ 34472 newContent, 34473 ctx 34474 ); 34475 } else { 34476 morphAttributes(oldNode, newContent, ctx); 34477 if (!ignoreValueOfActiveElement(oldNode, ctx)) { 34478 morphChildren2(ctx, oldNode, newContent); 34479 } 34480 } 34481 ctx.callbacks.afterNodeMorphed(oldNode, newContent); 34482 return oldNode; 34483 } 34484 function morphAttributes(oldNode, newNode, ctx) { 34485 let type = newNode.nodeType; 34486 if (type === 1) { 34487 const oldElt = ( 34488 /** @type {Element} */ 34489 oldNode 34490 ); 34491 const newElt = ( 34492 /** @type {Element} */ 34493 newNode 34494 ); 34495 const oldAttributes = oldElt.attributes; 34496 const newAttributes = newElt.attributes; 34497 for (const newAttribute of newAttributes) { 34498 if (ignoreAttribute(newAttribute.name, oldElt, "update", ctx)) { 34499 continue; 34500 } 34501 if (oldElt.getAttribute(newAttribute.name) !== newAttribute.value) { 34502 oldElt.setAttribute(newAttribute.name, newAttribute.value); 34503 } 34504 } 34505 for (let i3 = oldAttributes.length - 1; 0 <= i3; i3--) { 34506 const oldAttribute = oldAttributes[i3]; 34507 if (!oldAttribute) continue; 34508 if (!newElt.hasAttribute(oldAttribute.name)) { 34509 if (ignoreAttribute(oldAttribute.name, oldElt, "remove", ctx)) { 34510 continue; 34511 } 34512 oldElt.removeAttribute(oldAttribute.name); 34513 } 34514 } 34515 if (!ignoreValueOfActiveElement(oldElt, ctx)) { 34516 syncInputValue(oldElt, newElt, ctx); 34517 } 34518 } 34519 if (type === 8 || type === 3) { 34520 if (oldNode.nodeValue !== newNode.nodeValue) { 34521 oldNode.nodeValue = newNode.nodeValue; 34522 } 34523 } 34524 } 34525 function syncInputValue(oldElement, newElement, ctx) { 34526 if (oldElement instanceof HTMLInputElement && newElement instanceof HTMLInputElement && newElement.type !== "file") { 34527 let newValue = newElement.value; 34528 let oldValue = oldElement.value; 34529 syncBooleanAttribute(oldElement, newElement, "checked", ctx); 34530 syncBooleanAttribute(oldElement, newElement, "disabled", ctx); 34531 if (!newElement.hasAttribute("value")) { 34532 if (!ignoreAttribute("value", oldElement, "remove", ctx)) { 34533 oldElement.value = ""; 34534 oldElement.removeAttribute("value"); 34535 } 34536 } else if (oldValue !== newValue) { 34537 if (!ignoreAttribute("value", oldElement, "update", ctx)) { 34538 oldElement.setAttribute("value", newValue); 34539 oldElement.value = newValue; 34540 } 34541 } 34542 } else if (oldElement instanceof HTMLOptionElement && newElement instanceof HTMLOptionElement) { 34543 syncBooleanAttribute(oldElement, newElement, "selected", ctx); 34544 } else if (oldElement instanceof HTMLTextAreaElement && newElement instanceof HTMLTextAreaElement) { 34545 let newValue = newElement.value; 34546 let oldValue = oldElement.value; 34547 if (ignoreAttribute("value", oldElement, "update", ctx)) { 34548 return; 34549 } 34550 if (newValue !== oldValue) { 34551 oldElement.value = newValue; 34552 } 34553 if (oldElement.firstChild && oldElement.firstChild.nodeValue !== newValue) { 34554 oldElement.firstChild.nodeValue = newValue; 34555 } 34556 } 34557 } 34558 function syncBooleanAttribute(oldElement, newElement, attributeName, ctx) { 34559 const newLiveValue = newElement[attributeName], oldLiveValue = oldElement[attributeName]; 34560 if (newLiveValue !== oldLiveValue) { 34561 const ignoreUpdate = ignoreAttribute( 34562 attributeName, 34563 oldElement, 34564 "update", 34565 ctx 34566 ); 34567 if (!ignoreUpdate) { 34568 oldElement[attributeName] = newElement[attributeName]; 34569 } 34570 if (newLiveValue) { 34571 if (!ignoreUpdate) { 34572 oldElement.setAttribute(attributeName, ""); 34573 } 34574 } else { 34575 if (!ignoreAttribute(attributeName, oldElement, "remove", ctx)) { 34576 oldElement.removeAttribute(attributeName); 34577 } 34578 } 34579 } 34580 } 34581 function ignoreAttribute(attr, element, updateType, ctx) { 34582 if (attr === "value" && ctx.ignoreActiveValue && element === document.activeElement) { 34583 return true; 34584 } 34585 return ctx.callbacks.beforeAttributeUpdated(attr, element, updateType) === false; 34586 } 34587 function ignoreValueOfActiveElement(possibleActiveElement, ctx) { 34588 return !!ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body; 34589 } 34590 return morphNode2; 34591 })(); 34592 function withHeadBlocking(ctx, oldNode, newNode, callback) { 34593 if (ctx.head.block) { 34594 const oldHead = oldNode.querySelector("head"); 34595 const newHead = newNode.querySelector("head"); 34596 if (oldHead && newHead) { 34597 const promises = handleHeadElement(oldHead, newHead, ctx); 34598 return Promise.all(promises).then(() => { 34599 const newCtx = Object.assign(ctx, { 34600 head: { 34601 block: false, 34602 ignore: true 34603 } 34604 }); 34605 return callback(newCtx); 34606 }); 34607 } 34608 } 34609 return callback(ctx); 34610 } 34611 function handleHeadElement(oldHead, newHead, ctx) { 34612 let added = []; 34613 let removed = []; 34614 let preserved = []; 34615 let nodesToAppend = []; 34616 let srcToNewHeadNodes = /* @__PURE__ */ new Map(); 34617 for (const newHeadChild of newHead.children) { 34618 srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild); 34619 } 34620 for (const currentHeadElt of oldHead.children) { 34621 let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML); 34622 let isReAppended = ctx.head.shouldReAppend(currentHeadElt); 34623 let isPreserved = ctx.head.shouldPreserve(currentHeadElt); 34624 if (inNewContent || isPreserved) { 34625 if (isReAppended) { 34626 removed.push(currentHeadElt); 34627 } else { 34628 srcToNewHeadNodes.delete(currentHeadElt.outerHTML); 34629 preserved.push(currentHeadElt); 34630 } 34631 } else { 34632 if (ctx.head.style === "append") { 34633 if (isReAppended) { 34634 removed.push(currentHeadElt); 34635 nodesToAppend.push(currentHeadElt); 34636 } 34637 } else { 34638 if (ctx.head.shouldRemove(currentHeadElt) !== false) { 34639 removed.push(currentHeadElt); 34640 } 34641 } 34642 } 34643 } 34644 nodesToAppend.push(...srcToNewHeadNodes.values()); 34645 let promises = []; 34646 for (const newNode of nodesToAppend) { 34647 let newElt = ( 34648 /** @type {ChildNode} */ 34649 document.createRange().createContextualFragment(newNode.outerHTML).firstChild 34650 ); 34651 if (ctx.callbacks.beforeNodeAdded(newElt) !== false) { 34652 if ("href" in newElt && newElt.href || "src" in newElt && newElt.src) { 34653 let resolve; 34654 let promise = new Promise(function(_resolve) { 34655 resolve = _resolve; 34656 }); 34657 newElt.addEventListener("load", function() { 34658 resolve(); 34659 }); 34660 promises.push(promise); 34661 } 34662 oldHead.appendChild(newElt); 34663 ctx.callbacks.afterNodeAdded(newElt); 34664 added.push(newElt); 34665 } 34666 } 34667 for (const removedElement of removed) { 34668 if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) { 34669 oldHead.removeChild(removedElement); 34670 ctx.callbacks.afterNodeRemoved(removedElement); 34671 } 34672 } 34673 ctx.head.afterHeadMorphed(oldHead, { 34674 added, 34675 kept: preserved, 34676 removed 34677 }); 34678 return promises; 34679 } 34680 const createMorphContext = /* @__PURE__ */ (function() { 34681 function createMorphContext2(oldNode, newContent, config2) { 34682 const { persistentIds, idMap } = createIdMaps(oldNode, newContent); 34683 const mergedConfig = mergeDefaults(config2); 34684 const morphStyle = mergedConfig.morphStyle || "outerHTML"; 34685 if (!["innerHTML", "outerHTML"].includes(morphStyle)) { 34686 throw `Do not understand how to morph style ${morphStyle}`; 34687 } 34688 return { 34689 target: oldNode, 34690 newContent, 34691 config: mergedConfig, 34692 morphStyle, 34693 ignoreActive: mergedConfig.ignoreActive, 34694 ignoreActiveValue: mergedConfig.ignoreActiveValue, 34695 restoreFocus: mergedConfig.restoreFocus, 34696 idMap, 34697 persistentIds, 34698 pantry: createPantry(), 34699 activeElementAndParents: createActiveElementAndParents(oldNode), 34700 callbacks: mergedConfig.callbacks, 34701 head: mergedConfig.head 34702 }; 34703 } 34704 function mergeDefaults(config2) { 34705 let finalConfig = Object.assign({}, defaults); 34706 Object.assign(finalConfig, config2); 34707 finalConfig.callbacks = Object.assign( 34708 {}, 34709 defaults.callbacks, 34710 config2.callbacks 34711 ); 34712 finalConfig.head = Object.assign({}, defaults.head, config2.head); 34713 return finalConfig; 34714 } 34715 function createPantry() { 34716 const pantry = document.createElement("div"); 34717 pantry.hidden = true; 34718 document.body.insertAdjacentElement("afterend", pantry); 34719 return pantry; 34720 } 34721 function createActiveElementAndParents(oldNode) { 34722 let activeElementAndParents = []; 34723 let elt = document.activeElement; 34724 if (elt?.tagName !== "BODY" && oldNode.contains(elt)) { 34725 while (elt) { 34726 activeElementAndParents.push(elt); 34727 if (elt === oldNode) break; 34728 elt = elt.parentElement; 34729 } 34730 } 34731 return activeElementAndParents; 34732 } 34733 function findIdElements(root2) { 34734 let elements = Array.from(root2.querySelectorAll("[id]")); 34735 if (root2.getAttribute?.("id")) { 34736 elements.push(root2); 34737 } 34738 return elements; 34739 } 34740 function populateIdMapWithTree(idMap, persistentIds, root2, elements) { 34741 for (const elt of elements) { 34742 const id = ( 34743 /** @type {String} */ 34744 elt.getAttribute("id") 34745 ); 34746 if (persistentIds.has(id)) { 34747 let current = elt; 34748 while (current) { 34749 let idSet = idMap.get(current); 34750 if (idSet == null) { 34751 idSet = /* @__PURE__ */ new Set(); 34752 idMap.set(current, idSet); 34753 } 34754 idSet.add(id); 34755 if (current === root2) break; 34756 current = current.parentElement; 34757 } 34758 } 34759 } 34760 } 34761 function createIdMaps(oldContent, newContent) { 34762 const oldIdElements = findIdElements(oldContent); 34763 const newIdElements = findIdElements(newContent); 34764 const persistentIds = createPersistentIds(oldIdElements, newIdElements); 34765 let idMap = /* @__PURE__ */ new Map(); 34766 populateIdMapWithTree(idMap, persistentIds, oldContent, oldIdElements); 34767 const newRoot = newContent.__idiomorphRoot || newContent; 34768 populateIdMapWithTree(idMap, persistentIds, newRoot, newIdElements); 34769 return { persistentIds, idMap }; 34770 } 34771 function createPersistentIds(oldIdElements, newIdElements) { 34772 let duplicateIds = /* @__PURE__ */ new Set(); 34773 let oldIdTagNameMap = /* @__PURE__ */ new Map(); 34774 for (const { id, tagName } of oldIdElements) { 34775 if (oldIdTagNameMap.has(id)) { 34776 duplicateIds.add(id); 34777 } else { 34778 oldIdTagNameMap.set(id, tagName); 34779 } 34780 } 34781 let persistentIds = /* @__PURE__ */ new Set(); 34782 for (const { id, tagName } of newIdElements) { 34783 if (persistentIds.has(id)) { 34784 duplicateIds.add(id); 34785 } else if (oldIdTagNameMap.get(id) === tagName) { 34786 persistentIds.add(id); 34787 } 34788 } 34789 for (const id of duplicateIds) { 34790 persistentIds.delete(id); 34791 } 34792 return persistentIds; 34793 } 34794 return createMorphContext2; 34795 })(); 34796 const { normalizeElement, normalizeParent } = /* @__PURE__ */ (function() { 34797 const generatedByIdiomorph = /* @__PURE__ */ new WeakSet(); 34798 function normalizeElement2(content) { 34799 if (content instanceof Document) { 34800 return content.documentElement; 34801 } else { 34802 return content; 34803 } 34804 } 34805 function normalizeParent2(newContent) { 34806 if (newContent == null) { 34807 return document.createElement("div"); 34808 } else if (typeof newContent === "string") { 34809 return normalizeParent2(parseContent(newContent)); 34810 } else if (generatedByIdiomorph.has( 34811 /** @type {Element} */ 34812 newContent 34813 )) { 34814 return ( 34815 /** @type {Element} */ 34816 newContent 34817 ); 34818 } else if (newContent instanceof Node) { 34819 if (newContent.parentNode) { 34820 return ( 34821 /** @type {any} */ 34822 new SlicedParentNode(newContent) 34823 ); 34824 } else { 34825 const dummyParent = document.createElement("div"); 34826 dummyParent.append(newContent); 34827 return dummyParent; 34828 } 34829 } else { 34830 const dummyParent = document.createElement("div"); 34831 for (const elt of [...newContent]) { 34832 dummyParent.append(elt); 34833 } 34834 return dummyParent; 34835 } 34836 } 34837 class SlicedParentNode { 34838 /** @param {Node} node */ 34839 constructor(node) { 34840 this.originalNode = node; 34841 this.realParentNode = /** @type {Element} */ 34842 node.parentNode; 34843 this.previousSibling = node.previousSibling; 34844 this.nextSibling = node.nextSibling; 34845 } 34846 /** @returns {Node[]} */ 34847 get childNodes() { 34848 const nodes = []; 34849 let cursor = this.previousSibling ? this.previousSibling.nextSibling : this.realParentNode.firstChild; 34850 while (cursor && cursor != this.nextSibling) { 34851 nodes.push(cursor); 34852 cursor = cursor.nextSibling; 34853 } 34854 return nodes; 34855 } 34856 /** 34857 * @param {string} selector 34858 * @returns {Element[]} 34859 */ 34860 querySelectorAll(selector) { 34861 return this.childNodes.reduce( 34862 (results, node) => { 34863 if (node instanceof Element) { 34864 if (node.matches(selector)) results.push(node); 34865 const nodeList = node.querySelectorAll(selector); 34866 for (let i3 = 0; i3 < nodeList.length; i3++) { 34867 results.push(nodeList[i3]); 34868 } 34869 } 34870 return results; 34871 }, 34872 /** @type {Element[]} */ 34873 [] 34874 ); 34875 } 34876 /** 34877 * @param {Node} node 34878 * @param {Node} referenceNode 34879 * @returns {Node} 34880 */ 34881 insertBefore(node, referenceNode) { 34882 return this.realParentNode.insertBefore(node, referenceNode); 34883 } 34884 /** 34885 * @param {Node} node 34886 * @param {Node} referenceNode 34887 * @returns {Node} 34888 */ 34889 moveBefore(node, referenceNode) { 34890 return this.realParentNode.moveBefore(node, referenceNode); 34891 } 34892 /** 34893 * for later use with populateIdMapWithTree to halt upwards iteration 34894 * @returns {Node} 34895 */ 34896 get __idiomorphRoot() { 34897 return this.originalNode; 34898 } 34899 } 34900 function parseContent(newContent) { 34901 let parser = new DOMParser(); 34902 let contentWithSvgsRemoved = newContent.replace( 34903 /<svg(\s[^>]*>|>)([\s\S]*?)<\/svg>/gim, 34904 "" 34905 ); 34906 if (contentWithSvgsRemoved.match(/<\/html>/) || contentWithSvgsRemoved.match(/<\/head>/) || contentWithSvgsRemoved.match(/<\/body>/)) { 34907 let content = parser.parseFromString(newContent, "text/html"); 34908 if (contentWithSvgsRemoved.match(/<\/html>/)) { 34909 generatedByIdiomorph.add(content); 34910 return content; 34911 } else { 34912 let htmlElement = content.firstChild; 34913 if (htmlElement) { 34914 generatedByIdiomorph.add(htmlElement); 34915 } 34916 return htmlElement; 34917 } 34918 } else { 34919 let responseDoc = parser.parseFromString( 34920 "<body><template>" + newContent + "</template></body>", 34921 "text/html" 34922 ); 34923 let content = ( 34924 /** @type {HTMLTemplateElement} */ 34925 responseDoc.body.querySelector("template").content 34926 ); 34927 generatedByIdiomorph.add(content); 34928 return content; 34929 } 34930 } 34931 return { normalizeElement: normalizeElement2, normalizeParent: normalizeParent2 }; 34932 })(); 34933 return { 34934 morph, 34935 defaults 34936 }; 34937})(); 34938function morphElements(currentElement, newElement, { callbacks, ...options } = {}) { 34939 Idiomorph.morph(currentElement, newElement, { 34940 ...options, 34941 callbacks: new DefaultIdiomorphCallbacks(callbacks) 34942 }); 34943} 34944function morphChildren(currentElement, newElement, options = {}) { 34945 morphElements(currentElement, newElement.childNodes, { 34946 ...options, 34947 morphStyle: "innerHTML" 34948 }); 34949} 34950function shouldRefreshFrameWithMorphing(currentFrame, newFrame) { 34951 return currentFrame instanceof FrameElement && currentFrame.shouldReloadWithMorph && (!newFrame || areFramesCompatibleForRefreshing(currentFrame, newFrame)) && !currentFrame.closest("[data-turbo-permanent]"); 34952} 34953function areFramesCompatibleForRefreshing(currentFrame, newFrame) { 34954 return newFrame instanceof Element && newFrame.nodeName === "TURBO-FRAME" && currentFrame.id === newFrame.id && (!newFrame.getAttribute("src") || urlsAreEqual(currentFrame.src, newFrame.getAttribute("src"))); 34955} 34956function closestFrameReloadableWithMorphing(node) { 34957 return node.parentElement.closest("turbo-frame[src][refresh=morph]"); 34958} 34959var DefaultIdiomorphCallbacks = class { 34960 #beforeNodeMorphed; 34961 constructor({ beforeNodeMorphed } = {}) { 34962 this.#beforeNodeMorphed = beforeNodeMorphed || (() => true); 34963 } 34964 beforeNodeAdded = (node) => { 34965 return !(node.id && node.hasAttribute("data-turbo-permanent") && document.getElementById(node.id)); 34966 }; 34967 beforeNodeMorphed = (currentElement, newElement) => { 34968 if (currentElement instanceof Element) { 34969 if (!currentElement.hasAttribute("data-turbo-permanent") && this.#beforeNodeMorphed(currentElement, newElement)) { 34970 const event = dispatch("turbo:before-morph-element", { 34971 cancelable: true, 34972 target: currentElement, 34973 detail: { currentElement, newElement } 34974 }); 34975 return !event.defaultPrevented; 34976 } else { 34977 return false; 34978 } 34979 } 34980 }; 34981 beforeAttributeUpdated = (attributeName, target, mutationType) => { 34982 const event = dispatch("turbo:before-morph-attribute", { 34983 cancelable: true, 34984 target, 34985 detail: { attributeName, mutationType } 34986 }); 34987 return !event.defaultPrevented; 34988 }; 34989 beforeNodeRemoved = (node) => { 34990 return this.beforeNodeMorphed(node); 34991 }; 34992 afterNodeMorphed = (currentElement, newElement) => { 34993 if (currentElement instanceof Element) { 34994 dispatch("turbo:morph-element", { 34995 target: currentElement, 34996 detail: { currentElement, newElement } 34997 }); 34998 } 34999 }; 35000}; 35001var MorphingFrameRenderer = class extends FrameRenderer { 35002 static renderElement(currentElement, newElement) { 35003 dispatch("turbo:before-frame-morph", { 35004 target: currentElement, 35005 detail: { currentElement, newElement } 35006 }); 35007 morphChildren(currentElement, newElement, { 35008 callbacks: { 35009 beforeNodeMorphed: (node, newNode) => { 35010 if (shouldRefreshFrameWithMorphing(node, newNode) && closestFrameReloadableWithMorphing(node) === currentElement) { 35011 node.reload(); 35012 return false; 35013 } 35014 return true; 35015 } 35016 } 35017 }); 35018 } 35019 async preservingPermanentElements(callback) { 35020 return await callback(); 35021 } 35022}; 35023var ProgressBar = class _ProgressBar { 35024 static animationDuration = 300; 35025 /*ms*/ 35026 static get defaultCSS() { 35027 return unindent` 35028 .turbo-progress-bar { 35029 position: fixed; 35030 display: block; 35031 top: 0; 35032 left: 0; 35033 height: 3px; 35034 background: #0076ff; 35035 z-index: 2147483647; 35036 transition: 35037 width ${_ProgressBar.animationDuration}ms ease-out, 35038 opacity ${_ProgressBar.animationDuration / 2}ms ${_ProgressBar.animationDuration / 2}ms ease-in; 35039 transform: translate3d(0, 0, 0); 35040 } 35041 `; 35042 } 35043 hiding = false; 35044 value = 0; 35045 visible = false; 35046 constructor() { 35047 this.stylesheetElement = this.createStylesheetElement(); 35048 this.progressElement = this.createProgressElement(); 35049 this.installStylesheetElement(); 35050 this.setValue(0); 35051 } 35052 show() { 35053 if (!this.visible) { 35054 this.visible = true; 35055 this.installProgressElement(); 35056 this.startTrickling(); 35057 } 35058 } 35059 hide() { 35060 if (this.visible && !this.hiding) { 35061 this.hiding = true; 35062 this.fadeProgressElement(() => { 35063 this.uninstallProgressElement(); 35064 this.stopTrickling(); 35065 this.visible = false; 35066 this.hiding = false; 35067 }); 35068 } 35069 } 35070 setValue(value) { 35071 this.value = value; 35072 this.refresh(); 35073 } 35074 // Private 35075 installStylesheetElement() { 35076 document.head.insertBefore(this.stylesheetElement, document.head.firstChild); 35077 } 35078 installProgressElement() { 35079 this.progressElement.style.width = "0"; 35080 this.progressElement.style.opacity = "1"; 35081 document.documentElement.insertBefore(this.progressElement, document.body); 35082 this.refresh(); 35083 } 35084 fadeProgressElement(callback) { 35085 this.progressElement.style.opacity = "0"; 35086 setTimeout(callback, _ProgressBar.animationDuration * 1.5); 35087 } 35088 uninstallProgressElement() { 35089 if (this.progressElement.parentNode) { 35090 document.documentElement.removeChild(this.progressElement); 35091 } 35092 } 35093 startTrickling() { 35094 if (!this.trickleInterval) { 35095 this.trickleInterval = window.setInterval(this.trickle, _ProgressBar.animationDuration); 35096 } 35097 } 35098 stopTrickling() { 35099 window.clearInterval(this.trickleInterval); 35100 delete this.trickleInterval; 35101 } 35102 trickle = () => { 35103 this.setValue(this.value + Math.random() / 100); 35104 }; 35105 refresh() { 35106 requestAnimationFrame(() => { 35107 this.progressElement.style.width = `${10 + this.value * 90}%`; 35108 }); 35109 } 35110 createStylesheetElement() { 35111 const element = document.createElement("style"); 35112 element.type = "text/css"; 35113 element.textContent = _ProgressBar.defaultCSS; 35114 const cspNonce = getCspNonce(); 35115 if (cspNonce) { 35116 element.nonce = cspNonce; 35117 } 35118 return element; 35119 } 35120 createProgressElement() { 35121 const element = document.createElement("div"); 35122 element.className = "turbo-progress-bar"; 35123 return element; 35124 } 35125}; 35126var HeadSnapshot = class extends Snapshot { 35127 detailsByOuterHTML = this.children.filter((element) => !elementIsNoscript(element)).map((element) => elementWithoutNonce(element)).reduce((result, element) => { 35128 const { outerHTML } = element; 35129 const details = outerHTML in result ? result[outerHTML] : { 35130 type: elementType(element), 35131 tracked: elementIsTracked(element), 35132 elements: [] 35133 }; 35134 return { 35135 ...result, 35136 [outerHTML]: { 35137 ...details, 35138 elements: [...details.elements, element] 35139 } 35140 }; 35141 }, {}); 35142 get trackedElementSignature() { 35143 return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked).join(""); 35144 } 35145 getScriptElementsNotInSnapshot(snapshot) { 35146 return this.getElementsMatchingTypeNotInSnapshot("script", snapshot); 35147 } 35148 getStylesheetElementsNotInSnapshot(snapshot) { 35149 return this.getElementsMatchingTypeNotInSnapshot("stylesheet", snapshot); 35150 } 35151 getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) { 35152 return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML)).map((outerHTML) => this.detailsByOuterHTML[outerHTML]).filter(({ type }) => type == matchedType).map(({ elements: [element] }) => element); 35153 } 35154 get provisionalElements() { 35155 return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => { 35156 const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML]; 35157 if (type == null && !tracked) { 35158 return [...result, ...elements]; 35159 } else if (elements.length > 1) { 35160 return [...result, ...elements.slice(1)]; 35161 } else { 35162 return result; 35163 } 35164 }, []); 35165 } 35166 getMetaValue(name) { 35167 const element = this.findMetaElementByName(name); 35168 return element ? element.getAttribute("content") : null; 35169 } 35170 findMetaElementByName(name) { 35171 return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => { 35172 const { 35173 elements: [element] 35174 } = this.detailsByOuterHTML[outerHTML]; 35175 return elementIsMetaElementWithName(element, name) ? element : result; 35176 }, void 0 | void 0); 35177 } 35178}; 35179function elementType(element) { 35180 if (elementIsScript(element)) { 35181 return "script"; 35182 } else if (elementIsStylesheet(element)) { 35183 return "stylesheet"; 35184 } 35185} 35186function elementIsTracked(element) { 35187 return element.getAttribute("data-turbo-track") == "reload"; 35188} 35189function elementIsScript(element) { 35190 const tagName = element.localName; 35191 return tagName == "script"; 35192} 35193function elementIsNoscript(element) { 35194 const tagName = element.localName; 35195 return tagName == "noscript"; 35196} 35197function elementIsStylesheet(element) { 35198 const tagName = element.localName; 35199 return tagName == "style" || tagName == "link" && element.getAttribute("rel") == "stylesheet"; 35200} 35201function elementIsMetaElementWithName(element, name) { 35202 const tagName = element.localName; 35203 return tagName == "meta" && element.getAttribute("name") == name; 35204} 35205function elementWithoutNonce(element) { 35206 if (element.hasAttribute("nonce")) { 35207 element.setAttribute("nonce", ""); 35208 } 35209 return element; 35210} 35211var PageSnapshot = class _PageSnapshot extends Snapshot { 35212 static fromHTMLString(html = "") { 35213 return this.fromDocument(parseHTMLDocument(html)); 35214 } 35215 static fromElement(element) { 35216 return this.fromDocument(element.ownerDocument); 35217 } 35218 static fromDocument({ documentElement, body, head }) { 35219 return new this(documentElement, body, new HeadSnapshot(head)); 35220 } 35221 constructor(documentElement, body, headSnapshot) { 35222 super(body); 35223 this.documentElement = documentElement; 35224 this.headSnapshot = headSnapshot; 35225 } 35226 clone() { 35227 const clonedElement = this.element.cloneNode(true); 35228 const selectElements = this.element.querySelectorAll("select"); 35229 const clonedSelectElements = clonedElement.querySelectorAll("select"); 35230 for (const [index, source] of selectElements.entries()) { 35231 const clone = clonedSelectElements[index]; 35232 for (const option of clone.selectedOptions) option.selected = false; 35233 for (const option of source.selectedOptions) clone.options[option.index].selected = true; 35234 } 35235 for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type="password"]')) { 35236 clonedPasswordInput.value = ""; 35237 } 35238 for (const clonedNoscriptElement of clonedElement.querySelectorAll("noscript")) { 35239 clonedNoscriptElement.remove(); 35240 } 35241 return new _PageSnapshot(this.documentElement, clonedElement, this.headSnapshot); 35242 } 35243 get lang() { 35244 return this.documentElement.getAttribute("lang"); 35245 } 35246 get dir() { 35247 return this.documentElement.getAttribute("dir"); 35248 } 35249 get headElement() { 35250 return this.headSnapshot.element; 35251 } 35252 get rootLocation() { 35253 const root2 = this.getSetting("root") ?? "/"; 35254 return expandURL(root2); 35255 } 35256 get cacheControlValue() { 35257 return this.getSetting("cache-control"); 35258 } 35259 get isPreviewable() { 35260 return this.cacheControlValue != "no-preview"; 35261 } 35262 get isCacheable() { 35263 return this.cacheControlValue != "no-cache"; 35264 } 35265 get isVisitable() { 35266 return this.getSetting("visit-control") != "reload"; 35267 } 35268 get prefersViewTransitions() { 35269 const viewTransitionEnabled = this.getSetting("view-transition") === "true" || this.headSnapshot.getMetaValue("view-transition") === "same-origin"; 35270 return viewTransitionEnabled && !window.matchMedia("(prefers-reduced-motion: reduce)").matches; 35271 } 35272 get refreshMethod() { 35273 return this.getSetting("refresh-method"); 35274 } 35275 get refreshScroll() { 35276 return this.getSetting("refresh-scroll"); 35277 } 35278 // Private 35279 getSetting(name) { 35280 return this.headSnapshot.getMetaValue(`turbo-${name}`); 35281 } 35282}; 35283var ViewTransitioner = class { 35284 #viewTransitionStarted = false; 35285 #lastOperation = Promise.resolve(); 35286 renderChange(useViewTransition, render) { 35287 if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) { 35288 this.#viewTransitionStarted = true; 35289 this.#lastOperation = this.#lastOperation.then(async () => { 35290 await document.startViewTransition(render).finished; 35291 }); 35292 } else { 35293 this.#lastOperation = this.#lastOperation.then(render); 35294 } 35295 return this.#lastOperation; 35296 } 35297 get viewTransitionsAvailable() { 35298 return document.startViewTransition; 35299 } 35300}; 35301var defaultOptions = { 35302 action: "advance", 35303 historyChanged: false, 35304 visitCachedSnapshot: () => { 35305 }, 35306 willRender: true, 35307 updateHistory: true, 35308 shouldCacheSnapshot: true, 35309 acceptsStreamResponse: false, 35310 refresh: {} 35311}; 35312var TimingMetric = { 35313 visitStart: "visitStart", 35314 requestStart: "requestStart", 35315 requestEnd: "requestEnd", 35316 visitEnd: "visitEnd" 35317}; 35318var VisitState = { 35319 initialized: "initialized", 35320 started: "started", 35321 canceled: "canceled", 35322 failed: "failed", 35323 completed: "completed" 35324}; 35325var SystemStatusCode = { 35326 networkFailure: 0, 35327 timeoutFailure: -1, 35328 contentTypeMismatch: -2 35329}; 35330var Direction = { 35331 advance: "forward", 35332 restore: "back", 35333 replace: "none" 35334}; 35335var Visit = class { 35336 identifier = uuid(); 35337 // Required by turbo-ios 35338 timingMetrics = {}; 35339 followedRedirect = false; 35340 historyChanged = false; 35341 scrolled = false; 35342 shouldCacheSnapshot = true; 35343 acceptsStreamResponse = false; 35344 snapshotCached = false; 35345 state = VisitState.initialized; 35346 viewTransitioner = new ViewTransitioner(); 35347 constructor(delegate, location2, restorationIdentifier, options = {}) { 35348 this.delegate = delegate; 35349 this.location = location2; 35350 this.restorationIdentifier = restorationIdentifier || uuid(); 35351 const { 35352 action, 35353 historyChanged, 35354 referrer, 35355 snapshot, 35356 snapshotHTML, 35357 response, 35358 visitCachedSnapshot, 35359 willRender, 35360 updateHistory, 35361 shouldCacheSnapshot, 35362 acceptsStreamResponse, 35363 direction, 35364 refresh 35365 } = { 35366 ...defaultOptions, 35367 ...options 35368 }; 35369 this.action = action; 35370 this.historyChanged = historyChanged; 35371 this.referrer = referrer; 35372 this.snapshot = snapshot; 35373 this.snapshotHTML = snapshotHTML; 35374 this.response = response; 35375 this.isPageRefresh = this.view.isPageRefresh(this); 35376 this.visitCachedSnapshot = visitCachedSnapshot; 35377 this.willRender = willRender; 35378 this.updateHistory = updateHistory; 35379 this.scrolled = !willRender; 35380 this.shouldCacheSnapshot = shouldCacheSnapshot; 35381 this.acceptsStreamResponse = acceptsStreamResponse; 35382 this.direction = direction || Direction[action]; 35383 this.refresh = refresh; 35384 } 35385 get adapter() { 35386 return this.delegate.adapter; 35387 } 35388 get view() { 35389 return this.delegate.view; 35390 } 35391 get history() { 35392 return this.delegate.history; 35393 } 35394 get restorationData() { 35395 return this.history.getRestorationDataForIdentifier(this.restorationIdentifier); 35396 } 35397 start() { 35398 if (this.state == VisitState.initialized) { 35399 this.recordTimingMetric(TimingMetric.visitStart); 35400 this.state = VisitState.started; 35401 this.adapter.visitStarted(this); 35402 this.delegate.visitStarted(this); 35403 } 35404 } 35405 cancel() { 35406 if (this.state == VisitState.started) { 35407 if (this.request) { 35408 this.request.cancel(); 35409 } 35410 this.cancelRender(); 35411 this.state = VisitState.canceled; 35412 } 35413 } 35414 complete() { 35415 if (this.state == VisitState.started) { 35416 this.recordTimingMetric(TimingMetric.visitEnd); 35417 this.adapter.visitCompleted(this); 35418 this.state = VisitState.completed; 35419 this.followRedirect(); 35420 if (!this.followedRedirect) { 35421 this.delegate.visitCompleted(this); 35422 } 35423 } 35424 } 35425 fail() { 35426 if (this.state == VisitState.started) { 35427 this.state = VisitState.failed; 35428 this.adapter.visitFailed(this); 35429 this.delegate.visitCompleted(this); 35430 } 35431 } 35432 changeHistory() { 35433 if (!this.historyChanged && this.updateHistory) { 35434 const actionForHistory = this.location.href === this.referrer?.href ? "replace" : this.action; 35435 const method = getHistoryMethodForAction(actionForHistory); 35436 this.history.update(method, this.location, this.restorationIdentifier); 35437 this.historyChanged = true; 35438 } 35439 } 35440 issueRequest() { 35441 if (this.hasPreloadedResponse()) { 35442 this.simulateRequest(); 35443 } else if (this.shouldIssueRequest() && !this.request) { 35444 this.request = new FetchRequest(this, FetchMethod.get, this.location); 35445 this.request.perform(); 35446 } 35447 } 35448 simulateRequest() { 35449 if (this.response) { 35450 this.startRequest(); 35451 this.recordResponse(); 35452 this.finishRequest(); 35453 } 35454 } 35455 startRequest() { 35456 this.recordTimingMetric(TimingMetric.requestStart); 35457 this.adapter.visitRequestStarted(this); 35458 } 35459 recordResponse(response = this.response) { 35460 this.response = response; 35461 if (response) { 35462 const { statusCode } = response; 35463 if (isSuccessful(statusCode)) { 35464 this.adapter.visitRequestCompleted(this); 35465 } else { 35466 this.adapter.visitRequestFailedWithStatusCode(this, statusCode); 35467 } 35468 } 35469 } 35470 finishRequest() { 35471 this.recordTimingMetric(TimingMetric.requestEnd); 35472 this.adapter.visitRequestFinished(this); 35473 } 35474 loadResponse() { 35475 if (this.response) { 35476 const { statusCode, responseHTML } = this.response; 35477 this.render(async () => { 35478 if (this.shouldCacheSnapshot) this.cacheSnapshot(); 35479 if (this.view.renderPromise) await this.view.renderPromise; 35480 if (isSuccessful(statusCode) && responseHTML != null) { 35481 const snapshot = PageSnapshot.fromHTMLString(responseHTML); 35482 await this.renderPageSnapshot(snapshot, false); 35483 this.adapter.visitRendered(this); 35484 this.complete(); 35485 } else { 35486 await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this); 35487 this.adapter.visitRendered(this); 35488 this.fail(); 35489 } 35490 }); 35491 } 35492 } 35493 getCachedSnapshot() { 35494 const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot(); 35495 if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) { 35496 if (this.action == "restore" || snapshot.isPreviewable) { 35497 return snapshot; 35498 } 35499 } 35500 } 35501 getPreloadedSnapshot() { 35502 if (this.snapshotHTML) { 35503 return PageSnapshot.fromHTMLString(this.snapshotHTML); 35504 } 35505 } 35506 hasCachedSnapshot() { 35507 return this.getCachedSnapshot() != null; 35508 } 35509 loadCachedSnapshot() { 35510 const snapshot = this.getCachedSnapshot(); 35511 if (snapshot) { 35512 const isPreview = this.shouldIssueRequest(); 35513 this.render(async () => { 35514 this.cacheSnapshot(); 35515 if (this.isPageRefresh) { 35516 this.adapter.visitRendered(this); 35517 } else { 35518 if (this.view.renderPromise) await this.view.renderPromise; 35519 await this.renderPageSnapshot(snapshot, isPreview); 35520 this.adapter.visitRendered(this); 35521 if (!isPreview) { 35522 this.complete(); 35523 } 35524 } 35525 }); 35526 } 35527 } 35528 followRedirect() { 35529 if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) { 35530 this.adapter.visitProposedToLocation(this.redirectedToLocation, { 35531 action: "replace", 35532 response: this.response, 35533 shouldCacheSnapshot: false, 35534 willRender: false 35535 }); 35536 this.followedRedirect = true; 35537 } 35538 } 35539 // Fetch request delegate 35540 prepareRequest(request2) { 35541 if (this.acceptsStreamResponse) { 35542 request2.acceptResponseType(StreamMessage.contentType); 35543 } 35544 } 35545 requestStarted() { 35546 this.startRequest(); 35547 } 35548 requestPreventedHandlingResponse(_request, _response) { 35549 } 35550 async requestSucceededWithResponse(request2, response) { 35551 const responseHTML = await response.responseHTML; 35552 const { redirected, statusCode } = response; 35553 if (responseHTML == void 0) { 35554 this.recordResponse({ 35555 statusCode: SystemStatusCode.contentTypeMismatch, 35556 redirected 35557 }); 35558 } else { 35559 this.redirectedToLocation = response.redirected ? response.location : void 0; 35560 this.recordResponse({ statusCode, responseHTML, redirected }); 35561 } 35562 } 35563 async requestFailedWithResponse(request2, response) { 35564 const responseHTML = await response.responseHTML; 35565 const { redirected, statusCode } = response; 35566 if (responseHTML == void 0) { 35567 this.recordResponse({ 35568 statusCode: SystemStatusCode.contentTypeMismatch, 35569 redirected 35570 }); 35571 } else { 35572 this.recordResponse({ statusCode, responseHTML, redirected }); 35573 } 35574 } 35575 requestErrored(_request, _error) { 35576 this.recordResponse({ 35577 statusCode: SystemStatusCode.networkFailure, 35578 redirected: false 35579 }); 35580 } 35581 requestFinished() { 35582 this.finishRequest(); 35583 } 35584 // Scrolling 35585 performScroll() { 35586 if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) { 35587 if (this.action == "restore") { 35588 this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop(); 35589 } else { 35590 this.scrollToAnchor() || this.view.scrollToTop(); 35591 } 35592 this.scrolled = true; 35593 } 35594 } 35595 scrollToRestoredPosition() { 35596 const { scrollPosition } = this.restorationData; 35597 if (scrollPosition) { 35598 this.view.scrollToPosition(scrollPosition); 35599 return true; 35600 } 35601 } 35602 scrollToAnchor() { 35603 const anchor = getAnchor(this.location); 35604 if (anchor != null) { 35605 this.view.scrollToAnchor(anchor); 35606 return true; 35607 } 35608 } 35609 // Instrumentation 35610 recordTimingMetric(metric) { 35611 this.timingMetrics[metric] = (/* @__PURE__ */ new Date()).getTime(); 35612 } 35613 getTimingMetrics() { 35614 return { ...this.timingMetrics }; 35615 } 35616 // Private 35617 hasPreloadedResponse() { 35618 return typeof this.response == "object"; 35619 } 35620 shouldIssueRequest() { 35621 if (this.action == "restore") { 35622 return !this.hasCachedSnapshot(); 35623 } else { 35624 return this.willRender; 35625 } 35626 } 35627 cacheSnapshot() { 35628 if (!this.snapshotCached) { 35629 this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot)); 35630 this.snapshotCached = true; 35631 } 35632 } 35633 async render(callback) { 35634 this.cancelRender(); 35635 await new Promise((resolve) => { 35636 this.frame = document.visibilityState === "hidden" ? setTimeout(() => resolve(), 0) : requestAnimationFrame(() => resolve()); 35637 }); 35638 await callback(); 35639 delete this.frame; 35640 } 35641 async renderPageSnapshot(snapshot, isPreview) { 35642 await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => { 35643 await this.view.renderPage(snapshot, isPreview, this.willRender, this); 35644 this.performScroll(); 35645 }); 35646 } 35647 cancelRender() { 35648 if (this.frame) { 35649 cancelAnimationFrame(this.frame); 35650 delete this.frame; 35651 } 35652 } 35653}; 35654function isSuccessful(statusCode) { 35655 return statusCode >= 200 && statusCode < 300; 35656} 35657var BrowserAdapter = class { 35658 progressBar = new ProgressBar(); 35659 constructor(session2) { 35660 this.session = session2; 35661 } 35662 visitProposedToLocation(location2, options) { 35663 if (locationIsVisitable(location2, this.navigator.rootLocation)) { 35664 this.navigator.startVisit(location2, options?.restorationIdentifier || uuid(), options); 35665 } else { 35666 window.location.href = location2.toString(); 35667 } 35668 } 35669 visitStarted(visit2) { 35670 this.location = visit2.location; 35671 this.redirectedToLocation = null; 35672 visit2.loadCachedSnapshot(); 35673 visit2.issueRequest(); 35674 } 35675 visitRequestStarted(visit2) { 35676 this.progressBar.setValue(0); 35677 if (visit2.hasCachedSnapshot() || visit2.action != "restore") { 35678 this.showVisitProgressBarAfterDelay(); 35679 } else { 35680 this.showProgressBar(); 35681 } 35682 } 35683 visitRequestCompleted(visit2) { 35684 visit2.loadResponse(); 35685 if (visit2.response.redirected) { 35686 this.redirectedToLocation = visit2.redirectedToLocation; 35687 } 35688 } 35689 visitRequestFailedWithStatusCode(visit2, statusCode) { 35690 switch (statusCode) { 35691 case SystemStatusCode.networkFailure: 35692 case SystemStatusCode.timeoutFailure: 35693 case SystemStatusCode.contentTypeMismatch: 35694 return this.reload({ 35695 reason: "request_failed", 35696 context: { 35697 statusCode 35698 } 35699 }); 35700 default: 35701 return visit2.loadResponse(); 35702 } 35703 } 35704 visitRequestFinished(_visit) { 35705 } 35706 visitCompleted(_visit) { 35707 this.progressBar.setValue(1); 35708 this.hideVisitProgressBar(); 35709 } 35710 pageInvalidated(reason) { 35711 this.reload(reason); 35712 } 35713 visitFailed(_visit) { 35714 this.progressBar.setValue(1); 35715 this.hideVisitProgressBar(); 35716 } 35717 visitRendered(_visit) { 35718 } 35719 // Link prefetching 35720 linkPrefetchingIsEnabledForLocation(location2) { 35721 return true; 35722 } 35723 // Form Submission Delegate 35724 formSubmissionStarted(_formSubmission) { 35725 this.progressBar.setValue(0); 35726 this.showFormProgressBarAfterDelay(); 35727 } 35728 formSubmissionFinished(_formSubmission) { 35729 this.progressBar.setValue(1); 35730 this.hideFormProgressBar(); 35731 } 35732 // Private 35733 showVisitProgressBarAfterDelay() { 35734 this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay); 35735 } 35736 hideVisitProgressBar() { 35737 this.progressBar.hide(); 35738 if (this.visitProgressBarTimeout != null) { 35739 window.clearTimeout(this.visitProgressBarTimeout); 35740 delete this.visitProgressBarTimeout; 35741 } 35742 } 35743 showFormProgressBarAfterDelay() { 35744 if (this.formProgressBarTimeout == null) { 35745 this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay); 35746 } 35747 } 35748 hideFormProgressBar() { 35749 this.progressBar.hide(); 35750 if (this.formProgressBarTimeout != null) { 35751 window.clearTimeout(this.formProgressBarTimeout); 35752 delete this.formProgressBarTimeout; 35753 } 35754 } 35755 showProgressBar = () => { 35756 this.progressBar.show(); 35757 }; 35758 reload(reason) { 35759 dispatch("turbo:reload", { detail: reason }); 35760 window.location.href = (this.redirectedToLocation || this.location)?.toString() || window.location.href; 35761 } 35762 get navigator() { 35763 return this.session.navigator; 35764 } 35765}; 35766var CacheObserver = class { 35767 selector = "[data-turbo-temporary]"; 35768 started = false; 35769 start() { 35770 if (!this.started) { 35771 this.started = true; 35772 addEventListener("turbo:before-cache", this.removeTemporaryElements, false); 35773 } 35774 } 35775 stop() { 35776 if (this.started) { 35777 this.started = false; 35778 removeEventListener("turbo:before-cache", this.removeTemporaryElements, false); 35779 } 35780 } 35781 removeTemporaryElements = (_event) => { 35782 for (const element of this.temporaryElements) { 35783 element.remove(); 35784 } 35785 }; 35786 get temporaryElements() { 35787 return [...document.querySelectorAll(this.selector)]; 35788 } 35789}; 35790var FrameRedirector = class { 35791 constructor(session2, element) { 35792 this.session = session2; 35793 this.element = element; 35794 this.linkInterceptor = new LinkInterceptor(this, element); 35795 this.formSubmitObserver = new FormSubmitObserver(this, element); 35796 } 35797 start() { 35798 this.linkInterceptor.start(); 35799 this.formSubmitObserver.start(); 35800 } 35801 stop() { 35802 this.linkInterceptor.stop(); 35803 this.formSubmitObserver.stop(); 35804 } 35805 // Link interceptor delegate 35806 shouldInterceptLinkClick(element, _location, _event) { 35807 return this.#shouldRedirect(element); 35808 } 35809 linkClickIntercepted(element, url, event) { 35810 const frame = this.#findFrameElement(element); 35811 if (frame) { 35812 frame.delegate.linkClickIntercepted(element, url, event); 35813 } 35814 } 35815 // Form submit observer delegate 35816 willSubmitForm(element, submitter2) { 35817 return element.closest("turbo-frame") == null && this.#shouldSubmit(element, submitter2) && this.#shouldRedirect(element, submitter2); 35818 } 35819 formSubmitted(element, submitter2) { 35820 const frame = this.#findFrameElement(element, submitter2); 35821 if (frame) { 35822 frame.delegate.formSubmitted(element, submitter2); 35823 } 35824 } 35825 #shouldSubmit(form, submitter2) { 35826 const action = getAction$1(form, submitter2); 35827 const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`); 35828 const rootLocation = expandURL(meta?.content ?? "/"); 35829 return this.#shouldRedirect(form, submitter2) && locationIsVisitable(action, rootLocation); 35830 } 35831 #shouldRedirect(element, submitter2) { 35832 const isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter2) : this.session.elementIsNavigatable(element); 35833 if (isNavigatable) { 35834 const frame = this.#findFrameElement(element, submitter2); 35835 return frame ? frame != element.closest("turbo-frame") : false; 35836 } else { 35837 return false; 35838 } 35839 } 35840 #findFrameElement(element, submitter2) { 35841 const id = submitter2?.getAttribute("data-turbo-frame") || element.getAttribute("data-turbo-frame"); 35842 if (id && id != "_top") { 35843 const frame = this.element.querySelector(`#${id}:not([disabled])`); 35844 if (frame instanceof FrameElement) { 35845 return frame; 35846 } 35847 } 35848 } 35849}; 35850var History = class { 35851 location; 35852 restorationIdentifier = uuid(); 35853 restorationData = {}; 35854 started = false; 35855 currentIndex = 0; 35856 constructor(delegate) { 35857 this.delegate = delegate; 35858 } 35859 start() { 35860 if (!this.started) { 35861 addEventListener("popstate", this.onPopState, false); 35862 this.currentIndex = history.state?.turbo?.restorationIndex || 0; 35863 this.started = true; 35864 this.replace(new URL(window.location.href)); 35865 } 35866 } 35867 stop() { 35868 if (this.started) { 35869 removeEventListener("popstate", this.onPopState, false); 35870 this.started = false; 35871 } 35872 } 35873 push(location2, restorationIdentifier) { 35874 this.update(history.pushState, location2, restorationIdentifier); 35875 } 35876 replace(location2, restorationIdentifier) { 35877 this.update(history.replaceState, location2, restorationIdentifier); 35878 } 35879 update(method, location2, restorationIdentifier = uuid()) { 35880 if (method === history.pushState) ++this.currentIndex; 35881 const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } }; 35882 method.call(history, state, "", location2.href); 35883 this.location = location2; 35884 this.restorationIdentifier = restorationIdentifier; 35885 } 35886 // Restoration data 35887 getRestorationDataForIdentifier(restorationIdentifier) { 35888 return this.restorationData[restorationIdentifier] || {}; 35889 } 35890 updateRestorationData(additionalData) { 35891 const { restorationIdentifier } = this; 35892 const restorationData = this.restorationData[restorationIdentifier]; 35893 this.restorationData[restorationIdentifier] = { 35894 ...restorationData, 35895 ...additionalData 35896 }; 35897 } 35898 // Scroll restoration 35899 assumeControlOfScrollRestoration() { 35900 if (!this.previousScrollRestoration) { 35901 this.previousScrollRestoration = history.scrollRestoration ?? "auto"; 35902 history.scrollRestoration = "manual"; 35903 } 35904 } 35905 relinquishControlOfScrollRestoration() { 35906 if (this.previousScrollRestoration) { 35907 history.scrollRestoration = this.previousScrollRestoration; 35908 delete this.previousScrollRestoration; 35909 } 35910 } 35911 // Event handlers 35912 onPopState = (event) => { 35913 const { turbo } = event.state || {}; 35914 this.location = new URL(window.location.href); 35915 if (turbo) { 35916 const { restorationIdentifier, restorationIndex } = turbo; 35917 this.restorationIdentifier = restorationIdentifier; 35918 const direction = restorationIndex > this.currentIndex ? "forward" : "back"; 35919 this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction); 35920 this.currentIndex = restorationIndex; 35921 } else { 35922 this.currentIndex++; 35923 this.delegate.historyPoppedWithEmptyState(this.location); 35924 } 35925 }; 35926}; 35927var LinkPrefetchObserver = class { 35928 started = false; 35929 #prefetchedLink = null; 35930 constructor(delegate, eventTarget) { 35931 this.delegate = delegate; 35932 this.eventTarget = eventTarget; 35933 } 35934 start() { 35935 if (this.started) return; 35936 if (this.eventTarget.readyState === "loading") { 35937 this.eventTarget.addEventListener("DOMContentLoaded", this.#enable, { once: true }); 35938 } else { 35939 this.#enable(); 35940 } 35941 } 35942 stop() { 35943 if (!this.started) return; 35944 this.eventTarget.removeEventListener("mouseenter", this.#tryToPrefetchRequest, { 35945 capture: true, 35946 passive: true 35947 }); 35948 this.eventTarget.removeEventListener("mouseleave", this.#cancelRequestIfObsolete, { 35949 capture: true, 35950 passive: true 35951 }); 35952 this.eventTarget.removeEventListener("turbo:before-fetch-request", this.#tryToUsePrefetchedRequest, true); 35953 this.started = false; 35954 } 35955 #enable = () => { 35956 this.eventTarget.addEventListener("mouseenter", this.#tryToPrefetchRequest, { 35957 capture: true, 35958 passive: true 35959 }); 35960 this.eventTarget.addEventListener("mouseleave", this.#cancelRequestIfObsolete, { 35961 capture: true, 35962 passive: true 35963 }); 35964 this.eventTarget.addEventListener("turbo:before-fetch-request", this.#tryToUsePrefetchedRequest, true); 35965 this.started = true; 35966 }; 35967 #tryToPrefetchRequest = (event) => { 35968 if (getMetaContent("turbo-prefetch") === "false") return; 35969 const target = event.target; 35970 const isLink = target.matches && target.matches("a[href]:not([target^=_]):not([download])"); 35971 if (isLink && this.#isPrefetchable(target)) { 35972 const link = target; 35973 const location2 = getLocationForLink(link); 35974 if (this.delegate.canPrefetchRequestToLocation(link, location2)) { 35975 this.#prefetchedLink = link; 35976 const fetchRequest = new FetchRequest( 35977 this, 35978 FetchMethod.get, 35979 location2, 35980 new URLSearchParams(), 35981 target 35982 ); 35983 fetchRequest.fetchOptions.priority = "low"; 35984 prefetchCache.putLater(location2, fetchRequest, this.#cacheTtl); 35985 } 35986 } 35987 }; 35988 #cancelRequestIfObsolete = (event) => { 35989 if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest(); 35990 }; 35991 #cancelPrefetchRequest = () => { 35992 prefetchCache.clear(); 35993 this.#prefetchedLink = null; 35994 }; 35995 #tryToUsePrefetchedRequest = (event) => { 35996 if (event.target.tagName !== "FORM" && event.detail.fetchOptions.method === "GET") { 35997 const cached = prefetchCache.get(event.detail.url); 35998 if (cached) { 35999 event.detail.fetchRequest = cached; 36000 } 36001 prefetchCache.clear(); 36002 } 36003 }; 36004 prepareRequest(request2) { 36005 const link = request2.target; 36006 request2.headers["X-Sec-Purpose"] = "prefetch"; 36007 const turboFrame = link.closest("turbo-frame"); 36008 const turboFrameTarget = link.getAttribute("data-turbo-frame") || turboFrame?.getAttribute("target") || turboFrame?.id; 36009 if (turboFrameTarget && turboFrameTarget !== "_top") { 36010 request2.headers["Turbo-Frame"] = turboFrameTarget; 36011 } 36012 } 36013 // Fetch request interface 36014 requestSucceededWithResponse() { 36015 } 36016 requestStarted(fetchRequest) { 36017 } 36018 requestErrored(fetchRequest) { 36019 } 36020 requestFinished(fetchRequest) { 36021 } 36022 requestPreventedHandlingResponse(fetchRequest, fetchResponse) { 36023 } 36024 requestFailedWithResponse(fetchRequest, fetchResponse) { 36025 } 36026 get #cacheTtl() { 36027 return Number(getMetaContent("turbo-prefetch-cache-time")) || cacheTtl; 36028 } 36029 #isPrefetchable(link) { 36030 const href = link.getAttribute("href"); 36031 if (!href) return false; 36032 if (unfetchableLink(link)) return false; 36033 if (linkToTheSamePage(link)) return false; 36034 if (linkOptsOut(link)) return false; 36035 if (nonSafeLink(link)) return false; 36036 if (eventPrevented(link)) return false; 36037 return true; 36038 } 36039}; 36040var unfetchableLink = (link) => { 36041 return link.origin !== document.location.origin || !["http:", "https:"].includes(link.protocol) || link.hasAttribute("target"); 36042}; 36043var linkToTheSamePage = (link) => { 36044 return link.pathname + link.search === document.location.pathname + document.location.search || link.href.startsWith("#"); 36045}; 36046var linkOptsOut = (link) => { 36047 if (link.getAttribute("data-turbo-prefetch") === "false") return true; 36048 if (link.getAttribute("data-turbo") === "false") return true; 36049 const turboPrefetchParent = findClosestRecursively(link, "[data-turbo-prefetch]"); 36050 if (turboPrefetchParent && turboPrefetchParent.getAttribute("data-turbo-prefetch") === "false") return true; 36051 return false; 36052}; 36053var nonSafeLink = (link) => { 36054 const turboMethod = link.getAttribute("data-turbo-method"); 36055 if (turboMethod && turboMethod.toLowerCase() !== "get") return true; 36056 if (isUJS(link)) return true; 36057 if (link.hasAttribute("data-turbo-confirm")) return true; 36058 if (link.hasAttribute("data-turbo-stream")) return true; 36059 return false; 36060}; 36061var isUJS = (link) => { 36062 return link.hasAttribute("data-remote") || link.hasAttribute("data-behavior") || link.hasAttribute("data-confirm") || link.hasAttribute("data-method"); 36063}; 36064var eventPrevented = (link) => { 36065 const event = dispatch("turbo:before-prefetch", { target: link, cancelable: true }); 36066 return event.defaultPrevented; 36067}; 36068var Navigator = class { 36069 constructor(delegate) { 36070 this.delegate = delegate; 36071 } 36072 proposeVisit(location2, options = {}) { 36073 if (this.delegate.allowsVisitingLocationWithAction(location2, options.action)) { 36074 this.delegate.visitProposedToLocation(location2, options); 36075 } 36076 } 36077 startVisit(locatable, restorationIdentifier, options = {}) { 36078 this.stop(); 36079 this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, { 36080 referrer: this.location, 36081 ...options 36082 }); 36083 this.currentVisit.start(); 36084 } 36085 submitForm(form, submitter2) { 36086 this.stop(); 36087 this.formSubmission = new FormSubmission(this, form, submitter2, true); 36088 this.formSubmission.start(); 36089 } 36090 stop() { 36091 if (this.formSubmission) { 36092 this.formSubmission.stop(); 36093 delete this.formSubmission; 36094 } 36095 if (this.currentVisit) { 36096 this.currentVisit.cancel(); 36097 delete this.currentVisit; 36098 } 36099 } 36100 get adapter() { 36101 return this.delegate.adapter; 36102 } 36103 get view() { 36104 return this.delegate.view; 36105 } 36106 get rootLocation() { 36107 return this.view.snapshot.rootLocation; 36108 } 36109 get history() { 36110 return this.delegate.history; 36111 } 36112 // Form submission delegate 36113 formSubmissionStarted(formSubmission) { 36114 if (typeof this.adapter.formSubmissionStarted === "function") { 36115 this.adapter.formSubmissionStarted(formSubmission); 36116 } 36117 } 36118 async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) { 36119 if (formSubmission == this.formSubmission) { 36120 const responseHTML = await fetchResponse.responseHTML; 36121 if (responseHTML) { 36122 const shouldCacheSnapshot = formSubmission.isSafe; 36123 if (!shouldCacheSnapshot) { 36124 this.view.clearSnapshotCache(); 36125 } 36126 const { statusCode, redirected } = fetchResponse; 36127 const action = this.#getActionForFormSubmission(formSubmission, fetchResponse); 36128 const visitOptions = { 36129 action, 36130 shouldCacheSnapshot, 36131 response: { statusCode, responseHTML, redirected } 36132 }; 36133 this.proposeVisit(fetchResponse.location, visitOptions); 36134 } 36135 } 36136 } 36137 async formSubmissionFailedWithResponse(formSubmission, fetchResponse) { 36138 const responseHTML = await fetchResponse.responseHTML; 36139 if (responseHTML) { 36140 const snapshot = PageSnapshot.fromHTMLString(responseHTML); 36141 if (fetchResponse.serverError) { 36142 await this.view.renderError(snapshot, this.currentVisit); 36143 } else { 36144 await this.view.renderPage(snapshot, false, true, this.currentVisit); 36145 } 36146 if (snapshot.refreshScroll !== "preserve") { 36147 this.view.scrollToTop(); 36148 } 36149 this.view.clearSnapshotCache(); 36150 } 36151 } 36152 formSubmissionErrored(formSubmission, error2) { 36153 console.error(error2); 36154 } 36155 formSubmissionFinished(formSubmission) { 36156 if (typeof this.adapter.formSubmissionFinished === "function") { 36157 this.adapter.formSubmissionFinished(formSubmission); 36158 } 36159 } 36160 // Link prefetching 36161 linkPrefetchingIsEnabledForLocation(location2) { 36162 if (typeof this.adapter.linkPrefetchingIsEnabledForLocation === "function") { 36163 return this.adapter.linkPrefetchingIsEnabledForLocation(location2); 36164 } 36165 return true; 36166 } 36167 // Visit delegate 36168 visitStarted(visit2) { 36169 this.delegate.visitStarted(visit2); 36170 } 36171 visitCompleted(visit2) { 36172 this.delegate.visitCompleted(visit2); 36173 delete this.currentVisit; 36174 } 36175 // Same-page links are no longer handled with a Visit. 36176 // This method is still needed for Turbo Native adapters. 36177 locationWithActionIsSamePage(location2, action) { 36178 return false; 36179 } 36180 // Visits 36181 get location() { 36182 return this.history.location; 36183 } 36184 get restorationIdentifier() { 36185 return this.history.restorationIdentifier; 36186 } 36187 #getActionForFormSubmission(formSubmission, fetchResponse) { 36188 const { submitter: submitter2, formElement } = formSubmission; 36189 return getVisitAction(submitter2, formElement) || this.#getDefaultAction(fetchResponse); 36190 } 36191 #getDefaultAction(fetchResponse) { 36192 const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href; 36193 return sameLocationRedirect ? "replace" : "advance"; 36194 } 36195}; 36196var PageStage = { 36197 initial: 0, 36198 loading: 1, 36199 interactive: 2, 36200 complete: 3 36201}; 36202var PageObserver = class { 36203 stage = PageStage.initial; 36204 started = false; 36205 constructor(delegate) { 36206 this.delegate = delegate; 36207 } 36208 start() { 36209 if (!this.started) { 36210 if (this.stage == PageStage.initial) { 36211 this.stage = PageStage.loading; 36212 } 36213 document.addEventListener("readystatechange", this.interpretReadyState, false); 36214 addEventListener("pagehide", this.pageWillUnload, false); 36215 this.started = true; 36216 } 36217 } 36218 stop() { 36219 if (this.started) { 36220 document.removeEventListener("readystatechange", this.interpretReadyState, false); 36221 removeEventListener("pagehide", this.pageWillUnload, false); 36222 this.started = false; 36223 } 36224 } 36225 interpretReadyState = () => { 36226 const { readyState } = this; 36227 if (readyState == "interactive") { 36228 this.pageIsInteractive(); 36229 } else if (readyState == "complete") { 36230 this.pageIsComplete(); 36231 } 36232 }; 36233 pageIsInteractive() { 36234 if (this.stage == PageStage.loading) { 36235 this.stage = PageStage.interactive; 36236 this.delegate.pageBecameInteractive(); 36237 } 36238 } 36239 pageIsComplete() { 36240 this.pageIsInteractive(); 36241 if (this.stage == PageStage.interactive) { 36242 this.stage = PageStage.complete; 36243 this.delegate.pageLoaded(); 36244 } 36245 } 36246 pageWillUnload = () => { 36247 this.delegate.pageWillUnload(); 36248 }; 36249 get readyState() { 36250 return document.readyState; 36251 } 36252}; 36253var ScrollObserver = class { 36254 started = false; 36255 constructor(delegate) { 36256 this.delegate = delegate; 36257 } 36258 start() { 36259 if (!this.started) { 36260 addEventListener("scroll", this.onScroll, false); 36261 this.onScroll(); 36262 this.started = true; 36263 } 36264 } 36265 stop() { 36266 if (this.started) { 36267 removeEventListener("scroll", this.onScroll, false); 36268 this.started = false; 36269 } 36270 } 36271 onScroll = () => { 36272 this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset }); 36273 }; 36274 // Private 36275 updatePosition(position) { 36276 this.delegate.scrollPositionChanged(position); 36277 } 36278}; 36279var StreamMessageRenderer = class { 36280 render({ fragment }) { 36281 Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => { 36282 withAutofocusFromFragment(fragment, () => { 36283 withPreservedFocus(() => { 36284 document.documentElement.appendChild(fragment); 36285 }); 36286 }); 36287 }); 36288 } 36289 // Bardo delegate 36290 enteringBardo(currentPermanentElement, newPermanentElement) { 36291 newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true)); 36292 } 36293 leavingBardo() { 36294 } 36295}; 36296function getPermanentElementMapForFragment(fragment) { 36297 const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement); 36298 const permanentElementMap = {}; 36299 for (const permanentElementInDocument of permanentElementsInDocument) { 36300 const { id } = permanentElementInDocument; 36301 for (const streamElement of fragment.querySelectorAll("turbo-stream")) { 36302 const elementInStream = getPermanentElementById(streamElement.templateElement.content, id); 36303 if (elementInStream) { 36304 permanentElementMap[id] = [permanentElementInDocument, elementInStream]; 36305 } 36306 } 36307 } 36308 return permanentElementMap; 36309} 36310async function withAutofocusFromFragment(fragment, callback) { 36311 const generatedID = `turbo-stream-autofocus-${uuid()}`; 36312 const turboStreams = fragment.querySelectorAll("turbo-stream"); 36313 const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams); 36314 let willAutofocusId = null; 36315 if (elementWithAutofocus) { 36316 if (elementWithAutofocus.id) { 36317 willAutofocusId = elementWithAutofocus.id; 36318 } else { 36319 willAutofocusId = generatedID; 36320 } 36321 elementWithAutofocus.id = willAutofocusId; 36322 } 36323 callback(); 36324 await nextRepaint(); 36325 const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body; 36326 if (hasNoActiveElement && willAutofocusId) { 36327 const elementToAutofocus = document.getElementById(willAutofocusId); 36328 if (elementIsFocusable(elementToAutofocus)) { 36329 elementToAutofocus.focus(); 36330 } 36331 if (elementToAutofocus && elementToAutofocus.id == generatedID) { 36332 elementToAutofocus.removeAttribute("id"); 36333 } 36334 } 36335} 36336async function withPreservedFocus(callback) { 36337 const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement); 36338 const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id; 36339 if (restoreFocusTo) { 36340 const elementToFocus = document.getElementById(restoreFocusTo); 36341 if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) { 36342 elementToFocus.focus(); 36343 } 36344 } 36345} 36346function firstAutofocusableElementInStreams(nodeListOfStreamElements) { 36347 for (const streamElement of nodeListOfStreamElements) { 36348 const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content); 36349 if (elementWithAutofocus) return elementWithAutofocus; 36350 } 36351 return null; 36352} 36353var StreamObserver = class { 36354 sources = /* @__PURE__ */ new Set(); 36355 #started = false; 36356 constructor(delegate) { 36357 this.delegate = delegate; 36358 } 36359 start() { 36360 if (!this.#started) { 36361 this.#started = true; 36362 addEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false); 36363 } 36364 } 36365 stop() { 36366 if (this.#started) { 36367 this.#started = false; 36368 removeEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false); 36369 } 36370 } 36371 connectStreamSource(source) { 36372 if (!this.streamSourceIsConnected(source)) { 36373 this.sources.add(source); 36374 source.addEventListener("message", this.receiveMessageEvent, false); 36375 } 36376 } 36377 disconnectStreamSource(source) { 36378 if (this.streamSourceIsConnected(source)) { 36379 this.sources.delete(source); 36380 source.removeEventListener("message", this.receiveMessageEvent, false); 36381 } 36382 } 36383 streamSourceIsConnected(source) { 36384 return this.sources.has(source); 36385 } 36386 inspectFetchResponse = (event) => { 36387 const response = fetchResponseFromEvent(event); 36388 if (response && fetchResponseIsStream(response)) { 36389 event.preventDefault(); 36390 this.receiveMessageResponse(response); 36391 } 36392 }; 36393 receiveMessageEvent = (event) => { 36394 if (this.#started && typeof event.data == "string") { 36395 this.receiveMessageHTML(event.data); 36396 } 36397 }; 36398 async receiveMessageResponse(response) { 36399 const html = await response.responseHTML; 36400 if (html) { 36401 this.receiveMessageHTML(html); 36402 } 36403 } 36404 receiveMessageHTML(html) { 36405 this.delegate.receivedMessageFromStream(StreamMessage.wrap(html)); 36406 } 36407}; 36408function fetchResponseFromEvent(event) { 36409 const fetchResponse = event.detail?.fetchResponse; 36410 if (fetchResponse instanceof FetchResponse) { 36411 return fetchResponse; 36412 } 36413} 36414function fetchResponseIsStream(response) { 36415 const contentType = response.contentType ?? ""; 36416 return contentType.startsWith(StreamMessage.contentType); 36417} 36418var ErrorRenderer = class extends Renderer { 36419 static renderElement(currentElement, newElement) { 36420 const { documentElement, body } = document; 36421 documentElement.replaceChild(newElement, body); 36422 } 36423 async render() { 36424 this.replaceHeadAndBody(); 36425 this.activateScriptElements(); 36426 } 36427 replaceHeadAndBody() { 36428 const { documentElement, head } = document; 36429 documentElement.replaceChild(this.newHead, head); 36430 this.renderElement(this.currentElement, this.newElement); 36431 } 36432 activateScriptElements() { 36433 for (const replaceableElement of this.scriptElements) { 36434 const parentNode = replaceableElement.parentNode; 36435 if (parentNode) { 36436 const element = activateScriptElement(replaceableElement); 36437 parentNode.replaceChild(element, replaceableElement); 36438 } 36439 } 36440 } 36441 get newHead() { 36442 return this.newSnapshot.headSnapshot.element; 36443 } 36444 get scriptElements() { 36445 return document.documentElement.querySelectorAll("script"); 36446 } 36447}; 36448var PageRenderer = class extends Renderer { 36449 static renderElement(currentElement, newElement) { 36450 if (document.body && newElement instanceof HTMLBodyElement) { 36451 document.body.replaceWith(newElement); 36452 } else { 36453 document.documentElement.appendChild(newElement); 36454 } 36455 } 36456 get shouldRender() { 36457 return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical; 36458 } 36459 get reloadReason() { 36460 if (!this.newSnapshot.isVisitable) { 36461 return { 36462 reason: "turbo_visit_control_is_reload" 36463 }; 36464 } 36465 if (!this.trackedElementsAreIdentical) { 36466 return { 36467 reason: "tracked_element_mismatch" 36468 }; 36469 } 36470 } 36471 async prepareToRender() { 36472 this.#setLanguage(); 36473 await this.mergeHead(); 36474 } 36475 async render() { 36476 if (this.willRender) { 36477 await this.replaceBody(); 36478 } 36479 } 36480 finishRendering() { 36481 super.finishRendering(); 36482 if (!this.isPreview) { 36483 this.focusFirstAutofocusableElement(); 36484 } 36485 } 36486 get currentHeadSnapshot() { 36487 return this.currentSnapshot.headSnapshot; 36488 } 36489 get newHeadSnapshot() { 36490 return this.newSnapshot.headSnapshot; 36491 } 36492 get newElement() { 36493 return this.newSnapshot.element; 36494 } 36495 #setLanguage() { 36496 const { documentElement } = this.currentSnapshot; 36497 const { dir, lang } = this.newSnapshot; 36498 if (lang) { 36499 documentElement.setAttribute("lang", lang); 36500 } else { 36501 documentElement.removeAttribute("lang"); 36502 } 36503 if (dir) { 36504 documentElement.setAttribute("dir", dir); 36505 } else { 36506 documentElement.removeAttribute("dir"); 36507 } 36508 } 36509 async mergeHead() { 36510 const mergedHeadElements = this.mergeProvisionalElements(); 36511 const newStylesheetElements = this.copyNewHeadStylesheetElements(); 36512 this.copyNewHeadScriptElements(); 36513 await mergedHeadElements; 36514 await newStylesheetElements; 36515 if (this.willRender) { 36516 this.removeUnusedDynamicStylesheetElements(); 36517 } 36518 } 36519 async replaceBody() { 36520 await this.preservingPermanentElements(async () => { 36521 this.activateNewBody(); 36522 await this.assignNewBody(); 36523 }); 36524 } 36525 get trackedElementsAreIdentical() { 36526 return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature; 36527 } 36528 async copyNewHeadStylesheetElements() { 36529 const loadingElements = []; 36530 for (const element of this.newHeadStylesheetElements) { 36531 loadingElements.push(waitForLoad(element)); 36532 document.head.appendChild(element); 36533 } 36534 await Promise.all(loadingElements); 36535 } 36536 copyNewHeadScriptElements() { 36537 for (const element of this.newHeadScriptElements) { 36538 document.head.appendChild(activateScriptElement(element)); 36539 } 36540 } 36541 removeUnusedDynamicStylesheetElements() { 36542 for (const element of this.unusedDynamicStylesheetElements) { 36543 document.head.removeChild(element); 36544 } 36545 } 36546 async mergeProvisionalElements() { 36547 const newHeadElements = [...this.newHeadProvisionalElements]; 36548 for (const element of this.currentHeadProvisionalElements) { 36549 if (!this.isCurrentElementInElementList(element, newHeadElements)) { 36550 document.head.removeChild(element); 36551 } 36552 } 36553 for (const element of newHeadElements) { 36554 document.head.appendChild(element); 36555 } 36556 } 36557 isCurrentElementInElementList(element, elementList) { 36558 for (const [index, newElement] of elementList.entries()) { 36559 if (element.tagName == "TITLE") { 36560 if (newElement.tagName != "TITLE") { 36561 continue; 36562 } 36563 if (element.innerHTML == newElement.innerHTML) { 36564 elementList.splice(index, 1); 36565 return true; 36566 } 36567 } 36568 if (newElement.isEqualNode(element)) { 36569 elementList.splice(index, 1); 36570 return true; 36571 } 36572 } 36573 return false; 36574 } 36575 removeCurrentHeadProvisionalElements() { 36576 for (const element of this.currentHeadProvisionalElements) { 36577 document.head.removeChild(element); 36578 } 36579 } 36580 copyNewHeadProvisionalElements() { 36581 for (const element of this.newHeadProvisionalElements) { 36582 document.head.appendChild(element); 36583 } 36584 } 36585 activateNewBody() { 36586 document.adoptNode(this.newElement); 36587 this.removeNoscriptElements(); 36588 this.activateNewBodyScriptElements(); 36589 } 36590 removeNoscriptElements() { 36591 for (const noscriptElement of this.newElement.querySelectorAll("noscript")) { 36592 noscriptElement.remove(); 36593 } 36594 } 36595 activateNewBodyScriptElements() { 36596 for (const inertScriptElement of this.newBodyScriptElements) { 36597 const activatedScriptElement = activateScriptElement(inertScriptElement); 36598 inertScriptElement.replaceWith(activatedScriptElement); 36599 } 36600 } 36601 async assignNewBody() { 36602 await this.renderElement(this.currentElement, this.newElement); 36603 } 36604 get unusedDynamicStylesheetElements() { 36605 return this.oldHeadStylesheetElements.filter((element) => { 36606 return element.getAttribute("data-turbo-track") === "dynamic"; 36607 }); 36608 } 36609 get oldHeadStylesheetElements() { 36610 return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot); 36611 } 36612 get newHeadStylesheetElements() { 36613 return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot); 36614 } 36615 get newHeadScriptElements() { 36616 return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot); 36617 } 36618 get currentHeadProvisionalElements() { 36619 return this.currentHeadSnapshot.provisionalElements; 36620 } 36621 get newHeadProvisionalElements() { 36622 return this.newHeadSnapshot.provisionalElements; 36623 } 36624 get newBodyScriptElements() { 36625 return this.newElement.querySelectorAll("script"); 36626 } 36627}; 36628var MorphingPageRenderer = class extends PageRenderer { 36629 static renderElement(currentElement, newElement) { 36630 morphElements(currentElement, newElement, { 36631 callbacks: { 36632 beforeNodeMorphed: (node, newNode) => { 36633 if (shouldRefreshFrameWithMorphing(node, newNode) && !closestFrameReloadableWithMorphing(node)) { 36634 node.reload(); 36635 return false; 36636 } 36637 return true; 36638 } 36639 } 36640 }); 36641 dispatch("turbo:morph", { detail: { currentElement, newElement } }); 36642 } 36643 async preservingPermanentElements(callback) { 36644 return await callback(); 36645 } 36646 get renderMethod() { 36647 return "morph"; 36648 } 36649 get shouldAutofocus() { 36650 return false; 36651 } 36652}; 36653var SnapshotCache = class extends LRUCache { 36654 constructor(size) { 36655 super(size, toCacheKey); 36656 } 36657 get snapshots() { 36658 return this.entries; 36659 } 36660}; 36661var PageView = class extends View { 36662 snapshotCache = new SnapshotCache(10); 36663 lastRenderedLocation = new URL(location.href); 36664 forceReloaded = false; 36665 shouldTransitionTo(newSnapshot) { 36666 return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions; 36667 } 36668 renderPage(snapshot, isPreview = false, willRender = true, visit2) { 36669 const shouldMorphPage = this.isPageRefresh(visit2) && (visit2?.refresh?.method || this.snapshot.refreshMethod) === "morph"; 36670 const rendererClass = shouldMorphPage ? MorphingPageRenderer : PageRenderer; 36671 const renderer = new rendererClass(this.snapshot, snapshot, isPreview, willRender); 36672 if (!renderer.shouldRender) { 36673 this.forceReloaded = true; 36674 } else { 36675 visit2?.changeHistory(); 36676 } 36677 return this.render(renderer); 36678 } 36679 renderError(snapshot, visit2) { 36680 visit2?.changeHistory(); 36681 const renderer = new ErrorRenderer(this.snapshot, snapshot, false); 36682 return this.render(renderer); 36683 } 36684 clearSnapshotCache() { 36685 this.snapshotCache.clear(); 36686 } 36687 async cacheSnapshot(snapshot = this.snapshot) { 36688 if (snapshot.isCacheable) { 36689 this.delegate.viewWillCacheSnapshot(); 36690 const { lastRenderedLocation: location2 } = this; 36691 await nextEventLoopTick(); 36692 const cachedSnapshot = snapshot.clone(); 36693 this.snapshotCache.put(location2, cachedSnapshot); 36694 return cachedSnapshot; 36695 } 36696 } 36697 getCachedSnapshotForLocation(location2) { 36698 return this.snapshotCache.get(location2); 36699 } 36700 isPageRefresh(visit2) { 36701 return !visit2 || this.lastRenderedLocation.pathname === visit2.location.pathname && visit2.action === "replace"; 36702 } 36703 shouldPreserveScrollPosition(visit2) { 36704 return this.isPageRefresh(visit2) && (visit2?.refresh?.scroll || this.snapshot.refreshScroll) === "preserve"; 36705 } 36706 get snapshot() { 36707 return PageSnapshot.fromElement(this.element); 36708 } 36709}; 36710var Preloader = class { 36711 selector = "a[data-turbo-preload]"; 36712 constructor(delegate, snapshotCache) { 36713 this.delegate = delegate; 36714 this.snapshotCache = snapshotCache; 36715 } 36716 start() { 36717 if (document.readyState === "loading") { 36718 document.addEventListener("DOMContentLoaded", this.#preloadAll); 36719 } else { 36720 this.preloadOnLoadLinksForView(document.body); 36721 } 36722 } 36723 stop() { 36724 document.removeEventListener("DOMContentLoaded", this.#preloadAll); 36725 } 36726 preloadOnLoadLinksForView(element) { 36727 for (const link of element.querySelectorAll(this.selector)) { 36728 if (this.delegate.shouldPreloadLink(link)) { 36729 this.preloadURL(link); 36730 } 36731 } 36732 } 36733 async preloadURL(link) { 36734 const location2 = new URL(link.href); 36735 if (this.snapshotCache.has(location2)) { 36736 return; 36737 } 36738 const fetchRequest = new FetchRequest(this, FetchMethod.get, location2, new URLSearchParams(), link); 36739 await fetchRequest.perform(); 36740 } 36741 // Fetch request delegate 36742 prepareRequest(fetchRequest) { 36743 fetchRequest.headers["X-Sec-Purpose"] = "prefetch"; 36744 } 36745 async requestSucceededWithResponse(fetchRequest, fetchResponse) { 36746 try { 36747 const responseHTML = await fetchResponse.responseHTML; 36748 const snapshot = PageSnapshot.fromHTMLString(responseHTML); 36749 this.snapshotCache.put(fetchRequest.url, snapshot); 36750 } catch (_3) { 36751 } 36752 } 36753 requestStarted(fetchRequest) { 36754 } 36755 requestErrored(fetchRequest) { 36756 } 36757 requestFinished(fetchRequest) { 36758 } 36759 requestPreventedHandlingResponse(fetchRequest, fetchResponse) { 36760 } 36761 requestFailedWithResponse(fetchRequest, fetchResponse) { 36762 } 36763 #preloadAll = () => { 36764 this.preloadOnLoadLinksForView(document.body); 36765 }; 36766}; 36767var Cache = class { 36768 constructor(session2) { 36769 this.session = session2; 36770 } 36771 clear() { 36772 this.session.clearCache(); 36773 } 36774 resetCacheControl() { 36775 this.#setCacheControl(""); 36776 } 36777 exemptPageFromCache() { 36778 this.#setCacheControl("no-cache"); 36779 } 36780 exemptPageFromPreview() { 36781 this.#setCacheControl("no-preview"); 36782 } 36783 #setCacheControl(value) { 36784 setMetaContent("turbo-cache-control", value); 36785 } 36786}; 36787var Session = class { 36788 navigator = new Navigator(this); 36789 history = new History(this); 36790 view = new PageView(this, document.documentElement); 36791 adapter = new BrowserAdapter(this); 36792 pageObserver = new PageObserver(this); 36793 cacheObserver = new CacheObserver(); 36794 linkPrefetchObserver = new LinkPrefetchObserver(this, document); 36795 linkClickObserver = new LinkClickObserver(this, window); 36796 formSubmitObserver = new FormSubmitObserver(this, document); 36797 scrollObserver = new ScrollObserver(this); 36798 streamObserver = new StreamObserver(this); 36799 formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement); 36800 frameRedirector = new FrameRedirector(this, document.documentElement); 36801 streamMessageRenderer = new StreamMessageRenderer(); 36802 cache = new Cache(this); 36803 enabled = true; 36804 started = false; 36805 #pageRefreshDebouncePeriod = 150; 36806 constructor(recentRequests2) { 36807 this.recentRequests = recentRequests2; 36808 this.preloader = new Preloader(this, this.view.snapshotCache); 36809 this.debouncedRefresh = this.refresh; 36810 this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod; 36811 } 36812 start() { 36813 if (!this.started) { 36814 this.pageObserver.start(); 36815 this.cacheObserver.start(); 36816 this.linkPrefetchObserver.start(); 36817 this.formLinkClickObserver.start(); 36818 this.linkClickObserver.start(); 36819 this.formSubmitObserver.start(); 36820 this.scrollObserver.start(); 36821 this.streamObserver.start(); 36822 this.frameRedirector.start(); 36823 this.history.start(); 36824 this.preloader.start(); 36825 this.started = true; 36826 this.enabled = true; 36827 } 36828 } 36829 disable() { 36830 this.enabled = false; 36831 } 36832 stop() { 36833 if (this.started) { 36834 this.pageObserver.stop(); 36835 this.cacheObserver.stop(); 36836 this.linkPrefetchObserver.stop(); 36837 this.formLinkClickObserver.stop(); 36838 this.linkClickObserver.stop(); 36839 this.formSubmitObserver.stop(); 36840 this.scrollObserver.stop(); 36841 this.streamObserver.stop(); 36842 this.frameRedirector.stop(); 36843 this.history.stop(); 36844 this.preloader.stop(); 36845 this.started = false; 36846 } 36847 } 36848 registerAdapter(adapter) { 36849 this.adapter = adapter; 36850 } 36851 visit(location2, options = {}) { 36852 const frameElement = options.frame ? document.getElementById(options.frame) : null; 36853 if (frameElement instanceof FrameElement) { 36854 const action = options.action || getVisitAction(frameElement); 36855 frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action); 36856 frameElement.src = location2.toString(); 36857 } else { 36858 this.navigator.proposeVisit(expandURL(location2), options); 36859 } 36860 } 36861 refresh(url, options = {}) { 36862 options = typeof options === "string" ? { requestId: options } : options; 36863 const { method, requestId, scroll } = options; 36864 const isRecentRequest = requestId && this.recentRequests.has(requestId); 36865 const isCurrentUrl = url === document.baseURI; 36866 if (!isRecentRequest && !this.navigator.currentVisit && isCurrentUrl) { 36867 this.visit(url, { action: "replace", shouldCacheSnapshot: false, refresh: { method, scroll } }); 36868 } 36869 } 36870 connectStreamSource(source) { 36871 this.streamObserver.connectStreamSource(source); 36872 } 36873 disconnectStreamSource(source) { 36874 this.streamObserver.disconnectStreamSource(source); 36875 } 36876 renderStreamMessage(message) { 36877 this.streamMessageRenderer.render(StreamMessage.wrap(message)); 36878 } 36879 clearCache() { 36880 this.view.clearSnapshotCache(); 36881 } 36882 setProgressBarDelay(delay) { 36883 console.warn( 36884 "Please replace `session.setProgressBarDelay(delay)` with `session.progressBarDelay = delay`. The function is deprecated and will be removed in a future version of Turbo.`" 36885 ); 36886 this.progressBarDelay = delay; 36887 } 36888 set progressBarDelay(delay) { 36889 config.drive.progressBarDelay = delay; 36890 } 36891 get progressBarDelay() { 36892 return config.drive.progressBarDelay; 36893 } 36894 set drive(value) { 36895 config.drive.enabled = value; 36896 } 36897 get drive() { 36898 return config.drive.enabled; 36899 } 36900 set formMode(value) { 36901 config.forms.mode = value; 36902 } 36903 get formMode() { 36904 return config.forms.mode; 36905 } 36906 get location() { 36907 return this.history.location; 36908 } 36909 get restorationIdentifier() { 36910 return this.history.restorationIdentifier; 36911 } 36912 get pageRefreshDebouncePeriod() { 36913 return this.#pageRefreshDebouncePeriod; 36914 } 36915 set pageRefreshDebouncePeriod(value) { 36916 this.refresh = debounce(this.debouncedRefresh.bind(this), value); 36917 this.#pageRefreshDebouncePeriod = value; 36918 } 36919 // Preloader delegate 36920 shouldPreloadLink(element) { 36921 const isUnsafe = element.hasAttribute("data-turbo-method"); 36922 const isStream = element.hasAttribute("data-turbo-stream"); 36923 const frameTarget = element.getAttribute("data-turbo-frame"); 36924 const frame = frameTarget == "_top" ? null : document.getElementById(frameTarget) || findClosestRecursively(element, "turbo-frame:not([disabled])"); 36925 if (isUnsafe || isStream || frame instanceof FrameElement) { 36926 return false; 36927 } else { 36928 const location2 = new URL(element.href); 36929 return this.elementIsNavigatable(element) && locationIsVisitable(location2, this.snapshot.rootLocation); 36930 } 36931 } 36932 // History delegate 36933 historyPoppedToLocationWithRestorationIdentifierAndDirection(location2, restorationIdentifier, direction) { 36934 if (this.enabled) { 36935 this.navigator.startVisit(location2, restorationIdentifier, { 36936 action: "restore", 36937 historyChanged: true, 36938 direction 36939 }); 36940 } else { 36941 this.adapter.pageInvalidated({ 36942 reason: "turbo_disabled" 36943 }); 36944 } 36945 } 36946 historyPoppedWithEmptyState(location2) { 36947 this.history.replace(location2); 36948 this.view.lastRenderedLocation = location2; 36949 this.view.cacheSnapshot(); 36950 } 36951 // Scroll observer delegate 36952 scrollPositionChanged(position) { 36953 this.history.updateRestorationData({ scrollPosition: position }); 36954 } 36955 // Form click observer delegate 36956 willSubmitFormLinkToLocation(link, location2) { 36957 return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation); 36958 } 36959 submittedFormLinkToLocation() { 36960 } 36961 // Link hover observer delegate 36962 canPrefetchRequestToLocation(link, location2) { 36963 return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.navigator.linkPrefetchingIsEnabledForLocation(location2); 36964 } 36965 // Link click observer delegate 36966 willFollowLinkToLocation(link, location2, event) { 36967 return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location2, event); 36968 } 36969 followedLinkToLocation(link, location2) { 36970 const action = this.getActionForLink(link); 36971 const acceptsStreamResponse = link.hasAttribute("data-turbo-stream"); 36972 this.visit(location2.href, { action, acceptsStreamResponse }); 36973 } 36974 // Navigator delegate 36975 allowsVisitingLocationWithAction(location2, action) { 36976 return this.applicationAllowsVisitingLocation(location2); 36977 } 36978 visitProposedToLocation(location2, options) { 36979 extendURLWithDeprecatedProperties(location2); 36980 this.adapter.visitProposedToLocation(location2, options); 36981 } 36982 // Visit delegate 36983 visitStarted(visit2) { 36984 if (!visit2.acceptsStreamResponse) { 36985 markAsBusy(document.documentElement); 36986 this.view.markVisitDirection(visit2.direction); 36987 } 36988 extendURLWithDeprecatedProperties(visit2.location); 36989 this.notifyApplicationAfterVisitingLocation(visit2.location, visit2.action); 36990 } 36991 visitCompleted(visit2) { 36992 this.view.unmarkVisitDirection(); 36993 clearBusyState(document.documentElement); 36994 this.notifyApplicationAfterPageLoad(visit2.getTimingMetrics()); 36995 } 36996 // Form submit observer delegate 36997 willSubmitForm(form, submitter2) { 36998 const action = getAction$1(form, submitter2); 36999 return this.submissionIsNavigatable(form, submitter2) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation); 37000 } 37001 formSubmitted(form, submitter2) { 37002 this.navigator.submitForm(form, submitter2); 37003 } 37004 // Page observer delegate 37005 pageBecameInteractive() { 37006 this.view.lastRenderedLocation = this.location; 37007 this.notifyApplicationAfterPageLoad(); 37008 } 37009 pageLoaded() { 37010 this.history.assumeControlOfScrollRestoration(); 37011 } 37012 pageWillUnload() { 37013 this.history.relinquishControlOfScrollRestoration(); 37014 } 37015 // Stream observer delegate 37016 receivedMessageFromStream(message) { 37017 this.renderStreamMessage(message); 37018 } 37019 // Page view delegate 37020 viewWillCacheSnapshot() { 37021 this.notifyApplicationBeforeCachingSnapshot(); 37022 } 37023 allowsImmediateRender({ element }, options) { 37024 const event = this.notifyApplicationBeforeRender(element, options); 37025 const { 37026 defaultPrevented, 37027 detail: { render } 37028 } = event; 37029 if (this.view.renderer && render) { 37030 this.view.renderer.renderElement = render; 37031 } 37032 return !defaultPrevented; 37033 } 37034 viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) { 37035 this.view.lastRenderedLocation = this.history.location; 37036 this.notifyApplicationAfterRender(renderMethod); 37037 } 37038 preloadOnLoadLinksForView(element) { 37039 this.preloader.preloadOnLoadLinksForView(element); 37040 } 37041 viewInvalidated(reason) { 37042 this.adapter.pageInvalidated(reason); 37043 } 37044 // Frame element 37045 frameLoaded(frame) { 37046 this.notifyApplicationAfterFrameLoad(frame); 37047 } 37048 frameRendered(fetchResponse, frame) { 37049 this.notifyApplicationAfterFrameRender(fetchResponse, frame); 37050 } 37051 // Application events 37052 applicationAllowsFollowingLinkToLocation(link, location2, ev) { 37053 const event = this.notifyApplicationAfterClickingLinkToLocation(link, location2, ev); 37054 return !event.defaultPrevented; 37055 } 37056 applicationAllowsVisitingLocation(location2) { 37057 const event = this.notifyApplicationBeforeVisitingLocation(location2); 37058 return !event.defaultPrevented; 37059 } 37060 notifyApplicationAfterClickingLinkToLocation(link, location2, event) { 37061 return dispatch("turbo:click", { 37062 target: link, 37063 detail: { url: location2.href, originalEvent: event }, 37064 cancelable: true 37065 }); 37066 } 37067 notifyApplicationBeforeVisitingLocation(location2) { 37068 return dispatch("turbo:before-visit", { 37069 detail: { url: location2.href }, 37070 cancelable: true 37071 }); 37072 } 37073 notifyApplicationAfterVisitingLocation(location2, action) { 37074 return dispatch("turbo:visit", { detail: { url: location2.href, action } }); 37075 } 37076 notifyApplicationBeforeCachingSnapshot() { 37077 return dispatch("turbo:before-cache"); 37078 } 37079 notifyApplicationBeforeRender(newBody, options) { 37080 return dispatch("turbo:before-render", { 37081 detail: { newBody, ...options }, 37082 cancelable: true 37083 }); 37084 } 37085 notifyApplicationAfterRender(renderMethod) { 37086 return dispatch("turbo:render", { detail: { renderMethod } }); 37087 } 37088 notifyApplicationAfterPageLoad(timing = {}) { 37089 return dispatch("turbo:load", { 37090 detail: { url: this.location.href, timing } 37091 }); 37092 } 37093 notifyApplicationAfterFrameLoad(frame) { 37094 return dispatch("turbo:frame-load", { target: frame }); 37095 } 37096 notifyApplicationAfterFrameRender(fetchResponse, frame) { 37097 return dispatch("turbo:frame-render", { 37098 detail: { fetchResponse }, 37099 target: frame, 37100 cancelable: true 37101 }); 37102 } 37103 // Helpers 37104 submissionIsNavigatable(form, submitter2) { 37105 if (config.forms.mode == "off") { 37106 return false; 37107 } else { 37108 const submitterIsNavigatable = submitter2 ? this.elementIsNavigatable(submitter2) : true; 37109 if (config.forms.mode == "optin") { 37110 return submitterIsNavigatable && form.closest('[data-turbo="true"]') != null; 37111 } else { 37112 return submitterIsNavigatable && this.elementIsNavigatable(form); 37113 } 37114 } 37115 } 37116 elementIsNavigatable(element) { 37117 const container = findClosestRecursively(element, "[data-turbo]"); 37118 const withinFrame = findClosestRecursively(element, "turbo-frame"); 37119 if (config.drive.enabled || withinFrame) { 37120 if (container) { 37121 return container.getAttribute("data-turbo") != "false"; 37122 } else { 37123 return true; 37124 } 37125 } else { 37126 if (container) { 37127 return container.getAttribute("data-turbo") == "true"; 37128 } else { 37129 return false; 37130 } 37131 } 37132 } 37133 // Private 37134 getActionForLink(link) { 37135 return getVisitAction(link) || "advance"; 37136 } 37137 get snapshot() { 37138 return this.view.snapshot; 37139 } 37140}; 37141function extendURLWithDeprecatedProperties(url) { 37142 Object.defineProperties(url, deprecatedLocationPropertyDescriptors); 37143} 37144var deprecatedLocationPropertyDescriptors = { 37145 absoluteURL: { 37146 get() { 37147 return this.toString(); 37148 } 37149 } 37150}; 37151var session = new Session(recentRequests); 37152var { cache, navigator: sessionNavigator } = session; 37153function start() { 37154 session.start(); 37155} 37156function registerAdapter(adapter) { 37157 session.registerAdapter(adapter); 37158} 37159function visit(location2, options) { 37160 session.visit(location2, options); 37161} 37162function connectStreamSource(source) { 37163 session.connectStreamSource(source); 37164} 37165function disconnectStreamSource(source) { 37166 session.disconnectStreamSource(source); 37167} 37168function renderStreamMessage(message) { 37169 session.renderStreamMessage(message); 37170} 37171function setProgressBarDelay(delay) { 37172 console.warn( 37173 "Please replace `Turbo.setProgressBarDelay(delay)` with `Turbo.config.drive.progressBarDelay = delay`. The top-level function is deprecated and will be removed in a future version of Turbo.`" 37174 ); 37175 config.drive.progressBarDelay = delay; 37176} 37177function setConfirmMethod(confirmMethod) { 37178 console.warn( 37179 "Please replace `Turbo.setConfirmMethod(confirmMethod)` with `Turbo.config.forms.confirm = confirmMethod`. The top-level function is deprecated and will be removed in a future version of Turbo.`" 37180 ); 37181 config.forms.confirm = confirmMethod; 37182} 37183function setFormMode(mode2) { 37184 console.warn( 37185 "Please replace `Turbo.setFormMode(mode)` with `Turbo.config.forms.mode = mode`. The top-level function is deprecated and will be removed in a future version of Turbo.`" 37186 ); 37187 config.forms.mode = mode2; 37188} 37189function morphBodyElements(currentBody, newBody) { 37190 MorphingPageRenderer.renderElement(currentBody, newBody); 37191} 37192function morphTurboFrameElements(currentFrame, newFrame) { 37193 MorphingFrameRenderer.renderElement(currentFrame, newFrame); 37194} 37195var Turbo = /* @__PURE__ */ Object.freeze({ 37196 __proto__: null, 37197 PageRenderer, 37198 PageSnapshot, 37199 FrameRenderer, 37200 fetch: fetchWithTurboHeaders, 37201 config, 37202 session, 37203 cache, 37204 navigator: sessionNavigator, 37205 start, 37206 registerAdapter, 37207 visit, 37208 connectStreamSource, 37209 disconnectStreamSource, 37210 renderStreamMessage, 37211 setProgressBarDelay, 37212 setConfirmMethod, 37213 setFormMode, 37214 morphBodyElements, 37215 morphTurboFrameElements, 37216 morphChildren, 37217 morphElements 37218}); 37219var TurboFrameMissingError = class extends Error { 37220}; 37221var FrameController = class { 37222 fetchResponseLoaded = (_fetchResponse) => Promise.resolve(); 37223 #currentFetchRequest = null; 37224 #resolveVisitPromise = () => { 37225 }; 37226 #connected = false; 37227 #hasBeenLoaded = false; 37228 #ignoredAttributes = /* @__PURE__ */ new Set(); 37229 #shouldMorphFrame = false; 37230 action = null; 37231 constructor(element) { 37232 this.element = element; 37233 this.view = new FrameView(this, this.element); 37234 this.appearanceObserver = new AppearanceObserver(this, this.element); 37235 this.formLinkClickObserver = new FormLinkClickObserver(this, this.element); 37236 this.linkInterceptor = new LinkInterceptor(this, this.element); 37237 this.restorationIdentifier = uuid(); 37238 this.formSubmitObserver = new FormSubmitObserver(this, this.element); 37239 } 37240 // Frame delegate 37241 connect() { 37242 if (!this.#connected) { 37243 this.#connected = true; 37244 if (this.loadingStyle == FrameLoadingStyle.lazy) { 37245 this.appearanceObserver.start(); 37246 } else { 37247 this.#loadSourceURL(); 37248 } 37249 this.formLinkClickObserver.start(); 37250 this.linkInterceptor.start(); 37251 this.formSubmitObserver.start(); 37252 } 37253 } 37254 disconnect() { 37255 if (this.#connected) { 37256 this.#connected = false; 37257 this.appearanceObserver.stop(); 37258 this.formLinkClickObserver.stop(); 37259 this.linkInterceptor.stop(); 37260 this.formSubmitObserver.stop(); 37261 if (!this.element.hasAttribute("recurse")) { 37262 this.#currentFetchRequest?.cancel(); 37263 } 37264 } 37265 } 37266 disabledChanged() { 37267 if (this.disabled) { 37268 this.#currentFetchRequest?.cancel(); 37269 } else if (this.loadingStyle == FrameLoadingStyle.eager) { 37270 this.#loadSourceURL(); 37271 } 37272 } 37273 sourceURLChanged() { 37274 if (this.#isIgnoringChangesTo("src")) return; 37275 if (!this.sourceURL) { 37276 this.#currentFetchRequest?.cancel(); 37277 } 37278 if (this.element.isConnected) { 37279 this.complete = false; 37280 } 37281 if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) { 37282 this.#loadSourceURL(); 37283 } 37284 } 37285 sourceURLReloaded() { 37286 const { refresh, src } = this.element; 37287 this.#shouldMorphFrame = src && refresh === "morph"; 37288 this.element.removeAttribute("complete"); 37289 this.element.src = null; 37290 this.element.src = src; 37291 return this.element.loaded; 37292 } 37293 loadingStyleChanged() { 37294 if (this.loadingStyle == FrameLoadingStyle.lazy) { 37295 this.appearanceObserver.start(); 37296 } else { 37297 this.appearanceObserver.stop(); 37298 this.#loadSourceURL(); 37299 } 37300 } 37301 async #loadSourceURL() { 37302 if (this.enabled && this.isActive && !this.complete && this.sourceURL) { 37303 this.element.loaded = this.#visit(expandURL(this.sourceURL)); 37304 this.appearanceObserver.stop(); 37305 await this.element.loaded; 37306 this.#hasBeenLoaded = true; 37307 } 37308 } 37309 async loadResponse(fetchResponse) { 37310 if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) { 37311 this.sourceURL = fetchResponse.response.url; 37312 } 37313 try { 37314 const html = await fetchResponse.responseHTML; 37315 if (html) { 37316 const document2 = parseHTMLDocument(html); 37317 const pageSnapshot = PageSnapshot.fromDocument(document2); 37318 if (pageSnapshot.isVisitable) { 37319 await this.#loadFrameResponse(fetchResponse, document2); 37320 } else { 37321 await this.#handleUnvisitableFrameResponse(fetchResponse); 37322 } 37323 } 37324 } finally { 37325 this.#shouldMorphFrame = false; 37326 this.fetchResponseLoaded = () => Promise.resolve(); 37327 } 37328 } 37329 // Appearance observer delegate 37330 elementAppearedInViewport(element) { 37331 this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element)); 37332 this.#loadSourceURL(); 37333 } 37334 // Form link click observer delegate 37335 willSubmitFormLinkToLocation(link) { 37336 return this.#shouldInterceptNavigation(link); 37337 } 37338 submittedFormLinkToLocation(link, _location, form) { 37339 const frame = this.#findFrameElement(link); 37340 if (frame) form.setAttribute("data-turbo-frame", frame.id); 37341 } 37342 // Link interceptor delegate 37343 shouldInterceptLinkClick(element, _location, _event) { 37344 return this.#shouldInterceptNavigation(element); 37345 } 37346 linkClickIntercepted(element, location2) { 37347 this.#navigateFrame(element, location2); 37348 } 37349 // Form submit observer delegate 37350 willSubmitForm(element, submitter2) { 37351 return element.closest("turbo-frame") == this.element && this.#shouldInterceptNavigation(element, submitter2); 37352 } 37353 formSubmitted(element, submitter2) { 37354 if (this.formSubmission) { 37355 this.formSubmission.stop(); 37356 } 37357 this.formSubmission = new FormSubmission(this, element, submitter2); 37358 const { fetchRequest } = this.formSubmission; 37359 const frame = this.#findFrameElement(element, submitter2); 37360 this.prepareRequest(fetchRequest, frame); 37361 this.formSubmission.start(); 37362 } 37363 // Fetch request delegate 37364 prepareRequest(request2, frame = this) { 37365 request2.headers["Turbo-Frame"] = frame.id; 37366 if (this.currentNavigationElement?.hasAttribute("data-turbo-stream")) { 37367 request2.acceptResponseType(StreamMessage.contentType); 37368 } 37369 } 37370 requestStarted(_request) { 37371 markAsBusy(this.element); 37372 } 37373 requestPreventedHandlingResponse(_request, _response) { 37374 this.#resolveVisitPromise(); 37375 } 37376 async requestSucceededWithResponse(request2, response) { 37377 await this.loadResponse(response); 37378 this.#resolveVisitPromise(); 37379 } 37380 async requestFailedWithResponse(request2, response) { 37381 await this.loadResponse(response); 37382 this.#resolveVisitPromise(); 37383 } 37384 requestErrored(request2, error2) { 37385 console.error(error2); 37386 this.#resolveVisitPromise(); 37387 } 37388 requestFinished(_request) { 37389 clearBusyState(this.element); 37390 } 37391 // Form submission delegate 37392 formSubmissionStarted({ formElement }) { 37393 markAsBusy(formElement, this.#findFrameElement(formElement)); 37394 } 37395 formSubmissionSucceededWithResponse(formSubmission, response) { 37396 const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter); 37397 frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame)); 37398 frame.delegate.loadResponse(response); 37399 if (!formSubmission.isSafe) { 37400 session.clearCache(); 37401 } 37402 } 37403 formSubmissionFailedWithResponse(formSubmission, fetchResponse) { 37404 this.element.delegate.loadResponse(fetchResponse); 37405 session.clearCache(); 37406 } 37407 formSubmissionErrored(formSubmission, error2) { 37408 console.error(error2); 37409 } 37410 formSubmissionFinished({ formElement }) { 37411 clearBusyState(formElement, this.#findFrameElement(formElement)); 37412 } 37413 // View delegate 37414 allowsImmediateRender({ element: newFrame }, options) { 37415 const event = dispatch("turbo:before-frame-render", { 37416 target: this.element, 37417 detail: { newFrame, ...options }, 37418 cancelable: true 37419 }); 37420 const { 37421 defaultPrevented, 37422 detail: { render } 37423 } = event; 37424 if (this.view.renderer && render) { 37425 this.view.renderer.renderElement = render; 37426 } 37427 return !defaultPrevented; 37428 } 37429 viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) { 37430 } 37431 preloadOnLoadLinksForView(element) { 37432 session.preloadOnLoadLinksForView(element); 37433 } 37434 viewInvalidated() { 37435 } 37436 // Frame renderer delegate 37437 willRenderFrame(currentElement, _newElement) { 37438 this.previousFrameElement = currentElement.cloneNode(true); 37439 } 37440 visitCachedSnapshot = ({ element }) => { 37441 const frame = element.querySelector("#" + this.element.id); 37442 if (frame && this.previousFrameElement) { 37443 frame.replaceChildren(...this.previousFrameElement.children); 37444 } 37445 delete this.previousFrameElement; 37446 }; 37447 // Private 37448 async #loadFrameResponse(fetchResponse, document2) { 37449 const newFrameElement = await this.extractForeignFrameElement(document2.body); 37450 const rendererClass = this.#shouldMorphFrame ? MorphingFrameRenderer : FrameRenderer; 37451 if (newFrameElement) { 37452 const snapshot = new Snapshot(newFrameElement); 37453 const renderer = new rendererClass(this, this.view.snapshot, snapshot, false, false); 37454 if (this.view.renderPromise) await this.view.renderPromise; 37455 this.changeHistory(); 37456 await this.view.render(renderer); 37457 this.complete = true; 37458 session.frameRendered(fetchResponse, this.element); 37459 session.frameLoaded(this.element); 37460 await this.fetchResponseLoaded(fetchResponse); 37461 } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) { 37462 this.#handleFrameMissingFromResponse(fetchResponse); 37463 } 37464 } 37465 async #visit(url) { 37466 const request2 = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element); 37467 this.#currentFetchRequest?.cancel(); 37468 this.#currentFetchRequest = request2; 37469 return new Promise((resolve) => { 37470 this.#resolveVisitPromise = () => { 37471 this.#resolveVisitPromise = () => { 37472 }; 37473 this.#currentFetchRequest = null; 37474 resolve(); 37475 }; 37476 request2.perform(); 37477 }); 37478 } 37479 #navigateFrame(element, url, submitter2) { 37480 const frame = this.#findFrameElement(element, submitter2); 37481 frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter2, element, frame)); 37482 this.#withCurrentNavigationElement(element, () => { 37483 frame.src = url; 37484 }); 37485 } 37486 proposeVisitIfNavigatedWithAction(frame, action = null) { 37487 this.action = action; 37488 if (this.action) { 37489 const pageSnapshot = PageSnapshot.fromElement(frame).clone(); 37490 const { visitCachedSnapshot } = frame.delegate; 37491 frame.delegate.fetchResponseLoaded = async (fetchResponse) => { 37492 if (frame.src) { 37493 const { statusCode, redirected } = fetchResponse; 37494 const responseHTML = await fetchResponse.responseHTML; 37495 const response = { statusCode, redirected, responseHTML }; 37496 const options = { 37497 response, 37498 visitCachedSnapshot, 37499 willRender: false, 37500 updateHistory: false, 37501 restorationIdentifier: this.restorationIdentifier, 37502 snapshot: pageSnapshot 37503 }; 37504 if (this.action) options.action = this.action; 37505 session.visit(frame.src, options); 37506 } 37507 }; 37508 } 37509 } 37510 changeHistory() { 37511 if (this.action) { 37512 const method = getHistoryMethodForAction(this.action); 37513 session.history.update(method, expandURL(this.element.src || ""), this.restorationIdentifier); 37514 } 37515 } 37516 async #handleUnvisitableFrameResponse(fetchResponse) { 37517 console.warn( 37518 `The response (${fetchResponse.statusCode}) from <turbo-frame id="${this.element.id}"> is performing a full page visit due to turbo-visit-control.` 37519 ); 37520 await this.#visitResponse(fetchResponse.response); 37521 } 37522 #willHandleFrameMissingFromResponse(fetchResponse) { 37523 this.element.setAttribute("complete", ""); 37524 const response = fetchResponse.response; 37525 const visit2 = async (url, options) => { 37526 if (url instanceof Response) { 37527 this.#visitResponse(url); 37528 } else { 37529 session.visit(url, options); 37530 } 37531 }; 37532 const event = dispatch("turbo:frame-missing", { 37533 target: this.element, 37534 detail: { response, visit: visit2 }, 37535 cancelable: true 37536 }); 37537 return !event.defaultPrevented; 37538 } 37539 #handleFrameMissingFromResponse(fetchResponse) { 37540 this.view.missing(); 37541 this.#throwFrameMissingError(fetchResponse); 37542 } 37543 #throwFrameMissingError(fetchResponse) { 37544 const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id="${this.element.id}"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`; 37545 throw new TurboFrameMissingError(message); 37546 } 37547 async #visitResponse(response) { 37548 const wrapped = new FetchResponse(response); 37549 const responseHTML = await wrapped.responseHTML; 37550 const { location: location2, redirected, statusCode } = wrapped; 37551 return session.visit(location2, { response: { redirected, statusCode, responseHTML } }); 37552 } 37553 #findFrameElement(element, submitter2) { 37554 const id = getAttribute("data-turbo-frame", submitter2, element) || this.element.getAttribute("target"); 37555 const target = this.#getFrameElementById(id); 37556 return target instanceof FrameElement ? target : this.element; 37557 } 37558 async extractForeignFrameElement(container) { 37559 let element; 37560 const id = CSS.escape(this.id); 37561 try { 37562 element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL); 37563 if (element) { 37564 return element; 37565 } 37566 element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL); 37567 if (element) { 37568 await element.loaded; 37569 return await this.extractForeignFrameElement(element); 37570 } 37571 } catch (error2) { 37572 console.error(error2); 37573 return new FrameElement(); 37574 } 37575 return null; 37576 } 37577 #formActionIsVisitable(form, submitter2) { 37578 const action = getAction$1(form, submitter2); 37579 return locationIsVisitable(expandURL(action), this.rootLocation); 37580 } 37581 #shouldInterceptNavigation(element, submitter2) { 37582 const id = getAttribute("data-turbo-frame", submitter2, element) || this.element.getAttribute("target"); 37583 if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter2)) { 37584 return false; 37585 } 37586 if (!this.enabled || id == "_top") { 37587 return false; 37588 } 37589 if (id) { 37590 const frameElement = this.#getFrameElementById(id); 37591 if (frameElement) { 37592 return !frameElement.disabled; 37593 } else if (id == "_parent") { 37594 return false; 37595 } 37596 } 37597 if (!session.elementIsNavigatable(element)) { 37598 return false; 37599 } 37600 if (submitter2 && !session.elementIsNavigatable(submitter2)) { 37601 return false; 37602 } 37603 return true; 37604 } 37605 // Computed properties 37606 get id() { 37607 return this.element.id; 37608 } 37609 get disabled() { 37610 return this.element.disabled; 37611 } 37612 get enabled() { 37613 return !this.disabled; 37614 } 37615 get sourceURL() { 37616 if (this.element.src) { 37617 return this.element.src; 37618 } 37619 } 37620 set sourceURL(sourceURL) { 37621 this.#ignoringChangesToAttribute("src", () => { 37622 this.element.src = sourceURL ?? null; 37623 }); 37624 } 37625 get loadingStyle() { 37626 return this.element.loading; 37627 } 37628 get isLoading() { 37629 return this.formSubmission !== void 0 || this.#resolveVisitPromise() !== void 0; 37630 } 37631 get complete() { 37632 return this.element.hasAttribute("complete"); 37633 } 37634 set complete(value) { 37635 if (value) { 37636 this.element.setAttribute("complete", ""); 37637 } else { 37638 this.element.removeAttribute("complete"); 37639 } 37640 } 37641 get isActive() { 37642 return this.element.isActive && this.#connected; 37643 } 37644 get rootLocation() { 37645 const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`); 37646 const root2 = meta?.content ?? "/"; 37647 return expandURL(root2); 37648 } 37649 #isIgnoringChangesTo(attributeName) { 37650 return this.#ignoredAttributes.has(attributeName); 37651 } 37652 #ignoringChangesToAttribute(attributeName, callback) { 37653 this.#ignoredAttributes.add(attributeName); 37654 callback(); 37655 this.#ignoredAttributes.delete(attributeName); 37656 } 37657 #withCurrentNavigationElement(element, callback) { 37658 this.currentNavigationElement = element; 37659 callback(); 37660 delete this.currentNavigationElement; 37661 } 37662 #getFrameElementById(id) { 37663 if (id != null) { 37664 const element = id === "_parent" ? this.element.parentElement.closest("turbo-frame") : document.getElementById(id); 37665 if (element instanceof FrameElement) { 37666 return element; 37667 } 37668 } 37669 } 37670}; 37671function activateElement(element, currentURL) { 37672 if (element) { 37673 const src = element.getAttribute("src"); 37674 if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) { 37675 throw new Error(`Matching <turbo-frame id="${element.id}"> element has a source URL which references itself`); 37676 } 37677 if (element.ownerDocument !== document) { 37678 element = document.importNode(element, true); 37679 } 37680 if (element instanceof FrameElement) { 37681 element.connectedCallback(); 37682 element.disconnectedCallback(); 37683 return element; 37684 } 37685 } 37686} 37687var StreamActions = { 37688 after() { 37689 this.removeDuplicateTargetSiblings(); 37690 this.targetElements.forEach((e3) => e3.parentElement?.insertBefore(this.templateContent, e3.nextSibling)); 37691 }, 37692 append() { 37693 this.removeDuplicateTargetChildren(); 37694 this.targetElements.forEach((e3) => e3.append(this.templateContent)); 37695 }, 37696 before() { 37697 this.removeDuplicateTargetSiblings(); 37698 this.targetElements.forEach((e3) => e3.parentElement?.insertBefore(this.templateContent, e3)); 37699 }, 37700 prepend() { 37701 this.removeDuplicateTargetChildren(); 37702 this.targetElements.forEach((e3) => e3.prepend(this.templateContent)); 37703 }, 37704 remove() { 37705 this.targetElements.forEach((e3) => e3.remove()); 37706 }, 37707 replace() { 37708 const method = this.getAttribute("method"); 37709 this.targetElements.forEach((targetElement) => { 37710 if (method === "morph") { 37711 morphElements(targetElement, this.templateContent); 37712 } else { 37713 targetElement.replaceWith(this.templateContent); 37714 } 37715 }); 37716 }, 37717 update() { 37718 const method = this.getAttribute("method"); 37719 this.targetElements.forEach((targetElement) => { 37720 if (method === "morph") { 37721 morphChildren(targetElement, this.templateContent); 37722 } else { 37723 targetElement.innerHTML = ""; 37724 targetElement.append(this.templateContent); 37725 } 37726 }); 37727 }, 37728 refresh() { 37729 const method = this.getAttribute("method"); 37730 const requestId = this.requestId; 37731 const scroll = this.getAttribute("scroll"); 37732 session.refresh(this.baseURI, { method, requestId, scroll }); 37733 } 37734}; 37735var StreamElement = class _StreamElement extends HTMLElement { 37736 static async renderElement(newElement) { 37737 await newElement.performAction(); 37738 } 37739 async connectedCallback() { 37740 try { 37741 await this.render(); 37742 } catch (error2) { 37743 console.error(error2); 37744 } finally { 37745 this.disconnect(); 37746 } 37747 } 37748 async render() { 37749 return this.renderPromise ??= (async () => { 37750 const event = this.beforeRenderEvent; 37751 if (this.dispatchEvent(event)) { 37752 await nextRepaint(); 37753 await event.detail.render(this); 37754 } 37755 })(); 37756 } 37757 disconnect() { 37758 try { 37759 this.remove(); 37760 } catch { 37761 } 37762 } 37763 /** 37764 * Removes duplicate children (by ID) 37765 */ 37766 removeDuplicateTargetChildren() { 37767 this.duplicateChildren.forEach((c3) => c3.remove()); 37768 } 37769 /** 37770 * Gets the list of duplicate children (i.e. those with the same ID) 37771 */ 37772 get duplicateChildren() { 37773 const existingChildren = this.targetElements.flatMap((e3) => [...e3.children]).filter((c3) => !!c3.getAttribute("id")); 37774 const newChildrenIds = [...this.templateContent?.children || []].filter((c3) => !!c3.getAttribute("id")).map((c3) => c3.getAttribute("id")); 37775 return existingChildren.filter((c3) => newChildrenIds.includes(c3.getAttribute("id"))); 37776 } 37777 /** 37778 * Removes duplicate siblings (by ID) 37779 */ 37780 removeDuplicateTargetSiblings() { 37781 this.duplicateSiblings.forEach((c3) => c3.remove()); 37782 } 37783 /** 37784 * Gets the list of duplicate siblings (i.e. those with the same ID) 37785 */ 37786 get duplicateSiblings() { 37787 const existingChildren = this.targetElements.flatMap((e3) => [...e3.parentElement.children]).filter((c3) => !!c3.id); 37788 const newChildrenIds = [...this.templateContent?.children || []].filter((c3) => !!c3.id).map((c3) => c3.id); 37789 return existingChildren.filter((c3) => newChildrenIds.includes(c3.id)); 37790 } 37791 /** 37792 * Gets the action function to be performed. 37793 */ 37794 get performAction() { 37795 if (this.action) { 37796 const actionFunction = StreamActions[this.action]; 37797 if (actionFunction) { 37798 return actionFunction; 37799 } 37800 this.#raise("unknown action"); 37801 } 37802 this.#raise("action attribute is missing"); 37803 } 37804 /** 37805 * Gets the target elements which the template will be rendered to. 37806 */ 37807 get targetElements() { 37808 if (this.target) { 37809 return this.targetElementsById; 37810 } else if (this.targets) { 37811 return this.targetElementsByQuery; 37812 } else { 37813 this.#raise("target or targets attribute is missing"); 37814 } 37815 } 37816 /** 37817 * Gets the contents of the main `<template>`. 37818 */ 37819 get templateContent() { 37820 return this.templateElement.content.cloneNode(true); 37821 } 37822 /** 37823 * Gets the main `<template>` used for rendering 37824 */ 37825 get templateElement() { 37826 if (this.firstElementChild === null) { 37827 const template = this.ownerDocument.createElement("template"); 37828 this.appendChild(template); 37829 return template; 37830 } else if (this.firstElementChild instanceof HTMLTemplateElement) { 37831 return this.firstElementChild; 37832 } 37833 this.#raise("first child element must be a <template> element"); 37834 } 37835 /** 37836 * Gets the current action. 37837 */ 37838 get action() { 37839 return this.getAttribute("action"); 37840 } 37841 /** 37842 * Gets the current target (an element ID) to which the result will 37843 * be rendered. 37844 */ 37845 get target() { 37846 return this.getAttribute("target"); 37847 } 37848 /** 37849 * Gets the current "targets" selector (a CSS selector) 37850 */ 37851 get targets() { 37852 return this.getAttribute("targets"); 37853 } 37854 /** 37855 * Reads the request-id attribute 37856 */ 37857 get requestId() { 37858 return this.getAttribute("request-id"); 37859 } 37860 #raise(message) { 37861 throw new Error(`${this.description}: ${message}`); 37862 } 37863 get description() { 37864 return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? "<turbo-stream>"; 37865 } 37866 get beforeRenderEvent() { 37867 return new CustomEvent("turbo:before-stream-render", { 37868 bubbles: true, 37869 cancelable: true, 37870 detail: { newStream: this, render: _StreamElement.renderElement } 37871 }); 37872 } 37873 get targetElementsById() { 37874 const element = this.ownerDocument?.getElementById(this.target); 37875 if (element !== null) { 37876 return [element]; 37877 } else { 37878 return []; 37879 } 37880 } 37881 get targetElementsByQuery() { 37882 const elements = this.ownerDocument?.querySelectorAll(this.targets); 37883 if (elements.length !== 0) { 37884 return Array.prototype.slice.call(elements); 37885 } else { 37886 return []; 37887 } 37888 } 37889}; 37890var StreamSourceElement = class extends HTMLElement { 37891 streamSource = null; 37892 connectedCallback() { 37893 this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src); 37894 connectStreamSource(this.streamSource); 37895 } 37896 disconnectedCallback() { 37897 if (this.streamSource) { 37898 this.streamSource.close(); 37899 disconnectStreamSource(this.streamSource); 37900 } 37901 } 37902 get src() { 37903 return this.getAttribute("src") || ""; 37904 } 37905}; 37906FrameElement.delegateConstructor = FrameController; 37907if (customElements.get("turbo-frame") === void 0) { 37908 customElements.define("turbo-frame", FrameElement); 37909} 37910if (customElements.get("turbo-stream") === void 0) { 37911 customElements.define("turbo-stream", StreamElement); 37912} 37913if (customElements.get("turbo-stream-source") === void 0) { 37914 customElements.define("turbo-stream-source", StreamSourceElement); 37915} 37916(() => { 37917 const scriptElement = document.currentScript; 37918 if (!scriptElement) return; 37919 if (scriptElement.hasAttribute("data-turbo-suppress-warning")) return; 37920 let element = scriptElement.parentElement; 37921 while (element) { 37922 if (element == document.body) { 37923 return console.warn( 37924 unindent` 37925 You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do! 37926 37927 Load your applicationâs JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change. 37928 37929 For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements 37930 37931 ââ 37932 Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s 37933 `, 37934 scriptElement.outerHTML 37935 ); 37936 } 37937 element = element.parentElement; 37938 } 37939})(); 37940window.Turbo = { ...Turbo, StreamActions }; 37941start(); 37942
vendor: 575 bytes, lines 37943-37959
37943// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js 37944var consumer; 37945async function getConsumer() { 37946 return consumer || setConsumer(createConsumer2().then(setConsumer)); 37947} 37948function setConsumer(newConsumer) { 37949 return consumer = newConsumer; 37950} 37951async function createConsumer2() { 37952 const { createConsumer: createConsumer4 } = await Promise.resolve().then(() => (init_src(), src_exports)); 37953 return createConsumer4(); 37954} 37955async function subscribeTo(channel, mixin) { 37956 const { subscriptions } = await getConsumer(); 37957 return subscriptions.create(channel, mixin); 37958} 37959
vendor: 508 bytes, lines 37960-37973
37960// node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js 37961function walk(obj) { 37962 if (!obj || typeof obj !== "object") return obj; 37963 if (obj instanceof Date || obj instanceof RegExp) return obj; 37964 if (Array.isArray(obj)) return obj.map(walk); 37965 return Object.keys(obj).reduce(function(acc, key) { 37966 var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function(m3, x3) { 37967 return "_" + x3.toLowerCase(); 37968 }); 37969 acc[camel] = walk(obj[key]); 37970 return acc; 37971 }, {}); 37972} 37973
vendor: 1,471 bytes, lines 37974-38015
37974// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js 37975var TurboCableStreamSourceElement = class extends HTMLElement { 37976 static observedAttributes = ["channel", "signed-stream-name"]; 37977 async connectedCallback() { 37978 connectStreamSource(this); 37979 this.subscription = await subscribeTo(this.channel, { 37980 received: this.dispatchMessageEvent.bind(this), 37981 connected: this.subscriptionConnected.bind(this), 37982 disconnected: this.subscriptionDisconnected.bind(this) 37983 }); 37984 } 37985 disconnectedCallback() { 37986 disconnectStreamSource(this); 37987 if (this.subscription) this.subscription.unsubscribe(); 37988 this.subscriptionDisconnected(); 37989 } 37990 attributeChangedCallback() { 37991 if (this.subscription) { 37992 this.disconnectedCallback(); 37993 this.connectedCallback(); 37994 } 37995 } 37996 dispatchMessageEvent(data) { 37997 const event = new MessageEvent("message", { data }); 37998 return this.dispatchEvent(event); 37999 } 38000 subscriptionConnected() { 38001 this.setAttribute("connected", ""); 38002 } 38003 subscriptionDisconnected() { 38004 this.removeAttribute("connected"); 38005 } 38006 get channel() { 38007 const channel = this.getAttribute("channel"); 38008 const signed_stream_name = this.getAttribute("signed-stream-name"); 38009 return { channel, signed_stream_name, ...walk({ ...this.dataset }) }; 38010 } 38011}; 38012if (customElements.get("turbo-cable-stream-source") === void 0) { 38013 customElements.define("turbo-cable-stream-source", TurboCableStreamSourceElement); 38014} 38015
vendor: 1,611 bytes, lines 38016-38062
38016// node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js 38017function encodeMethodIntoRequestBody(event) { 38018 if (event.target instanceof HTMLFormElement) { 38019 const { target: form, detail: { fetchOptions } } = event; 38020 form.addEventListener("turbo:submit-start", ({ detail: { formSubmission: { submitter: submitter2 } } }) => { 38021 const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams(); 38022 const method = determineFetchMethod(submitter2, body, form); 38023 if (!/get/i.test(method)) { 38024 if (/post/i.test(method)) { 38025 body.delete("_method"); 38026 } else { 38027 body.set("_method", method); 38028 } 38029 fetchOptions.method = "post"; 38030 } 38031 }, { once: true }); 38032 } 38033} 38034function determineFetchMethod(submitter2, body, form) { 38035 const formMethod = determineFormMethod(submitter2); 38036 const overrideMethod = body.get("_method"); 38037 const method = form.getAttribute("method") || "get"; 38038 if (typeof formMethod == "string") { 38039 return formMethod; 38040 } else if (typeof overrideMethod == "string") { 38041 return overrideMethod; 38042 } else { 38043 return method; 38044 } 38045} 38046function determineFormMethod(submitter2) { 38047 if (submitter2 instanceof HTMLButtonElement || submitter2 instanceof HTMLInputElement) { 38048 if (submitter2.name === "_method") { 38049 return submitter2.value; 38050 } else if (submitter2.hasAttribute("formmethod")) { 38051 return submitter2.formMethod; 38052 } else { 38053 return null; 38054 } 38055 } else { 38056 return null; 38057 } 38058} 38059function isBodyInit(body) { 38060 return body instanceof FormData || body instanceof URLSearchParams; 38061} 38062
vendor: 187 bytes, lines 38063-38066
38063// node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js 38064window.Turbo = turbo_es2017_esm_exports; 38065addEventListener("turbo:before-fetch-request", encodeMethodIntoRequestBody); 38066
vendor: 79,452 bytes, lines 38067-40514
38067// node_modules/@hotwired/stimulus/dist/stimulus.js 38068var EventListener = class { 38069 constructor(eventTarget, eventName, eventOptions) { 38070 this.eventTarget = eventTarget; 38071 this.eventName = eventName; 38072 this.eventOptions = eventOptions; 38073 this.unorderedBindings = /* @__PURE__ */ new Set(); 38074 } 38075 connect() { 38076 this.eventTarget.addEventListener(this.eventName, this, this.eventOptions); 38077 } 38078 disconnect() { 38079 this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions); 38080 } 38081 bindingConnected(binding) { 38082 this.unorderedBindings.add(binding); 38083 } 38084 bindingDisconnected(binding) { 38085 this.unorderedBindings.delete(binding); 38086 } 38087 handleEvent(event) { 38088 const extendedEvent = extendEvent(event); 38089 for (const binding of this.bindings) { 38090 if (extendedEvent.immediatePropagationStopped) { 38091 break; 38092 } else { 38093 binding.handleEvent(extendedEvent); 38094 } 38095 } 38096 } 38097 hasBindings() { 38098 return this.unorderedBindings.size > 0; 38099 } 38100 get bindings() { 38101 return Array.from(this.unorderedBindings).sort((left, right) => { 38102 const leftIndex = left.index, rightIndex = right.index; 38103 return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0; 38104 }); 38105 } 38106}; 38107function extendEvent(event) { 38108 if ("immediatePropagationStopped" in event) { 38109 return event; 38110 } else { 38111 const { stopImmediatePropagation } = event; 38112 return Object.assign(event, { 38113 immediatePropagationStopped: false, 38114 stopImmediatePropagation() { 38115 this.immediatePropagationStopped = true; 38116 stopImmediatePropagation.call(this); 38117 } 38118 }); 38119 } 38120} 38121var Dispatcher = class { 38122 constructor(application2) { 38123 this.application = application2; 38124 this.eventListenerMaps = /* @__PURE__ */ new Map(); 38125 this.started = false; 38126 } 38127 start() { 38128 if (!this.started) { 38129 this.started = true; 38130 this.eventListeners.forEach((eventListener) => eventListener.connect()); 38131 } 38132 } 38133 stop() { 38134 if (this.started) { 38135 this.started = false; 38136 this.eventListeners.forEach((eventListener) => eventListener.disconnect()); 38137 } 38138 } 38139 get eventListeners() { 38140 return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []); 38141 } 38142 bindingConnected(binding) { 38143 this.fetchEventListenerForBinding(binding).bindingConnected(binding); 38144 } 38145 bindingDisconnected(binding, clearEventListeners = false) { 38146 this.fetchEventListenerForBinding(binding).bindingDisconnected(binding); 38147 if (clearEventListeners) 38148 this.clearEventListenersForBinding(binding); 38149 } 38150 handleError(error2, message, detail = {}) { 38151 this.application.handleError(error2, `Error ${message}`, detail); 38152 } 38153 clearEventListenersForBinding(binding) { 38154 const eventListener = this.fetchEventListenerForBinding(binding); 38155 if (!eventListener.hasBindings()) { 38156 eventListener.disconnect(); 38157 this.removeMappedEventListenerFor(binding); 38158 } 38159 } 38160 removeMappedEventListenerFor(binding) { 38161 const { eventTarget, eventName, eventOptions } = binding; 38162 const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget); 38163 const cacheKey = this.cacheKey(eventName, eventOptions); 38164 eventListenerMap.delete(cacheKey); 38165 if (eventListenerMap.size == 0) 38166 this.eventListenerMaps.delete(eventTarget); 38167 } 38168 fetchEventListenerForBinding(binding) { 38169 const { eventTarget, eventName, eventOptions } = binding; 38170 return this.fetchEventListener(eventTarget, eventName, eventOptions); 38171 } 38172 fetchEventListener(eventTarget, eventName, eventOptions) { 38173 const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget); 38174 const cacheKey = this.cacheKey(eventName, eventOptions); 38175 let eventListener = eventListenerMap.get(cacheKey); 38176 if (!eventListener) { 38177 eventListener = this.createEventListener(eventTarget, eventName, eventOptions); 38178 eventListenerMap.set(cacheKey, eventListener); 38179 } 38180 return eventListener; 38181 } 38182 createEventListener(eventTarget, eventName, eventOptions) { 38183 const eventListener = new EventListener(eventTarget, eventName, eventOptions); 38184 if (this.started) { 38185 eventListener.connect(); 38186 } 38187 return eventListener; 38188 } 38189 fetchEventListenerMapForEventTarget(eventTarget) { 38190 let eventListenerMap = this.eventListenerMaps.get(eventTarget); 38191 if (!eventListenerMap) { 38192 eventListenerMap = /* @__PURE__ */ new Map(); 38193 this.eventListenerMaps.set(eventTarget, eventListenerMap); 38194 } 38195 return eventListenerMap; 38196 } 38197 cacheKey(eventName, eventOptions) { 38198 const parts = [eventName]; 38199 Object.keys(eventOptions).sort().forEach((key) => { 38200 parts.push(`${eventOptions[key] ? "" : "!"}${key}`); 38201 }); 38202 return parts.join(":"); 38203 } 38204}; 38205var defaultActionDescriptorFilters = { 38206 stop({ event, value }) { 38207 if (value) 38208 event.stopPropagation(); 38209 return true; 38210 }, 38211 prevent({ event, value }) { 38212 if (value) 38213 event.preventDefault(); 38214 return true; 38215 }, 38216 self({ event, value, element }) { 38217 if (value) { 38218 return element === event.target; 38219 } else { 38220 return true; 38221 } 38222 } 38223}; 38224var descriptorPattern = /^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/; 38225function parseActionDescriptorString(descriptorString) { 38226 const source = descriptorString.trim(); 38227 const matches = source.match(descriptorPattern) || []; 38228 let eventName = matches[2]; 38229 let keyFilter = matches[3]; 38230 if (keyFilter && !["keydown", "keyup", "keypress"].includes(eventName)) { 38231 eventName += `.${keyFilter}`; 38232 keyFilter = ""; 38233 } 38234 return { 38235 eventTarget: parseEventTarget(matches[4]), 38236 eventName, 38237 eventOptions: matches[7] ? parseEventOptions(matches[7]) : {}, 38238 identifier: matches[5], 38239 methodName: matches[6], 38240 keyFilter: matches[1] || keyFilter 38241 }; 38242} 38243function parseEventTarget(eventTargetName) { 38244 if (eventTargetName == "window") { 38245 return window; 38246 } else if (eventTargetName == "document") { 38247 return document; 38248 } 38249} 38250function parseEventOptions(eventOptions) { 38251 return eventOptions.split(":").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, "")]: !/^!/.test(token) }), {}); 38252} 38253function stringifyEventTarget(eventTarget) { 38254 if (eventTarget == window) { 38255 return "window"; 38256 } else if (eventTarget == document) { 38257 return "document"; 38258 } 38259} 38260function camelize(value) { 38261 return value.replace(/(?:[_-])([a-z0-9])/g, (_3, char) => char.toUpperCase()); 38262} 38263function namespaceCamelize(value) { 38264 return camelize(value.replace(/--/g, "-").replace(/__/g, "_")); 38265} 38266function capitalize(value) { 38267 return value.charAt(0).toUpperCase() + value.slice(1); 38268} 38269function dasherize(value) { 38270 return value.replace(/([A-Z])/g, (_3, char) => `-${char.toLowerCase()}`); 38271} 38272function tokenize(value) { 38273 return value.match(/[^\s]+/g) || []; 38274} 38275function isSomething(object) { 38276 return object !== null && object !== void 0; 38277} 38278function hasProperty(object, property) { 38279 return Object.prototype.hasOwnProperty.call(object, property); 38280} 38281var allModifiers = ["meta", "ctrl", "alt", "shift"]; 38282var Action = class { 38283 constructor(element, index, descriptor, schema) { 38284 this.element = element; 38285 this.index = index; 38286 this.eventTarget = descriptor.eventTarget || element; 38287 this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error("missing event name"); 38288 this.eventOptions = descriptor.eventOptions || {}; 38289 this.identifier = descriptor.identifier || error("missing identifier"); 38290 this.methodName = descriptor.methodName || error("missing method name"); 38291 this.keyFilter = descriptor.keyFilter || ""; 38292 this.schema = schema; 38293 } 38294 static forToken(token, schema) { 38295 return new this(token.element, token.index, parseActionDescriptorString(token.content), schema); 38296 } 38297 toString() { 38298 const eventFilter = this.keyFilter ? `.${this.keyFilter}` : ""; 38299 const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : ""; 38300 return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`; 38301 } 38302 shouldIgnoreKeyboardEvent(event) { 38303 if (!this.keyFilter) { 38304 return false; 38305 } 38306 const filters = this.keyFilter.split("+"); 38307 if (this.keyFilterDissatisfied(event, filters)) { 38308 return true; 38309 } 38310 const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0]; 38311 if (!standardFilter) { 38312 return false; 38313 } 38314 if (!hasProperty(this.keyMappings, standardFilter)) { 38315 error(`contains unknown key filter: ${this.keyFilter}`); 38316 } 38317 return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase(); 38318 } 38319 shouldIgnoreMouseEvent(event) { 38320 if (!this.keyFilter) { 38321 return false; 38322 } 38323 const filters = [this.keyFilter]; 38324 if (this.keyFilterDissatisfied(event, filters)) { 38325 return true; 38326 } 38327 return false; 38328 } 38329 get params() { 38330 const params = {}; 38331 const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, "i"); 38332 for (const { name, value } of Array.from(this.element.attributes)) { 38333 const match = name.match(pattern); 38334 const key = match && match[1]; 38335 if (key) { 38336 params[camelize(key)] = typecast(value); 38337 } 38338 } 38339 return params; 38340 } 38341 get eventTargetName() { 38342 return stringifyEventTarget(this.eventTarget); 38343 } 38344 get keyMappings() { 38345 return this.schema.keyMappings; 38346 } 38347 keyFilterDissatisfied(event, filters) { 38348 const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier)); 38349 return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift; 38350 } 38351}; 38352var defaultEventNames = { 38353 a: () => "click", 38354 button: () => "click", 38355 form: () => "submit", 38356 details: () => "toggle", 38357 input: (e3) => e3.getAttribute("type") == "submit" ? "click" : "input", 38358 select: () => "change", 38359 textarea: () => "input" 38360}; 38361function getDefaultEventNameForElement(element) { 38362 const tagName = element.tagName.toLowerCase(); 38363 if (tagName in defaultEventNames) { 38364 return defaultEventNames[tagName](element); 38365 } 38366} 38367function error(message) { 38368 throw new Error(message); 38369} 38370function typecast(value) { 38371 try { 38372 return JSON.parse(value); 38373 } catch (o_O) { 38374 return value; 38375 } 38376} 38377var Binding = class { 38378 constructor(context, action) { 38379 this.context = context; 38380 this.action = action; 38381 } 38382 get index() { 38383 return this.action.index; 38384 } 38385 get eventTarget() { 38386 return this.action.eventTarget; 38387 } 38388 get eventOptions() { 38389 return this.action.eventOptions; 38390 } 38391 get identifier() { 38392 return this.context.identifier; 38393 } 38394 handleEvent(event) { 38395 const actionEvent = this.prepareActionEvent(event); 38396 if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) { 38397 this.invokeWithEvent(actionEvent); 38398 } 38399 } 38400 get eventName() { 38401 return this.action.eventName; 38402 } 38403 get method() { 38404 const method = this.controller[this.methodName]; 38405 if (typeof method == "function") { 38406 return method; 38407 } 38408 throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`); 38409 } 38410 applyEventModifiers(event) { 38411 const { element } = this.action; 38412 const { actionDescriptorFilters } = this.context.application; 38413 const { controller } = this.context; 38414 let passes = true; 38415 for (const [name, value] of Object.entries(this.eventOptions)) { 38416 if (name in actionDescriptorFilters) { 38417 const filter = actionDescriptorFilters[name]; 38418 passes = passes && filter({ name, value, event, element, controller }); 38419 } else { 38420 continue; 38421 } 38422 } 38423 return passes; 38424 } 38425 prepareActionEvent(event) { 38426 return Object.assign(event, { params: this.action.params }); 38427 } 38428 invokeWithEvent(event) { 38429 const { target, currentTarget } = event; 38430 try { 38431 this.method.call(this.controller, event); 38432 this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName }); 38433 } catch (error2) { 38434 const { identifier, controller, element, index } = this; 38435 const detail = { identifier, controller, element, index, event }; 38436 this.context.handleError(error2, `invoking action "${this.action}"`, detail); 38437 } 38438 } 38439 willBeInvokedByEvent(event) { 38440 const eventTarget = event.target; 38441 if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) { 38442 return false; 38443 } 38444 if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) { 38445 return false; 38446 } 38447 if (this.element === eventTarget) { 38448 return true; 38449 } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) { 38450 return this.scope.containsElement(eventTarget); 38451 } else { 38452 return this.scope.containsElement(this.action.element); 38453 } 38454 } 38455 get controller() { 38456 return this.context.controller; 38457 } 38458 get methodName() { 38459 return this.action.methodName; 38460 } 38461 get element() { 38462 return this.scope.element; 38463 } 38464 get scope() { 38465 return this.context.scope; 38466 } 38467}; 38468var ElementObserver = class { 38469 constructor(element, delegate) { 38470 this.mutationObserverInit = { attributes: true, childList: true, subtree: true }; 38471 this.element = element; 38472 this.started = false; 38473 this.delegate = delegate; 38474 this.elements = /* @__PURE__ */ new Set(); 38475 this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations)); 38476 } 38477 start() { 38478 if (!this.started) { 38479 this.started = true; 38480 this.mutationObserver.observe(this.element, this.mutationObserverInit); 38481 this.refresh(); 38482 } 38483 } 38484 pause(callback) { 38485 if (this.started) { 38486 this.mutationObserver.disconnect(); 38487 this.started = false; 38488 } 38489 callback(); 38490 if (!this.started) { 38491 this.mutationObserver.observe(this.element, this.mutationObserverInit); 38492 this.started = true; 38493 } 38494 } 38495 stop() { 38496 if (this.started) { 38497 this.mutationObserver.takeRecords(); 38498 this.mutationObserver.disconnect(); 38499 this.started = false; 38500 } 38501 } 38502 refresh() { 38503 if (this.started) { 38504 const matches = new Set(this.matchElementsInTree()); 38505 for (const element of Array.from(this.elements)) { 38506 if (!matches.has(element)) { 38507 this.removeElement(element); 38508 } 38509 } 38510 for (const element of Array.from(matches)) { 38511 this.addElement(element); 38512 } 38513 } 38514 } 38515 processMutations(mutations) { 38516 if (this.started) { 38517 for (const mutation of mutations) { 38518 this.processMutation(mutation); 38519 } 38520 } 38521 } 38522 processMutation(mutation) { 38523 if (mutation.type == "attributes") { 38524 this.processAttributeChange(mutation.target, mutation.attributeName); 38525 } else if (mutation.type == "childList") { 38526 this.processRemovedNodes(mutation.removedNodes); 38527 this.processAddedNodes(mutation.addedNodes); 38528 } 38529 } 38530 processAttributeChange(element, attributeName) { 38531 if (this.elements.has(element)) { 38532 if (this.delegate.elementAttributeChanged && this.matchElement(element)) { 38533 this.delegate.elementAttributeChanged(element, attributeName); 38534 } else { 38535 this.removeElement(element); 38536 } 38537 } else if (this.matchElement(element)) { 38538 this.addElement(element); 38539 } 38540 } 38541 processRemovedNodes(nodes) { 38542 for (const node of Array.from(nodes)) { 38543 const element = this.elementFromNode(node); 38544 if (element) { 38545 this.processTree(element, this.removeElement); 38546 } 38547 } 38548 } 38549 processAddedNodes(nodes) { 38550 for (const node of Array.from(nodes)) { 38551 const element = this.elementFromNode(node); 38552 if (element && this.elementIsActive(element)) { 38553 this.processTree(element, this.addElement); 38554 } 38555 } 38556 } 38557 matchElement(element) { 38558 return this.delegate.matchElement(element); 38559 } 38560 matchElementsInTree(tree = this.element) { 38561 return this.delegate.matchElementsInTree(tree); 38562 } 38563 processTree(tree, processor) { 38564 for (const element of this.matchElementsInTree(tree)) { 38565 processor.call(this, element); 38566 } 38567 } 38568 elementFromNode(node) { 38569 if (node.nodeType == Node.ELEMENT_NODE) { 38570 return node; 38571 } 38572 } 38573 elementIsActive(element) { 38574 if (element.isConnected != this.element.isConnected) { 38575 return false; 38576 } else { 38577 return this.element.contains(element); 38578 } 38579 } 38580 addElement(element) { 38581 if (!this.elements.has(element)) { 38582 if (this.elementIsActive(element)) { 38583 this.elements.add(element); 38584 if (this.delegate.elementMatched) { 38585 this.delegate.elementMatched(element); 38586 } 38587 } 38588 } 38589 } 38590 removeElement(element) { 38591 if (this.elements.has(element)) { 38592 this.elements.delete(element); 38593 if (this.delegate.elementUnmatched) { 38594 this.delegate.elementUnmatched(element); 38595 } 38596 } 38597 } 38598}; 38599var AttributeObserver = class { 38600 constructor(element, attributeName, delegate) { 38601 this.attributeName = attributeName; 38602 this.delegate = delegate; 38603 this.elementObserver = new ElementObserver(element, this); 38604 } 38605 get element() { 38606 return this.elementObserver.element; 38607 } 38608 get selector() { 38609 return `[${this.attributeName}]`; 38610 } 38611 start() { 38612 this.elementObserver.start(); 38613 } 38614 pause(callback) { 38615 this.elementObserver.pause(callback); 38616 } 38617 stop() { 38618 this.elementObserver.stop(); 38619 } 38620 refresh() { 38621 this.elementObserver.refresh(); 38622 } 38623 get started() { 38624 return this.elementObserver.started; 38625 } 38626 matchElement(element) { 38627 return element.hasAttribute(this.attributeName); 38628 } 38629 matchElementsInTree(tree) { 38630 const match = this.matchElement(tree) ? [tree] : []; 38631 const matches = Array.from(tree.querySelectorAll(this.selector)); 38632 return match.concat(matches); 38633 } 38634 elementMatched(element) { 38635 if (this.delegate.elementMatchedAttribute) { 38636 this.delegate.elementMatchedAttribute(element, this.attributeName); 38637 } 38638 } 38639 elementUnmatched(element) { 38640 if (this.delegate.elementUnmatchedAttribute) { 38641 this.delegate.elementUnmatchedAttribute(element, this.attributeName); 38642 } 38643 } 38644 elementAttributeChanged(element, attributeName) { 38645 if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) { 38646 this.delegate.elementAttributeValueChanged(element, attributeName); 38647 } 38648 } 38649}; 38650function add(map, key, value) { 38651 fetch2(map, key).add(value); 38652} 38653function del(map, key, value) { 38654 fetch2(map, key).delete(value); 38655 prune(map, key); 38656} 38657function fetch2(map, key) { 38658 let values = map.get(key); 38659 if (!values) { 38660 values = /* @__PURE__ */ new Set(); 38661 map.set(key, values); 38662 } 38663 return values; 38664} 38665function prune(map, key) { 38666 const values = map.get(key); 38667 if (values != null && values.size == 0) { 38668 map.delete(key); 38669 } 38670} 38671var Multimap = class { 38672 constructor() { 38673 this.valuesByKey = /* @__PURE__ */ new Map(); 38674 } 38675 get keys() { 38676 return Array.from(this.valuesByKey.keys()); 38677 } 38678 get values() { 38679 const sets = Array.from(this.valuesByKey.values()); 38680 return sets.reduce((values, set) => values.concat(Array.from(set)), []); 38681 } 38682 get size() { 38683 const sets = Array.from(this.valuesByKey.values()); 38684 return sets.reduce((size, set) => size + set.size, 0); 38685 } 38686 add(key, value) { 38687 add(this.valuesByKey, key, value); 38688 } 38689 delete(key, value) { 38690 del(this.valuesByKey, key, value); 38691 } 38692 has(key, value) { 38693 const values = this.valuesByKey.get(key); 38694 return values != null && values.has(value); 38695 } 38696 hasKey(key) { 38697 return this.valuesByKey.has(key); 38698 } 38699 hasValue(value) { 38700 const sets = Array.from(this.valuesByKey.values()); 38701 return sets.some((set) => set.has(value)); 38702 } 38703 getValuesForKey(key) { 38704 const values = this.valuesByKey.get(key); 38705 return values ? Array.from(values) : []; 38706 } 38707 getKeysForValue(value) { 38708 return Array.from(this.valuesByKey).filter(([_key, values]) => values.has(value)).map(([key, _values]) => key); 38709 } 38710}; 38711var SelectorObserver = class { 38712 constructor(element, selector, delegate, details) { 38713 this._selector = selector; 38714 this.details = details; 38715 this.elementObserver = new ElementObserver(element, this); 38716 this.delegate = delegate; 38717 this.matchesByElement = new Multimap(); 38718 } 38719 get started() { 38720 return this.elementObserver.started; 38721 } 38722 get selector() { 38723 return this._selector; 38724 } 38725 set selector(selector) { 38726 this._selector = selector; 38727 this.refresh(); 38728 } 38729 start() { 38730 this.elementObserver.start(); 38731 } 38732 pause(callback) { 38733 this.elementObserver.pause(callback); 38734 } 38735 stop() { 38736 this.elementObserver.stop(); 38737 } 38738 refresh() { 38739 this.elementObserver.refresh(); 38740 } 38741 get element() { 38742 return this.elementObserver.element; 38743 } 38744 matchElement(element) { 38745 const { selector } = this; 38746 if (selector) { 38747 const matches = element.matches(selector); 38748 if (this.delegate.selectorMatchElement) { 38749 return matches && this.delegate.selectorMatchElement(element, this.details); 38750 } 38751 return matches; 38752 } else { 38753 return false; 38754 } 38755 } 38756 matchElementsInTree(tree) { 38757 const { selector } = this; 38758 if (selector) { 38759 const match = this.matchElement(tree) ? [tree] : []; 38760 const matches = Array.from(tree.querySelectorAll(selector)).filter((match2) => this.matchElement(match2)); 38761 return match.concat(matches); 38762 } else { 38763 return []; 38764 } 38765 } 38766 elementMatched(element) { 38767 const { selector } = this; 38768 if (selector) { 38769 this.selectorMatched(element, selector); 38770 } 38771 } 38772 elementUnmatched(element) { 38773 const selectors = this.matchesByElement.getKeysForValue(element); 38774 for (const selector of selectors) { 38775 this.selectorUnmatched(element, selector); 38776 } 38777 } 38778 elementAttributeChanged(element, _attributeName) { 38779 const { selector } = this; 38780 if (selector) { 38781 const matches = this.matchElement(element); 38782 const matchedBefore = this.matchesByElement.has(selector, element); 38783 if (matches && !matchedBefore) { 38784 this.selectorMatched(element, selector); 38785 } else if (!matches && matchedBefore) { 38786 this.selectorUnmatched(element, selector); 38787 } 38788 } 38789 } 38790 selectorMatched(element, selector) { 38791 this.delegate.selectorMatched(element, selector, this.details); 38792 this.matchesByElement.add(selector, element); 38793 } 38794 selectorUnmatched(element, selector) { 38795 this.delegate.selectorUnmatched(element, selector, this.details); 38796 this.matchesByElement.delete(selector, element); 38797 } 38798}; 38799var StringMapObserver = class { 38800 constructor(element, delegate) { 38801 this.element = element; 38802 this.delegate = delegate; 38803 this.started = false; 38804 this.stringMap = /* @__PURE__ */ new Map(); 38805 this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations)); 38806 } 38807 start() { 38808 if (!this.started) { 38809 this.started = true; 38810 this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true }); 38811 this.refresh(); 38812 } 38813 } 38814 stop() { 38815 if (this.started) { 38816 this.mutationObserver.takeRecords(); 38817 this.mutationObserver.disconnect(); 38818 this.started = false; 38819 } 38820 } 38821 refresh() { 38822 if (this.started) { 38823 for (const attributeName of this.knownAttributeNames) { 38824 this.refreshAttribute(attributeName, null); 38825 } 38826 } 38827 } 38828 processMutations(mutations) { 38829 if (this.started) { 38830 for (const mutation of mutations) { 38831 this.processMutation(mutation); 38832 } 38833 } 38834 } 38835 processMutation(mutation) { 38836 const attributeName = mutation.attributeName; 38837 if (attributeName) { 38838 this.refreshAttribute(attributeName, mutation.oldValue); 38839 } 38840 } 38841 refreshAttribute(attributeName, oldValue) { 38842 const key = this.delegate.getStringMapKeyForAttribute(attributeName); 38843 if (key != null) { 38844 if (!this.stringMap.has(attributeName)) { 38845 this.stringMapKeyAdded(key, attributeName); 38846 } 38847 const value = this.element.getAttribute(attributeName); 38848 if (this.stringMap.get(attributeName) != value) { 38849 this.stringMapValueChanged(value, key, oldValue); 38850 } 38851 if (value == null) { 38852 const oldValue2 = this.stringMap.get(attributeName); 38853 this.stringMap.delete(attributeName); 38854 if (oldValue2) 38855 this.stringMapKeyRemoved(key, attributeName, oldValue2); 38856 } else { 38857 this.stringMap.set(attributeName, value); 38858 } 38859 } 38860 } 38861 stringMapKeyAdded(key, attributeName) { 38862 if (this.delegate.stringMapKeyAdded) { 38863 this.delegate.stringMapKeyAdded(key, attributeName); 38864 } 38865 } 38866 stringMapValueChanged(value, key, oldValue) { 38867 if (this.delegate.stringMapValueChanged) { 38868 this.delegate.stringMapValueChanged(value, key, oldValue); 38869 } 38870 } 38871 stringMapKeyRemoved(key, attributeName, oldValue) { 38872 if (this.delegate.stringMapKeyRemoved) { 38873 this.delegate.stringMapKeyRemoved(key, attributeName, oldValue); 38874 } 38875 } 38876 get knownAttributeNames() { 38877 return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames))); 38878 } 38879 get currentAttributeNames() { 38880 return Array.from(this.element.attributes).map((attribute) => attribute.name); 38881 } 38882 get recordedAttributeNames() { 38883 return Array.from(this.stringMap.keys()); 38884 } 38885}; 38886var TokenListObserver = class { 38887 constructor(element, attributeName, delegate) { 38888 this.attributeObserver = new AttributeObserver(element, attributeName, this); 38889 this.delegate = delegate; 38890 this.tokensByElement = new Multimap(); 38891 } 38892 get started() { 38893 return this.attributeObserver.started; 38894 } 38895 start() { 38896 this.attributeObserver.start(); 38897 } 38898 pause(callback) { 38899 this.attributeObserver.pause(callback); 38900 } 38901 stop() { 38902 this.attributeObserver.stop(); 38903 } 38904 refresh() { 38905 this.attributeObserver.refresh(); 38906 } 38907 get element() { 38908 return this.attributeObserver.element; 38909 } 38910 get attributeName() { 38911 return this.attributeObserver.attributeName; 38912 } 38913 elementMatchedAttribute(element) { 38914 this.tokensMatched(this.readTokensForElement(element)); 38915 } 38916 elementAttributeValueChanged(element) { 38917 const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element); 38918 this.tokensUnmatched(unmatchedTokens); 38919 this.tokensMatched(matchedTokens); 38920 } 38921 elementUnmatchedAttribute(element) { 38922 this.tokensUnmatched(this.tokensByElement.getValuesForKey(element)); 38923 } 38924 tokensMatched(tokens) { 38925 tokens.forEach((token) => this.tokenMatched(token)); 38926 } 38927 tokensUnmatched(tokens) { 38928 tokens.forEach((token) => this.tokenUnmatched(token)); 38929 } 38930 tokenMatched(token) { 38931 this.delegate.tokenMatched(token); 38932 this.tokensByElement.add(token.element, token); 38933 } 38934 tokenUnmatched(token) { 38935 this.delegate.tokenUnmatched(token); 38936 this.tokensByElement.delete(token.element, token); 38937 } 38938 refreshTokensForElement(element) { 38939 const previousTokens = this.tokensByElement.getValuesForKey(element); 38940 const currentTokens = this.readTokensForElement(element); 38941 const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken)); 38942 if (firstDifferingIndex == -1) { 38943 return [[], []]; 38944 } else { 38945 return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)]; 38946 } 38947 } 38948 readTokensForElement(element) { 38949 const attributeName = this.attributeName; 38950 const tokenString = element.getAttribute(attributeName) || ""; 38951 return parseTokenString(tokenString, element, attributeName); 38952 } 38953}; 38954function parseTokenString(tokenString, element, attributeName) { 38955 return tokenString.trim().split(/\s+/).filter((content) => content.length).map((content, index) => ({ element, attributeName, content, index })); 38956} 38957function zip(left, right) { 38958 const length = Math.max(left.length, right.length); 38959 return Array.from({ length }, (_3, index) => [left[index], right[index]]); 38960} 38961function tokensAreEqual(left, right) { 38962 return left && right && left.index == right.index && left.content == right.content; 38963} 38964var ValueListObserver = class { 38965 constructor(element, attributeName, delegate) { 38966 this.tokenListObserver = new TokenListObserver(element, attributeName, this); 38967 this.delegate = delegate; 38968 this.parseResultsByToken = /* @__PURE__ */ new WeakMap(); 38969 this.valuesByTokenByElement = /* @__PURE__ */ new WeakMap(); 38970 } 38971 get started() { 38972 return this.tokenListObserver.started; 38973 } 38974 start() { 38975 this.tokenListObserver.start(); 38976 } 38977 stop() { 38978 this.tokenListObserver.stop(); 38979 } 38980 refresh() { 38981 this.tokenListObserver.refresh(); 38982 } 38983 get element() { 38984 return this.tokenListObserver.element; 38985 } 38986 get attributeName() { 38987 return this.tokenListObserver.attributeName; 38988 } 38989 tokenMatched(token) { 38990 const { element } = token; 38991 const { value } = this.fetchParseResultForToken(token); 38992 if (value) { 38993 this.fetchValuesByTokenForElement(element).set(token, value); 38994 this.delegate.elementMatchedValue(element, value); 38995 } 38996 } 38997 tokenUnmatched(token) { 38998 const { element } = token; 38999 const { value } = this.fetchParseResultForToken(token); 39000 if (value) { 39001 this.fetchValuesByTokenForElement(element).delete(token); 39002 this.delegate.elementUnmatchedValue(element, value); 39003 } 39004 } 39005 fetchParseResultForToken(token) { 39006 let parseResult = this.parseResultsByToken.get(token); 39007 if (!parseResult) { 39008 parseResult = this.parseToken(token); 39009 this.parseResultsByToken.set(token, parseResult); 39010 } 39011 return parseResult; 39012 } 39013 fetchValuesByTokenForElement(element) { 39014 let valuesByToken = this.valuesByTokenByElement.get(element); 39015 if (!valuesByToken) { 39016 valuesByToken = /* @__PURE__ */ new Map(); 39017 this.valuesByTokenByElement.set(element, valuesByToken); 39018 } 39019 return valuesByToken; 39020 } 39021 parseToken(token) { 39022 try { 39023 const value = this.delegate.parseValueForToken(token); 39024 return { value }; 39025 } catch (error2) { 39026 return { error: error2 }; 39027 } 39028 } 39029}; 39030var BindingObserver = class { 39031 constructor(context, delegate) { 39032 this.context = context; 39033 this.delegate = delegate; 39034 this.bindingsByAction = /* @__PURE__ */ new Map(); 39035 } 39036 start() { 39037 if (!this.valueListObserver) { 39038 this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this); 39039 this.valueListObserver.start(); 39040 } 39041 } 39042 stop() { 39043 if (this.valueListObserver) { 39044 this.valueListObserver.stop(); 39045 delete this.valueListObserver; 39046 this.disconnectAllActions(); 39047 } 39048 } 39049 get element() { 39050 return this.context.element; 39051 } 39052 get identifier() { 39053 return this.context.identifier; 39054 } 39055 get actionAttribute() { 39056 return this.schema.actionAttribute; 39057 } 39058 get schema() { 39059 return this.context.schema; 39060 } 39061 get bindings() { 39062 return Array.from(this.bindingsByAction.values()); 39063 } 39064 connectAction(action) { 39065 const binding = new Binding(this.context, action); 39066 this.bindingsByAction.set(action, binding); 39067 this.delegate.bindingConnected(binding); 39068 } 39069 disconnectAction(action) { 39070 const binding = this.bindingsByAction.get(action); 39071 if (binding) { 39072 this.bindingsByAction.delete(action); 39073 this.delegate.bindingDisconnected(binding); 39074 } 39075 } 39076 disconnectAllActions() { 39077 this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true)); 39078 this.bindingsByAction.clear(); 39079 } 39080 parseValueForToken(token) { 39081 const action = Action.forToken(token, this.schema); 39082 if (action.identifier == this.identifier) { 39083 return action; 39084 } 39085 } 39086 elementMatchedValue(element, action) { 39087 this.connectAction(action); 39088 } 39089 elementUnmatchedValue(element, action) { 39090 this.disconnectAction(action); 39091 } 39092}; 39093var ValueObserver = class { 39094 constructor(context, receiver) { 39095 this.context = context; 39096 this.receiver = receiver; 39097 this.stringMapObserver = new StringMapObserver(this.element, this); 39098 this.valueDescriptorMap = this.controller.valueDescriptorMap; 39099 } 39100 start() { 39101 this.stringMapObserver.start(); 39102 this.invokeChangedCallbacksForDefaultValues(); 39103 } 39104 stop() { 39105 this.stringMapObserver.stop(); 39106 } 39107 get element() { 39108 return this.context.element; 39109 } 39110 get controller() { 39111 return this.context.controller; 39112 } 39113 getStringMapKeyForAttribute(attributeName) { 39114 if (attributeName in this.valueDescriptorMap) { 39115 return this.valueDescriptorMap[attributeName].name; 39116 } 39117 } 39118 stringMapKeyAdded(key, attributeName) { 39119 const descriptor = this.valueDescriptorMap[attributeName]; 39120 if (!this.hasValue(key)) { 39121 this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue)); 39122 } 39123 } 39124 stringMapValueChanged(value, name, oldValue) { 39125 const descriptor = this.valueDescriptorNameMap[name]; 39126 if (value === null) 39127 return; 39128 if (oldValue === null) { 39129 oldValue = descriptor.writer(descriptor.defaultValue); 39130 } 39131 this.invokeChangedCallback(name, value, oldValue); 39132 } 39133 stringMapKeyRemoved(key, attributeName, oldValue) { 39134 const descriptor = this.valueDescriptorNameMap[key]; 39135 if (this.hasValue(key)) { 39136 this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue); 39137 } else { 39138 this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue); 39139 } 39140 } 39141 invokeChangedCallbacksForDefaultValues() { 39142 for (const { key, name, defaultValue, writer } of this.valueDescriptors) { 39143 if (defaultValue != void 0 && !this.controller.data.has(key)) { 39144 this.invokeChangedCallback(name, writer(defaultValue), void 0); 39145 } 39146 } 39147 } 39148 invokeChangedCallback(name, rawValue, rawOldValue) { 39149 const changedMethodName = `${name}Changed`; 39150 const changedMethod = this.receiver[changedMethodName]; 39151 if (typeof changedMethod == "function") { 39152 const descriptor = this.valueDescriptorNameMap[name]; 39153 try { 39154 const value = descriptor.reader(rawValue); 39155 let oldValue = rawOldValue; 39156 if (rawOldValue) { 39157 oldValue = descriptor.reader(rawOldValue); 39158 } 39159 changedMethod.call(this.receiver, value, oldValue); 39160 } catch (error2) { 39161 if (error2 instanceof TypeError) { 39162 error2.message = `Stimulus Value "${this.context.identifier}.${descriptor.name}" - ${error2.message}`; 39163 } 39164 throw error2; 39165 } 39166 } 39167 } 39168 get valueDescriptors() { 39169 const { valueDescriptorMap } = this; 39170 return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]); 39171 } 39172 get valueDescriptorNameMap() { 39173 const descriptors = {}; 39174 Object.keys(this.valueDescriptorMap).forEach((key) => { 39175 const descriptor = this.valueDescriptorMap[key]; 39176 descriptors[descriptor.name] = descriptor; 39177 }); 39178 return descriptors; 39179 } 39180 hasValue(attributeName) { 39181 const descriptor = this.valueDescriptorNameMap[attributeName]; 39182 const hasMethodName = `has${capitalize(descriptor.name)}`; 39183 return this.receiver[hasMethodName]; 39184 } 39185}; 39186var TargetObserver = class { 39187 constructor(context, delegate) { 39188 this.context = context; 39189 this.delegate = delegate; 39190 this.targetsByName = new Multimap(); 39191 } 39192 start() { 39193 if (!this.tokenListObserver) { 39194 this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this); 39195 this.tokenListObserver.start(); 39196 } 39197 } 39198 stop() { 39199 if (this.tokenListObserver) { 39200 this.disconnectAllTargets(); 39201 this.tokenListObserver.stop(); 39202 delete this.tokenListObserver; 39203 } 39204 } 39205 tokenMatched({ element, content: name }) { 39206 if (this.scope.containsElement(element)) { 39207 this.connectTarget(element, name); 39208 } 39209 } 39210 tokenUnmatched({ element, content: name }) { 39211 this.disconnectTarget(element, name); 39212 } 39213 connectTarget(element, name) { 39214 var _a3; 39215 if (!this.targetsByName.has(name, element)) { 39216 this.targetsByName.add(name, element); 39217 (_a3 = this.tokenListObserver) === null || _a3 === void 0 ? void 0 : _a3.pause(() => this.delegate.targetConnected(element, name)); 39218 } 39219 } 39220 disconnectTarget(element, name) { 39221 var _a3; 39222 if (this.targetsByName.has(name, element)) { 39223 this.targetsByName.delete(name, element); 39224 (_a3 = this.tokenListObserver) === null || _a3 === void 0 ? void 0 : _a3.pause(() => this.delegate.targetDisconnected(element, name)); 39225 } 39226 } 39227 disconnectAllTargets() { 39228 for (const name of this.targetsByName.keys) { 39229 for (const element of this.targetsByName.getValuesForKey(name)) { 39230 this.disconnectTarget(element, name); 39231 } 39232 } 39233 } 39234 get attributeName() { 39235 return `data-${this.context.identifier}-target`; 39236 } 39237 get element() { 39238 return this.context.element; 39239 } 39240 get scope() { 39241 return this.context.scope; 39242 } 39243}; 39244function readInheritableStaticArrayValues(constructor, propertyName) { 39245 const ancestors = getAncestorsForConstructor(constructor); 39246 return Array.from(ancestors.reduce((values, constructor2) => { 39247 getOwnStaticArrayValues(constructor2, propertyName).forEach((name) => values.add(name)); 39248 return values; 39249 }, /* @__PURE__ */ new Set())); 39250} 39251function readInheritableStaticObjectPairs(constructor, propertyName) { 39252 const ancestors = getAncestorsForConstructor(constructor); 39253 return ancestors.reduce((pairs, constructor2) => { 39254 pairs.push(...getOwnStaticObjectPairs(constructor2, propertyName)); 39255 return pairs; 39256 }, []); 39257} 39258function getAncestorsForConstructor(constructor) { 39259 const ancestors = []; 39260 while (constructor) { 39261 ancestors.push(constructor); 39262 constructor = Object.getPrototypeOf(constructor); 39263 } 39264 return ancestors.reverse(); 39265} 39266function getOwnStaticArrayValues(constructor, propertyName) { 39267 const definition = constructor[propertyName]; 39268 return Array.isArray(definition) ? definition : []; 39269} 39270function getOwnStaticObjectPairs(constructor, propertyName) { 39271 const definition = constructor[propertyName]; 39272 return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : []; 39273} 39274var OutletObserver = class { 39275 constructor(context, delegate) { 39276 this.started = false; 39277 this.context = context; 39278 this.delegate = delegate; 39279 this.outletsByName = new Multimap(); 39280 this.outletElementsByName = new Multimap(); 39281 this.selectorObserverMap = /* @__PURE__ */ new Map(); 39282 this.attributeObserverMap = /* @__PURE__ */ new Map(); 39283 } 39284 start() { 39285 if (!this.started) { 39286 this.outletDefinitions.forEach((outletName) => { 39287 this.setupSelectorObserverForOutlet(outletName); 39288 this.setupAttributeObserverForOutlet(outletName); 39289 }); 39290 this.started = true; 39291 this.dependentContexts.forEach((context) => context.refresh()); 39292 } 39293 } 39294 refresh() { 39295 this.selectorObserverMap.forEach((observer) => observer.refresh()); 39296 this.attributeObserverMap.forEach((observer) => observer.refresh()); 39297 } 39298 stop() { 39299 if (this.started) { 39300 this.started = false; 39301 this.disconnectAllOutlets(); 39302 this.stopSelectorObservers(); 39303 this.stopAttributeObservers(); 39304 } 39305 } 39306 stopSelectorObservers() { 39307 if (this.selectorObserverMap.size > 0) { 39308 this.selectorObserverMap.forEach((observer) => observer.stop()); 39309 this.selectorObserverMap.clear(); 39310 } 39311 } 39312 stopAttributeObservers() { 39313 if (this.attributeObserverMap.size > 0) { 39314 this.attributeObserverMap.forEach((observer) => observer.stop()); 39315 this.attributeObserverMap.clear(); 39316 } 39317 } 39318 selectorMatched(element, _selector, { outletName }) { 39319 const outlet = this.getOutlet(element, outletName); 39320 if (outlet) { 39321 this.connectOutlet(outlet, element, outletName); 39322 } 39323 } 39324 selectorUnmatched(element, _selector, { outletName }) { 39325 const outlet = this.getOutletFromMap(element, outletName); 39326 if (outlet) { 39327 this.disconnectOutlet(outlet, element, outletName); 39328 } 39329 } 39330 selectorMatchElement(element, { outletName }) { 39331 const selector = this.selector(outletName); 39332 const hasOutlet = this.hasOutlet(element, outletName); 39333 const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`); 39334 if (selector) { 39335 return hasOutlet && hasOutletController && element.matches(selector); 39336 } else { 39337 return false; 39338 } 39339 } 39340 elementMatchedAttribute(_element, attributeName) { 39341 const outletName = this.getOutletNameFromOutletAttributeName(attributeName); 39342 if (outletName) { 39343 this.updateSelectorObserverForOutlet(outletName); 39344 } 39345 } 39346 elementAttributeValueChanged(_element, attributeName) { 39347 const outletName = this.getOutletNameFromOutletAttributeName(attributeName); 39348 if (outletName) { 39349 this.updateSelectorObserverForOutlet(outletName); 39350 } 39351 } 39352 elementUnmatchedAttribute(_element, attributeName) { 39353 const outletName = this.getOutletNameFromOutletAttributeName(attributeName); 39354 if (outletName) { 39355 this.updateSelectorObserverForOutlet(outletName); 39356 } 39357 } 39358 connectOutlet(outlet, element, outletName) { 39359 var _a3; 39360 if (!this.outletElementsByName.has(outletName, element)) { 39361 this.outletsByName.add(outletName, outlet); 39362 this.outletElementsByName.add(outletName, element); 39363 (_a3 = this.selectorObserverMap.get(outletName)) === null || _a3 === void 0 ? void 0 : _a3.pause(() => this.delegate.outletConnected(outlet, element, outletName)); 39364 } 39365 } 39366 disconnectOutlet(outlet, element, outletName) { 39367 var _a3; 39368 if (this.outletElementsByName.has(outletName, element)) { 39369 this.outletsByName.delete(outletName, outlet); 39370 this.outletElementsByName.delete(outletName, element); 39371 (_a3 = this.selectorObserverMap.get(outletName)) === null || _a3 === void 0 ? void 0 : _a3.pause(() => this.delegate.outletDisconnected(outlet, element, outletName)); 39372 } 39373 } 39374 disconnectAllOutlets() { 39375 for (const outletName of this.outletElementsByName.keys) { 39376 for (const element of this.outletElementsByName.getValuesForKey(outletName)) { 39377 for (const outlet of this.outletsByName.getValuesForKey(outletName)) { 39378 this.disconnectOutlet(outlet, element, outletName); 39379 } 39380 } 39381 } 39382 } 39383 updateSelectorObserverForOutlet(outletName) { 39384 const observer = this.selectorObserverMap.get(outletName); 39385 if (observer) { 39386 observer.selector = this.selector(outletName); 39387 } 39388 } 39389 setupSelectorObserverForOutlet(outletName) { 39390 const selector = this.selector(outletName); 39391 const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName }); 39392 this.selectorObserverMap.set(outletName, selectorObserver); 39393 selectorObserver.start(); 39394 } 39395 setupAttributeObserverForOutlet(outletName) { 39396 const attributeName = this.attributeNameForOutletName(outletName); 39397 const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this); 39398 this.attributeObserverMap.set(outletName, attributeObserver); 39399 attributeObserver.start(); 39400 } 39401 selector(outletName) { 39402 return this.scope.outlets.getSelectorForOutletName(outletName); 39403 } 39404 attributeNameForOutletName(outletName) { 39405 return this.scope.schema.outletAttributeForScope(this.identifier, outletName); 39406 } 39407 getOutletNameFromOutletAttributeName(attributeName) { 39408 return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName); 39409 } 39410 get outletDependencies() { 39411 const dependencies = new Multimap(); 39412 this.router.modules.forEach((module) => { 39413 const constructor = module.definition.controllerConstructor; 39414 const outlets = readInheritableStaticArrayValues(constructor, "outlets"); 39415 outlets.forEach((outlet) => dependencies.add(outlet, module.identifier)); 39416 }); 39417 return dependencies; 39418 } 39419 get outletDefinitions() { 39420 return this.outletDependencies.getKeysForValue(this.identifier); 39421 } 39422 get dependentControllerIdentifiers() { 39423 return this.outletDependencies.getValuesForKey(this.identifier); 39424 } 39425 get dependentContexts() { 39426 const identifiers = this.dependentControllerIdentifiers; 39427 return this.router.contexts.filter((context) => identifiers.includes(context.identifier)); 39428 } 39429 hasOutlet(element, outletName) { 39430 return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName); 39431 } 39432 getOutlet(element, outletName) { 39433 return this.application.getControllerForElementAndIdentifier(element, outletName); 39434 } 39435 getOutletFromMap(element, outletName) { 39436 return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element); 39437 } 39438 get scope() { 39439 return this.context.scope; 39440 } 39441 get schema() { 39442 return this.context.schema; 39443 } 39444 get identifier() { 39445 return this.context.identifier; 39446 } 39447 get application() { 39448 return this.context.application; 39449 } 39450 get router() { 39451 return this.application.router; 39452 } 39453}; 39454var Context = class { 39455 constructor(module, scope) { 39456 this.logDebugActivity = (functionName, detail = {}) => { 39457 const { identifier, controller, element } = this; 39458 detail = Object.assign({ identifier, controller, element }, detail); 39459 this.application.logDebugActivity(this.identifier, functionName, detail); 39460 }; 39461 this.module = module; 39462 this.scope = scope; 39463 this.controller = new module.controllerConstructor(this); 39464 this.bindingObserver = new BindingObserver(this, this.dispatcher); 39465 this.valueObserver = new ValueObserver(this, this.controller); 39466 this.targetObserver = new TargetObserver(this, this); 39467 this.outletObserver = new OutletObserver(this, this); 39468 try { 39469 this.controller.initialize(); 39470 this.logDebugActivity("initialize"); 39471 } catch (error2) { 39472 this.handleError(error2, "initializing controller"); 39473 } 39474 } 39475 connect() { 39476 this.bindingObserver.start(); 39477 this.valueObserver.start(); 39478 this.targetObserver.start(); 39479 this.outletObserver.start(); 39480 try { 39481 this.controller.connect(); 39482 this.logDebugActivity("connect"); 39483 } catch (error2) { 39484 this.handleError(error2, "connecting controller"); 39485 } 39486 } 39487 refresh() { 39488 this.outletObserver.refresh(); 39489 } 39490 disconnect() { 39491 try { 39492 this.controller.disconnect(); 39493 this.logDebugActivity("disconnect"); 39494 } catch (error2) { 39495 this.handleError(error2, "disconnecting controller"); 39496 } 39497 this.outletObserver.stop(); 39498 this.targetObserver.stop(); 39499 this.valueObserver.stop(); 39500 this.bindingObserver.stop(); 39501 } 39502 get application() { 39503 return this.module.application; 39504 } 39505 get identifier() { 39506 return this.module.identifier; 39507 } 39508 get schema() { 39509 return this.application.schema; 39510 } 39511 get dispatcher() { 39512 return this.application.dispatcher; 39513 } 39514 get element() { 39515 return this.scope.element; 39516 } 39517 get parentElement() { 39518 return this.element.parentElement; 39519 } 39520 handleError(error2, message, detail = {}) { 39521 const { identifier, controller, element } = this; 39522 detail = Object.assign({ identifier, controller, element }, detail); 39523 this.application.handleError(error2, `Error ${message}`, detail); 39524 } 39525 targetConnected(element, name) { 39526 this.invokeControllerMethod(`${name}TargetConnected`, element); 39527 } 39528 targetDisconnected(element, name) { 39529 this.invokeControllerMethod(`${name}TargetDisconnected`, element); 39530 } 39531 outletConnected(outlet, element, name) { 39532 this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element); 39533 } 39534 outletDisconnected(outlet, element, name) { 39535 this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element); 39536 } 39537 invokeControllerMethod(methodName, ...args) { 39538 const controller = this.controller; 39539 if (typeof controller[methodName] == "function") { 39540 controller[methodName](...args); 39541 } 39542 } 39543}; 39544function bless(constructor) { 39545 return shadow(constructor, getBlessedProperties(constructor)); 39546} 39547function shadow(constructor, properties) { 39548 const shadowConstructor = extend2(constructor); 39549 const shadowProperties = getShadowProperties(constructor.prototype, properties); 39550 Object.defineProperties(shadowConstructor.prototype, shadowProperties); 39551 return shadowConstructor; 39552} 39553function getBlessedProperties(constructor) { 39554 const blessings = readInheritableStaticArrayValues(constructor, "blessings"); 39555 return blessings.reduce((blessedProperties, blessing) => { 39556 const properties = blessing(constructor); 39557 for (const key in properties) { 39558 const descriptor = blessedProperties[key] || {}; 39559 blessedProperties[key] = Object.assign(descriptor, properties[key]); 39560 } 39561 return blessedProperties; 39562 }, {}); 39563} 39564function getShadowProperties(prototype, properties) { 39565 return getOwnKeys(properties).reduce((shadowProperties, key) => { 39566 const descriptor = getShadowedDescriptor(prototype, properties, key); 39567 if (descriptor) { 39568 Object.assign(shadowProperties, { [key]: descriptor }); 39569 } 39570 return shadowProperties; 39571 }, {}); 39572} 39573function getShadowedDescriptor(prototype, properties, key) { 39574 const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key); 39575 const shadowedByValue = shadowingDescriptor && "value" in shadowingDescriptor; 39576 if (!shadowedByValue) { 39577 const descriptor = Object.getOwnPropertyDescriptor(properties, key).value; 39578 if (shadowingDescriptor) { 39579 descriptor.get = shadowingDescriptor.get || descriptor.get; 39580 descriptor.set = shadowingDescriptor.set || descriptor.set; 39581 } 39582 return descriptor; 39583 } 39584} 39585var getOwnKeys = (() => { 39586 if (typeof Object.getOwnPropertySymbols == "function") { 39587 return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)]; 39588 } else { 39589 return Object.getOwnPropertyNames; 39590 } 39591})(); 39592var extend2 = (() => { 39593 function extendWithReflect(constructor) { 39594 function extended() { 39595 return Reflect.construct(constructor, arguments, new.target); 39596 } 39597 extended.prototype = Object.create(constructor.prototype, { 39598 constructor: { value: extended } 39599 }); 39600 Reflect.setPrototypeOf(extended, constructor); 39601 return extended; 39602 } 39603 function testReflectExtension() { 39604 const a3 = function() { 39605 this.a.call(this); 39606 }; 39607 const b3 = extendWithReflect(a3); 39608 b3.prototype.a = function() { 39609 }; 39610 return new b3(); 39611 } 39612 try { 39613 testReflectExtension(); 39614 return extendWithReflect; 39615 } catch (error2) { 39616 return (constructor) => class extended extends constructor { 39617 }; 39618 } 39619})(); 39620function blessDefinition(definition) { 39621 return { 39622 identifier: definition.identifier, 39623 controllerConstructor: bless(definition.controllerConstructor) 39624 }; 39625} 39626var Module = class { 39627 constructor(application2, definition) { 39628 this.application = application2; 39629 this.definition = blessDefinition(definition); 39630 this.contextsByScope = /* @__PURE__ */ new WeakMap(); 39631 this.connectedContexts = /* @__PURE__ */ new Set(); 39632 } 39633 get identifier() { 39634 return this.definition.identifier; 39635 } 39636 get controllerConstructor() { 39637 return this.definition.controllerConstructor; 39638 } 39639 get contexts() { 39640 return Array.from(this.connectedContexts); 39641 } 39642 connectContextForScope(scope) { 39643 const context = this.fetchContextForScope(scope); 39644 this.connectedContexts.add(context); 39645 context.connect(); 39646 } 39647 disconnectContextForScope(scope) { 39648 const context = this.contextsByScope.get(scope); 39649 if (context) { 39650 this.connectedContexts.delete(context); 39651 context.disconnect(); 39652 } 39653 } 39654 fetchContextForScope(scope) { 39655 let context = this.contextsByScope.get(scope); 39656 if (!context) { 39657 context = new Context(this, scope); 39658 this.contextsByScope.set(scope, context); 39659 } 39660 return context; 39661 } 39662}; 39663var ClassMap = class { 39664 constructor(scope) { 39665 this.scope = scope; 39666 } 39667 has(name) { 39668 return this.data.has(this.getDataKey(name)); 39669 } 39670 get(name) { 39671 return this.getAll(name)[0]; 39672 } 39673 getAll(name) { 39674 const tokenString = this.data.get(this.getDataKey(name)) || ""; 39675 return tokenize(tokenString); 39676 } 39677 getAttributeName(name) { 39678 return this.data.getAttributeNameForKey(this.getDataKey(name)); 39679 } 39680 getDataKey(name) { 39681 return `${name}-class`; 39682 } 39683 get data() { 39684 return this.scope.data; 39685 } 39686}; 39687var DataMap = class { 39688 constructor(scope) { 39689 this.scope = scope; 39690 } 39691 get element() { 39692 return this.scope.element; 39693 } 39694 get identifier() { 39695 return this.scope.identifier; 39696 } 39697 get(key) { 39698 const name = this.getAttributeNameForKey(key); 39699 return this.element.getAttribute(name); 39700 } 39701 set(key, value) { 39702 const name = this.getAttributeNameForKey(key); 39703 this.element.setAttribute(name, value); 39704 return this.get(key); 39705 } 39706 has(key) { 39707 const name = this.getAttributeNameForKey(key); 39708 return this.element.hasAttribute(name); 39709 } 39710 delete(key) { 39711 if (this.has(key)) { 39712 const name = this.getAttributeNameForKey(key); 39713 this.element.removeAttribute(name); 39714 return true; 39715 } else { 39716 return false; 39717 } 39718 } 39719 getAttributeNameForKey(key) { 39720 return `data-${this.identifier}-${dasherize(key)}`; 39721 } 39722}; 39723var Guide = class { 39724 constructor(logger2) { 39725 this.warnedKeysByObject = /* @__PURE__ */ new WeakMap(); 39726 this.logger = logger2; 39727 } 39728 warn(object, key, message) { 39729 let warnedKeys = this.warnedKeysByObject.get(object); 39730 if (!warnedKeys) { 39731 warnedKeys = /* @__PURE__ */ new Set(); 39732 this.warnedKeysByObject.set(object, warnedKeys); 39733 } 39734 if (!warnedKeys.has(key)) { 39735 warnedKeys.add(key); 39736 this.logger.warn(message, object); 39737 } 39738 } 39739}; 39740function attributeValueContainsToken(attributeName, token) { 39741 return `[${attributeName}~="${token}"]`; 39742} 39743var TargetSet = class { 39744 constructor(scope) { 39745 this.scope = scope; 39746 } 39747 get element() { 39748 return this.scope.element; 39749 } 39750 get identifier() { 39751 return this.scope.identifier; 39752 } 39753 get schema() { 39754 return this.scope.schema; 39755 } 39756 has(targetName) { 39757 return this.find(targetName) != null; 39758 } 39759 find(...targetNames) { 39760 return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), void 0); 39761 } 39762 findAll(...targetNames) { 39763 return targetNames.reduce((targets, targetName) => [ 39764 ...targets, 39765 ...this.findAllTargets(targetName), 39766 ...this.findAllLegacyTargets(targetName) 39767 ], []); 39768 } 39769 findTarget(targetName) { 39770 const selector = this.getSelectorForTargetName(targetName); 39771 return this.scope.findElement(selector); 39772 } 39773 findAllTargets(targetName) { 39774 const selector = this.getSelectorForTargetName(targetName); 39775 return this.scope.findAllElements(selector); 39776 } 39777 getSelectorForTargetName(targetName) { 39778 const attributeName = this.schema.targetAttributeForScope(this.identifier); 39779 return attributeValueContainsToken(attributeName, targetName); 39780 } 39781 findLegacyTarget(targetName) { 39782 const selector = this.getLegacySelectorForTargetName(targetName); 39783 return this.deprecate(this.scope.findElement(selector), targetName); 39784 } 39785 findAllLegacyTargets(targetName) { 39786 const selector = this.getLegacySelectorForTargetName(targetName); 39787 return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName)); 39788 } 39789 getLegacySelectorForTargetName(targetName) { 39790 const targetDescriptor = `${this.identifier}.${targetName}`; 39791 return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor); 39792 } 39793 deprecate(element, targetName) { 39794 if (element) { 39795 const { identifier } = this; 39796 const attributeName = this.schema.targetAttribute; 39797 const revisedAttributeName = this.schema.targetAttributeForScope(identifier); 39798 this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}="${identifier}.${targetName}" with ${revisedAttributeName}="${targetName}". The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`); 39799 } 39800 return element; 39801 } 39802 get guide() { 39803 return this.scope.guide; 39804 } 39805}; 39806var OutletSet = class { 39807 constructor(scope, controllerElement) { 39808 this.scope = scope; 39809 this.controllerElement = controllerElement; 39810 } 39811 get element() { 39812 return this.scope.element; 39813 } 39814 get identifier() { 39815 return this.scope.identifier; 39816 } 39817 get schema() { 39818 return this.scope.schema; 39819 } 39820 has(outletName) { 39821 return this.find(outletName) != null; 39822 } 39823 find(...outletNames) { 39824 return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), void 0); 39825 } 39826 findAll(...outletNames) { 39827 return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []); 39828 } 39829 getSelectorForOutletName(outletName) { 39830 const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName); 39831 return this.controllerElement.getAttribute(attributeName); 39832 } 39833 findOutlet(outletName) { 39834 const selector = this.getSelectorForOutletName(outletName); 39835 if (selector) 39836 return this.findElement(selector, outletName); 39837 } 39838 findAllOutlets(outletName) { 39839 const selector = this.getSelectorForOutletName(outletName); 39840 return selector ? this.findAllElements(selector, outletName) : []; 39841 } 39842 findElement(selector, outletName) { 39843 const elements = this.scope.queryElements(selector); 39844 return elements.filter((element) => this.matchesElement(element, selector, outletName))[0]; 39845 } 39846 findAllElements(selector, outletName) { 39847 const elements = this.scope.queryElements(selector); 39848 return elements.filter((element) => this.matchesElement(element, selector, outletName)); 39849 } 39850 matchesElement(element, selector, outletName) { 39851 const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || ""; 39852 return element.matches(selector) && controllerAttribute.split(" ").includes(outletName); 39853 } 39854}; 39855var Scope = class _Scope { 39856 constructor(schema, element, identifier, logger2) { 39857 this.targets = new TargetSet(this); 39858 this.classes = new ClassMap(this); 39859 this.data = new DataMap(this); 39860 this.containsElement = (element2) => { 39861 return element2.closest(this.controllerSelector) === this.element; 39862 }; 39863 this.schema = schema; 39864 this.element = element; 39865 this.identifier = identifier; 39866 this.guide = new Guide(logger2); 39867 this.outlets = new OutletSet(this.documentScope, element); 39868 } 39869 findElement(selector) { 39870 return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement); 39871 } 39872 findAllElements(selector) { 39873 return [ 39874 ...this.element.matches(selector) ? [this.element] : [], 39875 ...this.queryElements(selector).filter(this.containsElement) 39876 ]; 39877 } 39878 queryElements(selector) { 39879 return Array.from(this.element.querySelectorAll(selector)); 39880 } 39881 get controllerSelector() { 39882 return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier); 39883 } 39884 get isDocumentScope() { 39885 return this.element === document.documentElement; 39886 } 39887 get documentScope() { 39888 return this.isDocumentScope ? this : new _Scope(this.schema, document.documentElement, this.identifier, this.guide.logger); 39889 } 39890}; 39891var ScopeObserver = class { 39892 constructor(element, schema, delegate) { 39893 this.element = element; 39894 this.schema = schema; 39895 this.delegate = delegate; 39896 this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this); 39897 this.scopesByIdentifierByElement = /* @__PURE__ */ new WeakMap(); 39898 this.scopeReferenceCounts = /* @__PURE__ */ new WeakMap(); 39899 } 39900 start() { 39901 this.valueListObserver.start(); 39902 } 39903 stop() { 39904 this.valueListObserver.stop(); 39905 } 39906 get controllerAttribute() { 39907 return this.schema.controllerAttribute; 39908 } 39909 parseValueForToken(token) { 39910 const { element, content: identifier } = token; 39911 return this.parseValueForElementAndIdentifier(element, identifier); 39912 } 39913 parseValueForElementAndIdentifier(element, identifier) { 39914 const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element); 39915 let scope = scopesByIdentifier.get(identifier); 39916 if (!scope) { 39917 scope = this.delegate.createScopeForElementAndIdentifier(element, identifier); 39918 scopesByIdentifier.set(identifier, scope); 39919 } 39920 return scope; 39921 } 39922 elementMatchedValue(element, value) { 39923 const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1; 39924 this.scopeReferenceCounts.set(value, referenceCount); 39925 if (referenceCount == 1) { 39926 this.delegate.scopeConnected(value); 39927 } 39928 } 39929 elementUnmatchedValue(element, value) { 39930 const referenceCount = this.scopeReferenceCounts.get(value); 39931 if (referenceCount) { 39932 this.scopeReferenceCounts.set(value, referenceCount - 1); 39933 if (referenceCount == 1) { 39934 this.delegate.scopeDisconnected(value); 39935 } 39936 } 39937 } 39938 fetchScopesByIdentifierForElement(element) { 39939 let scopesByIdentifier = this.scopesByIdentifierByElement.get(element); 39940 if (!scopesByIdentifier) { 39941 scopesByIdentifier = /* @__PURE__ */ new Map(); 39942 this.scopesByIdentifierByElement.set(element, scopesByIdentifier); 39943 } 39944 return scopesByIdentifier; 39945 } 39946}; 39947var Router = class { 39948 constructor(application2) { 39949 this.application = application2; 39950 this.scopeObserver = new ScopeObserver(this.element, this.schema, this); 39951 this.scopesByIdentifier = new Multimap(); 39952 this.modulesByIdentifier = /* @__PURE__ */ new Map(); 39953 } 39954 get element() { 39955 return this.application.element; 39956 } 39957 get schema() { 39958 return this.application.schema; 39959 } 39960 get logger() { 39961 return this.application.logger; 39962 } 39963 get controllerAttribute() { 39964 return this.schema.controllerAttribute; 39965 } 39966 get modules() { 39967 return Array.from(this.modulesByIdentifier.values()); 39968 } 39969 get contexts() { 39970 return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []); 39971 } 39972 start() { 39973 this.scopeObserver.start(); 39974 } 39975 stop() { 39976 this.scopeObserver.stop(); 39977 } 39978 loadDefinition(definition) { 39979 this.unloadIdentifier(definition.identifier); 39980 const module = new Module(this.application, definition); 39981 this.connectModule(module); 39982 const afterLoad = definition.controllerConstructor.afterLoad; 39983 if (afterLoad) { 39984 afterLoad.call(definition.controllerConstructor, definition.identifier, this.application); 39985 } 39986 } 39987 unloadIdentifier(identifier) { 39988 const module = this.modulesByIdentifier.get(identifier); 39989 if (module) { 39990 this.disconnectModule(module); 39991 } 39992 } 39993 getContextForElementAndIdentifier(element, identifier) { 39994 const module = this.modulesByIdentifier.get(identifier); 39995 if (module) { 39996 return module.contexts.find((context) => context.element == element); 39997 } 39998 } 39999 proposeToConnectScopeForElementAndIdentifier(element, identifier) { 40000 const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier); 40001 if (scope) { 40002 this.scopeObserver.elementMatchedValue(scope.element, scope); 40003 } else { 40004 console.error(`Couldn't find or create scope for identifier: "${identifier}" and element:`, element); 40005 } 40006 } 40007 handleError(error2, message, detail) { 40008 this.application.handleError(error2, message, detail); 40009 } 40010 createScopeForElementAndIdentifier(element, identifier) { 40011 return new Scope(this.schema, element, identifier, this.logger); 40012 } 40013 scopeConnected(scope) { 40014 this.scopesByIdentifier.add(scope.identifier, scope); 40015 const module = this.modulesByIdentifier.get(scope.identifier); 40016 if (module) { 40017 module.connectContextForScope(scope); 40018 } 40019 } 40020 scopeDisconnected(scope) { 40021 this.scopesByIdentifier.delete(scope.identifier, scope); 40022 const module = this.modulesByIdentifier.get(scope.identifier); 40023 if (module) { 40024 module.disconnectContextForScope(scope); 40025 } 40026 } 40027 connectModule(module) { 40028 this.modulesByIdentifier.set(module.identifier, module); 40029 const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier); 40030 scopes.forEach((scope) => module.connectContextForScope(scope)); 40031 } 40032 disconnectModule(module) { 40033 this.modulesByIdentifier.delete(module.identifier); 40034 const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier); 40035 scopes.forEach((scope) => module.disconnectContextForScope(scope)); 40036 } 40037}; 40038var defaultSchema = { 40039 controllerAttribute: "data-controller", 40040 actionAttribute: "data-action", 40041 targetAttribute: "data-target", 40042 targetAttributeForScope: (identifier) => `data-${identifier}-target`, 40043 outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`, 40044 keyMappings: Object.assign(Object.assign({ enter: "Enter", tab: "Tab", esc: "Escape", space: " ", up: "ArrowUp", down: "ArrowDown", left: "ArrowLeft", right: "ArrowRight", home: "Home", end: "End", page_up: "PageUp", page_down: "PageDown" }, objectFromEntries("abcdefghijklmnopqrstuvwxyz".split("").map((c3) => [c3, c3]))), objectFromEntries("0123456789".split("").map((n3) => [n3, n3]))) 40045}; 40046function objectFromEntries(array) { 40047 return array.reduce((memo, [k3, v3]) => Object.assign(Object.assign({}, memo), { [k3]: v3 }), {}); 40048} 40049var Application = class { 40050 constructor(element = document.documentElement, schema = defaultSchema) { 40051 this.logger = console; 40052 this.debug = false; 40053 this.logDebugActivity = (identifier, functionName, detail = {}) => { 40054 if (this.debug) { 40055 this.logFormattedMessage(identifier, functionName, detail); 40056 } 40057 }; 40058 this.element = element; 40059 this.schema = schema; 40060 this.dispatcher = new Dispatcher(this); 40061 this.router = new Router(this); 40062 this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters); 40063 } 40064 static start(element, schema) { 40065 const application2 = new this(element, schema); 40066 application2.start(); 40067 return application2; 40068 } 40069 async start() { 40070 await domReady(); 40071 this.logDebugActivity("application", "starting"); 40072 this.dispatcher.start(); 40073 this.router.start(); 40074 this.logDebugActivity("application", "start"); 40075 } 40076 stop() { 40077 this.logDebugActivity("application", "stopping"); 40078 this.dispatcher.stop(); 40079 this.router.stop(); 40080 this.logDebugActivity("application", "stop"); 40081 } 40082 register(identifier, controllerConstructor) { 40083 this.load({ identifier, controllerConstructor }); 40084 } 40085 registerActionOption(name, filter) { 40086 this.actionDescriptorFilters[name] = filter; 40087 } 40088 load(head, ...rest) { 40089 const definitions = Array.isArray(head) ? head : [head, ...rest]; 40090 definitions.forEach((definition) => { 40091 if (definition.controllerConstructor.shouldLoad) { 40092 this.router.loadDefinition(definition); 40093 } 40094 }); 40095 } 40096 unload(head, ...rest) { 40097 const identifiers = Array.isArray(head) ? head : [head, ...rest]; 40098 identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier)); 40099 } 40100 get controllers() { 40101 return this.router.contexts.map((context) => context.controller); 40102 } 40103 getControllerForElementAndIdentifier(element, identifier) { 40104 const context = this.router.getContextForElementAndIdentifier(element, identifier); 40105 return context ? context.controller : null; 40106 } 40107 handleError(error2, message, detail) { 40108 var _a3; 40109 this.logger.error(`%s 40110 40111%o 40112 40113%o`, message, error2, detail); 40114 (_a3 = window.onerror) === null || _a3 === void 0 ? void 0 : _a3.call(window, message, "", 0, 0, error2); 40115 } 40116 logFormattedMessage(identifier, functionName, detail = {}) { 40117 detail = Object.assign({ application: this }, detail); 40118 this.logger.groupCollapsed(`${identifier} #${functionName}`); 40119 this.logger.log("details:", Object.assign({}, detail)); 40120 this.logger.groupEnd(); 40121 } 40122}; 40123function domReady() { 40124 return new Promise((resolve) => { 40125 if (document.readyState == "loading") { 40126 document.addEventListener("DOMContentLoaded", () => resolve()); 40127 } else { 40128 resolve(); 40129 } 40130 }); 40131} 40132function ClassPropertiesBlessing(constructor) { 40133 const classes = readInheritableStaticArrayValues(constructor, "classes"); 40134 return classes.reduce((properties, classDefinition) => { 40135 return Object.assign(properties, propertiesForClassDefinition(classDefinition)); 40136 }, {}); 40137} 40138function propertiesForClassDefinition(key) { 40139 return { 40140 [`${key}Class`]: { 40141 get() { 40142 const { classes } = this; 40143 if (classes.has(key)) { 40144 return classes.get(key); 40145 } else { 40146 const attribute = classes.getAttributeName(key); 40147 throw new Error(`Missing attribute "${attribute}"`); 40148 } 40149 } 40150 }, 40151 [`${key}Classes`]: { 40152 get() { 40153 return this.classes.getAll(key); 40154 } 40155 }, 40156 [`has${capitalize(key)}Class`]: { 40157 get() { 40158 return this.classes.has(key); 40159 } 40160 } 40161 }; 40162} 40163function OutletPropertiesBlessing(constructor) { 40164 const outlets = readInheritableStaticArrayValues(constructor, "outlets"); 40165 return outlets.reduce((properties, outletDefinition) => { 40166 return Object.assign(properties, propertiesForOutletDefinition(outletDefinition)); 40167 }, {}); 40168} 40169function getOutletController(controller, element, identifier) { 40170 return controller.application.getControllerForElementAndIdentifier(element, identifier); 40171} 40172function getControllerAndEnsureConnectedScope(controller, element, outletName) { 40173 let outletController = getOutletController(controller, element, outletName); 40174 if (outletController) 40175 return outletController; 40176 controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName); 40177 outletController = getOutletController(controller, element, outletName); 40178 if (outletController) 40179 return outletController; 40180} 40181function propertiesForOutletDefinition(name) { 40182 const camelizedName = namespaceCamelize(name); 40183 return { 40184 [`${camelizedName}Outlet`]: { 40185 get() { 40186 const outletElement = this.outlets.find(name); 40187 const selector = this.outlets.getSelectorForOutletName(name); 40188 if (outletElement) { 40189 const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name); 40190 if (outletController) 40191 return outletController; 40192 throw new Error(`The provided outlet element is missing an outlet controller "${name}" instance for host controller "${this.identifier}"`); 40193 } 40194 throw new Error(`Missing outlet element "${name}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${selector}".`); 40195 } 40196 }, 40197 [`${camelizedName}Outlets`]: { 40198 get() { 40199 const outlets = this.outlets.findAll(name); 40200 if (outlets.length > 0) { 40201 return outlets.map((outletElement) => { 40202 const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name); 40203 if (outletController) 40204 return outletController; 40205 console.warn(`The provided outlet element is missing an outlet controller "${name}" instance for host controller "${this.identifier}"`, outletElement); 40206 }).filter((controller) => controller); 40207 } 40208 return []; 40209 } 40210 }, 40211 [`${camelizedName}OutletElement`]: { 40212 get() { 40213 const outletElement = this.outlets.find(name); 40214 const selector = this.outlets.getSelectorForOutletName(name); 40215 if (outletElement) { 40216 return outletElement; 40217 } else { 40218 throw new Error(`Missing outlet element "${name}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${selector}".`); 40219 } 40220 } 40221 }, 40222 [`${camelizedName}OutletElements`]: { 40223 get() { 40224 return this.outlets.findAll(name); 40225 } 40226 }, 40227 [`has${capitalize(camelizedName)}Outlet`]: { 40228 get() { 40229 return this.outlets.has(name); 40230 } 40231 } 40232 }; 40233} 40234function TargetPropertiesBlessing(constructor) { 40235 const targets = readInheritableStaticArrayValues(constructor, "targets"); 40236 return targets.reduce((properties, targetDefinition) => { 40237 return Object.assign(properties, propertiesForTargetDefinition(targetDefinition)); 40238 }, {}); 40239} 40240function propertiesForTargetDefinition(name) { 40241 return { 40242 [`${name}Target`]: { 40243 get() { 40244 const target = this.targets.find(name); 40245 if (target) { 40246 return target; 40247 } else { 40248 throw new Error(`Missing target element "${name}" for "${this.identifier}" controller`); 40249 } 40250 } 40251 }, 40252 [`${name}Targets`]: { 40253 get() { 40254 return this.targets.findAll(name); 40255 } 40256 }, 40257 [`has${capitalize(name)}Target`]: { 40258 get() { 40259 return this.targets.has(name); 40260 } 40261 } 40262 }; 40263} 40264function ValuePropertiesBlessing(constructor) { 40265 const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, "values"); 40266 const propertyDescriptorMap = { 40267 valueDescriptorMap: { 40268 get() { 40269 return valueDefinitionPairs.reduce((result, valueDefinitionPair) => { 40270 const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier); 40271 const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key); 40272 return Object.assign(result, { [attributeName]: valueDescriptor }); 40273 }, {}); 40274 } 40275 } 40276 }; 40277 return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => { 40278 return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair)); 40279 }, propertyDescriptorMap); 40280} 40281function propertiesForValueDefinitionPair(valueDefinitionPair, controller) { 40282 const definition = parseValueDefinitionPair(valueDefinitionPair, controller); 40283 const { key, name, reader: read, writer: write } = definition; 40284 return { 40285 [name]: { 40286 get() { 40287 const value = this.data.get(key); 40288 if (value !== null) { 40289 return read(value); 40290 } else { 40291 return definition.defaultValue; 40292 } 40293 }, 40294 set(value) { 40295 if (value === void 0) { 40296 this.data.delete(key); 40297 } else { 40298 this.data.set(key, write(value)); 40299 } 40300 } 40301 }, 40302 [`has${capitalize(name)}`]: { 40303 get() { 40304 return this.data.has(key) || definition.hasCustomDefaultValue; 40305 } 40306 } 40307 }; 40308} 40309function parseValueDefinitionPair([token, typeDefinition], controller) { 40310 return valueDescriptorForTokenAndTypeDefinition({ 40311 controller, 40312 token, 40313 typeDefinition 40314 }); 40315} 40316function parseValueTypeConstant(constant) { 40317 switch (constant) { 40318 case Array: 40319 return "array"; 40320 case Boolean: 40321 return "boolean"; 40322 case Number: 40323 return "number"; 40324 case Object: 40325 return "object"; 40326 case String: 40327 return "string"; 40328 } 40329} 40330function parseValueTypeDefault(defaultValue) { 40331 switch (typeof defaultValue) { 40332 case "boolean": 40333 return "boolean"; 40334 case "number": 40335 return "number"; 40336 case "string": 40337 return "string"; 40338 } 40339 if (Array.isArray(defaultValue)) 40340 return "array"; 40341 if (Object.prototype.toString.call(defaultValue) === "[object Object]") 40342 return "object"; 40343} 40344function parseValueTypeObject(payload) { 40345 const { controller, token, typeObject } = payload; 40346 const hasType = isSomething(typeObject.type); 40347 const hasDefault = isSomething(typeObject.default); 40348 const fullObject = hasType && hasDefault; 40349 const onlyType = hasType && !hasDefault; 40350 const onlyDefault = !hasType && hasDefault; 40351 const typeFromObject = parseValueTypeConstant(typeObject.type); 40352 const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default); 40353 if (onlyType) 40354 return typeFromObject; 40355 if (onlyDefault) 40356 return typeFromDefaultValue; 40357 if (typeFromObject !== typeFromDefaultValue) { 40358 const propertyPath = controller ? `${controller}.${token}` : token; 40359 throw new Error(`The specified default value for the Stimulus Value "${propertyPath}" must match the defined type "${typeFromObject}". The provided default value of "${typeObject.default}" is of type "${typeFromDefaultValue}".`); 40360 } 40361 if (fullObject) 40362 return typeFromObject; 40363} 40364function parseValueTypeDefinition(payload) { 40365 const { controller, token, typeDefinition } = payload; 40366 const typeObject = { controller, token, typeObject: typeDefinition }; 40367 const typeFromObject = parseValueTypeObject(typeObject); 40368 const typeFromDefaultValue = parseValueTypeDefault(typeDefinition); 40369 const typeFromConstant = parseValueTypeConstant(typeDefinition); 40370 const type = typeFromObject || typeFromDefaultValue || typeFromConstant; 40371 if (type) 40372 return type; 40373 const propertyPath = controller ? `${controller}.${typeDefinition}` : token; 40374 throw new Error(`Unknown value type "${propertyPath}" for "${token}" value`); 40375} 40376function defaultValueForDefinition(typeDefinition) { 40377 const constant = parseValueTypeConstant(typeDefinition); 40378 if (constant) 40379 return defaultValuesByType[constant]; 40380 const hasDefault = hasProperty(typeDefinition, "default"); 40381 const hasType = hasProperty(typeDefinition, "type"); 40382 const typeObject = typeDefinition; 40383 if (hasDefault) 40384 return typeObject.default; 40385 if (hasType) { 40386 const { type } = typeObject; 40387 const constantFromType = parseValueTypeConstant(type); 40388 if (constantFromType) 40389 return defaultValuesByType[constantFromType]; 40390 } 40391 return typeDefinition; 40392} 40393function valueDescriptorForTokenAndTypeDefinition(payload) { 40394 const { token, typeDefinition } = payload; 40395 const key = `${dasherize(token)}-value`; 40396 const type = parseValueTypeDefinition(payload); 40397 return { 40398 type, 40399 key, 40400 name: camelize(key), 40401 get defaultValue() { 40402 return defaultValueForDefinition(typeDefinition); 40403 }, 40404 get hasCustomDefaultValue() { 40405 return parseValueTypeDefault(typeDefinition) !== void 0; 40406 }, 40407 reader: readers[type], 40408 writer: writers[type] || writers.default 40409 }; 40410} 40411var defaultValuesByType = { 40412 get array() { 40413 return []; 40414 }, 40415 boolean: false, 40416 number: 0, 40417 get object() { 40418 return {}; 40419 }, 40420 string: "" 40421}; 40422var readers = { 40423 array(value) { 40424 const array = JSON.parse(value); 40425 if (!Array.isArray(array)) { 40426 throw new TypeError(`expected value of type "array" but instead got value "${value}" of type "${parseValueTypeDefault(array)}"`); 40427 } 40428 return array; 40429 }, 40430 boolean(value) { 40431 return !(value == "0" || String(value).toLowerCase() == "false"); 40432 }, 40433 number(value) { 40434 return Number(value.replace(/_/g, "")); 40435 }, 40436 object(value) { 40437 const object = JSON.parse(value); 40438 if (object === null || typeof object != "object" || Array.isArray(object)) { 40439 throw new TypeError(`expected value of type "object" but instead got value "${value}" of type "${parseValueTypeDefault(object)}"`); 40440 } 40441 return object; 40442 }, 40443 string(value) { 40444 return value; 40445 } 40446}; 40447var writers = { 40448 default: writeString, 40449 array: writeJSON, 40450 object: writeJSON 40451}; 40452function writeJSON(value) { 40453 return JSON.stringify(value); 40454} 40455function writeString(value) { 40456 return `${value}`; 40457} 40458var Controller = class { 40459 constructor(context) { 40460 this.context = context; 40461 } 40462 static get shouldLoad() { 40463 return true; 40464 } 40465 static afterLoad(_identifier, _application) { 40466 return; 40467 } 40468 get application() { 40469 return this.context.application; 40470 } 40471 get scope() { 40472 return this.context.scope; 40473 } 40474 get element() { 40475 return this.scope.element; 40476 } 40477 get identifier() { 40478 return this.scope.identifier; 40479 } 40480 get targets() { 40481 return this.scope.targets; 40482 } 40483 get outlets() { 40484 return this.scope.outlets; 40485 } 40486 get classes() { 40487 return this.scope.classes; 40488 } 40489 get data() { 40490 return this.scope.data; 40491 } 40492 initialize() { 40493 } 40494 connect() { 40495 } 40496 disconnect() { 40497 } 40498 dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) { 40499 const type = prefix ? `${prefix}:${eventName}` : eventName; 40500 const event = new CustomEvent(type, { detail, bubbles, cancelable }); 40501 target.dispatchEvent(event); 40502 return event; 40503 } 40504}; 40505Controller.blessings = [ 40506 ClassPropertiesBlessing, 40507 TargetPropertiesBlessing, 40508 ValuePropertiesBlessing, 40509 OutletPropertiesBlessing 40510]; 40511Controller.targets = []; 40512Controller.outlets = []; 40513Controller.values = {}; 40514
40515// app/javascript/controllers/application.js 40516var application = Application.start(); 40517application.debug = false; 40518window.Stimulus = application; 40519
40520// app/javascript/controllers/hello_controller.js 40521var hello_controller_default = class extends Controller { 40522 connect() { 40523 this.element.textContent = "Hello World!"; 40524 } 40525}; 40526
40527// app/javascript/controllers/index.js 40528application.register("hello", hello_controller_default); 40529
40530// app/javascript/yano/boot.jsx 40531var import_react7 = __toESM(require_react()); 40532var import_client = __toESM(require_client()); 40533
40534// app/javascript/yano/App.jsx 40535var import_react6 = __toESM(require_react()); 40536
40537// app/javascript/yano/api.js 40538var JSON_HEADERS = { 40539 Accept: "application/json", 40540 "Content-Type": "application/json" 40541}; 40542async function parseResponse(response) { 40543 if (response.status === 204) { 40544 return null; 40545 } 40546 const payload = await response.json().catch(() => ({})); 40547 if (!response.ok) { 40548 const error2 = new Error(payload.error || `Request failed with status ${response.status}`); 40549 if (payload && typeof payload.code === "string") { 40550 error2.code = payload.code; 40551 } 40552 error2.status = response.status; 40553 throw error2; 40554 } 40555 return payload; 40556} 40557async function request(path, { method = "GET", body, token } = {}) { 40558 const response = await fetch(path, { 40559 method, 40560 headers: { 40561 ...JSON_HEADERS, 40562 ...token ? { Authorization: `Bearer ${token}` } : {} 40563 }, 40564 body: body ? JSON.stringify(body) : void 0 40565 }); 40566 return parseResponse(response); 40567} 40568async function multipartRequest(path, { method = "POST", body, token } = {}) { 40569 const response = await fetch(path, { 40570 method, 40571 headers: { 40572 Accept: "application/json", 40573 ...token ? { Authorization: `Bearer ${token}` } : {} 40574 }, 40575 body 40576 }); 40577 return parseResponse(response); 40578} 40579var api = { 40580 createSession(session2) { 40581 return request("/api/session", { 40582 method: "POST", 40583 body: { session: session2 } 40584 }); 40585 }, 40586 getMe(token) { 40587 return request("/api/me", { token }); 40588 }, 40589 updateMe(token, me3) { 40590 return request("/api/me", { 40591 method: "PATCH", 40592 token, 40593 body: { me: me3 } 40594 }); 40595 }, 40596 uploadAvatar(token, file, crop, source) { 40597 const formData = new FormData(); 40598 formData.append("avatar", file); 40599 formData.append("crop[x]", String(crop.x)); 40600 formData.append("crop[y]", String(crop.y)); 40601 formData.append("crop[width]", String(crop.width)); 40602 formData.append("crop[height]", String(crop.height)); 40603 formData.append("source[width]", String(source.width)); 40604 formData.append("source[height]", String(source.height)); 40605 return multipartRequest("/api/me/avatar", { 40606 method: "POST", 40607 token, 40608 body: formData 40609 }); 40610 }, 40611 updateAvatarCrop(token, crop) { 40612 return request("/api/me/avatar", { 40613 method: "PATCH", 40614 token, 40615 body: { crop } 40616 }); 40617 }, 40618 deleteAvatar(token) { 40619 return request("/api/me/avatar", { 40620 method: "DELETE", 40621 token 40622 }); 40623 }, 40624 joinQueue(token) { 40625 return request("/api/queue", { 40626 method: "POST", 40627 token 40628 }); 40629 }, 40630 leaveQueue(token) { 40631 return request("/api/queue", { 40632 method: "DELETE", 40633 token 40634 }); 40635 }, 40636 currentCallSession(token) { 40637 return request("/api/call_sessions/current", { token }); 40638 }, 40639 getRoom(code, token) { 40640 return request(`/api/rooms/${encodeURIComponent(code)}`, { token }); 40641 }, 40642 getRoomMessages(token, code, beforeId) { 40643 const search = beforeId ? `?before_id=${encodeURIComponent(beforeId)}` : ""; 40644 return request(`/api/rooms/${encodeURIComponent(code)}/messages${search}`, { token }); 40645 }, 40646 getDirectMessages(token, code, userId, beforeId) { 40647 const search = beforeId ? `?before_id=${encodeURIComponent(beforeId)}` : ""; 40648 return request(`/api/rooms/${encodeURIComponent(code)}/direct_messages/${encodeURIComponent(userId)}${search}`, { token }); 40649 }, 40650 sendDirectMessage(token, code, userId, body) { 40651 return request(`/api/rooms/${encodeURIComponent(code)}/direct_messages/${encodeURIComponent(userId)}`, { 40652 method: "POST", 40653 token, 40654 body: { direct_message: { body } } 40655 }); 40656 }, 40657 createRoom(token, room = {}) { 40658 return request("/api/rooms", { 40659 method: "POST", 40660 token, 40661 body: { room } 40662 }); 40663 }, 40664 joinRoom(token, code) { 40665 return request(`/api/rooms/${encodeURIComponent(code)}/join`, { 40666 method: "POST", 40667 token 40668 }); 40669 }, 40670 leaveRoom(token, code) { 40671 return request(`/api/rooms/${encodeURIComponent(code)}/leave`, { 40672 method: "POST", 40673 token 40674 }); 40675 }, 40676 getCallSession(token, id) { 40677 return request(`/api/call_sessions/${id}`, { token }); 40678 }, 40679 nextCallSession(token, id, requeue = true) { 40680 return request(`/api/call_sessions/${id}/next`, { 40681 method: "POST", 40682 token, 40683 body: { requeue } 40684 }); 40685 }, 40686 createReport(token, callSessionId, report) { 40687 return request(`/api/call_sessions/${callSessionId}/reports`, { 40688 method: "POST", 40689 token, 40690 body: { report } 40691 }); 40692 }, 40693 lockRoom(token, code) { 40694 return request(`/api/rooms/${encodeURIComponent(code)}/lock`, { 40695 method: "POST", 40696 token 40697 }); 40698 }, 40699 unlockRoom(token, code) { 40700 return request(`/api/rooms/${encodeURIComponent(code)}/unlock`, { 40701 method: "POST", 40702 token 40703 }); 40704 }, 40705 kickMember(token, code, userId) { 40706 return request(`/api/rooms/${encodeURIComponent(code)}/kick`, { 40707 method: "POST", 40708 token, 40709 body: { user_id: userId } 40710 }); 40711 }, 40712 muteMember(token, code, userId, muted = true) { 40713 return request(`/api/rooms/${encodeURIComponent(code)}/mute`, { 40714 method: "POST", 40715 token, 40716 body: { user_id: userId, muted } 40717 }); 40718 }, 40719 approveMember(token, code, userId) { 40720 return request(`/api/rooms/${encodeURIComponent(code)}/approve`, { 40721 method: "POST", 40722 token, 40723 body: { user_id: userId } 40724 }); 40725 }, 40726 denyMember(token, code, userId) { 40727 return request(`/api/rooms/${encodeURIComponent(code)}/deny`, { 40728 method: "POST", 40729 token, 40730 body: { user_id: userId } 40731 }); 40732 } 40733}; 40734
vendor: 14,734 bytes, lines 40735-41221
40735// node_modules/@rails/actioncable/app/assets/javascripts/actioncable.esm.js 40736var adapters = { 40737 logger: typeof console !== "undefined" ? console : void 0, 40738 WebSocket: typeof WebSocket !== "undefined" ? WebSocket : void 0 40739}; 40740var logger = { 40741 log(...messages) { 40742 if (this.enabled) { 40743 messages.push(Date.now()); 40744 adapters.logger.log("[ActionCable]", ...messages); 40745 } 40746 } 40747}; 40748var now2 = () => (/* @__PURE__ */ new Date()).getTime(); 40749var secondsSince2 = (time) => (now2() - time) / 1e3; 40750var ConnectionMonitor2 = class { 40751 constructor(connection) { 40752 this.visibilityDidChange = this.visibilityDidChange.bind(this); 40753 this.connection = connection; 40754 this.reconnectAttempts = 0; 40755 } 40756 start() { 40757 if (!this.isRunning()) { 40758 this.startedAt = now2(); 40759 delete this.stoppedAt; 40760 this.startPolling(); 40761 addEventListener("visibilitychange", this.visibilityDidChange); 40762 logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`); 40763 } 40764 } 40765 stop() { 40766 if (this.isRunning()) { 40767 this.stoppedAt = now2(); 40768 this.stopPolling(); 40769 removeEventListener("visibilitychange", this.visibilityDidChange); 40770 logger.log("ConnectionMonitor stopped"); 40771 } 40772 } 40773 isRunning() { 40774 return this.startedAt && !this.stoppedAt; 40775 } 40776 recordMessage() { 40777 this.pingedAt = now2(); 40778 } 40779 recordConnect() { 40780 this.reconnectAttempts = 0; 40781 delete this.disconnectedAt; 40782 logger.log("ConnectionMonitor recorded connect"); 40783 } 40784 recordDisconnect() { 40785 this.disconnectedAt = now2(); 40786 logger.log("ConnectionMonitor recorded disconnect"); 40787 } 40788 startPolling() { 40789 this.stopPolling(); 40790 this.poll(); 40791 } 40792 stopPolling() { 40793 clearTimeout(this.pollTimeout); 40794 } 40795 poll() { 40796 this.pollTimeout = setTimeout((() => { 40797 this.reconnectIfStale(); 40798 this.poll(); 40799 }), this.getPollInterval()); 40800 } 40801 getPollInterval() { 40802 const { staleThreshold, reconnectionBackoffRate } = this.constructor; 40803 const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10)); 40804 const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate; 40805 const jitter = jitterMax * Math.random(); 40806 return staleThreshold * 1e3 * backoff * (1 + jitter); 40807 } 40808 reconnectIfStale() { 40809 if (this.connectionIsStale()) { 40810 logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince2(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`); 40811 this.reconnectAttempts++; 40812 if (this.disconnectedRecently()) { 40813 logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince2(this.disconnectedAt)} s`); 40814 } else { 40815 logger.log("ConnectionMonitor reopening"); 40816 this.connection.reopen(); 40817 } 40818 } 40819 } 40820 get refreshedAt() { 40821 return this.pingedAt ? this.pingedAt : this.startedAt; 40822 } 40823 connectionIsStale() { 40824 return secondsSince2(this.refreshedAt) > this.constructor.staleThreshold; 40825 } 40826 disconnectedRecently() { 40827 return this.disconnectedAt && secondsSince2(this.disconnectedAt) < this.constructor.staleThreshold; 40828 } 40829 visibilityDidChange() { 40830 if (document.visibilityState === "visible") { 40831 setTimeout((() => { 40832 if (this.connectionIsStale() || !this.connection.isOpen()) { 40833 logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`); 40834 this.connection.reopen(); 40835 } 40836 }), 200); 40837 } 40838 } 40839}; 40840ConnectionMonitor2.staleThreshold = 6; 40841ConnectionMonitor2.reconnectionBackoffRate = 0.15; 40842var INTERNAL = { 40843 message_types: { 40844 welcome: "welcome", 40845 disconnect: "disconnect", 40846 ping: "ping", 40847 confirmation: "confirm_subscription", 40848 rejection: "reject_subscription" 40849 }, 40850 disconnect_reasons: { 40851 unauthorized: "unauthorized", 40852 invalid_request: "invalid_request", 40853 server_restart: "server_restart", 40854 remote: "remote" 40855 }, 40856 default_mount_path: "/cable", 40857 protocols: ["actioncable-v1-json", "actioncable-unsupported"] 40858}; 40859var { message_types: message_types2, protocols: protocols2 } = INTERNAL; 40860var supportedProtocols2 = protocols2.slice(0, protocols2.length - 1); 40861var indexOf2 = [].indexOf; 40862var Connection2 = class { 40863 constructor(consumer2) { 40864 this.open = this.open.bind(this); 40865 this.consumer = consumer2; 40866 this.subscriptions = this.consumer.subscriptions; 40867 this.monitor = new ConnectionMonitor2(this); 40868 this.disconnected = true; 40869 } 40870 send(data) { 40871 if (this.isOpen()) { 40872 this.webSocket.send(JSON.stringify(data)); 40873 return true; 40874 } else { 40875 return false; 40876 } 40877 } 40878 open() { 40879 if (this.isActive()) { 40880 logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`); 40881 return false; 40882 } else { 40883 const socketProtocols = [...protocols2, ...this.consumer.subprotocols || []]; 40884 logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`); 40885 if (this.webSocket) { 40886 this.uninstallEventHandlers(); 40887 } 40888 this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols); 40889 this.installEventHandlers(); 40890 this.monitor.start(); 40891 return true; 40892 } 40893 } 40894 close({ allowReconnect } = { 40895 allowReconnect: true 40896 }) { 40897 if (!allowReconnect) { 40898 this.monitor.stop(); 40899 } 40900 if (this.isOpen()) { 40901 return this.webSocket.close(); 40902 } 40903 } 40904 reopen() { 40905 logger.log(`Reopening WebSocket, current state is ${this.getState()}`); 40906 if (this.isActive()) { 40907 try { 40908 return this.close(); 40909 } catch (error2) { 40910 logger.log("Failed to reopen WebSocket", error2); 40911 } finally { 40912 logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`); 40913 setTimeout(this.open, this.constructor.reopenDelay); 40914 } 40915 } else { 40916 return this.open(); 40917 } 40918 } 40919 getProtocol() { 40920 if (this.webSocket) { 40921 return this.webSocket.protocol; 40922 } 40923 } 40924 isOpen() { 40925 return this.isState("open"); 40926 } 40927 isActive() { 40928 return this.isState("open", "connecting"); 40929 } 40930 triedToReconnect() { 40931 return this.monitor.reconnectAttempts > 0; 40932 } 40933 isProtocolSupported() { 40934 return indexOf2.call(supportedProtocols2, this.getProtocol()) >= 0; 40935 } 40936 isState(...states) { 40937 return indexOf2.call(states, this.getState()) >= 0; 40938 } 40939 getState() { 40940 if (this.webSocket) { 40941 for (let state in adapters.WebSocket) { 40942 if (adapters.WebSocket[state] === this.webSocket.readyState) { 40943 return state.toLowerCase(); 40944 } 40945 } 40946 } 40947 return null; 40948 } 40949 installEventHandlers() { 40950 for (let eventName in this.events) { 40951 const handler = this.events[eventName].bind(this); 40952 this.webSocket[`on${eventName}`] = handler; 40953 } 40954 } 40955 uninstallEventHandlers() { 40956 for (let eventName in this.events) { 40957 this.webSocket[`on${eventName}`] = function() { 40958 }; 40959 } 40960 } 40961}; 40962Connection2.reopenDelay = 500; 40963Connection2.prototype.events = { 40964 message(event) { 40965 if (!this.isProtocolSupported()) { 40966 return; 40967 } 40968 const { identifier, message, reason, reconnect, type } = JSON.parse(event.data); 40969 this.monitor.recordMessage(); 40970 switch (type) { 40971 case message_types2.welcome: 40972 if (this.triedToReconnect()) { 40973 this.reconnectAttempted = true; 40974 } 40975 this.monitor.recordConnect(); 40976 return this.subscriptions.reload(); 40977 case message_types2.disconnect: 40978 logger.log(`Disconnecting. Reason: ${reason}`); 40979 return this.close({ 40980 allowReconnect: reconnect 40981 }); 40982 case message_types2.ping: 40983 return null; 40984 case message_types2.confirmation: 40985 this.subscriptions.confirmSubscription(identifier); 40986 if (this.reconnectAttempted) { 40987 this.reconnectAttempted = false; 40988 return this.subscriptions.notify(identifier, "connected", { 40989 reconnected: true 40990 }); 40991 } else { 40992 return this.subscriptions.notify(identifier, "connected", { 40993 reconnected: false 40994 }); 40995 } 40996 case message_types2.rejection: 40997 return this.subscriptions.reject(identifier); 40998 default: 40999 return this.subscriptions.notify(identifier, "received", message); 41000 } 41001 }, 41002 open() { 41003 logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`); 41004 this.disconnected = false; 41005 if (!this.isProtocolSupported()) { 41006 logger.log("Protocol is unsupported. Stopping monitor and disconnecting."); 41007 return this.close({ 41008 allowReconnect: false 41009 }); 41010 } 41011 }, 41012 close(event) { 41013 logger.log("WebSocket onclose event"); 41014 if (this.disconnected) { 41015 return; 41016 } 41017 this.disconnected = true; 41018 this.monitor.recordDisconnect(); 41019 return this.subscriptions.notifyAll("disconnected", { 41020 willAttemptReconnect: this.monitor.isRunning() 41021 }); 41022 }, 41023 error() { 41024 logger.log("WebSocket onerror event"); 41025 } 41026}; 41027var extend3 = function(object, properties) { 41028 if (properties != null) { 41029 for (let key in properties) { 41030 const value = properties[key]; 41031 object[key] = value; 41032 } 41033 } 41034 return object; 41035}; 41036var Subscription2 = class { 41037 constructor(consumer2, params = {}, mixin) { 41038 this.consumer = consumer2; 41039 this.identifier = JSON.stringify(params); 41040 extend3(this, mixin); 41041 } 41042 perform(action, data = {}) { 41043 data.action = action; 41044 return this.send(data); 41045 } 41046 send(data) { 41047 return this.consumer.send({ 41048 command: "message", 41049 identifier: this.identifier, 41050 data: JSON.stringify(data) 41051 }); 41052 } 41053 unsubscribe() { 41054 return this.consumer.subscriptions.remove(this); 41055 } 41056}; 41057var SubscriptionGuarantor2 = class { 41058 constructor(subscriptions) { 41059 this.subscriptions = subscriptions; 41060 this.pendingSubscriptions = []; 41061 } 41062 guarantee(subscription) { 41063 if (this.pendingSubscriptions.indexOf(subscription) == -1) { 41064 logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`); 41065 this.pendingSubscriptions.push(subscription); 41066 } else { 41067 logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`); 41068 } 41069 this.startGuaranteeing(); 41070 } 41071 forget(subscription) { 41072 logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`); 41073 this.pendingSubscriptions = this.pendingSubscriptions.filter(((s3) => s3 !== subscription)); 41074 } 41075 startGuaranteeing() { 41076 this.stopGuaranteeing(); 41077 this.retrySubscribing(); 41078 } 41079 stopGuaranteeing() { 41080 clearTimeout(this.retryTimeout); 41081 } 41082 retrySubscribing() { 41083 this.retryTimeout = setTimeout((() => { 41084 if (this.subscriptions && typeof this.subscriptions.subscribe === "function") { 41085 this.pendingSubscriptions.map(((subscription) => { 41086 logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`); 41087 this.subscriptions.subscribe(subscription); 41088 })); 41089 } 41090 }), 500); 41091 } 41092}; 41093var Subscriptions2 = class { 41094 constructor(consumer2) { 41095 this.consumer = consumer2; 41096 this.guarantor = new SubscriptionGuarantor2(this); 41097 this.subscriptions = []; 41098 } 41099 create(channelName, mixin) { 41100 const channel = channelName; 41101 const params = typeof channel === "object" ? channel : { 41102 channel 41103 }; 41104 const subscription = new Subscription2(this.consumer, params, mixin); 41105 return this.add(subscription); 41106 } 41107 add(subscription) { 41108 this.subscriptions.push(subscription); 41109 this.consumer.ensureActiveConnection(); 41110 this.notify(subscription, "initialized"); 41111 this.subscribe(subscription); 41112 return subscription; 41113 } 41114 remove(subscription) { 41115 this.forget(subscription); 41116 if (!this.findAll(subscription.identifier).length) { 41117 this.sendCommand(subscription, "unsubscribe"); 41118 } 41119 return subscription; 41120 } 41121 reject(identifier) { 41122 return this.findAll(identifier).map(((subscription) => { 41123 this.forget(subscription); 41124 this.notify(subscription, "rejected"); 41125 return subscription; 41126 })); 41127 } 41128 forget(subscription) { 41129 this.guarantor.forget(subscription); 41130 this.subscriptions = this.subscriptions.filter(((s3) => s3 !== subscription)); 41131 return subscription; 41132 } 41133 findAll(identifier) { 41134 return this.subscriptions.filter(((s3) => s3.identifier === identifier)); 41135 } 41136 reload() { 41137 return this.subscriptions.map(((subscription) => this.subscribe(subscription))); 41138 } 41139 notifyAll(callbackName, ...args) { 41140 return this.subscriptions.map(((subscription) => this.notify(subscription, callbackName, ...args))); 41141 } 41142 notify(subscription, callbackName, ...args) { 41143 let subscriptions; 41144 if (typeof subscription === "string") { 41145 subscriptions = this.findAll(subscription); 41146 } else { 41147 subscriptions = [subscription]; 41148 } 41149 return subscriptions.map(((subscription2) => typeof subscription2[callbackName] === "function" ? subscription2[callbackName](...args) : void 0)); 41150 } 41151 subscribe(subscription) { 41152 if (this.sendCommand(subscription, "subscribe")) { 41153 this.guarantor.guarantee(subscription); 41154 } 41155 } 41156 confirmSubscription(identifier) { 41157 logger.log(`Subscription confirmed ${identifier}`); 41158 this.findAll(identifier).map(((subscription) => this.guarantor.forget(subscription))); 41159 } 41160 sendCommand(subscription, command) { 41161 const { identifier } = subscription; 41162 return this.consumer.send({ 41163 command, 41164 identifier 41165 }); 41166 } 41167}; 41168var Consumer2 = class { 41169 constructor(url) { 41170 this._url = url; 41171 this.subscriptions = new Subscriptions2(this); 41172 this.connection = new Connection2(this); 41173 this.subprotocols = []; 41174 } 41175 get url() { 41176 return createWebSocketURL2(this._url); 41177 } 41178 send(data) { 41179 return this.connection.send(data); 41180 } 41181 connect() { 41182 return this.connection.open(); 41183 } 41184 disconnect() { 41185 return this.connection.close({ 41186 allowReconnect: false 41187 }); 41188 } 41189 ensureActiveConnection() { 41190 if (!this.connection.isActive()) { 41191 return this.connection.open(); 41192 } 41193 } 41194 addSubProtocol(subprotocol) { 41195 this.subprotocols = [...this.subprotocols, subprotocol]; 41196 } 41197}; 41198function createWebSocketURL2(url) { 41199 if (typeof url === "function") { 41200 url = url(); 41201 } 41202 if (url && !/^wss?:/i.test(url)) { 41203 const a3 = document.createElement("a"); 41204 a3.href = url; 41205 a3.href = a3.href; 41206 a3.protocol = a3.protocol.replace("http", "ws"); 41207 return a3.href; 41208 } else { 41209 return url; 41210 } 41211} 41212function createConsumer3(url = getConfig2("url") || INTERNAL.default_mount_path) { 41213 return new Consumer2(url); 41214} 41215function getConfig2(name) { 41216 const element = document.head.querySelector(`meta[name='action-cable-${name}']`); 41217 if (element) { 41218 return element.getAttribute("content"); 41219 } 41220} 41221
41222// app/javascript/yano/cable.js 41223function buildConsumer(token) { 41224 const protocol = window.location.protocol === "https:" ? "wss" : "ws"; 41225 return createConsumer3(`${protocol}://${window.location.host}/cable?token=${encodeURIComponent(token)}`); 41226} 41227function buildSubscription(consumer2, identifier, handlers) { 41228 const subscription = consumer2.subscriptions.create(identifier, { 41229 connected() { 41230 handlers.onConnected?.(); 41231 }, 41232 disconnected() { 41233 handlers.onDisconnected?.(); 41234 }, 41235 rejected() { 41236 handlers.onRejected?.(); 41237 }, 41238 received(data) { 41239 handlers.onEvent?.(data); 41240 } 41241 }); 41242 return { 41243 send(action, payload = {}) { 41244 subscription.perform(action, payload); 41245 }, 41246 unsubscribe() { 41247 subscription.unsubscribe(); 41248 consumer2.disconnect(); 41249 } 41250 }; 41251} 41252function subscribeToUserChannel(token, handlers = {}) { 41253 return buildSubscription(buildConsumer(token), { channel: "UserChannel" }, handlers); 41254} 41255function subscribeToRoomChannel(token, roomCode, handlers = {}) { 41256 return buildSubscription( 41257 buildConsumer(token), 41258 { channel: "RoomChannel", room_code: roomCode }, 41259 handlers 41260 ); 41261} 41262
41263// app/javascript/yano/constants.js 41264var STORAGE_KEY = "yano-web-session-v2"; 41265
41266// app/javascript/yano/components/CallStage.jsx 41267var import_react4 = __toESM(require_react()); 41268var import_react_dom2 = __toESM(require_react_dom()); 41269
41270// app/javascript/yano/components/Icons.jsx 41271var import_react = __toESM(require_react()); 41272function YanoWordmark({ className = "" }) { 41273 return /* @__PURE__ */ import_react.default.createElement("span", { className: `yano-wordmark font-display ${className}`, "aria-label": "yano" }, /* @__PURE__ */ import_react.default.createElement("span", { className: "yano-wordmark__ya" }, "ya"), /* @__PURE__ */ import_react.default.createElement("span", { className: "yano-wordmark__no" }, "no")); 41274} 41275function EditIcon() { 41276 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-3.5 w-3.5 fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M14.7 3.8a1.7 1.7 0 0 1 2.4 2.4l-8 8-3.6 1.2 1.2-3.6 8-8Z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "m12.8 5.7 1.5 1.5" })); 41277} 41278function MicIcon() { 41279 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-[1.125rem] w-[1.125rem] fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 12.6a3 3 0 0 0 3-3V6.4a3 3 0 1 0-6 0v3.2a3 3 0 0 0 3 3Z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M5 9.8a5 5 0 1 0 10 0" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 14.8v2.7" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M7.2 17.5h5.6" })); 41280} 41281function VideoIcon() { 41282 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-[1.125rem] w-[1.125rem] fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "3.2", y: "5.3", width: "9.3", height: "9.4", rx: "2.2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "m12.4 8.4 4-2.1v7.4l-4-2.1" })); 41283} 41284function VideoOffIcon({ className = "h-7 w-7" }) { 41285 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 24 24", className: `${className} fill-none stroke-current stroke-[1.5]` }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "2", y: "6", width: "13", height: "12", rx: "3" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "m15 10.5 5-3v9l-5-3" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M2 2 22 22", strokeLinecap: "round" })); 41286} 41287function CopyIcon() { 41288 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-[1.125rem] w-[1.125rem] fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("rect", { x: "6.6", y: "4.2", width: "9.2", height: "11", rx: "2.2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M4.3 12.9V6.7a2.2 2.2 0 0 1 2.2-2.2h6.4" })); 41289} 41290function YanoLogo({ className = "h-8 w-8" }) { 41291 return /* @__PURE__ */ import_react.default.createElement("svg", { viewBox: "0 0 200 200", className, "aria-label": "Yano logo" }, /* @__PURE__ */ import_react.default.createElement("defs", null, /* @__PURE__ */ import_react.default.createElement("linearGradient", { id: "yano-logo-grad", x1: "0%", y1: "0%", x2: "100%", y2: "100%" }, /* @__PURE__ */ import_react.default.createElement("stop", { offset: "0%", stopColor: "#f97316" }), /* @__PURE__ */ import_react.default.createElement("stop", { offset: "40%", stopColor: "#ef4444" }), /* @__PURE__ */ import_react.default.createElement("stop", { offset: "100%", stopColor: "#c026d3" })), /* @__PURE__ */ import_react.default.createElement("linearGradient", { id: "yano-logo-wave", x1: "0%", x2: "100%" }, /* @__PURE__ */ import_react.default.createElement("stop", { offset: "0%", stopColor: "#818cf8" }), /* @__PURE__ */ import_react.default.createElement("stop", { offset: "50%", stopColor: "#c084fc" }), /* @__PURE__ */ import_react.default.createElement("stop", { offset: "100%", stopColor: "#818cf8" })), /* @__PURE__ */ import_react.default.createElement("clipPath", { id: "yano-logo-clip" }
41291, /* @__PURE__ */ import_react.default.createElement("path", { d: "M42,38 Q42,26 54,26 L146,26 Q158,26 158,38 L158,116 Q158,128 146,128 L86,128 L64,150 L70,128 L54,128 Q42,128 42,116 Z" }))), /* @__PURE__ */ import_react.default.createElement("g", null, /* @__PURE__ */ import_react.default.createElement("animateTransform", { attributeName: "transform", type: "translate", values: "0,0;0,-2;0,0", dur: "3s", repeatCount: "indefinite" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M42,38 Q42,26 54,26 L146,26 Q158,26 158,38 L158,116 Q158,128 146,128 L86,128 L64,150 L70,128 L54,128 Q42,128 42,116 Z", fill: "url(#yano-logo-grad)" }), /* @__PURE__ */ import_react.default.createElement("g", { clipPath: "url(#yano-logo-clip)" }, /* @__PURE__ */ import_react.default.createElement( 41292 "polyline", 41293 { 41294 fill: "none", 41295 stroke: "white", 41296 strokeWidth: "2.5", 41297 strokeLinecap: "round", 41298 strokeLinejoin: "round", 41299 opacity: "0.85", 41300 points: "30,77 42,77 50,77 58,65 66,89 74,58 82,96 90,48 100,108 110,48 118,96 126,58 134,89 142,65 150,77 160,77 172,77" 41301 }, 41302 /* @__PURE__ */ import_react.default.createElement("animate", { attributeName: "points", dur: "1.4s", repeatCount: "indefinite", values: "\n 30,77 42,77 50,77 58,65 66,89 74,58 82,96 90,48 100,108 110,48 118,96 126,58 134,89 142,65 150,77 160,77 172,77;\n 30,77 42,77 50,72 58,82 66,60 74,94 82,45 90,110 100,38 110,116 118,45 126,94 134,60 142,82 150,72 160,77 172,77;\n 30,77 42,77 50,77 58,65 66,89 74,58 82,96 90,48 100,108 110,48 118,96 126,58 134,89 142,65 150,77 160,77 172,77" }) 41303 )))); 41304} 41305function ChatIcon() { 41306 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-[1.125rem] w-[1.125rem] fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M4.2 5.8A2.6 2.6 0 0 1 6.8 3.2h6.4a2.6 2.6 0 0 1 2.6 2.6v4.5a2.6 2.6 0 0 1-2.6 2.6H9l-3.8 3v-3H6.8a2.6 2.6 0 0 1-2.6-2.6Z" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M7.4 7.6h5.2" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M7.4 10.1h3.8" })); 41307} 41308function EffectsIcon() { 41309 return /* @__PURE__ */ import_react.default.createElement("svg", { "aria-hidden": "true", viewBox: "0 0 20 20", className: "h-[1.125rem] w-[1.125rem] fill-none stroke-current stroke-[1.8]" }, /* @__PURE__ */ import_react.default.createElement("path", { d: "M10 2.2l1.1 2.8 2.8 1.1-2.8 1.1L10 10l-1.1-2.8L6.1 6.1l2.8-1.1L10 2.2Z", strokeLinejoin: "round" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M15.2 9.2l.7 1.9 1.9.7-1.9.7-.7 1.9-.7-1.9-1.9-.7 1.9-.7.7-1.9Z", strokeLinejoin: "round" }), /* @__PURE__ */ import_react.default.createElement("path", { d: "M5.2 11.2l.8 2.2 2.2.8-2.2.8-.8 2.2-.8-2.2-2.2-.8 2.2-.8.8-2.2Z", strokeLinejoin: "round" })); 41310} 41311
vendor: 998 bytes, lines 41312-41337
41312// node_modules/@heroicons/react/24/solid/esm/CheckCircleIcon.js 41313var React2 = __toESM(require_react(), 1); 41314function CheckCircleIcon({ 41315 title, 41316 titleId, 41317 ...props 41318}, svgRef) { 41319 return /* @__PURE__ */ React2.createElement("svg", Object.assign({ 41320 xmlns: "http://www.w3.org/2000/svg", 41321 viewBox: "0 0 24 24", 41322 fill: "currentColor", 41323 "aria-hidden": "true", 41324 "data-slot": "icon", 41325 ref: svgRef, 41326 "aria-labelledby": titleId 41327 }, props), title ? /* @__PURE__ */ React2.createElement("title", { 41328 id: titleId 41329 }, title) : null, /* @__PURE__ */ React2.createElement("path", { 41330 fillRule: "evenodd", 41331 d: "M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm13.36-1.814a.75.75 0 1 0-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 0 0-1.06 1.06l2.25 2.25a.75.75 0 0 0 1.14-.094l3.75-5.25Z", 41332 clipRule: "evenodd" 41333 })); 41334} 41335var ForwardRef = /* @__PURE__ */ React2.forwardRef(CheckCircleIcon); 41336var CheckCircleIcon_default = ForwardRef; 41337
vendor: 1,296 bytes, lines 41338-41363
41338// node_modules/@heroicons/react/24/solid/esm/PhoneXMarkIcon.js 41339var React3 = __toESM(require_react(), 1); 41340function PhoneXMarkIcon({ 41341 title, 41342 titleId, 41343 ...props 41344}, svgRef) { 41345 return /* @__PURE__ */ React3.createElement("svg", Object.assign({ 41346 xmlns: "http://www.w3.org/2000/svg", 41347 viewBox: "0 0 24 24", 41348 fill: "currentColor", 41349 "aria-hidden": "true", 41350 "data-slot": "icon", 41351 ref: svgRef, 41352 "aria-labelledby": titleId 41353 }, props), title ? /* @__PURE__ */ React3.createElement("title", { 41354 id: titleId 41355 }, title) : null, /* @__PURE__ */ React3.createElement("path", { 41356 fillRule: "evenodd", 41357 d: "M15.22 3.22a.75.75 0 0 1 1.06 0L18 4.94l1.72-1.72a.75.75 0 1 1 1.06 1.06L19.06 6l1.72 1.72a.75.75 0 0 1-1.06 1.06L18 7.06l-1.72 1.72a.75.75 0 1 1-1.06-1.06L16.94 6l-1.72-1.72a.75.75 0 0 1 0-1.06ZM1.5 4.5a3 3 0 0 1 3-3h1.372c.86 0 1.61.586 1.819 1.42l1.105 4.423a1.875 1.875 0 0 1-.694 1.955l-1.293.97c-.135.101-.164.249-.126.352a11.285 11.285 0 0 0 6.697 6.697c.103.038.25.009.352-.126l.97-1.293a1.875 1.875 0 0 1 1.955-.694l4.423 1.105c.834.209 1.42.959 1.42 1.82V19.5a3 3 0 0 1-3 3h-2.25C8.552 22.5 1.5 15.448 1.5 6.75V4.5Z", 41358 clipRule: "evenodd" 41359 })); 41360} 41361var ForwardRef2 = /* @__PURE__ */ React3.forwardRef(PhoneXMarkIcon); 41362var PhoneXMarkIcon_default = ForwardRef2; 41363
vendor: 1,042 bytes, lines 41364-41389
41364// node_modules/@heroicons/react/24/solid/esm/XCircleIcon.js 41365var React4 = __toESM(require_react(), 1); 41366function XCircleIcon({ 41367 title, 41368 titleId, 41369 ...props 41370}, svgRef) { 41371 return /* @__PURE__ */ React4.createElement("svg", Object.assign({ 41372 xmlns: "http://www.w3.org/2000/svg", 41373 viewBox: "0 0 24 24", 41374 fill: "currentColor", 41375 "aria-hidden": "true", 41376 "data-slot": "icon", 41377 ref: svgRef, 41378 "aria-labelledby": titleId 41379 }, props), title ? /* @__PURE__ */ React4.createElement("title", { 41380 id: titleId 41381 }, title) : null, /* @__PURE__ */ React4.createElement("path", { 41382 fillRule: "evenodd", 41383 d: "M12 2.25c-5.385 0-9.75 4.365-9.75 9.75s4.365 9.75 9.75 9.75 9.75-4.365 9.75-9.75S17.385 2.25 12 2.25Zm-1.72 6.97a.75.75 0 1 0-1.06 1.06L10.94 12l-1.72 1.72a.75.75 0 1 0 1.06 1.06L12 13.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L13.06 12l1.72-1.72a.75.75 0 1 0-1.06-1.06L12 10.94l-1.72-1.72Z", 41384 clipRule: "evenodd" 41385 })); 41386} 41387var ForwardRef3 = /* @__PURE__ */ React4.forwardRef(XCircleIcon); 41388var XCircleIcon_default = ForwardRef3; 41389
vendor: 985 bytes, lines 41390-41417
41390// node_modules/@heroicons/react/24/outline/esm/ArrowPathIcon.js 41391var React5 = __toESM(require_react(), 1); 41392function ArrowPathIcon({ 41393 title, 41394 titleId, 41395 ...props 41396}, svgRef) { 41397 return /* @__PURE__ */ React5.createElement("svg", Object.assign({ 41398 xmlns: "http://www.w3.org/2000/svg", 41399 fill: "none", 41400 viewBox: "0 0 24 24", 41401 strokeWidth: 1.5, 41402 stroke: "currentColor", 41403 "aria-hidden": "true", 41404 "data-slot": "icon", 41405 ref: svgRef, 41406 "aria-labelledby": titleId 41407 }, props), title ? /* @__PURE__ */ React5.createElement("title", { 41408 id: titleId 41409 }, title) : null, /* @__PURE__ */ React5.createElement("path", { 41410 strokeLinecap: "round", 41411 strokeLinejoin: "round", 41412 d: "M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182m0-4.991v4.99" 41413 })); 41414} 41415var ForwardRef4 = /* @__PURE__ */ React5.forwardRef(ArrowPathIcon); 41416var ArrowPathIcon_default = ForwardRef4; 41417
vendor: 1,376 bytes, lines 41418-41445
41418// node_modules/@heroicons/react/24/outline/esm/ChatBubbleLeftRightIcon.js 41419var React6 = __toESM(require_react(), 1); 41420function ChatBubbleLeftRightIcon({ 41421 title, 41422 titleId, 41423 ...props 41424}, svgRef) { 41425 return /* @__PURE__ */ React6.createElement("svg", Object.assign({ 41426 xmlns: "http://www.w3.org/2000/svg", 41427 fill: "none", 41428 viewBox: "0 0 24 24", 41429 strokeWidth: 1.5, 41430 stroke: "currentColor", 41431 "aria-hidden": "true", 41432 "data-slot": "icon", 41433 ref: svgRef, 41434 "aria-labelledby": titleId 41435 }, props), title ? /* @__PURE__ */ React6.createElement("title", { 41436 id: titleId 41437 }, title) : null, /* @__PURE__ */ React6.createElement("path", { 41438 strokeLinecap: "round", 41439 strokeLinejoin: "round", 41440 d: "M20.25 8.511c.884.284 1.5 1.128 1.5 2.097v4.286c0 1.136-.847 2.1-1.98 2.193-.34.027-.68.052-1.02.072v3.091l-3-3c-1.354 0-2.694-.055-4.02-.163a2.115 2.115 0 0 1-.825-.242m9.345-8.334a2.126 2.126 0 0 0-.476-.095 48.64 48.64 0 0 0-8.048 0c-1.131.094-1.976 1.057-1.976 2.192v4.286c0 .837.46 1.58 1.155 1.951m9.345-8.334V6.637c0-1.621-1.152-3.026-2.76-3.235A48.455 48.455 0 0 0 11.25 3c-2.115 0-4.198.137-6.24.402-1.608.209-2.76 1.614-2.76 3.235v6.226c0 1.621 1.152 3.026 2.76 3.235.577.075 1.157.14 1.74.194V21l4.155-4.155" 41441 })); 41442} 41443var ForwardRef5 = /* @__PURE__ */ React6.forwardRef(ChatBubbleLeftRightIcon); 41444var ChatBubbleLeftRightIcon_default = ForwardRef5; 41445
vendor: 997 bytes, lines 41446-41473
41446// node_modules/@heroicons/react/24/outline/esm/LockClosedIcon.js 41447var React7 = __toESM(require_react(), 1); 41448function LockClosedIcon({ 41449 title, 41450 titleId, 41451 ...props 41452}, svgRef) { 41453 return /* @__PURE__ */ React7.createElement("svg", Object.assign({ 41454 xmlns: "http://www.w3.org/2000/svg", 41455 fill: "none", 41456 viewBox: "0 0 24 24", 41457 strokeWidth: 1.5, 41458 stroke: "currentColor", 41459 "aria-hidden": "true", 41460 "data-slot": "icon", 41461 ref: svgRef, 41462 "aria-labelledby": titleId 41463 }, props), title ? /* @__PURE__ */ React7.createElement("title", { 41464 id: titleId 41465 }, title) : null, /* @__PURE__ */ React7.createElement("path", { 41466 strokeLinecap: "round", 41467 strokeLinejoin: "round", 41468 d: "M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" 41469 })); 41470} 41471var ForwardRef6 = /* @__PURE__ */ React7.forwardRef(LockClosedIcon); 41472var LockClosedIcon_default = ForwardRef6; 41473
vendor: 989 bytes, lines 41474-41501
41474// node_modules/@heroicons/react/24/outline/esm/LockOpenIcon.js 41475var React8 = __toESM(require_react(), 1); 41476function LockOpenIcon({ 41477 title, 41478 titleId, 41479 ...props 41480}, svgRef) { 41481 return /* @__PURE__ */ React8.createElement("svg", Object.assign({ 41482 xmlns: "http://www.w3.org/2000/svg", 41483 fill: "none", 41484 viewBox: "0 0 24 24", 41485 strokeWidth: 1.5, 41486 stroke: "currentColor", 41487 "aria-hidden": "true", 41488 "data-slot": "icon", 41489 ref: svgRef, 41490 "aria-labelledby": titleId 41491 }, props), title ? /* @__PURE__ */ React8.createElement("title", { 41492 id: titleId 41493 }, title) : null, /* @__PURE__ */ React8.createElement("path", { 41494 strokeLinecap: "round", 41495 strokeLinejoin: "round", 41496 d: "M13.5 10.5V6.75a4.5 4.5 0 1 1 9 0v3.75M3.75 21.75h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H3.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" 41497 })); 41498} 41499var ForwardRef7 = /* @__PURE__ */ React8.forwardRef(LockOpenIcon); 41500var LockOpenIcon_default = ForwardRef7; 41501
vendor: 931 bytes, lines 41502-41529
41502// node_modules/@heroicons/react/24/outline/esm/PaperAirplaneIcon.js 41503var React9 = __toESM(require_react(), 1); 41504function PaperAirplaneIcon({ 41505 title, 41506 titleId, 41507 ...props 41508}, svgRef) { 41509 return /* @__PURE__ */ React9.createElement("svg", Object.assign({ 41510 xmlns: "http://www.w3.org/2000/svg", 41511 fill: "none", 41512 viewBox: "0 0 24 24", 41513 strokeWidth: 1.5, 41514 stroke: "currentColor", 41515 "aria-hidden": "true", 41516 "data-slot": "icon", 41517 ref: svgRef, 41518 "aria-labelledby": titleId 41519 }, props), title ? /* @__PURE__ */ React9.createElement("title", { 41520 id: titleId 41521 }, title) : null, /* @__PURE__ */ React9.createElement("path", { 41522 strokeLinecap: "round", 41523 strokeLinejoin: "round", 41524 d: "M6 12 3.269 3.125A59.769 59.769 0 0 1 21.485 12 59.768 59.768 0 0 1 3.27 20.875L5.999 12Zm0 0h7.5" 41525 })); 41526} 41527var ForwardRef8 = /* @__PURE__ */ React9.forwardRef(PaperAirplaneIcon); 41528var PaperAirplaneIcon_default = ForwardRef8; 41529
vendor: 1,104 bytes, lines 41530-41557
41530// node_modules/@heroicons/react/24/outline/esm/SpeakerWaveIcon.js 41531var React10 = __toESM(require_react(), 1); 41532function SpeakerWaveIcon({ 41533 title, 41534 titleId, 41535 ...props 41536}, svgRef) { 41537 return /* @__PURE__ */ React10.createElement("svg", Object.assign({ 41538 xmlns: "http://www.w3.org/2000/svg", 41539 fill: "none", 41540 viewBox: "0 0 24 24", 41541 strokeWidth: 1.5, 41542 stroke: "currentColor", 41543 "aria-hidden": "true", 41544 "data-slot": "icon", 41545 ref: svgRef, 41546 "aria-labelledby": titleId 41547 }, props), title ? /* @__PURE__ */ React10.createElement("title", { 41548 id: titleId 41549 }, title) : null, /* @__PURE__ */ React10.createElement("path", { 41550 strokeLinecap: "round", 41551 strokeLinejoin: "round", 41552 d: "M19.114 5.636a9 9 0 0 1 0 12.728M16.463 8.288a5.25 5.25 0 0 1 0 7.424M6.75 8.25l4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z" 41553 })); 41554} 41555var ForwardRef9 = /* @__PURE__ */ React10.forwardRef(SpeakerWaveIcon); 41556var SpeakerWaveIcon_default = ForwardRef9; 41557
vendor: 1,109 bytes, lines 41558-41585
41558// node_modules/@heroicons/react/24/outline/esm/SpeakerXMarkIcon.js 41559var React11 = __toESM(require_react(), 1); 41560function SpeakerXMarkIcon({ 41561 title, 41562 titleId, 41563 ...props 41564}, svgRef) { 41565 return /* @__PURE__ */ React11.createElement("svg", Object.assign({ 41566 xmlns: "http://www.w3.org/2000/svg", 41567 fill: "none", 41568 viewBox: "0 0 24 24", 41569 strokeWidth: 1.5, 41570 stroke: "currentColor", 41571 "aria-hidden": "true", 41572 "data-slot": "icon", 41573 ref: svgRef, 41574 "aria-labelledby": titleId 41575 }, props), title ? /* @__PURE__ */ React11.createElement("title", { 41576 id: titleId 41577 }, title) : null, /* @__PURE__ */ React11.createElement("path", { 41578 strokeLinecap: "round", 41579 strokeLinejoin: "round", 41580 d: "M17.25 9.75 19.5 12m0 0 2.25 2.25M19.5 12l2.25-2.25M19.5 12l-2.25 2.25m-10.5-6 4.72-4.72a.75.75 0 0 1 1.28.53v15.88a.75.75 0 0 1-1.28.53l-4.72-4.72H4.51c-.88 0-1.704-.507-1.938-1.354A9.009 9.009 0 0 1 2.25 12c0-.83.112-1.633.322-2.396C2.806 8.756 3.63 8.25 4.51 8.25H6.75Z" 41581 })); 41582} 41583var ForwardRef10 = /* @__PURE__ */ React11.forwardRef(SpeakerXMarkIcon); 41584var SpeakerXMarkIcon_default = ForwardRef10; 41585
vendor: 1,186 bytes, lines 41586-41613
41586// node_modules/@heroicons/react/24/outline/esm/UsersIcon.js 41587var React12 = __toESM(require_react(), 1); 41588function UsersIcon({ 41589 title, 41590 titleId, 41591 ...props 41592}, svgRef) { 41593 return /* @__PURE__ */ React12.createElement("svg", Object.assign({ 41594 xmlns: "http://www.w3.org/2000/svg", 41595 fill: "none", 41596 viewBox: "0 0 24 24", 41597 strokeWidth: 1.5, 41598 stroke: "currentColor", 41599 "aria-hidden": "true", 41600 "data-slot": "icon", 41601 ref: svgRef, 41602 "aria-labelledby": titleId 41603 }, props), title ? /* @__PURE__ */ React12.createElement("title", { 41604 id: titleId 41605 }, title) : null, /* @__PURE__ */ React12.createElement("path", { 41606 strokeLinecap: "round", 41607 strokeLinejoin: "round", 41608 d: "M15 19.128a9.38 9.38 0 0 0 2.625.372 9.337 9.337 0 0 0 4.121-.952 4.125 4.125 0 0 0-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 0 1 8.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0 1 11.964-3.07M12 6.375a3.375 3.375 0 1 1-6.75 0 3.375 3.375 0 0 1 6.75 0Zm8.25 2.25a2.625 2.625 0 1 1-5.25 0 2.625 2.625 0 0 1 5.25 0Z" 41609 })); 41610} 41611var ForwardRef11 = /* @__PURE__ */ React12.forwardRef(UsersIcon); 41612var UsersIcon_default = ForwardRef11; 41613
vendor: 829 bytes, lines 41614-41641
41614// node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js 41615var React13 = __toESM(require_react(), 1); 41616function XMarkIcon({ 41617 title, 41618 titleId, 41619 ...props 41620}, svgRef) { 41621 return /* @__PURE__ */ React13.createElement("svg", Object.assign({ 41622 xmlns: "http://www.w3.org/2000/svg", 41623 fill: "none", 41624 viewBox: "0 0 24 24", 41625 strokeWidth: 1.5, 41626 stroke: "currentColor", 41627 "aria-hidden": "true", 41628 "data-slot": "icon", 41629 ref: svgRef, 41630 "aria-labelledby": titleId 41631 }, props), title ? /* @__PURE__ */ React13.createElement("title", { 41632 id: titleId 41633 }, title) : null, /* @__PURE__ */ React13.createElement("path", { 41634 strokeLinecap: "round", 41635 strokeLinejoin: "round", 41636 d: "M6 18 18 6M6 6l12 12" 41637 })); 41638} 41639var ForwardRef12 = /* @__PURE__ */ React13.forwardRef(XMarkIcon); 41640var XMarkIcon_default = ForwardRef12; 41641
41642// app/javascript/yano/i18n.jsx 41643var import_react2 = __toESM(require_react()); 41644var import_react_dom = __toESM(require_react_dom()); 41645
41646// app/javascript/yano/locales/de.js 41647var de_default = { 41648 "home.heading.default": "ab in den call", 41649 "home.heading.loading": "\xF6ffne room...", 41650 "home.heading.join": "ready?", 41651 "home.heading.joined": "du bist drin", 41652 "home.heading.pending": "warten auf den host", 41653 "home.body.default": "room erstellen, link droppen, viben.", 41654 "home.body.loading": "sekunde, lade den room.", 41655 "home.body.join": "check cam und mic, dann komm rein.", 41656 "home.body.joined": "room ist live. teil den link oder leg los.", 41657 "home.body.joined_in_room": "im room \u2014 komm dazu oder teil den link.", 41658 "home.body.pending": "room ist locked. der host l\xE4sst dich gleich rein.", 41659 "home.cta.create": "Room erstellen", 41660 "home.cta.join": "Room beitreten", 41661 "home.cta.enter": "Room betreten", 41662 "home.cta.creating": "Erstelle...", 41663 "home.cta.joining": "Joine...", 41664 "home.cta.opening": "\xD6ffne...", 41665 "home.cta.pending": "Warte auf Host...", 41666 "home.copy_link": "link kopieren", 41667 "home.copied": "kopiert!", 41668 "home.leave": "room verlassen", 41669 "home.back": "zur\xFCck", 41670 "home.no_participants": "noch niemand hier", 41671 "home.join_by_code": "mit code joinen", 41672 "home.code_placeholder": "code eingeben", 41673 "home.name_placeholder": "dein name", 41674 "home.people_one": "person", 41675 "home.people_other": "leute", 41676 "home.marketing.invite.title": "Room erstellen,\nLink teilen.", 41677 "home.marketing.invite.body": "Ein Tap und los geht's. Teil den Link mit Freunden und alle k\xF6nnen joinen \u2014 ohne Download, ohne Anmeldung.", 41678 "home.marketing.invite.preview_url": "yano.ai/ROOM", 41679 "home.marketing.look.title": "Dein Look,\ndeine Wahl.", 41680 "home.marketing.look.body": "Color Grading, Softening, Vignette \u2014 oder blur dein Gesicht komplett. Deine Cam, dein Look.", 41681 "home.marketing.host.title": "Dein Space,\ndeine Regeln.", 41682 "home.marketing.host.body": "Room locken, Leute muten oder ganz kicken. Der Host hat die Kontrolle.", 41683 "home.marketing.host.locked": "Room locked", 41684 "home.marketing.host.waiting_to_join": "Warten aufs Joinen", 41685 "home.marketing.host.wants_to_join": "will rein", 41686 "home.marketing.anything.title": "Eigentlich f\xFCr alles.", 41687 "home.marketing.anything.body": "Study Sessions, Game Nights, Standups, zusammen was schauen \u2014 oder einfach nur abh\xE4ngen.", 41688 "home.marketing.use_case.study_group": "\u{1F4DA} lerngruppe", 41689 "home.marketing.use_case.game_night": "\u{1F3AE} game night", 41690 "home.marketing.use_case.standup": "\u{1F4BC} standup", 41691 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 41692 "home.marketing.use_case.catch_up": "\u2615 catch up", 41693 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 41694 "home.marketing.use_case.book_club": "\u{1F4D6}
41694 buchclub", 41695 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 41696 "ended.heading": "call beendet", 41697 "ended.left": "du hast den room verlassen.", 41698 "ended.room_ended": "{title} ist f\xFCr dich beendet.", 41699 "ended.rejoin": "wieder rein", 41700 "ended.rejoining": "joine wieder...", 41701 "ended.home": "zur\xFCck zur startseite", 41702 "call.connecting": "verbinde", 41703 "call.waiting": "warte auf andere", 41704 "call.invite_code": "invite code", 41705 "call.audio_on": "ton an", 41706 "call.muted": "gemutet", 41707 "call.listening": "H\xF6rt zu", 41708 "call.audio_muted": "Ton gemutet", 41709 "call.speaking": "spricht", 41710 "call.you": "du", 41711 "call.you_label": "Du", 41712 "call.you_suffix": "(du)", 41713 "call.chat_placeholder": "schreib was...", 41714 "call.guest": "gast", 41715 "call.room_fallback": "room", 41716 "call.focus_view": "Fokus-Ansicht", 41717 "call.grid_view": "Grid-Ansicht", 41718 "call.swap_main_video": "Hauptvideo tauschen", 41719 "call.open_chat": "Chat \xF6ffnen", 41720 "call.close_chat": "Chat schlie\xDFen", 41721 "call.leave_room": "Room verlassen", 41722 "call.confirm_leave": "Verlassen?", 41723 "call.mic_on": "Mic an", 41724 "call.muted_label": "Gemutet", 41725 "call.camera_off": "Cam aus", 41726 "call.connect_failed": "Verbindung fehlgeschlagen \u2014 check dein Internet und versuch's nochmal.", 41727 "call.camera_access_failed": "Kein Zugriff auf deine Cam. Check die Browser-Rechte und versuch's nochmal.", 41728 "call.recording_failed": "Aufnahme konnte nicht starten. Der Call l\xE4uft ohne weiter.", 41729 "call.initialize_failed": "Irgendwas lief schief. Bitte lad die Seite neu.", 41730 "call.participants": "Leute", 41731 "call.open_participants": "Leute anzeigen", 41732 "call.close_participants": "Leute ausblenden", 41733 "call.lock_room": "Room locken", 41734 "call.unlock_room": "Room \xF6ffnen", 41735 "call.locked": "locked", 41736 "call.unlocked": "offen", 41737 "call.kick_member": "Aus dem Room kicken", 41738 "call.mute_member": "Muten", 41739 "call.unmute_member": "Entmuten", 41740 "call.muted_by_host": "Vom Host gemutet", 41741 "call.waiting_to_join": "Warten aufs Joinen", 41742 "call.approve": "Reinlassen", 41743 "call.deny": "Ablehnen", 41744 "call.profile_actions": "Profil-Aktionen", 41745 "call.profile_in_room": "Im Room", 41746 "call.profile_role_host": "Host", 41747 "call.profile_role_you": "Du", 41748 "call.profile_action_mute": "Ton muten", 41749 "call.profile_action_mute_meta": "Nur f\xFCr dich \u2014 die Person merkt nichts", 41750 "call.profile_action_dm": "1:1 DM", 41751 "call.profile_action_dm_meta": "Starte einen privaten Chat", 41752 "call.profile_action_view": "Ganzes Profil ansehen", 41753 "call.profile_action_view_meta": "Bio, Sprachen, letzte Sessions", 41754 "call.profile_action_report": "Melden", 41755 "call.profile_action_report_meta": "F\xFCrs Moderations-Team markieren", 41756 "call.profile_sheet_close": "Profil-Aktionen schlie\xDFen", 41757 "call.profile_open_actions": "Profil-Aktionen \xF6ffnen", 41758 "call.dm_title": "Direct Message", 41759 "call.dm_back": "Zur\xFCck zu Aktionen", 41760 "call.dm_close": "DM schlie\xDFen", 41761 "call.dm_status_online": "Online", 41762 "call.dm_in_room_with": "In diesem Room", 41763 "call.dm_private_label": "Privater Chat", 41764 "call.dm_private_meta": "Nur ihr beide seht diese Nachrichten", 41765 "call.dm_input_placeholder": "Schreib eine private Nachricht\u2026", 41766 "call.dm_send": "Senden", 41767 "call.dm_just_now": "gerade eben", 41768 "call.dm_seen_just_now": "Gerade gelesen", 41769 "call.dm_typing": "{name} tippt\u2026", 41770 "call.dm_minimize": "Minimieren", 41771 "call.dm_active_indicator": "Chat \xF6ffnen", 41772 "call.dm_unread_messages": "{count} ungelesen", 41773 "call.dm_toast_tap_to_open": "Tippen zum \xD6ffnen", 41774 "call.dm_reopen_aria": "Chat mit {name} wieder \xF6ffnen", 41775 "home.join_denied": "Der Host hat dich nicht reingelassen.", 41776 "home.error.room_not_found": "Diesen Room-Code gibt's nicht.", 41777 "home.error.profile_required": "Richte dein Profil ein, um weiterzumachen.", 41778 "home.cta.set_up_profile": "Profil einrichten", 41779 "home.profile_trigger_new": "Tippen, um Infos hinzuzuf\xFCgen", 41780 "home.profile_trigger_new_aria": "Profil einrichten", 41781 "home.profile_trigger_edit_aria": "Profil bearbeiten", 41782 "profile.eyebrow_new": "sag hi", 41783 "profile.eyebrow_edit": "dein profil", 41784 "profile.title_new": "Mach's zu deinem.", 41785 "profile.title_edit": "Profil bearbeiten", 41786 "profile.subtitle": "Ein paar kurze Infos, damit andere wissen, mit wem sie im C
41786all sind.", 41787 "profile.add_photo": "Foto hinzuf\xFCgen", 41788 "profile.add_photo_soon": "fotos kommen bald", 41789 "profile.photo_empty": "tippen f\xFCr ein foto", 41790 "profile.photo_ready": "foto ready", 41791 "profile.photo_save_first": "speicher dein profil, bevor du ein foto hochl\xE4dst", 41792 "profile.photo_crop_caption": "foto zuschneiden", 41793 "profile.photo_auto_caption": "ziehen und zoomen, wird automatisch gespeichert", 41794 "profile.photo_upload": "Foto hochladen", 41795 "profile.photo_replace": "Foto austauschen", 41796 "profile.photo_remove": "Foto l\xF6schen", 41797 "profile.photo_cancel": "Abbrechen", 41798 "profile.photo_save": "Foto speichern", 41799 "profile.photo_uploading": "Lade Foto hoch\u2026", 41800 "profile.photo_removing": "L\xF6sche Foto\u2026", 41801 "profile.photo_choose_another": "Anderes ausw\xE4hlen", 41802 "profile.photo_drag_hint": "Zieh das Foto in den Kreis. \xC4nderungen werden automatisch gespeichert.", 41803 "profile.photo_zoom": "Zoom", 41804 "profile.photo_horizontal": "Horizontal zuschneiden", 41805 "profile.photo_vertical": "Vertikal zuschneiden", 41806 "profile.name_label": "Name", 41807 "profile.name_placeholder": "Wie sollen wir dich nennen?", 41808 "profile.gender_label": "Ich bin", 41809 "profile.gender.woman": "Frau", 41810 "profile.gender.man": "Mann", 41811 "profile.gender.unspecified": "Sag ich lieber nicht", 41812 "profile.bio_label": "Bio", 41813 "profile.bio_optional": "optional", 41814 "profile.bio_placeholder": "Sprachen, Hobbys, was auch immer\u2026", 41815 "profile.cta_new": "Let's go", 41816 "profile.cta_edit": "\xC4nderungen speichern", 41817 "profile.saving": "Speichere\u2026", 41818 "profile.close": "Schlie\xDFen", 41819 "profile.error.save_failed": "Profil konnte nicht gespeichert werden. Versuch's nochmal.", 41820 "profile.error.avatar_invalid_type": "W\xE4hl ein PNG, JPEG, GIF oder WebP.", 41821 "profile.error.avatar_too_large": "Das Bild muss kleiner als 5 MB sein.", 41822 "profile.error.avatar_too_small": "Das Bild muss mindestens 96x96 Pixel gro\xDF sein.", 41823 "profile.error.avatar_load_failed": "Bild konnte nicht gelesen werden. Versuch ein anderes.", 41824 "profile.error.avatar_failed": "Foto-Upload fehlgeschlagen. Versuch's nochmal.", 41825 "profile.error.avatar_remove_failed": "Foto konnte nicht gel\xF6scht werden. Versuch's nochmal.", 41826 "effects.title": "Effekte", 41827 "effects.soft": "Soft Focus", 41828 "effects.vignette": "Vignette", 41829 "effects.face": "Face Blur", 41830 "effects.face_preview_only": "Face Blur (nur Preview)", 41831 "effects.face_viewer_side": "Face Blur (f\xFCr andere)", 41832 "effects.face_strength": "Face Blur St\xE4rke", 41833 "effects.grade.off": "AUS", 41834 "effects.grade.pop": "POP", 41835 "effects.grade.warm": "WARM", 41836 "effects.grade.cool": "COOL", 41837 "effects.grade.bw": "S/W", 41838 "camera.off": "cam ist aus", 41839 "camera.check": "check deine cam", 41840 "camera.retry": "cam nochmal probieren", 41841 "camera.ready": "cam ready", 41842 "camera.idle.title": "Mach deine Cam an", 41843 "camera.idle.hint": "Wir fragen deinen Browser nach Rechten, wenn du ready bist.", 41844 "camera.idle.button": "Cam anmachen", 41845 "camera.status.idle": "Warten auf dich", 41846 "camera.status.off": "Cam ist aus", 41847 "camera.status.loading": "Frage Cam-Rechte an...", 41848 "camera.status.denied": "Erlaub den Cam-Zugriff im Browser und versuch's nochmal.", 41849 "camera.status.error": "Cam-Preview fehlgeschlagen. Versuch's nochmal.", 41850 "camera.status.unsupported": "Dieser Browser unterst\xFCtzt keinen Cam-Zugriff.", 41851 "camera.status.insecure": "Cam-Zugriff braucht HTTPS oder localhost.", 41852 "camera.guest_name_placeholder": "Gast-Name", 41853 "camera.flip": "Cam wechseln", 41854 "camera.save_name": "Speichern", 41855 "camera.edit_name": "Name bearbeiten", 41856 "mic.on": "Mic ausmachen", 41857 "mic.off": "Mic anmachen", 41858 "video.on": "Cam ausmachen", 41859 "video.off": "Cam anmachen", 41860 "chat.title": "chat", 41861 "chat.close": "Chat schlie\xDFen", 41862 "chat.loading": "l\xE4dt...", 41863 "chat.load_earlier": "\xE4ltere laden", 41864 "chat.empty": "noch keine nachrichten", 41865 "chat.send_error": "Nachricht ging nicht raus \u2014 versuch's nochmal.", 41866 "chat.input_placeholder": "schreib was...", 41867 "room.host": "Host", 41868 "app.room_default_title": "Room erstellen", 41869 "app.chat_connection_rejected": "Chat-Verbindung fehlgeschlagen \u2014 lad die Seite neu.", 41870 "app.copy_failed": "Link konnte nicht kopiert werden. Versuch's manuell.", 41871 "app.chat_not_connected": "Chat ist noch nicht verbunden. Gib ihm 'ne Sekunde und versuch's nochmal.", 41872 "footer.terms": "AGB", 41873 "footer.copyright": "\xA9 2026 Yano.AI" 41874}; 41875
41876// app/javascript/yano/locales/en.js 41877var en_default = { 41878 "home.heading.default": "hop on a call", 41879 "home.heading.loading": "Opening room...", 41880 "home.heading.join": "ready to join?", 41881 "home.heading.joined": "you\u2019re in", 41882 "home.heading.pending": "waiting for the host", 41883 "home.body.default": "create a room, drop the link, vibe.", 41884 "home.body.loading": "one sec, grabbing the room.", 41885 "home.body.join": "check your cam and mic, then jump in.", 41886 "home.body.joined": "room\u2019s live. share the link or just go.", 41887 "home.body.joined_in_room": "in the room \u2014 jump in or share the link.", 41888 "home.body.pending": "the room is locked. the host will let you in.", 41889 "home.cta.create": "Create room", 41890 "home.cta.join": "Join room", 41891 "home.cta.enter": "Enter room", 41892 "home.cta.creating": "Creating...", 41893 "home.cta.joining": "Joining...", 41894 "home.cta.opening": "Opening...", 41895 "home.cta.pending": "Waiting for approval...", 41896 "home.copy_link": "copy link", 41897 "home.copied": "copied!", 41898 "home.leave": "leave room", 41899 "home.back": "back", 41900 "home.no_participants": "no one here yet", 41901 "home.join_by_code": "join by invite code", 41902 "home.code_placeholder": "enter code", 41903 "home.name_placeholder": "your name", 41904 "home.people_one": "person", 41905 "home.people_other": "people", 41906 "home.marketing.invite.title": "Create a room,\nshare the link.", 41907 "home.marketing.invite.body": "One tap to start. Share the link with your friends and anyone can join \u2014 no downloads, no sign-ups.", 41908 "home.marketing.invite.preview_url": "yano.ai/ROOM", 41909 "home.marketing.look.title": "Look how\nyou want.", 41910 "home.marketing.look.body": "Color grading, softening, vignette \u2014 or blur your face entirely. Your camera, your look.", 41911 "home.marketing.host.title": "Your space,\nyour rules.", 41912 "home.marketing.host.body": "Lock the room, mute someone, or remove them entirely. The host stays in control.", 41913 "home.marketing.host.locked": "Room locked", 41914 "home.marketing.host.waiting_to_join": "Waiting to join", 41915 "home.marketing.host.wants_to_join": "wants to join", 41916 "home.marketing.anything.title": "For anything, really.", 41917 "home.marketing.anything.body": "Study sessions, game nights, work standups, watching stuff together \u2014 or just hanging out.", 41918 "home.marketing.use_case.study_group": "\u{1F4DA} study group", 41919 "home.marketing.use_case.game_night": "\u{1F3AE} game night", 41920 "home.marketing.use_case.standup": "\u{1F4BC} standup", 41921 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 41922 "home.marketing.use_case.catch_up": "\u2615 catch up", 41923 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 41924 "home.marketing.use_case.book_club": "\u{1F4D6}
41924 book club", 41925 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 41926 "ended.heading": "call ended", 41927 "ended.left": "you left the room.", 41928 "ended.room_ended": "{title} has ended for you.", 41929 "ended.rejoin": "rejoin", 41930 "ended.rejoining": "rejoining...", 41931 "ended.home": "return home", 41932 "call.connecting": "connecting", 41933 "call.waiting": "waiting for others", 41934 "call.invite_code": "invite code", 41935 "call.audio_on": "audio on", 41936 "call.muted": "muted", 41937 "call.listening": "Listening", 41938 "call.audio_muted": "Audio muted", 41939 "call.speaking": "speaking", 41940 "call.you": "you", 41941 "call.you_label": "You", 41942 "call.you_suffix": "(you)", 41943 "call.chat_placeholder": "send a message...", 41944 "call.guest": "guest", 41945 "call.room_fallback": "room", 41946 "call.focus_view": "Focus view", 41947 "call.grid_view": "Grid view", 41948 "call.swap_main_video": "Swap main video", 41949 "call.open_chat": "Open chat", 41950 "call.close_chat": "Close chat", 41951 "call.leave_room": "Leave room", 41952 "call.confirm_leave": "Leave?", 41953 "call.mic_on": "Mic on", 41954 "call.muted_label": "Muted", 41955 "call.camera_off": "Camera off", 41956 "call.connect_failed": "Connection failed \u2014 check your internet and try again.", 41957 "call.camera_access_failed": "Couldn't access your camera. Check browser permissions and try again.", 41958 "call.recording_failed": "Recording couldn't start. The call will continue without it.", 41959 "call.initialize_failed": "Something went wrong starting the call. Please refresh and try again.", 41960 "call.participants": "Participants", 41961 "call.open_participants": "Open participants", 41962 "call.close_participants": "Close participants", 41963 "call.lock_room": "Lock room", 41964 "call.unlock_room": "Unlock room", 41965 "call.locked": "locked", 41966 "call.unlocked": "open", 41967 "call.kick_member": "Remove from room", 41968 "call.mute_member": "Mute", 41969 "call.unmute_member": "Unmute", 41970 "call.muted_by_host": "Muted by host", 41971 "call.waiting_to_join": "Waiting to join", 41972 "call.approve": "Approve", 41973 "call.deny": "Deny", 41974 "call.profile_actions": "Profile actions", 41975 "call.profile_in_room": "In room", 41976 "call.profile_role_host": "Host", 41977 "call.profile_role_you": "You", 41978 "call.profile_action_mute": "Mute their audio", 41979 "call.profile_action_mute_meta": "Just for you \u2014 they won't know", 41980 "call.profile_action_dm": "1:1 DM", 41981 "call.profile_action_dm_meta": "Start a private side-chat", 41982 "call.profile_action_view": "View full profile", 41983 "call.profile_action_view_meta": "Bio, languages, past sessions", 41984 "call.profile_action_report": "Report", 41985 "call.profile_action_report_meta": "Flag for moderation review", 41986 "call.profile_sheet_close": "Close profile actions", 41987 "call.profile_open_actions": "Open profile actions", 41988 "call.dm_title": "Direct message", 41989 "call.dm_back": "Back to actions", 41990 "call.dm_close": "Close direct message", 41991 "call.dm_status_online": "Online", 41992 "call.dm_in_room_with": "In this room", 41993 "call.dm_private_label": "Private chat", 41994 "call.dm_private_meta": "Only the two of you can see these messages", 41995 "call.dm_input_placeholder": "Send a private message\u2026", 41996 "call.dm_send": "Send", 41997 "call.dm_just_now": "now", 41998 "call.dm_seen_just_now": "Seen just now", 41999 "call.dm_typing": "{name} is typing\u2026", 42000 "call.dm_minimize": "Minimize", 42001 "call.dm_active_indicator": "Open conversation", 42002 "call.dm_unread_messages": "{count} unread", 42003 "call.dm_toast_tap_to_open": "Tap to open", 42004 "call.dm_reopen_aria": "Reopen conversation with {name}", 42005 "home.join_denied": "The host didn't let you in.", 42006 "home.error.room_not_found": "That room code doesn\u2019t exist.", 42007 "home.error.profile_required": "Set up your profile to continue.", 42008 "home.cta.set_up_profile": "Set up your profile", 42009 "home.profile_trigger_new": "Tap to add your details", 42010 "home.profile_trigger_new_aria": "Set up your profile", 42011 "home.profile_trigger_edit_aria": "Edit your profile", 42012 "profile.eyebrow_new": "say hi", 42013 "profile.eyebrow_edit": "your profile", 42014 "profile.title_new": "Make it yours.", 42015 "profile.title_edit": "Edit profile", 42016 "profile.subtitle": "A few quick details so partners know who they\u2019re meeting.", 42017 "profile.add_photo": "Add photo", 42018 "profile.add_photo_soon": "photos coming soon", 42019 "profile.photo_empty": "tap to add a photo", 42020 "profile.photo_ready": "photo ready", 42021 "profile.photo_save_first": "save your profile before uploading a photo", 42022 "profile.photo_crop_caption": "frame your photo", 42023 "profile.photo_auto_caption": "drag and zoom, then we save it automatically", 42024 "profile.photo_upload": "Upload photo", 42025 "profile.photo_replace": "Replace photo", 42026 "profile.photo_remove": "Remove photo", 42027 "profile.photo_cancel": "Cancel", 42028 "profile.photo_save": "Save photo", 42029 "profile.photo_uploading": "Uploading photo\u2026", 42030 "profile.photo_removing": "Removing photo\u2026", 42031 "profile.photo_choose_another": "Choose another", 42032 "profile.photo_drag_hint": "Drag the photo to place it inside the circle. Changes save automatically.", 42033 "profile.photo_zoom": "Zoom", 42034 "profile.photo_horizontal": "Horizontal crop", 42035 "profile.photo_vertical": "Vertical crop",
42036 "profile.name_label": "Name", 42037 "profile.name_placeholder": "What should we call you?", 42038 "profile.gender_label": "I am", 42039 "profile.gender.woman": "Woman", 42040 "profile.gender.man": "Man", 42041 "profile.gender.unspecified": "Prefer not to say", 42042 "profile.bio_label": "Bio", 42043 "profile.bio_optional": "optional", 42044 "profile.bio_placeholder": "Languages you speak, what you love, anything\u2026", 42045 "profile.cta_new": "Let\u2019s go", 42046 "profile.cta_edit": "Save changes", 42047 "profile.saving": "Saving\u2026", 42048 "profile.close": "Close", 42049 "profile.error.save_failed": "Couldn\u2019t save your profile. Try again.", 42050 "profile.error.avatar_invalid_type": "Choose a PNG, JPEG, GIF, or WebP image.", 42051 "profile.error.avatar_too_large": "Choose an image smaller than 5 MB.", 42052 "profile.error.avatar_too_small": "Choose an image that is at least 96 by 96 pixels.", 42053 "profile.error.avatar_load_failed": "We couldn\u2019t read that image. Try another file.", 42054 "profile.error.avatar_failed": "Couldn\u2019t upload your photo. Try again.", 42055 "profile.error.avatar_remove_failed": "Couldn\u2019t remove your photo. Try again.", 42056 "effects.title": "Effects", 42057 "effects.soft": "Soft focus", 42058 "effects.vignette": "Vignette", 42059 "effects.face": "Face blur", 42060 "effects.face_preview_only": "Face blur (preview only)", 42061 "effects.face_viewer_side": "Face blur (viewer-side)", 42062 "effects.face_strength": "Face blur strength", 42063 "effects.grade.off": "OFF", 42064 "effects.grade.pop": "POP", 42065 "effects.grade.warm": "WARM", 42066 "effects.grade.cool": "COOL", 42067 "effects.grade.bw": "B&W", 42068 "camera.off": "camera is off", 42069 "camera.check": "check your camera", 42070 "camera.retry": "retry camera", 42071 "camera.ready": "camera ready", 42072 "camera.idle.title": "Turn on your camera", 42073 "camera.idle.hint": "We\u2019ll ask your browser for access when you\u2019re ready.", 42074 "camera.idle.button": "Turn on camera", 42075 "camera.status.idle": "Waiting for you", 42076 "camera.status.off": "Camera is off", 42077 "camera.status.loading": "Requesting camera access...", 42078 "camera.status.denied": "Allow camera access in the browser, then try again.", 42079 "camera.status.error": "Camera preview failed. Try again.", 42080 "camera.status.unsupported": "This browser does not expose camera access.", 42081 "camera.status.insecure": "Camera access needs HTTPS or localhost.", 42082 "camera.status.attach_failed": "Camera preview could not start. Try again.", 42083 "camera.guest_name_placeholder": "Guest name", 42084 "camera.flip": "Switch camera", 42085 "camera.save_name": "Save", 42086 "camera.edit_name": "Edit name", 42087 "mic.on": "Turn microphone off", 42088 "mic.off": "Turn microphone on", 42089 "video.on": "Turn camera off", 42090 "video.off": "Turn camera on", 42091 "chat.title": "chat", 42092 "chat.close": "Close chat", 42093 "chat.loading": "loading...", 42094 "chat.load_earlier": "load earlier", 42095 "chat.empty": "no messages yet", 42096 "chat.send_error": "Message didn't send \u2014 try again.", 42097 "chat.input_placeholder": "type a message...", 42098 "room.host": "Host", 42099 "app.room_default_title": "Create a room", 42100 "app.chat_connection_rejected": "Chat couldn't connect \u2014 try refreshing.", 42101 "app.copy_failed": "Couldn't copy the link. Try selecting and copying it manually.", 42102 "app.chat_not_connected": "Chat isn't connected yet. Give it a moment and try again.", 42103 "footer.terms": "Terms & Conditions", 42104 "footer.copyright": "\xA9 2026 Yano.AI" 42105}; 42106
42107// app/javascript/yano/locales/es.js 42108var es_default = { 42109 "home.heading.default": "entra a la llamada", 42110 "home.heading.loading": "Abriendo sala...", 42111 "home.heading.join": "\xBFlisto para entrar?", 42112 "home.heading.joined": "ya est\xE1s dentro", 42113 "home.heading.pending": "esperando al host", 42114 "home.body.default": "crea una sala, pasa el link, y a fluir.", 42115 "home.body.loading": "un seg, preparando la sala.", 42116 "home.body.join": "revisa tu c\xE1mara y micro, y entra.", 42117 "home.body.joined": "la sala est\xE1 activa. comparte el link o entra de una.", 42118 "home.body.joined_in_room": "en la sala \u2014 entra o comparte el link.", 42119 "home.body.pending": "la sala est\xE1 cerrada. el host te dejar\xE1 entrar.", 42120 "home.cta.create": "Crear sala", 42121 "home.cta.join": "Entrar a la sala", 42122 "home.cta.enter": "Entrar", 42123 "home.cta.creating": "Creando...", 42124 "home.cta.joining": "Entrando...", 42125 "home.cta.opening": "Abriendo...", 42126 "home.cta.pending": "Esperando acceso...", 42127 "home.copy_link": "copiar link", 42128 "home.copied": "\xA1copiado!", 42129 "home.leave": "salir de la sala", 42130 "home.back": "volver", 42131 "home.no_participants": "no hay nadie todav\xEDa", 42132 "home.join_by_code": "entrar con c\xF3digo", 42133 "home.code_placeholder": "ingresa el c\xF3digo", 42134 "home.name_placeholder": "tu nombre", 42135 "home.people_one": "persona", 42136 "home.people_other": "personas", 42137 "home.marketing.invite.title": "Crea una sala,\ncomparte el link.", 42138 "home.marketing.invite.body": "Un toque y listo. Pasa el link a tus amigos y cualquiera puede entrar \u2014 sin descargar nada, sin registrarse.", 42139 "home.marketing.invite.preview_url": "yano.ai/ROOM", 42140 "home.marketing.look.title": "Luce como\nt\xFA quieras.", 42141 "home.marketing.look.body": "Filtros de color, suavizado, vi\xF1eta \u2014 o difumina tu cara por completo. Tu c\xE1mara, tu estilo.", 42142 "home.marketing.host.title": "Tu espacio,\ntus reglas.", 42143 "home.marketing.host.body": "Cierra la sala, silencia a alguien o s\xE1calo por completo. El host tiene el control.", 42144 "home.marketing.host.locked": "Sala cerrada", 42145 "home.marketing.host.waiting_to_join": "Esperando para entrar", 42146 "home.marketing.host.wants_to_join": "quiere entrar", 42147 "home.marketing.anything.title": "Para lo que sea, literal.", 42148 "home.marketing.anything.body": "Sesiones de estudio, noches de juegos, standups de trabajo, ver algo juntos \u2014 o solo para pasar el rato.", 42149 "home.marketing.use_case.study_group": "\u{1F4DA} grupo de estudio", 42150 "home.marketing.use_case.game_night": "\u{1F3AE} noche de juegos", 42151 "home.marketing.use_case.standup": "\u{1F4BC} standup", 42152 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 42153 "home.marketing.use_case.catch_up": "\u2615 ponernos al d\xEDa", 42154 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 42155 "home.marketing.use_case.book_club": "\u{1F4D6}
42155 club de lectura", 42156 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 42157 "ended.heading": "llamada terminada", 42158 "ended.left": "saliste de la sala.", 42159 "ended.room_ended": "{title} ha terminado para ti.", 42160 "ended.rejoin": "volver a entrar", 42161 "ended.rejoining": "volviendo a entrar...", 42162 "ended.home": "volver al inicio", 42163 "call.connecting": "conectando", 42164 "call.waiting": "esperando a los dem\xE1s", 42165 "call.invite_code": "c\xF3digo de invitaci\xF3n", 42166 "call.audio_on": "audio activado", 42167 "call.muted": "silenciado", 42168 "call.listening": "Escuchando", 42169 "call.audio_muted": "Audio silenciado", 42170 "call.speaking": "hablando", 42171 "call.you": "t\xFA", 42172 "call.you_label": "T\xFA", 42173 "call.you_suffix": "(t\xFA)", 42174 "call.chat_placeholder": "escribe un mensaje...", 42175 "call.guest": "invitado", 42176 "call.room_fallback": "sala", 42177 "call.focus_view": "Vista enfocada", 42178 "call.grid_view": "Vista de cuadr\xEDcula", 42179 "call.swap_main_video": "Cambiar video principal", 42180 "call.open_chat": "Abrir chat", 42181 "call.close_chat": "Cerrar chat", 42182 "call.leave_room": "Salir de la sala", 42183 "call.confirm_leave": "\xBFSalir?", 42184 "call.mic_on": "Micro encendido", 42185 "call.muted_label": "Silenciado", 42186 "call.camera_off": "C\xE1mara apagada", 42187 "call.connect_failed": "Fall\xF3 la conexi\xF3n \u2014 revisa tu internet y dale de nuevo.", 42188 "call.camera_access_failed": "No pudimos acceder a tu c\xE1mara. Revisa los permisos del navegador y vuelve a intentar.", 42189 "call.recording_failed": "No se pudo empezar a grabar. La llamada seguir\xE1 sin grabaci\xF3n.", 42190 "call.initialize_failed": "Algo sali\xF3 mal al iniciar la llamada. Refresca la p\xE1gina y vuelve a intentar.", 42191 "call.participants": "Participantes", 42192 "call.open_participants": "Ver participantes", 42193 "call.close_participants": "Cerrar participantes", 42194 "call.lock_room": "Cerrar sala", 42195 "call.unlock_room": "Abrir sala", 42196 "call.locked": "cerrada", 42197 "call.unlocked": "abierta", 42198 "call.kick_member": "Sacar de la sala", 42199 "call.mute_member": "Silenciar", 42200 "call.unmute_member": "Activar audio", 42201 "call.muted_by_host": "Silenciado por el host", 42202 "call.waiting_to_join": "Esperando para entrar", 42203 "call.approve": "Aceptar", 42204 "call.deny": "Rechazar", 42205 "call.profile_actions": "Acciones de perfil", 42206 "call.profile_in_room": "En la sala", 42207 "call.profile_role_host": "Host", 42208 "call.profile_role_you": "T\xFA", 42209 "call.profile_action_mute": "Silenciar su audio", 42210 "call.profile_action_mute_meta": "Solo para ti \u2014 no se enterar\xE1n", 42211 "call.profile_action_dm": "DM 1:1", 42212 "call.profile_action_dm_meta": "Inicia un chat privado", 42213 "call.profile_action_view": "Ver perfil completo", 42214 "call.profile_action_view_meta": "Bio, idiomas, sesiones pasadas", 42215 "call.profile_action_report": "Reportar", 42216 "call.profile_action_report_meta": "Marcar para revisi\xF3n", 42217 "call.profile_sheet_close": "Cerrar acciones", 42218 "call.profile_open_actions": "Abrir acciones", 42219 "call.dm_title": "Mensaje directo", 42220 "call.dm_back": "Volver a acciones", 42221 "call.dm_close": "Cerrar mensaje directo", 42222 "call.dm_status_online": "En l\xEDnea", 42223 "call.dm_in_room_with": "En esta sala", 42224 "call.dm_private_label": "Chat privado", 42225 "call.dm_private_meta": "Solo ustedes dos pueden ver estos mensajes", 42226 "call.dm_input_placeholder": "Env\xEDa un mensaje privado\u2026", 42227 "call.dm_send": "Enviar", 42228 "call.dm_just_now": "ahora", 42229 "call.dm_seen_just_now": "Visto reci\xE9n", 42230 "call.dm_typing": "{name} est\xE1 escribiendo\u2026", 42231 "call.dm_minimize": "Minimizar", 42232 "call.dm_active_indicator": "Abrir conversaci\xF3n", 42233 "call.dm_unread_messages": "{count} sin leer", 42234 "call.dm_toast_tap_to_open": "Toca para abrir", 42235 "call.dm_reopen_aria": "Reabrir conversaci\xF3n con {name}", 42236 "home.join_denied": "El host no te dej\xF3 entrar.", 42237 "home.error.room_not_found": "Ese c\xF3digo de sala no existe.", 42238 "home.error.profile_required": "Configura tu perfil para seguir.", 42239 "home.cta.set_up_profile": "Configurar perfil", 42240 "home.profile_trigger_new": "Toca para agregar tus datos", 42241 "home.profile_trigger_new_aria": "Configurar tu perfil", 42242 "home.profile_trigger_edit_aria": "Editar tu perfil", 42243 "profile.eyebrow_new": "di hola", 42244 "profile.eyebrow_edit": "tu perfil", 42245 "profile.title_new": "Hazlo tuyo.", 42246 "profile.title_edit": "Editar perfil", 42247 "profile.subtitle": "Unos detalles r\xE1pidos para que sepan con qui\xE9n hablan.", 42248 "profile.add_photo": "Agregar foto", 42249 "profile.add_photo_soon": "fotos muy pronto", 42250 "profile.photo_empty": "toca para agregar foto", 42251 "profile.photo_ready": "foto lista", 42252 "profile.photo_save_first": "guarda tu perfil antes de subir una foto", 42253 "profile.photo_crop_caption": "encuadra tu foto", 42254 "profile.photo_auto_caption": "arrastra y haz zoom, se guarda en autom\xE1tico", 42255 "profile.photo_upload": "Subir foto", 42256 "profile.photo_replace": "Cambiar foto", 42257 "profile.photo_remove": "Quitar foto", 42258 "profile.photo_cancel": "Cancelar", 42259 "profile.photo_save": "Guardar foto", 42260 "profile.photo_uploading": "Subiendo foto\u2026", 42261 "profile.photo_removing": "Quitando foto\u2026", 42262 "profile.photo_choose_another": "Elegir otra", 42263 "profile.photo_drag_hint": "Arrastra la foto para acomodarla en el c\xEDrculo. Se guarda en autom\xE1tico.", 42264 "profile.photo_zoom": "Zoom", 42265 "profile.photo_horizontal": "Recorte horizontal", 42266 "profile.photo_vertical": "Recorte vertical", 42267 "profile.name_label": "Nombre", 42268 "profile.name_placeholder": "\xBFC\xF3mo te llamamos?", 42269 "profile.gender_label": "Soy", 42270 "profile.gender.woman": "Mujer", 42271 "profile.gender.man": "Hombre", 42272 "profile.gender.unspecified": "Prefiero no decirlo", 42273 "profile.bio_label": "Bio", 42274 "profile.bio_optional": "opcional", 42275 "profile.bio_placeholder": "Idiomas que hablas, lo que te gusta, lo que sea\u2026", 42276 "profile.cta_new": "Vamos", 42277 "profile.cta_edit": "Guardar cambios", 42278 "profile.saving": "Guardando\u2026",
42279 "profile.close": "Cerrar", 42280 "profile.error.save_failed": "No pudimos guardar tu perfil. Intenta de nuevo.", 42281 "profile.error.avatar_invalid_type": "Elige una imagen PNG, JPEG, GIF o WebP.", 42282 "profile.error.avatar_too_large": "Elige una imagen de menos de 5 MB.", 42283 "profile.error.avatar_too_small": "Elige una imagen de al menos 96x96 p\xEDxeles.", 42284 "profile.error.avatar_load_failed": "No pudimos leer esa imagen. Intenta con otra.", 42285 "profile.error.avatar_failed": "No pudimos subir tu foto. Intenta de nuevo.", 42286 "profile.error.avatar_remove_failed": "No pudimos quitar tu foto. Intenta de nuevo.", 42287 "effects.title": "Efectos", 42288 "effects.soft": "Enfoque suave", 42289 "effects.vignette": "Vi\xF1eta", 42290 "effects.face": "Difuminar cara", 42291 "effects.face_preview_only": "Difuminar cara (solo vista previa)", 42292 "effects.face_viewer_side": "Difuminar cara (lado del espectador)", 42293 "effects.face_strength": "Intensidad del difuminado", 42294 "effects.grade.off": "OFF", 42295 "effects.grade.pop": "POP", 42296 "effects.grade.warm": "C\xC1LIDO", 42297 "effects.grade.cool": "FR\xCDO", 42298 "effects.grade.bw": "B&N", 42299 "camera.off": "la c\xE1mara est\xE1 apagada", 42300 "camera.check": "revisa tu c\xE1mara", 42301 "camera.retry": "reintentar c\xE1mara", 42302 "camera.ready": "c\xE1mara lista", 42303 "camera.idle.title": "Enciende tu c\xE1mara", 42304 "camera.idle.hint": "Le pediremos permiso a tu navegador cuando est\xE9s listo.", 42305 "camera.idle.button": "Encender c\xE1mara", 42306 "camera.status.idle": "Esper\xE1ndote", 42307 "camera.status.off": "La c\xE1mara est\xE1 apagada", 42308 "camera.status.loading": "Pidiendo acceso a la c\xE1mara...", 42309 "camera.status.denied": "Dale permiso a la c\xE1mara en el navegador y vuelve a intentar.", 42310 "camera.status.error": "Fall\xF3 la vista previa de la c\xE1mara. Intenta de nuevo.", 42311 "camera.status.unsupported": "Este navegador no permite acceso a la c\xE1mara.", 42312 "camera.status.insecure": "El acceso a la c\xE1mara requiere HTTPS o localhost.", 42313 "camera.status.attach_failed": "No se pudo iniciar la vista previa de la c\xE1mara. Intenta de nuevo.", 42314 "camera.guest_name_placeholder": "Nombre del invitado", 42315 "camera.flip": "Cambiar c\xE1mara", 42316 "camera.save_name": "Guardar", 42317 "camera.edit_name": "Editar nombre", 42318 "mic.on": "Apagar micro",
42319 "mic.off": "Encender micro", 42320 "video.on": "Apagar c\xE1mara", 42321 "video.off": "Encender c\xE1mara", 42322 "chat.title": "chat", 42323 "chat.close": "Cerrar chat", 42324 "chat.loading": "cargando...", 42325 "chat.load_earlier": "cargar anteriores", 42326 "chat.empty": "no hay mensajes todav\xEDa", 42327 "chat.send_error": "No se envi\xF3 el mensaje \u2014 intenta de nuevo.", 42328 "chat.input_placeholder": "escribe un mensaje...", 42329 "room.host": "Host", 42330 "app.room_default_title": "Crea una sala", 42331 "app.chat_connection_rejected": "El chat no pudo conectar \u2014 intenta refrescar la p\xE1gina.", 42332 "app.copy_failed": "No pudimos copiar el link. Intenta seleccionarlo y copiarlo a mano.", 42333 "app.chat_not_connected": "El chat a\xFAn no conecta. Dale un momento y vuelve a intentar.", 42334 "footer.terms": "T\xE9rminos y Condiciones", 42335 "footer.copyright": "\xA9 2026 Yano.AI" 42336}; 42337
42338// app/javascript/yano/locales/et.js 42339var et_default = { 42340 "home.heading.default": "h\xFCppa k\xF5nesse", 42341 "home.heading.loading": "Avan ruumi...", 42342 "home.heading.join": "valmis liituma?", 42343 "home.heading.joined": "oled sees", 42344 "home.heading.pending": "ootan hosti", 42345 "home.body.default": "tee ruum, viska link, t\u0161illi.", 42346 "home.body.loading": "\xFCks hetk, laen ruumi.", 42347 "home.body.join": "kontrolli kaamerat ja mikrit, siis h\xFCppa sisse.", 42348 "home.body.joined": "ruum on laivis. jaga linki v\xF5i hakka pihta.", 42349 "home.body.joined_in_room": "ruumis sees \u2014 h\xFCppa kampa v\xF5i jaga linki.", 42350 "home.body.pending": "ruum on lukus. host laseb su sisse.", 42351 "home.cta.create": "Loo ruum", 42352 "home.cta.join": "Liitu ruumiga", 42353 "home.cta.enter": "Sisene ruumi", 42354 "home.cta.creating": "Loon...", 42355 "home.cta.joining": "Liitun...", 42356 "home.cta.opening": "Avan...", 42357 "home.cta.pending": "Ootan luba...", 42358 "home.copy_link": "kopeeri link", 42359 "home.copied": "kopeeritud!", 42360 "home.leave": "lahku ruumist", 42361 "home.back": "tagasi", 42362 "home.no_participants": "kedagi pole veel siin", 42363 "home.join_by_code": "liitu koodiga", 42364 "home.code_placeholder": "sisesta kood", 42365 "home.name_placeholder": "sinu nimi", 42366 "home.people_one": "inimene", 42367 "home.people_other": "inimest", 42368 "home.marketing.invite.title": "Loo ruum,\njaga linki.", 42369 "home.marketing.invite.body": "\xDCks vajutus ja valmis. Jaga linki s\xF5pradega ja k\xF5ik saavad liituda \u2014 ei mingeid allalaadimisi ega kontosid.", 42370 "home.marketing.invite.preview_url": "yano.ai/RUUM",
42371 "home.marketing.look.title": "N\xE4e v\xE4lja\nnii nagu tahad.", 42372 "home.marketing.look.body": "V\xE4rvid, pehmendus, vinjett \u2014 v\xF5i bluri n\xE4gu t\xE4iesti \xE4ra. Sinu kaamera, sinu v\xE4limus.", 42373 "home.marketing.host.title": "Sinu ruum,\nsinu reeglid.", 42374 "home.marketing.host.body": "Pane ruum lukku, vaigista kedagi v\xF5i viska nad \xFCldse v\xE4lja. Hostil on kontroll.", 42375 "home.marketing.host.locked": "Ruum lukus", 42376 "home.marketing.host.waiting_to_join": "Ootab liitumist", 42377 "home.marketing.host.wants_to_join": "tahab liituda", 42378 "home.marketing.anything.title": "P\xE4riselt, milleks iganes.", 42379 "home.marketing.anything.body": "\xD5ppimiseks, m\xE4ngu\xF5htuteks, t\xF6\xF6 standupideks, koos vaatamiseks \u2014 v\xF5i lihtsalt t\u0161illimiseks.", 42380 "home.marketing.use_case.study_group": "\u{1F4DA} \xF5ppegrupp", 42381 "home.marketing.use_case.game_night": "\u{1F3AE} m\xE4ngu\xF5htu", 42382 "home.marketing.use_case.standup": "\u{1F4BC} standup", 42383 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 42384 "home.marketing.use_case.catch_up": "\u2615 jutuajamine", 42385 "home.marketing.use_case.jam_session": "\u{1F3B8} j\xE4mm", 42386 "home.marketing.use_case.book_club": "\u{1F4D6}
42386 raamatuklubi", 42387 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 42388 "ended.heading": "k\xF5ne l\xE4bi", 42389 "ended.left": "sa lahkusid ruumist.", 42390 "ended.room_ended": "{title} on sinu jaoks l\xE4bi.", 42391 "ended.rejoin": "liitu uuesti", 42392 "ended.rejoining": "liitun uuesti...", 42393 "ended.home": "tagasi avalehele", 42394 "call.connecting": "\xFChendan", 42395 "call.waiting": "ootan teisi", 42396 "call.invite_code": "kutsekood", 42397 "call.audio_on": "heli sees", 42398 "call.muted": "vaigistatud", 42399 "call.listening": "Kuulab", 42400 "call.audio_muted": "Heli vaigistatud", 42401 "call.speaking": "r\xE4\xE4gib", 42402 "call.you": "sina", 42403 "call.you_label": "Sina", 42404 "call.you_suffix": "(sina)", 42405 "call.chat_placeholder": "saada s\xF5num...", 42406 "call.guest": "k\xFClaline", 42407 "call.room_fallback": "ruum", 42408 "call.focus_view": "Fookusvaade", 42409 "call.grid_view": "Ruudustik", 42410 "call.swap_main_video": "Vaheta peamist videot", 42411 "call.open_chat": "Ava chat", 42412 "call.close_chat": "Sulge chat", 42413 "call.leave_room": "Lahku ruumist", 42414 "call.confirm_leave": "Lahkud?", 42415 "call.mic_on": "Mikrofon sees", 42416 "call.muted_label": "Vaigistatud", 42417 "call.camera_off": "Kaamera v\xE4ljas", 42418 "call.connect_failed": "\xDChendus eba\xF5nnestus \u2014 kontrolli netti ja proovi uuesti.", 42419 "call.camera_access_failed": "Ei saanud kaamerale ligi. Vaata brauseri \xF5igused \xFCle ja proovi uuesti.", 42420 "call.recording_failed": "Salvestamine ei alanud. K\xF5ne j\xE4tkub ilma selleta.", 42421 "call.initialize_failed": "K\xF5ne alustamisel l\xE4ks midagi nihu. V\xE4rskenda lehte ja proovi uuesti.", 42422 "call.participants": "Osalejad", 42423 "call.open_participants": "Ava osalejad", 42424 "call.close_participants": "Sulge osalejad", 42425 "call.lock_room": "Pane ruum lukku", 42426 "call.unlock_room": "Tee ruum lahti", 42427 "call.locked": "lukus", 42428 "call.unlocked": "avatud", 42429 "call.kick_member": "Eemalda ruumist", 42430 "call.mute_member": "Vaigista", 42431 "call.unmute_member": "V\xF5ta vaigistus maha", 42432 "call.muted_by_host": "Hosti poolt vaigistatud", 42433 "call.waiting_to_join": "Ootab liitumist", 42434 "call.approve": "Luba sisse", 42435 "call.deny": "Keeldu", 42436 "call.profile_actions": "Profiili tegevused", 42437 "call.profile_in_room": "Ruumis", 42438 "call.profile_role_host": "Host", 42439 "call.profile_role_you": "Sina", 42440 "call.profile_action_mute": "Vaigista nende heli", 42441 "call.profile_action_mute_meta": "Ainult sinu jaoks \u2014 nad ei saa teada", 42442 "call.profile_action_dm": "1:1 DM", 42443 "call.profile_action_dm_meta": "Alusta privaatset vestlust", 42444 "call.profile_action_view": "Vaata kogu profiili", 42445 "call.profile_action_view_meta": "Bio, keeled, varasemad sessioonid", 42446 "call.profile_action_report": "Raporteeri", 42447 "call.profile_action_report_meta": "M\xE4rgi modereerimiseks", 42448 "call.profile_sheet_close": "Sulge profiili tegevused", 42449 "call.profile_open_actions": "Ava profiili tegevused", 42450 "call.dm_title": "Privaats\xF5num", 42451 "call.dm_back": "Tagasi tegevuste juurde", 42452 "call.dm_close": "Sulge privaats\xF5num", 42453 "call.dm_status_online": "Online", 42454 "call.dm_in_room_with": "Selles ruumis", 42455 "call.dm_private_label": "Privaatne chat", 42456 "call.dm_private_meta": "Ainult teie kaks n\xE4ete neid s\xF5numeid", 42457 "call.dm_input_placeholder": "Saada privaats\xF5num\u2026", 42458 "call.dm_send": "Saada", 42459 "call.dm_just_now": "praegu", 42460 "call.dm_seen_just_now": "N\xE4htud just praegu", 42461 "call.dm_typing": "{name} kirjutab\u2026", 42462 "call.dm_minimize": "Minimeeri", 42463 "call.dm_active_indicator": "Ava vestlus", 42464 "call.dm_unread_messages": "{count} lugemata", 42465 "call.dm_toast_tap_to_open": "Vajuta, et avada", 42466 "call.dm_reopen_aria": "Ava uuesti vestlus kasutajaga {name}", 42467 "home.join_denied": "Host ei lasknud sind sisse.", 42468 "home.error.room_not_found": "Sellist ruumikoodi pole olemas.", 42469 "home.error.profile_required": "J\xE4tkamiseks pane oma profiil paika.", 42470 "home.cta.set_up_profile": "Seadista oma profiil", 42471 "home.profile_trigger_new": "Vajuta, et lisada oma info", 42472 "home.profile_trigger_new_aria": "Seadista oma profiil", 42473 "home.profile_trigger_edit_aria": "Muuda oma profiili", 42474 "profile.eyebrow_new": "\xFCtle tsau", 42475 "profile.eyebrow_edit": "sinu profiil", 42476 "profile.title_new": "Tee see enda omaks.", 42477 "profile.title_edit": "Muuda profiili", 42478 "profile.subtitle": "Paar kiiret detaili, et teised teaks, kellega nad kohtuvad.", 42479 "profile.add_photo": "Lisa pilt", 42480 "profile.add_photo_soon": "pildid tulevad varsti", 42481 "profile.photo_empty": "vajuta, et lisada pilt", 42482 "profile.photo_ready": "pilt valmis", 42483 "profile.photo_save_first": "salvesta profiil enne pildi \xFCleslaadimist", 42484 "profile.photo_crop_caption": "kadreeri oma pilt", 42485 "profile.photo_auto_caption": "lohista ja suumi, salvestame automaatselt", 42486 "profile.photo_upload": "Lae pilt \xFCles", 42487 "profile.photo_replace": "Vaheta pilti", 42488 "profile.photo_remove": "Eemalda pilt", 42489 "profile.photo_cancel": "T\xFChista", 42490 "profile.photo_save": "Salvesta pilt", 42491 "profile.photo_uploading": "Laen pilti \xFCles\u2026", 42492 "profile.photo_removing": "Eemaldan pilti\u2026", 42493 "profile.photo_choose_another": "Vali teine", 42494 "profile.photo_drag_hint": "Lohista pilt ringi sisse. Muudatused salvestuvad automaatselt.", 42495 "profile.photo_zoom": "Suumi", 42496 "profile.photo_horizontal": "Horisontaalne l\xF5ige", 42497 "profile.photo_vertical": "Vertikaalne l\xF5ige", 42498 "profile.name_label": "Nimi", 42499 "profile.name_placeholder": "Kuidas me sind kutsume?", 42500 "profile.gender_label": "Ma olen", 42501 "profile.gender.woman": "Naine", 42502 "profile.gender.man": "Mees", 42503 "profile.gender.unspecified": "Eelistan mitte \xF6elda", 42504 "profile.bio_label": "Bio", 42505 "profile.bio_optional": "valikuline", 42506 "profile.bio_placeholder": "Keeled, mida r\xE4\xE4gid, mis sulle meeldib, mida iganes\u2026", 42507 "profile.cta_new": "L\xE4hme", 42508 "profile.cta_edit": "Salvesta muudatused", 42509 "profile.saving": "Salvestan\u2026",
42510 "profile.close": "Sulge", 42511 "profile.error.save_failed": "Ei saanud profiili salvestada. Proovi uuesti.", 42512 "profile.error.avatar_invalid_type": "Vali PNG, JPEG, GIF v\xF5i WebP pilt.", 42513 "profile.error.avatar_too_large": "Vali pilt, mis on v\xE4iksem kui 5 MB.", 42514 "profile.error.avatar_too_small": "Vali pilt, mis on v\xE4hemalt 96x96 pikslit.", 42515 "profile.error.avatar_load_failed": "Me ei suutnud seda pilti lugeda. Proovi teist faili.", 42516 "profile.error.avatar_failed": "Ei saanud pilti \xFCles laadida. Proovi uuesti.", 42517 "profile.error.avatar_remove_failed": "Ei saanud pilti eemaldada. Proovi uuesti.", 42518 "effects.title": "Efektid", 42519 "effects.soft": "Pehme fookus", 42520 "effects.vignette": "Vinjett", 42521 "effects.face": "N\xE4o blur", 42522 "effects.face_preview_only": "N\xE4o blur (ainult eelvaade)", 42523 "effects.face_viewer_side": "N\xE4o blur (vaataja poolt)", 42524 "effects.face_strength": "N\xE4o bluri tugevus", 42525 "effects.grade.off": "V\xC4LJAS", 42526 "effects.grade.pop": "POP", 42527 "effects.grade.warm": "SOE", 42528 "effects.grade.cool": "K\xDCLM", 42529 "effects.grade.bw": "M&V", 42530 "camera.off": "kaamera on v\xE4ljas", 42531 "camera.check": "kontrolli kaamerat", 42532 "camera.retry": "proovi kaamerat uuesti", 42533 "camera.ready": "kaamera valmis", 42534 "camera.idle.title": "Pane kaamera t\xF6\xF6le", 42535 "camera.idle.hint": "K\xFCsime brauserilt luba, kui oled valmis.", 42536 "camera.idle.button": "Pane kaamera t\xF6\xF6le", 42537 "camera.status.idle": "Ootan sind", 42538 "camera.status.off": "Kaamera on v\xE4ljas", 42539 "camera.status.loading": "K\xFCsin kaamerale ligip\xE4\xE4su...", 42540 "camera.status.denied": "Luba brauseris kaamerale ligip\xE4\xE4s ja proovi uuesti.", 42541 "camera.status.error": "Kaamera eelvaade eba\xF5nnestus. Proovi uuesti.", 42542 "camera.status.unsupported": "See brauser ei toeta kaamerat.", 42543 "camera.status.insecure": "Kaamera vajab HTTPS-i v\xF5i localhosti.", 42544 "camera.status.attach_failed": "Kaamera eelvaadet ei saanud k\xE4ivitada. Proovi uuesti.", 42545 "camera.guest_name_placeholder": "K\xFClalise nimi", 42546 "camera.flip": "Vaheta kaamerat", 42547 "camera.save_name": "Salvesta", 42548 "camera.edit_name": "Muuda nime", 42549 "mic.on": "L\xFClita mikker v\xE4lja", 42550 "mic.off": "L\xFClita mikker sisse", 42551 "video.on": "L\xFClita kaamera v\xE4lja", 42552 "video.off": "L\xFClita kaamera sisse", 42553 "chat.title": "chat", 42554 "chat.close": "Sulge chat", 42555 "chat.loading": "laen...", 42556 "chat.load_earlier": "lae varasemad", 42557 "chat.empty": "s\xF5numeid veel pole", 42558 "chat.send_error": "S\xF5num ei l\xE4inud teele \u2014 proovi uuesti.", 42559 "chat.input_placeholder": "kirjuta s\xF5num...", 42560 "room.host": "Host", 42561 "app.room_default_title": "Loo ruum", 42562 "app.chat_connection_rejected": "Chat ei \xFChendunud \u2014 proovi lehte v\xE4rskendada.", 42563 "app.copy_failed": "Lingi kopeerimine eba\xF5nnestus. Proovi see ise m\xE4rkida ja kopeerida.", 42564 "app.chat_not_connected": "Chat pole veel \xFChendatud. Oota hetk ja proovi uuesti.", 42565 "footer.terms": "Kasutustingimused", 42566 "footer.copyright": "\xA9 2026 Yano.AI" 42567}; 42568
42569// app/javascript/yano/locales/fr.js 42570var fr_default = { 42571 "home.heading.default": "rejoins l'appel", 42572 "home.heading.loading": "cr\xE9ation de la room...", 42573 "home.heading.join": "pr\xEAt \xE0 rejoindre ?", 42574 "home.heading.joined": "t'y es", 42575 "home.heading.pending": "en attente de l'h\xF4te", 42576 "home.body.default": "cr\xE9e une room, l\xE2che le lien, chill.", 42577 "home.body.loading": "deux sec, on pr\xE9pare la room.", 42578 "home.body.join": "check ta cam et ton micro, puis lance-toi.", 42579 "home.body.joined": "la room est live. partage le lien ou vas-y direct.", 42580 "home.body.joined_in_room": "dans la room \u2014 lance-toi ou partage le lien.", 42581 "home.body.pending": "la room est verrouill\xE9e. l'h\xF4te va te faire entrer.", 42582 "home.cta.create": "Cr\xE9er une room", 42583 "home.cta.join": "Rejoindre la room", 42584 "home.cta.enter": "Entrer", 42585 "home.cta.creating": "Cr\xE9ation...", 42586 "home.cta.joining": "Connexion...", 42587 "home.cta.opening": "Ouverture...", 42588 "home.cta.pending": "En attente de validation...", 42589 "home.copy_link": "copier le lien", 42590 "home.copied": "copi\xE9 !", 42591 "home.leave": "quitter la room", 42592 "home.back": "retour", 42593 "home.no_participants": "y'a personne pour l'instant", 42594 "home.join_by_code": "rejoindre avec un code", 42595 "home.code_placeholder": "entre le code", 42596 "home.name_placeholder": "ton pr\xE9nom", 42597 "home.people_one": "personne", 42598 "home.people_other": "personnes", 42599 "home.marketing.invite.title": "Cr\xE9e une room,\npartage le lien.", 42600 "home.marketing.invite.body": "Un tap pour lancer. Partage le lien \xE0 tes potes et n'importe qui peut rejoindre \u2014 pas de t\xE9l\xE9chargement, pas d'inscription.", 42601 "home.marketing.invite.preview_url": "yano.ai/ROOM", 42602 "home.marketing.look.title": "G\xE8re ton\npropre style.", 42603 "home.marketing.look.body": "Filtres couleurs, lissage, vignette \u2014 ou floute carr\xE9ment ton visage. Ta cam, ton style.", 42604 "home.marketing.host.title": "Ton espace,\ntes r\xE8gles.", 42605 "home.marketing.host.body": "Verrouille la room, mute quelqu'un ou vire-le carr\xE9ment. L'h\xF4te garde le contr\xF4le.", 42606 "home.marketing.host.locked": "Room verrouill\xE9e", 42607 "home.marketing.host.waiting_to_join": "En attente", 42608 "home.marketing.host.wants_to_join": "veut rejoindre", 42609 "home.marketing.anything.title": "Pour tout, en vrai.", 42610 "home.marketing.anything.body": "Sessions r\xE9visions, soir\xE9es gaming, points taf, mater un truc ensemble \u2014 ou juste chiller.", 42611 "home.marketing.use_case.study_group": "\u{1F4DA} groupe de r\xE9visions", 42612 "home.marketing.use_case.game_night": "\u{1F3AE} soir\xE9e gaming", 42613 "home.marketing.use_case.standup": "\u{1F4BC} point taf", 42614 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 42615 "home.marketing.use_case.catch_up": "\u2615 papotage", 42616 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 42617 "home.marketing.use_case.book_club": "\u{1F4D6}
42617 club de lecture", 42618 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 42619 "ended.heading": "appel termin\xE9", 42620 "ended.left": "t'as quitt\xE9 la room.", 42621 "ended.room_ended": "{title} est termin\xE9 pour toi.", 42622 "ended.rejoin": "revenir", 42623 "ended.rejoining": "reconnexion...", 42624 "ended.home": "retour \xE0 l'accueil", 42625 "call.connecting": "connexion", 42626 "call.waiting": "en attente des autres", 42627 "call.invite_code": "code d'invit", 42628 "call.audio_on": "son activ\xE9", 42629 "call.muted": "mut\xE9", 42630 "call.listening": "\xC0 l'\xE9coute", 42631 "call.audio_muted": "Son coup\xE9", 42632 "call.speaking": "parle", 42633 "call.you": "toi", 42634 "call.you_label": "Toi", 42635 "call.you_suffix": "(toi)", 42636 "call.chat_placeholder": "envoie un message...", 42637 "call.guest": "invit\xE9", 42638 "call.room_fallback": "room", 42639 "call.focus_view": "Vue focus", 42640 "call.grid_view": "Vue grille", 42641 "call.swap_main_video": "Changer la vid\xE9o principale", 42642 "call.open_chat": "Ouvrir le chat", 42643 "call.close_chat": "Fermer le chat", 42644 "call.leave_room": "Quitter la room", 42645 "call.confirm_leave": "Quitter ?", 42646 "call.mic_on": "Micro activ\xE9", 42647 "call.muted_label": "Mut\xE9", 42648 "call.camera_off": "Cam\xE9ra coup\xE9e", 42649 "call.connect_failed": "\xC9chec de connexion \u2014 check ton internet et r\xE9essaie.", 42650 "call.camera_access_failed": "Impossible d'acc\xE9der \xE0 ta cam. Check les permissions du navigateur et r\xE9essaie.", 42651 "call.recording_failed": "L'enregistrement n'a pas pu se lancer. L'appel continue sans.", 42652 "call.initialize_failed": "Un truc a merd\xE9 au lancement de l'appel. Actualise et r\xE9essaie.", 42653 "call.participants": "Participants", 42654 "call.open_participants": "Voir les participants", 42655 "call.close_participants": "Fermer les participants", 42656 "call.lock_room": "Verrouiller la room", 42657 "call.unlock_room": "D\xE9verrouiller la room", 42658 "call.locked": "verrouill\xE9e", 42659 "call.unlocked": "ouverte", 42660 "call.kick_member": "Virer de la room", 42661 "call.mute_member": "Mute", 42662 "call.unmute_member": "D\xE9mute", 42663 "call.muted_by_host": "Mut\xE9 par l'h\xF4te", 42664 "call.waiting_to_join": "Veut rejoindre", 42665 "call.approve": "Accepter", 42666 "call.deny": "Refuser", 42667 "call.profile_actions": "Actions du profil", 42668 "call.profile_in_room": "Dans la room", 42669 "call.profile_role_host": "H\xF4te", 42670 "call.profile_role_you": "Toi", 42671 "call.profile_action_mute": "Couper son micro", 42672 "call.profile_action_mute_meta": "Juste pour toi \u2014 la personne ne le saura pas", 42673 "call.profile_action_dm": "DM", 42674 "call.profile_action_dm_meta": "Lancer un chat priv\xE9", 42675 "call.profile_action_view": "Voir le profil complet", 42676 "call.profile_action_view_meta": "Bio, langues, sessions pass\xE9es", 42677 "call.profile_action_report": "Signaler", 42678 "call.profile_action_report_meta": "Signaler \xE0 la mod\xE9ration", 42679 "call.profile_sheet_close": "Fermer les actions", 42680 "call.profile_open_actions": "Ouvrir les actions", 42681 "call.dm_title": "Message priv\xE9", 42682 "call.dm_back": "Retour aux actions", 42683 "call.dm_close": "Fermer le DM", 42684 "call.dm_status_online": "En ligne", 42685 "call.dm_in_room_with": "Dans cette room", 42686 "call.dm_private_label": "Chat priv\xE9", 42687 "call.dm_private_meta": "Y'a que vous deux qui voyez ces messages", 42688 "call.dm_input_placeholder": "Envoie un DM\u2026", 42689 "call.dm_send": "Envoyer", 42690 "call.dm_just_now": "\xE0 l'instant", 42691 "call.dm_seen_just_now": "Vu \xE0 l'instant", 42692 "call.dm_typing": "{name} \xE9crit\u2026", 42693 "call.dm_minimize": "R\xE9duire", 42694 "call.dm_active_indicator": "Ouvrir la conversation", 42695 "call.dm_unread_messages": "{count} non lu(s)", 42696 "call.dm_toast_tap_to_open": "Appuie pour ouvrir", 42697 "call.dm_reopen_aria": "Rouvrir la conversation avec {name}", 42698 "home.join_denied": "L'h\xF4te ne t'a pas laiss\xE9 entrer.", 42699 "home.error.room_not_found": "Ce code de room n'existe pas.", 42700 "home.error.profile_required": "Configure ton profil pour continuer.", 42701 "home.cta.set_up_profile": "Configurer ton profil", 42702 "home.profile_trigger_new": "Appuie pour ajouter tes infos", 42703 "home.profile_trigger_new_aria": "Configurer ton profil", 42704 "home.profile_trigger_edit_aria": "Modifier ton profil", 42705 "profile.eyebrow_new": "fais coucou", 42706 "profile.eyebrow_edit": "ton profil", 42707 "profile.title_new": "\xC0 ton image.", 42708 "profile.title_edit": "Modifier le profil", 42709 "profile.subtitle": "Quelques infos rapides pour que les autres sachent \xE0 qui ils parlent.", 42710 "profile.add_photo": "Ajouter une photo", 42711 "profile.add_photo_soon": "les photos arrivent bient\xF4t", 42712 "profile.photo_empty": "appuie pour ajouter une photo", 42713 "profile.photo_ready": "photo pr\xEAte", 42714 "profile.photo_save_first": "sauvegarde ton profil avant d'ajouter une photo", 42715 "profile.photo_crop_caption": "cadre ta photo", 42716 "profile.photo_auto_caption": "glisse et zoome, on sauvegarde automatiquement", 42717 "profile.photo_upload": "Importer une photo", 42718 "profile.photo_replace": "Changer de photo", 42719 "profile.photo_remove": "Supprimer la photo", 42720 "profile.photo_cancel": "Annuler", 42721 "profile.photo_save": "Enregistrer la photo", 42722 "profile.photo_uploading": "Importation de la photo\u2026", 42723 "profile.photo_removing": "Suppression de la photo\u2026", 42724 "profile.photo_choose_another": "En choisir une autre", 42725 "profile.photo_drag_hint": "Glisse la photo pour la centrer dans le cercle. \xC7a s'enregistre tout seul.", 42726 "profile.photo_zoom": "Zoom", 42727 "profile.photo_horizontal": "Recadrage horizontal", 42728 "profile.photo_vertical": "Recadrage vertical", 42729 "profile.name_label": "Pr\xE9nom", 42730 "profile.name_placeholder": "On t'appelle comment ?", 42731 "profile.gender_label": "Je suis", 42732 "profile.gender.woman": "Une femme", 42733 "profile.gender.man": "Un homme", 42734 "profile.gender.unspecified": "Je pr\xE9f\xE8re ne pas le dire", 42735 "profile.bio_label": "Bio", 42736 "profile.bio_optional": "facultatif", 42737 "profile.bio_placeholder": "Les langues que tu parles, ce que tu kiffes, ce que tu veux\u2026", 42738 "profile.cta_new": "C'est parti", 42739 "profile.cta_edit": "Enregistrer", 42740 "profile.saving": "Enregistrement\u2026",
42741 "profile.close": "Fermer", 42742 "profile.error.save_failed": "Impossible d'enregistrer ton profil. R\xE9essaie.", 42743 "profile.error.avatar_invalid_type": "Choisis une image PNG, JPEG, GIF ou WebP.", 42744 "profile.error.avatar_too_large": "Choisis une image de moins de 5 Mo.", 42745 "profile.error.avatar_too_small": "Choisis une image d'au moins 96x96 pixels.", 42746 "profile.error.avatar_load_failed": "On n'a pas pu lire cette image. Essaie un autre fichier.", 42747 "profile.error.avatar_failed": "Impossible d'importer ta photo. R\xE9essaie.", 42748 "profile.error.avatar_remove_failed": "Impossible de supprimer ta photo. R\xE9essaie.", 42749 "effects.title": "Effets", 42750 "effects.soft": "Lissage", 42751 "effects.vignette": "Vignette", 42752 "effects.face": "Flou visage", 42753 "effects.face_preview_only": "Flou visage (aper\xE7u uniquement)", 42754 "effects.face_viewer_side": "Flou visage (c\xF4t\xE9 spectateur)", 42755 "effects.face_strength": "Intensit\xE9 du flou", 42756 "effects.grade.off": "OFF", 42757 "effects.grade.pop": "POP", 42758 "effects.grade.warm": "CHAUD", 42759 "effects.grade.cool": "FROID", 42760 "effects.grade.bw": "N&B", 42761 "camera.off": "la cam est coup\xE9e", 42762 "camera.check": "check ta cam", 42763 "camera.retry": "r\xE9essayer la cam", 42764 "camera.ready": "cam pr\xEAte", 42765 "camera.idle.title": "Active ta cam\xE9ra", 42766 "camera.idle.hint": "On demandera l'acc\xE8s \xE0 ton navigateur quand tu seras pr\xEAt.", 42767 "camera.idle.button": "Activer la cam\xE9ra", 42768 "camera.status.idle": "On t'attend", 42769 "camera.status.off": "La cam\xE9ra est coup\xE9e", 42770 "camera.status.loading": "Demande d'acc\xE8s \xE0 la cam\xE9ra...", 42771 "camera.status.denied": "Autorise l'acc\xE8s \xE0 la cam dans ton navigateur, puis r\xE9essaie.", 42772 "camera.status.error": "L'aper\xE7u de la cam a plant\xE9. R\xE9essaie.", 42773 "camera.status.unsupported": "Ce navigateur ne g\xE8re pas l'acc\xE8s \xE0 la cam\xE9ra.", 42774 "camera.status.insecure": "L'acc\xE8s \xE0 la cam n\xE9cessite HTTPS ou localhost.", 42775 "camera.status.attach_failed": "Impossible de lancer l'aper\xE7u de la cam. R\xE9essaie.", 42776 "camera.guest_name_placeholder": "Nom de l'invit\xE9", 42777 "camera.flip": "Tourner la cam\xE9ra", 42778 "camera.save_name": "Enregistrer", 42779 "camera.edit_name": "Modifier le nom", 42780 "mic.on": "Couper le micro", 42781 "mic.off": "Activer le micro", 42782 "video.on": "Couper la cam\xE9ra", 42783 "video.off": "Activer la cam\xE9ra", 42784 "chat.title": "chat", 42785 "chat.close": "Fermer le chat", 42786 "chat.loading": "chargement...", 42787 "chat.load_earlier": "charger les messages pr\xE9c\xE9dents", 42788 "chat.empty": "aucun message pour l'instant", 42789 "chat.send_error": "Le message n'est pas parti \u2014 r\xE9essaie.", 42790 "chat.input_placeholder": "\xE9cris un message...", 42791 "room.host": "H\xF4te", 42792 "app.room_default_title": "Cr\xE9er une room", 42793 "app.chat_connection_rejected": "Le chat n'a pas pu se co \u2014 essaie d'actualiser.", 42794 "app.copy_failed": "Impossible de copier le lien. Essaie de le s\xE9lectionner et de le copier \xE0 la main.", 42795 "app.chat_not_connected": "Le chat n'est pas encore co. Attends un instant et r\xE9essaie.", 42796 "footer.terms": "CGU", 42797 "footer.copyright": "\xA9 2026 Yano.AI" 42798}; 42799
42800// app/javascript/yano/locales/it.js 42801var it_default = { 42802 "home.heading.default": "entra in call", 42803 "home.heading.loading": "Apro la stanza...", 42804 "home.heading.join": "pronto a entrare?", 42805 "home.heading.joined": "sei dentro", 42806 "home.heading.pending": "aspettando l'host", 42807 "home.body.default": "crea una stanza, gira il link, chill.", 42808 "home.body.loading": "un sec, preparo la stanza.", 42809 "home.body.join": "check a cam e mic, poi buttati.", 42810 "home.body.joined": "la stanza \xE8 live. gira il link o inizia.", 42811 "home.body.joined_in_room": "nella stanza \u2014 buttati o gira il link.", 42812 "home.body.pending": "la stanza \xE8 chiusa. l'host ti far\xE0 entrare.", 42813 "home.cta.create": "Crea stanza", 42814 "home.cta.join": "Entra", 42815 "home.cta.enter": "Entra nella stanza", 42816 "home.cta.creating": "Sto creando...", 42817 "home.cta.joining": "Entrando...", 42818 "home.cta.opening": "Aprendo...", 42819 "home.cta.pending": "In attesa dell'ok...", 42820 "home.copy_link": "copia link", 42821 "home.copied": "copiato!", 42822 "home.leave": "esci dalla stanza", 42823 "home.back": "indietro", 42824 "home.no_participants": "ancora nessuno qui", 42825 "home.join_by_code": "entra con codice", 42826 "home.code_placeholder": "inserisci codice", 42827 "home.name_placeholder": "il tuo nome", 42828 "home.people_one": "persona", 42829 "home.people_other": "persone", 42830 "home.marketing.invite.title": "Crea una stanza,\ncondividi il link.", 42831 "home.marketing.invite.body": "Basta un tap. Gira il link agli amici e chiunque pu\xF2 entrare \u2014 zero download, zero registrazioni.", 42832 "home.marketing.invite.preview_url": "yano.ai/ROOM", 42833 "home.marketing.look.title": "Appari come\nvuoi tu.", 42834 "home.marketing.look.body": "Color grading, filtri soft, vignettatura \u2014 o sfoca del tutto la faccia. La tua cam, il tuo stile.", 42835 "home.marketing.host.title": "Il tuo spazio,\nle tue regole.", 42836 "home.marketing.host.body": "Chiudi la stanza, muta qualcuno o buttalo fuori. L'host ha il controllo totale.", 42837 "home.marketing.host.locked": "Stanza chiusa", 42838 "home.marketing.host.waiting_to_join": "In attesa di entrare", 42839 "home.marketing.host.wants_to_join": "vuole entrare", 42840 "home.marketing.anything.title": "Per qualsiasi cosa, davvero.", 42841 "home.marketing.anything.body": "Gruppi studio, serate gaming, standup di lavoro, watch party \u2014 o giusto per chillare.", 42842 "home.marketing.use_case.study_group": "\u{1F4DA} gruppo studio", 42843 "home.marketing.use_case.game_night": "\u{1F3AE} serata gaming", 42844 "home.marketing.use_case.standup": "\u{1F4BC} standup", 42845 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 42846 "home.marketing.use_case.catch_up": "\u2615 chiacchierata", 42847 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 42848 "home.marketing.use_case.book_club": "\u{1F4D6}
42848 club del libro", 42849 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 42850 "ended.heading": "call finita", 42851 "ended.left": "sei uscito dalla stanza.", 42852 "ended.room_ended": "{title} \xE8 finita per te.", 42853 "ended.rejoin": "rientra", 42854 "ended.rejoining": "rientrando...", 42855 "ended.home": "torna alla home", 42856 "call.connecting": "connessione...", 42857 "call.waiting": "in attesa degli altri", 42858 "call.invite_code": "codice invito", 42859 "call.audio_on": "audio on", 42860 "call.muted": "mutato", 42861 "call.listening": "In ascolto", 42862 "call.audio_muted": "Audio mutato", 42863 "call.speaking": "sta parlando", 42864 "call.you": "tu", 42865 "call.you_label": "Tu", 42866 "call.you_suffix": "(tu)", 42867 "call.chat_placeholder": "scrivi un messaggio...", 42868 "call.guest": "ospite", 42869 "call.room_fallback": "stanza", 42870 "call.focus_view": "Vista focus", 42871 "call.grid_view": "Vista griglia", 42872 "call.swap_main_video": "Cambia video principale", 42873 "call.open_chat": "Apri chat", 42874 "call.close_chat": "Chiudi chat", 42875 "call.leave_room": "Esci dalla stanza", 42876 "call.confirm_leave": "Uscire?", 42877 "call.mic_on": "Mic on", 42878 "call.muted_label": "Mutato", 42879 "call.camera_off": "Cam off", 42880 "call.connect_failed": "Connessione fallita \u2014 checka internet e riprova.", 42881 "call.camera_access_failed": "Impossibile accedere alla cam. Controlla i permessi del browser e riprova.", 42882 "call.recording_failed": "Impossibile avviare la registrazione. La call andr\xE0 avanti senza.", 42883 "call.initialize_failed": "Qualcosa \xE8 andato storto nell'avviare la call. Ricarica la pagina e riprova.", 42884 "call.participants": "Partecipanti", 42885 "call.open_participants": "Apri partecipanti", 42886 "call.close_participants": "Chiudi partecipanti", 42887 "call.lock_room": "Chiudi stanza", 42888 "call.unlock_room": "Apri stanza", 42889 "call.locked": "chiusa", 42890 "call.unlocked": "aperta", 42891 "call.kick_member": "Rimuovi dalla stanza", 42892 "call.mute_member": "Muta", 42893 "call.unmute_member": "Smuta", 42894 "call.muted_by_host": "Mutato dall'host", 42895 "call.waiting_to_join": "In attesa di entrare", 42896 "call.approve": "Approva", 42897 "call.deny": "Rifiuta", 42898 "call.profile_actions": "Azioni profilo", 42899 "call.profile_in_room": "Nella stanza", 42900 "call.profile_role_host": "Host", 42901 "call.profile_role_you": "Tu", 42902 "call.profile_action_mute": "Muta il suo audio", 42903 "call.profile_action_mute_meta": "Solo per te \u2014 non lo sapr\xE0", 42904 "call.profile_action_dm": "DM 1:1", 42905 "call.profile_action_dm_meta": "Inizia una chat privata", 42906 "call.profile_action_view": "Vedi profilo completo", 42907 "call.profile_action_view_meta": "Bio, lingue, sessioni passate", 42908 "call.profile_action_report": "Segnala", 42909 "call.profile_action_report_meta": "Segnala ai moderatori", 42910 "call.profile_sheet_close": "Chiudi azioni profilo", 42911 "call.profile_open_actions": "Apri azioni profilo", 42912 "call.dm_title": "Messaggio diretto", 42913 "call.dm_back": "Torna alle azioni", 42914 "call.dm_close": "Chiudi messaggio diretto", 42915 "call.dm_status_online": "Online", 42916 "call.dm_in_room_with": "In questa stanza", 42917 "call.dm_private_label": "Chat privata", 42918 "call.dm_private_meta": "Solo voi due potete vedere questi messaggi", 42919 "call.dm_input_placeholder": "Manda un messaggio privato\u2026", 42920 "call.dm_send": "Invia", 42921 "call.dm_just_now": "ora", 42922 "call.dm_seen_just_now": "Visto ora", 42923 "call.dm_typing": "{name} sta scrivendo\u2026", 42924 "call.dm_minimize": "Riduci", 42925 "call.dm_active_indicator": "Apri conversazione", 42926 "call.dm_unread_messages": "{count} non letti", 42927 "call.dm_toast_tap_to_open": "Tocca per aprire", 42928 "call.dm_reopen_aria": "Riapri conversazione con {name}", 42929 "home.join_denied": "L'host non ti ha fatto entrare.", 42930 "home.error.room_not_found": "Questo codice stanza non esiste.", 42931 "home.error.profile_required": "Imposta il tuo profilo per continuare.", 42932 "home.cta.set_up_profile": "Imposta il tuo profilo", 42933 "home.profile_trigger_new": "Tocca per aggiungere i tuoi dettagli", 42934 "home.profile_trigger_new_aria": "Imposta il tuo profilo", 42935 "home.profile_trigger_edit_aria": "Modifica il tuo profilo", 42936 "profile.eyebrow_new": "saluta", 42937 "profile.eyebrow_edit": "il tuo profilo", 42938 "profile.title_new": "Fallo tuo.", 42939 "profile.title_edit": "Modifica profilo", 42940 "profile.subtitle": "Qualche info al volo per far sapere agli altri con chi stanno parlando.", 42941 "profile.add_photo": "Aggiungi foto", 42942 "profile.add_photo_soon": "foto in arrivo", 42943 "profile.photo_empty": "tocca per aggiungere una foto", 42944 "profile.photo_ready": "foto pronta", 42945 "profile.photo_save_first": "salva il profilo prima di caricare una foto", 42946 "profile.photo_crop_caption": "inquadra la foto", 42947 "profile.photo_auto_caption": "trascina e zooma, poi salviamo in automatico", 42948 "profile.photo_upload": "Carica foto", 42949 "profile.photo_replace": "Cambia foto", 42950 "profile.photo_remove": "Rimuovi foto", 42951 "profile.photo_cancel": "Annulla", 42952 "profile.photo_save": "Salva foto", 42953 "profile.photo_uploading": "Caricamento foto\u2026", 42954 "profile.photo_removing": "Rimozione foto\u2026", 42955 "profile.photo_choose_another": "Scegli un'altra", 42956 "profile.photo_drag_hint": "Trascina la foto per centrarla nel cerchio. Si salva in automatico.", 42957 "profile.photo_zoom": "Zoom", 42958 "profile.photo_horizontal": "Ritaglio orizzontale", 42959 "profile.photo_vertical": "Ritaglio verticale", 42960 "profile.name_label": "Nome", 42961 "profile.name_placeholder": "Come ti chiamiamo?", 42962 "profile.gender_label": "Sono", 42963 "profile.gender.woman": "Donna", 42964 "profile.gender.man": "Uomo", 42965 "profile.gender.unspecified": "Preferisco non dirlo", 42966 "profile.bio_label": "Bio", 42967 "profile.bio_optional": "opzionale", 42968 "profile.bio_placeholder": "Lingue che parli, cosa ti piace, qualsiasi cosa\u2026", 42969 "profile.cta_new": "Andiamo", 42970 "profile.cta_edit": "Salva modifiche", 42971 "profile.saving": "Salvataggio\u2026",
42972 "profile.close": "Chiudi", 42973 "profile.error.save_failed": "Impossibile salvare il profilo. Riprova.", 42974 "profile.error.avatar_invalid_type": "Scegli un'immagine PNG, JPEG, GIF o WebP.", 42975 "profile.error.avatar_too_large": "Scegli un'immagine pi\xF9 piccola di 5 MB.", 42976 "profile.error.avatar_too_small": "Scegli un'immagine di almeno 96x96 pixel.", 42977 "profile.error.avatar_load_failed": "Non riusciamo a leggere l'immagine. Prova un altro file.", 42978 "profile.error.avatar_failed": "Impossibile caricare la foto. Riprova.", 42979 "profile.error.avatar_remove_failed": "Impossibile rimuovere la foto. Riprova.", 42980 "effects.title": "Effetti", 42981 "effects.soft": "Soft focus", 42982 "effects.vignette": "Vignettatura", 42983 "effects.face": "Sfoca viso", 42984 "effects.face_preview_only": "Sfoca viso (solo anteprima)", 42985 "effects.face_viewer_side": "Sfoca viso (lato spettatore)", 42986 "effects.face_strength": "Intensit\xE0 sfocatura viso", 42987 "effects.grade.off": "OFF", 42988 "effects.grade.pop": "POP", 42989 "effects.grade.warm": "WARM", 42990 "effects.grade.cool": "COOL", 42991 "effects.grade.bw": "B&W", 42992 "camera.off": "la cam \xE8 spenta", 42993 "camera.check": "checka la cam", 42994 "camera.retry": "riprova cam", 42995 "camera.ready": "cam pronta", 42996 "camera.idle.title": "Accendi la cam", 42997 "camera.idle.hint": "Chiederemo l'accesso al browser quando ci sei.", 42998 "camera.idle.button": "Accendi cam", 42999 "camera.status.idle": "Ti stiamo aspettando", 43000 "camera.status.off": "La cam \xE8 spenta", 43001 "camera.status.loading": "Richiesta accesso alla cam...", 43002 "camera.status.denied": "Consenti l'accesso alla cam nel browser, poi riprova.", 43003 "camera.status.error": "Anteprima cam fallita. Riprova.", 43004 "camera.status.unsupported": "Questo browser non supporta l'accesso alla cam.", 43005 "camera.status.insecure": "L'accesso alla cam richiede HTTPS o localhost.", 43006 "camera.status.attach_failed": "Impossibile avviare l'anteprima della cam. Riprova.", 43007 "camera.guest_name_placeholder": "Nome ospite", 43008 "camera.flip": "Gira cam", 43009 "camera.save_name": "Salva", 43010 "camera.edit_name": "Modifica nome", 43011 "mic.on": "Spegni microfono", 43012 "mic.off": "Accendi microfono", 43013 "video.on": "Spegni cam", 43014 "video.off": "Accendi cam", 43015 "chat.title": "chat", 43016 "chat.close": "Chiudi chat", 43017 "chat.loading": "caricamento...", 43018 "chat.load_earlier": "carica precedenti", 43019 "chat.empty": "ancora nessun messaggio", 43020 "chat.send_error": "Messaggio non inviato \u2014 riprova.", 43021 "chat.input_placeholder": "scrivi un messaggio...", 43022 "room.host": "Host", 43023 "app.room_default_title": "Crea una stanza", 43024 "app.chat_connection_rejected": "Impossibile connettere la chat \u2014 prova a ricaricare.", 43025 "app.copy_failed": "Impossibile copiare il link. Prova a selezionarlo e copiarlo a mano.", 43026 "app.chat_not_connected": "La chat non \xE8 ancora connessa. Aspetta un attimo e riprova.", 43027 "footer.terms": "Termini & Condizioni", 43028 "footer.copyright": "\xA9 2026 Yano.AI" 43029}; 43030
43031// app/javascript/yano/locales/ja.js 43032var ja_default = { 43033 "home.heading.default": "\u30B5\u30AF\u30C3\u3068\u8A71\u305D\u3046", 43034 "home.heading.loading": "\u30EB\u30FC\u30E0\u6E96\u5099\u4E2D...", 43035 "home.heading.join": "\u53C2\u52A0\u3059\u308B\uFF1F", 43036 "home.heading.joined": "\u5165\u5BA4\u5B8C\u4E86\uFF01", 43037 "home.heading.pending": "\u30DB\u30B9\u30C8\u5F85\u3061...", 43038 "home.body.default": "\u30EB\u30FC\u30E0\u3092\u4F5C\u3063\u3066\u30EA\u30F3\u30AF\u3092\u30B7\u30A7\u30A2\u3002\u3042\u3068\u306F\u697D\u3057\u3080\u3060\u3051\u3002", 43039 "home.body.loading": "\u3061\u3087\u3063\u3068\u5F85\u3063\u3066\u306D\u3001\u30EB\u30FC\u30E0\u3092\u6E96\u5099\u3057\u3066\u308B\u3088\u3002", 43040 "home.body.join": "\u30AB\u30E1\u30E9\u3068\u30DE\u30A4\u30AF\u3092\u78BA\u8A8D\u3057\u3066\u3001\u98DB\u3073\u8FBC\u3082\u3046\u3002", 43041 "home.body.joined": "\u30EB\u30FC\u30E0\u516C\u958B\u4E2D\u3002\u30EA\u30F3\u30AF\u3092\u30B7\u30A7\u30A2\u3057\u3066\u59CB\u3081\u3088\u3046\u3002", 43042 "home.body.joined_in_room": "\u30EB\u30FC\u30E0\u306B\u3044\u308B\u3088\u3002\u53C2\u52A0\u3059\u308B\u304B\u30EA\u30F3\u30AF\u3092\u30B7\u30A7\u30A2\u3057\u3066\u306D\u3002", 43043 "home.body.pending": "\u30EB\u30FC\u30E0\u306F\u30ED\u30C3\u30AF\u3055\u308C\u3066\u308B\u3088\u3002\u30DB\u30B9\u30C8\u304C\u5165\u308C\u3066\u304F\u308C\u308B\u307E\u3067\u5F85\u3063\u3066\u306D\u3002", 43044 "home.cta.create": "\u30EB\u30FC\u30E0\u3092\u4F5C\u308B", 43045 "home.cta.join": "\u30EB\u30FC\u30E0\u306B\u5165\u308B", 43046 "home.cta.enter": "\u5165\u5BA4\u3059\u308B", 43047 "home.cta.creating": "\u4F5C\u6210\u4E2D...", 43048 "home.cta.joining": "\u53C2\u52A0\u4E2D...", 43049 "home.cta.opening": "\u6E96\u5099\u4E2D...", 43050 "home.cta.pending": "\u627F\u8A8D\u5F85\u3061...", 43051 "home.copy_link": "\u30EA\u30F3\u30AF\u3092\u30B3\u30D4\u30FC", 43052 "home.copied": "\u30B3\u30D4\u30FC\u3057\u305F\u3088\uFF01", 43053 "home.leave": "\u9000\u51FA\u3059\u308B", 43054 "home.back": "\u623B\u308B", 43055 "home.no_participants": "\u307E\u3060\u8AB0\u3082\u3044\u306A\u3044\u3088", 43056 "home.join_by_code": "\u62DB\u5F85\u30B3\u30FC\u30C9\u3067\u53C2\u52A0", 43057 "home.code_placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B", 43058 "home.name_placeholder": "\u540D\u524D", 43059 "home.people_one": "\u4EBA", 43060 "home.people_other": "\u4EBA", 43061 "home.marketing.invite.title": "\u30EB\u30FC\u30E0\u3092\u4F5C\u3063\u3066\u3001\n\u30EA\u30F3\u30AF\u3092\u30B7\u30A7\u30A2\u3002", 43062 "home.marketing.invite.body": "\u30EF\u30F3\u30BF\u30C3\u30D7\u3067\u958B\u59CB\u3002\u53CB\u9054\u306B\u30EA\u30F3\u30AF\u3092\u9001\u308B\u3060\u3051\u3067\u8AB0\u3067\u3082\u53C2\u52A0\u3067\u304D\u308B\u3088\u3002\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3082\u767B\u9332\u3082\u4E0D\u8981\u3002", 43063 "home.marketing.invite.preview_url": "yano.ai/ROOM", 43064 "home.marketing.look.title": "\u81EA\u5206\u3089\u3057\u3044\n\u30B9\u30BF\u30A4\u30EB\u3067\u3002", 43065 "home.marketing.look.body": "\u30AB\u30E9\u30FC\u8ABF\u6574\u3001\u30BD\u30D5\u30C8\u30D5\u30A9\u30FC\u30AB\u30B9\u3001\u30D3\u30CD\u30C3\u30C8\u3001\u9854\u307C\u304B\u3057\u3082OK\u3002\u30AB\u30E1\u30E9\u3082\u898B\u305F\u76EE\u3082\u81EA\u5206\u597D\u307F\u306B\u3002", 43066 "home.marketing.host.title": "\u81EA\u5206\u306E\u30B9\u30DA\u30FC\u30B9\u3001\n\u81EA\u5206\u306E\u30EB\u30FC\u30EB\u3002", 43067 "home.marketing.host.body": "\u30EB\u30FC\u30E0\u306E\u30ED\u30C3\u30AF\u3001\u30DF\u30E5\u30FC\u30C8\u3001\u9000\u51FA\u3082\u81EA\u7531\u81EA\u5728\u3002\u30DB\u30B9\u30C8\u304C\u3059\u3079\u3066\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3067\u304D\u308B\u3088\u3002", 43068 "home.marketing.host.locked": "\u30EB\u30FC\u30E0\u30ED\u30C3\u30AF\u4E2D", 43069 "home.marketing.host.waiting_to_join": "\u53C2\u52A0\u5F85\u3061", 43070 "home.marketing.host.wants_to_join": "\u304C\u53C2\u52A0\u3057\u305F\u304C\u3063\u3066\u308B\u3088", 43071 "home.marketing.anything.title": "\u3076\u3063\u3061\u3083\u3051\u3001\u4F55\u306B\u3067\u3082\u4F7F\u3048\u308B\u3002", 43072 "home.marketing.anything.body": "\u52C9\u5F37\u4F1A\u3001\u30B2\u30FC\u30E0\u3001\u4ED5\u4E8B\u306EMTG\u3001\u540C\u6642\u8996\u8074\u3001\u305F\u3060\u306E\u96D1\u8AC7\u306B\u3082\u3002", 43073 "home.marketing.use_case.study_group": "\u{1F4DA} \u52C9\u5F37\u4F1A", 43074 "home.marketing.use_case.game_night": "\u{1F3AE} \u30B2\u30FC\u30E0", 43075 "home.marketing.use_case.standup": "\u{1F4BC} MTG",
43076 "home.marketing.use_case.watch_party": "\u{1F37F} \u540C\u6642\u8996\u8074", 43077 "home.marketing.use_case.catch_up": "\u2615 \u96D1\u8AC7", 43078 "home.marketing.use_case.jam_session": "\u{1F3B8} \u30BB\u30C3\u30B7\u30E7\u30F3", 43079 "home.marketing.use_case.book_club": "\u{1F4D6} \u8AAD\u66F8\u4F1A", 43080 "home.marketing.use_case.coworking": "\u{1F4BB} \u3082\u304F\u3082\u304F\u4F1A", 43081 "ended.heading": "\u901A\u8A71\u7D42\u4E86", 43082 "ended.left": "\u30EB\u30FC\u30E0\u3092\u9000\u51FA\u3057\u305F\u3088\u3002", 43083 "ended.room_ended": "{title} \u306F\u7D42\u4E86\u3057\u305F\u3088\u3002", 43084 "ended.rejoin": "\u518D\u53C2\u52A0", 43085 "ended.rejoining": "\u518D\u53C2\u52A0\u4E2D...", 43086 "ended.home": "\u30DB\u30FC\u30E0\u306B\u623B\u308B", 43087 "call.connecting": "\u63A5\u7D9A\u4E2D", 43088 "call.waiting": "\u4ED6\u306E\u4EBA\u3092\u5F85\u3063\u3066\u308B\u3088", 43089 "call.invite_code": "\u62DB\u5F85\u30B3\u30FC\u30C9", 43090 "call.audio_on": "\u97F3\u58F0\u30AA\u30F3", 43091 "call.muted": "\u30DF\u30E5\u30FC\u30C8\u4E2D", 43092 "call.listening": "\u805E\u3044\u3066\u308B\u3088", 43093 "call.audio_muted": "\u97F3\u58F0\u30DF\u30E5\u30FC\u30C8\u4E2D", 43094 "call.speaking": "\u8A71\u3057\u3066\u308B\u3088", 43095 "call.you": "\u81EA\u5206", 43096 "call.you_label": "\u81EA\u5206", 43097 "call.you_suffix": "(\u81EA\u5206)", 43098 "call.chat_placeholder": "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1...", 43099 "call.guest": "\u30B2\u30B9\u30C8", 43100 "call.room_fallback": "\u30EB\u30FC\u30E0", 43101 "call.focus_view": "\u30D5\u30A9\u30FC\u30AB\u30B9\u30D3\u30E5\u30FC", 43102 "call.grid_view": "\u30B0\u30EA\u30C3\u30C9\u30D3\u30E5\u30FC", 43103 "call.swap_main_video": "\u30E1\u30A4\u30F3\u30D3\u30C7\u30AA\u3092\u5207\u308A\u66FF\u3048", 43104 "call.open_chat": "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F", 43105 "call.close_chat": "\u30C1\u30E3\u30C3\u30C8\u3092\u9589\u3058\u308B", 43106 "call.leave_room": "\u9000\u51FA\u3059\u308B", 43107 "call.confirm_leave": "\u9000\u51FA\u3059\u308B\uFF1F", 43108 "call.mic_on": "\u30DE\u30A4\u30AF\u30AA\u30F3", 43109 "call.muted_label": "\u30DF\u30E5\u30FC\u30C8\u4E2D", 43110 "call.camera_off": "\u30AB\u30E1\u30E9\u30AA\u30D5", 43111 "call.connect_failed": "\u63A5\u7D9A\u5931\u6557 \u2014 \u30CD\u30C3\u30C8\u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u3084\u308A\u76F4\u3057\u3066\u306D\u3002", 43112 "call.camera_access_failed": "\u30AB\u30E1\u30E9\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u306A\u3044\u3088\u3002\u30D6\u30E9\u30A6\u30B6\u306E\u6A29\u9650\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u3066\u307F\u3066\u3002", 43113 "call.recording_failed": "\u9332\u753B\u3092\u958B\u59CB\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u3053\u306E\u307E\u307E\u901A\u8A71\u3092\u7D9A\u3051\u308B\u306D\u3002", 43114 "call.initialize_failed": "\u901A\u8A71\u306E\u958B\u59CB\u3067\u30A8\u30E9\u30FC\u304C\u8D77\u304D\u305F\u307F\u305F\u3044\u3002\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u3084\u308A\u76F4\u3057\u3066\u306D\u3002", 43115 "call.participants": "\u53C2\u52A0\u8005", 43116 "call.open_participants": "\u53C2\u52A0\u8005\u3092\u958B\u304F", 43117 "call.close_participants": "\u53C2\u52A0\u8005\u3092\u9589\u3058\u308B", 43118 "call.lock_room": "\u30EB\u30FC\u30E0\u3092\u30ED\u30C3\u30AF", 43119 "call.unlock_room": "\u30EB\u30FC\u30E0\u306E\u30ED\u30C3\u30AF\u3092\u89E3\u9664", 43120 "call.locked": "\u30ED\u30C3\u30AF\u4E2D", 43121 "call.unlocked": "\u30AA\u30FC\u30D7\u30F3", 43122 "call.kick_member": "\u30EB\u30FC\u30E0\u304B\u3089\u9000\u51FA\u3055\u305B\u308B", 43123 "call.mute_member": "\u30DF\u30E5\u30FC\u30C8\u3059\u308B", 43124 "call.unmute_member": "\u30DF\u30E5\u30FC\u30C8\u89E3\u9664", 43125 "call.muted_by_host": "\u30DB\u30B9\u30C8\u304C\u30DF\u30E5\u30FC\u30C8\u3057\u305F\u3088", 43126 "call.waiting_to_join": "\u53C2\u52A0\u5F85\u3061", 43127 "call.approve": "\u627F\u8A8D", 43128 "call.deny": "\u62D2\u5426", 43129 "call.profile_actions": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u64CD\u4F5C", 43130 "call.profile_in_room": "\u5165\u5BA4\u4E2D", 43131 "call.profile_role_host": "\u30DB\u30B9\u30C8", 43132 "call.profile_role_you": "\u81EA\u5206", 43133 "call.profile_action_mute": "\u97F3\u58F0\u3092\u30DF\u30E5\u30FC\u30C8", 43134 "call.profile_action_mute_meta": "\u81EA\u5206\u3060\u3051\u30DF\u30E5\u30FC\u30C8\uFF08\u76F8\u624B\u306B\u306F\u30D0\u30EC\u306A\u3044\u3088\uFF09", 43135 "call.profile_action_dm": "1:1 DM", 43136 "call.profile_action_dm_meta": "\u3053\u3063\u305D\u308A\u500B\u5225\u30C1\u30E3\u30C3\u30C8\u3059\u308B", 43137 "call.profile_action_view": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u898B\u308B", 43138 "call.profile_action_view_meta": "\u81EA\u5DF1\u7D39\u4ECB\u3001\u8A00\u8A9E\u3001\u904E\u53BB\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306A\u3069", 43139 "call.profile_action_report": "\u901A\u5831\u3059\u308B", 43140 "call.profile_action_report_meta": "\u30E2\u30C7\u30EC\u30FC\u30BF\u30FC\u306B\u5831\u544A\u3059\u308B", 43141 "call.profile_sheet_close": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u64CD\u4F5C\u3092\u9589\u3058\u308B", 43142 "call.profile_open_actions": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u64CD\u4F5C\u3092\u958B\u304F", 43143 "call.dm_title": "\u30C0\u30A4\u30EC\u30AF\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8", 43144 "call.dm_back": "\u64CD\u4F5C\u306B\u623B\u308B", 43145 "call.dm_close": "DM\u3092\u9589\u3058\u308B", 43146 "call.dm_status_online": "\u30AA\u30F3\u30E9\u30A4\u30F3", 43147 "call.dm_in_room_with": "\u540C\u3058\u30EB\u30FC\u30E0\u306B\u3044\u308B\u3088", 43148 "call.dm_private_label": "\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30C1\u30E3\u30C3\u30C8", 43149 "call.dm_private_meta": "2\u4EBA\u3060\u3051\u306E\u3072\u307F\u3064\u306E\u30C1\u30E3\u30C3\u30C8\u3060\u3088", 43150 "call.dm_input_placeholder": "DM\u3092\u9001\u308B...", 43151 "call.dm_send": "\u9001\u4FE1", 43152 "call.dm_just_now": "\u4ECA", 43153 "call.dm_seen_just_now": "\u65E2\u8AAD", 43154 "call.dm_typing": "{name} \u304C\u5165\u529B\u4E2D...", 43155 "call.dm_minimize": "\u6700\u5C0F\u5316", 43156 "call.dm_active_indicator": "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F", 43157 "call.dm_unread_messages": "\u672A\u8AAD {count} \u4EF6", 43158 "call.dm_toast_tap_to_open": "\u30BF\u30C3\u30D7\u3057\u3066\u958B\u304F", 43159 "call.dm_reopen_aria": "{name} \u3068\u306E\u30C1\u30E3\u30C3\u30C8\u3092\u518D\u958B", 43160 "home.join_denied": "\u30DB\u30B9\u30C8\u306B\u5165\u5BA4\u3092\u65AD\u3089\u308C\u3061\u3083\u3063\u305F\u3002", 43161 "home.error.room_not_found": "\u305D\u306E\u30EB\u30FC\u30E0\u30B3\u30FC\u30C9\u306F\u5B58\u5728\u3057\u306A\u3044\u3088\u3002", 43162 "home.error.profile_required": "\u9032\u3080\u306B\u306F\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u8A2D\u5B9A\u3057\u3066\u306D\u3002", 43163 "home.cta.set_up_profile": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u8A2D\u5B9A\u3059\u308B", 43164 "home.profile_trigger_new": "\u30BF\u30C3\u30D7\u3057\u3066\u8A73\u7D30\u3092\u8FFD\u52A0", 43165 "home.profile_trigger_new_aria": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u8A2D\u5B9A\u3059\u308B", 43166 "home.profile_trigger_edit_aria": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u7DE8\u96C6\u3059\u308B", 43167 "profile.eyebrow_new": "\u3088\u308D\u3057\u304F\u306D", 43168 "profile.eyebrow_edit": "\u3042\u306A\u305F\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB", 43169 "profile.title_new": "\u81EA\u5206\u3089\u3057\u304F\u3002", 43170 "profile.title_edit": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u7DE8\u96C6", 43171 "profile.subtitle": "\u76F8\u624B\u306B\u81EA\u5206\u306E\u3053\u3068\u3092\u5C11\u3057\u3060\u3051\u6559\u3048\u3066\u3042\u3052\u3088\u3046\u3002", 43172 "profile.add_photo": "\u5199\u771F\u3092\u8FFD\u52A0", 43173 "profile.add_photo_soon": "\u5199\u771F\u306F\u6E96\u5099\u4E2D\u3060\u3088", 43174 "profile.photo_empty": "\u30BF\u30C3\u30D7\u3057\u3066\u5199\u771F\u3092\u8FFD\u52A0", 43175 "profile.photo_ready": "\u5199\u771FOK\uFF01", 43176 "profile.photo_save_first": "\u5199\u771F\u3092\u30A2\u30C3\u30D7\u3059\u308B\u524D\u306B\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u4FDD\u5B58\u3057\u3066\u306D", 43177 "profile.photo_crop_caption": "\u3044\u3044\u611F\u3058\u306B\u5207\u308A\u53D6\u308D\u3046", 43178 "profile.photo_auto_caption": "\u30C9\u30E9\u30C3\u30B0\uFF06\u30BA\u30FC\u30E0\u3067\u8ABF\u6574\u3057\u3066\u306D\u3002\u81EA\u52D5\u3067\u4FDD\u5B58\u3055\u308C\u308B\u3088", 43179 "profile.photo_upload": "\u5199\u771F\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9", 43180 "profile.photo_replace": "\u5199\u771F\u3092\u5909\u66F4", 43181 "profile.photo_remove": "\u5199\u771F\u3092\u524A\u9664", 43182 "profile.photo_cancel": "\u30AD\u30E3\u30F3\u30BB\u30EB", 43183 "profile.photo_save": "\u5199\u771F\u3092\u4FDD\u5B58", 43184 "profile.photo_uploading": "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...", 43185 "profile.photo_removing": "\u524A\u9664\u4E2D...", 43186 "profile.photo_choose_another": "\u5225\u306E\u5199\u771F\u3092\u9078\u3076", 43187 "profile.photo_drag_hint": "\u5199\u771F\u3092\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u5186\u306B\u5408\u308F\u305B\u3066\u306D\u3002\u81EA\u52D5\u3067\u4FDD\u5B58\u3055\u308C\u308B\u3088\u3002", 43188 "profile.photo_zoom": "\u30BA\u30FC\u30E0",
43189 "profile.photo_horizontal": "\u6A2A\u65B9\u5411\u306E\u5207\u308A\u53D6\u308A", 43190 "profile.photo_vertical": "\u7E26\u65B9\u5411\u306E\u5207\u308A\u53D6\u308A", 43191 "profile.name_label": "\u540D\u524D", 43192 "profile.name_placeholder": "\u306A\u3093\u3066\u547C\u3079\u3070\u3044\u3044\uFF1F", 43193 "profile.gender_label": "\u6027\u5225", 43194 "profile.gender.woman": "\u5973\u6027", 43195 "profile.gender.man": "\u7537\u6027", 43196 "profile.gender.unspecified": "\u8A00\u3044\u305F\u304F\u306A\u3044", 43197 "profile.bio_label": "\u81EA\u5DF1\u7D39\u4ECB", 43198 "profile.bio_optional": "\u4EFB\u610F", 43199 "profile.bio_placeholder": "\u8A71\u305B\u308B\u8A00\u8A9E\u3084\u597D\u304D\u306A\u3053\u3068\u3001\u306A\u3093\u3067\u3082\u66F8\u3044\u3066\u306D...", 43200 "profile.cta_new": "\u306F\u3058\u3081\u308B", 43201 "profile.cta_edit": "\u5909\u66F4\u3092\u4FDD\u5B58", 43202 "profile.saving": "\u4FDD\u5B58\u4E2D...", 43203 "profile.close": "\u9589\u3058\u308B", 43204 "profile.error.save_failed": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u4FDD\u5B58\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43205 "profile.error.avatar_invalid_type": "PNG\u3001JPEG\u3001GIF\u3001WebP\u306E\u3069\u308C\u304B\u3092\u9078\u3093\u3067\u306D\u3002", 43206 "profile.error.avatar_too_large": "5MB\u4EE5\u4E0B\u306E\u753B\u50CF\u3092\u9078\u3093\u3067\u306D\u3002", 43207 "profile.error.avatar_too_small": "96x96\u30D4\u30AF\u30BB\u30EB\u4EE5\u4E0A\u306E\u753B\u50CF\u3092\u9078\u3093\u3067\u306D\u3002", 43208 "profile.error.avatar_load_failed": "\u753B\u50CF\u3092\u8AAD\u307F\u8FBC\u3081\u306A\u304B\u3063\u305F\u3088\u3002\u5225\u306E\u30D5\u30A1\u30A4\u30EB\u3067\u8A66\u3057\u3066\u307F\u3066\u3002", 43209 "profile.error.avatar_failed": "\u5199\u771F\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43210 "profile.error.avatar_remove_failed": "\u5199\u771F\u3092\u524A\u9664\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43211 "effects.title": "\u30A8\u30D5\u30A7\u30AF\u30C8", 43212 "effects.soft": "\u30BD\u30D5\u30C8\u30D5\u30A9\u30FC\u30AB\u30B9", 43213 "effects.vignette": "\u30D3\u30CD\u30C3\u30C8", 43214 "effects.face": "\u9854\u307C\u304B\u3057", 43215 "effects.face_preview_only": "\u9854\u307C\u304B\u3057 (\u30D7\u30EC\u30D3\u30E5\u30FC\u306E\u307F)", 43216 "effects.face_viewer_side": "\u9854\u307C\u304B\u3057 (\u8996\u8074\u8005\u5074)", 43217 "effects.face_strength": "\u9854\u307C\u304B\u3057\u306E\u5F37\u3055", 43218 "effects.grade.off": "\u30AA\u30D5", 43219 "effects.grade.pop": "\u30DD\u30C3\u30D7", 43220 "effects.grade.warm": "\u30A6\u30A9\u30FC\u30E0", 43221 "effects.grade.cool": "\u30AF\u30FC\u30EB", 43222 "effects.grade.bw": "\u30E2\u30CE\u30AF\u30ED", 43223 "camera.off": "\u30AB\u30E1\u30E9\u30AA\u30D5", 43224 "camera.check": "\u30AB\u30E1\u30E9\u3092\u30C1\u30A7\u30C3\u30AF", 43225 "camera.retry": "\u30AB\u30E1\u30E9\u3092\u518D\u8A66\u884C", 43226 "camera.ready": "\u30AB\u30E1\u30E9OK\uFF01", 43227 "camera.idle.title": "\u30AB\u30E1\u30E9\u3092\u30AA\u30F3\u306B\u3057\u3066\u306D", 43228 "camera.idle.hint": "\u6E96\u5099\u304C\u3067\u304D\u305F\u3089\u30D6\u30E9\u30A6\u30B6\u306B\u30A2\u30AF\u30BB\u30B9\u8A31\u53EF\u3092\u6C42\u3081\u308B\u306D\u3002", 43229 "camera.idle.button": "\u30AB\u30E1\u30E9\u3092\u30AA\u30F3\u306B\u3059\u308B", 43230 "camera.status.idle": "\u6E96\u5099\u5F85\u3061", 43231 "camera.status.off": "\u30AB\u30E1\u30E9\u306F\u30AA\u30D5\u3060\u3088", 43232 "camera.status.loading": "\u30AB\u30E1\u30E9\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u30EA\u30AF\u30A8\u30B9\u30C8\u4E2D...", 43233 "camera.status.denied": "\u30D6\u30E9\u30A6\u30B6\u3067\u30AB\u30E1\u30E9\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u8A31\u53EF\u3057\u3066\u3001\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43234 "camera.status.error": "\u30AB\u30E1\u30E9\u306E\u30D7\u30EC\u30D3\u30E5\u30FC\u306B\u5931\u6557\u3057\u3061\u3083\u3063\u305F\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43235 "camera.status.unsupported": "\u3053\u306E\u30D6\u30E9\u30A6\u30B6\u306F\u30AB\u30E1\u30E9\u306B\u5BFE\u5FDC\u3057\u3066\u306A\u3044\u307F\u305F\u3044\u3002", 43236 "camera.status.insecure": "\u30AB\u30E1\u30E9\u3092\u4F7F\u3046\u306B\u306FHTTPS\u304Blocalhost\u304C\u5FC5\u8981\u3060\u3088\u3002", 43237 "camera.status.attach_failed": "\u30AB\u30E1\u30E9\u306E\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u958B\u59CB\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43238 "camera.guest_name_placeholder": "\u30B2\u30B9\u30C8\u540D", 43239 "camera.flip": "\u30AB\u30E1\u30E9\u3092\u5207\u308A\u66FF\u3048", 43240 "camera.save_name": "\u4FDD\u5B58", 43241 "camera.edit_name": "\u540D\u524D\u3092\u7DE8\u96C6", 43242 "mic.on": "\u30DE\u30A4\u30AF\u3092\u30AA\u30D5\u306B\u3059\u308B", 43243 "mic.off": "\u30DE\u30A4\u30AF\u3092\u30AA\u30F3\u306B\u3059\u308B", 43244 "video.on": "\u30AB\u30E1\u30E9\u3092\u30AA\u30D5\u306B\u3059\u308B", 43245 "video.off": "\u30AB\u30E1\u30E9\u3092\u30AA\u30F3\u306B\u3059\u308B", 43246 "chat.title": "\u30C1\u30E3\u30C3\u30C8",
43247 "chat.close": "\u30C1\u30E3\u30C3\u30C8\u3092\u9589\u3058\u308B", 43248 "chat.loading": "\u8AAD\u307F\u8FBC\u307F\u4E2D...", 43249 "chat.load_earlier": "\u904E\u53BB\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u8AAD\u307F\u8FBC\u3080", 43250 "chat.empty": "\u307E\u3060\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u306A\u3044\u3088", 43251 "chat.send_error": "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308C\u306A\u304B\u3063\u305F\u3088\u3002\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43252 "chat.input_placeholder": "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B...", 43253 "room.host": "\u30DB\u30B9\u30C8", 43254 "app.room_default_title": "\u30EB\u30FC\u30E0\u3092\u4F5C\u6210", 43255 "app.chat_connection_rejected": "\u30C1\u30E3\u30C3\u30C8\u306B\u63A5\u7D9A\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u30EA\u30ED\u30FC\u30C9\u3057\u3066\u307F\u3066\u306D\u3002", 43256 "app.copy_failed": "\u30EA\u30F3\u30AF\u3092\u30B3\u30D4\u30FC\u3067\u304D\u306A\u304B\u3063\u305F\u3088\u3002\u624B\u52D5\u3067\u9078\u629E\u3057\u3066\u30B3\u30D4\u30FC\u3057\u3066\u307F\u3066\u3002", 43257 "app.chat_not_connected": "\u30C1\u30E3\u30C3\u30C8\u304C\u307E\u3060\u7E4B\u304C\u3063\u3066\u306A\u3044\u3088\u3002\u5C11\u3057\u5F85\u3063\u3066\u304B\u3089\u3082\u3046\u4E00\u5EA6\u8A66\u3057\u3066\u306D\u3002", 43258 "footer.terms": "\u5229\u7528\u898F\u7D04", 43259 "footer.copyright": "\xA9 2026 Yano.AI" 43260}; 43261
43262// app/javascript/yano/locales/ko.js 43263var ko_default = { 43264 "home.heading.default": "\uBC14\uB85C \uD1B5\uD654\uD558\uAE30", 43265 "home.heading.loading": "\uBC29 \uC5EC\uB294 \uC911...", 43266 "home.heading.join": "\uB4E4\uC5B4\uAC08 \uC900\uBE44 \uB410\uB098\uC694?", 43267 "home.heading.joined": "\uC785\uC7A5 \uC644\uB8CC", 43268 "home.heading.pending": "\uD638\uC2A4\uD2B8 \uAE30\uB2E4\uB9AC\uB294 \uC911", 43269 "home.body.default": "\uBC29 \uB9CC\uB4E4\uACE0, \uB9C1\uD06C \uACF5\uC720\uD558\uACE0, \uADF8\uB0E5 \uC990\uAE30\uC138\uC694.", 43270 "home.body.loading": "\uC7A0\uAE50\uB9CC\uC694, \uBC29 \uC900\uBE44 \uC911\uC774\uC5D0\uC694.", 43271 "home.body.join": "\uCEA0\uC774\uB791 \uB9C8\uC774\uD06C \uD655\uC778\uD558\uACE0 \uB4E4\uC5B4\uC624\uC138\uC694.", 43272 "home.body.joined": "\uBC29\uC774 \uC5F4\uB838\uC5B4\uC694. \uB9C1\uD06C\uB97C \uACF5\uC720\uD558\uAC70\uB098 \uBC14\uB85C \uC2DC\uC791\uD574\uC694.", 43273 "home.body.joined_in_room": "\uBC29\uC5D0 \uB4E4\uC5B4\uC654\uC5B4\uC694 \u2014 \uBC14\uB85C \uC2DC\uC791\uD558\uAC70\uB098 \uB9C1\uD06C\uB97C \uACF5\uC720\uD574\uC694.", 43274 "home.body.pending": "\uBC29\uC774 \uC7A0\uACA8\uC788\uC5B4\uC694. \uD638\uC2A4\uD2B8\uAC00 \uC5F4\uC5B4\uC904 \uB54C\uAE4C\uC9C0 \uAE30\uB2E4\uB824\uC8FC\uC138\uC694.", 43275 "home.cta.create": "\uBC29 \uB9CC\uB4E4\uAE30", 43276 "home.cta.join": "\uBC29 \uCC38\uC5EC\uD558\uAE30", 43277 "home.cta.enter": "\uC785\uC7A5\uD558\uAE30", 43278 "home.cta.creating": "\uB9CC\uB4DC\uB294 \uC911...", 43279 "home.cta.joining": "\uB4E4\uC5B4\uAC00\uB294 \uC911...", 43280 "home.cta.opening": "\uC5EC\uB294 \uC911...", 43281 "home.cta.pending": "\uC2B9\uC778 \uB300\uAE30 \uC911...", 43282 "home.copy_link": "\uB9C1\uD06C \uBCF5\uC0AC", 43283 "home.copied": "\uBCF5\uC0AC \uC644\uB8CC!", 43284 "home.leave": "\uBC29 \uB098\uAC00\uAE30", 43285 "home.back": "\uB4A4\uB85C", 43286 "home.no_participants": "\uC544\uC9C1 \uC544\uBB34\uB3C4 \uC5C6\uC5B4\uC694", 43287 "home.join_by_code": "\uCD08\uB300 \uCF54\uB4DC\uB85C \uCC38\uC5EC", 43288 "home.code_placeholder": "\uCF54\uB4DC \uC785\uB825", 43289 "home.name_placeholder": "\uC774\uB984", 43290 "home.people_one": "\uBA85", 43291 "home.people_other": "\uBA85", 43292 "home.marketing.invite.title": "\uBC29\uC744 \uB9CC\uB4E4\uACE0,\n\uB9C1\uD06C\uB97C \uACF5\uC720\uD574\uC694.", 43293 "home.marketing.invite.body": "\uD130\uCE58 \uD55C \uBC88\uC73C\uB85C \uC2DC\uC791. \uCE5C\uAD6C\uC5D0\uAC8C \uB9C1\uD06C\uB9CC \uBCF4\uB0B4\uBA74 \uB204\uAD6C\uB098 \uB4E4\uC5B4\uC62C \uC218 \uC788\uC5B4\uC694. \uB2E4\uC6B4\uB85C\uB4DC\uB098 \uAC00\uC785\uC740 \uD544\uC694 \uC5C6\uC5B4\uC694.", 43294 "home.marketing.invite.preview_url": "yano.ai/ROOM", 43295 "home.marketing.look.title": "\uC6D0\uD558\uB294\n\uBAA8\uC2B5\uC73C\uB85C.", 43296 "home.marketing.look.body": "\uC0C9\uBCF4\uC815, \uC18C\uD504\uD2B8 \uD3EC\uCEE4\uC2A4, \uBE44\uB124\uD305 \u2014 \uC544\uB2C8\uBA74 \uC5BC\uAD74\uC744 \uC544\uC608 \uBE14\uB7EC \uCC98\uB9AC\uD560 \uC218\uB3C4 \uC788\uC5B4\uC694. \uB0B4 \uCE74\uBA54\uB77C\uB294 \uB0B4 \uB9D8\uB300\uB85C.", 43297 "home.marketing.host.title": "\uB0B4 \uACF5\uAC04,\n\uB0B4 \uB9D8\uB300\uB85C.", 43298 "home.marketing.host.body": "\uBC29\uC744 \uC7A0\uADF8\uAC70\uB098, \uB9C8\uC774\uD06C\uB97C \uB044\uAC70\uB098, \uB0B4\uBCF4\uB0BC \uC218 \uC788\uC5B4\uC694. \uD638\uC2A4\uD2B8\uAC00 \uBAA8\uB4E0 \uAC78 \uAD00\uB9AC\uD574\uC694.", 43299 "home.marketing.host.locked": "\uBC29 \uC7A0\uAE40", 43300 "home.marketing.host.waiting_to_join": "\uC785\uC7A5 \uB300\uAE30 \uC911", 43301 "home.marketing.host.wants_to_join": "\uB2D8\uC774 \uB4E4\uC5B4\uC624\uACE0 \uC2F6\uC5B4 \uD574\uC694", 43302 "home.marketing.anything.title": "\uC9C4\uC9DC \uC544\uBB34 \uB54C\uB098 \uC4F0\uC138\uC694.", 43303 "home.marketing.anything.body": "\uC2A4\uD130\uB514, \uAC8C\uC784, \uC2A4\uD0E0\uB4DC\uC5C5 \uBBF8\uD305, \uAC19\uC774 \uC601\uC0C1 \uBCFC \uB54C \u2014 \uC544\uB2C8\uBA74 \uADF8\uB0E5 \uC218\uB2E4 \uB5A8 \uB54C\uB3C4\uC694.", 43304 "home.marketing.use_case.study_group": "\u{1F4DA} \uC2A4\uD130\uB514", 43305 "home.marketing.use_case.game_night": "\u{1F3AE} \uAC8C\uC784", 43306 "home.marketing.use_case.standup": "\u{1F4BC} \uC2A4\uD0E0\uB4DC\uC5C5", 43307 "home.marketing.use_case.watch_party": "\u{1F37F} \uAC19\uC774 \uBCF4\uAE30", 43308 "home.marketing.use_case.catch_up": "\u2615 \uC218\uB2E4", 43309 "home.marketing.use_case.jam_session": "\u{1F3B8} \uC7BC \uC138\uC158", 43310 "home.marketing.use_case.book_club": "\u{1F4D6}
43310 \uBD81\uD074\uB7FD", 43311 "home.marketing.use_case.coworking": "\u{1F4BB} \uCF54\uC6CC\uD0B9", 43312 "ended.heading": "\uD1B5\uD654 \uC885\uB8CC", 43313 "ended.left": "\uBC29\uC5D0\uC11C \uB098\uC654\uC5B4\uC694.", 43314 "ended.room_ended": "{title} \uBC29\uC774 \uC885\uB8CC\uB418\uC5C8\uC5B4\uC694.", 43315 "ended.rejoin": "\uB2E4\uC2DC \uB4E4\uC5B4\uAC00\uAE30", 43316 "ended.rejoining": "\uB2E4\uC2DC \uB4E4\uC5B4\uAC00\uB294 \uC911...", 43317 "ended.home": "\uD648\uC73C\uB85C", 43318 "call.connecting": "\uC5F0\uACB0 \uC911", 43319 "call.waiting": "\uB2E4\uB978 \uC0AC\uB78C \uAE30\uB2E4\uB9AC\uB294 \uC911", 43320 "call.invite_code": "\uCD08\uB300 \uCF54\uB4DC", 43321 "call.audio_on": "\uC624\uB514\uC624 \uCF1C\uC9D0", 43322 "call.muted": "\uC74C\uC18C\uAC70\uB428", 43323 "call.listening": "\uB4E3\uB294 \uC911", 43324 "call.audio_muted": "\uC624\uB514\uC624 \uAEBC\uC9D0", 43325 "call.speaking": "\uB9D0\uD558\uB294 \uC911", 43326 "call.you": "\uB098", 43327 "call.you_label": "\uB098", 43328 "call.you_suffix": "(\uB098)", 43329 "call.chat_placeholder": "\uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30...", 43330 "call.guest": "\uAC8C\uC2A4\uD2B8", 43331 "call.room_fallback": "\uBC29", 43332 "call.focus_view": "\uD3EC\uCEE4\uC2A4 \uBDF0", 43333 "call.grid_view": "\uADF8\uB9AC\uB4DC \uBDF0", 43334 "call.swap_main_video": "\uBA54\uC778 \uD654\uBA74 \uBC14\uAFB8\uAE30", 43335 "call.open_chat": "\uCC44\uD305 \uC5F4\uAE30", 43336 "call.close_chat": "\uCC44\uD305 \uB2EB\uAE30", 43337 "call.leave_room": "\uBC29 \uB098\uAC00\uAE30", 43338 "call.confirm_leave": "\uB098\uAC08\uAE4C\uC694?", 43339 "call.mic_on": "\uB9C8\uC774\uD06C \uCF1C\uC9D0", 43340 "call.muted_label": "\uC74C\uC18C\uAC70\uB428", 43341 "call.camera_off": "\uCE74\uBA54\uB77C \uAEBC\uC9D0", 43342 "call.connect_failed": "\uC5F0\uACB0 \uC2E4\uD328 \u2014 \uC778\uD130\uB137\uC744 \uD655\uC778\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43343 "call.camera_access_failed": "\uCE74\uBA54\uB77C\uC5D0 \uC811\uADFC\uD560 \uC218 \uC5C6\uC5B4\uC694. \uBE0C\uB77C\uC6B0\uC800 \uAD8C\uD55C\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694.", 43344 "call.recording_failed": "\uB179\uD654\uB97C \uC2DC\uC791\uD560 \uC218 \uC5C6\uC5B4\uC694. \uB179\uD654 \uC5C6\uC774 \uD1B5\uD654\uB97C \uACC4\uC18D\uD569\uB2C8\uB2E4.", 43345 "call.initialize_failed": "\uD1B5\uD654 \uC2DC\uC791 \uC911 \uBB38\uC81C\uAC00 \uC0DD\uACBC\uC5B4\uC694. \uC0C8\uB85C\uACE0\uCE68 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43346 "call.participants": "\uCC38\uC5EC\uC790", 43347 "call.open_participants": "\uCC38\uC5EC\uC790 \uBAA9\uB85D \uC5F4\uAE30", 43348 "call.close_participants": "\uCC38\uC5EC\uC790 \uBAA9\uB85D \uB2EB\uAE30", 43349 "call.lock_room": "\uBC29 \uC7A0\uADF8\uAE30", 43350 "call.unlock_room": "\uBC29 \uC7A0\uAE08 \uD574\uC81C", 43351 "call.locked": "\uC7A0\uAE40", 43352 "call.unlocked": "\uC5F4\uB9BC", 43353 "call.kick_member": "\uBC29\uC5D0\uC11C \uB0B4\uBCF4\uB0B4\uAE30", 43354 "call.mute_member": "\uC74C\uC18C\uAC70", 43355 "call.unmute_member": "\uC74C\uC18C\uAC70 \uD574\uC81C", 43356 "call.muted_by_host": "\uD638\uC2A4\uD2B8\uAC00 \uC74C\uC18C\uAC70\uD568", 43357 "call.waiting_to_join": "\uC785\uC7A5 \uB300\uAE30 \uC911", 43358 "call.approve": "\uC2B9\uC778", 43359 "call.deny": "\uAC70\uC808", 43360 "call.profile_actions": "\uD504\uB85C\uD544 \uC561\uC158", 43361 "call.profile_in_room": "\uBC29\uC5D0 \uC788\uC74C", 43362 "call.profile_role_host": "\uD638\uC2A4\uD2B8", 43363 "call.profile_role_you": "\uB098", 43364 "call.profile_action_mute": "\uC624\uB514\uC624 \uC74C\uC18C\uAC70", 43365 "call.profile_action_mute_meta": "\uB098\uD55C\uD14C\uB9CC \uC548 \uB4E4\uB824\uC694 \u2014 \uC0C1\uB300\uBC29\uC740 \uBAB0\uB77C\uC694", 43366 "call.profile_action_dm": "1:1 DM", 43367 "call.profile_action_dm_meta": "\uBE44\uBC00 \uCC44\uD305 \uC2DC\uC791\uD558\uAE30", 43368 "call.profile_action_view": "\uC804\uCCB4 \uD504\uB85C\uD544 \uBCF4\uAE30", 43369 "call.profile_action_view_meta": "\uC18C\uAC1C, \uC5B8\uC5B4, \uC774\uC804 \uC138\uC158", 43370 "call.profile_action_report": "\uC2E0\uACE0\uD558\uAE30", 43371 "call.profile_action_report_meta": "\uAD00\uB9AC\uC790\uC5D0\uAC8C \uC2E0\uACE0\uD558\uAE30", 43372 "call.profile_sheet_close": "\uD504\uB85C\uD544 \uC561\uC158 \uB2EB\uAE30", 43373 "call.profile_open_actions": "\uD504\uB85C\uD544 \uC561\uC158 \uC5F4\uAE30", 43374 "call.dm_title": "\uB2E4\uC774\uB809\uD2B8 \uBA54\uC2DC\uC9C0", 43375 "call.dm_back": "\uC561\uC158\uC73C\uB85C \uB3CC\uC544\uAC00\uAE30", 43376 "call.dm_close": "DM \uB2EB\uAE30", 43377 "call.dm_status_online": "\uC628\uB77C\uC778", 43378 "call.dm_in_room_with": "\uC774 \uBC29\uC5D0 \uC788\uC74C", 43379 "call.dm_private_label": "\uBE44\uBC00 \uCC44\uD305", 43380 "call.dm_private_meta": "\uB458\uB9CC \uBCFC \uC218 \uC788\uB294 \uBA54\uC2DC\uC9C0\uC608\uC694", 43381 "call.dm_input_placeholder": "\uBE44\uBC00 \uBA54\uC2DC\uC9C0 \uBCF4\uB0B4\uAE30\u2026", 43382 "call.dm_send": "\uC804\uC1A1", 43383 "call.dm_just_now": "\uBC29\uAE08", 43384 "call.dm_seen_just_now": "\uBC29\uAE08 \uC77D\uC74C", 43385 "call.dm_typing": "{name}\uB2D8\uC774 \uC785\uB825 \uC911\u2026", 43386 "call.dm_minimize": "\uCD5C\uC18C\uD654", 43387 "call.dm_active_indicator": "\uB300\uD654 \uC5F4\uAE30", 43388 "call.dm_unread_messages": "\uC548 \uC77D\uC740 \uBA54\uC2DC\uC9C0 {count}\uAC1C", 43389 "call.dm_toast_tap_to_open": "\uB20C\uB7EC\uC11C \uC5F4\uAE30", 43390 "call.dm_reopen_aria": "{name}\uB2D8\uACFC \uB300\uD654 \uB2E4\uC2DC \uC5F4\uAE30", 43391 "home.join_denied": "\uD638\uC2A4\uD2B8\uAC00 \uC785\uC7A5\uC744 \uAC70\uC808\uD588\uC5B4\uC694.", 43392 "home.error.room_not_found": "\uC874\uC7AC\uD558\uC9C0 \uC54A\uB294 \uBC29 \uCF54\uB4DC\uC608\uC694.", 43393 "home.error.profile_required": "\uACC4\uC18D\uD558\uB824\uBA74 \uD504\uB85C\uD544\uC744 \uC124\uC815\uD574 \uC8FC\uC138\uC694.", 43394 "home.cta.set_up_profile": "\uD504\uB85C\uD544 \uC124\uC815\uD558\uAE30", 43395 "home.profile_trigger_new": "\uB20C\uB7EC\uC11C \uB0B4 \uC815\uBCF4 \uCD94\uAC00\uD558\uAE30", 43396 "home.profile_trigger_new_aria": "\uD504\uB85C\uD544 \uC124\uC815\uD558\uAE30", 43397 "home.profile_trigger_edit_aria": "\uD504\uB85C\uD544 \uC218\uC815\uD558\uAE30", 43398 "profile.eyebrow_new": "\uC778\uC0AC\uD558\uAE30", 43399 "profile.eyebrow_edit": "\uB0B4 \uD504\uB85C\uD544", 43400 "profile.title_new": "\uB098\uB9CC\uC758 \uD504\uB85C\uD544 \uB9CC\uB4E4\uAE30.", 43401 "profile.title_edit": "\uD504\uB85C\uD544 \uC218\uC815", 43402 "profile.subtitle": "\uC0C1\uB300\uBC29\uC774 \uB098\uB97C \uC54C \uC218 \uC788\uAC8C \uAC04\uB2E8\uD55C \uC815\uBCF4\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694.", 43403 "profile.add_photo": "\uC0AC\uC9C4 \uCD94\uAC00", 43404 "profile.add_photo_soon": "\uC0AC\uC9C4 \uAE30\uB2A5 \uC900\uBE44 \uC911", 43405 "profile.photo_empty": "\uB20C\uB7EC\uC11C \uC0AC\uC9C4 \uCD94\uAC00", 43406 "profile.photo_ready": "\uC0AC\uC9C4 \uC900\uBE44 \uC644\uB8CC", 43407 "profile.photo_save_first": "\uC0AC\uC9C4\uC744 \uC62C\uB9AC\uAE30 \uC804\uC5D0 \uD504\uB85C\uD544\uC744 \uBA3C\uC800 \uC800\uC7A5\uD574 \uC8FC\uC138\uC694", 43408 "profile.photo_crop_caption": "\uC0AC\uC9C4 \uC790\uB974\uAE30", 43409 "profile.photo_auto_caption": "\uB4DC\uB798\uADF8\uD558\uACE0 \uD655\uB300\uD574 \uBCF4\uC138\uC694. \uC790\uB3D9\uC73C\uB85C \uC800\uC7A5\uB3FC\uC694", 43410 "profile.photo_upload": "\uC0AC\uC9C4 \uC5C5\uB85C\uB4DC", 43411 "profile.photo_replace": "\uC0AC\uC9C4 \uBCC0\uACBD", 43412 "profile.photo_remove": "\uC0AC\uC9C4 \uC0AD\uC81C", 43413 "profile.photo_cancel": "\uCDE8\uC18C", 43414 "profile.photo_save": "\uC0AC\uC9C4 \uC800\uC7A5", 43415 "profile.photo_uploading": "\uC0AC\uC9C4 \uC5C5\uB85C\uB4DC \uC911\u2026", 43416 "profile.photo_removing": "\uC0AC\uC9C4 \uC0AD\uC81C \uC911\u2026", 43417 "profile.photo_choose_another": "\uB2E4\uB978 \uC0AC\uC9C4 \uC120\uD0DD", 43418 "profile.photo_drag_hint": "\uC0AC\uC9C4\uC744 \uB4DC\uB798\uADF8\uD574\uC11C \uC6D0 \uC548\uC5D0 \uB9DE\uCDB0\uC8FC\uC138\uC694. \uBCC0\uACBD \uC0AC\uD56D\uC740 \uC790\uB3D9 \uC800\uC7A5\uB3FC\uC694.", 43419 "profile.photo_zoom": "\uD655\uB300", 43420 "profile.photo_horizontal": "\uAC00\uB85C \uC790\uB974\uAE30", 43421 "profile.photo_vertical": "\uC138\uB85C \uC790\uB974\uAE30", 43422 "profile.name_label": "\uC774\uB984", 43423 "profile.name_placeholder": "\uBB50\uB77C\uACE0 \uBD80\uB974\uBA74 \uB420\uAE4C\uC694?", 43424 "profile.gender_label": "\uC131\uBCC4", 43425 "profile.gender.woman": "\uC5EC\uC131", 43426 "profile.gender.man": "\uB0A8\uC131", 43427 "profile.gender.unspecified": "\uC120\uD0DD \uC548 \uD568", 43428 "profile.bio_label": "\uC18C\uAC1C", 43429 "profile.bio_optional": "\uC120\uD0DD", 43430 "profile.bio_placeholder": "\uD560 \uC904 \uC544\uB294 \uC5B8\uC5B4, \uC88B\uC544\uD558\uB294 \uAC83, \uBB50\uB4E0 \uC88B\uC544\uC694\u2026", 43431 "profile.cta_new": "\uC2DC\uC791\uD558\uAE30", 43432 "profile.cta_edit": "\uBCC0\uACBD \uC0AC\uD56D \uC800\uC7A5", 43433 "profile.saving": "\uC800\uC7A5 \uC911\u2026",
43434 "profile.close": "\uB2EB\uAE30", 43435 "profile.error.save_failed": "\uD504\uB85C\uD544\uC744 \uC800\uC7A5\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43436 "profile.error.avatar_invalid_type": "PNG, JPEG, GIF, WebP \uC774\uBBF8\uC9C0\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.", 43437 "profile.error.avatar_too_large": "5MB \uC774\uD558\uC758 \uC774\uBBF8\uC9C0\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.", 43438 "profile.error.avatar_too_small": "\uCD5C\uC18C 96x96 \uD53D\uC140 \uC774\uC0C1\uC758 \uC774\uBBF8\uC9C0\uB97C \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.", 43439 "profile.error.avatar_load_failed": "\uC774\uBBF8\uC9C0\uB97C \uC77D\uC744 \uC218 \uC5C6\uC5B4\uC694. \uB2E4\uB978 \uD30C\uC77C\uC744 \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43440 "profile.error.avatar_failed": "\uC0AC\uC9C4\uC744 \uC5C5\uB85C\uB4DC\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43441 "profile.error.avatar_remove_failed": "\uC0AC\uC9C4\uC744 \uC0AD\uC81C\uD558\uC9C0 \uBABB\uD588\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43442 "effects.title": "\uD6A8\uACFC", 43443 "effects.soft": "\uC18C\uD504\uD2B8 \uD3EC\uCEE4\uC2A4", 43444 "effects.vignette": "\uBE44\uB124\uD305", 43445 "effects.face": "\uC5BC\uAD74 \uBE14\uB7EC", 43446 "effects.face_preview_only": "\uC5BC\uAD74 \uBE14\uB7EC (\uBBF8\uB9AC\uBCF4\uAE30 \uC804\uC6A9)", 43447 "effects.face_viewer_side": "\uC5BC\uAD74 \uBE14\uB7EC (\uBCF4\uB294 \uC0AC\uB78C \uAE30\uC900)", 43448 "effects.face_strength": "\uC5BC\uAD74 \uBE14\uB7EC \uAC15\uB3C4", 43449 "effects.grade.off": "\uB044\uAE30", 43450 "effects.grade.pop": "\uD31D", 43451 "effects.grade.warm": "\uB530\uB73B\uD558\uAC8C", 43452 "effects.grade.cool": "\uCC28\uAC11\uAC8C", 43453 "effects.grade.bw": "\uD751\uBC31", 43454 "camera.off": "\uCE74\uBA54\uB77C \uAEBC\uC9D0", 43455 "camera.check": "\uCE74\uBA54\uB77C \uD655\uC778", 43456 "camera.retry": "\uCE74\uBA54\uB77C \uB2E4\uC2DC \uC2DC\uB3C4", 43457 "camera.ready": "\uCE74\uBA54\uB77C \uC900\uBE44 \uC644\uB8CC", 43458 "camera.idle.title": "\uCE74\uBA54\uB77C \uCF1C\uAE30", 43459 "camera.idle.hint": "\uC900\uBE44\uB418\uBA74 \uBE0C\uB77C\uC6B0\uC800\uC5D0 \uAD8C\uD55C\uC744 \uC694\uCCAD\uD560\uAC8C\uC694.", 43460 "camera.idle.button": "\uCE74\uBA54\uB77C \uCF1C\uAE30", 43461 "camera.status.idle": "\uB300\uAE30 \uC911", 43462 "camera.status.off": "\uCE74\uBA54\uB77C \uAEBC\uC9D0", 43463 "camera.status.loading": "\uCE74\uBA54\uB77C \uAD8C\uD55C \uC694\uCCAD \uC911...", 43464 "camera.status.denied": "\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uCE74\uBA54\uB77C \uAD8C\uD55C\uC744 \uD5C8\uC6A9\uD558\uACE0 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43465 "camera.status.error": "\uCE74\uBA54\uB77C \uBBF8\uB9AC\uBCF4\uAE30\uC5D0 \uC2E4\uD328\uD588\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43466 "camera.status.unsupported": "\uC774 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C\uB294 \uCE74\uBA54\uB77C\uB97C \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uC544\uC694.", 43467 "camera.status.insecure": "\uCE74\uBA54\uB77C \uC811\uADFC\uC740 HTTPS\uB098 localhost \uD658\uACBD\uC774 \uD544\uC694\uD574\uC694.", 43468 "camera.status.attach_failed": "\uCE74\uBA54\uB77C \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uC2DC\uC791\uD560 \uC218 \uC5C6\uC5B4\uC694. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43469 "camera.guest_name_placeholder": "\uAC8C\uC2A4\uD2B8 \uC774\uB984", 43470 "camera.flip": "\uCE74\uBA54\uB77C \uC804\uD658", 43471 "camera.save_name": "\uC800\uC7A5", 43472 "camera.edit_name": "\uC774\uB984 \uC218\uC815", 43473 "mic.on": "\uB9C8\uC774\uD06C \uB044\uAE30", 43474 "mic.off": "\uB9C8\uC774\uD06C \uCF1C\uAE30", 43475 "video.on": "\uCE74\uBA54\uB77C \uB044\uAE30", 43476 "video.off": "\uCE74\uBA54\uB77C \uCF1C\uAE30", 43477 "chat.title": "\uCC44\uD305", 43478 "chat.close": "\uCC44\uD305 \uB2EB\uAE30", 43479 "chat.loading": "\uBD88\uB7EC\uC624\uB294 \uC911...", 43480 "chat.load_earlier": "\uC774\uC804 \uBA54\uC2DC\uC9C0 \uBD88\uB7EC\uC624\uAE30", 43481 "chat.empty": "\uC544\uC9C1 \uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uC5B4\uC694", 43482 "chat.send_error": "\uBA54\uC2DC\uC9C0 \uC804\uC1A1 \uC2E4\uD328 \u2014 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43483 "chat.input_placeholder": "\uBA54\uC2DC\uC9C0 \uC785\uB825...", 43484 "room.host": "\uD638\uC2A4\uD2B8", 43485 "app.room_default_title": "\uBC29 \uB9CC\uB4E4\uAE30", 43486 "app.chat_connection_rejected": "\uCC44\uD305 \uC5F0\uACB0 \uC2E4\uD328 \u2014 \uC0C8\uB85C\uACE0\uCE68\uD574 \uBCF4\uC138\uC694.", 43487 "app.copy_failed": "\uB9C1\uD06C \uBCF5\uC0AC \uC2E4\uD328. \uC9C1\uC811 \uC120\uD0DD\uD574\uC11C \uBCF5\uC0AC\uD574 \uBCF4\uC138\uC694.", 43488 "app.chat_not_connected": "\uC544\uC9C1 \uCC44\uD305\uC774 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC558\uC5B4\uC694. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.", 43489 "footer.terms": "\uC774\uC6A9\uC57D\uAD00", 43490 "footer.copyright": "\xA9 2026 Yano.AI" 43491}; 43492
43493// app/javascript/yano/locales/lo.js 43494var lo_default = { 43495 "home.heading.default": "\u0EA1\u0EB2\u0EA5\u0EBB\u0EA1\u0E81\u0EB1\u0E99", 43496 "home.heading.loading": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E9B\u0EB5\u0E94\u0EAB\u0EC9\u0EAD\u0E87...", 43497 "home.heading.join": "\u0E9E\u0EC9\u0EAD\u0EA1\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC1\u0EA5\u0EC9\u0EA7\u0E9A\u0ECD\u0EC8?", 43498 "home.heading.joined": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC1\u0EA5\u0EC9\u0EA7", 43499 "home.heading.pending": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87", 43500 "home.body.default": "\u0EAA\u0EC9\u0EB2\u0E87\u0EAB\u0EC9\u0EAD\u0E87, \u0EAA\u0EBB\u0EC8\u0E87\u0EA5\u0EB4\u0EC9\u0E87, \u0EC1\u0EA5\u0EC9\u0EA7\u0EA1\u0EC8\u0EA7\u0E99\u0EC0\u0EA5\u0EB5\u0E8D.", 43501 "home.body.loading": "\u0EC1\u0E9B\u0EB1\u0E9A\u0EDC\u0EB6\u0EC8\u0E87, \u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0E94\u0EB6\u0E87\u0EAB\u0EC9\u0EAD\u0E87.", 43502 "home.body.join": "\u0EC0\u0E8A\u0EB1\u0E81\u0E81\u0EC9\u0EAD\u0E87\u0E81\u0EB1\u0E9A\u0EC4\u0EA1, \u0EC1\u0EA5\u0EC9\u0EA7\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0EA5\u0EB5\u0E8D.", 43503 "home.body.joined": "\u0EAB\u0EC9\u0EAD\u0E87\u0EC0\u0E9B\u0EB5\u0E94\u0EC1\u0EA5\u0EC9\u0EA7. \u0EC1\u0E8A\u0EA3\u0ECC\u0EA5\u0EB4\u0EC9\u0E87 \u0EAB\u0EBC\u0EB7 \u0EA5\u0EB8\u0E8D\u0EC0\u0EA5\u0EB5\u0E8D.", 43504 "home.body.joined_in_room": "\u0EA2\u0EB9\u0EC8\u0EC3\u0E99\u0EAB\u0EC9\u0EAD\u0E87\u0EC1\u0EA5\u0EC9\u0EA7 \u2014 \u0EA5\u0EB8\u0E8D\u0EC0\u0EA5\u0EB5\u0E8D \u0EAB\u0EBC\u0EB7 \u0EC1\u0E8A\u0EA3\u0ECC\u0EA5\u0EB4\u0EC9\u0E87.", 43505 "home.body.pending": "\u0EAB\u0EC9\u0EAD\u0E87\u0EA5\u0EB1\u0EAD\u0E81\u0EA2\u0EB9\u0EC8. \u0E94\u0EBD\u0EA7\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87\u0E88\u0EB0\u0EAE\u0EB1\u0E9A\u0EC0\u0E82\u0EBB\u0EC9\u0EB2.", 43506 "home.cta.create": "\u0EAA\u0EC9\u0EB2\u0E87\u0EAB\u0EC9\u0EAD\u0E87", 43507 "home.cta.join": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAB\u0EC9\u0EAD\u0E87", 43508 "home.cta.enter": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAB\u0EC9\u0EAD\u0E87", 43509 "home.cta.creating": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EAA\u0EC9\u0EB2\u0E87...", 43510 "home.cta.joining": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E82\u0EBB\u0EC9\u0EB2...", 43511 "home.cta.opening": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E9B\u0EB5\u0E94...", 43512 "home.cta.pending": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EAE\u0EB1\u0E9A\u0EC0\u0E82\u0EBB\u0EC9\u0EB2...", 43513 "home.copy_link": "\u0E81\u0EB1\u0EAD\u0E9A\u0E9B\u0EB5\u0EC9\u0EA5\u0EB4\u0EC9\u0E87", 43514 "home.copied": "\u0E81\u0EB1\u0EAD\u0E9A\u0E9B\u0EB5\u0EC9\u0EC1\u0EA5\u0EC9\u0EA7!", 43515 "home.leave": "\u0EAD\u0EAD\u0E81\u0E88\u0EB2\u0E81\u0EAB\u0EC9\u0EAD\u0E87", 43516 "home.back": "\u0E81\u0EB1\u0E9A\u0E84\u0EB7\u0E99", 43517 "home.no_participants": "\u0E8D\u0EB1\u0E87\u0E9A\u0ECD\u0EC8\u0EA1\u0EB5\u0EC3\u0E9C\u0EC0\u0E97\u0EB7\u0EC8\u0EAD", 43518 "home.join_by_code": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0E94\u0EC9\u0EA7\u0E8D\u0EA5\u0EB0\u0EAB\u0EB1\u0E94", 43519 "home.code_placeholder": "\u0EC3\u0EAA\u0EC8\u0EA5\u0EB0\u0EAB\u0EB1\u0E94", 43520 "home.name_placeholder": "\u0E8A\u0EB7\u0EC8\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43521 "home.people_one": "\u0E84\u0EBB\u0E99", 43522 "home.people_other": "\u0E84\u0EBB\u0E99", 43523 "home.marketing.invite.title": "\u0EAA\u0EC9\u0EB2\u0E87\u0EAB\u0EC9\u0EAD\u0E87,\n\u0EC1\u0EA5\u0EC9\u0EA7\u0EC1\u0E8A\u0EA3\u0ECC\u0EA5\u0EB4\u0EC9\u0E87.", 43524 "home.marketing.invite.body": "\u0E81\u0EBB\u0E94\u0E9A\u0EB2\u0E94\u0E94\u0EBD\u0EA7\u0EC0\u0EA5\u0EB5\u0EC8\u0EA1\u0EC0\u0EA5\u0EB5\u0E8D. \u0EC1\u0E8A\u0EA3\u0ECC\u0EA5\u0EB4\u0EC9\u0E87\u0EC3\u0EAB\u0EC9\u0EDD\u0EB9\u0EC8\u0EC1\u0EA5\u0EC9\u0EA7\u0EC3\u0E9C\u0E81\u0ECD\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC4\u0E94\u0EC9 \u2014 \u0E9A\u0ECD\u0EC8\u0E95\u0EC9\u0EAD\u0E87\u0EC2\u0EAB\u0EBC\u0E94\u0EC1\u0EAD\u0EB1\u0E9A, \u0E9A\u0ECD\u0EC8\u0E95\u0EC9\u0EAD\u0E87\u0EAA\u0EB0\u0EDD\u0EB1\u0E81.", 43525 "home.marketing.invite.preview_url": "yano.ai/ROOM", 43526 "home.marketing.look.title": "\u0E9B\u0EB1\u0E9A\u0EA5\u0EB8\u0E81\n\u0E95\u0EB2\u0EA1\u0EC3\u0E88\u0EA1\u0EB1\u0E81.", 43527 "home.marketing.look.body": "\u0E9B\u0EB1\u0E9A\u0EAA\u0EB5, \u0EDC\u0EC9\u0EB2\u0EC0\u0E99\u0EBD\u0E99, \u0E82\u0EAD\u0E9A\u0EA1\u0EB7\u0E94 \u2014 \u0EAB\u0EBC\u0EB7 \u0EC0\u0E9A\u0EBC\u0EB5\u0EDC\u0EC9\u0EB2\u0EC4\u0E9B\u0EC0\u0EA5\u0EB5\u0E8D\u0E81\u0ECD\u0EC4\u0E94\u0EC9. \u0E81\u0EC9\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2, \u0EAA\u0EB0\u0E95\u0EB2\u
435270E8D\u0EC0\u0E88\u0EBB\u0EC9\u0EB2.", 43528 "home.marketing.host.title": "\u0E9E\u0EB7\u0EC9\u0E99\u0E97\u0EB5\u0EC8\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2,\n\u0E81\u0EBB\u0E94\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2.", 43529 "home.marketing.host.body": "\u0EA5\u0EB1\u0EAD\u0E81\u0EAB\u0EC9\u0EAD\u0E87, \u0E9B\u0EB4\u0E94\u0EC4\u0EA1, \u0EAB\u0EBC\u0EB7 \u0EC0\u0E95\u0EB0\u0EAD\u0EAD\u0E81\u0EC0\u0EA5\u0EB5\u0E8D\u0E81\u0ECD\u0EC4\u0E94\u0EC9. \u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87\u0E84\u0EB8\u0EA1\u0EC0\u0EAD\u0E87.", 43530 "home.marketing.host.locked": "\u0EAB\u0EC9\u0EAD\u0E87\u0EA5\u0EB1\u0EAD\u0E81\u0EA2\u0EB9\u0EC8", 43531 "home.marketing.host.waiting_to_join": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAB\u0EC9\u0EAD\u0E87", 43532 "home.marketing.host.wants_to_join": "\u0EA2\u0EB2\u0E81\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAB\u0EC9\u0EAD\u0E87", 43533 "home.marketing.anything.title": "\u0EAA\u0EB3\u0EA5\u0EB1\u0E9A\u0E97\u0EB8\u0E81\u0EA2\u0EC8\u0EB2\u0E87, \u0EAD\u0EB5\u0EC8\u0EAB\u0EBC\u0EB5.", 43534 "home.marketing.anything.body": "\u0E95\u0EB4\u0EA7\u0EDC\u0EB1\u0E87\u0EAA\u0EB7, \u0EAB\u0EBC\u0EB4\u0EC9\u0E99\u0EC0\u0E81\u0EA1, \u0EA5\u0EBB\u0EA1\u0EA7\u0EBD\u0E81, \u0EC0\u0E9A\u0EB4\u0EC8\u0E87\u0EDC\u0EB1\u0E87\u0E99\u0EB3\u0E81\u0EB1\u0E99 \u2014 \u0EAB\u0EBC\u0EB7 \u0EC1\u0E84\u0EC8\u0EA5\u0EBB\u0EA1\u0E81\u0EB1\u0E99\u0EAB\u0EBC\u0EB4\u0EC9\u0E99\u0EC6.", 43535 "home.marketing.use_case.study_group": "\u{1F4DA} \u0E95\u0EB4\u0EA7\u0EDC\u0EB1\u0E87\u0EAA\u0EB7", 43536 "home.marketing.use_case.game_night": "\u{1F3AE} \u0EAB\u0EBC\u0EB4\u0EC9\u0E99\u0EC0\u0E81\u0EA1", 43537 "home.marketing.use_case.standup": "\u{1F4BC} \u0EAD\u0EB1\u0E9A\u0EC0\u0E94\u0E94\u0EA7\u0EBD\u0E81", 43538 "home.marketing.use_case.watch_party": "\u{1F37F} \u0EC0\u0E9A\u0EB4\u0EC8\u0E87\u0EDC\u0EB1\u0E87\u0E99\u0EB3\u0E81\u0EB1\u0E99", 43539 "home.marketing.use_case.catch_up": "\u2615 \u0EAD\u0EB1\u0E9A\u0EC0\u0E94\u0E94\u0E8A\u0EB5\u0EA7\u0EB4\u0E94", 43540 "home.marketing.use_case.jam_session": "\u{1F3B8} \u0EAB\u0EBC\u0EB4\u0EC9\u0E99\u0E94\u0EBB\u0E99\u0E95\u0EB5", 43541 "home.marketing.use_case.book_club": "\u{1F4D6}
43541 \u0EA5\u0EBB\u0EA1\u0EC0\u0EA5\u0EB7\u0EC8\u0EAD\u0E87\u0E9B\u0EB6\u0EC9\u0EA1", 43542 "home.marketing.use_case.coworking": "\u{1F4BB} \u0E99\u0EB1\u0EC8\u0E87\u0EC0\u0EAE\u0EB1\u0E94\u0EA7\u0EBD\u0E81", 43543 "ended.heading": "\u0E88\u0EBB\u0E9A\u0EAA\u0EB2\u0E8D\u0EC1\u0EA5\u0EC9\u0EA7", 43544 "ended.left": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0EAD\u0EAD\u0E81\u0E88\u0EB2\u0E81\u0EAB\u0EC9\u0EAD\u0E87\u0EC1\u0EA5\u0EC9\u0EA7.", 43545 "ended.room_ended": "{title} \u0E88\u0EBB\u0E9A\u0EA5\u0EBB\u0E87\u0EC1\u0EA5\u0EC9\u0EA7\u0EAA\u0EB3\u0EA5\u0EB1\u0E9A\u0EC0\u0E88\u0EBB\u0EC9\u0EB2.", 43546 "ended.rejoin": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC3\u0EDD\u0EC8", 43547 "ended.rejoining": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC3\u0EDD\u0EC8...", 43548 "ended.home": "\u0E81\u0EB1\u0E9A\u0EDC\u0EC9\u0EB2\u0EAB\u0EBC\u0EB1\u0E81", 43549 "call.connecting": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E8A\u0EB7\u0EC8\u0EAD\u0EA1\u0E95\u0ECD\u0EC8", 43550 "call.waiting": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0E84\u0EBB\u0E99\u0EAD\u0EB7\u0EC8\u0E99", 43551 "call.invite_code": "\u0EA5\u0EB0\u0EAB\u0EB1\u0E94\u0EC0\u0E8A\u0EB5\u0E99", 43552 "call.audio_on": "\u0EC0\u0E9B\u0EB5\u0E94\u0EAA\u0EBD\u0E87", 43553 "call.muted": "\u0E9B\u0EB4\u0E94\u0EC4\u0EA1\u0EA2\u0EB9\u0EC8", 43554 "call.listening": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0E9F\u0EB1\u0E87", 43555 "call.audio_muted": "\u0E9B\u0EB4\u0E94\u0EAA\u0EBD\u0E87\u0EA2\u0EB9\u0EC8", 43556 "call.speaking": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0EA7\u0EBB\u0EC9\u0EB2", 43557 "call.you": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43558 "call.you_label": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43559 "call.you_suffix": "(\u0EC0\u0E88\u0EBB\u0EC9\u0EB2)", 43560 "call.chat_placeholder": "\u0E9E\u0EB4\u0EA1\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1...", 43561 "call.guest": "\u0EC1\u0E82\u0E81", 43562 "call.room_fallback": "\u0EAB\u0EC9\u0EAD\u0E87", 43563 "call.focus_view": "\u0EA1\u0EB8\u0EA1\u0EA1\u0EAD\u0E87\u0EC2\u0E9F\u0E81\u0EB1\u0EAA", 43564 "call.grid_view": "\u0EA1\u0EB8\u0EA1\u0EA1\u0EAD\u0E87\u0E81\u0EA3\u0EB4\u0E94", 43565 "call.swap_main_video": "\u0EAA\u0EB0\u0EAB\u0EBC\u0EB1\u0E9A\u0EA7\u0EB4\u0E94\u0EB5\u0EC2\u0EAD\u0EAB\u0EBC\u0EB1\u0E81", 43566 "call.open_chat": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC1\u0E8A\u0EB1\u0E94", 43567 "call.close_chat": "\u0E9B\u0EB4\u0E94\u0EC1\u0E8A\u0EB1\u0E94", 43568 "call.leave_room": "\u0EAD\u0EAD\u0E81\u0E88\u0EB2\u0E81\u0EAB\u0EC9\u0EAD\u0E87", 43569 "call.confirm_leave": "\u0EAD\u0EAD\u0E81\u0E9A\u0ECD\u0EC8?", 43570 "call.mic_on": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC4\u0EA1", 43571 "call.muted_label": "\u0E9B\u0EB4\u0E94\u0EC4\u0EA1", 43572 "call.camera_off": "\u0E9B\u0EB4\u0E94\u0E81\u0EC9\u0EAD\u0E87", 43573 "call.connect_failed": "\u0EC0\u0E8A\u0EB7\u0EC8\u0EAD\u0EA1\u0E95\u0ECD\u0EC8\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9 \u2014 \u0EC0\u0E8A\u0EB1\u0E81\u0EC0\u0E99\u0EB1\u0E94\u0EC1\u0EA5\u0EC9\u0EA7\u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43574 "call.camera_access_failed": "\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EC0\u0E8A\u0EB1\u0E81\u0EAA\u0EB4\u0E94\u0EC3\u0E99\u0E9A\u0EA3\u0EB2\u0EA7\u0EC0\u0E8A\u0EB5\u0EC1\u0EA5\u0EC9\u0EA7\u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8.", 43575 "call.recording_failed": "\u0EAD\u0EB1\u0E94\u0EA7\u0EB4\u0E94\u0EB5\u0EC2\u0EAD\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EAA\u0EB2\u0E8D\u0E88\u0EB0\u0E94\u0EB3\u0EC0\u0E99\u0EB5\u0E99\u0E95\u0ECD\u0EC8\u0EC4\u0E9B\u0EC1\u0E9A\u0E9A\u0E9A\u0ECD\u0EC8\u0EAD\u0EB1\u0E94.", 43576 "call.initialize_failed": "\u0EA1\u0EB5\u0E9A\u0EB2\u0E87\u0EA2\u0EC8\u0EB2\u0E87\u0E9C\u0EB4\u0E94\u0E9E\u0EB2\u0E94\u0E95\u0EAD\u0E99\u0EC0\u0EA5\u0EB5\u0EC8\u0EA1\u0EAA\u0EB2\u0E8D. \u0EA3\u0EB5\u0EC0\u0E9F\u0EA3\u0E8A\u0EC1\u0EA5\u0EC9\u0EA7\u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43577 "call.participants": "\u0E9C\u0EB9\u0EC9\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAE\u0EC8\u0EA7\u0EA1", 43578 "call.open_participants": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC0\u0E9A\u0EB4\u0EC8\u0E87\u0E9C\u0EB9\u0EC9\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAE\u0EC8\u0EA7\u0EA1", 43579 "call.close_participants": "\u0E9B\u0EB4\u0E94\u0E9C\u0EB9\u0EC9\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAE\u0EC8\u0EA7\u0EA1", 43580 "call.lock_room": "\u0EA5\u0EB1\u0EAD\u0E81\u0EAB\u0EC9\u0EAD\u0E87", 43581 "call.unlock_room": "\u0E9B\u0EBB\u0E94\u0EA5\u0EB1\u0EAD\u0E81\u0EAB\u0EC9\u0EAD\u0E87", 43582 "call.locked": "\u0EA5\u0EB1\u0EAD\u0E81\u0EC1\u0EA5\u0EC9\u0EA7", 43583 "call.unlocked": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC1\u0EA5\u0EC9\u0EA7", 43584 "call.kick_member": "\u0EC0\u0E95\u0EB0\u0EAD\u0EAD\u0E81\u0E88\u0EB2\u0E81\u0EAB\u0EC9\u0EAD\u0E87", 43585 "call.mute_member": "\u0E9B\u0EB4\u0E94\u0EC4\u0EA1", 43586 "call.unmute_member": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC4\u0EA1", 43587 "call.muted_by_host": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87\u0E9B\u0EB4\u0E94\u0EC4\u0EA1", 43588 "call.waiting_to_join": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EAB\u0EC9\u0EAD\u0E87", 43589 "call.approve": "\u0EAE\u0EB1\u0E9A\u0EC0\u0E82\u0EBB\u0EC9\u0EB2", 43590 "call.deny": "\u0E9B\u0EB0\u0E95\u0EB4\u0EC0\u0EAA\u0E94",
43591 "call.profile_actions": "\u0E88\u0EB1\u0E94\u0E81\u0EB2\u0E99\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43592 "call.profile_in_room": "\u0EC3\u0E99\u0EAB\u0EC9\u0EAD\u0E87", 43593 "call.profile_role_host": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87", 43594 "call.profile_role_you": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43595 "call.profile_action_mute": "\u0E9B\u0EB4\u0E94\u0EAA\u0EBD\u0E87\u0EC0\u0E82\u0EBB\u0EB2\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43596 "call.profile_action_mute_meta": "\u0EAA\u0EB0\u0EC0\u0E9E\u0EB2\u0EB0\u0EC0\u0E88\u0EBB\u0EC9\u0EB2 \u2014 \u0EC0\u0E82\u0EBB\u0EB2\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E88\u0EB0\u0E9A\u0ECD\u0EC8\u0EAE\u0EB9\u0EC9", 43597 "call.profile_action_dm": "\u0E97\u0EB1\u0E81\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7", 43598 "call.profile_action_dm_meta": "\u0EC0\u0EA5\u0EB5\u0EC8\u0EA1\u0EC1\u0E8A\u0EB1\u0E94\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7\u0E81\u0EB1\u0E9A\u0E84\u0EBB\u0E99\u0E99\u0EB5\u0EC9", 43599 "call.profile_action_view": "\u0EC0\u0E9A\u0EB4\u0EC8\u0E87\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC\u0EC0\u0E95\u0EB1\u0EA1", 43600 "call.profile_action_view_meta": "\u0E9B\u0EB0\u0EAB\u0EA7\u0EB1\u0E94, \u0E9E\u0EB2\u0EAA\u0EB2, \u0EAB\u0EC9\u0EAD\u0E87\u0E97\u0EB5\u0EC8\u0EC0\u0E84\u0EB5\u0E8D\u0EC0\u0E82\u0EBB\u0EC9\u0EB2", 43601 "call.profile_action_report": "\u0EA5\u0EB2\u0E8D\u0E87\u0EB2\u0E99", 43602 "call.profile_action_report_meta": "\u0EC1\u0E88\u0EC9\u0E87\u0EC3\u0EAB\u0EC9\u0EC1\u0EAD\u0E94\u0EA1\u0EB4\u0E99\u0E81\u0EA7\u0E94\u0EAA\u0EAD\u0E9A", 43603 "call.profile_sheet_close": "\u0E9B\u0EB4\u0E94\u0E81\u0EB2\u0E99\u0E88\u0EB1\u0E94\u0E81\u0EB2\u0E99\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43604 "call.profile_open_actions": "\u0EC0\u0E9B\u0EB5\u0E94\u0E81\u0EB2\u0E99\u0E88\u0EB1\u0E94\u0E81\u0EB2\u0E99\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43605 "call.dm_title": "\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7", 43606 "call.dm_back": "\u0E81\u0EB1\u0E9A\u0E84\u0EB7\u0E99", 43607 "call.dm_close": "\u0E9B\u0EB4\u0E94\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7", 43608 "call.dm_status_online": "\u0EAD\u0EAD\u0E99\u0EA5\u0EB2\u0E8D", 43609 "call.dm_in_room_with": "\u0EC3\u0E99\u0EAB\u0EC9\u0EAD\u0E87\u0E99\u0EB5\u0EC9", 43610 "call.dm_private_label": "\u0EC1\u0E8A\u0EB1\u0E94\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7", 43611 "call.dm_private_meta": "\u0EA1\u0EB5\u0EC1\u0E95\u0EC8\u0E9E\u0EA7\u0E81\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0EAA\u0EAD\u0E87\u0E84\u0EBB\u0E99\u0E97\u0EB5\u0EC8\u0EC0\u0EAB\u0EB1\u0E99\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0E99\u0EB5\u0EC9", 43612 "call.dm_input_placeholder": "\u0EAA\u0EBB\u0EC8\u0E87\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0EAA\u0EC8\u0EA7\u0E99\u0E95\u0EBB\u0EA7\u2026", 43613 "call.dm_send": "\u0EAA\u0EBB\u0EC8\u0E87", 43614 "call.dm_just_now": "\u0E95\u0EAD\u0E99\u0E99\u0EB5\u0EC9", 43615 "call.dm_seen_just_now": "\u0EAD\u0EC8\u0EB2\u0E99\u0EC0\u0EA1\u0EB7\u0EC8\u0EAD\u0E81\u0EB5\u0EC9", 43616 "call.dm_typing": "{name} \u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0E9E\u0EB4\u0EA1\u2026", 43617 "call.dm_minimize": "\u0EAB\u0E8D\u0ECD\u0EC9\u0EA5\u0EBB\u0E87", 43618 "call.dm_active_indicator": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC1\u0E8A\u0EB1\u0E94", 43619 "call.dm_unread_messages": "\u0E8D\u0EB1\u0E87\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9\u0EAD\u0EC8\u0EB2\u0E99 {count} \u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1", 43620 "call.dm_toast_tap_to_open": "\u0E81\u0EBB\u0E94\u0EC0\u0E9E\u0EB7\u0EC8\u0EAD\u0EC0\u0E9B\u0EB5\u0E94", 43621 "call.dm_reopen_aria": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC1\u0E8A\u0EB1\u0E94\u0E81\u0EB1\u0E9A {name} \u0EAD\u0EB5\u0E81\u0E84\u0EB1\u0EC9\u0E87", 43622 "home.join_denied": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87\u0E9A\u0ECD\u0EC8\u0EC3\u0EAB\u0EC9\u0EC0\u0E82\u0EBB\u0EC9\u0EB2.", 43623 "home.error.room_not_found": "\u0E9A\u0ECD\u0EC8\u0EA1\u0EB5\u0EA5\u0EB0\u0EAB\u0EB1\u0E94\u0EAB\u0EC9\u0EAD\u0E87\u0E99\u0EB5\u0EC9.", 43624 "home.error.profile_required": "\u0E95\u0EB1\u0EC9\u0E87\u0E84\u0EC8\u0EB2\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC\u0E81\u0EC8\u0EAD\u0E99\u0EC4\u0E9B\u0E95\u0ECD\u0EC8.", 43625 "home.cta.set_up_profile": "\u0E95\u0EB1\u0EC9\u0E87\u0E84\u0EC8\u0EB2\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC",
43626 "home.profile_trigger_new": "\u0E81\u0EBB\u0E94\u0EC0\u0E9E\u0EB7\u0EC8\u0EAD\u0EC0\u0E9E\u0EB5\u0EC8\u0EA1\u0E82\u0ECD\u0EC9\u0EA1\u0EB9\u0E99\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43627 "home.profile_trigger_new_aria": "\u0E95\u0EB1\u0EC9\u0E87\u0E84\u0EC8\u0EB2\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43628 "home.profile_trigger_edit_aria": "\u0EC1\u0E81\u0EC9\u0EC4\u0E82\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43629 "profile.eyebrow_new": "\u0E97\u0EB1\u0E81\u0E97\u0EB2\u0E8D", 43630 "profile.eyebrow_edit": "\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2", 43631 "profile.title_new": "\u0EAA\u0EC9\u0EB2\u0E87\u0EAA\u0EB0\u0E95\u0EB2\u0E8D\u0E82\u0EAD\u0E87\u0EC0\u0E88\u0EBB\u0EC9\u0EB2.", 43632 "profile.title_edit": "\u0EC1\u0E81\u0EC9\u0EC4\u0E82\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC", 43633 "profile.subtitle": "\u0EC3\u0EAA\u0EC8\u0E82\u0ECD\u0EC9\u0EA1\u0EB9\u0E99\u0E88\u0EB1\u0E81\u0EDC\u0EC9\u0EAD\u0E8D \u0EC3\u0EAB\u0EC9\u0EDD\u0EB9\u0EC8\u0EAE\u0EB9\u0EC9\u0EA7\u0EC8\u0EB2\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EA5\u0EBB\u0EA1\u0E81\u0EB1\u0E9A\u0EC3\u0E9C.", 43634 "profile.add_photo": "\u0EC0\u0E9E\u0EB5\u0EC8\u0EA1\u0EAE\u0EB9\u0E9A", 43635 "profile.add_photo_soon": "\u0EA5\u0EB0\u0E9A\u0EBB\u0E9A\u0EAE\u0EB9\u0E9A\u0E9E\u0EB2\u0E9A\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EA1\u0EB2", 43636 "profile.photo_empty": "\u0E81\u0EBB\u0E94\u0EC0\u0E9E\u0EB7\u0EC8\u0EAD\u0EC0\u0E9E\u0EB5\u0EC8\u0EA1\u0EAE\u0EB9\u0E9A", 43637 "profile.photo_ready": "\u0EAE\u0EB9\u0E9A\u0E9E\u0EC9\u0EAD\u0EA1\u0EC1\u0EA5\u0EC9\u0EA7", 43638 "profile.photo_save_first": "\u0EC0\u0E8A\u0E9A\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC\u0E81\u0EC8\u0EAD\u0E99\u0EAD\u0EB1\u0E9A\u0EC2\u0EAB\u0EBC\u0E94\u0EAE\u0EB9\u0E9A\u0EC0\u0E94\u0EB5\u0EC9", 43639 "profile.photo_crop_caption": "\u0E88\u0EB1\u0E94\u0EC0\u0E9F\u0EA3\u0EA1\u0EAE\u0EB9\u0E9A", 43640 "profile.photo_auto_caption": "\u0EA5\u0EB2\u0E81\u0EC1\u0EA5\u0EC9\u0EA7\u0E8A\u0EB9\u0EA1\u0EC0\u0EA5\u0EB5\u0E8D, \u0E94\u0EBD\u0EA7\u0EA5\u0EB0\u0E9A\u0EBB\u0E9A\u0EC0\u0E8A\u0E9A\u0EC3\u0EAB\u0EC9\u0EAD\u0EB1\u0E94\u0E95\u0EB0\u0EC2\u0E99\u0EA1\u0EB1\u0E94", 43641 "profile.photo_upload": "\u0EAD\u0EB1\u0E9A\u0EC2\u0EAB\u0EBC\u0E94\u0EAE\u0EB9\u0E9A", 43642 "profile.photo_replace": "\u0E9B\u0EC8\u0EBD\u0E99\u0EAE\u0EB9\u0E9A", 43643 "profile.photo_remove": "\u0EA5\u0EB6\u0E9A\u0EAE\u0EB9\u0E9A", 43644 "profile.photo_cancel": "\u0E8D\u0EBB\u0E81\u0EC0\u0EA5\u0EB5\u0E81", 43645 "profile.photo_save": "\u0EC0\u0E8A\u0E9A\u0EAE\u0EB9\u0E9A", 43646 "profile.photo_uploading": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EAD\u0EB1\u0E9A\u0EC2\u0EAB\u0EBC\u0E94\u0EAE\u0EB9\u0E9A\u2026", 43647 "profile.photo_removing": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EA5\u0EB6\u0E9A\u0EAE\u0EB9\u0E9A\u2026", 43648 "profile.photo_choose_another": "\u0EC0\u0EA5\u0EB7\u0EAD\u0E81\u0EAE\u0EB9\u0E9A\u0EC3\u0EDD\u0EC8", 43649 "profile.photo_drag_hint": "\u0EA5\u0EB2\u0E81\u0EAE\u0EB9\u0E9A\u0EC3\u0EAB\u0EC9\u0E9E\u0ECD\u0E94\u0EB5\u0E81\u0EB1\u0E9A\u0EA7\u0EBB\u0E87\u0EA1\u0EBB\u0E99. \u0EA5\u0EB0\u0E9A\u0EBB\u0E9A\u0E88\u0EB0\u0EC0\u0E8A\u0E9A\u0EC3\u0EAB\u0EC9\u0EAD\u0EB1\u0E94\u0E95\u0EB0\u0EC2\u0E99\u0EA1\u0EB1\u0E94.", 43650 "profile.photo_zoom": "\u0E8A\u0EB9\u0EA1", 43651 "profile.photo_horizontal": "\u0E95\u0EB1\u0E94\u0EA5\u0EA7\u0E87\u0E99\u0EAD\u0E99", 43652 "profile.photo_vertical": "\u0E95\u0EB1\u0E94\u0EA5\u0EA7\u0E87\u0E95\u0EB1\u0EC9\u0E87", 43653 "profile.name_label": "\u0E8A\u0EB7\u0EC8", 43654 "profile.name_placeholder": "\u0EC3\u0EAB\u0EC9\u0E9E\u0EA7\u0E81\u0EC0\u0EAE\u0EBB\u0EB2\u0EC0\u0EAD\u0EB5\u0EC9\u0E99\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0EA7\u0EC8\u0EB2\u0EAB\u0E8D\u0EB1\u0E87?", 43655 "profile.gender_label": "\u0E82\u0EC9\u0EAD\u0E8D\u0EC1\u0EA1\u0EC8\u0E99", 43656 "profile.gender.woman": "\u0E9C\u0EB9\u0EC9\u0E8D\u0EB4\u0E87", 43657 "profile.gender.man": "\u0E9C\u0EB9\u0EC9\u0E8A\u0EB2\u0E8D", 43658 "profile.gender.unspecified": "\u0E9A\u0ECD\u0EC8\u0E82\u0ECD\u0E9A\u0EAD\u0E81", 43659 "profile.bio_label": "\u0EC1\u0E99\u0EB0\u0E99\u0EB3\u0E95\u0EBB\u0EA7", 43660 "profile.bio_optional": "\u0EC3\u0EAA\u0EC8\u0E81\u0ECD\u0EC4\u0E94\u0EC9\u0E9A\u0ECD\u0EC8\u0EC3\u0EAA\u0EC8\u0E81\u0ECD\u0EC4\u0E94\u0EC9",
43661 "profile.bio_placeholder": "\u0E9E\u0EB2\u0EAA\u0EB2\u0E97\u0EB5\u0EC8\u0EC0\u0EA7\u0EBB\u0EC9\u0EB2, \u0EAA\u0EB4\u0EC8\u0E87\u0E97\u0EB5\u0EC8\u0EA1\u0EB1\u0E81, \u0EAB\u0EBC\u0EB7 \u0EAB\u0E8D\u0EB1\u0E87\u0E81\u0ECD\u0EC4\u0E94\u0EC9\u2026", 43662 "profile.cta_new": "\u0EA5\u0EB8\u0E8D\u0EC0\u0EA5\u0EB5\u0E8D", 43663 "profile.cta_edit": "\u0EC0\u0E8A\u0E9A", 43664 "profile.saving": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC0\u0E8A\u0E9A\u2026", 43665 "profile.close": "\u0E9B\u0EB4\u0E94", 43666 "profile.error.save_failed": "\u0EC0\u0E8A\u0E9A\u0EC2\u0E9B\u0EA3\u0EC4\u0E9F\u0EA5\u0ECC\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43667 "profile.error.avatar_invalid_type": "\u0EC0\u0EA5\u0EB7\u0EAD\u0E81\u0EAE\u0EB9\u0E9A PNG, JPEG, GIF, \u0EAB\u0EBC\u0EB7 WebP \u0EC0\u0E94\u0EB5\u0EC9.", 43668 "profile.error.avatar_too_large": "\u0EC0\u0EA5\u0EB7\u0EAD\u0E81\u0EAE\u0EB9\u0E9A\u0E82\u0EB0\u0EDC\u0EB2\u0E94\u0E99\u0EC9\u0EAD\u0E8D\u0E81\u0EA7\u0EC8\u0EB2 5 MB \u0EC0\u0E94\u0EB5\u0EC9.", 43669 "profile.error.avatar_too_small": "\u0EC0\u0EA5\u0EB7\u0EAD\u0E81\u0EAE\u0EB9\u0E9A\u0E82\u0EB0\u0EDC\u0EB2\u0E94\u0EA2\u0EC8\u0EB2\u0E87\u0EDC\u0EC9\u0EAD\u0E8D 96x96 \u0E9E\u0EB4\u0E81\u0EC0\u0E8A\u0EA7\u0EC0\u0E94\u0EB5\u0EC9.", 43670 "profile.error.avatar_load_failed": "\u0EAD\u0EC8\u0EB2\u0E99\u0EAE\u0EB9\u0E9A\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC4\u0E9F\u0EA5\u0ECC\u0EAD\u0EB7\u0EC8\u0E99\u0EC0\u0E9A\u0EB4\u0EC8\u0E87.", 43671 "profile.error.avatar_failed": "\u0EAD\u0EB1\u0E9A\u0EC2\u0EAB\u0EBC\u0E94\u0EAE\u0EB9\u0E9A\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43672 "profile.error.avatar_remove_failed": "\u0EA5\u0EB6\u0E9A\u0EAE\u0EB9\u0E9A\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43673 "effects.title": "\u0EC0\u0EAD\u0EB1\u0E9A\u0EC0\u0E9F\u0EB1\u0E81", 43674 "effects.soft": "\u0EC2\u0E9F\u0E81\u0EB1\u0EAA\u0E8A\u0EAD\u0E9A\u0EC6", 43675 "effects.vignette": "\u0E82\u0EAD\u0E9A\u0EA1\u0EB7\u0E94", 43676 "effects.face": "\u0EC0\u0E9A\u0EBC\u0EB5\u0EDC\u0EC9\u0EB2", 43677 "effects.face_preview_only": "\u0EC0\u0E9A\u0EBC\u0EB5\u0EDC\u0EC9\u0EB2 (\u0EAA\u0EB0\u0EC0\u0E9E\u0EB2\u0EB0\u0E9E\u0EA3\u0EB5\u0EA7\u0EB4\u0EA7)", 43678 "effects.face_viewer_side": "\u0EC0\u0E9A\u0EBC\u0EB5\u0EDC\u0EC9\u0EB2 (\u0E9D\u0EB1\u0EC8\u0E87\u0E84\u0EBB\u0E99\u0EC0\u0E9A\u0EB4\u0EC8\u0E87)", 43679 "effects.face_strength": "\u0EA5\u0EB0\u0E94\u0EB1\u0E9A\u0E84\u0EA7\u0EB2\u0EA1\u0EC0\u0E9A\u0EBC\u0EB5", 43680 "effects.grade.off": "\u0E9B\u0EB4\u0E94", 43681 "effects.grade.pop": "\u0E9B\u0EB1\u0EAD\u0E9A", 43682 "effects.grade.warm": "\u0EAD\u0EB8\u0EC8\u0E99", 43683 "effects.grade.cool": "\u0EC0\u0EA2\u0EB1\u0E99", 43684 "effects.grade.bw": "B&W", 43685 "camera.off": "\u0E9B\u0EB4\u0E94\u0E81\u0EC9\u0EAD\u0E87\u0EA2\u0EB9\u0EC8", 43686 "camera.check": "\u0EC0\u0E8A\u0EB1\u0E81\u0E81\u0EC9\u0EAD\u0E87\u0EC1\u0E9B\u0EB1\u0E9A", 43687 "camera.retry": "\u0EA5\u0EAD\u0E87\u0EC0\u0E9B\u0EB5\u0E94\u0E81\u0EC9\u0EAD\u0E87\u0EC3\u0EDD\u0EC8", 43688 "camera.ready": "\u0E81\u0EC9\u0EAD\u0E87\u0E9E\u0EC9\u0EAD\u0EA1\u0EC1\u0EA5\u0EC9\u0EA7", 43689 "camera.idle.title": "\u0EC0\u0E9B\u0EB5\u0E94\u0E81\u0EC9\u0EAD\u0E87\u0EC0\u0EA5\u0EB5\u0E8D", 43690 "camera.idle.hint": "\u0E94\u0EBD\u0EA7\u0EC0\u0EAE\u0EBB\u0EB2\u0E88\u0EB0\u0E82\u0ECD\u0EAA\u0EB4\u0E94\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87\u0EC0\u0EA1\u0EB7\u0EC8\u0EAD\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E9E\u0EC9\u0EAD\u0EA1.", 43691 "camera.idle.button": "\u0EC0\u0E9B\u0EB5\u0E94\u0E81\u0EC9\u0EAD\u0E87", 43692 "camera.status.idle": "\u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0EA2\u0EB9\u0EC8", 43693 "camera.status.off": "\u0E9B\u0EB4\u0E94\u0E81\u0EC9\u0EAD\u0E87\u0EA2\u0EB9\u0EC8", 43694 "camera.status.loading": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0E82\u0ECD\u0EAA\u0EB4\u0E94\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87...", 43695 "camera.status.denied": "\u0EAD\u0EB0\u0E99\u0EB8\u0E8D\u0EB2\u0E94\u0EC3\u0EAB\u0EC9\u0E9A\u0EA3\u0EB2\u0EA7\u0EC0\u0E8A\u0EB5\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87\u0E81\u0EC8\u0EAD\u0E99, \u0EC1\u0EA5\u0EC9\u0EA7\u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8.", 43696 "camera.status.error": "\u0E9E\u0EA3\u0EB5\u0EA7\u0EB4\u0EA7\u0E81\u0EC9\u0EAD\u0E87\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43697 "camera.status.unsupported": "\u0E9A\u0EA3\u0EB2\u0EA7\u0EC0\u0E8A\u0EB5\u0E99\u0EB5\u0EC9\u0E9A\u0ECD\u0EC8\u0EAE\u0EAD\u0E87\u0EAE\u0EB1\u0E9A\u0E81\u0EB2\u
436970E99\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87.", 43698 "camera.status.insecure": "\u0E81\u0EB2\u0E99\u0EC0\u0E82\u0EBB\u0EC9\u0EB2\u0EC0\u0E96\u0EB4\u0E87\u0E81\u0EC9\u0EAD\u0E87\u0E95\u0EC9\u0EAD\u0E87\u0EC3\u0E8A\u0EC9 HTTPS \u0EAB\u0EBC\u0EB7 localhost.", 43699 "camera.status.attach_failed": "\u0EC0\u0EA5\u0EB5\u0EC8\u0EA1\u0E9E\u0EA3\u0EB5\u0EA7\u0EB4\u0EA7\u0E81\u0EC9\u0EAD\u0E87\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43700 "camera.guest_name_placeholder": "\u0E8A\u0EB7\u0EC8\u0EC1\u0E82\u0E81", 43701 "camera.flip": "\u0EAA\u0EB0\u0EAB\u0EBC\u0EB1\u0E9A\u0E81\u0EC9\u0EAD\u0E87", 43702 "camera.save_name": "\u0EC0\u0E8A\u0E9A", 43703 "camera.edit_name": "\u0E9B\u0EC8\u0EBD\u0E99\u0E8A\u0EB7\u0EC8", 43704 "mic.on": "\u0E9B\u0EB4\u0E94\u0EC4\u0EA1", 43705 "mic.off": "\u0EC0\u0E9B\u0EB5\u0E94\u0EC4\u0EA1", 43706 "video.on": "\u0E9B\u0EB4\u0E94\u0E81\u0EC9\u0EAD\u0E87", 43707 "video.off": "\u0EC0\u0E9B\u0EB5\u0E94\u0E81\u0EC9\u0EAD\u0E87", 43708 "chat.title": "\u0EC1\u0E8A\u0EB1\u0E94", 43709 "chat.close": "\u0E9B\u0EB4\u0E94\u0EC1\u0E8A\u0EB1\u0E94", 43710 "chat.loading": "\u0E81\u0EB3\u0EA5\u0EB1\u0E87\u0EC2\u0EAB\u0EBC\u0E94...", 43711 "chat.load_earlier": "\u0EC2\u0EAB\u0EBC\u0E94\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0E81\u0EC8\u0EAD\u0E99\u0EDC\u0EC9\u0EB2", 43712 "chat.empty": "\u0E8D\u0EB1\u0E87\u0E9A\u0ECD\u0EC8\u0EA1\u0EB5\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1", 43713 "chat.send_error": "\u0EAA\u0EBB\u0EC8\u0E87\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9 \u2014 \u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8\u0EC0\u0E94\u0EB5\u0EC9.", 43714 "chat.input_placeholder": "\u0E9E\u0EB4\u0EA1\u0E82\u0ECD\u0EC9\u0E84\u0EA7\u0EB2\u0EA1...", 43715 "room.host": "\u0EC0\u0E88\u0EBB\u0EC9\u0EB2\u0E82\u0EAD\u0E87\u0EAB\u0EC9\u0EAD\u0E87", 43716 "app.room_default_title": "\u0EAA\u0EC9\u0EB2\u0E87\u0EAB\u0EC9\u0EAD\u0E87", 43717 "app.chat_connection_rejected": "\u0EC0\u0E8A\u0EB7\u0EC8\u0EAD\u0EA1\u0E95\u0ECD\u0EC8\u0EC1\u0E8A\u0EB1\u0E94\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9 \u2014 \u0EA5\u0EAD\u0E87\u0EA3\u0EB5\u0EC0\u0E9F\u0EA3\u0E8A\u0EC0\u0E9A\u0EB4\u0EC8\u0E87\u0EC0\u0E94\u0EB5\u0EC9.", 43718 "app.copy_failed": "\u0E81\u0EB1\u0EAD\u0E9A\u0E9B\u0EB5\u0EC9\u0EA5\u0EB4\u0EC9\u0E87\u0E9A\u0ECD\u0EC8\u0EC4\u0E94\u0EC9. \u0EA5\u0EAD\u0E87\u0EC0\u0EA5\u0EB7\u0EAD\u0E81\u0EC1\u0EA5\u0EC9\u0EA7\u0E81\u0EB1\u0EAD\u0E9A\u0E9B\u0EB5\u0EC9\u0EC0\u0EAD\u0E87\u0EC0\u0E94\u0EB5\u0EC9.", 43719 "app.chat_not_connected": "\u0EC1\u0E8A\u0EB1\u0E94\u0E8D\u0EB1\u0E87\u0E9A\u0ECD\u0EC8\u0EC0\u0E8A\u0EB7\u0EC8\u0EAD\u0EA1\u0E95\u0ECD\u0EC8. \u0EA5\u0ECD\u0E96\u0EC9\u0EB2\u0EC1\u0E9B\u0EB1\u0E9A\u0EDC\u0EB6\u0EC8\u0E87\u0EC1\u0EA5\u0EC9\u0EA7\u0EA5\u0EAD\u0E87\u0EC3\u0EDD\u0EC8.", 43720 "footer.terms": "\u0EC0\u0E87\u0EB7\u0EC8\u0EAD\u0E99\u0EC4\u0E82\u0E81\u0EB2\u0E99\u0EC3\u0E8A\u0EC9\u0E87\u0EB2\u0E99", 43721 "footer.copyright": "\xA9 2026 Yano.AI" 43722}; 43723
43724// app/javascript/yano/locales/lt.js 43725var lt_default = { 43726 "home.heading.default": "\u0161ok \u012F skambut\u012F", 43727 "home.heading.loading": "Atidaromas kambarys...", 43728 "home.heading.join": "pasiruo\u0161\u0119s prisijungti?", 43729 "home.heading.joined": "tu viduje", 43730 "home.heading.pending": "laukiama hosto", 43731 "home.body.default": "sukurk kambar\u012F, numesk nuorod\u0105, vibe'ink.", 43732 "home.body.loading": "sekund\u0119, ruo\u0161iame kambar\u012F.", 43733 "home.body.join": "pasitikrink kamer\u0105 ir mikr\u0105, tada \u0161ok vidun.", 43734 "home.body.joined": "kambarys paruo\u0161tas. dalinkis nuoroda arba tiesiog varyk.", 43735 "home.body.joined_in_room": "kambaryje \u2014 \u0161ok vidun arba dalinkis nuoroda.", 43736 "home.body.pending": "kambarys u\u017Erakintas. hostas tave \u012Fleis.", 43737 "home.cta.create": "Sukurti kambar\u012F", 43738 "home.cta.join": "Prisijungti", 43739 "home.cta.enter": "U\u017Eeiti", 43740 "home.cta.creating": "Kuriama...", 43741 "home.cta.joining": "Jungiamasi...", 43742 "home.cta.opening": "Atidaroma...", 43743 "home.cta.pending": "Laukiama patvirtinimo...", 43744 "home.copy_link": "kopijuoti nuorod\u0105", 43745 "home.copied": "nukopijuota!", 43746 "home.leave": "i\u0161eiti i\u0161 kambario", 43747 "home.back": "atgal", 43748 "home.no_participants": "kol kas nieko n\u0117ra", 43749 "home.join_by_code": "prisijungti su kodu", 43750 "home.code_placeholder": "\u012Fvesk kod\u0105", 43751 "home.name_placeholder": "tavo vardas", 43752 "home.people_one": "\u017Emogus", 43753 "home.people_other": "\u017Emon\u0117s", 43754 "home.marketing.invite.title": "Sukurk kambar\u012F,\ndalinkis nuoroda.", 43755 "home.marketing.invite.body": "Vienas paspaudimas ir pradedam. Numesk nuorod\u0105 draugams ir bet kas gal\u0117s prisijungti \u2014 joki\u0173 siuntim\u0173si ar registracij\u0173.", 43756 "home.marketing.invite.preview_url": "yano.ai/ROOM", 43757 "home.marketing.look.title": "Atrodyk taip,\nkaip nori.", 43758 "home.marketing.look.body": "Spalv\u0173 korekcija, \u0161velninimas, vinjet\u0117 \u2014 arba visi\u0161kai u\u017Ebluruok veid\u0105. Tavo kamera, tavo stilius.", 43759 "home.marketing.host.title": "Tavo erdv\u0117,\ntavo taisykl\u0117s.", 43760 "home.marketing.host.body": "U\u017Erakink kambar\u012F, u\u017Emutink k\u0105 nors arba i\u0161mesk visai. Hostas valdo situacij\u0105.", 43761 "home.marketing.host.locked": "Kambarys u\u017Erakintas", 43762 "home.marketing.host.waiting_to_join": "Laukia prisijungimo", 43763 "home.marketing.host.wants_to_join": "nori prisijungti", 43764 "home.marketing.anything.title": "Ties\u0105 sakant, bet kam.", 43765 "home.marketing.anything.body": "Mokslams, \u017Eaidim\u0173 vakarams, darbo standup'ams, film\u0173 \u017Ei\u016Br\u0117jimui kartu \u2014 ar tiesiog chill'ui.", 43766 "home.marketing.use_case.study_group": "\u{1F4DA} mokslai", 43767 "home.marketing.use_case.game_night": "\u{1F3AE} \u017Eaidim\u0173 vakaras", 43768 "home.marketing.use_case.standup": "\u{1F4BC} standup'as", 43769 "home.marketing.use_case.watch_party": "\u{1F37F} film\u0173 vakaras", 43770 "home.marketing.use_case.catch_up": "\u2615 pokalbis", 43771 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 43772 "home.marketing.use_case.book_club": "\u{1F4D6}
43772 knyg\u0173 klubas", 43773 "home.marketing.use_case.coworking": "\u{1F4BB} darbas kartu", 43774 "ended.heading": "skambutis baig\u0117si", 43775 "ended.left": "i\u0161\u0117jai i\u0161 kambario.", 43776 "ended.room_ended": "{title} tau baig\u0117si.", 43777 "ended.rejoin": "gr\u012F\u017Eti", 43778 "ended.rejoining": "gr\u012F\u017Etama...", 43779 "ended.home": "\u012F prad\u017Ei\u0105", 43780 "call.connecting": "jungiamasi", 43781 "call.waiting": "laukiama kit\u0173", 43782 "call.invite_code": "pakvietimo kodas", 43783 "call.audio_on": "garsas \u012Fjungtas", 43784 "call.muted": "u\u017Emutinta", 43785 "call.listening": "Klauso", 43786 "call.audio_muted": "Garsas i\u0161jungtas", 43787 "call.speaking": "kalba", 43788 "call.you": "tu", 43789 "call.you_label": "Tu", 43790 "call.you_suffix": "(tu)", 43791 "call.chat_placeholder": "ra\u0161yk \u017Einut\u0119...", 43792 "call.guest": "sve\u010Dias", 43793 "call.room_fallback": "kambarys", 43794 "call.focus_view": "Fokuso vaizdas", 43795 "call.grid_view": "Tinklelio vaizdas", 43796 "call.swap_main_video": "Sukeisti pagrindin\u012F video", 43797 "call.open_chat": "Atidaryti chat'\u0105", 43798 "call.close_chat": "U\u017Edaryti chat'\u0105", 43799 "call.leave_room": "I\u0161eiti i\u0161 kambario", 43800 "call.confirm_leave": "I\u0161eiti?", 43801 "call.mic_on": "Mikras \u012Fjungtas", 43802 "call.muted_label": "U\u017Emutinta", 43803 "call.camera_off": "Kamera i\u0161jungta", 43804 "call.connect_failed": "Nepavyko prisijungti \u2014 patikrink net\u0105 ir bandyk dar kart\u0105.", 43805 "call.camera_access_failed": "Nepavyko pasiekti kameros. Patikrink nar\u0161ykl\u0117s leidimus ir bandyk v\u0117l.", 43806 "call.recording_failed": "Nepavyko prad\u0117ti \u012Fra\u0161ymo. Skambutis t\u0119sis be jo.", 43807 "call.initialize_failed": "Ka\u017Ekas l\u016B\u017Eo pradedant skambut\u012F. Perkauk puslap\u012F ir bandyk dar kart\u0105.", 43808 "call.participants": "Dalyviai", 43809 "call.open_participants": "Atidaryti dalyvius", 43810 "call.close_participants": "U\u017Edaryti dalyvius", 43811 "call.lock_room": "U\u017Erakinti kambar\u012F", 43812 "call.unlock_room": "Atrakinti kambar\u012F", 43813 "call.locked": "u\u017Erakinta", 43814 "call.unlocked": "atidaryta", 43815 "call.kick_member": "I\u0161mesti i\u0161 kambario", 43816 "call.mute_member": "U\u017Emutinti", 43817 "call.unmute_member": "Atmutinti", 43818 "call.muted_by_host": "U\u017Emutino hostas", 43819 "call.waiting_to_join": "Laukia prisijungimo", 43820 "call.approve": "Patvirtinti", 43821 "call.deny": "Atmesti", 43822 "call.profile_actions": "Profilio veiksmai", 43823 "call.profile_in_room": "Kambaryje", 43824 "call.profile_role_host": "Hostas", 43825 "call.profile_role_you": "Tu", 43826 "call.profile_action_mute": "U\u017Emutinti j\u0173 gars\u0105", 43827 "call.profile_action_mute_meta": "Tik tau \u2014 jie nesu\u017Einos", 43828 "call.profile_action_dm": "1:1 DM", 43829 "call.profile_action_dm_meta": "Prad\u0117k privat\u0173 pokalb\u012F", 43830 "call.profile_action_view": "\u017Di\u016Br\u0117ti vis\u0105 profil\u012F", 43831 "call.profile_action_view_meta": "Bio, kalbos, praeiti skambu\u010Diai", 43832 "call.profile_action_report": "Reportinti", 43833 "call.profile_action_report_meta": "Pa\u017Eym\u0117ti moderatori\u0173 per\u017Ei\u016Brai", 43834 "call.profile_sheet_close": "U\u017Edaryti profilio veiksmus", 43835 "call.profile_open_actions": "Atidaryti profilio veiksmus", 43836 "call.dm_title": "Privati \u017Einut\u0117", 43837 "call.dm_back": "Atgal \u012F veiksmus", 43838 "call.dm_close": "U\u017Edaryti priva\u010Di\u0105 \u017Einut\u0119", 43839 "call.dm_status_online": "Prisijung\u0119s", 43840 "call.dm_in_room_with": "\u0160iame kambaryje", 43841 "call.dm_private_label": "Privatus chat'as", 43842 "call.dm_private_meta": "\u0160ias \u017Einutes matote tik j\u016Bs dviese", 43843 "call.dm_input_placeholder": "Ra\u0161yk priva\u010Di\u0105 \u017Einut\u0119\u2026", 43844 "call.dm_send": "Si\u0173sti", 43845 "call.dm_just_now": "dabar", 43846 "call.dm_seen_just_now": "K\u0105 tik matyta", 43847 "call.dm_typing": "{name} ra\u0161o\u2026", 43848 "call.dm_minimize": "Suma\u017Einti", 43849 "call.dm_active_indicator": "Atidaryti pokalb\u012F", 43850 "call.dm_unread_messages": "{count} neskaityta", 43851 "call.dm_toast_tap_to_open": "Spausk, kad atidarytum", 43852 "call.dm_reopen_aria": "V\u0117l atidaryti pokalb\u012F su {name}", 43853 "home.join_denied": "Hostas tav\u0119s ne\u012Fleido.", 43854 "home.error.room_not_found": "Tokio kambario kodo n\u0117ra.", 43855 "home.error.profile_required": "Susikurk profil\u012F, kad gal\u0117tum t\u0119sti.", 43856 "home.cta.set_up_profile": "Susikurti profil\u012F", 43857 "home.profile_trigger_new": "Spausk ir prid\u0117k info apie save", 43858 "home.profile_trigger_new_aria": "Susikurti profil\u012F", 43859 "home.profile_trigger_edit_aria": "Redaguoti profil\u012F", 43860 "profile.eyebrow_new": "pasisveikink", 43861 "profile.eyebrow_edit": "tavo profilis", 43862 "profile.title_new": "Padaryk j\u012F savo.", 43863 "profile.title_edit": "Redaguoti profil\u012F", 43864 "profile.subtitle": "Keli greiti faktai, kad kiti \u017Einot\u0173, su kuo bendrauja.", 43865 "profile.add_photo": "Prid\u0117ti nuotrauk\u0105", 43866 "profile.add_photo_soon": "nuotraukos greitai bus", 43867 "profile.photo_empty": "spausk ir prid\u0117k nuotrauk\u0105", 43868 "profile.photo_ready": "nuotrauka paruo\u0161ta", 43869 "profile.photo_save_first": "prie\u0161 keliant nuotrauk\u0105, i\u0161saugok profil\u012F", 43870 "profile.photo_crop_caption": "\u012Fr\u0117mink nuotrauk\u0105", 43871 "profile.photo_auto_caption": "tempk ir priartink, o mes i\u0161saugosim automati\u0161kai", 43872 "profile.photo_upload": "\u012Ekelti nuotrauk\u0105", 43873 "profile.photo_replace": "Pakeisti nuotrauk\u0105", 43874 "profile.photo_remove": "Pa\u0161alinti nuotrauk\u0105", 43875 "profile.photo_cancel": "At\u0161aukti", 43876 "profile.photo_save": "I\u0161saugoti nuotrauk\u0105", 43877 "profile.photo_uploading": "Keliama nuotrauka\u2026", 43878 "profile.photo_removing": "\u0160alinama nuotrauka\u2026", 43879 "profile.photo_choose_another": "Pasirinkti kit\u0105", 43880 "profile.photo_drag_hint": "Tempk nuotrauk\u0105 \u012F apskritimo vid\u0173. Pakeitimai i\u0161sisaugos automati\u0161kai.", 43881 "profile.photo_zoom": "Priartinti", 43882 "profile.photo_horizontal": "Horizontalus kirpimas", 43883 "profile.photo_vertical": "Vertikalus kirpimas", 43884 "profile.name_label": "Vardas", 43885 "profile.name_placeholder": "Kaip tave vadinti?", 43886 "profile.gender_label": "A\u0161 esu", 43887 "profile.gender.woman": "Moteris", 43888 "profile.gender.man": "Vyras", 43889 "profile.gender.unspecified": "Nenoriu sakyti", 43890 "profile.bio_label": "Bio", 43891 "profile.bio_optional": "neprivaloma",
43892 "profile.bio_placeholder": "Kalbos, kurias moki, kas patinka, bet kas\u2026", 43893 "profile.cta_new": "Varom", 43894 "profile.cta_edit": "I\u0161saugoti", 43895 "profile.saving": "Saugoma\u2026", 43896 "profile.close": "U\u017Edaryti", 43897 "profile.error.save_failed": "Nepavyko i\u0161saugoti profilio. Bandyk dar kart\u0105.", 43898 "profile.error.avatar_invalid_type": "Rinkis PNG, JPEG, GIF arba WebP nuotrauk\u0105.", 43899 "profile.error.avatar_too_large": "Nuotrauka turi b\u016Bti ma\u017Eesn\u0117 nei 5 MB.", 43900 "profile.error.avatar_too_small": "Nuotrauka turi b\u016Bti bent 96x96 pikseli\u0173.", 43901 "profile.error.avatar_load_failed": "Nepavyko nuskaityti nuotraukos. Bandyk kit\u0105 fail\u0105.", 43902 "profile.error.avatar_failed": "Nepavyko \u012Fkelti nuotraukos. Bandyk dar kart\u0105.", 43903 "profile.error.avatar_remove_failed": "Nepavyko pa\u0161alinti nuotraukos. Bandyk dar kart\u0105.", 43904 "effects.title": "Efektai", 43905 "effects.soft": "\u0160velnus fokusas", 43906 "effects.vignette": "Vinjet\u0117", 43907 "effects.face": "Veido blur'as", 43908 "effects.face_preview_only": "Veido blur'as (tik per\u017Ei\u016Bra)", 43909 "effects.face_viewer_side": "Veido blur'as (\u017Ei\u016Brovo pus\u0117je)", 43910 "effects.face_strength": "Veido blur'o stiprumas", 43911 "effects.grade.off": "I\u0160JUNGTA", 43912 "effects.grade.pop": "RY\u0160KU", 43913 "effects.grade.warm": "\u0160ILTA", 43914 "effects.grade.cool": "\u0160ALTA", 43915 "effects.grade.bw": "J/B", 43916 "camera.off": "kamera i\u0161jungta", 43917 "camera.check": "pasitikrink kamer\u0105", 43918 "camera.retry": "bandyti kamer\u0105 dar kart\u0105", 43919 "camera.ready": "kamera paruo\u0161ta", 43920 "camera.idle.title": "\u012Esijunk kamer\u0105", 43921 "camera.idle.hint": "Papra\u0161ysim nar\u0161ykl\u0117s leidimo, kai b\u016Bsi pasiruo\u0161\u0119s.", 43922 "camera.idle.button": "\u012Ejungti kamer\u0105", 43923 "camera.status.idle": "Laukiame tav\u0119s", 43924 "camera.status.off": "Kamera i\u0161jungta", 43925 "camera.status.loading": "Pra\u0161oma prieigos prie kameros...", 43926 "camera.status.denied": "Leisk naudoti kamer\u0105 nar\u0161ykl\u0117je ir bandyk dar kart\u0105.", 43927 "camera.status.error": "Nepavyko u\u017Ekrauti kameros vaizdo. Bandyk dar kart\u0105.", 43928 "camera.status.unsupported": "\u0160i nar\u0161ykl\u0117 neleid\u017Eia naudoti kameros.", 43929 "camera.status.insecure": "Kamerai reikia HTTPS arba localhost.", 43930 "camera.status.attach_failed": "Nepavyko paleisti kameros vaizdo. Bandyk dar kart\u0105.", 43931 "camera.guest_name_placeholder": "Sve\u010Dio vardas", 43932 "camera.flip": "Apversti kamer\u0105", 43933 "camera.save_name": "I\u0161saugoti", 43934 "camera.edit_name": "Keisti vard\u0105", 43935 "mic.on": "I\u0161jungti mikr\u0105", 43936 "mic.off": "\u012Ejungti mikr\u0105", 43937 "video.on": "I\u0161jungti kamer\u0105", 43938 "video.off": "\u012Ejungti kamer\u0105", 43939 "chat.title": "chat'as", 43940 "chat.close": "U\u017Edaryti chat'\u0105", 43941 "chat.loading": "kraunama...", 43942 "chat.load_earlier": "u\u017Ekrauti senesnes", 43943 "chat.empty": "kol kas \u017Einu\u010Di\u0173 n\u0117ra", 43944 "chat.send_error": "\u017Dinut\u0117 nei\u0161sisiunt\u0117 \u2014 bandyk dar kart\u0105.", 43945 "chat.input_placeholder": "ra\u0161yk \u017Einut\u0119...", 43946 "room.host": "Hostas", 43947 "app.room_default_title": "Sukurti kambar\u012F", 43948 "app.chat_connection_rejected": "Nepavyko prisijungti prie chat'o \u2014 pabandyk perkrauti.", 43949 "app.copy_failed": "Nepavyko nukopijuoti nuorodos. Pabandyk pa\u017Eym\u0117ti ir nukopijuoti ranka.", 43950 "app.chat_not_connected": "Chat'as dar neprisijung\u0117. Palauk sekund\u0119 ir bandyk v\u0117l.", 43951 "footer.terms": "Taisykl\u0117s ir s\u0105lygos", 43952 "footer.copyright": "\xA9 2026 Yano.AI" 43953}; 43954
43955// app/javascript/yano/locales/lv.js 43956var lv_default = { 43957 "home.heading.default": "lec iek\u0161\u0101 zvan\u0101", 43958 "home.heading.loading": "Veram va\u013C\u0101 istabu...", 43959 "home.heading.join": "gatavs pievienoties?", 43960 "home.heading.joined": "esi iek\u0161\u0101", 43961 "home.heading.pending": "gaid\u0101m hostu", 43962 "home.body.default": "uztaisi istabu, iemet saiti, \u010Dilo.", 43963 "home.body.loading": "sekundi, iel\u0101d\u0113jam istabu.", 43964 "home.body.join": "p\u0101rbaudi kameru un miku, un lec iek\u0161\u0101.", 43965 "home.body.joined": "istaba ir gais\u0101. padalies ar saiti vai vienk\u0101r\u0161i s\u0101c.", 43966 "home.body.joined_in_room": "esi istab\u0101 \u2014 lec iek\u0161\u0101 vai padalies ar saiti.", 43967 "home.body.pending": "istaba ir sl\u0113gta. hosts tevi ielaid\u012Bs.", 43968 "home.cta.create": "Izveidot istabu", 43969 "home.cta.join": "Pievienoties", 43970 "home.cta.enter": "Ieiet istab\u0101", 43971 "home.cta.creating": "Veidojam...", 43972 "home.cta.joining": "Pievienojamies...", 43973 "home.cta.opening": "Atveram...", 43974 "home.cta.pending": "Gaid\u0101m apstiprin\u0101jumu...", 43975 "home.copy_link": "kop\u0113t saiti", 43976 "home.copied": "nokop\u0113ts!", 43977 "home.leave": "pamest istabu", 43978 "home.back": "atpaka\u013C", 43979 "home.no_participants": "te v\u0113l neviena nav", 43980 "home.join_by_code": "pievienoties ar kodu", 43981 "home.code_placeholder": "ievadi kodu", 43982 "home.name_placeholder": "tavs v\u0101rds", 43983 "home.people_one": "cilv\u0113ks", 43984 "home.people_other": "cilv\u0113ki", 43985 "home.marketing.invite.title": "Uztaisi istabu,\npadalies ar saiti.", 43986 "home.marketing.invite.body": "S\u0101c ar vienu klik\u0161\u0137i. Aizs\u016Bti saiti draugiem un jebkur\u0161 var pievienoties \u2014 bez lejupiel\u0101d\u0113m un re\u0123istr\u0101cijas.", 43987 "home.marketing.invite.preview_url": "yano.ai/ISTABA", 43988 "home.marketing.look.title": "Izskaties,\nk\u0101 gribi.", 43989 "home.marketing.look.body": "Kr\u0101su filtri, m\u012Bkstin\u0101\u0161ana, vinjete \u2014 vai piln\u012Bb\u0101 aizmiglo seju. Tava kamera, tavs stils.", 43990 "home.marketing.host.title": "Tava telpa,\ntavi noteikumi.", 43991 "home.marketing.host.body": "Aizsl\u0113dz istabu, izsl\u0113dz k\u0101dam ska\u0146u vai izmet pavisam. Hosts kontrol\u0113 situ\u0101ciju.", 43992 "home.marketing.host.locked": "Istaba sl\u0113gta", 43993 "home.marketing.host.waiting_to_join": "Gaida rind\u0101", 43994 "home.marketing.host.wants_to_join": "grib pievienoties", 43995 "home.marketing.anything.title": "Re\u0101li jebkam.", 43996 "home.marketing.anything.body": "M\u0101c\u012Bb\u0101m, sp\u0113\u013Cu vakariem, darba standupiem, kop\u012Bgai skat\u012B\u0161anai \u2014 vai vienk\u0101r\u0161i \u010Dilam.", 43997 "home.marketing.use_case.study_group": "\u{1F4DA} m\u0101c\u012Bbu grupa", 43998 "home.marketing.use_case.game_night": "\u{1F3AE} sp\u0113\u013Cu vakars", 43999 "home.marketing.use_case.standup": "\u{1F4BC} standups", 44000 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 44001 "home.marketing.use_case.catch_up": "\u2615 pap\u013C\u0101p\u0101t", 44002 "home.marketing.use_case.jam_session": "\u{1F3B8} d\u017Eems", 44003 "home.marketing.use_case.book_club": "\u{1F4D6}
44003 gr\u0101matu klubs", 44004 "home.marketing.use_case.coworking": "\u{1F4BB} kopstr\u0101de", 44005 "ended.heading": "zvans beidzies", 44006 "ended.left": "tu pameti istabu.", 44007 "ended.room_ended": "{title} tev ir beidzies.", 44008 "ended.rejoin": "pievienoties atkal", 44009 "ended.rejoining": "pievienojamies...", 44010 "ended.home": "atpaka\u013C uz s\u0101kumu", 44011 "call.connecting": "savienojam", 44012 "call.waiting": "gaid\u0101m p\u0101r\u0113jos", 44013 "call.invite_code": "iel\u016Bguma kods", 44014 "call.audio_on": "ska\u0146a iesl\u0113gta", 44015 "call.muted": "izsl\u0113gta ska\u0146a", 44016 "call.listening": "Klaus\u0101s", 44017 "call.audio_muted": "Ska\u0146a izsl\u0113gta", 44018 "call.speaking": "run\u0101", 44019 "call.you": "tu", 44020 "call.you_label": "Tu", 44021 "call.you_suffix": "(tu)", 44022 "call.chat_placeholder": "uzraksti zi\u0146u...", 44023 "call.guest": "viesis", 44024 "call.room_fallback": "istaba", 44025 "call.focus_view": "Fokusa skats", 44026 "call.grid_view": "Re\u017E\u0123a skats", 44027 "call.swap_main_video": "Main\u012Bt galveno video", 44028 "call.open_chat": "Atv\u0113rt \u010Datu", 44029 "call.close_chat": "Aizv\u0113rt \u010Datu", 44030 "call.leave_room": "Pamest istabu", 44031 "call.confirm_leave": "Pamest?", 44032 "call.mic_on": "Miks iesl\u0113gts", 44033 "call.muted_label": "Ska\u0146a izsl\u0113gta", 44034 "call.camera_off": "Kamera izsl\u0113gta", 44035 "call.connect_failed": "Neizdev\u0101s savienoties \u2014 p\u0101rbaudi netu un m\u0113\u0123ini v\u0113lreiz.", 44036 "call.camera_access_failed": "Netiekam kl\u0101t kamerai. P\u0101rbaudi p\u0101rl\u016Bka at\u013Caujas un m\u0113\u0123ini v\u0113lreiz.", 44037 "call.recording_failed": "Neizdev\u0101s s\u0101kt ierakstu. Zvans turpin\u0101sies bez t\u0101.", 44038 "call.initialize_failed": "Kaut kas nog\u0101ja greizi s\u0101kot zvanu. P\u0101rl\u0101d\u0113 lapu un m\u0113\u0123ini v\u0113lreiz.", 44039 "call.participants": "Dal\u012Bbnieki", 44040 "call.open_participants": "Atv\u0113rt dal\u012Bbniekus", 44041 "call.close_participants": "Aizv\u0113rt dal\u012Bbniekus", 44042 "call.lock_room": "Aizsl\u0113gt istabu", 44043 "call.unlock_room": "Atsl\u0113gt istabu", 44044 "call.locked": "aizsl\u0113gta", 44045 "call.unlocked": "atv\u0113rta", 44046 "call.kick_member": "Izmest no istabas", 44047 "call.mute_member": "Izsl\u0113gt ska\u0146u", 44048 "call.unmute_member": "Iesl\u0113gt ska\u0146u", 44049 "call.muted_by_host": "Hosts izsl\u0113dza ska\u0146u", 44050 "call.waiting_to_join": "Gaida, lai pievienotos", 44051 "call.approve": "Apstiprin\u0101t", 44052 "call.deny": "Noraid\u012Bt", 44053 "call.profile_actions": "Profila darb\u012Bbas", 44054 "call.profile_in_room": "Istab\u0101", 44055 "call.profile_role_host": "Hosts", 44056 "call.profile_role_you": "Tu", 44057 "call.profile_action_mute": "Izsl\u0113gt vi\u0146am ska\u0146u", 44058 "call.profile_action_mute_meta": "Tikai tev \u2014 vi\u0146\u0161 nezin\u0101s", 44059 "call.profile_action_dm": "1:1 DM", 44060 "call.profile_action_dm_meta": "S\u0101c priv\u0101tu \u010Datu", 44061 "call.profile_action_view": "Skat\u012Bt pilnu profilu", 44062 "call.profile_action_view_meta": "Bio, valodas, iepriek\u0161\u0113jie zvani", 44063 "call.profile_action_report": "Zi\u0146ot", 44064 "call.profile_action_report_meta": "Atz\u012Bm\u0113t moder\u0101cijai", 44065 "call.profile_sheet_close": "Aizv\u0113rt profila darb\u012Bbas", 44066 "call.profile_open_actions": "Atv\u0113rt profila darb\u012Bbas", 44067 "call.dm_title": "Priv\u0101t\u0101 zi\u0146a", 44068 "call.dm_back": "Atpaka\u013C uz darb\u012Bb\u0101m", 44069 "call.dm_close": "Aizv\u0113rt priv\u0101to zi\u0146u", 44070 "call.dm_status_online": "Online", 44071 "call.dm_in_room_with": "\u0160aj\u0101 istab\u0101", 44072 "call.dm_private_label": "Priv\u0101ts \u010Dats", 44073 "call.dm_private_meta": "Tikai j\u016Bs abi redzat \u0161\u012Bs zi\u0146as", 44074 "call.dm_input_placeholder": "S\u016Bti priv\u0101tu zi\u0146u\u2026", 44075 "call.dm_send": "S\u016Bt\u012Bt", 44076 "call.dm_just_now": "tikko", 44077 "call.dm_seen_just_now": "Redz\u0113ts tikko", 44078 "call.dm_typing": "{name} raksta\u2026", 44079 "call.dm_minimize": "Minimiz\u0113t", 44080 "call.dm_active_indicator": "Atv\u0113rt sarunu", 44081 "call.dm_unread_messages": "{count} neizlas\u012Btas", 44082 "call.dm_toast_tap_to_open": "Spied, lai atv\u0113rtu", 44083 "call.dm_reopen_aria": "Atv\u0113rt sarunu ar {name}", 44084 "home.join_denied": "Hosts tevi neielaida.", 44085 "home.error.room_not_found": "T\u0101ds istabas kods neeksist\u0113.", 44086 "home.error.profile_required": "Aizpildi profilu, lai turpin\u0101tu.", 44087 "home.cta.set_up_profile": "Aizpildi profilu", 44088 "home.profile_trigger_new": "Spied, lai pievienotu info", 44089 "home.profile_trigger_new_aria": "Aizpild\u012Bt profilu", 44090 "home.profile_trigger_edit_aria": "Redi\u0123\u0113t profilu", 44091 "profile.eyebrow_new": "pasaki \u010Dau", 44092 "profile.eyebrow_edit": "tavs profils", 44093 "profile.title_new": "Uztaisi pa savam.", 44094 "profile.title_edit": "Redi\u0123\u0113t profilu", 44095 "profile.subtitle": "P\u0101ris deta\u013Cas, lai citi zina, ar ko run\u0101.", 44096 "profile.add_photo": "Pievienot bildi", 44097 "profile.add_photo_soon": "bildes b\u016Bs dr\u012Bz", 44098 "profile.photo_empty": "spied, lai pievienotu bildi", 44099 "profile.photo_ready": "bilde gatava", 44100 "profile.photo_save_first": "saglaba profilu pirms liec bildi", 44101 "profile.photo_crop_caption": "iekadr\u0113 bildi", 44102 "profile.photo_auto_caption": "pab\u012Bdi un pievelc, m\u0113s saglab\u0101sim autom\u0101tiski", 44103 "profile.photo_upload": "Aug\u0161upiel\u0101d\u0113t bildi", 44104 "profile.photo_replace": "Nomain\u012Bt bildi", 44105 "profile.photo_remove": "No\u0146emt bildi", 44106 "profile.photo_cancel": "Atcelt", 44107 "profile.photo_save": "Saglab\u0101t bildi", 44108 "profile.photo_uploading": "L\u0101d\u0113jam bildi\u2026", 44109 "profile.photo_removing": "Dz\u0113\u0161am bildi\u2026", 44110 "profile.photo_choose_another": "Izv\u0113l\u0113ties citu", 44111 "profile.photo_drag_hint": "Ievelc bildi apl\u012B. Izmai\u0146as saglab\u0101jas autom\u0101tiski.", 44112 "profile.photo_zoom": "Pievilkt", 44113 "profile.photo_horizontal": "Horizont\u0101li", 44114 "profile.photo_vertical": "Vertik\u0101li", 44115 "profile.name_label": "V\u0101rds", 44116 "profile.name_placeholder": "K\u0101 tevi saukt?", 44117 "profile.gender_label": "Es esmu", 44118 "profile.gender.woman": "Sieviete", 44119 "profile.gender.man": "V\u012Brietis", 44120 "profile.gender.unspecified": "Lab\u0101k neteik\u0161u", 44121 "profile.bio_label": "Bio", 44122 "profile.bio_optional": "neoblig\u0101ti", 44123 "profile.bio_placeholder": "Valodas, ko zini, kas tev pat\u012Bk, jebkas\u2026", 44124 "profile.cta_new": "Aiziet", 44125 "profile.cta_edit": "Saglab\u0101t", 44126 "profile.saving": "Saglab\u0101jam\u2026",
44127 "profile.close": "Aizv\u0113rt", 44128 "profile.error.save_failed": "Neizdev\u0101s saglab\u0101t profilu. M\u0113\u0123ini v\u0113lreiz.", 44129 "profile.error.avatar_invalid_type": "Izv\u0113lies PNG, JPEG, GIF vai WebP bildi.", 44130 "profile.error.avatar_too_large": "Izv\u0113lies bildi, kas maz\u0101ka par 5 MB.", 44131 "profile.error.avatar_too_small": "Izv\u0113lies bildi, kas ir vismaz 96x96 pikse\u013Ci.", 44132 "profile.error.avatar_load_failed": "Nevar\u0113j\u0101m nolas\u012Bt \u0161o bildi. M\u0113\u0123ini citu failu.", 44133 "profile.error.avatar_failed": "Neizdev\u0101s iel\u0101d\u0113t bildi. M\u0113\u0123ini v\u0113lreiz.", 44134 "profile.error.avatar_remove_failed": "Neizdev\u0101s no\u0146emt bildi. M\u0113\u0123ini v\u0113lreiz.", 44135 "effects.title": "Efekti", 44136 "effects.soft": "M\u012Bksts fokuss", 44137 "effects.vignette": "Vinjete", 44138 "effects.face": "Aizmiglota seja", 44139 "effects.face_preview_only": "Aizmiglota seja (tikai priek\u0161skat\u012Bjums)", 44140 "effects.face_viewer_side": "Aizmiglota seja (skat\u012Bt\u0101jiem)", 44141 "effects.face_strength": "Aizmiglojuma stiprums", 44142 "effects.grade.off": "OFF", 44143 "effects.grade.pop": "POP", 44144 "effects.grade.warm": "WARM", 44145 "effects.grade.cool": "COOL", 44146 "effects.grade.bw": "B&W", 44147 "camera.off": "kamera izsl\u0113gta", 44148 "camera.check": "p\u0101rbaudi kameru", 44149 "camera.retry": "m\u0113\u0123in\u0101t v\u0113lreiz", 44150 "camera.ready": "kamera gatava", 44151 "camera.idle.title": "Iesl\u0113dz kameru", 44152 "camera.idle.hint": "M\u0113s papras\u012Bsim p\u0101rl\u016Bkam at\u013Cauju, kad b\u016Bsi gatavs.", 44153 "camera.idle.button": "Iesl\u0113gt kameru", 44154 "camera.status.idle": "Gaid\u0101m tevi", 44155 "camera.status.off": "Kamera ir izsl\u0113gta", 44156 "camera.status.loading": "Pras\u0101m pieeju kamerai...", 44157 "camera.status.denied": "At\u013Cauj kameru p\u0101rl\u016Bk\u0101 un m\u0113\u0123ini v\u0113lreiz.", 44158 "camera.status.error": "Kameras priek\u0161skat\u012Bjums neizdev\u0101s. M\u0113\u0123ini v\u0113lreiz.", 44159 "camera.status.unsupported": "\u0160is p\u0101rl\u016Bks neatbalsta kameru.", 44160 "camera.status.insecure": "Kamerai vajag HTTPS vai localhost.", 44161 "camera.status.attach_failed": "Neizdev\u0101s palaist kameru. M\u0113\u0123ini v\u0113lreiz.", 44162 "camera.guest_name_placeholder": "Viesa v\u0101rds", 44163 "camera.flip": "Apgriezt kameru", 44164 "camera.save_name": "Saglab\u0101t", 44165 "camera.edit_name": "Redi\u0123\u0113t v\u0101rdu", 44166 "mic.on": "Izsl\u0113gt mikrofonu", 44167 "mic.off": "Iesl\u0113gt mikrofonu", 44168 "video.on": "Izsl\u0113gt kameru", 44169 "video.off": "Iesl\u0113gt kameru", 44170 "chat.title": "\u010Dats", 44171 "chat.close": "Aizv\u0113rt \u010Datu", 44172 "chat.loading": "l\u0101d\u0113jas...", 44173 "chat.load_earlier": "iel\u0101d\u0113t iepriek\u0161\u0113j\u0101s", 44174 "chat.empty": "te v\u0113l nav zi\u0146u", 44175 "chat.send_error": "Zi\u0146a neaizg\u0101ja \u2014 m\u0113\u0123ini v\u0113lreiz.", 44176 "chat.input_placeholder": "raksti zi\u0146u...", 44177 "room.host": "Hosts", 44178 "app.room_default_title": "Izveidot istabu", 44179 "app.chat_connection_rejected": "\u010Cats nevar\u0113ja savienoties \u2014 pam\u0113\u0123ini p\u0101rl\u0101d\u0113t lapu.", 44180 "app.copy_failed": "Neizdev\u0101s nokop\u0113t saiti. Pam\u0113\u0123ini iez\u012Bm\u0113t un nokop\u0113t manu\u0101li.", 44181 "app.chat_not_connected": "\u010Cats v\u0113l nav savienojies. Pagaidi mirkli un m\u0113\u0123ini v\u0113lreiz.", 44182 "footer.terms": "Noteikumi un nosac\u012Bjumi", 44183 "footer.copyright": "\xA9 2026 Yano.AI" 44184}; 44185
44186// app/javascript/yano/locales/nl.js 44187var nl_default = { 44188 "home.heading.default": "join een call", 44189 "home.heading.loading": "Room openen...", 44190 "home.heading.join": "ready om te joinen?", 44191 "home.heading.joined": "je bent binnen", 44192 "home.heading.pending": "wachten op de host", 44193 "home.body.default": "maak een room, drop de link, vibe.", 44194 "home.body.loading": "sec, even de room fixen.", 44195 "home.body.join": "check je cam en mic, en jump erin.", 44196 "home.body.joined": "room is live. deel de link of let's go.", 44197 "home.body.joined_in_room": "in de room \u2014 jump erin of deel de link.", 44198 "home.body.pending": "de room is gelockt. de host laat je zo binnen.", 44199 "home.cta.create": "Maak room", 44200 "home.cta.join": "Join room", 44201 "home.cta.enter": "Enter room", 44202 "home.cta.creating": "Maken...", 44203 "home.cta.joining": "Joinen...", 44204 "home.cta.opening": "Openen...", 44205 "home.cta.pending": "Wachten op approval...", 44206 "home.copy_link": "kopieer link", 44207 "home.copied": "gekopieerd!", 44208 "home.leave": "leave room", 44209 "home.back": "terug", 44210 "home.no_participants": "nog niemand hier", 44211 "home.join_by_code": "join met invite code", 44212 "home.code_placeholder": "vul code in", 44213 "home.name_placeholder": "jouw naam", 44214 "home.people_one": "persoon", 44215 "home.people_other": "mensen", 44216 "home.marketing.invite.title": "Maak een room,\ndeel de link.", 44217 "home.marketing.invite.body": "E\xE9n tap en je bent live. Deel de link met je vrienden en iedereen kan joinen \u2014 geen downloads, geen sign-ups.", 44218 "home.marketing.invite.preview_url": "yano.ai/ROOM", 44219 "home.marketing.look.title": "Zie eruit\nzoals jij wilt.", 44220 "home.marketing.look.body": "Color grading, softening, vignette \u2014 of blur je gezicht helemaal. Jouw camera, jouw look.", 44221 "home.marketing.host.title": "Jouw space,\njouw regels.", 44222 "home.marketing.host.body": "Lock de room, mute iemand, of kick ze eruit. De host houdt de controle.", 44223 "home.marketing.host.locked": "Room gelockt", 44224 "home.marketing.host.waiting_to_join": "Wachten om te joinen", 44225 "home.marketing.host.wants_to_join": "wil joinen", 44226 "home.marketing.anything.title": "Echt voor alles.", 44227 "home.marketing.anything.body": "Study sessies, game nights, work standups, samen dingen kijken \u2014 of gewoon chillen.", 44228 "home.marketing.use_case.study_group": "\u{1F4DA} study group", 44229 "home.marketing.use_case.game_night": "\u{1F3AE} game night", 44230 "home.marketing.use_case.standup": "\u{1F4BC} standup", 44231 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 44232 "home.marketing.use_case.catch_up": "\u2615 catch up", 44233 "home.marketing.use_case.jam_session": "\u{1F3B8} jam sessie", 44234 "home.marketing.use_case.book_club": "\u{1F4D6}
44234 boekenclub", 44235 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 44236 "ended.heading": "call voorbij", 44237 "ended.left": "je bent geleaved.", 44238 "ended.room_ended": "{title} is voorbij voor jou.", 44239 "ended.rejoin": "rejoin", 44240 "ended.rejoining": "rejoinen...", 44241 "ended.home": "terug naar home", 44242 "call.connecting": "verbinden", 44243 "call.waiting": "wachten op de rest", 44244 "call.invite_code": "invite code", 44245 "call.audio_on": "audio aan", 44246 "call.muted": "gemute", 44247 "call.listening": "Luistert", 44248 "call.audio_muted": "Audio gemute", 44249 "call.speaking": "praat", 44250 "call.you": "jij", 44251 "call.you_label": "Jij", 44252 "call.you_suffix": "(jij)", 44253 "call.chat_placeholder": "stuur een berichtje...", 44254 "call.guest": "gast", 44255 "call.room_fallback": "room", 44256 "call.focus_view": "Focus view", 44257 "call.grid_view": "Grid view", 44258 "call.swap_main_video": "Wissel main video", 44259 "call.open_chat": "Open chat", 44260 "call.close_chat": "Sluit chat", 44261 "call.leave_room": "Leave room", 44262 "call.confirm_leave": "Leaven?", 44263 "call.mic_on": "Mic aan", 44264 "call.muted_label": "Gemute", 44265 "call.camera_off": "Camera uit", 44266 "call.connect_failed": "Verbinding mislukt \u2014 check je internet en probeer het nog eens.", 44267 "call.camera_access_failed": "Kon niet bij je camera. Check je browser permissies en probeer opnieuw.", 44268 "call.recording_failed": "Opnemen is mislukt. De call gaat verder zonder opname.", 44269 "call.initialize_failed": "Er ging iets mis met het starten van de call. Refresh even en probeer opnieuw.", 44270 "call.participants": "Deelnemers", 44271 "call.open_participants": "Open deelnemers", 44272 "call.close_participants": "Sluit deelnemers", 44273 "call.lock_room": "Lock room", 44274 "call.unlock_room": "Unlock room", 44275 "call.locked": "gelockt", 44276 "call.unlocked": "open", 44277 "call.kick_member": "Kick uit de room", 44278 "call.mute_member": "Mute", 44279 "call.unmute_member": "Unmute", 44280 "call.muted_by_host": "Gemute door de host", 44281 "call.waiting_to_join": "Wacht om te joinen", 44282 "call.approve": "Approve", 44283 "call.deny": "Deny", 44284 "call.profile_actions": "Profiel acties", 44285 "call.profile_in_room": "In de room", 44286 "call.profile_role_host": "Host", 44287 "call.profile_role_you": "Jij", 44288 "call.profile_action_mute": "Mute hun audio", 44289 "call.profile_action_mute_meta": "Alleen voor jou \u2014 ze merken er niks van", 44290 "call.profile_action_dm": "1:1 DM", 44291 "call.profile_action_dm_meta": "Start een priv\xE9 chat", 44292 "call.profile_action_view": "Bekijk heel profiel", 44293 "call.profile_action_view_meta": "Bio, talen, eerdere sessies", 44294 "call.profile_action_report": "Report", 44295 "call.profile_action_report_meta": "Rapporteer voor moderatie", 44296 "call.profile_sheet_close": "Sluit profiel acties", 44297 "call.profile_open_actions": "Open profiel acties", 44298 "call.dm_title": "Direct message", 44299 "call.dm_back": "Terug naar acties", 44300 "call.dm_close": "Sluit direct message", 44301 "call.dm_status_online": "Online", 44302 "call.dm_in_room_with": "In deze room", 44303 "call.dm_private_label": "Priv\xE9 chat", 44304 "call.dm_private_meta": "Alleen jullie twee kunnen deze messages zien", 44305 "call.dm_input_placeholder": "Stuur een priv\xE9 berichtje\u2026", 44306 "call.dm_send": "Stuur", 44307 "call.dm_just_now": "nu", 44308 "call.dm_seen_just_now": "Net gezien", 44309 "call.dm_typing": "{name} is aan het typen\u2026", 44310 "call.dm_minimize": "Minimaliseer", 44311 "call.dm_active_indicator": "Open gesprek", 44312 "call.dm_unread_messages": "{count} ongelezen", 44313 "call.dm_toast_tap_to_open": "Tap om te openen", 44314 "call.dm_reopen_aria": "Heropen gesprek met {name}", 44315 "home.join_denied": "De host liet je niet binnen.", 44316 "home.error.room_not_found": "Die room code bestaat niet.", 44317 "home.error.profile_required": "Stel je profiel in om door te gaan.", 44318 "home.cta.set_up_profile": "Stel je profiel in", 44319 "home.profile_trigger_new": "Tap om je info toe te voegen", 44320 "home.profile_trigger_new_aria": "Stel je profiel in", 44321 "home.profile_trigger_edit_aria": "Edit je profiel", 44322 "profile.eyebrow_new": "say hi", 44323 "profile.eyebrow_edit": "jouw profiel", 44324 "profile.title_new": "Maak het van jou.", 44325 "profile.title_edit": "Edit profiel", 44326 "profile.subtitle": "Even wat snelle info zodat mensen weten met wie ze meeten.", 44327 "profile.add_photo": "Voeg foto toe", 44328 "profile.add_photo_soon": "foto's komen eraan", 44329 "profile.photo_empty": "tap om een foto toe te voegen", 44330 "profile.photo_ready": "foto ready", 44331 "profile.photo_save_first": "save je profiel voordat je een foto uploadt", 44332 "profile.photo_crop_caption": "frame je foto", 44333 "profile.photo_auto_caption": "drag en zoom, we saven het automatisch", 44334 "profile.photo_upload": "Upload foto", 44335 "profile.photo_replace": "Vervang foto", 44336 "profile.photo_remove": "Verwijder foto", 44337 "profile.photo_cancel": "Cancel", 44338 "profile.photo_save": "Save foto", 44339 "profile.photo_uploading": "Foto uploaden\u2026", 44340 "profile.photo_removing": "Foto verwijderen\u2026", 44341 "profile.photo_choose_another": "Kies een andere", 44342 "profile.photo_drag_hint": "Sleep de foto in de cirkel. Veranderingen worden automatisch gesaved.", 44343 "profile.photo_zoom": "Zoom", 44344 "profile.photo_horizontal": "Horizontaal croppen", 44345 "profile.photo_vertical": "Verticaal croppen",
44346 "profile.name_label": "Naam", 44347 "profile.name_placeholder": "Hoe mogen we je noemen?", 44348 "profile.gender_label": "Ik ben", 44349 "profile.gender.woman": "Vrouw", 44350 "profile.gender.man": "Man", 44351 "profile.gender.unspecified": "Zeg ik liever niet", 44352 "profile.bio_label": "Bio", 44353 "profile.bio_optional": "optioneel", 44354 "profile.bio_placeholder": "Talen die je spreekt, wat je leuk vindt, alles mag\u2026", 44355 "profile.cta_new": "Let\u2019s go", 44356 "profile.cta_edit": "Save changes", 44357 "profile.saving": "Saven\u2026", 44358 "profile.close": "Sluiten", 44359 "profile.error.save_failed": "Kon je profiel niet saven. Probeer het nog eens.", 44360 "profile.error.avatar_invalid_type": "Kies een PNG, JPEG, GIF of WebP image.", 44361 "profile.error.avatar_too_large": "Kies een image kleiner dan 5 MB.", 44362 "profile.error.avatar_too_small": "Kies een image van minimaal 96 bij 96 pixels.", 44363 "profile.error.avatar_load_failed": "We konden die image niet lezen. Probeer een andere file.", 44364 "profile.error.avatar_failed": "Kon je foto niet uploaden. Probeer het nog eens.", 44365 "profile.error.avatar_remove_failed": "Kon je foto niet verwijderen. Probeer het nog eens.", 44366 "effects.title": "Effecten", 44367 "effects.soft": "Soft focus", 44368 "effects.vignette": "Vignette", 44369 "effects.face": "Face blur", 44370 "effects.face_preview_only": "Face blur (alleen preview)", 44371 "effects.face_viewer_side": "Face blur (viewer-kant)", 44372 "effects.face_strength": "Face blur sterkte", 44373 "effects.grade.off": "UIT", 44374 "effects.grade.pop": "POP", 44375 "effects.grade.warm": "WARM", 44376 "effects.grade.cool": "COOL", 44377 "effects.grade.bw": "Z&W", 44378 "camera.off": "camera is uit", 44379 "camera.check": "check je camera", 44380 "camera.retry": "probeer camera opnieuw", 44381 "camera.ready": "camera ready", 44382 "camera.idle.title": "Zet je camera aan", 44383 "camera.idle.hint": "We vragen je browser om toegang als je er klaar voor bent.", 44384 "camera.idle.button": "Zet camera aan", 44385 "camera.status.idle": "Wachten op jou", 44386 "camera.status.off": "Camera is uit", 44387 "camera.status.loading": "Camera toegang vragen...", 44388 "camera.status.denied": "Geef camera toegang in je browser en probeer het nog eens.", 44389 "camera.status.error": "Camera preview mislukt. Probeer het nog eens.", 44390 "camera.status.unsupported": "Deze browser ondersteunt geen camera toegang.", 44391 "camera.status.insecure": "Camera toegang heeft HTTPS of localhost nodig.", 44392 "camera.status.attach_failed": "Camera preview kon niet starten. Probeer het nog eens.", 44393 "camera.guest_name_placeholder": "Gast naam", 44394 "camera.flip": "Wissel camera", 44395 "camera.save_name": "Save", 44396 "camera.edit_name": "Edit naam", 44397 "mic.on": "Zet microfoon uit", 44398 "mic.off": "Zet microfoon aan", 44399 "video.on": "Zet camera uit", 44400 "video.off": "Zet camera aan", 44401 "chat.title": "chat", 44402 "chat.close": "Sluit chat", 44403 "chat.loading": "laden...", 44404 "chat.load_earlier": "laad oudere", 44405 "chat.empty": "nog geen berichtjes", 44406 "chat.send_error": "Berichtje niet verstuurd \u2014 probeer het nog eens.", 44407 "chat.input_placeholder": "typ een berichtje...", 44408 "room.host": "Host", 44409 "app.room_default_title": "Maak een room", 44410 "app.chat_connection_rejected": "Chat kon niet verbinden \u2014 probeer te refreshen.", 44411 "app.copy_failed": "Kon de link niet kopi\xEBren. Selecteer 'm en kopieer handmatig.", 44412 "app.chat_not_connected": "Chat is nog niet verbonden. Wacht heel even en probeer het nog eens.", 44413 "footer.terms": "Voorwaarden", 44414 "footer.copyright": "\xA9 2026 Yano.AI" 44415}; 44416
44417// app/javascript/yano/locales/pl.js 44418var pl_default = { 44419 "home.heading.default": "wbijaj na calla", 44420 "home.heading.loading": "Otwieranie pokoju...", 44421 "home.heading.join": "wbijasz?", 44422 "home.heading.joined": "jeste\u015B w \u015Brodku", 44423 "home.heading.pending": "czekamy na hosta", 44424 "home.body.default": "stw\xF3rz pok\xF3j, rzu\u0107 linkiem, chilluj.", 44425 "home.body.loading": "sekunda, ogarniam pok\xF3j.", 44426 "home.body.join": "sprawd\u017A kamerk\u0119 i mikrofon, i wbijaj.", 44427 "home.body.joined": "pok\xF3j odpalony. udost\u0119pnij link albo po prostu dzia\u0142aj.", 44428 "home.body.joined_in_room": "jeste\u015B w pokoju \u2014 wbijaj albo udost\u0119pnij link.", 44429 "home.body.pending": "pok\xF3j jest zamkni\u0119ty. host musi ci\u0119 wpu\u015Bci\u0107.", 44430 "home.cta.create": "Stw\xF3rz pok\xF3j", 44431 "home.cta.join": "Do\u0142\u0105cz do pokoju", 44432 "home.cta.enter": "Wejd\u017A do pokoju", 44433 "home.cta.creating": "Tworzenie...", 44434 "home.cta.joining": "Do\u0142\u0105czanie...", 44435 "home.cta.opening": "Otwieranie...", 44436 "home.cta.pending": "Czekam na wpuszczenie...", 44437 "home.copy_link": "skopiuj link", 44438 "home.copied": "skopiowane!", 44439 "home.leave": "wyjd\u017A z pokoju", 44440 "home.back": "wr\xF3\u0107", 44441 "home.no_participants": "pusto tu", 44442 "home.join_by_code": "do\u0142\u0105cz przez kod", 44443 "home.code_placeholder": "wpisz kod", 44444 "home.name_placeholder": "twoje imi\u0119", 44445 "home.people_one": "osoba", 44446 "home.people_other": "osoby", 44447 "home.marketing.invite.title": "Stw\xF3rz pok\xF3j,\nwy\u015Blij link.", 44448 "home.marketing.invite.body": "Jedno klikni\u0119cie i gotowe. Wy\u015Blij link znajomym i ka\u017Cdy mo\u017Ce wbi\u0107 \u2014 bez pobierania i zak\u0142adania konta.", 44449 "home.marketing.invite.preview_url": "yano.ai/POKOJ", 44450 "home.marketing.look.title": "Wygl\u0105daj jak\nchcesz.", 44451 "home.marketing.look.body": "Kolorki, wyg\u0142adzanie, winieta \u2014 albo ca\u0142kowity blur na twarz. Twoja kamerka, tw\xF3j vibe.", 44452 "home.marketing.host.title": "Tw\xF3j pok\xF3j,\ntwoje zasady.", 44453 "home.marketing.host.body": "Zamknij pok\xF3j, wycisz kogo\u015B albo go wyrzu\u0107. Host ma pe\u0142n\u0105 kontrol\u0119.", 44454 "home.marketing.host.locked": "Pok\xF3j zamkni\u0119ty", 44455 "home.marketing.host.waiting_to_join": "Czeka na wej\u015Bcie", 44456 "home.marketing.host.wants_to_join": "chce wbi\u0107", 44457 "home.marketing.anything.title": "Dos\u0142ownie do wszystkiego.", 44458 "home.marketing.anything.body": "Wsp\xF3lna nauka, gierki, standupy z pracy, ogl\u0105danie film\xF3w \u2014 albo po prostu chillowanie.", 44459 "home.marketing.use_case.study_group": "\u{1F4DA} wsp\xF3lna nauka", 44460 "home.marketing.use_case.game_night": "\u{1F3AE} gierki", 44461 "home.marketing.use_case.standup": "\u{1F4BC} standup", 44462 "home.marketing.use_case.watch_party": "\u{1F37F} wsp\xF3lne ogl\u0105danie", 44463 "home.marketing.use_case.catch_up": "\u2615 ploteczki", 44464 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 44465 "home.marketing.use_case.book_club": "\u{1F4D6}
44465 klub ksi\u0105\u017Cki", 44466 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 44467 "ended.heading": "call zako\u0144czony", 44468 "ended.left": "wyszed\u0142e\u015B z pokoju.", 44469 "ended.room_ended": "{title} si\u0119 dla ciebie sko\u0144czy\u0142.", 44470 "ended.rejoin": "wbij ponownie", 44471 "ended.rejoining": "\u0142\u0105cz\u0119 ponownie...", 44472 "ended.home": "wr\xF3\u0107 na g\u0142\xF3wn\u0105", 44473 "call.connecting": "\u0142\u0105czenie", 44474 "call.waiting": "czekamy na reszt\u0119", 44475 "call.invite_code": "kod zaproszenia", 44476 "call.audio_on": "d\u017Awi\u0119k w\u0142\u0105czony", 44477 "call.muted": "wyciszony", 44478 "call.listening": "s\u0142ucha", 44479 "call.audio_muted": "d\u017Awi\u0119k wyciszony", 44480 "call.speaking": "m\xF3wi", 44481 "call.you": "ty", 44482 "call.you_label": "Ty", 44483 "call.you_suffix": "(ty)", 44484 "call.chat_placeholder": "napisz co\u015B...", 44485 "call.guest": "go\u015B\u0107", 44486 "call.room_fallback": "pok\xF3j", 44487 "call.focus_view": "Widok g\u0142\xF3wny", 44488 "call.grid_view": "Siatka", 44489 "call.swap_main_video": "Zmie\u0144 g\u0142\xF3wne wideo", 44490 "call.open_chat": "Otw\xF3rz czat", 44491 "call.close_chat": "Zamknij czat", 44492 "call.leave_room": "Wyjd\u017A z pokoju", 44493 "call.confirm_leave": "Wychodzisz?", 44494 "call.mic_on": "Mikrofon w\u0142\u0105czony", 44495 "call.muted_label": "Wyciszony", 44496 "call.camera_off": "Kamerka wy\u0142\u0105czona", 44497 "call.connect_failed": "B\u0142\u0105d po\u0142\u0105czenia \u2014 sprawd\u017A neta i spr\xF3buj jeszcze raz.", 44498 "call.camera_access_failed": "Brak dost\u0119pu do kamerki. Sprawd\u017A uprawnienia przegl\u0105darki i spr\xF3buj ponownie.", 44499 "call.recording_failed": "Nie uda\u0142o si\u0119 odpali\u0107 nagrywania. Call leci dalej bez niego.", 44500 "call.initialize_failed": "Co\u015B posz\u0142o nie tak przy odpalaniu calla. Od\u015Bwie\u017C i spr\xF3buj jeszcze raz.", 44501 "call.participants": "Uczestnicy", 44502 "call.open_participants": "Poka\u017C uczestnik\xF3w", 44503 "call.close_participants": "Ukryj uczestnik\xF3w", 44504 "call.lock_room": "Zamknij pok\xF3j", 44505 "call.unlock_room": "Otw\xF3rz pok\xF3j", 44506 "call.locked": "zamkni\u0119ty", 44507 "call.unlocked": "otwarty", 44508 "call.kick_member": "Wyrzu\u0107 z pokoju", 44509 "call.mute_member": "Wycisz", 44510 "call.unmute_member": "Odcisz", 44511 "call.muted_by_host": "Wyciszony przez hosta", 44512 "call.waiting_to_join": "Czeka na wej\u015Bcie", 44513 "call.approve": "Wpu\u015B\u0107", 44514 "call.deny": "Odrzu\u0107", 44515 "call.profile_actions": "Akcje profilu", 44516 "call.profile_in_room": "W pokoju", 44517 "call.profile_role_host": "Host", 44518 "call.profile_role_you": "Ty", 44519 "call.profile_action_mute": "Wycisz d\u017Awi\u0119k", 44520 "call.profile_action_mute_meta": "Tylko dla ciebie \u2014 nawet si\u0119 nie dowiedz\u0105", 44521 "call.profile_action_dm": "DM 1:1", 44522 "call.profile_action_dm_meta": "Zacznij prywatny czat na boku", 44523 "call.profile_action_view": "Zobacz pe\u0142ny profil", 44524 "call.profile_action_view_meta": "Bio, j\u0119zyki, poprzednie sesje", 44525 "call.profile_action_report": "Zg\u0142o\u015B", 44526 "call.profile_action_report_meta": "Zg\u0142o\u015B do moderacji", 44527 "call.profile_sheet_close": "Zamknij akcje profilu", 44528 "call.profile_open_actions": "Otw\xF3rz akcje profilu", 44529 "call.dm_title": "Wiadomo\u015B\u0107 prywatna", 44530 "call.dm_back": "Wr\xF3\u0107 do akcji", 44531 "call.dm_close": "Zamknij DM", 44532 "call.dm_status_online": "Online", 44533 "call.dm_in_room_with": "W tym pokoju", 44534 "call.dm_private_label": "Prywatny czat", 44535 "call.dm_private_meta": "Tylko wy we dw\xF3jk\u0119 widzicie te wiadomo\u015Bci", 44536 "call.dm_input_placeholder": "Napisz na priv\u2026", 44537 "call.dm_send": "Wy\u015Blij", 44538 "call.dm_just_now": "teraz", 44539 "call.dm_seen_just_now": "Wy\u015Bwietlono przed chwil\u0105", 44540 "call.dm_typing": "{name} pisze\u2026", 44541 "call.dm_minimize": "Minimalizuj", 44542 "call.dm_active_indicator": "Otw\xF3rz konwersacj\u0119", 44543 "call.dm_unread_messages": "{count} nieprzeczytanych", 44544 "call.dm_toast_tap_to_open": "Kliknij, \u017Ceby otworzy\u0107", 44545 "call.dm_reopen_aria": "Otw\xF3rz ponownie konwersacj\u0119 z {name}", 44546 "home.join_denied": "Host ci\u0119 nie wpu\u015Bci\u0142.", 44547 "home.error.room_not_found": "Taki kod pokoju nie istnieje.", 44548 "home.error.profile_required": "Uzupe\u0142nij profil, \u017Ceby lecie\u0107 dalej.", 44549 "home.cta.set_up_profile": "Uzupe\u0142nij profil", 44550 "home.profile_trigger_new": "Kliknij, \u017Ceby doda\u0107 info o sobie", 44551 "home.profile_trigger_new_aria": "Uzupe\u0142nij profil", 44552 "home.profile_trigger_edit_aria": "Edytuj profil", 44553 "profile.eyebrow_new": "przywitaj si\u0119", 44554 "profile.eyebrow_edit": "tw\xF3j profil", 44555 "profile.title_new": "Zr\xF3b to po swojemu.", 44556 "profile.title_edit": "Edytuj profil", 44557 "profile.subtitle": "Kilka szybkich info, \u017Ceby inni wiedzieli, z kim gadaj\u0105.", 44558 "profile.add_photo": "Dodaj fotk\u0119", 44559 "profile.add_photo_soon": "fotki wkr\xF3tce", 44560 "profile.photo_empty": "kliknij, \u017Ceby doda\u0107 fotk\u0119", 44561 "profile.photo_ready": "fotka gotowa", 44562 "profile.photo_save_first": "zapisz profil, zanim wrzucisz fotk\u0119", 44563 "profile.photo_crop_caption": "wykadruj fotk\u0119", 44564 "profile.photo_auto_caption": "przesu\u0144 i przybli\u017C, a my zapiszemy to automatycznie", 44565 "profile.photo_upload": "Wgraj fotk\u0119", 44566 "profile.photo_replace": "Zmie\u0144 fotk\u0119", 44567 "profile.photo_remove": "Usu\u0144 fotk\u0119", 44568 "profile.photo_cancel": "Anuluj", 44569 "profile.photo_save": "Zapisz fotk\u0119", 44570 "profile.photo_uploading": "Wgrywanie fotki\u2026", 44571 "profile.photo_removing": "Usuwanie fotki\u2026", 44572 "profile.photo_choose_another": "Wybierz inn\u0105", 44573 "profile.photo_drag_hint": "Przeci\u0105gnij fotk\u0119 do k\xF3\u0142ka. Zmiany zapisuj\u0105 si\u0119 same.", 44574 "profile.photo_zoom": "Przybli\u017C", 44575 "profile.photo_horizontal": "Kadr w poziomie",
44576 "profile.photo_vertical": "Kadr w pionie", 44577 "profile.name_label": "Imi\u0119", 44578 "profile.name_placeholder": "Jak mamy ci\u0119 nazywa\u0107?", 44579 "profile.gender_label": "Jestem", 44580 "profile.gender.woman": "Kobiet\u0105", 44581 "profile.gender.man": "M\u0119\u017Cczyzn\u0105", 44582 "profile.gender.unspecified": "Wol\u0119 nie m\xF3wi\u0107", 44583 "profile.bio_label": "Bio", 44584 "profile.bio_optional": "opcjonalnie", 44585 "profile.bio_placeholder": "J\u0119zyki, kt\xF3rymi gadasz, co lubisz, cokolwiek\u2026", 44586 "profile.cta_new": "Lecimy", 44587 "profile.cta_edit": "Zapisz zmiany", 44588 "profile.saving": "Zapisywanie\u2026", 44589 "profile.close": "Zamknij", 44590 "profile.error.save_failed": "Nie uda\u0142o si\u0119 zapisa\u0107 profilu. Spr\xF3buj jeszcze raz.", 44591 "profile.error.avatar_invalid_type": "Wybierz obrazek w formacie PNG, JPEG, GIF lub WebP.", 44592 "profile.error.avatar_too_large": "Wybierz plik mniejszy ni\u017C 5 MB.", 44593 "profile.error.avatar_too_small": "Wybierz obrazek, kt\xF3ry ma co najmniej 96x96 pikseli.", 44594 "profile.error.avatar_load_failed": "Nie mogli\u015Bmy wczyta\u0107 tego obrazka. Spr\xF3buj z innym plikiem.", 44595 "profile.error.avatar_failed": "Nie uda\u0142o si\u0119 wgra\u0107 fotki. Spr\xF3buj ponownie.", 44596 "profile.error.avatar_remove_failed": "Nie uda\u0142o si\u0119 usun\u0105\u0107 fotki. Spr\xF3buj ponownie.", 44597 "effects.title": "Efekty", 44598 "effects.soft": "Mi\u0119kki focus", 44599 "effects.vignette": "Winieta", 44600 "effects.face": "Blur twarzy", 44601 "effects.face_preview_only": "Blur twarzy (tylko podgl\u0105d)", 44602 "effects.face_viewer_side": "Blur twarzy (u widza)", 44603 "effects.face_strength": "Moc blura", 44604 "effects.grade.off": "WY\u0141", 44605 "effects.grade.pop": "POP", 44606 "effects.grade.warm": "CIEP\u0141Y", 44607 "effects.grade.cool": "ZIMNY", 44608 "effects.grade.bw": "CZ-B", 44609 "camera.off": "kamerka wy\u0142\u0105czona", 44610 "camera.check": "sprawd\u017A kamerk\u0119", 44611 "camera.retry": "spr\xF3buj ponownie", 44612 "camera.ready": "kamerka gotowa", 44613 "camera.idle.title": "Odpal kamerk\u0119", 44614 "camera.idle.hint": "Poprosimy przegl\u0105dark\u0119 o dost\u0119p, kiedy b\u0119dziesz gotowy.", 44615 "camera.idle.button": "W\u0142\u0105cz kamerk\u0119", 44616 "camera.status.idle": "Czekamy na ciebie", 44617 "camera.status.off": "Kamerka jest wy\u0142\u0105czona", 44618 "camera.status.loading": "Pro\u015Bba o dost\u0119p do kamerki...", 44619 "camera.status.denied": "Zezw\xF3l na dost\u0119p do kamerki w przegl\u0105darce i spr\xF3buj ponownie.", 44620 "camera.status.error": "Podgl\u0105d z kamerki pad\u0142. Spr\xF3buj jeszcze raz.", 44621 "camera.status.unsupported": "Ta przegl\u0105darka nie obs\u0142uguje dost\u0119pu do kamerki.", 44622 "camera.status.insecure": "Dost\u0119p do kamerki wymaga HTTPS lub localhosta.", 44623 "camera.status.attach_failed": "Nie uda\u0142o si\u0119 odpali\u0107 podgl\u0105du z kamerki. Spr\xF3buj ponownie.", 44624 "camera.guest_name_placeholder": "Imi\u0119 go\u015Bcia", 44625 "camera.flip": "Obr\xF3\u0107 kamerk\u0119", 44626 "camera.save_name": "Zapisz", 44627 "camera.edit_name": "Edytuj imi\u0119", 44628 "mic.on": "Wy\u0142\u0105cz mikrofon", 44629 "mic.off": "W\u0142\u0105cz mikrofon", 44630 "video.on": "Wy\u0142\u0105cz kamerk\u0119", 44631 "video.off": "W\u0142\u0105cz kamerk\u0119", 44632 "chat.title": "czat", 44633 "chat.close": "Zamknij czat", 44634 "chat.loading": "\u0142adowanie...", 44635 "chat.load_earlier": "za\u0142aduj starsze", 44636 "chat.empty": "tu jeszcze nic nie ma", 44637 "chat.send_error": "Wiadomo\u015B\u0107 nie posz\u0142a \u2014 spr\xF3buj jeszcze raz.", 44638 "chat.input_placeholder": "napisz co\u015B...", 44639 "room.host": "Host", 44640 "app.room_default_title": "Stw\xF3rz pok\xF3j", 44641 "app.chat_connection_rejected": "Czat nie m\xF3g\u0142 si\u0119 po\u0142\u0105czy\u0107 \u2014 spr\xF3buj od\u015Bwie\u017Cy\u0107.", 44642 "app.copy_failed": "Nie uda\u0142o si\u0119 skopiowa\u0107 linku. Zaznacz i skopiuj go r\u0119cznie.", 44643 "app.chat_not_connected": "Czat nie jest jeszcze po\u0142\u0105czony. Daj mu chwil\u0119 i spr\xF3buj ponownie.", 44644 "footer.terms": "Regulamin", 44645 "footer.copyright": "\xA9 2026 Yano.AI" 44646}; 44647
44648// app/javascript/yano/locales/pt.js 44649var pt_default = { 44650 "home.heading.default": "entra na call", 44651 "home.heading.loading": "abrindo a sala...", 44652 "home.heading.join": "pronto pra entrar?", 44653 "home.heading.joined": "t\xE1 dentro", 44654 "home.heading.pending": "esperando o host", 44655 "home.body.default": "cria uma sala, manda o link, curte a vibe.", 44656 "home.body.loading": "pera\xED, puxando a sala.", 44657 "home.body.join": "checa a c\xE2mera e o mic, e entra.", 44658 "home.body.joined": "sala on. compartilha o link ou s\xF3 vai.", 44659 "home.body.joined_in_room": "na sala \u2014 entra a\xED ou compartilha o link.", 44660 "home.body.pending": "a sala t\xE1 trancada. o host vai te deixar entrar.", 44661 "home.cta.create": "Criar sala", 44662 "home.cta.join": "Entrar na sala", 44663 "home.cta.enter": "Entrar", 44664 "home.cta.creating": "Criando...", 44665 "home.cta.joining": "Entrando...", 44666 "home.cta.opening": "Abrindo...", 44667 "home.cta.pending": "Esperando aprova\xE7\xE3o...", 44668 "home.copy_link": "copiar link", 44669 "home.copied": "copiado!", 44670 "home.leave": "sair da sala", 44671 "home.back": "voltar", 44672 "home.no_participants": "ningu\xE9m aqui ainda", 44673 "home.join_by_code": "entrar com c\xF3digo", 44674 "home.code_placeholder": "digite o c\xF3digo", 44675 "home.name_placeholder": "seu nome", 44676 "home.people_one": "pessoa", 44677 "home.people_other": "pessoas", 44678 "home.marketing.invite.title": "Cria uma sala,\ncompartilha o link.", 44679 "home.marketing.invite.body": "Um toque pra come\xE7ar. Manda o link pros amigos e qualquer um entra \u2014 sem download, sem cadastro.", 44680 "home.marketing.invite.preview_url": "yano.ai/SALA", 44681 "home.marketing.look.title": "Apare\xE7a como\nquiser.", 44682 "home.marketing.look.body": "Filtros, suaviza\xE7\xE3o, vinheta \u2014 ou borra seu rosto todo. Sua c\xE2mera, seu estilo.", 44683 "home.marketing.host.title": "Seu espa\xE7o,\nsuas regras.", 44684 "home.marketing.host.body": "Tranca a sala, muta algu\xE9m ou remove de vez. O host \xE9 quem manda.", 44685 "home.marketing.host.locked": "Sala trancada", 44686 "home.marketing.host.waiting_to_join": "Esperando pra entrar", 44687 "home.marketing.host.wants_to_join": "quer entrar", 44688 "home.marketing.anything.title": "Pra qualquer coisa, real.", 44689 "home.marketing.anything.body": "Estudar, jogar, daily do trampo, assistir algo junto \u2014 ou s\xF3 jogar conversa fora.", 44690 "home.marketing.use_case.study_group": "\u{1F4DA} grupo de estudos", 44691 "home.marketing.use_case.game_night": "\u{1F3AE} noite de jogos", 44692 "home.marketing.use_case.standup": "\u{1F4BC} daily", 44693 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 44694 "home.marketing.use_case.catch_up": "\u2615 botar o papo em dia", 44695 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 44696 "home.marketing.use_case.book_club": "\u{1F4D6}
44696 clube do livro", 44697 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 44698 "ended.heading": "a call acabou", 44699 "ended.left": "voc\xEA saiu da sala.", 44700 "ended.room_ended": "{title} acabou pra voc\xEA.", 44701 "ended.rejoin": "entrar de novo", 44702 "ended.rejoining": "entrando de novo...", 44703 "ended.home": "voltar pro in\xEDcio", 44704 "call.connecting": "conectando", 44705 "call.waiting": "esperando a galera", 44706 "call.invite_code": "c\xF3digo de convite", 44707 "call.audio_on": "\xE1udio on", 44708 "call.muted": "mutado", 44709 "call.listening": "Ouvindo", 44710 "call.audio_muted": "\xC1udio mutado", 44711 "call.speaking": "falando", 44712 "call.you": "voc\xEA", 44713 "call.you_label": "Voc\xEA", 44714 "call.you_suffix": "(voc\xEA)", 44715 "call.chat_placeholder": "manda uma mensagem...", 44716 "call.guest": "convidado", 44717 "call.room_fallback": "sala", 44718 "call.focus_view": "Vis\xE3o em foco", 44719 "call.grid_view": "Vis\xE3o em grade", 44720 "call.swap_main_video": "Trocar v\xEDdeo principal", 44721 "call.open_chat": "Abrir chat", 44722 "call.close_chat": "Fechar chat", 44723 "call.leave_room": "Sair da sala", 44724 "call.confirm_leave": "Sair?", 44725 "call.mic_on": "Mic on", 44726 "call.muted_label": "Mutado", 44727 "call.camera_off": "C\xE2mera off", 44728 "call.connect_failed": "Falha na conex\xE3o \u2014 checa a internet e tenta de novo.", 44729 "call.camera_access_failed": "N\xE3o deu pra acessar a c\xE2mera. Checa as permiss\xF5es do navegador e tenta de novo.", 44730 "call.recording_failed": "A grava\xE7\xE3o n\xE3o come\xE7ou. A call vai rolar sem ela.", 44731 "call.initialize_failed": "Deu ruim ao iniciar a call. Atualiza a p\xE1gina e tenta de novo.", 44732 "call.participants": "Participantes", 44733 "call.open_participants": "Ver participantes", 44734 "call.close_participants": "Fechar participantes", 44735 "call.lock_room": "Trancar sala", 44736 "call.unlock_room": "Destrancar sala", 44737 "call.locked": "trancada", 44738 "call.unlocked": "aberta", 44739 "call.kick_member": "Remover da sala", 44740 "call.mute_member": "Mutar", 44741 "call.unmute_member": "Desmutar", 44742 "call.muted_by_host": "Mutado pelo host", 44743 "call.waiting_to_join": "Esperando pra entrar", 44744 "call.approve": "Aprovar", 44745 "call.deny": "Negar", 44746 "call.profile_actions": "A\xE7\xF5es do perfil", 44747 "call.profile_in_room": "Na sala", 44748 "call.profile_role_host": "Host", 44749 "call.profile_role_you": "Voc\xEA", 44750 "call.profile_action_mute": "Mutar \xE1udio", 44751 "call.profile_action_mute_meta": "S\xF3 pra voc\xEA \u2014 a pessoa n\xE3o vai saber", 44752 "call.profile_action_dm": "DM 1:1", 44753 "call.profile_action_dm_meta": "Come\xE7ar um papo privado", 44754 "call.profile_action_view": "Ver perfil completo", 44755 "call.profile_action_view_meta": "Bio, idiomas, sess\xF5es passadas", 44756 "call.profile_action_report": "Denunciar", 44757 "call.profile_action_report_meta": "Sinalizar pra modera\xE7\xE3o", 44758 "call.profile_sheet_close": "Fechar a\xE7\xF5es do perfil", 44759 "call.profile_open_actions": "Abrir a\xE7\xF5es do perfil", 44760 "call.dm_title": "Mensagem direta", 44761 "call.dm_back": "Voltar pras a\xE7\xF5es", 44762 "call.dm_close": "Fechar DM", 44763 "call.dm_status_online": "Online", 44764 "call.dm_in_room_with": "Nesta sala", 44765 "call.dm_private_label": "Chat privado", 44766 "call.dm_private_meta": "S\xF3 voc\xEAs dois veem essas mensagens", 44767 "call.dm_input_placeholder": "Manda uma DM\u2026", 44768 "call.dm_send": "Enviar", 44769 "call.dm_just_now": "agora", 44770 "call.dm_seen_just_now": "Visto agora", 44771 "call.dm_typing": "{name} t\xE1 digitando\u2026", 44772 "call.dm_minimize": "Minimizar", 44773 "call.dm_active_indicator": "Abrir conversa", 44774 "call.dm_unread_messages": "{count} n\xE3o lidas", 44775 "call.dm_toast_tap_to_open": "Toca pra abrir", 44776 "call.dm_reopen_aria": "Reabrir conversa com {name}", 44777 "home.join_denied": "O host n\xE3o deixou voc\xEA entrar.", 44778 "home.error.room_not_found": "Esse c\xF3digo de sala n\xE3o existe.", 44779 "home.error.profile_required": "Monta seu perfil pra continuar.", 44780 "home.cta.set_up_profile": "Montar perfil", 44781 "home.profile_trigger_new": "Toca pra adicionar seus dados", 44782 "home.profile_trigger_new_aria": "Montar perfil", 44783 "home.profile_trigger_edit_aria": "Editar perfil", 44784 "profile.eyebrow_new": "d\xE1 um oi", 44785 "profile.eyebrow_edit": "seu perfil", 44786 "profile.title_new": "Deixa com a sua cara.", 44787 "profile.title_edit": "Editar perfil", 44788 "profile.subtitle": "Alguns detalhes r\xE1pidos pra galera saber com quem t\xE1 falando.", 44789 "profile.add_photo": "Adicionar foto", 44790 "profile.add_photo_soon": "fotos em breve", 44791 "profile.photo_empty": "toca pra adicionar uma foto", 44792 "profile.photo_ready": "foto pronta", 44793 "profile.photo_save_first": "salva o perfil antes de subir uma foto", 44794 "profile.photo_crop_caption": "enquadra sua foto", 44795 "profile.photo_auto_caption": "arrasta e d\xE1 zoom, a gente salva autom\xE1tico", 44796 "profile.photo_upload": "Subir foto", 44797 "profile.photo_replace": "Trocar foto", 44798 "profile.photo_remove": "Remover foto", 44799 "profile.photo_cancel": "Cancelar", 44800 "profile.photo_save": "Salvar foto", 44801 "profile.photo_uploading": "Subindo foto\u2026", 44802 "profile.photo_removing": "Removendo foto\u2026", 44803 "profile.photo_choose_another": "Escolher outra", 44804 "profile.photo_drag_hint": "Arrasta a foto pro c\xEDrculo. As mudan\xE7as salvam autom\xE1tico.", 44805 "profile.photo_zoom": "Zoom", 44806 "profile.photo_horizontal": "Corte horizontal", 44807 "profile.photo_vertical": "Corte vertical", 44808 "profile.name_label": "Nome", 44809 "profile.name_placeholder": "Como a gente te chama?", 44810 "profile.gender_label": "Eu sou", 44811 "profile.gender.woman": "Mulher", 44812 "profile.gender.man": "Homem", 44813 "profile.gender.unspecified": "Prefiro n\xE3o dizer", 44814 "profile.bio_label": "Bio", 44815 "profile.bio_optional": "opcional", 44816 "profile.bio_placeholder": "Idiomas que voc\xEA fala, o que voc\xEA curte, qualquer coisa\u2026", 44817 "profile.cta_new": "Bora", 44818 "profile.cta_edit": "Salvar", 44819 "profile.saving": "Salvando\u2026",
44820 "profile.close": "Fechar", 44821 "profile.error.save_failed": "N\xE3o deu pra salvar o perfil. Tenta de novo.", 44822 "profile.error.avatar_invalid_type": "Escolhe uma imagem PNG, JPEG, GIF ou WebP.", 44823 "profile.error.avatar_too_large": "Escolhe uma imagem com menos de 5 MB.", 44824 "profile.error.avatar_too_small": "A imagem precisa ter pelo menos 96x96 pixels.", 44825 "profile.error.avatar_load_failed": "N\xE3o conseguimos ler essa imagem. Tenta outro arquivo.", 44826 "profile.error.avatar_failed": "Deu ruim ao subir a foto. Tenta de novo.", 44827 "profile.error.avatar_remove_failed": "Deu ruim ao remover a foto. Tenta de novo.", 44828 "effects.title": "Efeitos", 44829 "effects.soft": "Foco suave", 44830 "effects.vignette": "Vinheta", 44831 "effects.face": "Borrar rosto", 44832 "effects.face_preview_only": "Borrar rosto (s\xF3 preview)", 44833 "effects.face_viewer_side": "Borrar rosto (pra quem v\xEA)", 44834 "effects.face_strength": "Intensidade do borr\xE3o", 44835 "effects.grade.off": "OFF", 44836 "effects.grade.pop": "POP", 44837 "effects.grade.warm": "QUENTE", 44838 "effects.grade.cool": "FRIO", 44839 "effects.grade.bw": "P&B", 44840 "camera.off": "c\xE2mera off", 44841 "camera.check": "checa sua c\xE2mera", 44842 "camera.retry": "tentar c\xE2mera de novo", 44843 "camera.ready": "c\xE2mera pronta", 44844 "camera.idle.title": "Liga a c\xE2mera", 44845 "camera.idle.hint": "Vamos pedir acesso ao navegador quando voc\xEA quiser.", 44846 "camera.idle.button": "Ligar c\xE2mera", 44847 "camera.status.idle": "Esperando voc\xEA", 44848 "camera.status.off": "C\xE2mera off", 44849 "camera.status.loading": "Pedindo acesso \xE0 c\xE2mera...", 44850 "camera.status.denied": "Libera a c\xE2mera no navegador e tenta de novo.", 44851 "camera.status.error": "Deu ruim no preview da c\xE2mera. Tenta de novo.", 44852 "camera.status.unsupported": "Esse navegador n\xE3o suporta acesso \xE0 c\xE2mera.", 44853 "camera.status.insecure": "A c\xE2mera precisa de HTTPS ou localhost.", 44854 "camera.status.attach_failed": "O preview da c\xE2mera n\xE3o iniciou. Tenta de novo.", 44855 "camera.guest_name_placeholder": "Nome do convidado", 44856 "camera.flip": "Virar c\xE2mera", 44857 "camera.save_name": "Salvar", 44858 "camera.edit_name": "Editar nome", 44859 "mic.on": "Desligar mic", 44860 "mic.off": "Ligar mic", 44861 "video.on": "Desligar c\xE2mera", 44862 "video.off": "Ligar c\xE2mera", 44863 "chat.title": "chat", 44864 "chat.close": "Fechar chat", 44865 "chat.loading": "carregando...", 44866 "chat.load_earlier": "carregar anteriores", 44867 "chat.empty": "nenhuma mensagem ainda", 44868 "chat.send_error": "A mensagem n\xE3o foi \u2014 tenta de novo.", 44869 "chat.input_placeholder": "manda uma mensagem...", 44870 "room.host": "Host", 44871 "app.room_default_title": "Criar uma sala", 44872 "app.chat_connection_rejected": "O chat n\xE3o conectou \u2014 tenta atualizar a p\xE1gina.", 44873 "app.copy_failed": "N\xE3o deu pra copiar o link. Tenta selecionar e copiar na m\xE3o.", 44874 "app.chat_not_connected": "O chat ainda n\xE3o conectou. Espera um pouco e tenta de novo.", 44875 "footer.terms": "Termos e Condi\xE7\xF5es", 44876 "footer.copyright": "\xA9 2026 Yano.AI" 44877}; 44878
44879// app/javascript/yano/locales/ru.js 44880var ru_default = { 44881 "home.heading.default": "\u0437\u0430\u043B\u0435\u0442\u0430\u0439 \u0432 \u0437\u0432\u043E\u043D\u043E\u043A", 44882 "home.heading.loading": "\u043E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u043C \u043A\u043E\u043C\u043D\u0430\u0442\u0443...", 44883 "home.heading.join": "\u0433\u043E\u0442\u043E\u0432 \u0437\u0430\u0439\u0442\u0438?", 44884 "home.heading.joined": "\u0442\u044B \u0432 \u043A\u043E\u043C\u043D\u0430\u0442\u0435", 44885 "home.heading.pending": "\u0436\u0434\u0435\u043C \u0445\u043E\u0441\u0442\u0430", 44886 "home.body.default": "\u0441\u043E\u0437\u0434\u0430\u0439 \u043A\u043E\u043C\u043D\u0430\u0442\u0443, \u043A\u0438\u043D\u044C \u0441\u0441\u044B\u043B\u043A\u0443, \u043A\u0430\u0439\u0444\u0443\u0439.", 44887 "home.body.loading": "\u0441\u0435\u043A\u0443\u043D\u0434\u0443, \u0433\u0440\u0443\u0437\u0438\u043C \u043A\u043E\u043C\u043D\u0430\u0442\u0443.", 44888 "home.body.join": "\u0447\u0435\u043A\u043D\u0438 \u043A\u0430\u043C\u0435\u0440\u0443 \u0438 \u043C\u0438\u043A\u0440\u043E, \u0438 \u0437\u0430\u043B\u0435\u0442\u0430\u0439.", 44889 "home.body.joined": "\u043A\u043E\u043C\u043D\u0430\u0442\u0430 \u0433\u043E\u0442\u043E\u0432\u0430. \u043A\u0438\u0434\u0430\u0439 \u0441\u0441\u044B\u043B\u043A\u0443 \u0438\u043B\u0438 \u043F\u0440\u043E\u0441\u0442\u043E \u043D\u0430\u0447\u0438\u043D\u0430\u0439.", 44890 "home.body.joined_in_room": "\u0442\u044B \u0432 \u043A\u043E\u043C\u043D\u0430\u0442\u0435 \u2014 \u043A\u0438\u0434\u0430\u0439 \u0441\u0441\u044B\u043B\u043A\u0443 \u0438\u043B\u0438 \u043D\u0430\u0447\u0438\u043D\u0430\u0439.", 44891 "home.body.pending": "\u043A\u043E\u043C\u043D\u0430\u0442\u0430 \u0437\u0430\u043A\u0440\u044B\u0442\u0430. \u0445\u043E\u0441\u0442 \u0441\u043A\u043E\u0440\u043E \u0432\u043F\u0443\u0441\u0442\u0438\u0442.", 44892 "home.cta.create": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043A\u043E\u043C\u043D\u0430\u0442\u0443", 44893 "home.cta.join": "\u0412\u043E\u0439\u0442\u0438 \u0432 \u043A\u043E\u043C\u043D\u0430\u0442\u0443", 44894 "home.cta.enter": "\u0417\u0430\u0439\u0442\u0438", 44895 "home.cta.creating": "\u0421\u043E\u0437\u0434\u0430\u0435\u043C...", 44896 "home.cta.joining": "\u0417\u0430\u0445\u043E\u0434\u0438\u043C...", 44897 "home.cta.opening": "\u041E\u0442\u043A\u0440\u044B\u0432\u0430\u0435\u043C...", 44898 "home.cta.pending": "\u0416\u0434\u0435\u043C \u0430\u043F\u043F\u0440\u0443\u0432\u0430...", 44899 "home.copy_link": "\u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443", 44900 "home.copied": "\u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u043E!", 44901 "home.leave": "\u0432\u044B\u0439\u0442\u0438 \u0438\u0437 \u043A\u043E\u043C\u043D\u0430\u0442\u044B", 44902 "home.back": "\u043D\u0430\u0437\u0430\u0434", 44903 "home.no_participants": "\u0442\u0443\u0442 \u043F\u043E\u043A\u0430 \u043D\u0438\u043A\u043E\u0433\u043E", 44904 "home.join_by_code": "\u0432\u043E\u0439\u0442\u0438 \u043F\u043E \u043A\u043E\u0434\u0443", 44905 "home.code_placeholder": "\u0432\u0432\u0435\u0434\u0438 \u043A\u043E\u0434", 44906 "home.name_placeholder": "\u0442\u0432\u043E\u0435 \u0438\u043C\u044F", 44907 "home.people_one": "\u0447\u0435\u043B\u043E\u0432\u0435\u043A", 44908 "home.people_other": "\u0447\u0435\u043B\u043E\u0432\u0435\u043A", 44909 "home.marketing.invite.title": "\u0421\u043E\u0437\u0434\u0430\u0439 \u043A\u043E\u043C\u043D\u0430\u0442\u0443,\n\u043F\u043E\u0434\u0435\u043B\u0438\u0441\u044C \u0441\u0441\u044B\u043B\u043A\u043E\u0439.", 44910 "home.marketing.invite.body": "\u0412 \u043E\u0434\u0438\u043D \u043A\u043B\u0438\u043A. \u041A\u0438\u043D\u044C \u0441\u0441\u044B\u043B\u043A\u0443 \u0434\u0440\u0443\u0437\u044C\u044F\u043C, \u0438 \u043E\u043D\u0438 \u0441\u043C\u043E\u0433\u0443\u0442 \u0437\u0430\u0439\u0442\u0438 \u2014 \u0431\u0435\u0437 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0439 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0439.", 44911 "home.marketing.invite.preview_url": "yano.ai/ROOM", 44912 "home.marketing.look.title": "\u0412\u044B\u0433\u043B\u044F\u0434\u0438\n\u043A\u0430\u043A \u0445\u043E\u0447\u0435\u0448\u044C.", 44913 "home.marketing.look.body": "\u0426\u0432\u0435\u0442\u043E\u043A\u043E\u0440, \u0441\u043E\u0444\u0442-\u0444\u043E\u043A\u0443\u0441, \u0432\u0438\u043D\u044C\u0435\u0442\u043A\u0430 \u2014 \u0438\u043B\u0438 \u0432\u043E\u043E\u0431\u0449\u0435 \u0437\u0430\u0431\u043B\u044E\u0440\u044C \u043B\u0438\u0446\u043E. \u0422\u0432\u043E\u044F \u043A\u0430\u043C\u0435\u0440\u0430, \u0442\u0432\u043E\u0439 \u0441\u0442\u0438\u043B\u044C.", 44914 "home.marketing.host.title": "\u0422\u0432\u043E\u0435 \u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u043E,\n\u0442\u0432\u043E\u0438 \u043F\u0440\u0430\u0432\u0438\u043B\u0430.", 44915 "home.marketing.host.body": "\u0417\u0430\u043A\u0440\u043E\u0439 \u043A\u043E\u043C\u043D\u0430\u0442\u0443, \u0437\u0430\u043C\u044C\u044E\u0442\u044C \u043A\u043E\u0433\u043E-\u0442\u043E \u0438\u043B\u0438 \u0432\u043E\u043E\u0431\u0449\u0435 \u043A\u0438\u043A\u043D\u0438. \u
449150425\u043E\u0441\u0442 \u0440\u0435\u0448\u0430\u0435\u0442.", 44916 "home.marketing.host.locked": "\u041A\u043E\u043C\u043D\u0430\u0442\u0430 \u0437\u0430\u043A\u0440\u044B\u0442\u0430", 44917 "home.marketing.host.waiting_to_join": "\u0416\u0434\u0443\u0442 \u0432\u0445\u043E\u0434\u0430", 44918 "home.marketing.host.wants_to_join": "\u0445\u043E\u0447\u0435\u0442 \u0437\u0430\u0439\u0442\u0438", 44919 "home.marketing.anything.title": "\u0412\u043E\u043E\u0431\u0449\u0435 \u0434\u043B\u044F \u0432\u0441\u0435\u0433\u043E.", 44920 "home.marketing.anything.body": "\u0411\u043E\u0442\u0430\u0442\u044C \u0432\u043C\u0435\u0441\u0442\u0435, \u0438\u0433\u0440\u0430\u0442\u044C, \u0440\u0430\u0431\u043E\u0447\u0438\u0435 \u0441\u0442\u0435\u043D\u0434\u0430\u043F\u044B, \u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u0432\u0438\u0434\u043E\u0441\u044B \u2014 \u0438\u043B\u0438 \u043F\u0440\u043E\u0441\u0442\u043E \u0447\u0438\u043B\u043B\u0438\u0442\u044C.", 44921 "home.marketing.use_case.study_group": "\u{1F4DA} \u0441\u0442\u0430\u0434\u0438-\u0433\u0440\u0443\u043F\u043F\u0430", 44922 "home.marketing.use_case.game_night": "\u{1F3AE} \u043F\u043E\u0438\u0433\u0440\u0430\u0442\u044C", 44923 "home.marketing.use_case.standup": "\u{1F4BC} \u0441\u0442\u0435\u043D\u0434\u0430\u043F", 44924 "home.marketing.use_case.watch_party": "\u{1F37F} \u0432\u043E\u0442\u0447-\u043F\u0430\u0442\u0438", 44925 "home.marketing.use_case.catch_up": "\u2615 \u043F\u043E\u0431\u043E\u043B\u0442\u0430\u0442\u044C", 44926 "home.marketing.use_case.jam_session": "\u{1F3B8} \u0434\u0436\u0435\u043C-\u0441\u0435\u0439\u0448\u043D", 44927 "home.marketing.use_case.book_club": "\u{1F4D6}
44927 \u043A\u043D\u0438\u0436\u043D\u044B\u0439 \u043A\u043B\u0443\u0431", 44928 "home.marketing.use_case.coworking": "\u{1F4BB} \u043A\u043E\u0432\u043E\u0440\u043A\u0438\u043D\u0433", 44929 "ended.heading": "\u0437\u0432\u043E\u043D\u043E\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D", 44930 "ended.left": "\u0442\u044B \u0432\u044B\u0448\u0435\u043B \u0438\u0437 \u043A\u043E\u043C\u043D\u0430\u0442\u044B.", 44931 "ended.room_ended": "{title} \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043B\u0441\u044F \u0434\u043B\u044F \u0442\u0435\u0431\u044F.", 44932 "ended.rejoin": "\u043F\u0435\u0440\u0435\u0437\u0430\u0439\u0442\u0438", 44933 "ended.rejoining": "\u043F\u0435\u0440\u0435\u0437\u0430\u0445\u043E\u0434\u0438\u043C...", 44934 "ended.home": "\u043D\u0430 \u0433\u043B\u0430\u0432\u043D\u0443\u044E", 44935 "call.connecting": "\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0430\u0435\u043C\u0441\u044F", 44936 "call.waiting": "\u0436\u0434\u0435\u043C \u043E\u0441\u0442\u0430\u043B\u044C\u043D\u044B\u0445", 44937 "call.invite_code": "\u043A\u043E\u0434 \u0438\u043D\u0432\u0430\u0439\u0442\u0430", 44938 "call.audio_on": "\u0437\u0432\u0443\u043A \u0432\u043A\u043B", 44939 "call.muted": "\u0432 \u043C\u044C\u044E\u0442\u0435", 44940 "call.listening": "\u0421\u043B\u0443\u0448\u0430\u0435\u0442", 44941 "call.audio_muted": "\u0417\u0432\u0443\u043A \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D", 44942 "call.speaking": "\u0433\u043E\u0432\u043E\u0440\u0438\u0442", 44943 "call.you": "\u0442\u044B", 44944 "call.you_label": "\u0422\u044B", 44945 "call.you_suffix": "(\u0442\u044B)", 44946 "call.chat_placeholder": "\u043D\u0430\u043F\u0438\u0441\u0430\u0442\u044C...", 44947 "call.guest": "\u0433\u043E\u0441\u0442\u044C", 44948 "call.room_fallback": "\u043A\u043E\u043C\u043D\u0430\u0442\u0430", 44949 "call.focus_view": "\u0424\u043E\u043A\u0443\u0441", 44950 "call.grid_view": "\u0421\u0435\u0442\u043A\u0430", 44951 "call.swap_main_video": "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u0433\u043B\u0430\u0432\u043D\u043E\u0435 \u0432\u0438\u0434\u0435\u043E", 44952 "call.open_chat": "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442", 44953 "call.close_chat": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442", 44954 "call.leave_room": "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043A\u043E\u043C\u043D\u0430\u0442\u044B", 44955 "call.confirm_leave": "\u0412\u044B\u0439\u0442\u0438?", 44956 "call.mic_on": "\u041C\u0438\u043A\u0440\u043E \u0432\u043A\u043B", 44957 "call.muted_label": "\u0412 \u043C\u044C\u044E\u0442\u0435", 44958 "call.camera_off": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0432\u044B\u043A\u043B", 44959 "call.connect_failed": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u2014 \u0447\u0435\u043A\u043D\u0438 \u0438\u043D\u0435\u0442 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 44960 "call.camera_access_failed": "\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u043A\u0430\u043C\u0435\u0440\u0435. \u0427\u0435\u043A\u043D\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430.", 44961 "call.recording_failed": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043D\u0430\u0447\u0430\u0442\u044C \u0437\u0430\u043F\u0438\u0441\u044C. \u0417\u0432\u043E\u043D\u043E\u043A \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u0441\u044F \u0431\u0435\u0437 \u043D\u0435\u0435.", 44962 "call.initialize_failed": "\u0427\u0442\u043E-\u0442\u043E \u043F\u043E\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A. \u041E\u0431\u043D\u043E\u0432\u0438 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 44963 "call.participants": "\u0423\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438", 44964 "call.open_participants": "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", 44965 "call.close_participants": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u043E\u0432", 44966 "call.lock_room": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043C\u043D\u0430\u0442\u0443", 44967 "call.unlock_room": "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043C\u043D\u0430\u0442\u0443", 44968 "call.locked": "\u0437\u0430\u043A\u0440\u044B\u0442\u043E", 44969 "call.unlocked": "\u043E\u0442\u043A\u0440\u044B\u0442\u043E", 44970 "call.kick_member": "\u041A\u0438\u043A\u043D\u0443\u0442\u044C \u0438\u0437 \u043A\u043E\u043C\u043D\u0430\u0442\u044B", 44971 "call.mute_member": "\u0417\u0430\u043C\u044C\u044E\u0442\u0438\u0442\u044C", 44972 "call.unmute_member": "\u0420\u0430\u0437\u043C\u044C\u044E\u0442\u0438\u0442\u044C", 44973 "call.muted_by_host": "\u0417\u0430\u043C\u044C\u044E\u0447\u0435\u043D \u0445\u043E\u0441\u0442\u043E\u043C", 44974 "call.waiting_to_join": "\u0416\u0434\u0443\u0442 \u0432\u0445\u043E\u0434\u0430", 44975 "call.approve": "\u0412\u043F\u0443\u0441\u0442\u0438\u0442\u044C", 44976 "call.deny": "\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C", 44977 "call.profile_actions": "\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F \u0441 \u043F\u0440\u043E\u0444\u0438\u043B\u0435\u043C", 44978 "call.profile_in_room": "\u0412 \u043A\u043E\u043C\u043D\u0430\u0442\u0435", 44979 "call.profile_role_host": "\u0425\u043E\u0441\u0442", 44980 "call.profile_role_you": "\u0422\u044B", 44981 "call.profile_action_mute": "\u0417\u0430\u043C\u044C\u044E\u0442\u0438\u0442\u044C \u0437\u0432\u0443\u043A", 44982 "call.profile_action_mute_meta": "\u0422\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u0442\u0435\u0431\u044F \u2014 \u043E\u043D\u0438 \u043D\u0435 \u0443\u0437\u043D\u0430\u044E\u0442", 44983 "call.profile_action_dm": "\u041B\u0438\u0447\u043A\u0430", 44984 "call.profile_action_dm_meta": "\u041D\u0430\u0447\u0430\u0442\u044C \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0439 \u0447\u0430\u0442", 44985 "call.profile_action_view": "\u0421\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 44986 "call.profile_action_view_meta": "\u0411\u0438\u043E, \u044F\u0437\u044B\u043A\u0438, \u043F\u0440\u043E\u0448\u043B\u044B\u0435 \u0441\u0435\u0441\u0441\u0438\u0438", 44987 "call.profile_action_report": "\u041F\u043E\u0436\u0430\u043B\u043E\u0432\u0430\u0442\u044C\u0441\u044F", 44988 "call.profile_action_report_meta": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C \u043C\u043E\u0434\u0435\u0440\u0430\u0442\u043E\u0440\u0430\u043C", 44989 "call.profile_sheet_close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", 44990 "call.profile_open_actions": "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F", 44991 "call.dm_title": "\u041B\u0438\u0447\u043D\u044B\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F", 44992 "call.dm_back": "\u041D\u0430\u0437\u0430\u0434 \u043A \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F\u043C", 44993 "call.dm_close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043B\u0438\u0447\u043A\u0443", 44994 "call.dm_status_online": "\u0412 \u0441\u0435\u0442\u0438", 44995 "call.dm_in_room_with": "\u0412 \u044D\u0442\u043E\u0439 \u043A\u043E\u043C\u043D\u0430\u0442\u0435", 44996 "call.dm_private_label": "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u044B\u0439 \u0447\u0430\u0442", 44997 "call.dm_private_meta": "\u042D\u0442\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0432\u044B \u0432\u0434\u0432\u043E\u0435\u043C", 44998 "call.dm_input_placeholder": "\u041D\u0430\u043F\u0438\u0441\u0430\u0442\u044C \u0432 \u043B\u0438\u0447\u043A\u0443\u2026", 44999 "call.dm_send": "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C", 45000 "call.dm_just_now": "\u0441\u0435\u0439\u0447\u0430\u0441", 45001 "call.dm_seen_just_now": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043E \u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u043E", 45002 "call.dm_typing": "{name} \u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u2026", 45003 "call.dm_minimize": "\u0421\u0432\u0435\u0440\u043D\u0443\u0442\u044C", 45004 "call.dm_active_indicator": "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u0438\u0430\u043B\u043E\u0433", 45005 "call.dm_unread_messages": "{count} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445", 45006 "call.dm_toast_tap_to_open": "\u041D\u0430\u0436\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u043E\u0442\u043A\u0440\u044B\u0442\u044C", 45007 "call.dm_reopen_aria": "\u0421\u043D\u043E\u0432\u0430 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0434\u0438\u0430\u043B\u043E\u0433 \u0441 {name}", 45008 "home.join_denied": "\u0425\u043E\u0441\u0442 \u0442\u0435\u0431\u044F \u043D\u0435 \u0432\u043F\u0443\u0441\u0442\u0438\u043B.", 45009 "home.error.room_not_found": "\u0422\u0430\u043A\u043E\u0433\u043E \u043A\u043E\u0434\u0430 \u043A\u043E\u043C\u043D\u0430\u0442\u044B \u043D\u0435\u0442.", 45010 "home.error.profile_required": "\u0417\u0430\u043F\u043E\u043B\u043D\u0438 \u043F\u0440\u043E\u0444\u0438\u043B\u044C, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C.", 45011 "home.cta.set_up_profile": "\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 45012 "home.profile_trigger_new": "\u041D\u0430\u0436\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0438\u043D\u0444\u0443", 45013 "home.profile_trigger_new_aria": "\u041D\u0430\u0441\u0442\u0440\u043E\u0438\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 45014 "home.profile_trigger_edit_aria": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 45015 "profile.eyebrow_new": "\u0441\u043A\u0430\u0436\u0438 \u043F\u0440\u0438\u0432\u0435\u0442", 45016 "profile.eyebrow_edit": "\u0442\u0432\u043E\u0439 \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 45017 "profile.title_new": "\u0421\u0434\u0435\u043B\u0430\u0439 \u043F\u043E-\u0441\u0432\u043E\u0435\u043C\u0443.", 45018 "profile.title_edit": "\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C", 45019 "profile.subtitle": "\u041F\u0430\u0440\u0430 \u0434\u0435\u0442\u0430\u043B\u0435\u0439, \u0447\u0442\u043E\u0431\u044B \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u043D\u0430\u043B\u0438, \u0441 \u043A\u0435\u043C \u043E\u0431\u0449\u0430\u044E\u0442\u0441\u044F.", 45020 "profile.add_photo": "\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45021 "profile.add_photo_soon": "\u0444\u043E\u0442\u043E \u0441\u043A\u043E\u0440\u043E \u0431\u0443\u0434\u0443\u0442", 45022 "profile.photo_empty": "\u043D\u0430\u0436\u043C\u0438, \u0447\u0442\u043E\u0431\u044B \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45023 "profile.photo_ready": "\u0444\u043E\u0442\u043E \u0433\u043E\u0442\u043E\u0432\u043E", 45024 "profile.photo_save_first": "\u0441\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u043E\u0445\u0440\u0430\u043D\u0438 \u043F\u0440\u043E\u0444\u0438\u043B\u044C, \u043F\u043E\u0442\u043E\u043C \u0433\u0440\u0443\u0437\u0438 \u0444\u043E\u0442\u043E", 45025 "profile.photo_crop_caption": "\u043A\u0430\u0434\u0440\u0438\u0440\u0443\u0439 \u0444\u043E\u0442\u043E", 45026 "profile.photo_auto_caption": "\u0434\u0432\u0438\u0433\u0430\u0439 \u0438 \u0437\u0443\u043C\u044C, \u0430 \u043C\u044B \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u043C \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u043E\u043C", 45027 "profile.photo_upload": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45028 "profile.photo_replace": "\u0417\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45029 "profile.photo_remove": "\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45030 "profile.photo_cancel": "\u041E\u0442\u043C\u0435\u043D\u0430", 45031 "profile.photo_save": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0444\u043E\u0442\u043E", 45032 "profile.photo_uploading": "\u0413\u0440\u0443\u0437\u0438\u043C \u0444\u043E\u0442\u043E\u2026", 45033 "profile.photo_removing": "\u0423\u0434\u0430\u043B\u044F\u0435\u043C \u0444\u043E\u0442\u043E\u2026", 45034 "profile.photo_choose_another": "\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u043E\u0435", 45035 "profile.photo_drag_hint": "\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438 \u0444\u043E\u0442\u043E \u0432 \u043A\u0440\u0443\u0433. \u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u0441\u044F \u0441\u0430\u043C\u0438.", 45036 "profile.photo_zoom": "\u0417\u0443\u043C", 45037 "profile.photo_horizontal": "\u041F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0438", 45038 "profile.photo_vertical": "\u041F\u043E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0438", 45039 "profile.name_label": "\u0418\u043C\u044F", 45040 "profile.name_placeholder": "\u041A\u0430\u043A \u0442\u0435\u0431\u044F \u043D\u0430\u0437\u044B\u0432\u0430\u0442\u044C?", 45041 "profile.gender_label": "\u042F", 45042 "profile.gender.woman": "\u0414\u0435\u0432\u0443\u0448\u043A\u0430", 45043 "profile.gender.man": "\u041F\u0430\u0440\u0435\u043D\u044C", 45044 "profile.gender.unspecified": "\u041D\u0435 \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C", 45045 "profile.bio_label": "\u041E \u0441\u0435\u0431\u0435", 45046 "profile.bio_optional": "\u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E", 45047 "profile.bio_placeholder": "\u042F\u0437\u044B\u043A\u0438, \u0438\u043D\u0442\u0435\u0440\u0435\u0441\u044B, \u0434\u0430 \u0447\u0442\u043E \u0443\u0433\u043E\u0434\u043D\u043E\u2026", 45048 "profile.cta_new": "\u041F\u043E\u0433\u043D\u0430\u043B\u0438", 45049 "profile.cta_edit": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", 45050 "profile.saving": "\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u043C\u2026",
45051 "profile.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C", 45052 "profile.error.save_failed": "\u041D\u0435 \u0432\u044B\u0448\u043B\u043E \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u0440\u043E\u0444\u0438\u043B\u044C. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45053 "profile.error.avatar_invalid_type": "\u0412\u044B\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0432 PNG, JPEG, GIF \u0438\u043B\u0438 WebP.", 45054 "profile.error.avatar_too_large": "\u0412\u044B\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0434\u043E 5 \u041C\u0411.", 45055 "profile.error.avatar_too_small": "\u0412\u044B\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0445\u043E\u0442\u044F \u0431\u044B 96x96 \u043F\u0438\u043A\u0441\u0435\u043B\u0435\u0439.", 45056 "profile.error.avatar_load_failed": "\u041D\u0435 \u0441\u043C\u043E\u0433\u043B\u0438 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0434\u0440\u0443\u0433\u043E\u0439 \u0444\u0430\u0439\u043B.", 45057 "profile.error.avatar_failed": "\u041D\u0435 \u0432\u044B\u0448\u043B\u043E \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0444\u043E\u0442\u043E. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45058 "profile.error.avatar_remove_failed": "\u041D\u0435 \u0432\u044B\u0448\u043B\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u043E\u0442\u043E. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45059 "effects.title": "\u042D\u0444\u0444\u0435\u043A\u0442\u044B", 45060 "effects.soft": "\u0421\u043E\u0444\u0442-\u0444\u043E\u043A\u0443\u0441", 45061 "effects.vignette": "\u0412\u0438\u043D\u044C\u0435\u0442\u043A\u0430", 45062 "effects.face": "\u0411\u043B\u044E\u0440 \u043B\u0438\u0446\u0430", 45063 "effects.face_preview_only": "\u0411\u043B\u044E\u0440 \u043B\u0438\u0446\u0430 (\u0442\u043E\u043B\u044C\u043A\u043E \u043F\u0440\u0435\u0432\u044C\u044E)", 45064 "effects.face_viewer_side": "\u0411\u043B\u044E\u0440 \u043B\u0438\u0446\u0430 (\u0443 \u0437\u0440\u0438\u0442\u0435\u043B\u0435\u0439)", 45065 "effects.face_strength": "\u0421\u0438\u043B\u0430 \u0431\u043B\u044E\u0440\u0430", 45066 "effects.grade.off": "\u0412\u042B\u041A\u041B", 45067 "effects.grade.pop": "\u042F\u0420\u041A\u041E", 45068 "effects.grade.warm": "\u0422\u0415\u041F\u041B\u041E", 45069 "effects.grade.cool": "\u0425\u041E\u041B\u041E\u0414", 45070 "effects.grade.bw": "\u0427\u0411", 45071 "camera.off": "\u043A\u0430\u043C\u0435\u0440\u0430 \u0432\u044B\u043A\u043B", 45072 "camera.check": "\u0447\u0435\u043A\u043D\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45073 "camera.retry": "\u043F\u043E\u043F\u0440\u043E\u0431\u043E\u0432\u0430\u0442\u044C \u0435\u0449\u0435 \u0440\u0430\u0437", 45074 "camera.ready": "\u043A\u0430\u043C\u0435\u0440\u0430 \u0433\u043E\u0442\u043E\u0432\u0430", 45075 "camera.idle.title": "\u0412\u043A\u043B\u044E\u0447\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45076 "camera.idle.hint": "\u0417\u0430\u043F\u0440\u043E\u0441\u0438\u043C \u0434\u043E\u0441\u0442\u0443\u043F \u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043A\u043E\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0448\u044C \u0433\u043E\u0442\u043E\u0432.", 45077 "camera.idle.button": "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443", 45078 "camera.status.idle": "\u0416\u0434\u0435\u043C \u0442\u0435\u0431\u044F", 45079 "camera.status.off": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0432\u044B\u043A\u043B\u044E\u0447\u0435\u043D\u0430", 45080 "camera.status.loading": "\u041F\u0440\u043E\u0441\u0438\u043C \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043A\u0430\u043C\u0435\u0440\u0435...", 45081 "camera.status.denied": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043A\u0430\u043C\u0435\u0440\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430.", 45082 "camera.status.error": "\u041F\u0440\u0435\u0432\u044C\u044E \u043A\u0430\u043C\u0435\u0440\u044B \u043E\u0442\u0432\u0430\u043B\u0438\u043B\u043E\u0441\u044C. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45083 "camera.status.unsupported": "\u042D\u0442\u043E\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F \u043A \u043A\u0430\u043C\u0435\u0440\u0435.", 45084 "camera.status.insecure": "\u0414\u043B\u044F \u043A\u0430\u043C\u0435\u0440\u044B \u043D\u0443\u0436\u0435\u043D HTTPS \u0438\u043B\u0438 localhost.", 45085 "camera.status.attach_failed": "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C \u043F\u0440\u0435\u0432\u044C\u044E \u043A\u0430\u043C\u0435\u0440\u044B. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45086 "camera.guest_name_placeholder": "\u0418\u043C\u044F \u0433\u043E\u0441\u0442\u044F", 45087 "camera.flip": "\u0421\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443", 45088 "camera.save_name": "\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C", 45089 "camera.edit_name": "\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0438\u043C\u044F", 45090 "mic.on": "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043C\u0438\u043A\u0440\u043E", 45091 "mic.off": "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043C\u0438\u043A\u0440\u043E", 45092 "video.on": "\u0412\u044B\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443", 45093 "video.off": "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043A\u0430\u043C\u0435\u0440\u0443", 45094 "chat.title": "\u0447\u0430\u0442",
45095 "chat.close": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442", 45096 "chat.loading": "\u0433\u0440\u0443\u0437\u0438\u043C...", 45097 "chat.load_earlier": "\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0441\u0442\u0430\u0440\u044B\u0435", 45098 "chat.empty": "\u043F\u043E\u043A\u0430 \u043D\u0435\u0442 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439", 45099 "chat.send_error": "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043D\u0435 \u0443\u0448\u043B\u043E \u2014 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0435\u0449\u0435 \u0440\u0430\u0437.", 45100 "chat.input_placeholder": "\u043D\u0430\u043F\u0438\u0448\u0438 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435...", 45101 "room.host": "\u0425\u043E\u0441\u0442", 45102 "app.room_default_title": "\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043A\u043E\u043C\u043D\u0430\u0442\u0443", 45103 "app.chat_connection_rejected": "\u0427\u0430\u0442 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u043B\u0441\u044F \u2014 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C.", 45104 "app.copy_failed": "\u041D\u0435 \u0432\u044B\u0448\u043B\u043E \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0432\u044B\u0434\u0435\u043B\u0438\u0442\u044C \u0438 \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E.", 45105 "app.chat_not_connected": "\u0427\u0430\u0442 \u0435\u0449\u0435 \u043D\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u043B\u0441\u044F. \u041F\u043E\u0434\u043E\u0436\u0434\u0438 \u0441\u0435\u043A\u0443\u043D\u0434\u0443 \u0438 \u043F\u043E\u043F\u0440\u043E\u0431\u0443\u0439 \u0441\u043D\u043E\u0432\u0430.", 45106 "footer.terms": "\u0423\u0441\u043B\u043E\u0432\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F", 45107 "footer.copyright": "\xA9 2026 Yano.AI" 45108}; 45109
45110// app/javascript/yano/locales/th.js 45111var th_default = { 45112 "home.heading.default": "\u0E21\u0E32\u0E04\u0E38\u0E22\u0E01\u0E31\u0E19", 45113 "home.heading.loading": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1B\u0E34\u0E14\u0E2B\u0E49\u0E2D\u0E07...", 45114 "home.heading.join": "\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07\u0E22\u0E31\u0E07?", 45115 "home.heading.joined": "\u0E40\u0E02\u0E49\u0E32\u0E21\u0E32\u0E41\u0E25\u0E49\u0E27", 45116 "home.heading.pending": "\u0E23\u0E2D\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E41\u0E1B\u0E4A\u0E1A", 45117 "home.body.default": "\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E49\u0E2D\u0E07 \u0E41\u0E1B\u0E30\u0E25\u0E34\u0E07\u0E01\u0E4C \u0E41\u0E25\u0E49\u0E27\u0E0A\u0E34\u0E25\u0E40\u0E25\u0E22", 45118 "home.body.loading": "\u0E41\u0E1B\u0E4A\u0E1A\u0E19\u0E36\u0E07\u0E19\u0E30 \u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E15\u0E23\u0E35\u0E22\u0E21\u0E2B\u0E49\u0E2D\u0E07\u0E43\u0E2B\u0E49", 45119 "home.body.join": "\u0E40\u0E0A\u0E47\u0E04\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A\u0E44\u0E21\u0E04\u0E4C\u0E43\u0E2B\u0E49\u0E0A\u0E31\u0E27\u0E23\u0E4C \u0E41\u0E25\u0E49\u0E27\u0E01\u0E14\u0E40\u0E02\u0E49\u0E32\u0E40\u0E25\u0E22", 45120 "home.body.joined": "\u0E2B\u0E49\u0E2D\u0E07\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E41\u0E25\u0E49\u0E27 \u0E41\u0E0A\u0E23\u0E4C\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E23\u0E34\u0E48\u0E21\u0E04\u0E38\u0E22\u0E44\u0E14\u0E49\u0E40\u0E25\u0E22", 45121 "home.body.joined_in_room": "\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E2B\u0E49\u0E2D\u0E07\u0E41\u0E25\u0E49\u0E27 \u2014 \u0E25\u0E38\u0E22\u0E40\u0E25\u0E22\u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E30\u0E41\u0E0A\u0E23\u0E4C\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E01\u0E48\u0E2D\u0E19\u0E01\u0E47\u0E44\u0E14\u0E49", 45122 "home.body.pending": "\u0E2B\u0E49\u0E2D\u0E07\u0E25\u0E47\u0E2D\u0E04\u0E2D\u0E22\u0E39\u0E48 \u0E23\u0E2D\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E01\u0E14\u0E23\u0E31\u0E1A\u0E19\u0E30", 45123 "home.cta.create": "\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E49\u0E2D\u0E07", 45124 "home.cta.join": "\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45125 "home.cta.enter": "\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45126 "home.cta.creating": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2A\u0E23\u0E49\u0E32\u0E07...", 45127 "home.cta.joining": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E02\u0E49\u0E32...", 45128 "home.cta.opening": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1B\u0E34\u0E14...", 45129 "home.cta.pending": "\u0E23\u0E2D\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E23\u0E31\u0E1A...", 45130 "home.copy_link": "\u0E01\u0E4A\u0E2D\u0E1B\u0E25\u0E34\u0E07\u0E01\u0E4C", 45131 "home.copied": "\u0E01\u0E4A\u0E2D\u0E1B\u0E41\u0E25\u0E49\u0E27!", 45132 "home.leave": "\u0E2D\u0E2D\u0E01\u0E2B\u0E49\u0E2D\u0E07", 45133 "home.back": "\u0E01\u0E25\u0E31\u0E1A", 45134 "home.no_participants": "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E43\u0E04\u0E23\u0E21\u0E32", 45135 "home.join_by_code": "\u0E43\u0E2A\u0E48\u0E42\u0E04\u0E49\u0E14\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45136 "home.code_placeholder": "\u0E43\u0E2A\u0E48\u0E42\u0E04\u0E49\u0E14", 45137 "home.name_placeholder": "\u0E0A\u0E37\u0E48\u0E2D\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13", 45138 "home.people_one": "\u0E04\u0E19", 45139 "home.people_other": "\u0E04\u0E19", 45140 "home.marketing.invite.title": "\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E49\u0E2D\u0E07\n\u0E41\u0E25\u0E49\u0E27\u0E41\u0E0A\u0E23\u0E4C\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E40\u0E25\u0E22", 45141 "home.marketing.invite.body": "\u0E01\u0E14\u0E1B\u0E38\u0E48\u0E21\u0E40\u0E14\u0E35\u0E22\u0E27\u0E40\u0E23\u0E34\u0E48\u0E21\u0E44\u0E14\u0E49\u0E40\u0E25\u0E22 \u0E41\u0E0A\u0E23\u0E4C\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E43\u0E2B\u0E49\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E19\u0E40\u0E02\u0E49\u0E32\u0E44\u0E14\u0E49\u0E17\u0E31\u0E19\u0E17\u0E35 \u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E42\u0E2B\u0E25\u0E14\u0E41\u0E2D\u0E1B \u0E44\u0E21\u0E48\u0E15\u0E49\u0E2D\u0E07\u0E2A\u0E21\u0E31\u0E04\u0E23", 45142 "home.marketing.invite.preview_url": "yano.ai/ROOM", 45143 "home.marketing.look.title": "\u0E1B\u0E23\u0E31\u0E1A\u0E25\u0E38\u0E04\n\u0E44\u0E14\u0E49\u0E15\u0E32\u0E21\u0E43\u0E08", 45144 "home.marketing.look.body": "\u0E41\u0E15\u0E48\u0E07\u0E2A\u0E35 \u0E17\u0E33\u0E2B\u0E19\u0E49\u0E32\u0E40\u0E19\u0E35\u0E22\u0E19 \u0E43\u0E2A\u0E48\u0E02\u0E2D\u0E1A\u0E14\u0E33 \u2014 \u0E2B\u0E23\u0E37\u0E2D\u0E08\u0E30\u0E40\u0E1A\u0E25\u0E2D\u0E2B\u0E19\u0E49\u0E32\u0E44\u0E1B\u0E40\u0E25\u0E22\u0E01\u0E47\u0E44\u0E14\u0E49 \u0E01\u0E25\u0E49\u0E2D\u0E07\u0E04\u0E38\u0E13 \u0E2A\u0E44\u0E15\u0E25\u0E4C\u0E04\u0E38\u0E13", 45145 "home.marketing.host.title": "\u0E1E\u0E37\u0E49\u0E19\u0E17\u0E35\u0E48\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13\n\u0E01\u0E0E\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13", 45146 "home.marketing.host.body": "\u0E25\u0E47\u0E2D\u0E04\u0E2B\u0E49\u0E2D\u0E07 \u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C \u0E2B\u0E23\u0E37\u0E2D\u0E40\u0E15\u0E30\u0E04\u0E19\u0E2D\u0E2D\u0E01 \u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E04\u0E38\u0E21\u0E44\u0E14\u0E49\u0E2B\u0E21\u0E14", 45147 "home.marketing.host.locked": "\u0E25\u0E47\u0E2D\u0E04\u0E2B\u0E49\u0E2D\u0E07\u0E41\u0E25\u0E49\u0E27", 45148 "home.marketing.host.waiting_to_join": "\u0E23\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45149 "home.marketing.host.wants_to_join": "\u0E02\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45150 "home.marketing.anything.title": "\u0E43\u0E0A\u0E49\u0E17\u0E33\u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E44\u0E14\u0E49\u0E08\u0E23\u0E34\u0E07\u0E46", 45151 "home.marketing.anything.body": "\u0E15\u0E34\u0E27\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D \u0E40\u0E25\u0E48\u0E19\u0E40\u0E01\u0E21 \u0E04\u0E38\u0E22\u0E07\u0E32\u0E19 \u0E14\u0E39\u0E2B\u0E19\u0E31\u0E07\u0E14\u0E49\u0E27\u0E22\u0E01\u0E31\u0E19 \u2014 \u0E2B\u0E23\u0E37\u0E2D\u0E41\u0E04\u0E48\u0E19\u0E31\u0E48\u0E07\u0E0A\u0E34\u0E25\u0E40\u0E09\u0E22\u0E4
451516 \u0E01\u0E47\u0E44\u0E14\u0E49", 45152 "home.marketing.use_case.study_group": "\u{1F4DA} \u0E15\u0E34\u0E27\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D", 45153 "home.marketing.use_case.game_night": "\u{1F3AE} \u0E40\u0E25\u0E48\u0E19\u0E40\u0E01\u0E21", 45154 "home.marketing.use_case.standup": "\u{1F4BC} \u0E04\u0E38\u0E22\u0E07\u0E32\u0E19", 45155 "home.marketing.use_case.watch_party": "\u{1F37F} \u0E14\u0E39\u0E2B\u0E19\u0E31\u0E07", 45156 "home.marketing.use_case.catch_up": "\u2615 \u0E2D\u0E31\u0E1B\u0E40\u0E14\u0E15\u0E0A\u0E35\u0E27\u0E34\u0E15", 45157 "home.marketing.use_case.jam_session": "\u{1F3B8} \u0E40\u0E25\u0E48\u0E19\u0E14\u0E19\u0E15\u0E23\u0E35", 45158 "home.marketing.use_case.book_club": "\u{1F4D6} \u0E04\u0E38\u0E22\u0E40\u0E23\u0E37\u0E48\u0E2D\u0E07\u0E2B\u0E19\u0E31\u0E07\u0E2A\u0E37\u0E2D", 45159 "home.marketing.use_case.coworking": "\u{1F4BB} \u0E19\u0E31\u0E48\u0E07\u0E17\u0E33\u0E07\u0E32\u0E19\u0E14\u0E49\u0E27\u0E22\u0E01\u0E31\u0E19", 45160 "ended.heading": "\u0E08\u0E1A\u0E2A\u0E32\u0E22\u0E41\u0E25\u0E49\u0E27", 45161 "ended.left": "\u0E04\u0E38\u0E13\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E2B\u0E49\u0E2D\u0E07\u0E41\u0E25\u0E49\u0E27", 45162 "ended.room_ended": "{title} \u0E08\u0E1A\u0E25\u0E07\u0E41\u0E25\u0E49\u0E27", 45163 "ended.rejoin": "\u0E40\u0E02\u0E49\u0E32\u0E43\u0E2B\u0E21\u0E48", 45164 "ended.rejoining": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E02\u0E49\u0E32\u0E43\u0E2B\u0E21\u0E48...", 45165 "ended.home": "\u0E01\u0E25\u0E31\u0E1A\u0E2B\u0E19\u0E49\u0E32\u0E41\u0E23\u0E01", 45166 "call.connecting": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D", 45167 "call.waiting": "\u0E23\u0E2D\u0E04\u0E19\u0E2D\u0E37\u0E48\u0E19\u0E41\u0E1B\u0E4A\u0E1A", 45168 "call.invite_code": "\u0E42\u0E04\u0E49\u0E14\u0E40\u0E0A\u0E34\u0E0D", 45169 "call.audio_on": "\u0E40\u0E1B\u0E34\u0E14\u0E40\u0E2A\u0E35\u0E22\u0E07", 45170 "call.muted": "\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C\u0E2D\u0E22\u0E39\u0E48", 45171 "call.listening": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E1F\u0E31\u0E07", 45172 "call.audio_muted": "\u0E1B\u0E34\u0E14\u0E40\u0E2A\u0E35\u0E22\u0E07\u0E2D\u0E22\u0E39\u0E48", 45173 "call.speaking": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E1E\u0E39\u0E14", 45174 "call.you": "\u0E04\u0E38\u0E13", 45175 "call.you_label": "\u0E04\u0E38\u0E13", 45176 "call.you_suffix": "(\u0E04\u0E38\u0E13)", 45177 "call.chat_placeholder": "\u0E1E\u0E34\u0E21\u0E1E\u0E4C\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21...", 45178 "call.guest": "\u0E40\u0E01\u0E2A\u0E15\u0E4C", 45179 "call.room_fallback": "\u0E2B\u0E49\u0E2D\u0E07", 45180 "call.focus_view": "\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07\u0E42\u0E1F\u0E01\u0E31\u0E2A", 45181 "call.grid_view": "\u0E21\u0E38\u0E21\u0E21\u0E2D\u0E07\u0E01\u0E23\u0E34\u0E14", 45182 "call.swap_main_video": "\u0E2A\u0E25\u0E31\u0E1A\u0E27\u0E34\u0E14\u0E35\u0E42\u0E2D\u0E2B\u0E25\u0E31\u0E01", 45183 "call.open_chat": "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17", 45184 "call.close_chat": "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17", 45185 "call.leave_room": "\u0E2D\u0E2D\u0E01\u0E2B\u0E49\u0E2D\u0E07", 45186 "call.confirm_leave": "\u0E2D\u0E2D\u0E01\u0E40\u0E25\u0E22\u0E21\u0E31\u0E49\u0E22?", 45187 "call.mic_on": "\u0E40\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C", 45188 "call.muted_label": "\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C\u0E2D\u0E22\u0E39\u0E48", 45189 "call.camera_off": "\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07", 45190 "call.connect_failed": "\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E44\u0E21\u0E48\u0E15\u0E34\u0E14 \u2014 \u0E40\u0E0A\u0E47\u0E04\u0E40\u0E19\u0E47\u0E15\u0E41\u0E25\u0E49\u0E27\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E19\u0E30", 45191 "call.camera_access_failed": "\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E40\u0E0A\u0E47\u0E04\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E43\u0E19\u0E40\u0E1A\u0E23\u0E32\u0E27\u0E4C\u0E40\u0E0B\u0E2D\u0E23\u0E4C\u0E41\u0E25\u0E49\u0E27\u0E40\u0E02\u0E49\u0E32\u0E43\u0E2B\u0E21\u0E48\u0E14\u0E39\u0E19\u0E30", 45192 "call.recording_failed": "\u0E2D\u0E31\u0E14\u0E27\u0E34\u0E14\u0E35\u0E42\u0E2D\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E41\u0E15\u0E48\u0E22\u0E31\u0E07\u0E04\u0E38\u0E22\u0E15\u0E48\u0E2D\u0E44\u0E14\u0E49\u0E1B\u0E01\u0E15\u0E34\u0E19\u0E30", 45193 "call.initialize_failed": "\u0E21\u0E35\u0E1B\u0E31\u0E0D\u0E2B\u0E32\u0E15\u0E2D\u0E19\u0E40\u0E23\u0E34\u0E48\u0E21\u0E2A\u0E32\u0E22 \u0E25\u0E2D\u0E07\u0E23\u0E35\u0E40\u0E1F\u0E23\u0E0A\u0E41\u0E25\u0E49\u0E27\u0E40\u0E02\u0E49\u0E32\u0E43\u0E2B\u0E21\u0E48\u0E19\u0E30", 45194 "call.participants": "\u0E04\u0E19\u0E43\u0E19\u0E2B\u0E49\u0E2D\u0E07", 45195 "call.open_participants": "\u0E14\u0E39\u0E04\u0E19\u0E43\u0E19\u0E2B\u0E49\u0E2D\u0E07", 45196 "call.close_participants": "\u0E1B\u0E34\u0E14\u0E23\u0E32\u0E22\u0E0A\u0E37\u0E48\u0E2D", 45197 "call.lock_room": "\u0E25\u0E47\u0E2D\u0E04\u0E2B\u0E49\u0E2D\u0E07", 45198 "call.unlock_room": "\u0E1B\u0E25\u0E14\u0E25\u0E47\u0E2D\u0E04\u0E2B\u0E49\u0E2D\u0E07", 45199 "call.locked": "\u0E25\u0E47\u0E2D\u0E04\u0E2D\u0E22\u0E39\u0E48", 45200 "call.unlocked": "\u0E40\u0E1B\u0E34\u0E14\u0E2D\u0E22\u0E39\u0E48", 45201 "call.kick_member": "\u0E40\u0E15\u0E30\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E2B\u0E49\u0E2D\u0E07", 45202 "call.mute_member": "\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C", 45203 "call.unmute_member": "\u0E40\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C", 45204 "call.muted_by_host": "\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C\u0E2D\u0E22\u0E39\u0E48", 45205 "call.waiting_to_join": "\u0E23\u0E2D\u0E40\u0E02\u0E49\u0E32\u0E2B\u0E49\u0E2D\u0E07", 45206 "call.approve": "\u0E43\u0E2B\u0E49\u0E40\u0E02\u0E49\u0E32", 45207 "call.deny": "\u0E44\u0E21\u0E48\u0E43\u0E2B\u0E49\u0E40\u0E02\u0E49\u0E32", 45208 "call.profile_actions": "\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45209 "call.profile_in_room": "\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E2B\u0E49\u0E2D\u0E07", 45210 "call.profile_role_host": "\u0E42\u0E2E\u0E2A\u0E15\u0E4C", 45211 "call.profile_role_you": "\u0E04\u0E38\u0E13", 45212 "call.profile_action_mute": "\u0E1B\u0E34\u0E14\u0E40\u0E2A\u0E35\u0E22\u0E07\u0E04\u0E19\u0E19\u0E35\u0E49", 45213 "call.profile_action_mute_meta": "\u0E1B\u0E34\u0E14\u0E41\u0E04\u0E48\u0E1D\u0E31\u0E48\u0E07\u0E40\u0E23\u0E32 \u2014 \u0E40\u0E04\u0E49\u0E32\u0E44\u0E21\u0E48\u0E23\u0E39\u0E49\u0E2B\u0E23\u0E2D\u0E01", 45214 "call.profile_action_dm": "\u0E17\u0E31\u0E01 DM", 45215 "call.profile_action_dm_meta": "\u0E41\u0E0A\u0E17\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E31\u0E27\u0E41\u0E1A\u0E1A 1:1", 45216 "call.profile_action_view": "\u0E14\u0E39\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E40\u0E15\u0E47\u0E21", 45217 "call.profile_action_view_meta": "\u0E44\u0E1A\u0E42\u0E2D \u0E20\u0E32\u0E29\u0E32 \u0E2B\u0E49\u0E2D\u0E07\u0E17\u0E35\u0E48\u0E40\u0E04\u0E22\u0E40\u0E02\u0E49\u0E32", 45218 "call.profile_action_report": "\u0E23\u0E35\u0E1E\u0E2D\u0E23\u0E4C\u0E15", 45219 "call.profile_action_report_meta": "\u0E41\u0E08\u0E49\u0E07\u0E43\u0E2B\u0E49\u0E41\u0E2D\u0E14\u0E21\u0E34\u0E19\u0E15\u0E23\u0E27\u0E08\u0E2A\u0E2D\u0E1A", 45220 "call.profile_sheet_close": "\u0E1B\u0E34\u0E14\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45221 "call.profile_open_actions": "\u0E40\u0E1B\u0E34\u0E14\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45222 "call.dm_title": "\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E31\u0E27", 45223 "call.dm_back": "\u0E01\u0E25\u0E31\u0E1A", 45224 "call.dm_close": "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E31\u0E27", 45225 "call.dm_status_online": "\u0E2D\u0E2D\u0E19\u0E44\u0E25\u0E19\u0E4C", 45226 "call.dm_in_room_with": "\u0E2D\u0E22\u0E39\u0E48\u0E43\u0E19\u0E2B\u0E49\u0E2D\u0E07\u0E19\u0E35\u0E49", 45227 "call.dm_private_label": "\u0E41\u0E0A\u0E17\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E31\u0E27", 45228 "call.dm_private_meta": "\u0E40\u0E2B\u0E47\u0E19\u0E01\u0E31\u0E19\u0E41\u0E04\u0E48\u0E2A\u0E2D\u0E07\u0E04\u0E19\u0E19\u0E30", 45229 "call.dm_input_placeholder": "\u0E2A\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E31\u0E27\u2026", 45230 "call.dm_send": "\u0E2A\u0E48\u0E07", 45231 "call.dm_just_now": "\u0E40\u0E21\u0E37\u0E48\u0E2D\u0E01\u0E35\u0E49", 45232 "call.dm_seen_just_now": "\u0E40\u0E1E\u0E34\u0E48\u0E07\u0E2D\u0E48\u0E32\u0E19", 45233 "call.dm_typing": "{name} \u0E01\u0E33\u0E25\u0E31\u0E07\u0E1E\u0E34\u0E21\u0E1E\u0E4C\u2026", 45234 "call.dm_minimize": "\u0E22\u0E48\u0E2D\u0E2B\u0E19\u0E49\u0E32\u0E15\u0E48\u0E32\u0E07", 45235 "call.dm_active_indicator": "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17", 45236 "call.dm_unread_messages": "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E2D\u0E48\u0E32\u0E19 {count} \u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21", 45237 "call.dm_toast_tap_to_open": "\u0E41\u0E15\u0E30\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1B\u0E34\u0E14", 45238 "call.dm_reopen_aria": "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17\u0E01\u0E31\u0E1A {name} \u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07", 45239 "home.join_denied": "\u0E42\u0E2E\u0E2A\u0E15\u0E4C\u0E44\u0E21\u0E48\u0E43\u0E2B\u0E49\u0E40\u0E02\u0E49\u0E32\u0E19\u0E30", 45240 "home.error.room_not_found": "\u0E44\u0E21\u0E48\u0E21\u0E35\u0E42\u0E04\u0E49\u0E14\u0E2B\u0E49\u0E2D\u0E07\u0E19\u0E35\u0E49\u0E19\u0E30", 45241 "home.error.profile_required": "\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E01\u0E48\u0E2D\u0E19\u0E44\u0E1B\u0E15\u0E48\u0E2D\u0E19\u0E30", 45242 "home.cta.set_up_profile": "\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45243 "home.profile_trigger_new": "\u0E41\u0E15\u0E30\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25", 45244 "home.profile_trigger_new_aria": "\u0E15\u0E31\u0E49\u0E07\u0E04\u0E48\u0E32\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45245 "home.profile_trigger_edit_aria": "\u0E41\u0E01\u0E49\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45246 "profile.eyebrow_new": "\u0E17\u0E31\u0E01\u0E17\u0E32\u0E22", 45247 "profile.eyebrow_edit": "\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13", 45248 "profile.title_new": "\u0E41\u0E15\u0E48\u0E07\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E43\u0E19\u0E41\u0E1A\u0E1A\u0E04\u0E38\u0E13", 45249 "profile.title_edit": "\u0E41\u0E01\u0E49\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C", 45250 "profile.subtitle": "\u0E43\u0E2A\u0E48\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E19\u0E34\u0E14\u0E19\u0E36\u0E07 \u0E04\u0E19\u0E2D\u0E37\u0E48\u0E19\u0E08\u0E30\u0E44\u0E14\u0E49\u0E23\u0E39\u0E49\u0E27\u0E48\u0E32\u0E04\u0E38\u0E22\u0E01\u0E31\u0E1A\u0E43\u0E04\u0E23\u0E2D\u0E22\u0E39\u0E48", 45251 "profile.add_photo": "\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E23\u0E39\u0E1B", 45252 "profile.add_photo_soon": "\u0E23\u0E30\u0E1A\u0E1A\u0E23\u0E39\u0E1B\u0E01\u0E33\u0E25\u0E31\u0E07\u0E15\u0E32\u0E21\u0E21\u0E32", 45253 "profile.photo_empty": "\u0E41\u0E15\u0E30\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E23\u0E39\u0E1B", 45254 "profile.photo_ready": "\u0E23\u0E39\u0E1B\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E41\u0E25\u0E49\u0E27", 45255 "profile.photo_save_first": "\u0E40\u0E0B\u0E1F\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E01\u0E48\u0E2D\u0E19\u0E2D\u0E31\u0E1B\u0E23\u0E39\u0E1B\u0E19\u0E30", 45256 "profile.photo_crop_caption": "\u0E08\u0E31\u0E14\u0E01\u0E23\u0E2D\u0E1A\u0E23\u0E39\u0E1B", 45257 "profile.photo_auto_caption": "\u0E25\u0E32\u0E01\u0E41\u0E25\u0E30\u0E0B\u0E39\u0E21\u0E44\u0E14\u0E49\u0E40\u0E25\u0E22 \u0E40\u0E14\u0E35\u0E4B\u0E22\u0E27\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E0B\u0E1F\u0E43\u0E2B\u0E49\u0E2D\u0E2D\u0E42\u0E15\u0E49", 45258 "profile.photo_upload": "\u0E2D\u0E31\u0E1B\u0E23\u0E39\u0E1B", 45259 "profile.photo_replace": "\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E23\u0E39\u0E1B", 45260 "profile.photo_remove": "\u0E25\u0E1A\u0E23\u0E39\u0E1B", 45261 "profile.photo_cancel": "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01", 45262 "profile.photo_save": "\u0E40\u0E0B\u0E1F\u0E23\u0E39\u0E1B", 45263 "profile.photo_uploading": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2D\u0E31\u0E1B\u0E23\u0E39\u0E1B\u2026", 45264 "profile.photo_removing": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E25\u0E1A\u0E23\u0E39\u0E1B\u2026", 45265 "profile.photo_choose_another": "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E39\u0E1B\u0E2D\u0E37\u0E48\u0E19", 45266 "profile.photo_drag_hint": "\u0E25\u0E32\u0E01\u0E23\u0E39\u0E1B\u0E43\u0E2B\u0E49\u0E1E\u0E2D\u0E14\u0E35\u0E43\u0E19\u0E27\u0E07\u0E01\u0E25\u0E21 \u0E23\u0E30\u0E1A\u0E1A\u0E08\u0E30\u0E40\u0E0B\u0E1F\u0E43\u0E2B\u0E49\u0E2D\u0E2D\u0E42\u0E15\u0E49\u0E40\u0E25\u0E22", 45267 "profile.photo_zoom": "\u0E0B\u0E39\u0E21", 45268 "profile.photo_horizontal": "\u0E04\u0E23\u0E2D\u0E1B\u0E41\u0E19\u0E27\u0E19\u0E2D\u0E19", 45269 "profile.photo_vertical": "\u0E04\u0E23\u0E2D\u0E1B\u0E41\u0E19\u0E27\u0E15\u0E31\u0E49\u0E07", 45270 "profile.name_label": "\u0E0A\u0E37\u0E48\u0E2D", 45271 "profile.name_placeholder": "\u0E43\u0E2B\u0E49\u0E40\u0E23\u0E32\u0E40\u0E23\u0E35\u0E22\u0E01\u0E04\u0E38\u0E13\u0E27\u0E48\u0E32\u0E2D\u0E30\u0E44\u0E23\u0E14\u0E35?", 45272 "profile.gender_label": "\u0E09\u0E31\u0E19\u0E40\u0E1B\u0E47\u0E19", 45273 "profile.gender.woman": "\u0E1C\u0E39\u0E49\u0E2B\u0E0D\u0E34\u0E07", 45274 "profile.gender.man": "\u0E1C\u0E39\u0E49\u0E0A\u0E32\u0E22", 45275 "profile.gender.unspecified": "\u0E44\u0E21\u0E48\u0E23\u0E30\u0E1A\u0E38", 45276 "profile.bio_label": "\u0E44\u0E1A\u0E42\u0E2D", 45277 "profile.bio_optional": "\u0E44\u0E21\u0E48\u0E1A\u0E31\u0E07\u0E04\u0E31\u0E1A", 45278 "profile.bio_placeholder": "\u0E20\u0E32\u0E29\u0E32\u0E17\u0E35\u0E48\u0E1E\u0E39\u0E14 \u0E2A\u0E34\u0E48\u0E07\u0E17\u0E35\u0E48\u0E0A\u0E2D\u0E1A \u0E2B\u0E23\u0E37\u0E2D\u0E2D\u0E30\u0E44\u0E23\u0E01\u0E47\u0E44\u0E14\u0E49\u2026", 45279 "profile.cta_new": "\u0E25\u0E38\u0E22\u0E40\u0E25\u0E22", 45280 "profile.cta_edit": "\u0E40\u0E0B\u0E1F", 45281 "profile.saving": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E0B\u0E1F\u2026",
45282 "profile.close": "\u0E1B\u0E34\u0E14", 45283 "profile.error.save_failed": "\u0E40\u0E0B\u0E1F\u0E42\u0E1B\u0E23\u0E44\u0E1F\u0E25\u0E4C\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E30", 45284 "profile.error.avatar_invalid_type": "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E39\u0E1B PNG, JPEG, GIF \u0E2B\u0E23\u0E37\u0E2D WebP \u0E19\u0E30", 45285 "profile.error.avatar_too_large": "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E39\u0E1B\u0E02\u0E19\u0E32\u0E14\u0E44\u0E21\u0E48\u0E40\u0E01\u0E34\u0E19 5 MB \u0E19\u0E30", 45286 "profile.error.avatar_too_small": "\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E23\u0E39\u0E1B\u0E02\u0E19\u0E32\u0E14 96x96 \u0E1E\u0E34\u0E01\u0E40\u0E0B\u0E25\u0E02\u0E36\u0E49\u0E19\u0E44\u0E1B\u0E19\u0E30", 45287 "profile.error.avatar_load_failed": "\u0E2D\u0E48\u0E32\u0E19\u0E44\u0E1F\u0E25\u0E4C\u0E23\u0E39\u0E1B\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E23\u0E39\u0E1B\u0E14\u0E39\u0E19\u0E30", 45288 "profile.error.avatar_failed": "\u0E2D\u0E31\u0E1B\u0E23\u0E39\u0E1B\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E30", 45289 "profile.error.avatar_remove_failed": "\u0E25\u0E1A\u0E23\u0E39\u0E1B\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E30", 45290 "effects.title": "\u0E40\u0E2D\u0E1F\u0E40\u0E1F\u0E01\u0E15\u0E4C", 45291 "effects.soft": "\u0E2B\u0E19\u0E49\u0E32\u0E40\u0E19\u0E35\u0E22\u0E19", 45292 "effects.vignette": "\u0E02\u0E2D\u0E1A\u0E14\u0E33", 45293 "effects.face": "\u0E40\u0E1A\u0E25\u0E2D\u0E2B\u0E19\u0E49\u0E32", 45294 "effects.face_preview_only": "\u0E40\u0E1A\u0E25\u0E2D\u0E2B\u0E19\u0E49\u0E32 (\u0E14\u0E39\u0E44\u0E14\u0E49\u0E41\u0E04\u0E48\u0E40\u0E23\u0E32)", 45295 "effects.face_viewer_side": "\u0E40\u0E1A\u0E25\u0E2D\u0E2B\u0E19\u0E49\u0E32 (\u0E04\u0E19\u0E2D\u0E37\u0E48\u0E19\u0E40\u0E2B\u0E47\u0E19)", 45296 "effects.face_strength": "\u0E23\u0E30\u0E14\u0E31\u0E1A\u0E04\u0E27\u0E32\u0E21\u0E40\u0E1A\u0E25\u0E2D", 45297 "effects.grade.off": "\u0E1B\u0E34\u0E14", 45298 "effects.grade.pop": "\u0E2A\u0E14\u0E43\u0E2A", 45299 "effects.grade.warm": "\u0E42\u0E17\u0E19\u0E2D\u0E38\u0E48\u0E19", 45300 "effects.grade.cool": "\u0E42\u0E17\u0E19\u0E40\u0E22\u0E47\u0E19", 45301 "effects.grade.bw": "\u0E02\u0E32\u0E27\u0E14\u0E33", 45302 "camera.off": "\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E2D\u0E22\u0E39\u0E48", 45303 "camera.check": "\u0E40\u0E0A\u0E47\u0E04\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E41\u0E1B\u0E4A\u0E1A", 45304 "camera.retry": "\u0E25\u0E2D\u0E07\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48", 45305 "camera.ready": "\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E1E\u0E23\u0E49\u0E2D\u0E21", 45306 "camera.idle.title": "\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E2B\u0E19\u0E48\u0E2D\u0E22", 45307 "camera.idle.hint": "\u0E40\u0E14\u0E35\u0E4B\u0E22\u0E27\u0E40\u0E23\u0E32\u0E08\u0E30\u0E02\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E08\u0E32\u0E01\u0E40\u0E1A\u0E23\u0E32\u0E27\u0E4C\u0E40\u0E0B\u0E2D\u0E23\u0E4C\u0E19\u0E30", 45308 "camera.idle.button": "\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07", 45309 "camera.status.idle": "\u0E23\u0E2D\u0E04\u0E38\u0E13\u0E2D\u0E22\u0E39\u0E48", 45310 "camera.status.off": "\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E2D\u0E22\u0E39\u0E48", 45311 "camera.status.loading": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E02\u0E2D\u0E2A\u0E34\u0E17\u0E18\u0E34\u0E4C\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E01\u0E25\u0E49\u0E2D\u0E07...", 45312 "camera.status.denied": "\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15\u0E43\u0E2B\u0E49\u0E40\u0E1A\u0E23\u0E32\u0E27\u0E4C\u0E40\u0E0B\u0E2D\u0E23\u0E4C\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E01\u0E48\u0E2D\u0E19 \u0E41\u0E25\u0E49\u0E27\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E19\u0E30", 45313 "camera.status.error": "\u0E1E\u0E23\u0E35\u0E27\u0E34\u0E27\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E17\u0E35", 45314 "camera.status.unsupported": "\u0E40\u0E1A\u0E23\u0E32\u0E27\u0E4C\u0E40\u0E0B\u0E2D\u0E23\u0E4C\u0E19\u0E35\u0E49\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07", 45315 "camera.status.insecure": "\u0E01\u0E32\u0E23\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E2D\u0E07\u0E43\u0E0A\u0E49 HTTPS \u0E2B\u0E23\u0E37\u0E2D localhost", 45316 "camera.status.attach_failed": "\u0E40\u0E1B\u0E34\u0E14\u0E1E\u0E23\u0E35\u0E27\u0E34\u0E27\u0E01\u0E25\u0E49\u0E2D\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E2D\u0E35\u0E01\u0E17\u0E35\u0E19\u0E30", 45317 "camera.guest_name_placeholder": "\u0E0A\u0E37\u0E48\u0E2D\u0E40\u0E01\u0E2A\u0E15\u0E4C", 45318 "camera.flip": "\u0E2A\u0E25\u0E31\u0E1A\u0E01\u0E25\u0E49\u0E2D\u0E07", 45319 "camera.save_name": "\u0E40\u0E0B\u0E1F", 45320 "camera.edit_name": "\u0E41\u0E01\u0E49\u0E0A\u0E37\u0E48\u0E2D", 45321 "mic.on": "\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C", 45322 "mic.off": "\u0E40\u0E1B\u0E34\u0E14\u0E44\u0E21\u0E04\u0E4C", 45323 "video.on": "\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07", 45324 "video.off": "\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E25\u0E49\u0E2D\u0E07", 45325 "chat.title": "\u0E41\u0E0A\u0E17",
45326 "chat.close": "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17", 45327 "chat.loading": "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...", 45328 "chat.load_earlier": "\u0E42\u0E2B\u0E25\u0E14\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E01\u0E48\u0E2D\u0E19\u0E2B\u0E19\u0E49\u0E32", 45329 "chat.empty": "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21", 45330 "chat.send_error": "\u0E2A\u0E48\u0E07\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E44\u0E21\u0E48\u0E44\u0E1B \u2014 \u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E19\u0E30", 45331 "chat.input_placeholder": "\u0E1E\u0E34\u0E21\u0E1E\u0E4C\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21...", 45332 "room.host": "\u0E42\u0E2E\u0E2A\u0E15\u0E4C", 45333 "app.room_default_title": "\u0E2A\u0E23\u0E49\u0E32\u0E07\u0E2B\u0E49\u0E2D\u0E07", 45334 "app.chat_connection_rejected": "\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E0A\u0E17\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u2014 \u0E25\u0E2D\u0E07\u0E23\u0E35\u0E40\u0E1F\u0E23\u0E0A\u0E14\u0E39\u0E19\u0E30", 45335 "app.copy_failed": "\u0E01\u0E4A\u0E2D\u0E1B\u0E25\u0E34\u0E07\u0E01\u0E4C\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49 \u0E25\u0E2D\u0E07\u0E04\u0E25\u0E38\u0E21\u0E14\u0E33\u0E41\u0E25\u0E49\u0E27\u0E01\u0E4A\u0E2D\u0E1B\u0E40\u0E2D\u0E07\u0E14\u0E39\u0E19\u0E30", 45336 "app.chat_not_connected": "\u0E41\u0E0A\u0E17\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D \u0E23\u0E2D\u0E41\u0E1B\u0E4A\u0E1A\u0E19\u0E36\u0E07\u0E41\u0E25\u0E49\u0E27\u0E25\u0E2D\u0E07\u0E43\u0E2B\u0E21\u0E48\u0E19\u0E30", 45337 "footer.terms": "\u0E02\u0E49\u0E2D\u0E15\u0E01\u0E25\u0E07\u0E41\u0E25\u0E30\u0E40\u0E07\u0E37\u0E48\u0E2D\u0E19\u0E44\u0E02", 45338 "footer.copyright": "\xA9 2026 Yano.AI" 45339}; 45340
45341// app/javascript/yano/locales/tl.js 45342var tl_default = { 45343 "home.heading.default": "tara, call tayo", 45344 "home.heading.loading": "Binubuksan yung room...", 45345 "home.heading.join": "ready ka na mag-join?", 45346 "home.heading.joined": "nakapasok ka na", 45347 "home.heading.pending": "waiting sa host", 45348 "home.body.default": "gawa ng room, send ang link, chill.", 45349 "home.body.loading": "wait lang, sinesetup lang yung room.", 45350 "home.body.join": "check mo cam at mic mo, tapos pasok na.", 45351 "home.body.joined": "live na yung room. share mo yung link o g na.", 45352 "home.body.joined_in_room": "nasa room na \u2014 pasok na o share mo yung link.", 45353 "home.body.pending": "naka-lock yung room. papapasukin ka rin ng host.", 45354 "home.cta.create": "Gumawa ng room", 45355 "home.cta.join": "Mag-join sa room", 45356 "home.cta.enter": "Pumasok sa room", 45357 "home.cta.creating": "Gumagawa...", 45358 "home.cta.joining": "Nagjo-join...", 45359 "home.cta.opening": "Binubuksan...", 45360 "home.cta.pending": "Waiting ma-approve...", 45361 "home.copy_link": "copy link", 45362 "home.copied": "copied na!", 45363 "home.leave": "leave room", 45364 "home.back": "back", 45365 "home.no_participants": "wala pang tao dito", 45366 "home.join_by_code": "join gamit ang invite code", 45367 "home.code_placeholder": "enter code", 45368 "home.name_placeholder": "pangalan mo", 45369 "home.people_one": "tao", 45370 "home.people_other": "katao", 45371 "home.marketing.invite.title": "Gumawa ng room,\nshare ang link.", 45372 "home.marketing.invite.body": "One tap lang para mag-start. Share mo yung link sa friends mo at pwede na sila mag-join \u2014 no downloads, no sign-ups.", 45373 "home.marketing.invite.preview_url": "yano.ai/ROOM", 45374 "home.marketing.look.title": "Ikaw bahala\nsa look mo.", 45375 "home.marketing.look.body": "Color grading, softening, vignette \u2014 o i-blur mo buong mukha mo. Camera mo, look mo.", 45376 "home.marketing.host.title": "Space mo,\nrules mo.", 45377 "home.marketing.host.body": "I-lock ang room, i-mute ang iba, o i-kick sila. Ikaw ang host, ikaw ang masusunod.", 45378 "home.marketing.host.locked": "Naka-lock ang room", 45379 "home.marketing.host.waiting_to_join": "Waiting maka-join", 45380 "home.marketing.host.wants_to_join": "gustong mag-join", 45381 "home.marketing.anything.title": "Kahit para saan pa 'yan.", 45382 "home.marketing.anything.body": "Study sessions, game nights, work standups, watch party \u2014 o tambay lang.", 45383 "home.marketing.use_case.study_group": "\u{1F4DA} study group", 45384 "home.marketing.use_case.game_night": "\u{1F3AE} game night", 45385 "home.marketing.use_case.standup": "\u{1F4BC} standup", 45386 "home.marketing.use_case.watch_party": "\u{1F37F} watch party", 45387 "home.marketing.use_case.catch_up": "\u2615 chikahan", 45388 "home.marketing.use_case.jam_session": "\u{1F3B8} jam session", 45389 "home.marketing.use_case.book_club": "\u{1F4D6}
45389 book club", 45390 "home.marketing.use_case.coworking": "\u{1F4BB} co-working", 45391 "ended.heading": "tapos na ang call", 45392 "ended.left": "nag-leave ka sa room.", 45393 "ended.room_ended": "tapos na ang {title} para sa'yo.", 45394 "ended.rejoin": "rejoin", 45395 "ended.rejoining": "nagre-rejoin...", 45396 "ended.home": "balik sa home", 45397 "call.connecting": "nagko-connect", 45398 "call.waiting": "waiting sa iba", 45399 "call.invite_code": "invite code", 45400 "call.audio_on": "naka-on ang audio", 45401 "call.muted": "naka-mute", 45402 "call.listening": "Nakikinig", 45403 "call.audio_muted": "Naka-mute ang audio", 45404 "call.speaking": "nagsasalita", 45405 "call.you": "ikaw", 45406 "call.you_label": "Ikaw", 45407 "call.you_suffix": "(ikaw)", 45408 "call.chat_placeholder": "mag-send ng message...", 45409 "call.guest": "guest", 45410 "call.room_fallback": "room", 45411 "call.focus_view": "Focus view", 45412 "call.grid_view": "Grid view", 45413 "call.swap_main_video": "Palitan ang main video", 45414 "call.open_chat": "I-open ang chat", 45415 "call.close_chat": "I-close ang chat", 45416 "call.leave_room": "Mag-leave sa room", 45417 "call.confirm_leave": "Mag-leave?", 45418 "call.mic_on": "Naka-on ang mic", 45419 "call.muted_label": "Naka-mute", 45420 "call.camera_off": "Naka-off ang camera", 45421 "call.connect_failed": "Connection failed \u2014 check mo internet mo tapos try ulit.", 45422 "call.camera_access_failed": "Hindi ma-access yung camera mo. Check mo browser permissions tapos try ulit.", 45423 "call.recording_failed": "Hindi mag-start yung recording. Tuloy pa rin ang call kahit wala 'to.", 45424 "call.initialize_failed": "May mali pag-start ng call. Pa-refresh na lang tapos try ulit.", 45425 "call.participants": "Participants", 45426 "call.open_participants": "I-open ang participants", 45427 "call.close_participants": "I-close ang participants", 45428 "call.lock_room": "I-lock ang room", 45429 "call.unlock_room": "I-unlock ang room", 45430 "call.locked": "naka-lock", 45431 "call.unlocked": "open", 45432 "call.kick_member": "I-kick sa room", 45433 "call.mute_member": "I-mute", 45434 "call.unmute_member": "I-unmute", 45435 "call.muted_by_host": "Muted ng host", 45436 "call.waiting_to_join": "Waiting maka-join", 45437 "call.approve": "Approve", 45438 "call.deny": "Deny", 45439 "call.profile_actions": "Profile actions", 45440 "call.profile_in_room": "Nasa room", 45441 "call.profile_role_host": "Host", 45442 "call.profile_role_you": "Ikaw", 45443 "call.profile_action_mute": "I-mute ang audio nila", 45444 "call.profile_action_mute_meta": "Para sa'yo lang \u2014 hindi nila malalaman", 45445 "call.profile_action_dm": "1:1 DM", 45446 "call.profile_action_dm_meta": "Mag-start ng private chat", 45447 "call.profile_action_view": "Tingnan ang full profile", 45448 "call.profile_action_view_meta": "Bio, languages, past sessions", 45449 "call.profile_action_report": "I-report", 45450 "call.profile_action_report_meta": "I-flag para ma-review", 45451 "call.profile_sheet_close": "I-close ang profile actions", 45452 "call.profile_open_actions": "I-open ang profile actions", 45453 "call.dm_title": "Direct message", 45454 "call.dm_back": "Back sa actions", 45455 "call.dm_close": "I-close ang direct message", 45456 "call.dm_status_online": "Online", 45457 "call.dm_in_room_with": "Nasa room na 'to", 45458 "call.dm_private_label": "Private chat", 45459 "call.dm_private_meta": "Kayong dalawa lang makakakita ng messages na 'to", 45460 "call.dm_input_placeholder": "Mag-send ng private message\u2026", 45461 "call.dm_send": "Send", 45462 "call.dm_just_now": "now", 45463 "call.dm_seen_just_now": "Seen just now", 45464 "call.dm_typing": "nagta-type si {name}\u2026", 45465 "call.dm_minimize": "Minimize", 45466 "call.dm_active_indicator": "I-open ang convo", 45467 "call.dm_unread_messages": "{count} unread", 45468 "call.dm_toast_tap_to_open": "I-tap para i-open", 45469 "call.dm_reopen_aria": "I-open ulit ang convo kay {name}", 45470 "home.join_denied": "Hindi ka pinapasok ng host.", 45471 "home.error.room_not_found": "Wala namang ganyang room code.", 45472 "home.error.profile_required": "I-setup muna ang profile mo para makatuloy.", 45473 "home.cta.set_up_profile": "I-setup ang profile mo", 45474 "home.profile_trigger_new": "I-tap para mag-add ng details", 45475 "home.profile_trigger_new_aria": "I-setup ang profile mo", 45476 "home.profile_trigger_edit_aria": "I-edit ang profile mo", 45477 "profile.eyebrow_new": "say hi", 45478 "profile.eyebrow_edit": "profile mo", 45479 "profile.title_new": "I-customize mo.", 45480 "profile.title_edit": "I-edit ang profile", 45481 "profile.subtitle": "Kunting details lang para alam nila kung sino kausap nila.", 45482 "profile.add_photo": "Mag-add ng photo", 45483 "profile.add_photo_soon": "coming soon ang photos", 45484 "profile.photo_empty": "i-tap para mag-add ng photo", 45485 "profile.photo_ready": "ready na ang photo", 45486 "profile.photo_save_first": "i-save muna ang profile bago mag-upload ng photo", 45487 "profile.photo_crop_caption": "i-frame ang photo mo", 45488 "profile.photo_auto_caption": "drag at zoom, tapos automatic na mase-save", 45489 "profile.photo_upload": "Mag-upload ng photo", 45490 "profile.photo_replace": "Palitan ang photo", 45491 "profile.photo_remove": "I-remove ang photo", 45492 "profile.photo_cancel": "Cancel", 45493 "profile.photo_save": "I-save ang photo", 45494 "profile.photo_uploading": "Ina-upload ang photo\u2026", 45495 "profile.photo_removing": "Nire-remove ang photo\u2026", 45496 "profile.photo_choose_another": "Pumili ng iba", 45497 "profile.photo_drag_hint": "I-drag ang photo sa loob ng circle. Automatic mase-save ang changes.", 45498 "profile.photo_zoom": "Zoom", 45499 "profile.photo_horizontal": "Horizontal crop", 45500 "profile.photo_vertical": "Vertical crop", 45501 "profile.name_label": "Pangalan", 45502 "profile.name_placeholder": "Ano itatawag namin sa'yo?", 45503 "profile.gender_label": "Ako ay", 45504 "profile.gender.woman": "Babae", 45505 "profile.gender.man": "Lalaki", 45506 "profile.gender.unspecified": "Prefer not to say", 45507 "profile.bio_label": "Bio", 45508 "profile.bio_optional": "optional", 45509 "profile.bio_placeholder": "Mga language na alam mo, mga trip mo, kahit ano\u2026", 45510 "profile.cta_new": "G na", 45511 "profile.cta_edit": "I-save ang changes", 45512 "profile.saving": "Sini-save\u2026",
45513 "profile.close": "I-close", 45514 "profile.error.save_failed": "Hindi ma-save ang profile mo. Try ulit.", 45515 "profile.error.avatar_invalid_type": "Pumili ng PNG, JPEG, GIF, o WebP na image.", 45516 "profile.error.avatar_too_large": "Pumili ng image na mas maliit sa 5 MB.", 45517 "profile.error.avatar_too_small": "Pumili ng image na at least 96 by 96 pixels.", 45518 "profile.error.avatar_load_failed": "Hindi ma-read yung image. Try ng ibang file.", 45519 "profile.error.avatar_failed": "Hindi ma-upload yung photo mo. Try ulit.", 45520 "profile.error.avatar_remove_failed": "Hindi ma-remove yung photo mo. Try ulit.", 45521 "effects.title": "Effects", 45522 "effects.soft": "Soft focus", 45523 "effects.vignette": "Vignette", 45524 "effects.face": "Face blur", 45525 "effects.face_preview_only": "Face blur (preview lang)", 45526 "effects.face_viewer_side": "Face blur (viewer-side)", 45527 "effects.face_strength": "Lakas ng face blur", 45528 "effects.grade.off": "OFF", 45529 "effects.grade.pop": "POP", 45530 "effects.grade.warm": "WARM", 45531 "effects.grade.cool": "COOL", 45532 "effects.grade.bw": "B&W", 45533 "camera.off": "naka-off ang camera", 45534 "camera.check": "i-check ang camera mo", 45535 "camera.retry": "i-retry ang camera", 45536 "camera.ready": "ready na ang camera", 45537 "camera.idle.title": "I-on ang camera mo", 45538 "camera.idle.hint": "Hihingi kami ng access sa browser mo pag ready ka na.", 45539 "camera.idle.button": "I-on ang camera", 45540 "camera.status.idle": "Waiting sa'yo", 45541 "camera.status.off": "Naka-off ang camera", 45542 "camera.status.loading": "Naghahanap ng camera access...", 45543 "camera.status.denied": "I-allow ang camera access sa browser, tapos try ulit.", 45544 "camera.status.error": "Nag-fail ang camera preview. Try ulit.", 45545 "camera.status.unsupported": "Hindi pwede ang camera access sa browser na 'to.", 45546 "camera.status.insecure": "Kailangan ng HTTPS o localhost para sa camera access.", 45547 "camera.guest_name_placeholder": "Pangalan ng guest", 45548 "camera.flip": "I-switch ang camera", 45549 "camera.save_name": "I-save", 45550 "camera.edit_name": "I-edit ang pangalan", 45551 "mic.on": "I-off ang mic", 45552 "mic.off": "I-on ang mic", 45553 "video.on": "I-off ang camera", 45554 "video.off": "I-on ang camera", 45555 "chat.title": "chat", 45556 "chat.close": "I-close ang chat", 45557 "chat.loading": "naglo-load...", 45558 "chat.load_earlier": "i-load ang mga luma", 45559 "chat.empty": "wala pang messages", 45560 "chat.send_error": "Hindi na-send ang message \u2014 try ulit.", 45561 "chat.input_placeholder": "mag-type ng message...", 45562 "room.host": "Host", 45563 "app.room_default_title": "Gumawa ng room", 45564 "app.chat_connection_rejected": "Hindi maka-connect ang chat \u2014 try mo i-refresh.", 45565 "app.copy_failed": "Hindi ma-copy ang link. Try mo i-select at i-copy manually.", 45566 "app.chat_not_connected": "Hindi pa connected ang chat. Wait lang ng konti tapos try ulit.", 45567 "footer.terms": "Terms & Conditions", 45568 "footer.copyright": "\xA9 2026 Yano.AI" 45569}; 45570
45571// app/javascript/yano/locales/uk.js 45572var uk_default = { 45573 "home.heading.default": "\u0437\u0430\u043B\u0456\u0442\u0430\u0439 \u043D\u0430 \u0434\u0437\u0432\u0456\u043D\u043E\u043A", 45574 "home.heading.loading": "\u0412\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0454\u043C\u043E \u043A\u0456\u043C\u043D\u0430\u0442\u0443...", 45575 "home.heading.join": "\u0433\u043E\u0442\u043E\u0432\u0438\u0439 \u0437\u0430\u043B\u0435\u0442\u0456\u0442\u0438?", 45576 "home.heading.joined": "\u0442\u0438 \u0442\u0443\u0442", 45577 "home.heading.pending": "\u0447\u0435\u043A\u0430\u0454\u043C\u043E \u043D\u0430 \u0445\u043E\u0441\u0442\u0430", 45578 "home.body.default": "\u0441\u0442\u0432\u043E\u0440\u044E\u0439 \u043A\u0456\u043C\u043D\u0430\u0442\u0443, \u043A\u0438\u0434\u0430\u0439 \u043B\u0456\u043D\u043A, \u0432\u0430\u0439\u0431\u0443\u0439.", 45579 "home.body.loading": "\u0441\u0435\u043A\u0443\u043D\u0434\u0443, \u0433\u043E\u0442\u0443\u0454\u043C\u043E \u043A\u0456\u043C\u043D\u0430\u0442\u0443.", 45580 "home.body.join": "\u0447\u0435\u043A\u043D\u0438 \u043A\u0430\u043C\u0435\u0440\u0443 \u0442\u0430 \u043C\u0456\u043A\u0440\u043E \u0456 \u0437\u0430\u043B\u0456\u0442\u0430\u0439.", 45581 "home.body.joined": "\u043A\u0456\u043C\u043D\u0430\u0442\u0430 \u043B\u0430\u0439\u0432. \u043A\u0438\u0434\u0430\u0439 \u043B\u0456\u043D\u043A \u0430\u0431\u043E \u043F\u0440\u043E\u0441\u0442\u043E \u043F\u043E\u0447\u0438\u043D\u0430\u0439.", 45582 "home.body.joined_in_room": "\u0432 \u043A\u0456\u043C\u043D\u0430\u0442\u0456 \u2014 \u0437\u0430\u043B\u0456\u0442\u0430\u0439 \u0430\u0431\u043E \u043A\u0438\u0434\u0430\u0439 \u043B\u0456\u043D\u043A.", 45583 "home.body.pending": "\u043A\u0456\u043C\u043D\u0430\u0442\u0430 \u0437\u0430\u043A\u0440\u0438\u0442\u0430. \u0445\u043E\u0441\u0442 \u0442\u0435\u0431\u0435 \u0432\u043F\u0443\u0441\u0442\u0438\u0442\u044C.", 45584 "home.cta.create": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043A\u0456\u043C\u043D\u0430\u0442\u0443", 45585 "home.cta.join": "\u0417\u0430\u0439\u0442\u0438 \u0432 \u043A\u0456\u043C\u043D\u0430\u0442\u0443", 45586 "home.cta.enter": "\u0423\u0432\u0456\u0439\u0442\u0438", 45587 "home.cta.creating": "\u0421\u0442\u0432\u043E\u0440\u044E\u0454\u043C\u043E...", 45588 "home.cta.joining": "\u0417\u0430\u0445\u043E\u0434\u0438\u043C\u043E...", 45589 "home.cta.opening": "\u0412\u0456\u0434\u043A\u0440\u0438\u0432\u0430\u0454\u043C\u043E...", 45590 "home.cta.pending": "\u0427\u0435\u043A\u0430\u0454\u043C\u043E \u043D\u0430 \u0430\u043F\u0440\u0443\u0432...", 45591 "home.copy_link": "\u0441\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u043B\u0456\u043D\u043A", 45592 "home.copied": "\u0441\u043A\u043E\u043F\u0456\u0439\u043E\u0432\u0430\u043D\u043E!", 45593 "home.leave": "\u0432\u0438\u0439\u0442\u0438 \u0437 \u043A\u0456\u043C\u043D\u0430\u0442\u0438", 45594 "home.back": "\u043D\u0430\u0437\u0430\u0434", 45595 "home.no_participants": "\u0442\u0443\u0442 \u043F\u043E\u043A\u0438 \u043D\u0456\u043A\u043E\u0433\u043E", 45596 "home.join_by_code": "\u0437\u0430\u0439\u0442\u0438 \u0437\u0430 \u043A\u043E\u0434\u043E\u043C", 45597 "home.code_placeholder": "\u0432\u0432\u0435\u0434\u0438 \u043A\u043E\u0434", 45598 "home.name_placeholder": "\u0442\u0432\u043E\u0454 \u0456\u043C'\u044F", 45599 "home.people_one": "\u043B\u044E\u0434\u0438\u043D\u0430", 45600 "home.people_other": "\u043B\u044E\u0434\u0435\u0439", 45601 "home.marketing.invite.title": "\u0421\u0442\u0432\u043E\u0440\u044E\u0439 \u043A\u0456\u043C\u043D\u0430\u0442\u0443,\n\u043A\u0438\u0434\u0430\u0439 \u043B\u0456\u043D\u043A.", 45602 "home.marketing.invite.body": "\u041E\u0434\u0438\u043D \u0442\u0430\u043F \u2014 \u0456 \u0433\u043E\u0442\u043E\u0432\u043E. \u041A\u0438\u0434\u0430\u0439 \u043B\u0456\u043D\u043A \u0434\u0440\u0443\u0437\u044F\u043C, \u0456 \u0431\u0443\u0434\u044C-\u0445\u0442\u043E \u0437\u043C\u043E\u0436\u0435 \u0437\u0430\u0439\u0442\u0438: \u0431\u0435\u0437 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u044C \u0456 \u0440\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u0439.", 45603 "home.marketing.invite.preview_url": "yano.ai/ROOM", 45604 "home.marketing.look.title": "\u0412\u0438\u0433\u043B\u044F\u0434\u0430\u0439\n\u044F\u043A \u0445\u043E\u0447\u0435\u0448.", 45605 "home.marketing.look.body": "\u041A\u043E\u0440\u0435\u043A\u0446\u0456\u044F \u043A\u043E\u043B\u044C\u043E\u0440\u0443, \u043F\u043E\u043C'\u044F\u043A\u0448\u0435\u043D\u043D\u044F, \u0432\u0456\u043D\u044C\u0454\u0442\u043A\u0430 \u2014 \u0430\u0431\u043E \u0432\u0437\u0430\u0433\u0430\u043B\u0456 \u0437\u0430\u0431\u043B\u044E\u0440 \u043E\u0431\u043B\u0438\u0447\u0447\u044F. \u0422\u0432\u043E\u044F \u043A\u0430\u043C\u0435\u0440\u0430, \u0442\u0432\u0456\u0439 \u0441\u0442\u0438\u043B\u044C.", 45606 "home.marketing.host.title": "\u0422\u0432\u0456\u0439 \u043F\u0440\u043E\u0441\u0442\u0456\u0440,\n\u0442\u0432\u043E\u0457 \u043F\u0440\u0430\u0432\u0438\u043B\u0430.", 45607 "home.marketing.host.body": "\u0417\u0430\u043A\u0440\u0438\u0439 \u043A\u0456\u043C\u043D\u0430\u0442\u0443, \u0437\u0430\u043C'\u044E\u0442\u044C \u043A\u043E\u0433\u043E\u0441\u044C \u0430\u0431\u043E \u0432\u0437\u0430\u0433\u0430\u043B\u0456 \u043A\u0456\u043A\u043D\u0438. \u
456070425\u043E\u0441\u0442 \u0442\u0443\u0442 \u0433\u043E\u043B\u043E\u0432\u043D\u0438\u0439.", 45608 "home.marketing.host.locked": "\u041A\u0456\u043C\u043D\u0430\u0442\u0430 \u0437\u0430\u043A\u0440\u0438\u0442\u0430", 45609 "home.marketing.host.waiting_to_join": "\u0427\u0435\u043A\u0430\u044E\u0442\u044C \u043D\u0430 \u0432\u0445\u0456\u0434", 45610 "home.marketing.host.wants_to_join": "\u0445\u043E\u0447\u0435 \u0437\u0430\u0439\u0442\u0438", 45611 "home.marketing.anything.title": "\u0420\u0435\u0430\u043B\u044C\u043D\u043E \u0434\u043B\u044F \u0431\u0443\u0434\u044C-\u0447\u043E\u0433\u043E.", 45612 "home.marketing.anything.body": "\u041D\u0430\u0432\u0447\u0430\u043D\u043D\u044F, \u0456\u0433\u0440\u0438, \u0440\u043E\u0431\u043E\u0447\u0456 \u0441\u0442\u0435\u043D\u0434\u0430\u043F\u0438, \u0441\u043F\u0456\u043B\u044C\u043D\u0438\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 \u0444\u0456\u043B\u044C\u043C\u0456\u0432 \u2014 \u0430\u0431\u043E \u043F\u0440\u043E\u0441\u0442\u043E \u043F\u043E\u0441\u0438\u0434\u0456\u0442\u0438.", 45613 "home.marketing.use_case.study_group": "\u{1F4DA} \u0441\u0442\u0430\u0434\u0456-\u0433\u0440\u0443\u043F\u0430", 45614 "home.marketing.use_case.game_night": "\u{1F3AE} \u0433\u0435\u0439\u043C-\u043D\u0430\u0439\u0442", 45615 "home.marketing.use_case.standup": "\u{1F4BC} \u0441\u0442\u0435\u043D\u0434\u0430\u043F", 45616 "home.marketing.use_case.watch_party": "\u{1F37F} \u0432\u043E\u0442\u0447-\u043F\u0430\u0442\u0456", 45617 "home.marketing.use_case.catch_up": "\u2615 \u043A\u0435\u0442\u0447\u0430\u043F", 45618 "home.marketing.use_case.jam_session": "\u{1F3B8} \u0434\u0436\u0435\u043C-\u0441\u0435\u0441\u0456\u044F", 45619 "home.marketing.use_case.book_club": "\u{1F4D6}
45619 \u043A\u043D\u0438\u0436\u043A\u043E\u0432\u0438\u0439 \u043A\u043B\u0443\u0431", 45620 "home.marketing.use_case.coworking": "\u{1F4BB} \u043A\u043E\u0432\u043E\u0440\u043A\u0456\u043D\u0433", 45621 "ended.heading": "\u0434\u0437\u0432\u0456\u043D\u043E\u043A \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043E", 45622 "ended.left": "\u0442\u0438 \u0432\u0438\u0439\u0448\u043E\u0432 \u0437 \u043A\u0456\u043C\u043D\u0430\u0442\u0438.", 45623 "ended.room_ended": "{title} \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0432\u0441\u044F \u0434\u043B\u044F \u0442\u0435\u0431\u0435.", 45624 "ended.rejoin": "\u0437\u0430\u0439\u0442\u0438 \u0437\u043D\u043E\u0432\u0443", 45625 "ended.rejoining": "\u043F\u043E\u0432\u0435\u0440\u0442\u0430\u0454\u043C\u043E\u0441\u044C...", 45626 "ended.home": "\u043D\u0430 \u0433\u043E\u043B\u043E\u0432\u043D\u0443", 45627 "call.connecting": "\u0437'\u0454\u0434\u043D\u0443\u0454\u043C\u043E", 45628 "call.waiting": "\u0447\u0435\u043A\u0430\u0454\u043C\u043E \u043D\u0430 \u0456\u043D\u0448\u0438\u0445", 45629 "call.invite_code": "\u043A\u043E\u0434 \u0456\u043D\u0432\u0430\u0439\u0442\u0443", 45630 "call.audio_on": "\u0437\u0432\u0443\u043A \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E", 45631 "call.muted": "\u0432 \u043C\u0443\u0442\u0456", 45632 "call.listening": "\u0421\u043B\u0443\u0445\u0430\u0454", 45633 "call.audio_muted": "\u0417\u0432\u0443\u043A \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u043E", 45634 "call.speaking": "\u0433\u043E\u0432\u043E\u0440\u0438\u0442\u044C", 45635 "call.you": "\u0442\u0438", 45636 "call.you_label": "\u0422\u0438", 45637 "call.you_suffix": "(\u0442\u0438)", 45638 "call.chat_placeholder": "\u043D\u0430\u043F\u0438\u0448\u0438 \u0449\u043E\u0441\u044C...", 45639 "call.guest": "\u0433\u0456\u0441\u0442\u044C", 45640 "call.room_fallback": "\u043A\u0456\u043C\u043D\u0430\u0442\u0430", 45641 "call.focus_view": "\u0424\u043E\u043A\u0443\u0441-\u0440\u0435\u0436\u0438\u043C", 45642 "call.grid_view": "\u0421\u0456\u0442\u043A\u0430", 45643 "call.swap_main_video": "\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0433\u043E\u043B\u043E\u0432\u043D\u0435 \u0432\u0456\u0434\u0435\u043E", 45644 "call.open_chat": "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442", 45645 "call.close_chat": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442", 45646 "call.leave_room": "\u0412\u0438\u0439\u0442\u0438 \u0437 \u043A\u0456\u043C\u043D\u0430\u0442\u0438", 45647 "call.confirm_leave": "\u0412\u0438\u0439\u0442\u0438?", 45648 "call.mic_on": "\u041C\u0456\u043A\u0440\u043E \u0443\u0432\u0456\u043C\u043A\u043D\u0435\u043D\u043E", 45649 "call.muted_label": "\u0417\u0430\u043C'\u044E\u0447\u0435\u043D\u043E", 45650 "call.camera_off": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0430", 45651 "call.connect_failed": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u2014 \u0447\u0435\u043A\u043D\u0438 \u0456\u043D\u0435\u0442 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435 \u0440\u0430\u0437.", 45652 "call.camera_access_failed": "\u041D\u0435\u043C\u0430\u0454 \u0434\u043E\u0441\u0442\u0443\u043F\u0443 \u0434\u043E \u043A\u0430\u043C\u0435\u0440\u0438. \u0427\u0435\u043A\u043D\u0438 \u0434\u043E\u0437\u0432\u043E\u043B\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456 \u0442\u0430 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45653 "call.recording_failed": "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u043E\u0447\u0430\u0442\u0438 \u0437\u0430\u043F\u0438\u0441. \u0414\u0437\u0432\u0456\u043D\u043E\u043A \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u044C\u0441\u044F \u0431\u0435\u0437 \u043D\u044C\u043E\u0433\u043E.", 45654 "call.initialize_failed": "\u0429\u043E\u0441\u044C \u043F\u0456\u0448\u043B\u043E \u043D\u0435 \u0442\u0430\u043A \u043F\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u043F\u0443\u0441\u043A\u0443. \u041E\u043D\u043E\u0432\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45655 "call.participants": "\u0423\u0447\u0430\u0441\u043D\u0438\u043A\u0438", 45656 "call.open_participants": "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", 45657 "call.close_participants": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0443\u0447\u0430\u0441\u043D\u0438\u043A\u0456\u0432", 45658 "call.lock_room": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u043A\u0456\u043C\u043D\u0430\u0442\u0443", 45659 "call.unlock_room": "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043A\u0456\u043C\u043D\u0430\u0442\u0443", 45660 "call.locked": "\u0437\u0430\u043A\u0440\u0438\u0442\u0430", 45661 "call.unlocked": "\u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0430", 45662 "call.kick_member": "\u041A\u0456\u043A\u043D\u0443\u0442\u0438 \u0437 \u043A\u0456\u043C\u043D\u0430\u0442\u0438", 45663 "call.mute_member": "\u0417\u0430\u043C'\u044E\u0442\u0438\u0442\u0438", 45664 "call.unmute_member": "\u0420\u043E\u0437\u043C'\u044E\u0442\u0438\u0442\u0438", 45665 "call.muted_by_host": "\u0417\u0430\u043C'\u044E\u0447\u0435\u043D\u043E \u0445\u043E\u0441\u0442\u043E\u043C", 45666 "call.waiting_to_join": "\u0427\u0435\u043A\u0430\u044E\u0442\u044C \u043D\u0430 \u0432\u0445\u0456\u0434", 45667 "call.approve": "\u0412\u043F\u0443\u0441\u0442\u0438\u0442\u0438", 45668 "call.deny": "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438", 45669 "call.profile_actions": "\u0414\u0456\u0457 \u0437 \u043F\u0440\u043E\u0444\u0456\u043B\u0435\u043C", 45670 "call.profile_in_room": "\u0412 \u043A\u0456\u043C\u043D\u0430\u0442\u0456", 45671 "call.profile_role_host": "\u0425\u043E\u0441\u0442", 45672 "call.profile_role_you": "\u0422\u0438", 45673 "call.profile_action_mute": "\u0417\u0430\u043C'\u044E\u0442\u0438\u0442\u0438 \u0457\u0445", 45674 "call.profile_action_mute_meta": "\u0422\u0456\u043B\u044C\u043A\u0438 \u0434\u043B\u044F \u0442\u0435\u0431\u0435 \u2014 \u0432\u043E\u043D\u0438 \u043D\u0435 \u0434\u0456\u0437\u043D\u0430\u044E\u0442\u044C\u0441\u044F", 45675 "call.profile_action_dm": "DM", 45676 "call.profile_action_dm_meta": "\u041F\u043E\u0447\u0430\u0442\u0438 \u043F\u0440\u0438\u0432\u0430\u0442\u043D\u0438\u0439 \u0447\u0430\u0442", 45677 "call.profile_action_view": "\u0413\u043B\u044F\u043D\u0443\u0442\u0438 \u0444\u0443\u043B \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45678 "call.profile_action_view_meta": "\u0411\u0456\u043E, \u043C\u043E\u0432\u0438, \u043C\u0438\u043D\u0443\u043B\u0456 \u0441\u0435\u0441\u0456\u0457", 45679 "call.profile_action_report": "\u0420\u0435\u043F\u043E\u0440\u0442\u043D\u0443\u0442\u0438", 45680 "call.profile_action_report_meta": "\u0412\u0456\u0434\u043F\u0440\u0430\u0432\u0438\u0442\u0438 \u043C\u043E\u0434\u0435\u0440\u0430\u0442\u043E\u0440\u0430\u043C", 45681 "call.profile_sheet_close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0434\u0456\u0457 \u0437 \u043F\u0440\u043E\u0444\u0456\u043B\u0435\u043C", 45682 "call.profile_open_actions": "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0434\u0456\u0457 \u0437 \u043F\u0440\u043E\u0444\u0456\u043B\u0435\u043C", 45683 "call.dm_title": "DM", 45684 "call.dm_back": "\u041D\u0430\u0437\u0430\u0434 \u0434\u043E \u0434\u0456\u0439", 45685 "call.dm_close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 DM", 45686 "call.dm_status_online": "\u041E\u043D\u043B\u0430\u0439\u043D", 45687 "call.dm_in_room_with": "\u0423 \u0446\u0456\u0439 \u043A\u0456\u043C\u043D\u0430\u0442\u0456", 45688 "call.dm_private_label": "\u041F\u0440\u0438\u0432\u0430\u0442\u043D\u0438\u0439 \u0447\u0430\u0442", 45689 "call.dm_private_meta": "\u0426\u0456 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u0431\u0430\u0447\u0438\u0442\u0435 \u0442\u0456\u043B\u044C\u043A\u0438 \u0432\u0438 \u0434\u0432\u043E\u0454", 45690 "call.dm_input_placeholder": "\u041D\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0432 \u043E\u0441\u043E\u0431\u0438\u0441\u0442\u0456\u2026", 45691 "call.dm_send": "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438", 45692 "call.dm_just_now": "\u0437\u0430\u0440\u0430\u0437", 45693 "call.dm_seen_just_now": "\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043E \u0449\u043E\u0439\u043D\u043E", 45694 "call.dm_typing": "{name} \u0434\u0440\u0443\u043A\u0443\u0454\u2026", 45695 "call.dm_minimize": "\u0417\u0433\u043E\u0440\u043D\u0443\u0442\u0438", 45696 "call.dm_active_indicator": "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442", 45697 "call.dm_unread_messages": "{count} \u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u0438\u0445", 45698 "call.dm_toast_tap_to_open": "\u0422\u0430\u043F\u043D\u0438, \u0449\u043E\u0431 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438", 45699 "call.dm_reopen_aria": "\u0417\u043D\u043E\u0432\u0443 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442 \u0437 {name}", 45700 "home.join_denied": "\u0425\u043E\u0441\u0442 \u0442\u0435\u0431\u0435 \u043D\u0435 \u0432\u043F\u0443\u0441\u0442\u0438\u0432.", 45701 "home.error.room_not_found": "\u0422\u0430\u043A\u043E\u0433\u043E \u043A\u043E\u0434\u0443 \u043A\u0456\u043C\u043D\u0430\u0442\u0438 \u043D\u0435 \u0456\u0441\u043D\u0443\u0454.", 45702 "home.error.profile_required": "\u0417\u0430\u043F\u043E\u0432\u043D\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C, \u0449\u043E\u0431 \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438.", 45703 "home.cta.set_up_profile": "\u0417\u0430\u043F\u043E\u0432\u043D\u0438\u0442\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45704 "home.profile_trigger_new": "\u0422\u0430\u043F\u043D\u0438, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u0456\u043D\u0444\u0443 \u043F\u0440\u043E \u0441\u0435\u0431\u0435", 45705 "home.profile_trigger_new_aria": "\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45706 "home.profile_trigger_edit_aria": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45707 "profile.eyebrow_new": "\u043F\u0440\u0438\u0432\u0456\u0442\u0430\u0439\u0441\u044F", 45708 "profile.eyebrow_edit": "\u0442\u0432\u0456\u0439 \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45709 "profile.title_new": "\u0420\u043E\u0437\u043A\u0430\u0436\u0438 \u043F\u0440\u043E \u0441\u0435\u0431\u0435.", 45710 "profile.title_edit": "\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C", 45711 "profile.subtitle": "\u0422\u0440\u043E\u0445\u0438 \u0456\u043D\u0444\u0438, \u0449\u043E\u0431 \u0456\u043D\u0448\u0456 \u0437\u043D\u0430\u043B\u0438, \u0437 \u043A\u0438\u043C \u0441\u043F\u0456\u043B\u043A\u0443\u044
45711E\u0442\u044C\u0441\u044F.", 45712 "profile.add_photo": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0444\u043E\u0442\u043E", 45713 "profile.add_photo_soon": "\u0444\u043E\u0442\u043E \u0441\u043A\u043E\u0440\u043E \u0431\u0443\u0434\u0443\u0442\u044C", 45714 "profile.photo_empty": "\u0442\u0430\u043F\u043D\u0438, \u0449\u043E\u0431 \u0434\u043E\u0434\u0430\u0442\u0438 \u0444\u043E\u0442\u043E", 45715 "profile.photo_ready": "\u0444\u043E\u0442\u043E \u0433\u043E\u0442\u043E\u0432\u0435", 45716 "profile.photo_save_first": "\u0437\u0431\u0435\u0440\u0435\u0436\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C \u043F\u0435\u0440\u0435\u0434 \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F\u043C \u0444\u043E\u0442\u043E", 45717 "profile.photo_crop_caption": "\u043A\u0430\u0434\u0440\u0443\u0439 \u0444\u043E\u0442\u043E", 45718 "profile.photo_auto_caption": "\u043F\u043E\u0441\u0443\u043D\u044C \u0456 \u043D\u0430\u0431\u043B\u0438\u0437\u044C, \u0430 \u043C\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043C\u043E \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E", 45719 "profile.photo_upload": "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0444\u043E\u0442\u043E", 45720 "profile.photo_replace": "\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u0444\u043E\u0442\u043E", 45721 "profile.photo_remove": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0444\u043E\u0442\u043E", 45722 "profile.photo_cancel": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438", 45723 "profile.photo_save": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0444\u043E\u0442\u043E", 45724 "profile.photo_uploading": "\u0412\u0430\u043D\u0442\u0430\u0436\u0438\u043C\u043E \u0444\u043E\u0442\u043E\u2026", 45725 "profile.photo_removing": "\u0412\u0438\u0434\u0430\u043B\u044F\u0454\u043C\u043E \u0444\u043E\u0442\u043E\u2026", 45726 "profile.photo_choose_another": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0456\u043D\u0448\u0435", 45727 "profile.photo_drag_hint": "\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0438 \u0444\u043E\u0442\u043E \u0432 \u043A\u043E\u043B\u043E. \u0417\u043C\u0456\u043D\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0443\u0442\u044C\u0441\u044F \u0441\u0430\u043C\u0456.", 45728 "profile.photo_zoom": "\u0417\u0443\u043C", 45729 "profile.photo_horizontal": "\u041F\u043E \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u0456", 45730 "profile.photo_vertical": "\u041F\u043E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0456", 45731 "profile.name_label": "\u0406\u043C'\u044F", 45732 "profile.name_placeholder": "\u042F\u043A \u0434\u043E \u0442\u0435\u0431\u0435 \u0437\u0432\u0435\u0440\u0442\u0430\u0442\u0438\u0441\u044F?", 45733 "profile.gender_label": "\u042F", 45734 "profile.gender.woman": "\u0416\u0456\u043D\u043A\u0430", 45735 "profile.gender.man": "\u0427\u043E\u043B\u043E\u0432\u0456\u043A", 45736 "profile.gender.unspecified": "\u041D\u0435 \u0445\u043E\u0447\u0443 \u043A\u0430\u0437\u0430\u0442\u0438", 45737 "profile.bio_label": "\u0411\u0456\u043E", 45738 "profile.bio_optional": "\u043E\u043F\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u043E", 45739 "profile.bio_placeholder": "\u041C\u043E\u0432\u0438, \u044F\u043A\u0456 \u0437\u043D\u0430\u0454\u0448, \u0449\u043E \u043B\u044E\u0431\u0438\u0448, \u0431\u0443\u0434\u044C-\u0449\u043E\u2026", 45740 "profile.cta_new": "\u041F\u043E\u0433\u043D\u0430\u043B\u0438", 45741 "profile.cta_edit": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u043C\u0456\u043D\u0438", 45742 "profile.saving": "\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u043C\u043E\u2026", 45743 "profile.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438", 45744 "profile.error.save_failed": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u0440\u043E\u0444\u0456\u043B\u044C. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45745 "profile.error.avatar_invalid_type": "\u0412\u0438\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0456 PNG, JPEG, GIF \u0430\u0431\u043E WebP.", 45746 "profile.error.avatar_too_large": "\u0412\u0438\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0434\u043E 5 \u041C\u0411.", 45747 "profile.error.avatar_too_small": "\u0412\u0438\u0431\u0435\u0440\u0438 \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443 \u0445\u043E\u0447\u0430 \u0431 96 \u043D\u0430 96 \u043F\u0456\u043A\u0441\u0435\u043B\u0456\u0432.", 45748 "profile.error.avatar_load_failed": "\u041D\u0435 \u0437\u043C\u043E\u0433\u043B\u0438 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u0438 \u0446\u044E \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0443. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0456\u043D\u0448\u0438\u0439 \u0444\u0430\u0439\u043B.", 45749 "profile.error.avatar_failed": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0444\u043E\u0442\u043E. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45750 "profile.error.avatar_remove_failed": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0444\u043E\u0442\u043E. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45751 "effects.title": "\u0415\u0444\u0435\u043A\u0442\u0438", 45752 "effects.soft": "\u041C'\u044F\u043A\u0438\u0439 \u0444\u043E\u043A\u0443\u0441", 45753 "effects.vignette": "\u0412\u0456\u043D\u044C\u0454\u0442\u043A\u0430", 45754 "effects.face": "\u0411\u043B\u044E\u0440 \u043E\u0431\u043B\u0438\u0447\u0447\u044F", 45755 "effects.face_preview_only": "\u0411\u043B\u044E\u0440 \u043E\u0431\u043B\u0438\u0447\u0447\u044F (\u0442\u0456\u043B\u044C\u043A\u0438 \u043F\u0440\u0435\u0432'\u044E)", 45756 "effects.face_viewer_side": "\u0411\u043B\u044E\u0440 \u043E\u0431\u043B\u0438\u0447\u0447\u044F (\u0434\u043B\u044F \u0433\u043B\u044F\u0434\u0430\u0447\u0456\u0432)", 45757 "effects.face_strength": "\u0421\u0438\u043B\u0430 \u0431\u043B\u044E\u0440\u0443", 45758 "effects.grade.off": "\u0412\u0418\u041C\u041A", 45759 "effects.grade.pop": "POP", 45760 "effects.grade.warm": "\u0422\u0415\u041F\u041B\u041E", 45761 "effects.grade.cool": "\u0425\u041E\u041B\u041E\u0414", 45762 "effects.grade.bw": "\u0427\u0411", 45763 "camera.off": "\u043A\u0430\u043C\u0435\u0440\u0430 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0430", 45764 "camera.check": "\u0447\u0435\u043A\u043D\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45765 "camera.retry": "\u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435 \u0440\u0430\u0437", 45766 "camera.ready": "\u043A\u0430\u043C\u0435\u0440\u0430 \u0433\u043E\u0442\u043E\u0432\u0430", 45767 "camera.idle.title": "\u0423\u0432\u0456\u043C\u043A\u043D\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45768 "camera.idle.hint": "\u041C\u0438 \u0437\u0430\u043F\u0438\u0442\u0430\u0454\u043C\u043E \u0434\u043E\u0437\u0432\u0456\u043B \u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043A\u043E\u043B\u0438 \u0431\u0443\u0434\u0435\u0448 \u0433\u043E\u0442\u043E\u0432\u0438\u0439.", 45769 "camera.idle.button": "\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45770 "camera.status.idle": "\u0427\u0435\u043A\u0430\u0454\u043C\u043E \u043D\u0430 \u0442\u0435\u0431\u0435", 45771 "camera.status.off": "\u041A\u0430\u043C\u0435\u0440\u0430 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0430", 45772 "camera.status.loading": "\u041F\u0440\u043E\u0441\u0438\u043C\u043E \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u043A\u0430\u043C\u0435\u0440\u0438...", 45773 "camera.status.denied": "\u0414\u0430\u0439 \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u043A\u0430\u043C\u0435\u0440\u0438 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45774 "camera.status.error": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 \u043F\u0440\u0435\u0432'\u044E \u043A\u0430\u043C\u0435\u0440\u0438. \u
457740421\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45775 "camera.status.unsupported": "\u0426\u0435\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454 \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u043A\u0430\u043C\u0435\u0440\u0438.", 45776 "camera.status.insecure": "\u0414\u043B\u044F \u043A\u0430\u043C\u0435\u0440\u0438 \u043F\u043E\u0442\u0440\u0456\u0431\u0435\u043D HTTPS \u0430\u0431\u043E localhost.", 45777 "camera.status.attach_failed": "\u041F\u0440\u0435\u0432'\u044E \u043A\u0430\u043C\u0435\u0440\u0438 \u043D\u0435 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u043B\u043E\u0441\u044F. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45778 "camera.guest_name_placeholder": "\u0406\u043C'\u044F \u0433\u043E\u0441\u0442\u044F", 45779 "camera.flip": "\u041F\u0435\u0440\u0435\u043C\u043A\u043D\u0443\u0442\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45780 "camera.save_name": "\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438", 45781 "camera.edit_name": "\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0456\u043C'\u044F", 45782 "mic.on": "\u0412\u0438\u043C\u043A\u043D\u0443\u0442\u0438 \u043C\u0456\u043A\u0440\u043E", 45783 "mic.off": "\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u043C\u0456\u043A\u0440\u043E", 45784 "video.on": "\u0412\u0438\u043C\u043A\u043D\u0443\u0442\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45785 "video.off": "\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u043A\u0430\u043C\u0435\u0440\u0443", 45786 "chat.title": "\u0447\u0430\u0442", 45787 "chat.close": "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442", 45788 "chat.loading": "\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u043C\u043E...", 45789 "chat.load_earlier": "\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438 \u0441\u0442\u0430\u0440\u0456\u0448\u0456", 45790 "chat.empty": "\u043F\u043E\u043A\u0438 \u043D\u0435\u043C\u0430\u0454 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C", 45791 "chat.send_error": "\u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F \u043D\u0435 \u043D\u0430\u0434\u0456\u0441\u043B\u0430\u043B\u043E\u0441\u044F \u2014 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45792 "chat.input_placeholder": "\u043D\u0430\u043F\u0438\u0448\u0438 \u0449\u043E\u0441\u044C...", 45793 "room.host": "\u0425\u043E\u0441\u0442", 45794 "app.room_default_title": "\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043A\u0456\u043C\u043D\u0430\u0442\u0443", 45795 "app.chat_connection_rejected": "\u0427\u0430\u0442 \u043D\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0432\u0441\u044F \u2014 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u043E\u043D\u043E\u0432\u0438\u0442\u0438 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443.", 45796 "app.copy_failed": "\u041D\u0435 \u0432\u0438\u0439\u0448\u043B\u043E \u0441\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u043B\u0456\u043D\u043A. \u0421\u043F\u0440\u043E\u0431\u0443\u0439 \u0432\u0438\u0434\u0456\u043B\u0438\u0442\u0438 \u0456 \u0441\u043A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432\u0440\u0443\u0447\u043D\u0443.", 45797 "app.chat_not_connected": "\u0427\u0430\u0442 \u0449\u0435 \u043D\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0438\u0432\u0441\u044F. \u041F\u043E\u0447\u0435\u043A\u0430\u0439 \u0441\u0435\u043A\u0443\u043D\u0434\u0443 \u0456 \u0441\u043F\u0440\u043E\u0431\u0443\u0439 \u0449\u0435.", 45798 "footer.terms": "\u0423\u043C\u043E\u0432\u0438 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F", 45799 "footer.copyright": "\xA9 2026 Yano.AI" 45800}; 45801
45802// app/javascript/yano/locales/vi.js 45803var vi_default = { 45804 "home.heading.default": "v\xE0o call th\xF4i", 45805 "home.heading.loading": "\u0110ang m\u1EDF ph\xF2ng...", 45806 "home.heading.join": "s\u1EB5n s\xE0ng v\xF4 ch\u01B0a?", 45807 "home.heading.joined": "v\xF4 r\u1ED3i n\xE8", 45808 "home.heading.pending": "\u0111ang \u0111\u1EE3i host", 45809 "home.body.default": "t\u1EA1o ph\xF2ng, qu\u0103ng link, chill th\xF4i.", 45810 "home.body.loading": "ch\u1EDD x\xEDu, \u0111ang chu\u1EA9n b\u1ECB ph\xF2ng.", 45811 "home.body.join": "check cam v\u1EDBi mic r\u1ED3i nh\u1EA3y v\xF4 lu\xF4n.", 45812 "home.body.joined": "ph\xF2ng m\u1EDF r\u1ED3i. share link ho\u1EB7c v\xF4 lu\xF4n.", 45813 "home.body.joined_in_room": "\u0111ang trong ph\xF2ng \u2014 nh\u1EA3y v\xF4 ho\u1EB7c share link.", 45814 "home.body.pending": "ph\xF2ng \u0111ang kh\xF3a. \u0111\u1EE3i host duy\u1EC7t nha.", 45815 "home.cta.create": "T\u1EA1o ph\xF2ng", 45816 "home.cta.join": "V\xE0o ph\xF2ng", 45817 "home.cta.enter": "V\xF4 ph\xF2ng", 45818 "home.cta.creating": "\u0110ang t\u1EA1o...", 45819 "home.cta.joining": "\u0110ang v\xE0o...", 45820 "home.cta.opening": "\u0110ang m\u1EDF...", 45821 "home.cta.pending": "\u0110ang ch\u1EDD duy\u1EC7t...", 45822 "home.copy_link": "copy link", 45823 "home.copied": "\u0111\xE3 copy!", 45824 "home.leave": "r\u1EDDi ph\xF2ng", 45825 "home.back": "quay l\u1EA1i", 45826 "home.no_participants": "ch\u01B0a c\xF3 ai \u1EDF \u0111\xE2y", 45827 "home.join_by_code": "v\xE0o b\u1EB1ng m\xE3 m\u1EDDi", 45828 "home.code_placeholder": "nh\u1EADp m\xE3", 45829 "home.name_placeholder": "t\xEAn b\u1EA1n", 45830 "home.people_one": "ng\u01B0\u1EDDi", 45831 "home.people_other": "ng\u01B0\u1EDDi", 45832 "home.marketing.invite.title": "T\u1EA1o ph\xF2ng,\nshare link.", 45833 "home.marketing.invite.body": "Ch\u1EA1m l\xE0 b\u1EAFt \u0111\u1EA7u. G\u1EEDi link cho b\u1EA1n b\xE8 v\xE0 ai c\u0169ng v\xF4 \u0111\u01B0\u1EE3c \u2014 kh\xF4ng c\u1EA7n t\u1EA3i, kh\u1ECFi c\u1EA7n \u0111\u0103ng k\xFD.", 45834 "home.marketing.invite.preview_url": "yano.ai/ROOM", 45835 "home.marketing.look.title": "L\xEAn h\xECnh\nnh\u01B0 \xFD.", 45836 "home.marketing.look.body": "Ch\u1EC9nh m\xE0u, l\xE0m m\u1ECBn, t\u1ED1i g\xF3c \u2014 ho\u1EB7c l\xE0m m\u1EDD m\u1EB7t lu\xF4n c\u0169ng \u0111\u01B0\u1EE3c. Cam c\u1EE7a b\u1EA1n, style c\u1EE7a b\u1EA1n.", 45837 "home.marketing.host.title": "S\xE2n ch\u01A1i c\u1EE7a b\u1EA1n,\nlu\u1EADt c\u1EE7a b\u1EA1n.", 45838 "home.marketing.host.body": "Kh\xF3a ph\xF2ng, t\u1EAFt mic ai \u0111\xF3, ho\u1EB7c kick lu\xF4n. Host n\u1EAFm to\xE0n quy\u1EC1n.", 45839 "home.marketing.host.locked": "Ph\xF2ng \u0111\xE3 kh\xF3a", 45840 "home.marketing.host.waiting_to_join": "\u0110ang ch\u1EDD v\xE0o", 45841 "home.marketing.host.wants_to_join": "mu\u1ED1n v\xE0o ph\xF2ng", 45842 "home.marketing.anything.title": "L\xE0m g\xEC c\u0169ng h\u1EE3p.", 45843 "home.marketing.anything.body": "H\u1ECDc nh\xF3m, c\xE0y game, h\u1ECDp h\xE0nh, xem phim chung \u2014 hay \u0111\u01A1n gi\u1EA3n l\xE0 ng\u1ED3i chill.", 45844 "home.marketing.use_case.study_group": "\u{1F4DA} h\u1ECDc nh\xF3m", 45845 "home.marketing.use_case.game_night": "\u{1F3AE} c\xE0y game", 45846 "home.marketing.use_case.standup": "\u{1F4BC} h\u1ECDp nhanh", 45847 "home.marketing.use_case.watch_party": "\u{1F37F} xem chung", 45848 "home.marketing.use_case.catch_up": "\u2615 t\xE1m chuy\u1EC7n", 45849 "home.marketing.use_case.jam_session": "\u{1F3B8} ch\u01A1i nh\u1EA1c", 45850 "home.marketing.use_case.book_club": "\u{1F4D6}
45850 h\u1ED9i \u0111\u1ECDc s\xE1ch", 45851 "home.marketing.use_case.coworking": "\u{1F4BB} l\xE0m vi\u1EC7c chung", 45852 "ended.heading": "cu\u1ED9c g\u1ECDi k\u1EBFt th\xFAc", 45853 "ended.left": "b\u1EA1n \u0111\xE3 r\u1EDDi ph\xF2ng.", 45854 "ended.room_ended": "{title} \u0111\xE3 k\u1EBFt th\xFAc v\u1EDBi b\u1EA1n.", 45855 "ended.rejoin": "v\xE0o l\u1EA1i", 45856 "ended.rejoining": "\u0111ang v\xE0o l\u1EA1i...", 45857 "ended.home": "v\u1EC1 trang ch\u1EE7", 45858 "call.connecting": "\u0111ang k\u1EBFt n\u1ED1i", 45859 "call.waiting": "\u0111ang \u0111\u1EE3i m\u1ECDi ng\u01B0\u1EDDi", 45860 "call.invite_code": "m\xE3 m\u1EDDi", 45861 "call.audio_on": "\u0111ang b\u1EADt \xE2m thanh", 45862 "call.muted": "\u0111\xE3 t\u1EAFt mic", 45863 "call.listening": "\u0110ang nghe", 45864 "call.audio_muted": "\u0110\xE3 t\u1EAFt \xE2m", 45865 "call.speaking": "\u0111ang n\xF3i", 45866 "call.you": "b\u1EA1n", 45867 "call.you_label": "B\u1EA1n", 45868 "call.you_suffix": "(b\u1EA1n)", 45869 "call.chat_placeholder": "nh\u1EAFn g\xEC \u0111i...", 45870 "call.guest": "kh\xE1ch", 45871 "call.room_fallback": "ph\xF2ng", 45872 "call.focus_view": "Ch\u1EBF \u0111\u1ED9 t\u1EADp trung", 45873 "call.grid_view": "Ch\u1EBF \u0111\u1ED9 l\u01B0\u1EDBi", 45874 "call.swap_main_video": "\u0110\u1ED5i video ch\xEDnh", 45875 "call.open_chat": "M\u1EDF chat", 45876 "call.close_chat": "\u0110\xF3ng chat", 45877 "call.leave_room": "R\u1EDDi ph\xF2ng", 45878 "call.confirm_leave": "R\u1EDDi \u0111i?", 45879 "call.mic_on": "\u0110ang b\u1EADt mic", 45880 "call.muted_label": "\u0110\xE3 t\u1EAFt mic", 45881 "call.camera_off": "\u0110\xE3 t\u1EAFt cam", 45882 "call.connect_failed": "L\u1ED7i k\u1EBFt n\u1ED1i \u2014 check l\u1EA1i m\u1EA1ng r\u1ED3i th\u1EED l\u1EA1i nha.", 45883 "call.camera_access_failed": "Kh\xF4ng m\u1EDF \u0111\u01B0\u1EE3c cam. Check l\u1EA1i quy\u1EC1n tr\xEAn tr\xECnh duy\u1EC7t r\u1ED3i th\u1EED l\u1EA1i nha.", 45884 "call.recording_failed": "Kh\xF4ng th\u1EC3 b\u1EAFt \u0111\u1EA7u ghi h\xECnh. Cu\u1ED9c g\u1ECDi v\u1EABn s\u1EBD ti\u1EBFp t\u1EE5c.", 45885 "call.initialize_failed": "C\xF3 l\u1ED7i khi b\u1EAFt \u0111\u1EA7u cu\u1ED9c g\u1ECDi. F5 l\u1EA1i trang nha.", 45886 "call.participants": "Ng\u01B0\u1EDDi tham gia", 45887 "call.open_participants": "M\u1EDF danh s\xE1ch", 45888 "call.close_participants": "\u0110\xF3ng danh s\xE1ch", 45889 "call.lock_room": "Kh\xF3a ph\xF2ng", 45890 "call.unlock_room": "M\u1EDF kh\xF3a ph\xF2ng", 45891 "call.locked": "\u0111\xE3 kh\xF3a", 45892 "call.unlocked": "\u0111ang m\u1EDF", 45893 "call.kick_member": "Kick kh\u1ECFi ph\xF2ng", 45894 "call.mute_member": "T\u1EAFt mic", 45895 "call.unmute_member": "M\u1EDF mic", 45896 "call.muted_by_host": "B\u1ECB host t\u1EAFt mic", 45897 "call.waiting_to_join": "\u0110ang ch\u1EDD v\xE0o", 45898 "call.approve": "Duy\u1EC7t", 45899 "call.deny": "T\u1EEB ch\u1ED1i", 45900 "call.profile_actions": "T\xF9y ch\u1ECDn profile", 45901 "call.profile_in_room": "Trong ph\xF2ng", 45902 "call.profile_role_host": "Host", 45903 "call.profile_role_you": "B\u1EA1n", 45904 "call.profile_action_mute": "T\u1EAFt \xE2m ng\u01B0\u1EDDi n\xE0y", 45905 "call.profile_action_mute_meta": "Ch\u1EC9 m\xECnh b\u1EA1n nghe \u2014 h\u1ECD s\u1EBD kh\xF4ng bi\u1EBFt \u0111\xE2u", 45906 "call.profile_action_dm": "Nh\u1EAFn tin ri\xEAng", 45907 "call.profile_action_dm_meta": "M\u1EDF chat ri\xEAng t\u01B0", 45908 "call.profile_action_view": "Xem full profile", 45909 "call.profile_action_view_meta": "Bio, ng\xF4n ng\u1EEF, c\xE1c phi\xEAn tr\u01B0\u1EDBc", 45910 "call.profile_action_report": "B\xE1o c\xE1o", 45911 "call.profile_action_report_meta": "\u0110\xE1nh d\u1EA5u \u0111\u1EC3 admin xem x\xE9t", 45912 "call.profile_sheet_close": "\u0110\xF3ng t\xF9y ch\u1ECDn", 45913 "call.profile_open_actions": "M\u1EDF t\xF9y ch\u1ECDn", 45914 "call.dm_title": "Tin nh\u1EAFn ri\xEAng", 45915 "call.dm_back": "Quay l\u1EA1i", 45916 "call.dm_close": "\u0110\xF3ng tin nh\u1EAFn", 45917 "call.dm_status_online": "Online", 45918 "call.dm_in_room_with": "\u0110ang trong ph\xF2ng", 45919 "call.dm_private_label": "Chat ri\xEAng", 45920 "call.dm_private_meta": "Ch\u1EC9 hai ng\u01B0\u1EDDi m\u1EDBi th\u1EA5y tin nh\u1EAFn n\xE0y", 45921 "call.dm_input_placeholder": "Nh\u1EAFn tin ri\xEAng\u2026", 45922 "call.dm_send": "G\u1EEDi", 45923 "call.dm_just_now": "v\u1EEBa xong", 45924 "call.dm_seen_just_now": "V\u1EEBa xem", 45925 "call.dm_typing": "{name} \u0111ang g\xF5\u2026", 45926 "call.dm_minimize": "Thu nh\u1ECF", 45927 "call.dm_active_indicator": "M\u1EDF cu\u1ED9c tr\xF2 chuy\u1EC7n", 45928 "call.dm_unread_messages": "{count} tin ch\u01B0a \u0111\u1ECDc", 45929 "call.dm_toast_tap_to_open": "Ch\u1EA1m \u0111\u1EC3 m\u1EDF", 45930 "call.dm_reopen_aria": "M\u1EDF l\u1EA1i chat v\u1EDBi {name}", 45931 "home.join_denied": "Host kh\xF4ng cho b\u1EA1n v\xF4.", 45932 "home.error.room_not_found": "M\xE3 ph\xF2ng n\xE0y kh\xF4ng t\u1ED3n t\u1EA1i.", 45933 "home.error.profile_required": "C\xE0i \u0111\u1EB7t profile \u0111\u1EC3 ti\u1EBFp t\u1EE5c
45933nha.", 45934 "home.cta.set_up_profile": "C\xE0i \u0111\u1EB7t profile", 45935 "home.profile_trigger_new": "Ch\u1EA1m \u0111\u1EC3 th\xEAm th\xF4ng tin", 45936 "home.profile_trigger_new_aria": "C\xE0i \u0111\u1EB7t profile", 45937 "home.profile_trigger_edit_aria": "S\u1EEDa profile", 45938 "profile.eyebrow_new": "say hi", 45939 "profile.eyebrow_edit": "profile c\u1EE7a b\u1EA1n", 45940 "profile.title_new": "T\u1EA1o n\xE9t ri\xEAng.", 45941 "profile.title_edit": "S\u1EEDa profile", 45942 "profile.subtitle": "V\xE0i th\xF4ng tin c\u01A1 b\u1EA3n \u0111\u1EC3 m\u1ECDi ng\u01B0\u1EDDi bi\u1EBFt b\u1EA1n l\xE0 ai n\xE8.", 45943 "profile.add_photo": "Th\xEAm \u1EA3nh", 45944 "profile.add_photo_soon": "s\u1EAFp c\xF3 t\xEDnh n\u0103ng \u1EA3nh", 45945 "profile.photo_empty": "ch\u1EA1m \u0111\u1EC3 th\xEAm \u1EA3nh", 45946 "profile.photo_ready": "\u1EA3nh \u0111\xE3 s\u1EB5n s\xE0ng", 45947 "profile.photo_save_first": "l\u01B0u profile tr\u01B0\u1EDBc khi t\u1EA3i \u1EA3nh l\xEAn nha", 45948 "profile.photo_crop_caption": "c\u0103n ch\u1EC9nh \u1EA3nh", 45949 "profile.photo_auto_caption": "k\xE9o v\xE0 zoom, h\u1EC7 th\u1ED1ng s\u1EBD t\u1EF1 l\u01B0u", 45950 "profile.photo_upload": "T\u1EA3i \u1EA3nh l\xEAn", 45951 "profile.photo_replace": "\u0110\u1ED5i \u1EA3nh", 45952 "profile.photo_remove": "X\xF3a \u1EA3nh", 45953 "profile.photo_cancel": "H\u1EE7y", 45954 "profile.photo_save": "L\u01B0u \u1EA3nh", 45955 "profile.photo_uploading": "\u0110ang t\u1EA3i \u1EA3nh\u2026", 45956 "profile.photo_removing": "\u0110ang x\xF3a \u1EA3nh\u2026", 45957 "profile.photo_choose_another": "Ch\u1ECDn \u1EA3nh kh\xE1c", 45958 "profile.photo_drag_hint": "K\xE9o \u1EA3nh v\xE0o trong v\xF2ng tr\xF2n. S\u1EBD t\u1EF1 \u0111\u1ED9ng l\u01B0u nha.", 45959 "profile.photo_zoom": "Ph\xF3ng to", 45960 "profile.photo_horizontal": "C\u1EAFt ngang", 45961 "profile.photo_vertical": "C\u1EAFt d\u1ECDc", 45962 "profile.name_label": "T\xEAn", 45963 "profile.name_placeholder": "M\u1ECDi ng\u01B0\u1EDDi n\xEAn g\u1ECDi b\u1EA1n l\xE0 g\xEC?", 45964 "profile.gender_label": "Gi\u1EDBi t\xEDnh", 45965 "profile.gender.woman": "N\u1EEF", 45966 "profile.gender.man": "Nam", 45967 "profile.gender.unspecified": "Kh\xF4ng mu\u1ED1n ti\u1EBFt l\u1ED9", 45968 "profile.bio_label": "Gi\u1EDBi thi\u1EC7u", 45969 "profile.bio_optional": "kh\xF4ng b\u1EAFt bu\u1ED9c", 45970 "profile.bio_placeholder": "Ng\xF4n ng\u1EEF b\u1EA1n bi\u1EBFt, s\u1EDF th\xEDch, hay b\u1EA5t c\u1EE9 th\u1EE9 g\xEC\u2026", 45971 "profile.cta_new": "L\xEAn lu\xF4n", 45972 "profile.cta_edit": "L\u01B0u thay \u0111\u1ED5i", 45973 "profile.saving": "\u0110ang l\u01B0u\u2026", 45974 "profile.close": "\u0110\xF3ng", 45975 "profile.error.save_failed": "Kh\xF4ng l\u01B0u \u0111\u01B0\u1EE3c profile. Th\u1EED l\u1EA1i nha.", 45976 "profile.error.avatar_invalid_type": "Ch\u1ECDn \u1EA3nh \u0111\u1ECBnh d\u1EA1ng PNG, JPEG, GIF, ho\u1EB7c WebP nha.", 45977 "profile.error.avatar_too_large": "Ch\u1ECDn \u1EA3nh nh\u1ECF h\u01A1n 5MB th\xF4i.", 45978 "profile.error.avatar_too_small": "Ch\u1ECDn \u1EA3nh \xEDt nh\u1EA5t l\xE0 96x96 pixel nha.", 45979 "profile.error.avatar_load_failed": "Kh\xF4ng \u0111\u1ECDc \u0111\u01B0\u1EE3c \u1EA3nh n\xE0y. Th\u1EED file kh\xE1c xem.", 45980 "profile.error.avatar_failed": "Kh\xF4ng t\u1EA3i \u1EA3nh l\xEAn \u0111\u01B0\u1EE3c. Th\u1EED l\u1EA1i nha.", 45981 "profile.error.avatar_remove_failed": "Kh\xF4ng x\xF3a \u1EA3nh \u0111\u01B0\u1EE3c. Th\u1EED l\u1EA1i nha.", 45982 "effects.title": "Hi\u1EC7u \u1EE9ng", 45983 "effects.soft": "L\xE0m m\u1ECBn", 45984 "effects.vignette": "T\u1ED1i g\xF3c", 45985 "effects.face": "Che m\u1EB7t", 45986 "effects.face_preview_only": "Che m\u1EB7t (ch\u1EC9 xem tr\u01B0\u1EDBc)", 45987 "effects.face_viewer_side": "Che m\u1EB7t (ph\xEDa ng\u01B0\u1EDDi xem)", 45988 "effects.face_strength": "M\u1EE9c \u0111\u1ED9 che m\u1EB7t", 45989 "effects.grade.off": "T\u1EAET", 45990 "effects.grade.pop": "N\u1ED4I B\u1EACT", 45991 "effects.grade.warm": "\u1EA4M", 45992 "effects.grade.cool": "L\u1EA0NH", 45993 "effects.grade.bw": "TR\u1EAENG \u0110EN", 45994 "camera.off": "cam \u0111ang t\u1EAFt", 45995 "camera.check": "check cam x\xEDu", 45996 "camera.retry": "th\u1EED l\u1EA1i cam", 45997 "camera.ready": "cam \u0111\xE3 s\u1EB5n s\xE0ng", 45998 "camera.idle.title": "B\u1EADt cam l\xEAn n\xE0o", 45999 "camera.idle.hint": "B\u1ECDn m\xECnh s\u1EBD xin quy\u1EC1n truy c\u1EADp tr\xECnh duy\u1EC7t khi b\u1EA1n s\u1EB5n s\xE0ng.", 46000 "camera.idle.button": "B\u1EADt cam", 46001 "camera.status.idle": "\u0110ang \u0111\u1EE3i b\u1EA1n", 46002 "camera.status.off": "Cam \u0111ang t\u1EAFt", 46003 "camera.status.loading": "\u0110ang xin quy\u1EC1n m\u1EDF cam...", 46004 "camera.status.denied": "C\u1EA5p quy\u1EC1n m\u1EDF cam tr\xEAn tr\xECnh duy\u1EC7t r\u1ED3i th\u1EED l\u1EA1i nha.", 46005 "camera.status.error": "L\u1ED7i xem tr\u01B0\u1EDBc cam. Th\u1EED l\u1EA1i nha.", 46006 "camera.status.unsupported": "Tr\xECnh duy\u1EC7t n\xE0y kh\xF4ng h\u1ED7 tr\u1EE3 m\u1EDF cam.", 46007 "camera.status.insecure": "M\u1EDF cam c\u1EA7n c\xF3 HTTPS ho\u1EB7c localhost.", 46008 "camera.status.attach_failed": "Kh\xF4ng th\u1EC3 b\u1EAFt \u0111\u1EA7u xem tr\u01B0\u1EDBc cam. Th\u1EED l\u1EA1i nha.", 46009 "camera.guest_name_placeholder": "T\xEAn kh\xE1ch", 46010 "camera.flip": "\u0110\u1ED5i cam", 46011 "camera.save_name": "L\u01B0u", 46012 "camera.edit_name": "S\u1EEDa t\xEAn", 46013 "mic.on": "T\u1EAFt mic", 46014 "mic.off": "B\u1EADt mic", 46015 "video.on": "T\u1EAFt cam", 46016 "video.off": "B\u1EADt cam", 46017 "chat.title": "chat",
46018 "chat.close": "\u0110\xF3ng chat", 46019 "chat.loading": "\u0111ang t\u1EA3i...", 46020 "chat.load_earlier": "t\u1EA3i tin c\u0169 h\u01A1n", 46021 "chat.empty": "ch\u01B0a c\xF3 tin nh\u1EAFn n\xE0o", 46022 "chat.send_error": "Ch\u01B0a g\u1EEDi \u0111\u01B0\u1EE3c tin nh\u1EAFn \u2014 th\u1EED l\u1EA1i nha.", 46023 "chat.input_placeholder": "nh\u1EADp tin nh\u1EAFn...", 46024 "room.host": "Host", 46025 "app.room_default_title": "T\u1EA1o ph\xF2ng", 46026 "app.chat_connection_rejected": "Kh\xF4ng k\u1EBFt n\u1ED1i \u0111\u01B0\u1EE3c chat \u2014 th\u1EED F5 l\u1EA1i nha.", 46027 "app.copy_failed": "Kh\xF4ng copy \u0111\u01B0\u1EE3c link. Th\u1EED b\xF4i \u0111en r\u1ED3i copy th\u1EE7 c\xF4ng nha.", 46028 "app.chat_not_connected": "Chat ch\u01B0a k\u1EBFt n\u1ED1i \u0111\u01B0\u1EE3c. \u0110\u1EE3i t\xED r\u1ED3i th\u1EED l\u1EA1i nha.", 46029 "footer.terms": "\u0110i\u1EC1u kho\u1EA3n & \u0110i\u1EC1u ki\u1EC7n", 46030 "footer.copyright": "\xA9 2026 Yano.AI" 46031}; 46032
46033// app/javascript/yano/locales/zh.js 46034var zh_default = { 46035 "home.heading.default": "\u4E0A\u9EA6\u804A\u804A", 46036 "home.heading.loading": "\u6B63\u5728\u51C6\u5907\u623F\u95F4...", 46037 "home.heading.join": "\u51C6\u5907\u8FDB\u623F\uFF1F", 46038 "home.heading.joined": "\u8FDB\u6765\u4E86", 46039 "home.heading.pending": "\u7B49\u623F\u4E3B\u653E\u4EBA", 46040 "home.body.default": "\u5EFA\u4E2A\u623F\uFF0C\u4E22\u4E2A\u94FE\u63A5\uFF0C\u5F00\u804A\u3002", 46041 "home.body.loading": "\u7B49\u4E00\u4E0B\uFF0C\u9A6C\u4E0A\u5EFA\u597D\u3002", 46042 "home.body.join": "\u68C0\u67E5\u4E0B\u955C\u5934\u548C\u9EA6\uFF0C\u7136\u540E\u76F4\u63A5\u8FDB\u3002", 46043 "home.body.joined": "\u623F\u95F4\u5DF2\u5F00\u3002\u53D1\u94FE\u63A5\u6447\u4EBA\uFF0C\u6216\u8005\u76F4\u63A5\u5F00\u804A\u3002", 46044 "home.body.joined_in_room": "\u5DF2\u7ECF\u5728\u623F\u95F4\u91CC\u4E86\u2014\u2014\u76F4\u63A5\u804A\u6216\u8005\u53D1\u94FE\u63A5\u6447\u4EBA\u3002", 46045 "home.body.pending": "\u623F\u95F4\u9501\u4E86\uFF0C\u7B49\u623F\u4E3B\u653E\u4F60\u8FDB\u53BB\u3002", 46046 "home.cta.create": "\u5EFA\u4E2A\u623F\u95F4", 46047 "home.cta.join": "\u8FDB\u623F\u95F4", 46048 "home.cta.enter": "\u8FDB\u53BB", 46049 "home.cta.creating": "\u6B63\u5728\u5EFA...", 46050 "home.cta.joining": "\u6B63\u5728\u8FDB...", 46051 "home.cta.opening": "\u6B63\u5728\u5F00...", 46052 "home.cta.pending": "\u7B49\u623F\u4E3B\u653E\u884C...", 46053 "home.copy_link": "\u590D\u5236\u94FE\u63A5", 46054 "home.copied": "\u590D\u5236\u5566\uFF01", 46055 "home.leave": "\u79BB\u5F00\u623F\u95F4", 46056 "home.back": "\u8FD4\u56DE", 46057 "home.no_participants": "\u8FD8\u6CA1\u4EBA\u6765", 46058 "home.join_by_code": "\u7528\u9080\u8BF7\u7801\u8FDB", 46059 "home.code_placeholder": "\u586B\u9080\u8BF7\u7801", 46060 "home.name_placeholder": "\u600E\u4E48\u79F0\u547C", 46061 "home.people_one": "\u4EBA", 46062 "home.people_other": "\u4EBA", 46063 "home.marketing.invite.title": "\u5EFA\u4E2A\u623F\u95F4\uFF0C\n\u5206\u4EAB\u94FE\u63A5\u3002", 46064 "home.marketing.invite.body": "\u4E00\u952E\u5F00\u64AD\u3002\u628A\u94FE\u63A5\u53D1\u7ED9\u670B\u53CB\uFF0C\u8C01\u90FD\u80FD\u8FDB\u2014\u2014\u514D\u4E0B\u8F7D\uFF0C\u514D\u6CE8\u518C\u3002", 46065 "home.marketing.invite.preview_url": "yano.ai/ROOM", 46066 "home.marketing.look.title": "\u60F3\u8981\u4EC0\u4E48\u753B\u98CE\uFF0C\n\u81EA\u5DF1\u5B9A\u3002", 46067 "home.marketing.look.body": "\u8C03\u8272\u3001\u67D4\u5149\u3001\u6697\u89D2\u2014\u2014\u6216\u8005\u5E72\u8106\u628A\u8138\u7CCA\u6389\u3002\u4F60\u7684\u955C\u5934\uFF0C\u4F60\u8BF4\u4E86\u7B97\u3002", 46068 "home.marketing.host.title": "\u4F60\u7684\u5730\u76D8\uFF0C\n\u542C\u4F60\u7684\u3002", 46069 "home.marketing.host.body": "\u9501\u623F\u3001\u95ED\u9EA6\uFF0C\u6216\u8005\u76F4\u63A5\u8E22\u4EBA\u3002\u623F\u4E3B\u7EDD\u5BF9\u63A7\u573A\u3002", 46070 "home.marketing.host.locked": "\u623F\u95F4\u5DF2\u9501", 46071 "home.marketing.host.waiting_to_join": "\u7B49\u5F85\u8FDB\u5165", 46072 "home.marketing.host.wants_to_join": "\u60F3\u8FDB\u6765", 46073 "home.marketing.anything.title": "\u771F\u7684\uFF0C\u5E72\u5565\u90FD\u884C\u3002", 46074 "home.marketing.anything.body": "\u4E00\u8D77\u81EA\u4E60\u3001\u5F00\u9ED1\u3001\u5DE5\u4F5C\u7AD9\u4F1A\u3001\u770B\u7247\u2014\u2014\u6216\u8005\u5355\u7EAF\u6302\u7740\u95F2\u804A\u3002", 46075 "home.marketing.use_case.study_group": "\u{1F4DA} \u7EC4\u56E2\u81EA\u4E60", 46076 "home.marketing.use_case.game_night": "\u{1F3AE} \u71AC\u591C\u5F00\u9ED1", 46077 "home.marketing.use_case.standup": "\u{1F4BC} \u6BCF\u65E5\u7AD9\u4F1A", 46078 "home.marketing.use_case.watch_party": "\u{1F37F} \u4E00\u8D77\u770B\u7247", 46079 "home.marketing.use_case.catch_up": "\u2615 \u95F2\u804A\u53D9\u65E7", 46080 "home.marketing.use_case.jam_session": "\u{1F3B8} \u7EBF\u4E0A\u73A9\u4E50\u5668", 46081 "home.marketing.use_case.book_club": "\u{1F4D6}
46081 \u8BFB\u4E66\u4F1A", 46082 "home.marketing.use_case.coworking": "\u{1F4BB} \u4E91\u529E\u516C", 46083 "ended.heading": "\u804A\u5B8C\u4E86", 46084 "ended.left": "\u4F60\u5DF2\u9000\u51FA\u623F\u95F4\u3002", 46085 "ended.room_ended": "{title} \u5DF2\u7ECF\u7ED3\u675F\u5566\u3002", 46086 "ended.rejoin": "\u91CD\u65B0\u8FDB", 46087 "ended.rejoining": "\u6B63\u5728\u91CD\u65B0\u8FDB...", 46088 "ended.home": "\u56DE\u9996\u9875", 46089 "call.connecting": "\u8FDE\u63A5\u4E2D", 46090 "call.waiting": "\u7B49\u5176\u4ED6\u4EBA\u6765", 46091 "call.invite_code": "\u9080\u8BF7\u7801", 46092 "call.audio_on": "\u9EA6\u5F00\u7740", 46093 "call.muted": "\u5DF2\u95ED\u9EA6", 46094 "call.listening": "\u65C1\u542C\u4E2D", 46095 "call.audio_muted": "\u6CA1\u5F00\u9EA6", 46096 "call.speaking": "\u6B63\u5728\u8BF4\u8BDD", 46097 "call.you": "\u4F60", 46098 "call.you_label": "\u4F60", 46099 "call.you_suffix": "(\u4F60)", 46100 "call.chat_placeholder": "\u968F\u4FBF\u8BF4\u70B9\u5565...", 46101 "call.guest": "\u8BBF\u5BA2", 46102 "call.room_fallback": "\u623F\u95F4", 46103 "call.focus_view": "\u6C89\u6D78\u6A21\u5F0F", 46104 "call.grid_view": "\u7F51\u683C\u6A21\u5F0F", 46105 "call.swap_main_video": "\u5207\u6362\u4E3B\u753B\u9762", 46106 "call.open_chat": "\u6253\u5F00\u804A\u5929", 46107 "call.close_chat": "\u5173\u6389\u804A\u5929", 46108 "call.leave_room": "\u79BB\u5F00\u623F\u95F4", 46109 "call.confirm_leave": "\u771F\u8981\u8D70\uFF1F", 46110 "call.mic_on": "\u9EA6\u514B\u98CE\u5F00", 46111 "call.muted_label": "\u5DF2\u95ED\u9EA6", 46112 "call.camera_off": "\u955C\u5934\u5173", 46113 "call.connect_failed": "\u8FDE\u4E0D\u4E0A\u2014\u2014\u68C0\u67E5\u4E0B\u7F51\u518D\u8BD5\u8BD5\u3002", 46114 "call.camera_access_failed": "\u6253\u4E0D\u5F00\u955C\u5934\u3002\u68C0\u67E5\u4E0B\u6D4F\u89C8\u5668\u6743\u9650\u518D\u8BD5\u8BD5\u3002", 46115 "call.recording_failed": "\u5F55\u5236\u6CA1\u5F00\u8D77\u6765\uFF0C\u4E0D\u8FC7\u804A\u5929\u7EE7\u7EED\u3002", 46116 "call.initialize_failed": "\u5F00\u542F\u5931\u8D25\u4E86\uFF0C\u5237\u65B0\u4E00\u4E0B\u8BD5\u8BD5\u3002", 46117 "call.participants": "\u623F\u95F4\u91CC\u7684\u4EBA", 46118 "call.open_participants": "\u67E5\u770B\u6240\u6709\u4EBA", 46119 "call.close_participants": "\u6536\u8D77\u5217\u8868", 46120 "call.lock_room": "\u9501\u95E8", 46121 "call.unlock_room": "\u5F00\u95E8", 46122 "call.locked": "\u5DF2\u9501", 46123 "call.unlocked": "\u5F00\u653E\u4E2D", 46124 "call.kick_member": "\u8E22\u51FA\u623F\u95F4", 46125 "call.mute_member": "\u95ED\u9EA6", 46126 "call.unmute_member": "\u89E3\u9664\u95ED\u9EA6", 46127 "call.muted_by_host": "\u88AB\u623F\u4E3B\u95ED\u9EA6\u4E86", 46128 "call.waiting_to_join": "\u7B49\u7740\u8FDB\u5462", 46129 "call.approve": "\u653E\u884C", 46130 "call.deny": "\u62D2\u7EDD", 46131 "call.profile_actions": "\u8D44\u6599\u64CD\u4F5C", 46132 "call.profile_in_room": "\u5728\u623F\u95F4\u91CC", 46133 "call.profile_role_host": "\u623F\u4E3B", 46134 "call.profile_role_you": "\u4F60", 46135 "call.profile_action_mute": "\u5C4F\u853DTA\u7684\u58F0\u97F3", 46136 "call.profile_action_mute_meta": "\u53EA\u6709\u4F60\u542C\u4E0D\u5230\u2014\u2014TA\u4E0D\u4F1A\u77E5\u9053\u7684", 46137 "call.profile_action_dm": "\u79C1\u804A", 46138 "call.profile_action_dm_meta": "\u5F00\u4E2A\u79C1\u5BC6\u5C0F\u7A97", 46139 "call.profile_action_view": "\u770B\u5B8C\u6574\u8D44\u6599", 46140 "call.profile_action_view_meta": "\u7B80\u4ECB\u3001\u8BED\u8A00\u3001\u5386\u53F2\u8BB0\u5F55", 46141 "call.profile_action_report": "\u4E3E\u62A5", 46142 "call.profile_action_report_meta": "\u63D0\u4EA4\u7ED9\u7BA1\u7406\u5458\u5BA1\u6838", 46143 "call.profile_sheet_close": "\u5173\u95ED\u64CD\u4F5C", 46144 "call.profile_open_actions": "\u6253\u5F00\u64CD\u4F5C", 46145 "call.dm_title": "\u79C1\u804A", 46146 "call.dm_back": "\u8FD4\u56DE", 46147 "call.dm_close": "\u5173\u6389\u79C1\u804A", 46148 "call.dm_status_online": "\u5728\u7EBF", 46149 "call.dm_in_room_with": "\u5728\u540C\u4E00\u4E2A\u623F\u95F4", 46150 "call.dm_private_label": "\u79C1\u5BC6\u804A\u5929", 46151 "call.dm_private_meta": "\u53EA\u6709\u4F60\u4FE9\u80FD\u770B\u5230", 46152 "call.dm_input_placeholder": "\u53D1\u79C1\u4FE1\u2026", 46153 "call.dm_send": "\u53D1\u9001", 46154 "call.dm_just_now": "\u521A\u521A", 46155 "call.dm_seen_just_now": "\u521A\u521A\u5DF2\u8BFB", 46156 "call.dm_typing": "{name} \u6B63\u5728\u8F93\u5165\u2026", 46157 "call.dm_minimize": "\u6700\u5C0F\u5316", 46158 "call.dm_active_indicator": "\u6253\u5F00\u804A\u5929", 46159 "call.dm_unread_messages": "{count} \u6761\u672A\u8BFB", 46160 "call.dm_toast_tap_to_open": "\u70B9\u5F00\u770B\u770B", 46161 "call.dm_reopen_aria": "\u91CD\u65B0\u6253\u5F00\u548C {name} \u7684\u804A\u5929",
46162 "home.join_denied": "\u623F\u4E3B\u6CA1\u8BA9\u4F60\u8FDB\u3002", 46163 "home.error.room_not_found": "\u623F\u95F4\u7801\u4E0D\u5B58\u5728\u3002", 46164 "home.error.profile_required": "\u5148\u641E\u5B9A\u4E2A\u4EBA\u8D44\u6599\u518D\u7EE7\u7EED\u3002", 46165 "home.cta.set_up_profile": "\u8BBE\u7F6E\u4E2A\u4EBA\u8D44\u6599", 46166 "home.profile_trigger_new": "\u70B9\u8FD9\u91CC\u6DFB\u52A0\u8D44\u6599", 46167 "home.profile_trigger_new_aria": "\u8BBE\u7F6E\u4E2A\u4EBA\u8D44\u6599", 46168 "home.profile_trigger_edit_aria": "\u4FEE\u6539\u8D44\u6599", 46169 "profile.eyebrow_new": "\u6253\u4E2A\u62DB\u547C", 46170 "profile.eyebrow_edit": "\u4F60\u7684\u8D44\u6599", 46171 "profile.title_new": "\u6253\u9020\u4F60\u7684\u4E13\u5C5E\u540D\u7247\u3002", 46172 "profile.title_edit": "\u4FEE\u6539\u8D44\u6599", 46173 "profile.subtitle": "\u968F\u4FBF\u586B\u70B9\u5565\uFF0C\u8BA9\u5927\u5BB6\u8BA4\u8BC6\u8BA4\u8BC6\u4F60\u3002", 46174 "profile.add_photo": "\u52A0\u5F20\u7167\u7247", 46175 "profile.add_photo_soon": "\u7167\u7247\u529F\u80FD\u9A6C\u4E0A\u5C31\u6765", 46176 "profile.photo_empty": "\u70B9\u8FD9\u91CC\u52A0\u7167\u7247", 46177 "profile.photo_ready": "\u7167\u7247\u641E\u5B9A", 46178 "profile.photo_save_first": "\u4F20\u7167\u7247\u524D\u5148\u4FDD\u5B58\u8D44\u6599\u54E6", 46179 "profile.photo_crop_caption": "\u8C03\u6574\u4E00\u4E0B\u4F4D\u7F6E", 46180 "profile.photo_auto_caption": "\u62D6\u62FD\u7F29\u653E\uFF0C\u6211\u4EEC\u4F1A\u81EA\u52A8\u4FDD\u5B58", 46181 "profile.photo_upload": "\u4E0A\u4F20\u7167\u7247", 46182 "profile.photo_replace": "\u6362\u5F20\u7167\u7247", 46183 "profile.photo_remove": "\u5220\u6389\u7167\u7247", 46184 "profile.photo_cancel": "\u53D6\u6D88", 46185 "profile.photo_save": "\u4FDD\u5B58\u7167\u7247", 46186 "profile.photo_uploading": "\u6B63\u5728\u4F20\u7167\u7247\u2026", 46187 "profile.photo_removing": "\u6B63\u5728\u5220\u7167\u7247\u2026", 46188 "profile.photo_choose_another": "\u6362\u4E00\u5F20", 46189 "profile.photo_drag_hint": "\u628A\u7167\u7247\u62D6\u8FDB\u5708\u91CC\uFF0C\u4F1A\u81EA\u52A8\u4FDD\u5B58\u3002", 46190 "profile.photo_zoom": "\u7F29\u653E", 46191 "profile.photo_horizontal": "\u6C34\u5E73\u88C1\u526A", 46192 "profile.photo_vertical": "\u5782\u76F4\u88C1\u526A", 46193 "profile.name_label": "\u540D\u5B57", 46194 "profile.name_placeholder": "\u600E\u4E48\u79F0\u547C\u4F60\uFF1F", 46195 "profile.gender_label": "\u6211\u662F", 46196 "profile.gender.woman": "\u5973\u751F", 46197 "profile.gender.man": "\u7537\u751F", 46198 "profile.gender.unspecified": "\u4FDD\u5BC6", 46199 "profile.bio_label": "\u7B80\u4ECB", 46200 "profile.bio_optional": "\u9009\u586B", 46201 "profile.bio_placeholder": "\u4F1A\u5565\u8BED\u8A00\u3001\u559C\u6B22\u5565\uFF0C\u968F\u4FBF\u5199\u70B9\u2026", 46202 "profile.cta_new": "\u8D70\u8D77", 46203 "profile.cta_edit": "\u4FDD\u5B58\u4FEE\u6539", 46204 "profile.saving": "\u4FDD\u5B58\u4E2D\u2026", 46205 "profile.close": "\u5173\u95ED", 46206 "profile.error.save_failed": "\u8D44\u6599\u6CA1\u5B58\u4E0A\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002", 46207 "profile.error.avatar_invalid_type": "\u9009\u4E2A PNG\u3001JPEG\u3001GIF \u6216 WebP \u683C\u5F0F\u7684\u56FE\u5457\u3002", 46208 "profile.error.avatar_too_large": "\u56FE\u7247\u5F97\u5C0F\u4E8E 5 MB \u54E6\u3002", 46209 "profile.error.avatar_too_small": "\u56FE\u7247\u81F3\u5C11\u5F97 96x96 \u50CF\u7D20\u3002", 46210 "profile.error.avatar_load_failed": "\u56FE\u7247\u8BFB\u4E0D\u51FA\u6765\uFF0C\u6362\u4E00\u5F20\u8BD5\u8BD5\u3002", 46211 "profile.error.avatar_failed": "\u7167\u7247\u6CA1\u4F20\u4E0A\u53BB\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002", 46212 "profile.error.avatar_remove_failed": "\u7167\u7247\u6CA1\u5220\u6389\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002", 46213 "effects.title": "\u7279\u6548", 46214 "effects.soft": "\u67D4\u5149", 46215 "effects.vignette": "\u6697\u89D2", 46216 "effects.face": "\u8138\u90E8\u6253\u7801", 46217 "effects.face_preview_only": "\u8138\u90E8\u6253\u7801\uFF08\u4EC5\u9884\u89C8\uFF09", 46218 "effects.face_viewer_side": "\u8138\u90E8\u6253\u7801\uFF08\u89C2\u4F17\u53EF\u89C1\uFF09", 46219 "effects.face_strength": "\u6253\u7801\u5F3A\u5EA6", 46220 "effects.grade.off": "\u5173", 46221 "effects.grade.pop": "\u9C9C\u8273", 46222 "effects.grade.warm": "\u6696\u8272", 46223 "effects.grade.cool": "\u51B7\u8272", 46224 "effects.grade.bw": "\u9ED1\u767D", 46225 "camera.off": "\u955C\u5934\u5173\u7740\u5462", 46226 "camera.check": "\u68C0\u67E5\u4E0B\u955C\u5934", 46227 "camera.retry": "\u91CD\u8BD5\u955C\u5934", 46228 "camera.ready": "\u955C\u5934\u641E\u5B9A", 46229 "camera.idle.title": "\u6253\u5F00\u955C\u5934", 46230 "camera.idle.hint": "\u51C6\u5907\u597D\u540E\uFF0C\u6211\u4EEC\u4F1A\u5411\u6D4F\u89C8\u5668\u7533\u8BF7\u6743\u9650\u3002", 46231 "camera.idle.button": "\u5F00\u542F\u955C\u5934", 46232 "camera.status.idle": "\u7B49\u4F60\u5462", 46233 "camera.status.off": "\u955C\u5934\u5173\u7740", 46234 "camera.status.loading": "\u6B63\u5728\u7533\u8BF7\u955C\u5934\u6743\u9650...", 46235 "camera.status.denied": "\u5728\u6D4F\u89C8\u5668\u91CC\u7ED9\u4E0B\u955C\u5934\u6743\u9650\uFF0C\u7136\u540E\u518D\u8BD5\u3002", 46236 "camera.status.error": "\u955C\u5934\u9884\u89C8\u5931\u8D25\u4E86\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002", 46237 "camera.status.unsupported": "\u8FD9\u4E2A\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u5F00\u955C\u5934\u3002", 46238 "camera.status.insecure": "\u5F00\u955C\u5934\u9700\u8981 HTTPS \u6216 localhost \u73AF\u5883\u3002", 46239 "camera.status.attach_failed": "\u955C\u5934\u9884\u89C8\u6CA1\u5F00\u8D77\u6765\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002", 46240 "camera.guest_name_placeholder": "\u8BBF\u5BA2\u540D\u5B57", 46241 "camera.flip": "\u7FFB\u8F6C\u955C\u5934", 46242 "camera.save_name": "\u4FDD\u5B58", 46243 "camera.edit_name": "\u6539\u540D", 46244 "mic.on": "\u5173\u9EA6", 46245 "mic.off": "\u5F00\u9EA6", 46246 "video.on": "\u5173\u955C\u5934", 46247 "video.off": "\u5F00\u955C\u5934", 46248 "chat.title": "\u804A\u5929",
46249 "chat.close": "\u5173\u6389\u804A\u5929", 46250 "chat.loading": "\u52A0\u8F7D\u4E2D...", 46251 "chat.load_earlier": "\u770B\u4E4B\u524D\u7684", 46252 "chat.empty": "\u8FD8\u6CA1\u4EBA\u8BF4\u8BDD", 46253 "chat.send_error": "\u6D88\u606F\u6CA1\u53D1\u51FA\u53BB\u2014\u2014\u518D\u8BD5\u4E00\u6B21\u3002", 46254 "chat.input_placeholder": "\u968F\u4FBF\u8BF4\u70B9\u5565...", 46255 "room.host": "\u623F\u4E3B", 46256 "app.room_default_title": "\u5EFA\u4E2A\u623F\u95F4", 46257 "app.chat_connection_rejected": "\u804A\u5929\u8FDE\u4E0D\u4E0A\u2014\u2014\u5237\u65B0\u8BD5\u8BD5\u3002", 46258 "app.copy_failed": "\u94FE\u63A5\u6CA1\u590D\u5236\u6210\u529F\uFF0C\u8BD5\u7740\u624B\u52A8\u9009\u4E00\u4E0B\u590D\u5236\u5427\u3002", 46259 "app.chat_not_connected": "\u804A\u5929\u8FD8\u6CA1\u8FDE\u4E0A\uFF0C\u7B49\u4F1A\u513F\u518D\u8BD5\u3002", 46260 "footer.terms": "\u6761\u6B3E\u4E0E\u6761\u4EF6", 46261 "footer.copyright": "\xA9 2026 Yano.AI" 46262}; 46263
46264// app/javascript/yano/i18n.jsx 46265var STORAGE_KEY2 = "yano_locale"; 46266var translations = { 46267 de: de_default, 46268 en: en_default, 46269 es: es_default, 46270 et: et_default, 46271 fr: fr_default, 46272 it: it_default, 46273 ja: ja_default, 46274 ko: ko_default, 46275 lo: lo_default, 46276 lt: lt_default, 46277 lv: lv_default, 46278 nl: nl_default, 46279 pl: pl_default, 46280 pt: pt_default, 46281 ru: ru_default, 46282 th: th_default, 46283 tl: tl_default, 46284 uk: uk_default, 46285 vi: vi_default, 46286 zh: zh_default 46287}; 46288var SUPPORTED_LOCALES = [ 46289 { code: "de", flag: "\u{1F1E9}\u{1F1EA}", name: "Deutsch" }, 46290 { code: "en", flag: "\u{1F1EC}\u{1F1E7}", name: "English" }, 46291 { code: "es", flag: "\u{1F1EA}\u{1F1F8}", name: "Espa\xF1ol" }, 46292 { code: "et", flag: "\u{1F1EA}\u{1F1EA}", name: "Eesti" }, 46293 { code: "fr", flag: "\u{1F1EB}\u{1F1F7}", name: "Fran\xE7ais" }, 46294 { code: "it", flag: "\u{1F1EE}\u{1F1F9}", name: "Italiano" }, 46295 { code: "ja", flag: "\u{1F1EF}\u{1F1F5}", name: "\u65E5\u672C\u8A9E" }, 46296 { code: "ko", flag: "\u{1F1F0}\u{1F1F7}", name: "\uD55C\uAD6D\uC5B4" }, 46297 { code: "lo", flag: "\u{1F1F1}\u{1F1E6}", name: "\u0EA5\u0EB2\u0EA7" }, 46298 { code: "lt", flag: "\u{1F1F1}\u{1F1F9}", name: "Lietuvi\u0173" }, 46299 { code: "lv", flag: "\u{1F1F1}\u{1F1FB}", name: "Latvie\u0161u" }, 46300 { code: "nl", flag: "\u{1F1F3}\u{1F1F1}", name: "Nederlands" }, 46301 { code: "pl", flag: "\u{1F1F5}\u{1F1F1}", name: "Polski" }, 46302 { code: "pt", flag: "\u{1F1F5}\u{1F1F9}", name: "Portugu\xEAs" }, 46303 { code: "ru", flag: "\u{1F1F7}\u{1F1FA}", name: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439" }, 46304 { code: "th", flag: "\u{1F1F9}\u{1F1ED}", name: "\u0E20\u0E32\u0E29\u0E32\u0E44\u0E17\u0E22" }, 46305 { code: "tl", flag: "\u{1F1F5}\u{1F1ED}", name: "Tagalog" }, 46306 { code: "uk", flag: "\u{1F1FA}\u{1F1E6}", name: "\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430" }, 46307 { code: "vi", flag: "\u{1F1FB}\u{1F1F3}", name: "Ti\u1EBFng Vi\u1EC7t" }, 46308 { code: "zh", flag: "\u{1F1E8}\u{1F1F3}", name: "\u4E2D\u6587" } 46309]; 46310function detectLocale() { 46311 try { 46312 const raw = new URLSearchParams(window.location.search).get("lang"); 46313 if (raw) { 46314 const base = raw.trim().toLowerCase().split("-")[0]; 46315 if (base && translations[base]) return base; 46316 } 46317 } catch (_3) { 46318 } 46319 try { 46320 const stored = localStorage.getItem(STORAGE_KEY2); 46321 if (stored && translations[stored]) return stored; 46322 } catch (_3) { 46323 } 46324 const preferred = []; 46325 try { 46326 if (typeof navigator !== "undefined") { 46327 if (Array.isArray(navigator.languages)) preferred.push(...navigator.languages); 46328 if (navigator.language) preferred.push(navigator.language); 46329 } 46330 } catch (_3) { 46331 } 46332 const seen = /* @__PURE__ */ new Set(); 46333 for (const entry of preferred) { 46334 if (!entry || typeof entry !== "string") continue; 46335 const normalized = entry.trim().toLowerCase(); 46336 if (!normalized || seen.has(normalized)) continue; 46337 seen.add(normalized); 46338 const base = normalized.split("-")[0]; 46339 if (translations[base]) return base; 46340 } 46341 return "en"; 46342} 46343var I18nContext = (0, import_react2.createContext)(null); 46344function I18nProvider({ children }) { 46345 const [locale, setLocaleState] = (0, import_react2.useState)(detectLocale); 46346 const setLocale = (0, import_react2.useCallback)((code) => { 46347 setLocaleState(code); 46348 try { 46349 localStorage.setItem(STORAGE_KEY2, code); 46350 } catch (_3) { 46351 } 46352 }, []); 46353 (0, import_react2.useLayoutEffect)(() => { 46354 try { 46355 document.documentElement.lang = locale; 46356 } catch (_3) { 46357 } 46358 }, [locale]); 46359 (0, import_react2.useLayoutEffect)(() => { 46360 try { 46361 localStorage.setItem(STORAGE_KEY2, locale); 46362 } catch (_3) { 46363 } 46364 }, [locale]); 46365 const t3 = (0, import_react2.useCallback)((key, params) => { 46366 const str = translations[locale]?.[key] || translations.en[key] || key; 46367 if (!params) return str; 46368 return str.replace(/\{(\w+)\}/g, (_3, k3) => params[k3] ?? `{${k3}}`); 46369 }, [locale]); 46370 return /* @__PURE__ */ import_react2.default.createElement(I18nContext.Provider, { value: { locale, setLocale, t: t3, locales: SUPPORTED_LO
46370CALES } }, children); 46371} 46372function useI18n() { 46373 return (0, import_react2.useContext)(I18nContext); 46374} 46375function LocalePicker() { 46376 const { locale, setLocale, locales } = useI18n(); 46377 const [open, setOpen] = (0, import_react2.useState)(false); 46378 const [menuStyle, setMenuStyle] = (0, import_react2.useState)(null); 46379 const buttonRef = (0, import_react2.useRef)(null); 46380 const menuRef = (0, import_react2.useRef)(null); 46381 const current = locales.find((l3) => l3.code === locale); 46382 const updateMenuPosition = (0, import_react2.useCallback)(() => { 46383 const rect = buttonRef.current?.getBoundingClientRect(); 46384 if (!rect) return; 46385 const width = Math.min(352, window.innerWidth - 24); 46386 const estimatedHeight = Math.min(448, window.innerHeight - 24); 46387 const left = Math.min( 46388 Math.max(12, rect.right - width), 46389 Math.max(12, window.innerWidth - width - 12) 46390 ); 46391 const top = rect.bottom + 8 + estimatedHeight > window.innerHeight - 12 ? Math.max(12, rect.top - estimatedHeight - 8) : rect.bottom + 8; 46392 setMenuStyle({ 46393 top, 46394 left, 46395 width 46396 }); 46397 }, []); 46398 (0, import_react2.useLayoutEffect)(() => { 46399 if (!open) return; 46400 updateMenuPosition(); 46401 window.addEventListener("resize", updateMenuPosition); 46402 window.addEventListener("scroll", updateMenuPosition, true); 46403 return () => { 46404 window.removeEventListener("resize", updateMenuPosition); 46405 window.removeEventListener("scroll", updateMenuPosition, true); 46406 }; 46407 }, [open, updateMenuPosition]); 46408 (0, import_react2.useLayoutEffect)(() => { 46409 if (!open || !menuStyle) return; 46410 const id = window.requestAnimationFrame(() => { 46411 menuRef.current?.focus?.({ preventScroll: true }); 46412 }); 46413 return () => window.cancelAnimationFrame(id); 46414 }, [open, menuStyle]); 46415 return /* @__PURE__ */ import_react2.default.createElement("div", { className: "relative z-[220]" }, /* @__PURE__ */ import_react2.default.createElement( 46416 "button", 46417 { 46418 ref: buttonRef, 46419 type: "button", 46420 onClick: () => setOpen((value) => !value), 46421 className: "flex items-center gap-1.5 rounded-xl bg-violet-500/10 px-2.5 py-1.5 text-xs font-bold text-violet-300 transition hover:bg-violet-500/18", 46422 "aria-haspopup": "menu", 46423 "aria-expanded": open, 46424 onKeyDown: (event) => { 46425 if (event.key !== "ArrowDown" && event.key !== "Enter" && event.key !== " ") return; 46426 event.preventDefault(); 46427 setOpen(true); 46428 } 46429 }, 46430 /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-sm leading-none" }, current?.flag), 46431 /* @__PURE__ */ import_react2.default.createElement("span", null, current?.name), 46432 /* @__PURE__ */ import_react2.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 20 20", fill: "currentColor", className: `opacity-50 transition-transform ${open ? "rotate-180" : ""}` }, /* @__PURE__ */ import_react2.default.createElement("path", { d: "M5.3 7.7a1 1 0 0 1 1.4 0L10 11l3.3-3.3a1 1 0 1 1 1.4 1.4l-4 4a1 1 0 0 1-1.4 0l-4-4a1 1 0 0 1 0-1.4Z" })) 46433 ), open && menuStyle ? (0, import_react_dom.createPortal)( 46434 /* @__PURE__ */ import_react2.default.createElement( 46435 "div", 46436 { 46437 ref: menuRef, 46438 tabIndex: -1, 46439 className: "yano-menu-pop fixed z-[400] max-h-[min(28rem,calc(100vh-1.5rem))] overflow-y-auto rounded-2xl border border-violet-500/15 bg-[#1a0e2e]/98 p-1.5 shadow-[0_16px_40px_rgba(0,0,0,0.55)] backdrop-blur-md", 46440 style: menuStyle, 46441 role: "menu", 46442 onKeyDown: (event) => { 46443 if (event.key !== "Escape") return; 46444 event.preventDefault(); 46445 setOpen(false); 46446 window.requestAnimationFrame(() => buttonRef.current?.focus?.({ preventScroll: true })); 46447 } 46448 },
46449 /* @__PURE__ */ import_react2.default.createElement("div", { className: "grid grid-cols-3 gap-1" }, locales.map((loc) => /* @__PURE__ */ import_react2.default.createElement( 46450 "button", 46451 { 46452 key: loc.code, 46453 type: "button", 46454 onClick: () => { 46455 setLocale(loc.code); 46456 setOpen(false); 46457 window.requestAnimationFrame(() => buttonRef.current?.focus?.({ preventScroll: true })); 46458 }, 46459 className: `yano-locale-tile relative flex min-w-0 flex-col items-center justify-center gap-1 rounded-[1rem] px-2 py-3 text-center transition hover:bg-violet-500/12 ${locale === loc.code ? "bg-violet-500/14 font-bold text-violet-100 ring-1 ring-violet-400/30" : "text-violet-300/78"} focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-violet-300/50`, 46460 role: "menuitemradio", 46461 "aria-checked": locale === loc.code 46462 }, 46463 /* @__PURE__ */ import_react2.default.createElement("span", { className: "text-2xl leading-none sm:text-3xl" }, loc.flag),
46464 /* @__PURE__ */ import_react2.default.createElement("span", { className: "min-w-0 text-[11px] leading-tight text-balance" }, loc.name), 46465 locale === loc.code ? /* @__PURE__ */ import_react2.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 20 20", fill: "currentColor", className: "absolute right-2 top-2 text-violet-300" }, /* @__PURE__ */ import_react2.default.createElement("path", { d: "M16.7 5.3a1 1 0 0 1 0 1.4l-8 8a1 1 0 0 1-1.4 0l-4-4a1 1 0 1 1 1.4-1.4L8 12.6l7.3-7.3a1 1 0 0 1 1.4 0Z" })) : null 46466 ))) 46467 ), 46468 document.body 46469 ) : null); 46470} 46471
46472// app/javascript/yano/videoEffects.js 46473var YANO_VIDEO_EFFECTS_VERSION = 1; 46474var VIDEO_GRADES = [ 46475 { id: "off", label: "OFF", filter: "saturate(1) contrast(1) brightness(1) hue-rotate(0deg)" }, 46476 { id: "pop", label: "POP", filter: "saturate(1.14) contrast(1.06) brightness(1.05) hue-rotate(-6deg)" }, 46477 { id: "warm", label: "WARM", filter: "saturate(1.08) contrast(1.05) brightness(1.03) hue-rotate(10deg)" }, 46478 { id: "cool", label: "COOL", filter: "saturate(1.08) contrast(1.06) brightness(1.03) hue-rotate(-18deg)" }, 46479 { id: "bw", label: "B&W", filter: "grayscale(1) contrast(1.08) brightness(1.05)" } 46480]; 46481var SOFT_FILTER = "blur(0.7px) contrast(1.12) saturate(1.05) brightness(1.03)"; 46482function normalizeVideoEffects(raw = {}) { 46483 const allowedGrades = new Set(VIDEO_GRADES.map((g3) => g3.id)); 46484 const grade = typeof raw.grade === "string" && allowedGrades.has(raw.grade) ? raw.grade : "off"; 46485 const soft = Boolean(raw.soft); 46486 const vignette = Boolean(raw.vignette); 46487 const faceBlur = Boolean(raw.faceBlur); 46488 const faceBlurPxRaw = Number(raw.faceBlurPx); 46489 const faceBlurPx = Number.isFinite(faceBlurPxRaw) ? Math.min(9, Math.max(2, Math.round(faceBlurPxRaw))) : 6; 46490 return { 46491 v: YANO_VIDEO_EFFECTS_VERSION, 46492 grade, 46493 soft, 46494 vignette, 46495 faceBlur, 46496 faceBlurPx 46497 }; 46498} 46499function filterStringForVideoEffects(effects) { 46500 const normalized = normalizeVideoEffects(effects); 46501 const gradeFilter = VIDEO_GRADES.find((g3) => g3.id === normalized.grade)?.filter || VIDEO_GRADES[0].filter; 46502 return [gradeFilter, normalized.soft ? SOFT_FILTER : null].filter(Boolean).join(" "); 46503} 46504
46505// app/javascript/yano/hooks/useFaceBlurOverlay.js 46506var import_react3 = __toESM(require_react()); 46507var FACE_DETECTOR_WASM_BASE = "https://cdn.jsdelivr.net/npm/@mediapipe/[email protected]/wasm"; 46508var FACE_DETECTOR_MODEL_URL = "https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite"; 46509var faceDetectorPromise; 46510async function getFaceDetector() { 46511 if (faceDetectorPromise) return faceDetectorPromise; 46512 faceDetectorPromise = (async () => { 46513 const module = await Promise.resolve().then(() => (init_vision_bundle(), vision_bundle_exports)); 46514 const { FaceDetector, FilesetResolver } = module; 46515 const vision = await FilesetResolver.forVisionTasks(FACE_DETECTOR_WASM_BASE); 46516 return FaceDetector.createFromOptions(vision, { 46517 baseOptions: { modelAssetPath: FACE_DETECTOR_MODEL_URL }, 46518 runningMode: "VIDEO" 46519 }); 46520 })(); 46521 faceDetectorPromise.catch(() => { 46522 faceDetectorPromise = null; 46523 }); 46524 return faceDetectorPromise; 46525} 46526function layoutParams(vw, vh, dw, dh, fit) { 46527 if (fit === "contain") { 46528 const scale2 = Math.min(dw / vw, dh / vh); 46529 const dx = (dw - vw * scale2) / 2; 46530 const dy = (dh - vh * scale2) / 2; 46531 return { sx: 0, sy: 0, scale: scale2, dx, dy }; 46532 } 46533 const scale = Math.max(dw / vw, dh / vh); 46534 const sw = dw / scale; 46535 const sh = dh / scale; 46536 const sx = (vw - sw) / 2; 46537 const sy = (vh - sh) / 2; 46538 return { sx, sy, scale, dx: 0, dy: 0 }; 46539} 46540function lerpBox(a3, b3, t3) { 46541 if (!a3) return b3; 46542 return { 46543 x: a3.x + (b3.x - a3.x) * t3, 46544 y: a3.y + (b3.y - a3.y) * t3, 46545 w: a3.w + (b3.w - a3.w) * t3, 46546 h: a3.h + (b3.h - a3.h) * t3 46547 }; 46548} 46549function pickStableBox(prevBox, nextBoxes) { 46550 if (!nextBoxes?.length) return null; 46551 const sorted = [...nextBoxes].sort((a3, b3) => b3.w * b3.h - a3.w * a3.h); 46552 const next = sorted[0]; 46553 if (!prevBox) return next; 46554 const prevArea = prevBox.w * prevBox.h; 46555 const nextArea = next.w * next.h; 46556 if (prevArea > 0 && nextArea < prevArea * 0.18) return prevBox; 46557 const pcx = prevBox.x + prevBox.w / 2; 46558 const pcy = prevBox.y + prevBox.h / 2; 46559 const ncx = next.x + next.w / 2; 46560 const ncy = next.y + next.h / 2; 46561 const dist = Math.hypot(ncx - pcx, ncy - pcy); 46562 const maxJump = Math.max(prevBox.w, prevBox.h) * 1.15; 46563 if (dist > maxJump) return prevBox; 46564 return next; 46565} 46566function useFaceBlurOverlay({ 46567 enabled, 46568 sourceVideoRef, 46569 overlayVideoRef, 46570 overlayRef, 46571 holdMs = 1200, 46572 lerpA = 0.22, 46573 fit = "cover" 46574}) { 46575 (0, import_react3.useEffect)(() => { 46576 if (!enabled) { 46577 const overlayElRef2 = overlayRef || overlayVideoRef; 46578 const overlay2 = overlayElRef2?.current; 46579 if (overlay2) { 46580 if (overlay2 instanceof HTMLCanvasElement) { 46581 const ctx = overlay2.getContext("2d"); 46582 if (ctx) ctx.clearRect(0, 0, overlay2.width, overlay2.height); 46583 } 46584 overlay2.style.opacity = "0"; 46585 overlay2.style.clipPath = "ellipse(0px 0px at 0px 0px)"; 46586 overlay2.style.webkitClipPath = "ellipse(0px 0px at 0px 0px)"; 46587 overlay2.style.maskImage = "none"; 46588 overlay2.style.webkitMaskImage = "none"; 46589 overlay2.style.filter = ""; 46590 } 46591 return void 0; 46592 } 46593 let stopped = false; 46594 const video = sourceVideoRef.current; 46595 const overlayElRef = overlayRef || overlayVideoRef; 46596 const overlay = overlayElRef?.current; 46597 if (!video || !overlay) return void 0; 46598 const overlayIsCanvas = overlay instanceof HTMLCanvasElement; 46599 const deviceMemory = navigator.deviceMemory || 0; 46600 const cores = navigator.hardwareConcurrency || 0; 46601 const lowEnd = deviceMemory && deviceMemory <= 2 || cores && cores <= 4; 46602 const detectIntervalMs = lowEnd ? 260 : 140; 46603 let faceTarget = null; 46604 let faceCurrent = null; 46605 let pendingDetect = null; 46606 let lastDetectAt = 0; 46607 let lastSeenAt = 0; 46608 let rafId = null; 46609 let lastDrawAt = 0; 46610 let lastFilterReadAt = 0; 46611 let cachedBaseFilter = "none"; 46612 let lastAppliedCanvasFilter = ""; 46613 let lastBlurReadAt = 0; 46614 let cachedBlurPx = 12; 46615 function faceBlurPx(now3) { 46616 if (now3 - lastBlurReadAt > 250) { 46617 lastBlurReadAt = now3; 46618 const raw = window.getComputedStyle(overlay).getPropertyValue("--yano-face-blur") || window.getComputedStyle(overlay.parentElement || overlay).getPropertyValue("--yano-face-blur") || ""; 46619 const value = Number.parseFloat(raw); 46620 if (Number.isFinite(value)) cachedBlurPx = value; 46621 } 46622 return cachedBlurPx; 46623 } 46624 function baseFilter(now3) { 46625 if (now3 - lastFilterReadAt > 250) { 46626 lastFilterReadAt = now3; 46627 try { 46628 cachedBaseFilter = window.getComputedStyle(video).filter || "none"; 46629 } catch (_error) { 46630 cachedBaseFilter = "none"; 46631 } 46632 } 46633 return cachedBaseFilter; 46634 } 46635 function setClipFromBox(box, now3) { 46636 if (!box) { 46637 overlay.style.opacity = "0"; 46638 overlay.style.clipPath = "ellipse(0px 0px at 0px 0px)"; 46639 overlay.style.webkitClipPath = "ellipse(0px 0px at 0px 0px)"; 46640 overlay.style.maskImage = "none"; 46641 overlay.style.webkitMaskImage = "none"; 46642 return; 46643 } 46644 const w3 = overlay.clientWidth || 1; 46645 const h3 = overlay.clientHeight || 1; 46646 const pad = faceBlurPx(now3) * 0.95;
46647 let rx = Math.max(10, box.w * 0.74 + pad); 46648 let ry = Math.max(10, box.h * 0.98 + pad * 1.2); 46649 rx = Math.min(rx, Math.max(12, w3 / 2 - 2)); 46650 ry = Math.min(ry, Math.max(12, h3 / 2 - 2)); 46651 let cx = box.x + box.w / 2; 46652 let cy = box.y + box.h / 2 + box.h * 0.08; 46653 cx = Math.min(w3 - rx, Math.max(rx, cx)); 46654 cy = Math.min(h3 - ry, Math.max(ry, cy)); 46655 const clip = `ellipse(${rx}px ${ry}px at ${cx}px ${cy}px)`; 46656 overlay.style.opacity = "1"; 46657 overlay.style.clipPath = clip; 46658 overlay.style.webkitClipPath = clip; 46659 const edgeMin = Math.min(cx - rx, cy - ry, w3 - (cx + rx), h3 - (cy + ry)); 46660 if (edgeMin < 10) { 46661 overlay.style.maskImage = "none"; 46662 overlay.style.webkitMaskImage = "none"; 46663 } else { 46664 const innerStop = 70; 46665 const outerStop = 86; 46666 const mask = `radial-gradient(ellipse ${rx}px ${ry}px at ${cx}px ${cy}px, rgba(0,0,0,1) 0%, rgba(0,0,0,1) ${innerStop}%, rgba(0,0,0,0) ${outerStop}%)`; 46667 overlay.style.maskImage = mask; 46668 overlay.style.webkitMaskImage = mask; 46669 overlay.style.maskRepeat = "no-repeat"; 46670 overlay.style.webkitMaskRepeat = "no-repeat"; 46671 overlay.style.maskSize = "100% 100%"; 46672 overlay.style.webkitMaskSize = "100% 100%"; 46673 } 46674 } 46675 overlay.style.opacity = "0"; 46676 overlay.style.clipPath = "ellipse(0px 0px at 0px 0px)"; 46677 overlay.style.webkitClipPath = "ellipse(0px 0px at 0px 0px)"; 46678 overlay.style.maskImage = "none"; 46679 overlay.style.webkitMaskImage = "none"; 46680 const canvasCtx = overlayIsCanvas ? overlay.getContext("2d") : null; 46681 async function runDetect(now3) { 46682 try { 46683 const detector = await getFaceDetector(); 46684 const result = detector.detectForVideo(video, now3); 46685 const rect = overlay.getBoundingClientRect(); 46686 const dw = Math.max(2, rect.width); 46687 const dh = Math.max(2, rect.height); 46688 const vw = video.videoWidth || 1280; 46689 const vh = video.videoHeight || 720; 46690 const layout = layoutParams(vw, vh, dw, dh, fit); 46691 const boxes = (result?.detections || []).map((d3) => d3.boundingBox).filter(Boolean).map((b3) => ({ 46692 x: (b3.originX - layout.sx) * layout.scale + layout.dx, 46693 y: (b3.originY - layout.sy) * layout.scale + layout.dy, 46694 w: b3.width * layout.scale, 46695 h: b3.height * layout.scale 46696 })).filter((b3) => b3.w > 10 && b3.h > 10); 46697 const prev = faceTarget || faceCurrent; 46698 const picked = pickStableBox(prev, boxes); 46699 if (picked) { 46700 lastSeenAt = now3; 46701 faceTarget = picked; 46702 } else if (now3 - lastSeenAt > holdMs) { 46703 faceTarget = null; 46704 } 46705 } catch (_error) { 46706 } 46707 } 46708 function drawCanvas(now3) { 46709 if (!overlayIsCanvas || !canvasCtx) return; 46710 if (!faceCurrent && !faceTarget) { 46711 canvasCtx.clearRect(0, 0, overlay.width, overlay.height); 46712 return; 46713 } 46714 const rect = overlay.getBoundingClientRect(); 46715 const dw = Math.max(2, rect.width); 46716 const dh = Math.max(2, rect.height); 46717 const area = dw * dh; 46718 const baseInterval = lowEnd ? 84 : 48; 46719 const drawIntervalMs = area > 7e4 ? baseInterval : area > 32e3 ? Math.max(baseInterval, 90) : Math.max(baseInterval, 150); 46720 if (now3 - lastDrawAt < drawIntervalMs) return; 46721 lastDrawAt = now3; 46722 const dpr = window.devicePixelRatio || 1; 46723 const nextW = Math.max(2, Math.round(dw * dpr)); 46724 const nextH = Math.max(2, Math.round(dh * dpr)); 46725 if (overlay.width !== nextW || overlay.height !== nextH) { 46726 overlay.width = nextW; 46727 overlay.height = nextH; 46728 } 46729 canvasCtx.setTransform(dpr, 0, 0, dpr, 0, 0); 46730 canvasCtx.clearRect(0, 0, dw, dh); 46731 canvasCtx.imageSmoothingEnabled = true; 46732 try { 46733 canvasCtx.imageSmoothingQuality = "high"; 46734 } catch (_error) { 46735 } 46736 const vw = video.videoWidth || 1280; 46737 const vh = video.videoHeight || 720; 46738 const layout = layoutParams(vw, vh, dw, dh, fit); 46739 const blurPx = faceBlurPx(now3); 46740 const vf = baseFilter(now3); 46741 const extra = `blur(${blurPx}px) saturate(0.98) contrast(1.04)`; 46742 const composedFilter = vf && vf !== "none" ? `${vf} ${extra}` : extra; 46743 canvasCtx.filter = "none"; 46744 if (composedFilter !== lastAppliedCanvasFilter) { 46745 lastAppliedCanvasFilter = composedFilter; 46746 overlay.style.filter = composedFilter; 46747 } 46748 if (fit === "contain") { 46749 canvasCtx.drawImage(video, 0, 0, vw, vh, layout.dx, layout.dy, vw * layout.scale, vh * layout.scale); 46750 } else { 46751 const sw = dw / layout.scale; 46752 const sh = dh / layout.scale; 46753 canvasCtx.drawImage(video, layout.sx, layout.sy, sw, sh, 0, 0, dw, dh); 46754 } 46755 } 46756 function tick(now3) { 46757 if (stopped) return; 46758 if (video.readyState >= 2 && video.videoWidth && video.videoHeight) { 46759 const w3 = overlay.clientWidth || 0; 46760 const h3 = overlay.clientHeight || 0; 46761 const area = w3 * h3; 46762 const dynamicIntervalMs = area > 7e4 ? detectIntervalMs : area > 32e3 ? Math.max(detectIntervalMs, 220) : Math.max(detectIntervalMs, 520); 46763 if (now3 - lastDetectAt > dynamicIntervalMs && !pendingDetect) { 46764 lastDetectAt = now3; 46765 pendingDetect = runDetect(now3).finally(() => { 46766 pendingDetect = null; 46767 }); 46768 } 46769 if (faceTarget) { 46770 faceCurrent = lerpBox(faceCurrent, faceTarget, lerpA); 46771 } else if (now3 - lastSeenAt > holdMs) { 46772 faceCurrent = null; 46773 } 46774 if (now3 - lastSeenAt > holdMs) { 46775 faceTarget = null; 46776 faceCurrent = null; 46777 setClipFromBox(null, now3); 46778 } else { 46779 setClipFromBox(faceCurrent, now3); 46780 drawCanvas(now3); 46781 } 46782 } 46783 rafId = window.requestAnimationFrame(tick); 46784 } 46785 rafId = window.requestAnimationFrame(tick); 46786 return () => { 46787 stopped = true; 46788 if (rafId) window.cancelAnimationFrame(rafId); 46789 rafId = null; 46790 faceTarget = null; 46791 faceCurrent = null; 46792 pendingDetect = null; 46793 if (overlay) { 46794 if (overlay instanceof HTMLCanvasElement) { 46795 const ctx = overlay.getContext("2d"); 46796 if (ctx) ctx.clearRect(0, 0, overlay.width, overlay.height); 46797 } 46798 overlay.style.opacity = "0"; 46799 overlay.style.clipPath = "ellipse(0px 0px at 0px 0px)"; 46800 overlay.style.webkitClipPath = "ellipse(0px 0px at 0px 0px)"; 46801 overlay.style.maskImage = "none"; 46802 overlay.style.webkitMaskImage = "none"; 46803 overlay.style.filter = ""; 46804 } 46805 }; 46806 }, [enabled, sourceVideoRef, overlayVideoRef, overlayRef, holdMs, lerpA, fit]); 46807} 46808
46809// app/javascript/yano/components/callUiState.js 46810function waitingStateLabelKey(status) { 46811 return status === "live" ? "call.waiting" : "call.connecting"; 46812} 46813
46814// app/javascript/yano/components/dmState.js 46815var DM_INITIAL_STATE = { conversations: {}, currentKey: null, toast: null }; 46816function dmReducer(state, action) { 46817 switch (action.type) { 46818 case "OPEN": { 46819 const { target } = action; 46820 const key = target.key; 46821 const existing = state.conversations[key]; 46822 return { 46823 ...state, 46824 currentKey: key, 46825 toast: state.toast?.key === key ? null : state.toast, 46826 conversations: { 46827 ...state.conversations, 46828 [key]: existing ? { ...existing, target, unread: 0, error: "", loading: false } : { target, messages: [], unread: 0, loading: false, loaded: false, sending: false, error: "" } 46829 } 46830 }; 46831 } 46832 case "MINIMIZE": 46833 return { ...state, currentKey: null }; 46834 case "CLOSE": { 46835 if (!state.currentKey) return state; 46836 const next = { ...state.conversations }; 46837 delete next[state.currentKey]; 46838 return { ...state, currentKey: null, conversations: next, toast: null }; 46839 } 46840 case "LOAD_START": { 46841 const cur = state.conversations[action.key]; 46842 if (!cur) return state; 46843 return { 46844 ...state, 46845 conversations: { 46846 ...state.conversations, 46847 [action.key]: { 46848 ...cur, 46849 loading: true, 46850 error: "" 46851 } 46852 } 46853 }; 46854 } 46855 case "LOAD_SUCCESS": { 46856 const cur = state.conversations[action.key]; 46857 if (!cur) return state; 46858 return { 46859 ...state, 46860 conversations: { 46861 ...state.conversations, 46862 [action.key]: { 46863 ...cur, 46864 loading: false, 46865 loaded: true, 46866 error: "", 46867 messages: mergeDmMessageList(cur.messages, action.messages || []) 46868 } 46869 } 46870 }; 46871 } 46872 case "LOAD_ERROR": { 46873 const cur = state.conversations[action.key]; 46874 if (!cur) return state; 46875 return { 46876 ...state, 46877 conversations: { 46878 ...state.conversations, 46879 [action.key]: { 46880 ...cur, 46881 loading: false, 46882 error: action.error || "" 46883 } 46884 } 46885 }; 46886 } 46887 case "SEND_START": { 46888 const key = action.key || state.currentKey; 46889 if (!key) return state; 46890 const cur = state.conversations[key]; 46891 if (!cur) return state; 46892 return { 46893 ...state, 46894 conversations: { 46895 ...state.conversations, 46896 [key]: { 46897 ...cur, 46898 sending: true, 46899 error: "" 46900 } 46901 } 46902 }; 46903 } 46904 case "SEND": { 46905 const key = action.key || state.currentKey; 46906 if (!key) return state; 46907 const cur = state.conversations[key]; 46908 if (!cur) return state; 46909 return { 46910 ...state, 46911 conversations: { 46912 ...state.conversations, 46913 [key]: { 46914 ...cur, 46915 messages: mergeDmMessageList(cur.messages, [action.message]), 46916 sending: false, 46917 error: "" 46918 } 46919 } 46920 }; 46921 } 46922 case "SEND_ERROR": { 46923 const key = action.key || state.currentKey; 46924 if (!key) return state; 46925 const cur = state.conversations[key]; 46926 if (!cur) return state; 46927 return { 46928 ...state, 46929 conversations: { 46930 ...state.conversations, 46931 [key]: { 46932 ...cur, 46933 sending: false, 46934 error: action.error || "" 46935 } 46936 } 46937 }; 46938 } 46939 case "RECEIVE": { 46940 const { key } = action; 46941 const recv = state.conversations[key]; 46942 const nextConversation = recv || { 46943 target: action.target, 46944 messages: [], 46945 unread: 0, 46946 loading: false, 46947 loaded: false, 46948 sending: false, 46949 error: "" 46950 }; 46951 const isVisible = state.currentKey === key; 46952 return { 46953 ...state, 46954 conversations: { 46955 ...state.conversations, 46956 [key]: { 46957 ...nextConversation, 46958 target: action.target || nextConversation.target, 46959 loaded: nextConversation.loaded, 46960 error: "", 46961 messages: mergeDmMessageList(nextConversation.messages, [action.message]), 46962 unread: isVisible ? 0 : (nextConversation.unread || 0) + 1 46963 } 46964 }, 46965 toast: isVisible ? state.toast : { id: Date.now(), key, target: action.target || nextConversation.target, text: action.message.text } 46966 }; 46967 } 46968 case "DISMISS_TOAST": 46969 if (action.key && state.toast?.key !== action.key) return state; 46970 return { ...state, toast: null }; 46971 default: 46972 return state; 46973 } 46974} 46975function mergeDmMessageList(existing = [], incoming = []) { 46976 const merged = [...existing]; 46977 const seen = new Set(existing.map((message) => String(message.id))); 46978 incoming.forEach((message) => {
46979 const key = String(message.id); 46980 if (seen.has(key)) return; 46981 seen.add(key); 46982 merged.push(message); 46983 }); 46984 merged.sort((left, right) => { 46985 if (left.createdAt && right.createdAt) { 46986 return new Date(left.createdAt).getTime() - new Date(right.createdAt).getTime(); 46987 } 46988 return String(left.id).localeCompare(String(right.id), void 0, { numeric: true }); 46989 }); 46990 return merged; 46991} 46992
46993// app/javascript/yano/components/CallStage.jsx 46994function initialsFor(label) { 46995 const trimmed = label.trim(); 46996 if (/^\p{Emoji}/u.test(trimmed)) return trimmed; 46997 return trimmed.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => Array.from(part)[0]?.toUpperCase() || "").join("") || "Y"; 46998} 46999function avatarGenderLabel(t3, value) { 47000 if (value === "woman") return t3("profile.gender.woman"); 47001 if (value === "man") return t3("profile.gender.man"); 47002 if (value === "unspecified") return t3("profile.gender.unspecified"); 47003 return ""; 47004} 47005function ProfileGenderIcon({ value }) { 47006 if (value === "woman") { 47007 return /* @__PURE__ */ import_react4.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-4.5 w-4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react4.default.createElement("circle", { cx: "10", cy: "7", r: "3.2" }), /* @__PURE__ */ import_react4.default.createElement("path", { d: "M10 10.4v6.1M7.2 13.7H12.8" })); 47008 } 47009 if (value === "man") { 47010 return /* @__PURE__ */ import_react4.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-4.5 w-4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react4.default.createElement("circle", { cx: "7.2", cy: "12.8", r: "3.2" }), /* @__PURE__ */ import_react4.default.createElement("path", { d: "M9.8 10.2L15.2 4.8M11.4 4.8H15.2V8.6" })); 47011 } 47012 return /* @__PURE__ */ import_react4.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-4.5 w-4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react4.default.createElement("circle", { cx: "10", cy: "10", r: "6" }), /* @__PURE__ */ import_react4.default.createElement("path", { d: "M7.6 12.4c.7.7 1.5 1 2.4 1s1.7-.3 2.4-1M8 8.1h.01M12 8.1h.01" })); 47013} 47014function ProfileGenderPill({ value, label }) { 47015 return /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-sheet-profile__pill yano-sheet-profile__pill--${value}` }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "yano-sheet-profile__pill-icon", "aria-hidden": "true" }, /* @__PURE__ */ import_react4.default.createElement(ProfileGenderIcon, { value })), /* @__PURE__ */ import_react4.default.createElement("span", null, label)); 47016} 47017function AvatarBadge({ name, avatarUrl, className = "", imgClassName = "", children = null }) { 47018 const initials = initialsFor(name || "?"); 47019 return /* @__PURE__ */ import_react4.default.createElement("span", { className: `relative ${className}`.trim(), "aria-hidden": "true" }
47019, avatarUrl ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "absolute inset-0 overflow-hidden rounded-[inherit]" }, /* @__PURE__ */ import_react4.default.createElement("img", { src: avatarUrl, alt: "", className: imgClassName })) : initials, children); 47020} 47021function videoTrackFor(participant) { 47022 return participant?.tracks?.video?.persistentTrack || participant?.tracks?.video?.track || participant?.videoTrack || null; 47023} 47024function audioTrackFor(participant) { 47025 return participant?.tracks?.audio?.persistentTrack || participant?.tracks?.audio?.track || participant?.audioTrack || null; 47026} 47027function displayNameFor(participant, fallbackLabel = "") { 47028 return participant?.user_name || participant?.userData?.display_name || fallbackLabel; 47029} 47030function formatDuration(seconds) { 47031 const total = Math.max(0, Math.floor(seconds)); 47032 const minutes = String(Math.floor(total / 60)).padStart(2, "0"); 47033 const remainder = String(total % 60).padStart(2, "0"); 47034 return `${minutes}:${remainder}`; 47035} 47036function stateForTrack(participant, kind) { 47037 return participant?.tracks?.[kind]?.state || "missing"; 47038} 47039function hasPlayableTrack(participant, kind) { 47040 return stateForTrack(participant, kind) === "playable"; 47041} 47042function ParticipantVideoFx({ track: track2, mirrored = false, muted = false, className = "", effects, fit = "cover" }) { 47043 const baseRef = (0, import_react4.useRef)(null); 47044 const blurCanvasRef = (0, import_react4.useRef)(null); 47045 const lastTrackRef = (0, import_react4.useRef)(track2); 47046 const normalized = (0, import_react4.useMemo)(() => normalizeVideoEffects(effects || {}), [ 47047 effects?.grade, 47048 effects?.soft, 47049 effects?.vignette, 47050 effects?.faceBlur, 47051 effects?.faceBlurPx 47052 ]); 47053 const filter = (0, import_react4.useMemo)(() => filterStringForVideoEffects(normalized), [normalized]); 47054 if (track2) lastTrackRef.current = track2; 47055 const effectiveTrack = track2 || lastTrackRef.current; 47056 async function safePlay(element) { 47057 if (!element) return; 47058 element.muted = true; 47059 element.volume = 0; 47060 element.playsInline = true; 47061 for (let attempt = 0; attempt < 3; attempt += 1) { 47062 try { 47063 await element.play(); 47064 return; 47065 } catch (_error) { 47066 await new Promise((resolve) => window.setTimeout(resolve, 180)); 47067 } 47068 } 47069 } 47070 useFaceBlurOverlay({ 47071 enabled: Boolean(normalized.faceBlur && effectiveTrack), 47072 sourceVideoRef: baseRef, 47073 overlayRef: blurCanvasRef, 47074 holdMs: 1200, 47075 lerpA: 0.22, 47076 fit 47077 }); 47078 (0, import_react4.useEffect)(() => { 47079 const base = baseRef.current; 47080 if (!base) return void 0; 47081 if (!track2) { 47082 base.srcObject = null; 47083 return void 0; 47084 } 47085 const stream = new MediaStream([track2]); 47086 base.srcObject = stream; 47087 safePlay(base); 47088 const handleMetadata = () => safePlay(base); 47089 base.addEventListener("loadedmetadata", handleMetadata); 47090 base.addEventListener("canplay", handleMetadata); 47091 return () => { 47092 if (baseRef.current) baseRef.current.srcObject = null; 47093 base.removeEventListener("loadedmetadata", handleMetadata); 47094 base.removeEventListener("canplay", handleMetadata); 47095 }; 47096 }, [track2]); 47097 const videoClassName = `${className} ${mirrored ? "scale-x-[-1]" : ""}`.trim(); 47098 return /* @__PURE__ */ import_react4.default.createElement( 47099 "div", 47100 { 47101 className: "relative h-full w-full overflow-hidden", 47102 style: { 47103 "--yano-face-blur": `${normalized.faceBlurPx}px` 47104 } 47105 }, 47106 /* @__PURE__ */ import_react4.default.createElement( 47107 "video", 47108 { 47109 ref: baseRef, 47110 autoPlay: true, 47111 playsInline: true, 47112 muted: true, 47113 className: `pointer-events-none ${videoClassName}`, 47114 style: { filter } 47115 } 47116 ), 47117 /* @__PURE__ */ import_react4.default.createElement( 47118 "canvas", 47119 { 47120 ref: blurCanvasRef, 47121 className: `yano-camera-faceblur yano-camera-canvas pointer-events-none absolute inset-0 h-full w-full ${mirrored ? "scale-x-[-1]" : ""}`, 47122 style: { display: normalized.faceBlur ? "block" : "none" } 47123 } 47124 ), 47125 /* @__PURE__ */ import_react4.default.createElement( 47126 "div", 47127 { 47128 "aria-hidden": true, 47129 className: `pointer-events-none absolute inset-0 yano-preview-vignette ${normalized.vignette ? "yano-preview-vignette--on" : ""}` 47130 } 47131 ) 47132 ); 47133} 47134function ParticipantAudio({ track: track2 }) { 47135 const mediaRef = (0, import_react4.useRef)(null); 47136 (0, import_react4.useEffect)(() => { 47137 if (!mediaRef.current) return void 0; 47138 if (!track2) { 47139 mediaRef.current.srcObject = null; 47140 return void 0; 47141 } 47142 const stream = new MediaStream([track2]); 47143 mediaRef.current.srcObject = stream; 47144 mediaRef.current.play().catch(() => { 47145 }); 47146 return () => { 47147 if (mediaRef.current) { 47148 mediaRef.current.srcObject = null; 47149 } 47150 }; 47151 }, [track2]); 47152 return /* @__PURE__ */ import_react4.default.createElement("audio", { ref: mediaRef, autoPlay: true, playsInl
47152ine: true }); 47153} 47154function TileStatus({ muted, videoOff }) { 47155 const { t: t3 } = useI18n(); 47156 return /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center gap-2 text-[11px] font-semibold" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: `inline-flex items-center gap-1 rounded-full px-2 py-1 ${muted ? "bg-violet-500/10 text-violet-300/60" : "bg-[rgb(126_235_122_/_0.15)] text-[rgb(126_235_122_/_0.9)]"}` }, /* @__PURE__ */ import_react4.default.createElement(MicIcon, null), muted ? t3("call.muted_label") : t3("call.mic_on")), videoOff ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-violet-500/10 px-2 py-1 text-violet-300/60" }, /* @__PURE__ */ import_react4.default.createElement(VideoIcon, null), t3("call.camera_off")) : null); 47157} 47158function ParticipantTile({ participant, isLocal = false, avatarUrl = "", fallbackLabel = "", effectsOverride = null, hideOverlay = false, latestMessage = null, onProfileTap = null, dmInfo = null }) { 47159 const { t: t3 } = useI18n(); 47160 const videoTrack = videoTrackFor(participant); 47161 const videoOn = hasPlayableTrack(participant, "video") && Boolean(videoTrack); 47162 const micOn = hasPlayableTrack(participant, "audio"); 47163 const displayName = displayNameFor(participant, fallbackLabel); 47164 const initials = initialsFor(displayName); 47165 const effects = effectsOverride || participant?.userData?.yano_fx; 47166 const handleProfileTap = (event) => { 47167 event.stopPropagation(); 47168 onProfileTap?.(participant, isLocal); 47169 }; 47170 return /* @__PURE__ */ import_react4.default.createElement("article", { className: "yano-call-tile" }, videoOn ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(ParticipantVideoFx, { track: videoTrack, mirrored: isLocal, muted: isLocal, effects, fit: "contain", className: "h-full w-full object-contain" }
47170), latestMessage ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute inset-x-3 top-3 z-[5]" }, /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessage })) : null) : /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex h-full items-center justify-center bg-[radial-gradient(circle_at_50%_30%,rgba(139,92,246,0.15),transparent_60%),#130a22]" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ import_react4.default.createElement( 47171 "button", 47172 { 47173 type: "button", 47174 onClick: handleProfileTap, 47175 className: "relative mx-auto transition active:scale-95", 47176 "aria-label": dmInfo?.active ? t3("call.dm_active_indicator") : t3("call.profile_open_actions") 47177 }, 47178 /* @__PURE__ */ import_react4.default.createElement( 47179 AvatarBadge, 47180 { 47181 name: displayName, 47182 avatarUrl, 47183 className: "grid h-24 w-24 place-items-center rounded-full border-2 border-violet-400/15 bg-violet-500/12 text-3xl font-semibold text-violet-200 transition hover:bg-violet-500/18 hover:border-violet-400/25", 47184 imgClassName: "h-full w-full object-cover" 47185 }, 47186 dmInfo?.active ? /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-dm-dot ${dmInfo.unread > 0 ? "" : "yano-dm-dot--read"}`, style: { top: "-2px", right: "-2px" } }, dmInfo.unread > 0 ? dmInfo.unread > 9 ? "9+" : dmInfo.unread : null) : null 47187 )
47188 ), latestMessage ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "mx-auto mt-5 max-w-[80%]" }, /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessage, variant: "audio" })) : /* @__PURE__ */ import_react4.default.createElement("p", { className: "mt-4 text-sm text-violet-400/60" }, micOn ? t3("call.listening") : t3("call.audio_muted")))), /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-ui-layer absolute inset-x-3 bottom-3 flex items-end justify-between gap-3 ${hideOverlay ? "yano-ui-layer--hidden" : ""}` }, /* @__PURE__ */ import_react4.default.createElement( 47189 "button", 47190 { 47191 type: "button", 47192 onClick: handleProfileTap, 47193 className: `relative flex items-center gap-2 rounded-2xl px-3 py-2 text-left text-sm text-violet-100 backdrop-blur-md transition active:scale-[0.97] ${dmInfo?.active ? "bg-violet-600/35 hover:bg-violet-600/45" : "bg-[#1a0e2e]/80 hover:bg-[#1a0e2e]/95"}`, 47194 "aria-label": dmInfo?.active ? t3("call.dm_active_indicator") : t3("call.profile_open_actions") 47195 }, 47196 dmInfo?.active ? /* @__PURE__ */ import_react4.default.createElement(ChatBubbleLeftRightIcon_default, { className: "h-3.5 w-3.5 shrink-0 text-violet-200" }) : null, 47197 /* @__PURE__ */ import_react4.default.createElement("span", { className: "font-semibold" }, displayName), 47198 isLocal ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "text-violet-400/60" }, t3("call.you_label")) : null, 47199 dmInfo?.active && dmInfo.unread > 0 ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "ml-0.5 inline-flex h-[18px] min-w-[18px] items-center justify-center rounded-full bg-pink-500 px-1.5 text-[9px] font-extrabold leading-none text-white shadow-[0_3px_8px_-2px_rgba(236,72,153,0.6)]" }, dmInfo.unread > 9 ? "9+" : dmInfo.unread) : null 47200 ), /* @__PURE__ */ import_react4.default.createElement(TileStatus, { muted: !micOn, videoOff: !videoOn }))); 47201} 47202function TileMessage({ message, variant = "overlay" }) { 47203 const [age, setAge] = (0, import_react4.useState)(() => message._receivedAt ? Date.now() - message._receivedAt : 0); 47204 (0, import_react4.useEffect)(() => { 47205 if (!message._receivedAt) return; 47206 const interval = window.setInterval(() => setAge(Date.now() - message._receivedAt), 500); 47207 return () => window.clearInterval(interval); 47208 }, [message._receivedAt, message.id]); 47209 const fresh = age < 5e3; 47210 const fading = age > 2e4; 47211 const opacity = fading ? Math.max(0, 1 - (age - 2e4) / 1e4) : 1; 47212 const glowOpacity = fresh ? Math.max(0, 1 - age / 5e3) : 0; 47213 if (variant === "audio") { 47214 return /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative mx-auto mt-1.5 max-w-[12rem]", style: { opacity } }, fresh ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute -inset-3 rounded-2xl transition-opacity duration-1000", style: { opacity: glowOpacity, background: "radial-gradient(ellipse at center, rgba(139, 92, 246, 0.35), transparent 70%)" } }) : null, /* @__PURE__ */ import_react4.default.createElement("p", { className: "relative rounded-xl bg-violet-500/12 px-3.5 py-2 text-sm font-semibold text-violet-100" }, message.body)); 47215 } 47216 return /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative inline-block max-w-[85%]", style: { opacity } }, fresh ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute -inset-4 rounded-3xl transition-opacity duration-1000", style: { opacity: glowOpacity, background: "radial-gradient(ellipse at center, rgba(139, 92, 246, 0.4), transparent 70%)" } }) : null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative rounded-2xl rounded-tl-sm bg-black/50 px-3.5 py-2.5 text-sm font-semibold text-white/90 backdrop-blur-sm" }, message.body)); 47217} 47218async function destroyDailyCallObject(callObject) { 47219 if (!callObject) return; 47220 try { 47221 await callObject.leave().catch(() => { 47222 }); 47223 } finally { 47224 callObject.destroy(); 47225 } 47226} 47227function AudioIndicator({ name, avatarUrl = "", isLocal = false, speaking = false, latestMessage = null, onTap = null, dmInfo = null }) { 47228 const { t: t3 } = useI18n(); 47229 const Wrapper = onTap ? "button" : "div";
47230 const wrapperProps = onTap ? { 47231 type: "button", 47232 onClick: onTap, 47233 "aria-label": dmInfo?.active ? t3("call.dm_active_indicator") : t3("call.profile_open_actions") 47234 } : {}; 47235 return /* @__PURE__ */ import_react4.default.createElement( 47236 Wrapper, 47237 { 47238 ...wrapperProps, 47239 className: `flex flex-col items-center gap-3 text-center ${onTap ? "transition active:scale-[0.97]" : ""}` 47240 }, 47241 /* @__PURE__ */ import_react4.default.createElement( 47242 AvatarBadge, 47243 { 47244 name, 47245 avatarUrl, 47246 className: `grid h-20 w-20 place-items-center rounded-full bg-violet-500/12 border-2 text-2xl font-semibold text-violet-200 transition-colors ${speaking ? "border-violet-400/40" : "border-violet-400/15"}`, 47247 imgClassName: "h-full w-full object-cover" 47248 }, 47249 speaking ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "absolute inset-0 rounded-full border-2 border-violet-400/30 animate-[waiting-pulse_1.8s_cubic-bezier(0.16,1,0.3,1)_infinite]" }) : null,
47250 !speaking ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "absolute -bottom-0.5 -right-0.5 grid h-5 w-5 place-items-center rounded-full bg-red-500/90 shadow-[0_2px_6px_rgba(239,68,68,0.35)]" }, /* @__PURE__ */ import_react4.default.createElement("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "white", strokeWidth: "3", strokeLinecap: "round" }, /* @__PURE__ */ import_react4.default.createElement("rect", { x: "9", y: "2", width: "6", height: "12", rx: "3" }), /* @__PURE__ */ import_react4.default.createElement("path", { d: "M5 10a7 7 0 0 0 14 0" }), /* @__PURE__ */ import_react4.default.createElement("line", { x1: "4", y1: "4", x2: "20", y2: "20" }))) : null, 47251 dmInfo?.active ? /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-dm-dot ${dmInfo.unread > 0 ? "" : "yano-dm-dot--read"}`, style: { top: "-4px", right: "-4px" } }, dmInfo.unread > 0 ? dmInfo.unread > 9 ? "9+" : dmInfo.unread : null) : null 47252 ), 47253 /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center justify-center gap-1.5" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-sm font-bold text-violet-200" }, name), isLocal ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "rounded-full border border-violet-400/14 bg-violet-500/8 px-1.5 py-0.5 text-[9px] font-bold uppercase tracking-[0.14em] text-violet-300/55" }
47253, t3("call.you")) : null), latestMessage ? /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessage, variant: "audio" }) : /* @__PURE__ */ import_react4.default.createElement("p", { className: "mt-0.5 text-xs text-violet-400/50" }, speaking ? t3("call.speaking") : t3("call.listening"))) 47254 ); 47255} 47256function ControlButton({ active = true, danger = false, label, onClick, children, wide = false, className: extraClassName = "", pressed = void 0 }) { 47257 const className = [ 47258 "yano-call-control", 47259 active ? "" : "yano-call-control--off", 47260 danger ? "yano-call-control--danger" : "", 47261 wide ? "yano-call-control--wide" : "", 47262 extraClassName 47263 ].filter(Boolean).join(" "); 47264 return /* @__PURE__ */ import_react4.default.createElement("button", { type: "button", className, onClick, "aria-label": label, title: label, "aria-pressed": pressed }, children, wide ? /* @__PURE__ */ import_react4.default.createElement("span", null, label) : null); 47265} 47266function ParticipantActionSheet({ target, onClose, onDm }) { 47267 const { t: t3 } = useI18n(); 47268 const [mounted, setMounted] = (0, import_react4.useState)(false); 47269 const [open, setOpen] = (0, import_react4.useState)(false); 47270 const sheetRef = (0, import_react4.useRef)(null); 47271 const dragStateRef = (0, import_react4.useRef)({ startY: null, delta: 0 }); 47272 (0, import_react4.useEffect)(() => { 47273 if (target) { 47274 setMounted(true); 47275 const id = window.requestAnimationFrame(() => setOpen(true)); 47276 return () => window.cancelAnimationFrame(id); 47277 } 47278 setOpen(false); 47279 const timeout = window.setTimeout(() => setMounted(false), 480); 47280 return () => window.clearTimeout(timeout); 47281 }, [target]); 47282 (0, import_react4.useEffect)(() => { 47283 if (!open) return void 0; 47284 const onKey = (event) => { 47285 if (event.key === "Escape") { 47286 event.preventDefault(); 47287 onClose?.(); 47288 } 47289 }; 47290 window.addEventListener("keydown", onKey); 47291 return () => window.removeEventListener("keydown", onKey); 47292 }, [open, onClose]); 47293 (0, import_react4.useEffect)(() => { 47294 if (!open) return void 0; 47295 const previous = document.body.style.overflow; 47296 document.body.style.overflow = "hidden"; 47297 return () => { 47298 document.body.style.overflow = previous; 47299 }; 47300 }, [open]); 47301 if (!mounted || !target) return null; 47302 const initials = initialsFor(target.name || "?"); 47303 const closeWithAction = () => onClose?.(); 47304 const handleDm = () => { 47305 onDm?.(target); 47306 onClose?.(); 47307 }; 47308 const genderLabel = avatarGenderLabel(t3, target.gender); 47309 const onPointerDown = (event) => { 47310 if (event.target.closest(".yano-sheet-action")) return; 47311 dragStateRef.current.startY = event.clientY; 47312 dragStateRef.current.delta = 0; 47313 if (sheetRef.current) sheetRef.current.style.transition = "none"; 47314 }; 47315 const onPointerMove = (event) => { 47316 const { startY } = dragStateRef.current; 47317 if (startY === null) return; 47318 const delta = Math.max(0, event.clientY - startY); 47319 dragStateRef.current.delta = delta; 47320 if (sheetRef.current) sheetRef.current.style.transform = `translateY(${delta}px)`; 47321 }; 47322 const onPointerEnd = () => { 47323 const { startY, delta } = dragStateRef.current; 47324 if (startY === null) return; 47325 if (sheetRef.current) { 47326 sheetRef.current.style.transition = ""; 47327 sheetRef.current.style.transform = ""; 47328 } 47329 dragStateRef.current.startY = null; 47330 dragStateRef.current.delta = 0; 47331 if (delta > 80) onClose?.(); 47332 }; 47333 return (0, import_react_dom2.createPortal)( 47334 /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement( 47335 "div", 47336 { 47337 className: `yano-sheet-scrim ${open ? "yano-sheet-scrim--open" : ""}`, 47338 onClick: onClose, 47339 "aria-hidden": "true" 47340 } 47341 ), /* @__PURE__ */ import_react4.default.createElement( 47342 "div", 47343 { 47344 ref: sheetRef, 47345 className: `yano-sheet ${open ? "yano-sheet--open" : ""}`, 47346 role: "dialog", 47347 "aria-modal": "true", 47348 "aria-label": t3("call.profile_actions"), 47349 onPointerDown, 47350 onPointerMove, 47351 onPointerUp: onPointerEnd, 47352 onPointerCancel: onPointerEnd 47353 },
47354 /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-card" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-grabber" }), /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-stagger flex flex-col" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center gap-4 px-6 pb-4 pt-1" }, /* @__PURE__ */ import_react4.default.createElement( 47355 AvatarBadge, 47356 { 47357 name: target.name, 47358 avatarUrl: target.avatarUrl, 47359 className: "grid h-16 w-16 shrink-0 place-items-center rounded-2xl bg-violet-500/15 text-xl font-bold text-violet-200 ring-1 ring-inset ring-violet-400/20 shadow-[0_12px_28px_-12px_rgba(167,139,250,0.55)]", 47360 imgClassName: "h-full w-full object-cover" 47361 } 47362 ), /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "font-display text-2xl font-bold leading-tight tracking-tight text-violet-50 truncate" }, target.isLocal ? t3("call.profile_role_you") : target.name), /* @__PURE__ */ import_react4.default.createElement("div", { className: "mt-1.5 flex flex-wrap items-center gap-1.5" }, target.isHostMember ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-violet-500/14 px-2 py-0.5 text-[10.5px] font-bold uppercase tracking-wider text-violet-200" }, t3("call.profile_role_host")) : null, target.mutedByHost ? /* @__P
47362URE__ */ import_react4.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-violet-500/10 px-2 py-0.5 text-[10.5px] font-semibold text-violet-300/70" }, /* @__PURE__ */ import_react4.default.createElement(SpeakerXMarkIcon_default, { className: "h-3 w-3" }), t3("call.muted_by_host")) : null))), genderLabel || target.bio ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-6 pb-4" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-profile" }, genderLabel ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-profile__row" }, /* @__PURE__ */ import_react4.default.createElement(ProfileGenderPill, { value: target.gender, label: genderLabel })) : null, target.bio ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-sheet-profile__row yano-sheet-profile__row--stacked" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "yano-sheet-profile__bio" }, target.bio)) : null)) : null, !target.isLocal ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex flex-col px-3.5 pb-1" }, /* @__PURE__ */ import_react4.default.createElement( 47363 "button", 47364 { 47365 type: "button", 47366 className: "yano-sheet-action", 47367 onClick: handleDm 47368 },
47369 /* @__PURE__ */ import_react4.default.createElement("span", { className: "yano-sheet-action__icon" }, /* @__PURE__ */ import_react4.default.createElement(ChatBubbleLeftRightIcon_default, { className: "h-5 w-5" })), 47370 /* @__PURE__ */ import_react4.default.createElement("span", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "block font-display text-[15px] font-bold leading-tight text-violet-50" }, t3("call.profile_action_dm")), /* @__PURE__ */ import_react4.default.createElement("span", { className: "mt-0.5 block text-[11.5px] font-medium text-violet-300/55" }, t3("call.profile_action_dm_meta"))), 47371 /* @__PURE__ */ import_react4.default.createElement(ChevronTrail, null) 47372 )) : null)) 47373 )), 47374 document.body 47375 ); 47376} 47377function ChevronTrail() { 47378 return /* @__PURE__ */ import_react4.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", className: "shrink-0 text-violet-300/35" }, /* @__PURE__ */ import_react4.default.createElement("polyline", { points: "9 18 15 12 9 6" })); 47379} 47380function OneToOneDmPanel({ target, messages = [], loading = false, sending = false, error: error2 = "", onMinimize, onSend, onAvatarTap, formatTime }) { 47381 const { t: t3 } = useI18n(); 47382 const [mounted, setMounted] = (0, import_react4.useState)(false); 47383 const [open, setOpen] = (0, import_react4.useState)(false); 47384 const [draft, setDraft] = (0, import_react4.useState)(""); 47385 const [, setTimeTick] = (0, import_react4.useState)(0); 47386 const inputRef = (0, import_react4.useRef)(null); 47387 const scrollRef = (0, import_react4.useRef)(null); 47388 (0, import_react4.useEffect)(() => { 47389 if (target) { 47390 setMounted(true); 47391 setDraft(""); 47392 const id = window.requestAnimationFrame(() => setOpen(true)); 47393 return () => window.cancelAnimationFrame(id); 47394 } 47395 setOpen(false); 47396 const timeout = window.setTimeout(() => setMounted(false), 500); 47397 return () => window.clearTimeout(timeout); 47398 }, [target?.key]); 47399 (0, import_react4.useEffect)(() => { 47400 if (!open) return void 0; 47401 const id = window.setTimeout(() => inputRef.current?.focus({ preventScroll: true }), 380); 47402 return () => window.clearTimeout(id); 47403 }, [open]); 47404 (0, import_react4.useEffect)(() => { 47405 if (scrollRef.current) { 47406 scrollRef.current.scrollTop = scrollRef.current.scrollHeight; 47407 } 47408 }, [messages.length]); 47409 (0, import_react4.useEffect)(() => { 47410 if (!open || !messages.length) return void 0; 47411 const id = window.setInterval(() => setTimeTick((value) => value + 1), 15e3); 47412 return () => window.clearInterval(id); 47413 }, [open, messages.length]); 47414 (0, import_react4.useEffect)(() => { 47415 if (!open) return void 0; 47416 const onKey = (event) => { 47417 if (event.key === "Escape") { 47418 event.preventDefault(); 47419 onMinimize?.(); 47420 } 47421 }; 47422 window.addEventListener("keydown", onKey); 47423 return () => window.removeEventListener("keydown", onKey); 47424 }, [open, onMinimize]); 47425 if (!mounted || !target) return null; 47426 const initials = initialsFor(target.name || "?"); 47427 const firstName = (target.name || "").split(/\s+/)[0] || target.name || ""; 47428 const handleSend = async (event) => { 47429 event?.preventDefault(); 47430 const text = draft.trim(); 47431 if (!text) return; 47432 const sent = await onSend?.(text); 47433 if (sent === false) return; 47434 setDraft(""); 47435 }; 47436 return (0, import_react_dom2.createPortal)( 47437 /* @__PURE__ */ import_react4.default.createElement( 47438 "aside", 47439 { 47440 className: `yano-dm-panel ${open ? "yano-dm-panel--open" : ""}`, 47441 role: "dialog", 47442 "aria-modal": "true", 47443 "aria-label": t3("call.dm_title") 47444 },
47445 /* @__PURE__ */ import_react4.default.createElement("header", { className: "yano-dm-header" }, /* @__PURE__ */ import_react4.default.createElement( 47446 "button", 47447 { 47448 type: "button", 47449 className: "yano-dm-avatar yano-dm-avatar--tappable", 47450 onClick: onAvatarTap, 47451 "aria-label": t3("call.profile_open_actions"), 47452 title: t3("call.profile_actions") 47453 }, 47454 target.avatarUrl ? /* @__PURE__ */ import_react4.default.createElement("img", { src: target.avatarUrl, alt: "", className: "h-full w-full object-cover" }) : initials, 47455 /* @__PURE__ */ import_react4.default.createElement("span", { className: "yano-dm-avatar__online" }) 47456 ), /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "font-display text-[15px] font-bold leading-tight tracking-tight text-violet-50 truncate" }, target.isLocal ? t3("call.profile_role_you") : firstName), /* @__PURE__ */ import_react4.default.createElement("div", { className: "mt-0.5 flex items-center gap-1.5 text-[11px] font-semibold text-violet-300/60" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "inline-block h-1.5 w-1.5 rounded-full bg-emerald-400 shadow-[0_0_8px_rgba(74,222,128,0.55)]" }), /* @__PURE__ */ import_react4.default.createElement("span", null, t3("call.dm_status_online")), /* @__PURE__ */ import_react4.default.createElement("span", { className: "opacity-40" }, "\xB7"), /* @__PURE__ */ import_react4.default.createElement("span", { className: "truncate" }, t3("call.dm_in_room_with")))), /* @__PURE__ */ import_react4.default.createElement( 47457 "button", 47458 { 47459 type: "button", 47460 className: "yano-dm-iconbtn", 47461 onClick: onMinimize, 47462 "aria-label": t3("call.dm_minimize"), 47463 title: t3("call.dm_minimize") 47464 },
47465 /* @__PURE__ */ import_react4.default.createElement(XMarkIcon_default, { className: "h-5 w-5" }) 47466 )), 47467 /* @__PURE__ */ import_react4.default.createElement("div", { ref: scrollRef, className: "yano-dm-body" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-dm-system" }, /* @__PURE__ */ import_react4.default.createElement(LockClosedIcon_default, { className: "h-3 w-3" }), /* @__PURE__ */ import_react4.default.createElement("span", null, t3("call.dm_private_meta"))), loading ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-2 py-4 text-center text-sm font-medium text-violet-300/60" }, t3("chat.loading")) : null, !loading && !messages.length ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-2 py-4 text-center text-sm font-medium text-violet-300/60" }, t3("chat.empty")) : null, messages.map((m3, idx) => { 47468 const prev = messages[idx - 1]; 47469 const showTime = !prev || prev.from !== m3.from; 47470 return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, { key: m3.id }, /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-dm-bubble yano-dm-bubble--${m3.from}` }, m3.text), showTime ? /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-dm-bubble-time yano-dm-bubble-time--${m3.from}` }, formatTime?.(m3.createdAt) || t3("call.dm_just_now")) : null); 47471 }), error2 ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "px-2 py-4 text-center text-sm font-medium text-violet-300/70" }, error2) : null),
47472 /* @__PURE__ */ import_react4.default.createElement("form", { className: "yano-dm-input-wrap", onSubmit: handleSend }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-dm-input" }, /* @__PURE__ */ import_react4.default.createElement( 47473 "input", 47474 { 47475 ref: inputRef, 47476 type: "text", 47477 value: draft, 47478 onChange: (e3) => setDraft(e3.target.value), 47479 placeholder: t3("call.dm_input_placeholder"), 47480 "aria-label": t3("call.dm_input_placeholder") 47481 } 47482 ), /* @__PURE__ */ import_react4.default.createElement( 47483 "button", 47484 { 47485 type: "submit", 47486 className: "yano-dm-send", 47487 disabled: sending || !draft.trim(), 47488 "aria-label": t3("call.dm_send") 47489 }, 47490 /* @__PURE__ */ import_react4.default.createElement(PaperAirplaneIcon_default, { className: "h-4 w-4" }) 47491 ))) 47492 ), 47493 document.body 47494 ); 47495} 47496function DmPreviewToast({ toast, onTap, onDismiss }) { 47497 const { t: t3 } = useI18n(); 47498 const [mounted, setMounted] = (0, import_react4.useState)(false); 47499 const [open, setOpen] = (0, import_react4.useState)(false); 47500 const TOAST_LIFE_MS = 4500; 47501 (0, import_react4.useEffect)(() => { 47502 if (toast) { 47503 setMounted(true); 47504 const id = window.requestAnimationFrame(() => setOpen(true)); 47505 const lifetime = window.setTimeout(() => onDismiss?.(), TOAST_LIFE_MS); 47506 return () => { 47507 window.cancelAnimationFrame(id); 47508 window.clearTimeout(lifetime); 47509 }; 47510 } 47511 setOpen(false); 47512 const t1 = window.setTimeout(() => setMounted(false), 480); 47513 return () => window.clearTimeout(t1); 47514 }, [toast?.key, toast?.id]); 47515 if (!mounted || !toast) return null; 47516 const initials = initialsFor(toast.target?.name || "?"); 47517 const firstName = (toast.target?.name || "").split(/\s+/)[0] || toast.target?.name || ""; 47518 return (0, import_react_dom2.createPortal)( 47519 /* @__PURE__ */ import_react4.default.createElement( 47520 "button", 47521 { 47522 type: "button", 47523 className: `yano-dm-toast ${open ? "yano-dm-toast--open" : ""}`, 47524 onClick: onTap, 47525 "aria-label": t3("call.dm_toast_tap_to_open") 47526 },
47527 /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-dm-toast__avatar", "aria-hidden": "true" }, initials), 47528 /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-w-0 flex-1 text-left" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "yano-dm-toast__name truncate" }, firstName), /* @__PURE__ */ import_react4.default.createElement("p", { className: "yano-dm-toast__text" }, toast.text)) 47529 ), 47530 document.body 47531 ); 47532} 47533function CallStage({ 47534 join, 47535 title, 47536 roomCode, 47537 shareUrl, 47538 copied, 47539 onCopyLink, 47540 onLeaveRoom, 47541 chatOpen = false, 47542 onToggleChat, 47543 unreadCount = 0, 47544 onSendMessage, 47545 chatOverlayMessages = [], 47546 apiToken = "", 47547 currentUserId = null, 47548 displayName = "", 47549 initialMedia = { audioEnabled: true, videoEnabled: true }, 47550 localVideoEffects = null, 47551 isHost = false, 47552 roomLocked = false, 47553 roomMembers = [], 47554 onLockRoom, 47555 onUnlockRoom, 47556 onKickMember, 47557 onMuteMember, 47558 pendingMembers = [], 47559 onApproveMember, 47560 onDenyMember 47561}) { 47562 const { t: t3 } = useI18n(); 47563 const callObjectRef = (0, import_react4.useRef)(null); 47564 const pendingDestroyRef = (0, import_react4.useRef)(Promise.resolve()); 47565 const initialMediaRef = (0, import_react4.useRef)(initialMedia); 47566 const recordingStartedRef = (0, import_react4.useRef)(false); 47567 const [status, setStatus] = (0, import_react4.useState)("connecting"); 47568 const [error2, setError] = (0, import_react4.useState)(""); 47569 const [participants, setParticipants] = (0, import_react4.useState)({}); 47570 const [localAudioEnabled, setLocalAudioEnabled] = (0, import_react4.useState)(false); 47571 const [localVideoEnabled, setLocalVideoEnabled] = (0, import_react4.useState)(false); 47572 const [joinedAt, setJoinedAt] = (0, import_react4.useState)(null); 47573 const [elapsedSeconds, setElapsedSeconds] = (0, import_react4.useState)(0); 47574 const [selfIsMain, setSelfIsMain] = (0, import_react4.useState)(false); 47575 const [uiHidden, setUiHidden] = (0, import_react4.useState)(false); 47576 const [layoutMode, setLayoutMode] = (0, import_react4.useState)("auto"); 47577 const [participantsOpen, setParticipantsOpen] = (0, import_react4.useState)(false); 47578 const [actionSheetTarget, setActionSheetTarget] = (0, import_react4.useState)(null); 47579 const [dmState, dispatchDm] = (0, import_react4.useReducer)(dmReducer, DM_INITIAL_STATE); 47580 const dmStateRef = (0, import_react4.useRef)(dmState); 47581 (0, import_react4.useEffect)(() => { 47582 dmStateRef.current = dmState; 47583 }, [dmState]); 47584 const dmConnectionRef = (0, import_react4.useRef)(null); 47585 const [chatDraft, setChatDraft] = (0, import_react4.useState)(""); 47586 const [chatSending, setChatSending] = (0, import_react4.useState)(false); 47587 const chatInputRef = (0, import_react4.useRef)(null); 47588 const [keyboardOpen, setKeyboardOpen] = (0, import_react4.useState)(false); 47589 const [leaveArmed, setLeaveArmed] = (0, import_react4.useState)(false); 47590 const leaveTimerRef = (0, import_react4.useRef)(null); 47591 const guestLabel = t3("call.guest"); 47592 const localDisplayName = displayName || guestLabel; 47593 const lastSentUserDataRef = (0, import_react4.useRef)(""); 47594 const [effectsOpen, setEffectsOpen] = (0, import_react4.useState)(false); 47595 const localFxDirtyRef = (0, import_react4.useRef)(false); 47596 function loadFxFromStorage() { 47597 try { 47598 const grade = localStorage.getItem("yano_prejoin_grade"); 47599 const soft = localStorage.getItem("yano_prejoin_soft"); 47600 const vignette = localStorage.getItem("yano_prejoin_vignette"); 47601 const faceBlur = localStorage.getItem("yano_prejoin_face_blur"); 47602 const faceBlurAmount = localStorage.getItem("yano_prejoin_face_blur_amount"); 47603 return { 47604 grade: grade || void 0, 47605 soft: soft ? soft === "1" : void 0, 47606 vignette: vignette ? vignette === "1" : void 0, 47607 faceBlur: faceBlur ? faceBlur === "1" : void 0, 47608 faceBlurPx: faceBlurAmount ? Number(faceBlurAmount) : void 0 47609 }; 47610 } catch (_error) { 47611 return {}; 47612 } 47613 } 47614 const [localFx, setLocalFx] = (0, import_react4.useState)(() => normalizeVideoEffects({ ...localVideoEffects || {}, ...loadFxFromStorage() })); 47615 (0, import_react4.useEffect)(() => {
47616 if (localFxDirtyRef.current) return; 47617 const next = normalizeVideoEffects({ ...localVideoEffects || {}, ...loadFxFromStorage() }); 47618 setLocalFx(next); 47619 }, [localVideoEffects, status]); 47620 function persistLocalFx(nextFx) { 47621 try { 47622 localStorage.setItem("yano_prejoin_grade", nextFx.grade); 47623 localStorage.setItem("yano_prejoin_soft", nextFx.soft ? "1" : "0"); 47624 localStorage.setItem("yano_prejoin_vignette", nextFx.vignette ? "1" : "0"); 47625 localStorage.setItem("yano_prejoin_face_blur", nextFx.faceBlur ? "1" : "0"); 47626 localStorage.setItem("yano_prejoin_face_blur_amount", String(nextFx.faceBlurPx)); 47627 } catch (_error) { 47628 } 47629 } 47630 function updateLocalFx(patch) { 47631 localFxDirtyRef.current = true; 47632 setLocalFx((current) => { 47633 const next = normalizeVideoEffects({ ...current, ...patch }); 47634 persistLocalFx(next); 47635 return next; 47636 }); 47637 } 47638 const stubMediaRef = (0, import_react4.useRef)({ stream: null, audioTrack: null, videoTrack: null }); 47639 const updateStubParticipants = (audioTrack, videoTrack) => { 47640 const audioState = audioTrack && audioTrack.enabled ? "playable" : "off"; 47641 const videoState = videoTrack && videoTrack.enabled ? "playable" : "off"; 47642 setParticipants({ 47643 local: { 47644 user_name: localDisplayName, 47645 user_id: currentUserId ? `user-${currentUserId}` : null, 47646 tracks: { 47647 audio: { state: audioState, track: audioTrack }, 47648 video: { state: videoState, track: videoTrack } 47649 } 47650 } 47651 }); 47652 }; 47653 function handleVideoAreaClick(event) { 47654 if (event.target.closest("button, input, a, form, [data-pip], .yano-participants-panel, .yano-overlay-chat")) return; 47655 if (chatOpen) { 47656 onToggleChat?.(); 47657 setUiHidden(false); 47658 return; 47659 } 47660 if (uiHidden) { 47661 setUiHidden(false); 47662 } else { 47663 setUiHidden(true); 47664 } 47665 } 47666 (0, import_react4.useEffect)(() => { 47667 initialMediaRef.current = initialMedia; 47668 }, [initialMedia]); 47669 (0, import_react4.useEffect)(() => { 47670 let active = true; 47671 async function connect() { 47672 setStatus("connecting"); 47673 setError(""); 47674 setParticipants({}); 47675 recordingStartedRef.current = false; 47676 try { 47677 if (join?.vendor === "stub") { 47678 if (stubMediaRef.current.stream) { 47679 stubMediaRef.current.stream.getTracks().forEach((track2) => track2.stop()); 47680 } 47681 stubMediaRef.current = { stream: null, audioTrack: null, videoTrack: null }; 47682 updateStubParticipants(null, null); 47683 setStatus("live"); 47684 setJoinedAt(Date.now()); 47685 return; 47686 } 47687 if (!join?.room_url || !join?.token) return; 47688 try { 47689 await pendingDestroyRef.current; 47690 } catch (_3) { 47691 } 47692 if (!active) return; 47693 const module = await Promise.resolve().then(() => (init_daily_esm(), daily_esm_exports)); 47694 if (!active) return; 47695 const Daily = module.default || module; 47696 const existingCallObject = callObjectRef.current || Daily.getCallInstance?.(); 47697 if (existingCallObject) { 47698 await destroyDailyCallObject(existingCallObject); 47699 if (callObjectRef.current === existingCallObject) { 47700 callObjectRef.current = null; 47701 } 47702 } 47703 if (!active) return; 47704 const callObject = Daily.createCallObject({ 47705 subscribeToTracksAutomatically: true 47706 }); 47707 callObjectRef.current = callObject; 47708 const syncParticipants = () => { 47709 if (!active) return; 47710 const nextParticipants = Object.fromEntries( 47711 Object.entries(callObject.participants()).map(([key, participant]) => [ 47712 key, 47713 participant ? { 47714 ...participant, 47715 tracks: participant.tracks ? { ...participant.tracks } : participant.tracks 47716 } : participant 47717 ]) 47718 ); 47719 setParticipants(nextParticipants); 47720 }; 47721 callObject.on("joined-meeting", () => { 47722 setStatus("live"); 47723 setJoinedAt(Date.now()); 47724 syncParticipants(); 47725 }); 47726 callObject.on("left-meeting", () => { 47727 setStatus("ended"); 47728 syncParticipants(); 47729 }); 47730 callObject.on("participant-joined", syncParticipants); 47731 callObject.on("participant-updated", syncParticipants); 47732 callObject.on("participant-left", syncParticipants); 47733 callObject.on("track-started", syncParticipants); 47734 callObject.on("track-stopped", syncParticipants); 47735 callObject.on("error", () => { 47736 setStatus("error"); 47737 setError(t3("call.connect_failed")); 47738 }); 47739 callObject.on("camera-error", () => { 47740 setStatus("error"); 47741 setError(t3("call.camera_access_failed")); 47742 }); 47743 await callObject.join({ 47744 url: join.room_url, 47745 token: join.token, 47746 subscribeToTracksAutomatically: true, 47747 // Join first, then enable local devices after the meeting is live. 47748 // This avoids aborting the whole call on browsers that fail device init 47749 // during join() even though the room/token are valid. 47750 startVideoOff: true, 47751 startAudioOff: true 47752 }); 47753 setStatus("live"); 47754 setJoinedAt(Date.now()); 47755 if (join?.recording?.auto_start_method === "call_object" && join?.recording?.should_auto_start && !recordingStartedRef.current) { 47756 try { 47757 recordingStartedRef.current = true; 47758 await callObject.startRecording({ 47759 type: join.recording.type 47760 }); 47761 } catch (recordingError) { 47762 const rawMessage = recordingError?.message || recordingError?.errorMsg || ""; 47763 if (!/already.*record/i.test(rawMessage)) { 47764 setError(t3("call.recording_failed")); 47765 } 47766 } 47767 } 47768 syncParticipants(); 47769 } catch (event) { 47770 console.error("Failed to initialize call", {
47771 vendor: join?.vendor, 47772 room_url: join?.room_url, 47773 token_present: Boolean(join?.token), 47774 error: event 47775 }); 47776 setStatus("error"); 47777 setError(event?.name === "NotAllowedError" ? t3("call.camera_access_failed") : t3("call.initialize_failed")); 47778 } 47779 } 47780 connect(); 47781 return () => { 47782 active = false; 47783 if (callObjectRef.current) { 47784 const obj = callObjectRef.current; 47785 callObjectRef.current = null; 47786 pendingDestroyRef.current = pendingDestroyRef.current.then(() => destroyDailyCallObject(obj)).catch(() => { 47787 }); 47788 } 47789 if (stubMediaRef.current.stream) { 47790 stubMediaRef.current.stream.getTracks().forEach((track2) => track2.stop()); 47791 stubMediaRef.current = { stream: null, audioTrack: null, videoTrack: null }; 47792 } 47793 }; 47794 }, [join?.vendor, join?.room_url, join?.token]); 47795 (0, import_react4.useEffect)(() => { 47796 if (join?.vendor !== "stub") return; 47797 if (status !== "live") return; 47798 const { audioTrack, videoTrack } = stubMediaRef.current; 47799 updateStubParticipants(audioTrack, videoTrack); 47800 }, [join?.vendor, currentUserId, localDisplayName, status]); 47801 (0, import_react4.useEffect)(() => { 47802 if (status !== "live") return; 47803 const callObject = callObjectRef.current; 47804 if (!callObject?.setUserData) return; 47805 const fx = normalizeVideoEffects(localFx || {}); 47806 const payload = JSON.stringify({ fx, display_name: localDisplayName }); 47807 if (payload === lastSentUserDataRef.current) return; 47808 lastSentUserDataRef.current = payload; 47809 try { 47810 const existing = callObject.participants()?.local?.userData || {}; 47811 callObject.setUserData({ 47812 ...existing, 47813 display_name: localDisplayName, 47814 yano_fx: fx 47815 }); 47816 } catch (_error) { 47817 } 47818 }, [status, localDisplayName, localFx]); 47819 (0, import_react4.useEffect)(() => { 47820 if (!joinedAt || status !== "live") { 47821 setElapsedSeconds(0); 47822 return void 0; 47823 } 47824 const interval = window.setInterval(() => { 47825 setElapsedSeconds(Math.floor((Date.now() - joinedAt) / 1e3)); 47826 }, 1e3); 47827 return () => { 47828 window.clearInterval(interval); 47829 }; 47830 }, [joinedAt, status]); 47831 const participantTiles = (0, import_react4.useMemo)(() => { 47832 const entries = Object.entries(participants).map(([key, participant]) => ({ key, participant })).sort((left, right) => { 47833 if (left.key === "local") return 1; 47834 if (right.key === "local") return -1; 47835 return left.key.localeCompare(right.key); 47836 }); 47837 return entries; 47838 }, [participants]); 47839 const participantTilesRef = (0, import_react4.useRef)(participantTiles); 47840 const roomMembersRef = (0, import_react4.useRef)(roomMembers); 47841 (0, import_react4.useEffect)(() => { 47842 participantTilesRef.current = participantTiles; 47843 }, [participantTiles]); 47844 (0, import_react4.useEffect)(() => { 47845 roomMembersRef.current = roomMembers; 47846 }, [roomMembers]); 47847 const remoteAudioTracks = (0, import_react4.useMemo)( 47848 () => participantTiles.filter(({ key, participant }) => key !== "local" && hasPlayableTrack(participant, "audio")).map(({ key, participant }) => ({ 47849 key, 47850 track: audioTrackFor(participant) 47851 })).filter(({ track: track2 }) => Boolean(track2)), 47852 [participantTiles] 47853 ); 47854 const localParticipant = participants.local || null; 47855 const remoteParticipants = participantTiles.filter(({ key }) => key !== "local").map(({ participant }) => participant); 47856 const pendingJoinCount = isHost ? pendingMembers.length : 0; 47857 const leadRemote = remoteParticipants[0] || null; 47858 const resolvedLocalAudio = localParticipant ? hasPlayableTrack(localParticipant, "audio") : localAudioEnabled; 47859 const resolvedLocalVideo = localParticipant ? hasPlayableTrack(localParticipant, "video") : localVideoEnabled; 47860 const tileCount = Math.max(participantTiles.length, 2); 47861 const gridClassName = tileCount <= 2 ? "grid-cols-1 md:grid-cols-2" : tileCount <= 4 ? "grid-cols-1 sm:grid-cols-2" : "grid-cols-2 xl:grid-cols-3"; 47862 const useFocusLayout = layoutMode === "focus" ? true : layoutMode === "grid" ? false : participantTiles.length <= 2; 47863 const mainParticipant = useFocusLayout && (selfIsMain || !leadRemote) ? localParticipant : leadRemote; 47864 const mainParticipantName = displayNameFor(mainParticipant, selfIsMain ? localDisplayName : guestLabel); 47865 const mainParticipantVideo = videoTrackFor(mainParticipant); 47866 const mainParticipantVideoOn = hasPlayableTrack(mainParticipant, "video") && Boolean(mainParticipantVideo); 47867 const pipParticipant = useFocusLayout ? selfIsMain ? leadRemote : localParticipant : null; 47868 const pipName = pipParticipant ? displayNameFor(pipParticipant, pipParticipant === localParticipant ? localDisplayName : guestLabel) : "";
47869 const pipVideo = videoTrackFor(pipParticipant); 47870 const pipVideoOn = hasPlayableTrack(pipParticipant, "video") && Boolean(pipVideo); 47871 const remoteHasVideo = leadRemote ? hasPlayableTrack(leadRemote, "video") : false; 47872 const remoteHasAudio = leadRemote ? hasPlayableTrack(leadRemote, "audio") : false; 47873 const localHasVideo = resolvedLocalVideo; 47874 const bothHaveVideo = remoteHasVideo && localHasVideo; 47875 const neitherHasVideo = !remoteHasVideo && !localHasVideo; 47876 const showPendingJoinNotice = pendingJoinCount > 0; 47877 const formatDmTime = (0, import_react4.useCallback)((value) => { 47878 if (!value) return t3("call.dm_just_now"); 47879 const date = value instanceof Date ? value : new Date(value); 47880 if (Number.isNaN(date.getTime())) return t3("call.dm_just_now"); 47881 if (Date.now() - date.getTime() < 6e4) return t3("call.dm_just_now"); 47882 return new Intl.DateTimeFormat(void 0, { 47883 hour: "numeric", 47884 minute: "2-digit" 47885 }).format(date); 47886 }, [t3]); 47887 const normalizeDmMessage = (0, import_react4.useCallback)((message) => ({ 47888 id: message.id, 47889 from: message.sender?.id === currentUserId ? "you" : "them", 47890 text: message.body, 47891 createdAt: message.created_at 47892 }), [currentUserId, formatDmTime]); 47893 function latestMessageFor(participant) { 47894 if (!participant || !chatOverlayMessages.length) return null; 47895 const pid = participant.user_id; 47896 if (!pid) return null; 47897 const backendId = parseInt(pid.replace("user-", ""), 10); 47898 if (!backendId) return null; 47899 for (let i3 = chatOverlayMessages.length - 1; i3 >= 0; i3--) { 47900 if (chatOverlayMessages[i3].sender?.id === backendId) return chatOverlayMessages[i3]; 47901 } 47902 return null; 47903 } 47904 const buildParticipantTarget = (0, import_react4.useCallback)((participant, isLocal) => { 47905 if (!participant) return null; 47906 const backendUserId = participant.user_id ? parseInt(String(participant.user_id).replace("user-", ""), 10) : null; 47907 const member = backendUserId ? roomMembers.find((m3) => m3.id === backendUserId) : null; 47908 return { 47909 key: participant.user_id || (isLocal ? "local" : participant.session_id || participant.user_name || "unknown"), 47910 participant, 47911 isLocal, 47912 backendUserId, 47913 name: displayNameFor(participant, isLocal ? localDisplayName : guestLabel), 47914 avatarUrl: member?.avatar_url || "", 47915 gender: member?.gender || "", 47916 bio: member?.bio || "", 47917 isHostMember: member?.role === "host", 47918 mutedByHost: Boolean(member?.muted_by_host) 47919 }; 47920 }, [roomMembers, localDisplayName, guestLabel]); 47921 const buildTargetForUser = (0, import_react4.useCallback)((userId, fallbackName = guestLabel) => { 47922 if (!userId) return null; 47923 const participantEntry = participantTilesRef.current.find(({ participant }) => { 47924 const backendUserId = participant?.user_id ? parseInt(String(participant.user_id).replace("user-", ""), 10) : null; 47925 return backendUserId === userId; 47926 }); 47927 if (participantEntry) { 47928 const isLocal = participantEntry.key === "local"; 47929 const member2 = roomMembersRef.current.find((item) => item.id === userId); 47930 return { 47931 key: participantEntry.participant.user_id || (isLocal ? "local" : participantEntry.participant.session_id || participantEntry.participant.user_name || `user-${userId}`), 47932 participant: participantEntry.participant, 47933 isLocal, 47934 backendUserId: userId, 47935 name: displayNameFor(participantEntry.participant, isLocal ? localDisplayName : fallbackName), 47936 avatarUrl: member2?.avatar_url || "", 47937 gender: member2?.gender || "", 47938 bio: member2?.bio || "", 47939 isHostMember: member2?.role === "host", 47940 mutedByHost: Boolean(member2?.muted_by_host) 47941 }; 47942 } 47943 const member = roomMembersRef.current.find((item) => item.id === userId); 47944 return { 47945 key: `user-${userId}`, 47946 participant: null, 47947 isLocal: false, 47948 backendUserId: userId, 47949 name: member?.display_name || fallbackName, 47950 avatarUrl: member?.avatar_url || "", 47951 gender: member?.gender || "", 47952 bio: member?.bio || "", 47953 isHostMember: member?.role === "host", 47954 mutedByHost: Boolean(member?.muted_by_host) 47955 }; 47956 }, [guestLabel, localDisplayName]); 47957 const handleParticipantTap = (0, import_react4.useCallback)((participant, isLocal) => { 47958 const target = buildParticipantTarget(participant, isLocal); 47959 if (!target) return; 47960 const existing = dmStateRef.current.conversations[target.key]; 47961 if (existing) { 47962 dispatchDm({ type: "OPEN", target }); 47963 } else {
47964 setActionSheetTarget(target); 47965 } 47966 }, [buildParticipantTarget]); 47967 const closeActionSheet = (0, import_react4.useCallback)(() => setActionSheetTarget(null), []); 47968 const avatarUrlForParticipant = (0, import_react4.useCallback)((participant, isLocal = false) => { 47969 const backendUserId = participant?.user_id ? parseInt(String(participant.user_id).replace("user-", ""), 10) : isLocal ? currentUserId : null; 47970 if (!backendUserId) return ""; 47971 return roomMembersRef.current.find((member) => member.id === backendUserId)?.avatar_url || ""; 47972 }, [currentUserId]); 47973 const openDm = (0, import_react4.useCallback)((target) => { 47974 if (!target) return; 47975 dispatchDm({ type: "OPEN", target }); 47976 }, []); 47977 const minimizeDm = (0, import_react4.useCallback)(() => dispatchDm({ type: "MINIMIZE" }), []); 47978 const sendDmMessage = (0, import_react4.useCallback)(async (text) => { 47979 const key = dmStateRef.current.currentKey; 47980 const conv = key ? dmStateRef.current.conversations[key] : null; 47981 const targetUserId = conv?.target?.backendUserId; 47982 const body = text?.trim(); 47983 if (!key || !targetUserId || !body || !apiToken || !roomCode) return false; 47984 dispatchDm({ type: "SEND_START", key }); 47985 try { 47986 const payload = await api.sendDirectMessage(apiToken, roomCode, targetUserId, body); 47987 if (!payload?.message) { 47988 dispatchDm({ type: "SEND_ERROR", key, error: t3("chat.send_error") }); 47989 return false; 47990 } 47991 dispatchDm({ 47992 type: "SEND", 47993 key, 47994 message: normalizeDmMessage(payload.message) 47995 }); 47996 return true; 47997 } catch (_error) { 47998 dispatchDm({ type: "SEND_ERROR", key, error: t3("chat.send_error") }); 47999 return false; 48000 } 48001 }, [apiToken, normalizeDmMessage, roomCode, t3]); 48002 const handleDmAvatarTap = (0, import_react4.useCallback)(() => { 48003 const key = dmStateRef.current.currentKey; 48004 const conv = key ? dmStateRef.current.conversations[key] : null; 48005 if (conv?.target) setActionSheetTarget(conv.target); 48006 }, []); 48007 const dismissDmToast = (0, import_react4.useCallback)(() => dispatchDm({ type: "DISMISS_TOAST" }), []); 48008 const handleToastTap = (0, import_react4.useCallback)(() => { 48009 const t4 = dmStateRef.current.toast; 48010 if (!t4) return; 48011 dispatchDm({ type: "OPEN", target: t4.target }); 48012 }, []); 48013 const participantDmInfo = (0, import_react4.useCallback)((participant, isLocal) => { 48014 if (!participant) return null; 48015 const key = participant.user_id || (isLocal ? "local" : null); 48016 if (!key) return null; 48017 const conv = dmState.conversations[key]; 48018 if (!conv) return null; 48019 return { active: true, unread: conv.unread || 0 }; 48020 }, [dmState.conversations]); 48021 const currentDmConv = dmState.currentKey ? dmState.conversations[dmState.currentKey] : null; 48022 const currentDmTarget = currentDmConv?.target || null; 48023 const currentDmMessages = currentDmConv?.messages || []; 48024 (0, import_react4.useEffect)(() => { 48025 const key = currentDmTarget?.key; 48026 const targetUserId = currentDmTarget?.backendUserId; 48027 if (!key || !targetUserId || !apiToken || !roomCode) return; 48028 if (currentDmConv?.loading || currentDmConv?.loaded) return; 48029 let cancelled = false; 48030 async function loadConversation() { 48031 dispatchDm({ type: "LOAD_START", key }); 48032 try { 48033 const payload = await api.getDirectMessages(apiToken, roomCode, targetUserId); 48034 if (cancelled) return; 48035 dispatchDm({ 48036 type: "LOAD_SUCCESS", 48037 key, 48038 messages: (payload.messages || []).map(normalizeDmMessage) 48039 }); 48040 } catch (_error) { 48041 if (!cancelled) { 48042 dispatchDm({ type: "LOAD_ERROR", key, error: "" }); 48043 } 48044 } 48045 } 48046 loadConversation(); 48047 return () => { 48048 cancelled = true; 48049 }; 48050 }, [apiToken, currentDmConv?.loaded, currentDmTarget?.backendUserId, currentDmTarget?.key, normalizeDmMessage, roomCode]); 48051 (0, import_react4.useEffect)(() => { 48052 if (!apiToken || !roomCode || !currentUserId) { 48053 if (dmConnectionRef.current) { 48054 dmConnectionRef.current.unsubscribe(); 48055 dmConnectionRef.current = null; 48056 } 48057 return void 0; 48058 } 48059 const connection = subscribeToUserChannel(apiToken, { 48060 onEvent(data) { 48061 if (data?.type !== "direct_message") return; 48062 if (data.room_code !== roomCode) return; 48063 if (!data.other_user?.id || !data.message) return; 48064 const target = buildTargetForUser(data.other_user.id, data.other_user.display_name || guestLabel); 48065 if (!target) return; 48066 dispatchDm({ 48067 type: "RECEIVE", 48068 key: target.key, 48069 target, 48070 message: normalizeDmMessage(data.message) 48071 }); 48072 } 48073 }); 48074 dmConnectionRef.current = connection; 48075 return () => { 48076 connection.unsubscribe(); 48077 if (dmConnectionRef.current === connection) { 48078 dmConnectionRef.current = null; 48079 } 48080 }; 48081 }, [apiToken, buildTargetForUser, currentUserId, guestLabel, normalizeDmMessage, roomCode]); 48082 const videoParticipants = (0, import_react4.useMemo)( 48083 () => participantTiles.filter(({ key, participant }) => { 48084 if (key === "local") return resolvedLocalVideo; 48085 return hasPlayableTrack(participant, "video"); 48086 }), 48087 [participantTiles, resolvedLocalVideo] 48088 ); 48089 const nonVideoParticipants = (0, import_react4.useMemo)( 48090 () => participantTiles.filter(({ key, participant }) => { 48091 if (key === "local") return !resolvedLocalVideo; 48092 return !hasPlayableTrack(participant, "video"); 48093 }), 48094 [participantTiles, resolvedLocalVideo] 48095 ); 48096 async function handleChatSend() { 48097 const body = chatDraft.trim(); 48098 if (!body || chatSending || !onSendMessage) return; 48099 setChatSending(true); 48100 try { 48101 await onSendMessage(body); 48102 setChatDraft(""); 48103 } catch (_error) { 48104 } finally { 48105 setChatSending(false); 48106 } 48107 } 48108 (0, import_react4.useEffect)(() => { 48109 if (chatOpen && chatInputRef.current) { 48110 chatInputRef.current.focus(); 48111 } 48112 }, [chatOpen]); 48113 function handleLeaveClick() { 48114 if (leaveArmed) { 48115 clearTimeout(leaveTimerRef.current); 48116 setLeaveArmed(false); 48117 onLeaveRoom?.(); 48118 return; 48119 } 48120 setLeaveArmed(true); 48121 leaveTimerRef.current = setTimeout(() => setLeaveArmed(false), 3e3); 48122 } 48123 (0, import_react4.useEffect)(() => { 48124 return () => clearTimeout(leaveTimerRef.current); 48125 }, []); 48126 const isMobileRef = (0, import_react4.useRef)(typeof window !== "undefined" && window.matchMedia("(max-width: 640px)").matches); 48127 function handleChatInputFocus() { 48128 if (isMobileRef.current) setKeyboardOpen(true); 48129 } 48130 function handleChatInputBlur() { 48131 setKeyboardOpen(false); 48132 } 48133 async function toggleLocalAudio() { 48134 const nextValue = !resolvedLocalAudio;
48135 setLocalAudioEnabled(nextValue); 48136 try { 48137 if (join?.vendor === "stub") { 48138 const current = stubMediaRef.current; 48139 if (!nextValue && current.audioTrack) { 48140 current.audioTrack.enabled = false; 48141 updateStubParticipants(current.audioTrack, current.videoTrack); 48142 return; 48143 } 48144 if (nextValue) { 48145 if (current.audioTrack && current.audioTrack.readyState !== "ended") { 48146 current.audioTrack.enabled = true; 48147 updateStubParticipants(current.audioTrack, current.videoTrack); 48148 return; 48149 } 48150 const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false }); 48151 const track2 = stream.getAudioTracks()[0] || null; 48152 if (!track2) { 48153 stream.getTracks().forEach((t4) => t4.stop()); 48154 throw new Error("No audio track"); 48155 } 48156 if (current.stream) { 48157 current.stream.addTrack(track2); 48158 stream.getTracks().forEach((t4) => t4 !== track2 && t4.stop()); 48159 } else { 48160 current.stream = stream; 48161 } 48162 current.audioTrack = track2; 48163 updateStubParticipants(current.audioTrack, current.videoTrack); 48164 return; 48165 } 48166 return; 48167 } 48168 callObjectRef.current?.setLocalAudio(nextValue); 48169 } catch (_error) { 48170 setLocalAudioEnabled(!nextValue); 48171 } 48172 } 48173 async function toggleLocalVideo() { 48174 const nextValue = !resolvedLocalVideo; 48175 setLocalVideoEnabled(nextValue); 48176 try { 48177 if (join?.vendor === "stub") { 48178 const current = stubMediaRef.current; 48179 if (!nextValue && current.videoTrack) { 48180 current.videoTrack.enabled = false; 48181 updateStubParticipants(current.audioTrack, current.videoTrack); 48182 return; 48183 }
48184 if (nextValue) { 48185 if (current.videoTrack && current.videoTrack.readyState !== "ended") { 48186 current.videoTrack.enabled = true; 48187 updateStubParticipants(current.audioTrack, current.videoTrack); 48188 return; 48189 } 48190 const stream = await navigator.mediaDevices.getUserMedia({ audio: false, video: true }); 48191 const track2 = stream.getVideoTracks()[0] || null; 48192 if (!track2) { 48193 stream.getTracks().forEach((t4) => t4.stop()); 48194 throw new Error("No video track"); 48195 } 48196 if (current.stream) { 48197 current.stream.addTrack(track2); 48198 stream.getTracks().forEach((t4) => t4 !== track2 && t4.stop()); 48199 } else { 48200 current.stream = stream; 48201 } 48202 current.videoTrack = track2; 48203 updateStubParticipants(current.audioTrack, current.videoTrack); 48204 return; 48205 } 48206 return; 48207 } 48208 callObjectRef.current?.setLocalVideo(nextValue); 48209 } catch (_error) { 48210 setLocalVideoEnabled(!nextValue); 48211 } 48212 } 48213 return /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative h-full overflow-hidden bg-[#1a0e2e]", onClick: handleVideoAreaClick }, /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-ui-layer absolute inset-x-0 top-0 z-10 flex items-center justify-between gap-3 px-4 py-4 sm:px-5 ${uiHidden || keyboardOpen ? "yano-ui-layer--hidden" : ""}` }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex min-w-0 items-center gap-3" }, /* @__PURE__ */ import_react4.default.createElement(YanoLogo, { className: "h-7 w-7" }), /* @__PURE__ */ import_react4.default.createElement("div", { className: "h-5 w-px bg-violet-400/20" }), /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex min-w-0 items-center gap-2.5" }, /* @__PURE__ */ import_react4.default.createElement( 48214 AvatarBadge, 48215 { 48216 name: mainParticipantName || title || t3("call.room_fallback"), 48217 avatarUrl: avatarUrlForParticipant(mainParticipant, mainParticipant === localParticipant), 48218 className: "flex h-7 w-7 items-center justify-center rounded-full bg-violet-500/20 text-[10px] font-extrabold text-violet-200", 48219 imgClassName: "h-full w-full object-cover" 48220 } 48221 ), /* @__PURE__ */ import_react4.default.createElement("p", { className: "truncate text-sm font-bold text-violet-200" }, mainParticipantName || title || t3("call.room_fallback")))), /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center gap-2" }, participantTiles.length > 2 ? /* @__PURE__ */ import_react4.default.createElement( 48222 "button", 48223 { 48224 type: "button", 48225 className: "flex h-8 w-8 items-center justify-center rounded-lg bg-violet-500/12 text-violet-300 transition hover:bg-violet-500/20", 48226 onClick: () => setLayoutMode((m3) => m3 === "grid" ? "focus" : "grid"), 48227 "aria-label": layoutMode === "grid" ? t3("call.focus_view") : t3("call.grid_view"), 48228 title: layoutMode === "grid" ? t3("call.focus_view") : t3("call.grid_view") 48229 }, 48230 layoutMode === "grid" ? /* @__PURE__ */ import_react4.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }, /* @__PURE__ */ import_react4.default.createElement("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), /* @__PURE__ */ import_react4.default.createElement("line", { x1: "3", y1: "15", x2: "21", y2: "15" })) : /* @__PURE__ */ import_react4.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round" }, /* @__PURE__ */ import_react4.default.createElement("rect", { x: "3", y: "3", width: "7", height: "7", rx: "1" }), /* @__PURE__ */ import_react4.default.createElement("rect", { x: "14", y: "3", width: "7", height: "7", rx: "1" }), /* @__PURE__ */ import_react4.default.createElement("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }
48230), /* @__PURE__ */ import_react4.default.createElement("rect", { x: "14", y: "14", width: "7", height: "7", rx: "1" })) 48231 ) : null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "rounded-full bg-violet-500/12 px-3 py-1" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "font-display text-sm font-bold tabular-nums text-violet-300" }, formatDuration(elapsedSeconds))))), chatOverlayMessages.length ? /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-overlay-chat ${chatOpen ? keyboardOpen ? "yano-overlay-chat--keyboard" : "yano-overlay-chat--raised" : ""}` }, chatOverlayMessages.map((message) => { 48232 const self2 = message.sender?.id === currentUserId; 48233 return /* @__PURE__ */ import_react4.default.createElement("div", { key: message.id, className: "yano-overlay-chat__line" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-overlay-chat__name ${self2 ? "yano-overlay-chat__name--self" : "yano-overlay-chat__name--other"}` }, self2 ? t3("call.you") : message.sender?.display_name || guestLabel), /* @__PURE__ */ import_react4.default.createElement("span", { className: "text-lg font-semibold text-white/90 sm:text-base" }, message.body)); 48234 })) : null, participantsOpen ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "yano-participants-panel" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center justify-between border-b border-violet-500/10 px-4 py-3" }, /* @__PURE__ */ import_react4.default.createElement("h3", { className: "font-display text-sm font-bold text-violet-200" }
48234, t3("call.participants")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center gap-2" }, isHost ? /* @__PURE__ */ import_react4.default.createElement( 48235 "button", 48236 { 48237 type: "button", 48238 className: `inline-flex items-center gap-1.5 rounded-full px-2.5 py-1 text-xs font-semibold transition ${roomLocked ? "bg-violet-400/20 text-violet-200" : "bg-violet-500/10 text-violet-400/70 hover:bg-violet-500/15 hover:text-violet-300"}`, 48239 onClick: roomLocked ? onUnlockRoom : onLockRoom, 48240 title: roomLocked ? t3("call.unlock_room") : t3("call.lock_room") 48241 }, 48242 roomLocked ? /* @__PURE__ */ import_react4.default.createElement(LockClosedIcon_default, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ import_react4.default.createElement(LockOpenIcon_default, { className: "h-3.5 w-3.5" }), 48243 roomLocked ? t3("call.locked") : t3("call.unlocked") 48244 ) : roomLocked ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "inline-flex items-center gap-1 rounded-full bg-violet-500/10 px-2.5 py-1 text-xs font-semibold text-violet-400/70" }, /* @__PURE__ */ import_react4.default.createElement(LockClosedIcon_default, { className: "h-3.5 w-3.5" }), t3("call.locked")) : null, /* @__PURE__ */ import_react4.default.createElement("button", { type: "button", className: "rounded-full p-1 text-violet-400/60 transition hover:text-violet-200", onClick: () => setParticipantsOpen(false) }, /* @__PURE__ */ import_react4.default.createElement(XCircleIcon_default, { className: "h-5 w-5" })))), /* @__PURE__ */ import_react4.default.createElement("ul", { className: "flex-1 overflow-y-auto px-2 py-2" }, participantTiles.map(({ key, participant }) => { 48245 const isSelf = key === "local"; 48246 const name = displayNameFor(participant, isSelf ? localDisplayName : guestLabel); 48247 const backendUserId = participant.user_id ? parseInt(participant.user_id.replace("user-", ""), 10) : null; 48248 const backendMember = backendUserId ? roomMembers.find((m3) => m3.id === backendUserId) : null; 48249 const isHostMember = backendMember?.role === "host"; 48250 const mutedByHost = backendMember?.muted_by_host || false; 48251 const hasAudio = hasPlayableTrack(participant, "audio"); 48252 const dm = participantDmInfo(participant, isSelf); 48253 return /* @__PURE__ */ import_react4.default.createElement("li", { key, className: "flex items-center gap-1 rounded-xl pr-2 transition hover:bg-violet-500/8" }, /* @__PURE__ */ import_react4.default.createElement( 48254 "button", 48255 { 48256 type: "button", 48257 onClick: () => handleParticipantTap(participant, isSelf), 48258 className: "flex min-w-0 flex-1 items-center gap-2.5 rounded-xl px-2.5 py-2 text-left", 48259 "aria-label": dm?.active ? t3("call.dm_active_indicator") : t3("call.profile_open_actions") 48260 },
48261 /* @__PURE__ */ import_react4.default.createElement( 48262 AvatarBadge, 48263 { 48264 name, 48265 avatarUrl: backendMember?.avatar_url, 48266 className: `grid h-8 w-8 shrink-0 place-items-center rounded-full bg-violet-500/15 text-xs font-bold text-violet-300 ${hasAudio ? "ring-2 ring-violet-400/30" : ""}`, 48267 imgClassName: "h-full w-full object-cover" 48268 }, 48269 dm?.active ? /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-dm-dot ${dm.unread > 0 ? "" : "yano-dm-dot--read"}`, style: { top: "-3px", right: "-3px" } }, dm.unread > 0 ? dm.unread > 9 ? "9+" : dm.unread : null) : null 48270 ), 48271 /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "flex items-center gap-1.5 truncate text-sm font-semibold text-violet-100" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "truncate" }, name), isSelf ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "text-violet-400/50" }, t3("call.you_suffix")) : null, dm?.active ? /* @__PURE__ */ import_react4.default.createElement(ChatBubbleLeftRightIcon_default, { className: "h-3 w-3 shrink-0 text-violet-300/70" }) : null), isHostMember ? /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-[10px] font-semibold text-violet-400/50" }, t3("room.host")) : null) 48272 ), isHost && !isSelf && !isHostMember && backendUserId ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex shrink-0 items-center gap-1" }, /* @__PURE__ */ import_react4.default.createElement( 48273 "button", 48274 { 48275 type: "button", 48276 className: "rounded-full p-1.5 text-violet-400/50 transition hover:bg-violet-500/15 hover:text-violet-200", 48277 onClick: () => onMuteMember?.(backendUserId, !mutedByHost), 48278 title: mutedByHost ? t3("call.unmute_member") : t3("call.mute_member") 48279 },
48280 mutedByHost ? /* @__PURE__ */ import_react4.default.createElement(SpeakerXMarkIcon_default, { className: "h-4 w-4" }) : /* @__PURE__ */ import_react4.default.createElement(SpeakerWaveIcon_default, { className: "h-4 w-4" }) 48281 ), /* @__PURE__ */ import_react4.default.createElement( 48282 "button", 48283 { 48284 type: "button", 48285 className: "rounded-full p-1.5 text-violet-400/50 transition hover:bg-red-500/15 hover:text-red-300", 48286 onClick: () => onKickMember?.(backendUserId), 48287 title: t3("call.kick_member") 48288 }, 48289 /* @__PURE__ */ import_react4.default.createElement(XCircleIcon_default, { className: "h-4 w-4" }) 48290 )) : null, !isHost && mutedByHost ? /* @__PURE__ */ import_react4.default.createElement(SpeakerXMarkIcon_default, { className: "h-4 w-4 shrink-0 text-violet-400/40", title: t3("call.muted_by_host") }) : null); 48291 })), isHost && pendingMembers.length > 0 ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "border-t border-violet-500/10 px-2 py-2" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "px-2.5 pb-1.5 text-[10px] font-bold uppercase tracking-wider text-violet-400/50" }, t3("call.waiting_to_join")), pendingMembers.map((member) => /* @__PURE__ */ import_react4.default.createElement("div", { key: member.id, className: "flex items-center gap-2.5 rounded-xl px-2.5 py-2 transition hover:bg-violet-500/8" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "grid h-8 w-8 shrink-0 place-items-center rounded-full bg-amber-500/15 text-xs font-bold text-amber-300" }, (member.display_name || "?").slice(0, 2)), /* @__PURE__ */ import_react4.default.createElement("p", { className: "min-w-0 flex-1 truncate text-sm font-semibold text-violet-100" }, member.display_name), /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center gap-1" }, /* @__PURE__ */ import_react4.default.createElement( 48292 "button", 48293 { 48294 type: "button", 48295 className: "rounded-full p-1.5 text-emerald-400/70 transition hover:bg-emerald-500/15 hover:text-emerald-300", 48296 onClick: () => onApproveMember?.(member.id), 48297 title: t3("call.approve") 48298 }, 48299 /* @__PURE__ */ import_react4.default.createElement(CheckCircleIcon_default, { className: "h-5 w-5" }) 48300 ), /* @__PURE__ */ import_react4.default.createElement( 48301 "button", 48302 { 48303 type: "button", 48304 className: "rounded-full p-1.5 text-violet-400/50 transition hover:bg-red-500/15 hover:text-red-300", 48305 onClick: () => onDenyMember?.(member.id), 48306 title: t3("call.deny") 48307 }, 48308 /* @__PURE__ */ import_react4.default.createElement(XCircleIcon_default, { className: "h-5 w-5" }) 48309 ))))) : null) : null, chatOpen ? /* @__PURE__ */ import_react4.default.createElement( 48310 "div", 48311 { 48312 className: `yano-ui-layer pointer-events-auto absolute inset-x-0 z-10 px-4 ${uiHidden ? "yano-ui-layer--hidden" : ""}`, 48313 style: { bottom: keyboardOpen ? "0.35rem" : "5.25rem" } 48314 }, 48315 /* @__PURE__ */ import_react4.default.createElement( 48316 "form", 48317 { 48318 className: "mx-auto flex max-w-lg items-center gap-2", 48319 onSubmit: (event) => { 48320 event.preventDefault(); 48321 handleChatSend(); 48322 }, 48323 onClick: (event) => event.stopPropagation() 48324 },
48325 /* @__PURE__ */ import_react4.default.createElement( 48326 "input", 48327 { 48328 ref: chatInputRef, 48329 type: "text", 48330 enterKeyHint: "send", 48331 autoComplete: "off", 48332 autoCorrect: "off", 48333 onFocus: handleChatInputFocus, 48334 onBlur: handleChatInputBlur, 48335 className: "flex-1 rounded-2xl border border-white/10 bg-black/40 px-4 py-2.5 text-sm font-semibold text-white outline-none backdrop-blur-sm transition placeholder:text-white/35 focus:border-violet-400/40", 48336 value: chatDraft, 48337 onChange: (event) => setChatDraft(event.target.value), 48338 placeholder: t3("chat.input_placeholder") 48339 } 48340 ), 48341 /* @__PURE__ */ import_react4.default.createElement( 48342 "button", 48343 { 48344 type: "button", 48345 disabled: chatSending || !chatDraft.trim(), 48346 onPointerDown: (event) => { 48347 event.preventDefault(); 48348 handleChatSend(); 48349 }, 48350 className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-white/10 text-white/80 backdrop-blur-sm transition hover:bg-white/18 disabled:opacity-30" 48351 },
48352 /* @__PURE__ */ import_react4.default.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor" }, /* @__PURE__ */ import_react4.default.createElement("path", { d: "M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" })) 48353 ) 48354 ) 48355 ) : null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex h-full flex-col px-3 pb-[5.5rem] pt-[4.5rem] sm:px-4 sm:pb-24 sm:pt-20" }, error2 ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "mx-auto mb-3 w-full max-w-2xl rounded-[1.3rem] bg-violet-500/10 px-4 py-3 text-sm text-violet-200" }, error2) : null, useFocusLayout ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "relative min-h-0 flex-1 overflow-hidden rounded-[1.6rem]" }, !leadRemote ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex h-full flex-col" }, localHasVideo && videoTrackFor(localParticipant) ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-h-0 flex-1 overflow-hidden rounded-[1.6rem]" }, /* @__PURE__ */ import_react4.default.createElement( 48356 ParticipantVideoFx, 48357 { 48358 track: videoTrackFor(localParticipant), 48359 mirrored: true, 48360 muted: true, 48361 effects: localFx, 48362 fit: "contain", 48363 className: "h-full w-full object-contain" 48364 } 48365 )) : null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "shrink-0 py-3 text-center sm:py-5" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "font-display text-xl leading-none text-violet-100 sm:text-2xl" }, t3(waitingStateLabelKey(status))), roomCode || shareUrl ? /* @__P
48365URE__ */ import_react4.default.createElement("div", { className: "mt-4 flex flex-col items-center gap-3" }, roomCode ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement("div", { className: "text-[10px] font-extrabold uppercase tracking-[0.22em] text-violet-300/55" }, t3("call.invite_code")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "inline-flex items-center justify-center rounded-full bg-violet-500/12 px-3 py-1.5 text-[11px] font-extrabold tracking-[0.2em] text-violet-200/90" }, roomCode)) : null, shareUrl ? /* @__PURE__ */ import_react4.default.createElement("button", { type: "button", onClick: onCopyLink, className: "inline-flex items-center gap-2 rounded-2xl bg-violet-500/12 px-4 py-2.5 text-sm font-bold text-violet-300 transition hover:bg-violet-500/20" }, /* @__PURE__ */ import_react4.default.createElement(CopyIcon, null), copied ? t3("home.copied") : t3("home.copy_link")) : null) : null)) : bothHaveVideo ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, mainParticipantVideoOn ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement( 48366 ParticipantVideoFx, 48367 { 48368 track: mainParticipantVideo, 48369 mirrored: mainParticipant === localParticipant, 48370 muted: mainParticipant === localParticipant, 48371 effects: mainParticipant === localParticipant ? localFx : mainParticipant?.userData?.yano_fx, 48372 fit: "contain", 48373 className: "h-full w-full object-contain" 48374 } 48375 ), latestMessageFor(mainParticipant) ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute inset-x-4 top-4 z-[5]" }, /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessageFor(mainParticipant) })) : null) : /* @__PURE__ */ import_react4.default.createElement( 48376 ParticipantTile, 48377 { 48378 participant: mainParticipant, 48379 isLocal: mainParticipant === localParticipant, 48380 avatarUrl: avatarUrlForParticipant(mainParticipant, mainParticipant === localParticipant), 48381 fallbackLabel: mainParticipant === localParticipant ? localDisplayName : guestLabel, 48382 effectsOverride: mainParticipant === localParticipant ? localFx : null, 48383 hideOverlay: uiHidden, 48384 latestMessage: latestMessageFor(mainParticipant), 48385 onProfileTap: handleParticipantTap, 48386 dmInfo: participantDmInfo(mainParticipant, mainParticipant === localParticipant) 48387 } 48388 )) : neitherHasVideo ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex h-full items-center justify-center gap-16" }, /* @__PURE__ */ import_react4.default.createElement( 48389 AudioIndicator, 48390 { 48391 name: displayNameFor(leadRemote, guestLabel), 48392 avatarUrl: avatarUrlForParticipant(leadRemote, false), 48393 isLocal: false, 48394 speaking: remoteHasAudio, 48395 latestMessage: latestMessageFor(leadRemote), 48396 onTap: leadRemote ? () => handleParticipantTap(leadRemote, false) : null, 48397 dmInfo: participantDmInfo(leadRemote, false) 48398 } 48399 ), /* @__PURE__ */ import_react4.default.createElement( 48400 AudioIndicator, 48401 { 48402 name: localDisplayName, 48403 avatarUrl: avatarUrlForParticipant(localParticipant, true), 48404 isLocal: true, 48405 speaking: resolvedLocalAudio, 48406 latestMessage: latestMessageFor(localParticipant), 48407 onTap: localParticipant ? () => handleParticipantTap(localParticipant, true) : null, 48408 dmInfo: participantDmInfo(localParticipant, true) 48409 } 48410 )) : /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, remoteHasVideo ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement( 48411 ParticipantVideoFx, 48412 { 48413 track: videoTrackFor(leadRemote), 48414 mirrored: false, 48415 muted: false, 48416 effects: leadRemote?.userData?.yano_fx, 48417 fit: "contain", 48418 className: "h-full w-full object-contain" 48419 }
48420 ), latestMessageFor(leadRemote) ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute inset-x-4 top-4 z-[5]" }, /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessageFor(leadRemote) })) : null) : localHasVideo && videoTrackFor(localParticipant) ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement( 48421 ParticipantVideoFx, 48422 { 48423 track: videoTrackFor(localParticipant), 48424 mirrored: true, 48425 muted: true, 48426 effects: localFx, 48427 fit: "contain", 48428 className: "h-full w-full object-contain" 48429 } 48430 ), latestMessageFor(localParticipant) ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute inset-x-4 top-4 z-[5]" }, /* @__PURE__ */ import_react4.default.createElement(TileMessage, { message: latestMessageFor(localParticipant) })) : null) : /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex h-full items-center justify-center" }, /* @__PURE__ */ import_react4.default.createElement( 48431 ParticipantTile, 48432 { 48433 participant: remoteHasVideo ? localParticipant : leadRemote, 48434 isLocal: !remoteHasVideo, 48435 avatarUrl: avatarUrlForParticipant(remoteHasVideo ? localParticipant : leadRemote, !remoteHasVideo), 48436 fallbackLabel: remoteHasVideo ? localDisplayName : guestLabel, 48437 effectsOverride: !remoteHasVideo ? null : localFx, 48438 hideOverlay: uiHidden, 48439 latestMessage: latestMessageFor(remoteHasVideo ? localParticipant : leadRemote), 48440 onProfileTap: handleParticipantTap, 48441 dmInfo: participantDmInfo(remoteHasVideo ? localParticipant : leadRemote, !remoteHasVideo) 48442 }
48443 )), /* @__PURE__ */ import_react4.default.createElement("div", { "data-pip": true, className: "absolute bottom-4 right-4 z-10 flex items-center gap-2.5 rounded-2xl border border-violet-400/15 bg-[#1a0e2e]/80 px-3 py-2.5 shadow-2xl backdrop-blur-sm md:right-6" }, /* @__PURE__ */ import_react4.default.createElement( 48444 AvatarBadge, 48445 { 48446 name: remoteHasVideo ? localDisplayName : displayNameFor(leadRemote, guestLabel), 48447 avatarUrl: avatarUrlForParticipant(remoteHasVideo ? localParticipant : leadRemote, remoteHasVideo), 48448 className: `grid h-9 w-9 place-items-center rounded-full bg-violet-500/15 text-sm font-bold text-violet-200 ${remoteHasVideo ? resolvedLocalAudio ? "ring-2 ring-violet-400/30" : "" : remoteHasAudio ? "ring-2 ring-violet-400/30" : ""}`, 48449 imgClassName: "h-full w-full object-cover" 48450 } 48451 ), /* @__PURE__ */ import_react4.default.createElement("div", null, /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-xs font-bold text-violet-200" }, remoteHasVideo ? t3("call.you") : displayNameFor(leadRemote, guestLabel)), /* @__P
48451URE__ */ import_react4.default.createElement("p", { className: "text-[10px] text-violet-400/50" }, (remoteHasVideo ? resolvedLocalAudio : remoteHasAudio) ? t3("call.audio_on") : t3("call.muted"))))), leadRemote && bothHaveVideo && pipParticipant ? /* @__PURE__ */ import_react4.default.createElement( 48452 "button", 48453 { 48454 "data-pip": true, 48455 type: "button", 48456 className: "absolute bottom-4 right-4 z-10 h-24 w-32 overflow-hidden rounded-[1.15rem] border-2 border-violet-400/15 shadow-2xl transition-all duration-300 md:right-6 md:h-32 md:w-44", 48457 onClick: () => setSelfIsMain((value) => !value), 48458 "aria-label": t3("call.swap_main_video") 48459 }, 48460 /* @__PURE__ */ import_react4.default.createElement( 48461 ParticipantVideoFx, 48462 { 48463 track: pipVideo, 48464 mirrored: pipParticipant === localParticipant, 48465 muted: pipParticipant === localParticipant, 48466 effects: pipParticipant === localParticipant ? localFx : pipParticipant?.userData?.yano_fx, 48467 fit: "cover", 48468 className: "h-full w-full object-cover" 48469 } 48470 ), 48471 /* @__PURE__ */ import_react4.default.createElement("div", { className: "absolute bottom-2 left-2 rounded-2xl bg-[#1a0e2e]/80 px-2 py-0.5 text-[10px] font-bold text-violet-200 backdrop-blur-sm" }, pipParticipant === localParticipant ? t3("call.you") : pipName) 48472 ) : null) : videoParticipants.length === 0 ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex min-h-0 flex-1 items-center justify-center gap-10 sm:gap-16" }, participantTiles.map(({ key, participant }) => /* @__PURE__ */ import_react4.default.createElement( 48473 AudioIndicator, 48474 { 48475 key, 48476 name: displayNameFor(participant, key === "local" ? localDisplayName : guestLabel), 48477 avatarUrl: avatarUrlForParticipant(participant, key === "local"), 48478 speaking: hasPlayableTrack(participant, "audio"), 48479 latestMessage: latestMessageFor(participant), 48480 onTap: () => handleParticipantTap(participant, key === "local"), 48481 dmInfo: participantDmInfo(participant, key === "local") 48482 } 48483 ))) : videoParticipants.length < participantTiles.length ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex min-h-0 flex-1 flex-col gap-3 md:flex-row" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: `min-h-0 flex-1 ${videoParticipants.length === 1 ? "" : "grid grid-cols-1 gap-3 sm:grid-cols-2"}` }, videoParticipants.map(({ key, participant }) => /* @__PURE__ */ import_react4.default.createElement( 48484 ParticipantTile, 48485 { 48486 key, 48487 participant, 48488 isLocal: key === "local", 48489 avatarUrl: avatarUrlForParticipant(participant, key === "local"), 48490 fallbackLabel: key === "local" ? localDisplayName : guestLabel, 48491 effectsOverride: key === "local" ? localFx : null, 48492 hideOverlay: uiHidden, 48493 latestMessage: latestMessageFor(participant), 48494 onProfileTap: handleParticipantTap, 48495 dmInfo: participantDmInfo(participant, key === "local") 48496 } 48497 ))), /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex shrink-0 gap-3 md:w-48 md:flex-col md:justify-center" }, nonVideoParticipants.map(({ key, participant }) => { 48498 const dm = participantDmInfo(participant, key === "local"); 48499 return /* @__PURE__ */ import_react4.default.createElement( 48500 "button", 48501 { 48502 key, 48503 type: "button", 48504 onClick: () => handleParticipantTap(participant, key === "local"), 48505 className: "relative flex flex-1 items-center gap-2.5 rounded-2xl border border-violet-400/15 bg-violet-500/8 p-3 text-left transition hover:bg-violet-500/12 active:scale-[0.98] md:flex-col md:py-5 md:text-center", 48506 "aria-label": dm?.active ? t3("call.dm_active_indicator") : t3("call.profile_open_actions") 48507 },
48508 /* @__PURE__ */ import_react4.default.createElement( 48509 AvatarBadge, 48510 { 48511 name: displayNameFor(participant, key === "local" ? localDisplayName : guestLabel), 48512 avatarUrl: avatarUrlForParticipant(participant, key === "local"), 48513 className: `grid h-10 w-10 shrink-0 place-items-center rounded-full bg-violet-500/15 text-sm font-bold text-violet-200 ${hasPlayableTrack(participant, "audio") ? "ring-2 ring-violet-400/30" : ""}`, 48514 imgClassName: "h-full w-full object-cover" 48515 }, 48516 dm?.active ? /* @__PURE__ */ import_react4.default.createElement("span", { className: `yano-dm-dot ${dm.unread > 0 ? "" : "yano-dm-dot--read"}`, style: { top: "-3px", right: "-3px" } }, dm.unread > 0 ? dm.unread > 9 ? "9+" : dm.unread : null) : null 48517 ), 48518 /* @__PURE__ */ import_react4.default.createElement("div", { className: "min-w-0" }, /* @__PURE__ */ import_react4.default.createElement("p", { className: "truncate text-sm font-bold text-violet-200" }, displayNameFor(participant, key === "local" ? localDisplayName : guestLabel), key === "local" ? ` ${t3("call.you_suffix")}` : ""), /* @__PURE__ */ import_react4.default.createElement("p", { className: "text-[10px] text-violet-400/50" }, hasPlayableTrack(participant, "audio") ? t3("call.audio_on") : t3("call.muted"))) 48519 ); 48520 }))) : /* @__PURE__ */ import_react4.default.createElement("div", { className: `grid min-h-0 flex-1 gap-3 ${gridClassName}` }, participantTiles.map(({ key, participant }) => /* @__PURE__ */ import_react4.default.createElement( 48521 ParticipantTile, 48522 { 48523 key, 48524 participant, 48525 isLocal: key === "local", 48526 avatarUrl: avatarUrlForParticipant(participant, key === "local"), 48527 fallbackLabel: key === "local" ? localDisplayName : guestLabel, 48528 effectsOverride: key === "local" ? localFx : null, 48529 hideOverlay: uiHidden, 48530 latestMessage: latestMessageFor(participant), 48531 onProfileTap: handleParticipantTap, 48532 dmInfo: participantDmInfo(participant, key === "local") 48533 } 48534 )))), remoteAudioTracks.map(({ key, track: track2 }) => /* @__PURE__ */ import_react4.default.createElement(ParticipantAudio, { key, track: track2 })), /* @__PURE__ */ import_react4.default.createElement( 48535 "div", 48536 { 48537 "data-pip": true, 48538 className: `yano-ui-layer pointer-events-auto absolute inset-x-0 bottom-[5.25rem] z-10 px-4 ${uiHidden ? "yano-ui-layer--hidden" : ""}` 48539 }, 48540 /* @__PURE__ */ import_react4.default.createElement("div", { className: "mx-auto w-full max-w-lg" }, /* @__PURE__ */ import_react4.default.createElement( 48541 "div", 48542 { 48543 className: "grid transition-[grid-template-rows] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]", 48544 style: { gridTemplateRows: effectsOpen ? "1fr" : "0fr" } 48545 },
48546 /* @__PURE__ */ import_react4.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: `rounded-[1.35rem] border border-violet-500/12 bg-[#120826]/70 p-3 shadow-2xl backdrop-blur-md ${effectsOpen ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-1"} transition-[opacity,transform] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]` }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex flex-wrap gap-2" }, VIDEO_GRADES.map((effect) => { 48547 const selected = localFx.grade === effect.id; 48548 return /* @__PURE__ */ import_react4.default.createElement( 48549 "button", 48550 { 48551 key: effect.id, 48552 type: "button", 48553 onClick: () => updateLocalFx({ grade: effect.id }), 48554 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${selected ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 48555 title: t3(`effects.grade.${effect.id}`), 48556 "aria-pressed": selected 48557 }, 48558 t3(`effects.grade.${effect.id}`) 48559 ); 48560 })), /* @__PURE__ */ import_react4.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "h-px w-full bg-violet-500/10" }), /* @__PURE__ */ import_react4.default.createElement("div", { className: "mt-2 flex flex-wrap items-center gap-2" }, /* @__PURE__ */ import_react4.default.createElement( 48561 "button", 48562 { 48563 type: "button", 48564 onClick: () => updateLocalFx({ soft: !localFx.soft }), 48565 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${localFx.soft ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 48566 "aria-pressed": localFx.soft, 48567 title: t3("effects.soft") 48568 }, 48569 t3("effects.soft") 48570 ), /* @__PURE__ */ import_react4.default.createElement( 48571 "button", 48572 { 48573 type: "button", 48574 onClick: () => updateLocalFx({ vignette: !localFx.vignette }), 48575 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${localFx.vignette ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 48576 "aria-pressed": localFx.vignette, 48577 title: t3("effects.vignette") 48578 }, 48579 t3("effects.vignette") 48580 ), /* @__PURE__ */ import_react4.default.createElement( 48581 "button", 48582 { 48583 type: "button", 48584 onClick: () => updateLocalFx({ faceBlur: !localFx.faceBlur }), 48585 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${localFx.faceBlur ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 48586 "aria-pressed": localFx.faceBlur, 48587 title: t3("effects.face_viewer_side") 48588 }, 48589 t3("effects.face") 48590 ))), localFx.faceBlur ? /* @__PURE__ */ import_react4.default.createElement("div", { className: "mt-3 rounded-2xl border border-violet-500/12 bg-black/10 px-3 py-3" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "text-[11px] font-extrabold tracking-[0.14em] text-violet-200/90" }, t3("effects.face")), /* @__PURE__ */ import_react4.default.createElement("div", { className: "text-[11px] font-bold text-violet-300/60" }
48590, localFx.faceBlurPx, "px")), /* @__PURE__ */ import_react4.default.createElement( 48591 "input", 48592 { 48593 className: "yano-range mt-2 w-full", 48594 type: "range", 48595 min: "2", 48596 max: "9", 48597 step: "1", 48598 value: localFx.faceBlurPx, 48599 onChange: (event) => updateLocalFx({ faceBlurPx: Number(event.target.value) }), 48600 "aria-label": t3("effects.face_strength") 48601 } 48602 )) : null)) 48603 )) 48604 ), /* @__PURE__ */ import_react4.default.createElement("div", { className: `yano-ui-layer absolute inset-x-0 bottom-4 z-10 flex justify-center px-4 ${uiHidden || keyboardOpen ? "yano-ui-layer--hidden" : ""}` }, /* @__PURE__ */ import_react4.default.createElement("div", { className: "inline-flex items-center gap-3 text-white" }, /* @__PURE__ */ import_react4.default.createElement(ControlButton, { active: resolvedLocalAudio, label: resolvedLocalAudio ? t3("mic.on") : t3("mic.off"), onClick: toggleLocalAudio }, /* @__PURE__ */ import_react4.default.createElement(MicIcon, null)), /* @__P
48604URE__ */ import_react4.default.createElement(ControlButton, { active: resolvedLocalVideo, label: resolvedLocalVideo ? t3("video.on") : t3("video.off"), onClick: toggleLocalVideo }, /* @__PURE__ */ import_react4.default.createElement(VideoIcon, null)), /* @__PURE__ */ import_react4.default.createElement( 48605 ControlButton, 48606 { 48607 label: t3("effects.title"), 48608 onClick: () => setEffectsOpen((open) => !open), 48609 pressed: effectsOpen, 48610 className: effectsOpen ? "ring-2 ring-violet-400/35" : "" 48611 }, 48612 /* @__PURE__ */ import_react4.default.createElement(EffectsIcon, null) 48613 ), onToggleChat ? /* @__PURE__ */ import_react4.default.createElement(ControlButton, { label: chatOpen ? t3("call.close_chat") : t3("call.open_chat"), onClick: onToggleChat, className: chatOpen ? "ring-2 ring-violet-400/35" : "" }, /* @__PURE__ */ import_react4.default.createElement("span", { className: "relative inline-flex" }, /* @__PURE__ */ import_react4.default.createElement(ChatIcon, null), unreadCount > 0 ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "yano-chat-badge" }, unreadCount > 9 ? "9+" : unreadCount) : null)) : null, /* @__PURE__ */ import_react4.default.createElement( 48614 ControlButton, 48615 { 48616 label: participantsOpen ? t3("call.close_participants") : t3("call.open_participants"), 48617 onClick: () => setParticipantsOpen((open) => !open), 48618 className: showPendingJoinNotice ? "yano-call-control--attention" : "" 48619 }, 48620 /* @__PURE__ */ import_react4.default.createElement("span", { className: "relative inline-flex" }, /* @__PURE__ */ import_react4.default.createElement(UsersIcon_default, { className: "h-[1.125rem] w-[1.125rem]" }), showPendingJoinNotice ? /* @__PURE__ */ import_react4.default.createElement("span", { className: "yano-pending-badge", "aria-hidden": "true" }, pendingJoinCount > 9 ? "9+" : pendingJoinCount) : null, /* @__PURE__ */ import_react4.default.createElement("span", { className: "absolute -right-1.5 -top-1.5 grid h-4 min-w-4 place-items-center rounded-full bg-violet-400 px-1 text-[10px] font-bold leading-none text-[#1a0e2e]" }, participantTiles.length)) 48621 ), /* @__PURE__ */ import_react4.default.createElement(ControlButton, { danger: true, label: leaveArmed ? t3("call.confirm_leave") : t3("call.leave_room"), onClick: handleLeaveClick, wide: leaveArmed }, /* @__PURE__ */ import_react4.default.createElement(PhoneXMarkIcon_default, { className: "h-[1.125rem] w-[1.125rem]" })))), /* @__PURE__ */ import_react4.default.createElement(ParticipantActionSheet, { target: actionSheetTarget, onClose: closeActionSheet, onDm: openDm }), /* @__PURE__ */ import_react4.default.createElement( 48622 OneToOneDmPanel, 48623 { 48624 target: currentDmTarget, 48625 messages: currentDmMessages, 48626 loading: Boolean(currentDmConv?.loading), 48627 sending: Boolean(currentDmConv?.sending), 48628 error: currentDmConv?.error || "", 48629 onMinimize: minimizeDm, 48630 onSend: sendDmMessage, 48631 onAvatarTap: handleDmAvatarTap, 48632 formatTime: formatDmTime 48633 } 48634 ), /* @__PURE__ */ import_react4.default.createElement(DmPreviewToast, { toast: dmState.toast, onTap: handleToastTap, onDismiss: dismissDmToast })); 48635} 48636
48637// app/javascript/yano/components/CameraPreview.jsx 48638var import_react5 = __toESM(require_react()); 48639function isSecureEnoughForCamera() { 48640 return window.isSecureContext || window.location.hostname === "localhost" || window.location.hostname === "127.0.0.1"; 48641} 48642function useStatusMessage(status) { 48643 const { t: t3 } = useI18n(); 48644 switch (status) { 48645 case "unsupported": 48646 return t3("camera.status.unsupported"); 48647 case "insecure": 48648 return t3("camera.status.insecure"); 48649 case "denied": 48650 return t3("camera.status.denied"); 48651 case "error": 48652 return t3("camera.status.error"); 48653 case "loading": 48654 return t3("camera.status.loading"); 48655 case "off": 48656 return t3("camera.status.off"); 48657 case "idle": 48658 return t3("camera.status.idle"); 48659 default: 48660 return t3("camera.status.loading"); 48661 } 48662} 48663function initialsFor2(label) { 48664 const trimmed = label.trim(); 48665 if (/^\p{Emoji}/u.test(trimmed)) return trimmed; 48666 return trimmed.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => Array.from(part)[0]?.toUpperCase() || "").join("") || "Y"; 48667} 48668function MediaToggle({ active, label, onClick, children }) { 48669 return /* @__PURE__ */ import_react5.default.createElement( 48670 "button", 48671 { 48672 className: `yano-media-toggle ${active ? "" : "yano-media-toggle--off"}`.trim(), 48673 type: "button", 48674 onClick, 48675 "aria-pressed": !active, 48676 "aria-label": label, 48677 title: label 48678 }, 48679 children 48680 ); 48681} 48682function CameraPreview({ 48683 className = "", 48684 label = "", 48685 mirrored = true, 48686 minimal = false, 48687 vignette = false, 48688 faceBlur = false, 48689 canEditLabel = false, 48690 editingLabel = false, 48691 draftLabel = "", 48692 onDraftLabelChange, 48693 onEditLabel, 48694 onSaveLabel, 48695 onCancelLabel, 48696 videoEnabled = true, 48697 audioEnabled = true, 48698 onToggleVideo, 48699 onToggleAudio 48700}) { 48701 const videoRef = (0, import_react5.useRef)(null); 48702 const faceBlurCanvasRef = (0, import_react5.useRef)(null); 48703 const streamRef = (0, import_react5.useRef)(null); 48704 const audioTrackRef = (0, import_react5.useRef)(null); 48705 const [permissionRequested, setPermissionRequested] = (0, import_react5.useState)(false); 48706 const [status, setStatus] = (0, import_react5.useState)(videoEnabled ? "idle" : "off"); 48707 const [errorDetail, setErrorDetail] = (0, import_react5.useState)(""); 48708 const [attempt, setAttempt] = (0, import_react5.useState)(0); 48709 const [facingMode, setFacingMode] = (0, import_react5.useState)("user"); 48710 const [readyFlash, setReadyFlash] = (0, import_react5.useState)(false); 48711 const lastReadyRef = (0, import_react5.useRef)(false); 48712 const { t: t3 } = useI18n(); 48713 const statusMessage = useStatusMessage(status); 48714 (0, import_react5.useEffect)(() => {
48715 let cancelled = false; 48716 async function startPreview() { 48717 setErrorDetail(""); 48718 if (!videoEnabled) { 48719 if (streamRef.current) { 48720 streamRef.current.getTracks().forEach((track2) => track2.stop()); 48721 streamRef.current = null; 48722 } 48723 audioTrackRef.current = null; 48724 if (videoRef.current) { 48725 videoRef.current.srcObject = null; 48726 } 48727 setStatus("off"); 48728 return; 48729 } 48730 if (!permissionRequested) { 48731 if (streamRef.current) { 48732 streamRef.current.getTracks().forEach((track2) => track2.stop()); 48733 streamRef.current = null; 48734 } 48735 audioTrackRef.current = null; 48736 if (videoRef.current) { 48737 videoRef.current.srcObject = null; 48738 } 48739 setStatus("idle"); 48740 return; 48741 } 48742 setStatus("loading"); 48743 if (!navigator.mediaDevices?.getUserMedia) { 48744 setStatus("unsupported"); 48745 return; 48746 } 48747 if (!isSecureEnoughForCamera()) { 48748 setStatus("insecure"); 48749 return; 48750 } 48751 try { 48752 if (streamRef.current) { 48753 streamRef.current.getTracks().forEach((track2) => track2.stop()); 48754 streamRef.current = null; 48755 } 48756 audioTrackRef.current = null; 48757 const stream = await navigator.mediaDevices.getUserMedia({ 48758 video: { 48759 facingMode: { ideal: facingMode } 48760 }, 48761 // If the mic toggle is on, request mic permission together with camera so we don't 48762 // trigger a second permission prompt when the call provider asks for audio. 48763 audio: Boolean(audioEnabled) 48764 }); 48765 if (cancelled) { 48766 stream.getTracks().forEach((track2) => track2.stop()); 48767 return; 48768 } 48769 streamRef.current = stream; 48770 audioTrackRef.current = stream.getAudioTracks()[0] || null; 48771 if (!videoRef.current) { 48772 throw new Error(t3("camera.status.attach_failed")); 48773 } 48774 videoRef.current.srcObject = stream; 48775 await videoRef.current.play().catch(() => { 48776 }); 48777 setStatus("ready"); 48778 } catch (error2) { 48779 const nextStatus = error2?.name === "NotAllowedError" || error2?.name === "PermissionDeniedError" ? "denied" : "error"; 48780 setStatus(nextStatus); 48781 setErrorDetail(error2?.message || ""); 48782 } 48783 } 48784 startPreview(); 48785 return () => { 48786 cancelled = true; 48787 if (streamRef.current) { 48788 streamRef.current.getTracks().forEach((track2) => track2.stop()); 48789 streamRef.current = null; 48790 } 48791 audioTrackRef.current = null; 48792 }; 48793 }, [attempt, videoEnabled, facingMode, permissionRequested]); 48794 (0, import_react5.useEffect)(() => { 48795 let active = true; 48796 async function syncAudioTrack() { 48797 if (!videoEnabled) return; 48798 if (status !== "ready") return; 48799 if (!streamRef.current) return; 48800 const stream = streamRef.current; 48801 if (!audioEnabled) { 48802 const track2 = audioTrackRef.current; 48803 if (track2) { 48804 track2.enabled = false; 48805 try { 48806 track2.stop(); 48807 } catch (_3) { 48808 } 48809 } 48810 audioTrackRef.current = null; 48811 stream.getAudioTracks().forEach((t4) => stream.removeTrack(t4)); 48812 return; 48813 } 48814 if (audioTrackRef.current && audioTrackRef.current.readyState !== "ended") { 48815 audioTrackRef.current.enabled = true; 48816 return; 48817 } 48818 try { 48819 const audioStream = await navigator.mediaDevices.getUserMedia({ audio: true, video: false }); 48820 if (!active) { 48821 audioStream.getTracks().forEach((t4) => t4.stop()); 48822 return; 48823 } 48824 const track2 = audioStream.getAudioTracks()[0] || null; 48825 if (!track2) { 48826 audioStream.getTracks().forEach((t4) => t4.stop()); 48827 return; 48828 } 48829 stream.addTrack(track2); 48830 audioTrackRef.current = track2; 48831 audioStream.getTracks().forEach((t4) => t4 !== track2 && t4.stop()); 48832 } catch (_error) { 48833 } 48834 } 48835 syncAudioTrack(); 48836 return () => { 48837 active = false; 48838 }; 48839 }, [audioEnabled, status, videoEnabled]); 48840 const ready = status === "ready"; 48841 const shouldMirror = mirrored && facingMode === "user"; 48842 const initials = (0, import_react5.useMemo)(() => initialsFor2(label), [label]); 48843 const showPlaceholder = !videoEnabled || !ready; 48844 useFaceBlurOverlay({ 48845 enabled: Boolean(faceBlur && !showPlaceholder), 48846 sourceVideoRef: videoRef, 48847 overlayRef: faceBlurCanvasRef, 48848 holdMs: 1200, 48849 lerpA: 0.22, 48850 fit: "cover" 48851 }); 48852 (0, import_react5.useEffect)(() => { 48853 const lastReady = lastReadyRef.current; 48854 lastReadyRef.current = ready; 48855 if (!videoEnabled) return; 48856 if (ready && !lastReady) { 48857 setReadyFlash(true); 48858 const timeout = window.setTimeout(() => setReadyFlash(false), 220); 48859 return () => window.clearTimeout(timeout); 48860 } 48861 }, [ready, videoEnabled]); 48862 return /* @__PURE__ */ import_react5.default.createElement("div", { className: `relative overflow-hidden rounded-[calc(2rem-2px)] bg-[#130a22] ${className}` }
48862, /* @__PURE__ */ import_react5.default.createElement( 48863 "video", 48864 { 48865 ref: videoRef, 48866 autoPlay: true, 48867 playsInline: true, 48868 muted: true, 48869 className: `yano-camera-video h-full w-full object-cover ${shouldMirror ? "scale-x-[-1]" : ""} ${showPlaceholder ? "hidden" : "block"}` 48870 } 48871 ), faceBlur && !showPlaceholder ? /* @__PURE__ */ import_react5.default.createElement( 48872 "canvas", 48873 { 48874 ref: faceBlurCanvasRef, 48875 className: `yano-camera-faceblur yano-camera-canvas pointer-events-none absolute inset-0 h-full w-full ${shouldMirror ? "scale-x-[-1]" : ""}` 48876 } 48877 ) : null, /* @__PURE__ */ import_react5.default.createElement( 48878 "div", 48879 { 48880 "aria-hidden": true, 48881 className: `pointer-events-none absolute inset-0 yano-preview-vignette ${vignette && !showPlaceholder ? "yano-preview-vignette--on" : ""}` 48882 } 48883 ), !showPlaceholder ? /* @__PURE__ */ import_react5.default.createElement( 48884 "button", 48885 { 48886 type: "button", 48887 className: "absolute bottom-3 left-3 z-10 grid h-9 w-9 place-items-center rounded-full bg-black/40 text-white/80 backdrop-blur-sm transition hover:bg-black/55 hover:text-white active:scale-90", 48888 onClick: () => setFacingMode((current) => current === "user" ? "environment" : "user"), 48889 "aria-label": t3("camera.flip") 48890 }, 48891 /* @__PURE__ */ import_react5.default.createElement(ArrowPathIcon_default, { className: "h-4.5 w-4.5" }) 48892 ) : null, showPlaceholder ? /* @__PURE__ */ import_react5.default.createElement("div", { className: "flex h-full min-h-0 items-center justify-center bg-[radial-gradient(circle_at_50%_30%,rgba(139,92,246,0.18),transparent_60%)] p-4 text-center text-violet-200" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "max-w-sm" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "mx-auto grid h-16 w-16 place-items-center rounded-full border-2 border-violet-400/20 bg-violet-500/12 text-2xl font-extrabold text-violet-300" }, videoEnabled ? status === "idle" ? /* @__PURE__ */ import_react5.default.createElement(VideoIcon, null) : initials : /* @__PURE__ */ import_react5.default.createElement(VideoOffIcon, null)), /* @__P
48892URE__ */ import_react5.default.createElement("p", { className: "mt-3 font-display text-lg leading-none text-violet-200 sm:text-xl" }, videoEnabled ? status === "idle" ? t3("camera.idle.title") : t3("camera.check") : t3("camera.off")), videoEnabled && status === "idle" ? /* @__PURE__ */ import_react5.default.createElement("p", { className: "mt-1.5 text-xs font-semibold text-violet-400/50 sm:text-sm" }, t3("camera.idle.hint")) : videoEnabled ? /* @__PURE__ */ import_react5.default.createElement("p", { className: "mt-1.5 text-xs font-semibold text-violet-400/50 sm:text-sm" }, statusMessage) : null, errorDetail ? /* @__PURE__ */ import_react5.default.createElement("p", { className: "mt-1.5 text-xs text-violet-400/40" }, errorDetail) : null, videoEnabled && status === "idle" ? /* @__PURE__ */ import_react5.default.createElement( 48893 "button", 48894 { 48895 className: "mt-3 rounded-xl border-2 border-violet-400/30 bg-violet-500/25 px-4 py-2.5 text-sm font-extrabold text-violet-100 transition hover:bg-violet-500/40", 48896 type: "button", 48897 onClick: () => setPermissionRequested(true) 48898 }, 48899 t3("camera.idle.button") 48900 ) : videoEnabled && !ready ? /* @__PURE__ */ import_react5.default.createElement("button", { className: "mt-3 rounded-xl border-2 border-violet-500/20 bg-violet-500/12 px-4 py-2.5 text-sm font-extrabold text-violet-200 transition hover:bg-violet-500/20", type: "button", onClick: () => setAttempt((value) => value + 1) }, t3("camera.retry")) : null)) : null, /* @__PURE__ */ import_react5.default.createElement("div", { className: `absolute top-4 flex items-start gap-3 ${minimal ? "right-4" : "inset-x-4 justify-between"}` }, !minimal ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, editingLabel ? /* @__P
48900URE__ */ import_react5.default.createElement("div", { className: "flex min-w-0 flex-1 items-center gap-2 rounded-full bg-black/40 px-3 py-2 text-sm text-white backdrop-blur-sm" }, /* @__PURE__ */ import_react5.default.createElement( 48901 "input", 48902 { 48903 type: "text", 48904 value: draftLabel, 48905 onChange: (event) => onDraftLabelChange?.(event.target.value), 48906 onKeyDown: (event) => { 48907 if (event.key === "Enter") onSaveLabel?.(); 48908 if (event.key === "Escape") onCancelLabel?.(); 48909 }, 48910 placeholder: t3("camera.guest_name_placeholder"), 48911 className: "min-w-0 flex-1 bg-transparent text-sm text-white outline-none placeholder:text-white/45", 48912 autoFocus: true 48913 } 48914 ), /* @__PURE__ */ import_react5.default.createElement("button", { className: "rounded-full bg-white/14 px-3 py-1.5 text-xs font-semibold text-white transition hover:bg-white/20", type: "button", onClick: onSaveLabel }, t3("camera.save_name"))) : /* @__PURE__ */ import_react5.default.createElement("div", { className: "inline-flex max-w-full items-center gap-2 rounded-full bg-black/40 px-3 py-2 text-sm text-white backdrop-blur-sm" }, /* @__PURE__ */ import_react5.default.createElement("span", { className: "truncate" }
48914, label), canEditLabel ? /* @__PURE__ */ import_react5.default.createElement( 48915 "button", 48916 { 48917 className: "inline-flex h-7 w-7 items-center justify-center rounded-full bg-white/14 text-white transition hover:bg-white/20", 48918 type: "button", 48919 onClick: onEditLabel, 48920 "aria-label": t3("camera.edit_name") 48921 }, 48922 /* @__PURE__ */ import_react5.default.createElement(EditIcon, null) 48923 ) : null)) : null, /* @__PURE__ */ import_react5.default.createElement("div", { className: `inline-flex items-center gap-2 rounded-full bg-black/40 px-3 py-2 font-semibold text-white/90 backdrop-blur-sm ${minimal ? "text-[11px]" : "text-xs"}` }, /* @__PURE__ */ import_react5.default.createElement("span", { className: `h-2.5 w-2.5 rounded-full ${readyFlash ? "yano-dot-pop" : ""} ${videoEnabled && ready ? "bg-[var(--lime)]" : "bg-white/45"}` }), videoEnabled ? ready ? t3("camera.ready") : statusMessage : t3("camera.off"))), !minimal ? /* @__PURE__ */ import_react5.default.createElement("div", { className: "absolute inset-x-0 bottom-4 flex justify-center px-4" }, /* @__PURE__ */ import_react5.default.createElement("div", { className: "inline-flex items-center gap-3 text-white" }, /* @__PURE__ */ import_react5.default.createElement(MediaToggle, { active: audioEnabled, label: audioEnabled ? t3("mic.on") : t3("mic.off"), onClick: onToggleAudio }, /* @__PURE__ */ import_react5.default.createElement(MicIcon, null)), /* @__P
48923URE__ */ import_react5.default.createElement(MediaToggle, { active: videoEnabled, label: videoEnabled ? t3("video.on") : t3("video.off"), onClick: onToggleVideo }, /* @__PURE__ */ import_react5.default.createElement(VideoIcon, null)))) : null); 48924} 48925
48926// app/javascript/yano/userState.js 48927function mergeUserIntoRoom(room, user) { 48928 if (!room || !user?.id) return room; 48929 let changed = false; 48930 const nextHost = room.host?.id === user.id ? mergeIfChanged(room.host, { 48931 display_name: user.display_name 48932 }, () => { 48933 changed = true; 48934 }) : room.host; 48935 const nextMembers = Array.isArray(room.members) ? room.members.map((member) => { 48936 if (member?.id !== user.id) return member; 48937 return mergeIfChanged(member, { 48938 display_name: user.display_name, 48939 avatar_url: user.avatar_url || null, 48940 gender: user.gender, 48941 bio: user.bio, 48942 languages: user.languages 48943 }, () => { 48944 changed = true; 48945 }); 48946 }) : room.members; 48947 return changed ? { ...room, host: nextHost, members: nextMembers } : room; 48948} 48949function mergeUserIntoMessages(messages, user) { 48950 if (!Array.isArray(messages) || !user?.id) return messages; 48951 let changed = false; 48952 const nextMessages = messages.map((message) => { 48953 if (message?.sender?.id !== user.id) return message; 48954 const nextSender = mergeIfChanged(message.sender, { 48955 display_name: user.display_name, 48956 avatar_url: user.avatar_url || null 48957 }, () => { 48958 changed = true; 48959 }); 48960 return nextSender === message.sender ? message : { ...message, sender: nextSender }; 48961 }); 48962 return changed ? nextMessages : messages; 48963} 48964function mergeIfChanged(current, updates, onChange) { 48965 let next = current; 48966 Object.entries(updates).forEach(([key, value]) => { 48967 if (value === void 0 || current?.[key] === value) return; 48968 if (next === current) next = { ...current }; 48969 next[key] = value; 48970 }); 48971 if (next !== current) onChange?.(); 48972 return next; 48973} 48974
48975// app/javascript/yano/App.jsx 48976var EMPTY_FORM = { 48977 display_name: "", 48978 gender: "", 48979 bio: "" 48980}; 48981var AVATAR_ACCEPT = "image/png,image/jpeg,image/webp,image/gif"; 48982var AVATAR_ALLOWED_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif"]; 48983var AVATAR_MAX_BYTES = 5 * 1024 * 1024; 48984var AVATAR_MIN_DIMENSION = 96; 48985var AVATAR_CROP_PREVIEW_SIZE = 176; 48986var AVATAR_ZOOM_MIN = 1; 48987var AVATAR_ZOOM_MAX = 3; 48988function clamp(value, min, max) { 48989 return Math.min(Math.max(value, min), max); 48990} 48991function buildInitialAvatarCrop(width, height) { 48992 const size = Math.min(width, height); 48993 return { 48994 x: Math.max(Math.round((width - size) / 2), 0), 48995 y: Math.max(Math.round((height - size) / 2), 0), 48996 size 48997 }; 48998} 48999function avatarZoomValue(selection) { 49000 const minSide = Math.min(selection.width, selection.height); 49001 return clamp(minSide / selection.size, AVATAR_ZOOM_MIN, AVATAR_ZOOM_MAX); 49002} 49003function applyAvatarZoom(selection, zoom) { 49004 const minSide = Math.min(selection.width, selection.height); 49005 const nextZoom = clamp(Number(zoom), AVATAR_ZOOM_MIN, AVATAR_ZOOM_MAX); 49006 const nextSize = clamp(minSide / nextZoom, minSide / AVATAR_ZOOM_MAX, minSide); 49007 const centerX = selection.x + selection.size / 2; 49008 const centerY = selection.y + selection.size / 2; 49009 return { 49010 ...selection, 49011 size: nextSize, 49012 x: clamp(centerX - nextSize / 2, 0, selection.width - nextSize), 49013 y: clamp(centerY - nextSize / 2, 0, selection.height - nextSize) 49014 }; 49015} 49016function avatarCropPayload(selection) { 49017 return { 49018 x: Number((selection.x / selection.width).toFixed(6)), 49019 y: Number((selection.y / selection.height).toFixed(6)), 49020 width: Number((selection.size / selection.width).toFixed(6)), 49021 height: Number((selection.size / selection.height).toFixed(6)) 49022 }; 49023} 49024function avatarPreviewStyle(selection, frameSize = AVATAR_CROP_PREVIEW_SIZE) { 49025 const scale = frameSize / selection.size; 49026 return { 49027 width: `${selection.width * scale}px`, 49028 height: `${selection.height * scale}px`, 49029 transform: `translate(${-selection.x * scale}px, ${-selection.y * scale}px)` 49030 }; 49031} 49032function loadImageDimensions(source) { 49033 return new Promise((resolve, reject) => { 49034 const image = new window.Image(); 49035 image.onload = () => resolve({ 49036 width: image.naturalWidth, 49037 height: image.naturalHeight 49038 }); 49039 image.onerror = () => reject(new Error("image_load_failed")); 49040 image.src = source; 49041 }); 49042} 49043function avatarHueFromName(name) { 49044 const value = (name || "").trim(); 49045 if (!value) return 320; 49046 let hash = 0; 49047 for (let i3 = 0; i3 < value.length; i3 += 1) { 49048 hash = hash * 31 + value.charCodeAt(i3) | 0; 49049 } 49050 return Math.abs(hash) % 360; 49051} 49052function avatarInitial(name) { 49053 const value = (name || "").trim(); 49054 if (!value) return "?"; 49055 const codePoint = value.codePointAt(0); 49056 return String.fromCodePoint(codePoint).toUpperCase(); 49057} 49058function ProfileGenderIcon2({ value }) { 49059 if (value === "woman") { 49060 return /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-5 w-5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "10", cy: "7", r: "3.2" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M10 10.4v6.1M7.2 13.7H12.8" })); 49061 } 49062 if (value === "man") { 49063 return /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-5 w-5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "7.2", cy: "12.8", r: "3.2" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M9.8 10.2L15.2 4.8M11.4 4.8H15.2V8.6" })); 49064 } 49065 return /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-5 w-5", fill: "none", stroke: "currentColor", strokeWidth: "1.9", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "10", cy: "10", r: "6" }
49065), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M7.6 12.4c.7.7 1.5 1 2.4 1s1.7-.3 2.4-1M8 8.1h.01M12 8.1h.01" })); 49066} 49067function mergeMessages(existing, incoming, prepend = false) { 49068 const merged = prepend ? [...incoming, ...existing] : [...existing, ...incoming]; 49069 const byId = /* @__PURE__ */ new Map(); 49070 merged.forEach((message) => { 49071 byId.set(message.id, message); 49072 }); 49073 return Array.from(byId.values()).sort((left, right) => left.id - right.id); 49074} 49075function currentRoomCodeFromPath() { 49076 const match = window.location.pathname.match(/^\/rooms\/([A-Za-z0-9_-]+)$/); 49077 return match?.[1]?.toUpperCase() || ""; 49078} 49079function setRoomPath(code) { 49080 const nextPath = code ? `/rooms/${code}` : "/"; 49081 if (window.location.pathname !== nextPath) { 49082 window.history.pushState({}, "", nextPath); 49083 } 49084} 49085var PREJOIN_GRADES = VIDEO_GRADES; 49086function normalizeProfile(user = {}) { 49087 return { 49088 display_name: user.display_name || "", 49089 gender: user.gender || "", 49090 bio: user.bio || "" 49091 }; 49092} 49093function loadStoredSession() { 49094 try { 49095 const raw = window.localStorage.getItem(STORAGE_KEY); 49096 return raw ? JSON.parse(raw) : null; 49097 } catch (_error) { 49098 return null; 49099 } 49100} 49101function saveStoredSession(session2) { 49102 if (!session2) { 49103 window.localStorage.removeItem(STORAGE_KEY); 49104 return; 49105 } 49106 window.localStorage.setItem(STORAGE_KEY, JSON.stringify(session2)); 49107} 49108function ProfileAvatar({ name, avatarUrl, size = 44 }) { 49109 if (avatarUrl) { 49110 return /* @__PURE__ */ import_react6.default.createElement( 49111 "img", 49112 { 49113 src: avatarUrl, 49114 alt: "", 49115 className: "shrink-0 rounded-full object-cover shadow-[0_6px_16px_rgba(10,4,24,0.45),inset_0_1px_0_rgba(255,255,255,0.45)]", 49116 style: { width: size, height: size } 49117 } 49118 ); 49119 } 49120 const initial = avatarInitial(name); 49121 const hue = avatarHueFromName(name); 49122 const style = { 49123 width: size, 49124 height: size, 49125 background: `linear-gradient(140deg, oklch(0.78 0.16 ${hue}), oklch(0.66 0.18 ${(hue + 38) % 360}))`, 49126 fontSize: Math.round(size * 0.42) 49127 }; 49128 return /* @__PURE__ */ import_react6.default.createElement( 49129 "span", 49130 { 49131 className: "font-display inline-flex shrink-0 items-center justify-center rounded-full font-extrabold text-[#1a0e2e] shadow-[0_6px_16px_rgba(10,4,24,0.45),inset_0_1px_0_rgba(255,255,255,0.45)]", 49132 style, 49133 "aria-hidden": "true" 49134 }, 49135 initial 49136 ); 49137} 49138function ProfileSheet({ 49139 open, 49140 initialProfile, 49141 avatarUrl, 49142 hasExistingSession, 49143 saving, 49144 errorMessage, 49145 onSave, 49146 onAvatarUpload, 49147 onAvatarCropUpdate, 49148 onAvatarRemove, 49149 onClose, 49150 onClearError 49151}) { 49152 const { t: t3 } = useI18n(); 49153 const [draft, setDraft] = (0, import_react6.useState)(initialProfile); 49154 const [avatarDraft, setAvatarDraft] = (0, import_react6.useState)(null); 49155 const [avatarError, setAvatarError] = (0, import_react6.useState)(""); 49156 const [avatarSaving, setAvatarSaving] = (0, import_react6.useState)(false); 49157 const [avatarRemoving, setAvatarRemoving] = (0, import_react6.useState)(false); 49158 const [avatarDragging, setAvatarDragging] = (0, import_react6.useState)(false); 49159 const wasOpenRef = (0, import_react6.useRef)(false); 49160 const dialogRef = (0, import_react6.useRef)(null); 49161 const nameInputRef = (0, import_react6.useRef)(null); 49162 const fileInputRef = (0, import_react6.useRef)(null); 49163 const avatarDragRef = (0, import_react6.useRef)(null); 49164 (0, import_react6.useEffect)(() => { 49165 if (open && !wasOpenRef.current) { 49166 setDraft(initialProfile); 49167 setAvatarDraft(null); 49168 setAvatarError(""); 49169 setAvatarSaving(false); 49170 setAvatarRemoving(false); 49171 setAvatarDragging(false); 49172 } 49173 wasOpenRef.current = open; 49174 }, [open, initialProfile]); 49175 (0, import_react6.useEffect)(() => { 49176 const previewUrl = avatarDraft?.previewUrl; 49177 return () => { 49178 if (previewUrl) { 49179 window.URL.revokeObjectURL(previewUrl); 49180 } 49181 }; 49182 }, [avatarDraft?.previewUrl]); 49183 (0, import_react6.useEffect)(() => { 49184 if (!open) return; 49185 const previouslyFocused = document.activeElement; 49186 const id = window.requestAnimationFrame(() => { 49187 nameInputRef.current?.focus({ preventScroll: true }); 49188 }); 49189 const previousOverflow = document.body.style.overflow; 49190 document.body.style.overflow = "hidden"; 49191 function handleKey(event) { 49192 if (event.key !== "Escape" || saving || avatarSaving || avatarRemoving) return; 49193 event.preventDefault(); 49194 if (avatarDraft) clearAvatarDraft(); 49195 else onClose(); 49196 } 49197 window.addEventListener("keydown", handleKey); 49198 return () => { 49199 window.cancelAnimationFrame(id); 49200 window.removeEventListener("keydown", handleKey); 49201 document.body.style.overflow = previousOverflow; 49202 if (previouslyFocused && typeof previouslyFocused.focus === "function") { 49203 try { 49204 previouslyFocused.focus({ preventScroll: true }); 49205 } catch (_e3) { 49206 } 49207 } 49208 }; 49209 }, [open, avatarDraft, hasExistingSession, saving, avatarSaving, avatarRemoving, onClose]); 49210 if (!open) return null;
49211 const trimmedName = draft.display_name.trim(); 49212 const busy = saving || avatarSaving || avatarRemoving; 49213 const canSave = Boolean(trimmedName) && !busy; 49214 const bioLength = draft.bio.length; 49215 const canManageAvatar = !busy; 49216 function updateField(field, value) { 49217 if (errorMessage) onClearError(); 49218 setDraft((current) => ({ ...current, [field]: value })); 49219 } 49220 function handleBackdropClick() { 49221 if (busy) return; 49222 if (avatarDraft) { 49223 clearAvatarDraft(); 49224 return; 49225 } 49226 onClose(); 49227 } 49228 async function handleSubmit(event) { 49229 event.preventDefault(); 49230 if (!canSave) return; 49231 const stagedAvatar = !hasExistingSession && avatarDraft ? avatarDraft : null; 49232 await onSave({ 49233 display_name: trimmedName, 49234 gender: draft.gender, 49235 bio: draft.bio.trim() 49236 }, stagedAvatar); 49237 } 49238 function openFilePicker() { 49239 if (!canManageAvatar) return; 49240 setAvatarError(""); 49241 if (avatarDraft && !avatarDraft.editing) { 49242 setAvatarDraft((current) => current ? { ...current, editing: true } : current); 49243 return; 49244 } 49245 fileInputRef.current?.click(); 49246 } 49247 async function handleAvatarFileChange(event) { 49248 const file = event.target.files?.[0]; 49249 event.target.value = ""; 49250 if (!file) return; 49251 if (!AVATAR_ALLOWED_TYPES.includes(file.type)) { 49252 setAvatarError(t3("profile.error.avatar_invalid_type")); 49253 return; 49254 } 49255 if (file.size > AVATAR_MAX_BYTES) { 49256 setAvatarError(t3("profile.error.avatar_too_large")); 49257 return; 49258 } 49259 const previewUrl = window.URL.createObjectURL(file); 49260 try { 49261 const { width, height } = await loadImageDimensions(previewUrl); 49262 if (Math.min(width, height) < AVATAR_MIN_DIMENSION) { 49263 throw new Error("avatar_too_small"); 49264 } 49265 const crop = buildInitialAvatarCrop(width, height); 49266 const nextDraft = { 49267 file, 49268 previewUrl, 49269 width, 49270 height, 49271 editing: true, 49272 ...crop 49273 }; 49274 setAvatarDraft(nextDraft); 49275 setAvatarError(""); 49276 } catch (uploadError) { 49277 window.URL.revokeObjectURL(previewUrl); 49278 setAvatarError( 49279 uploadError?.message === "avatar_too_small" ? t3("profile.error.avatar_too_small") : t3("profile.error.avatar_load_failed") 49280 ); 49281 } 49282 } 49283 function updateAvatarZoom(value) { 49284 setAvatarDraft((current) => { 49285 if (!current) return current; 49286 const next = applyAvatarZoom(current, value); 49287 if (next.size === current.size && next.x === current.x && next.y === current.y) return current; 49288 return { ...next, hasChanges: true }; 49289 }); 49290 setAvatarError(""); 49291 } 49292 function clearAvatarDraft() { 49293 setAvatarDraft(null); 49294 setAvatarError(""); 49295 setAvatarDragging(false); 49296 avatarDragRef.current = null; 49297 } 49298 function handleAvatarCropPointerDown(event) { 49299 if (!avatarDraft || busy) return; 49300 event.preventDefault(); 49301 event.currentTarget.setPointerCapture?.(event.pointerId); 49302 avatarDragRef.current = { 49303 pointerId: event.pointerId, 49304 clientX: event.clientX, 49305 clientY: event.clientY, 49306 cropX: avatarDraft.x, 49307 cropY: avatarDraft.y 49308 }; 49309 setAvatarDragging(true); 49310 setAvatarError(""); 49311 } 49312 function handleAvatarCropPointerMove(event) { 49313 if (!avatarDraft || !avatarDragRef.current) return; 49314 if (avatarDragRef.current.pointerId !== event.pointerId) return; 49315 event.preventDefault(); 49316 const dragState = avatarDragRef.current; 49317 const scale = AVATAR_CROP_PREVIEW_SIZE / avatarDraft.size; 49318 const deltaX = (event.clientX - dragState.clientX) / scale; 49319 const deltaY = (event.clientY - dragState.clientY) / scale; 49320 setAvatarDraft((current) => { 49321 if (!current) return current; 49322 const nextX = clamp(dragState.cropX - deltaX, 0, current.width - current.size); 49323 const nextY = clamp(dragState.cropY - deltaY, 0, current.height - current.size); 49324 if (nextX === current.x && nextY === current.y) return current; 49325 return { 49326 ...current, 49327 x: nextX, 49328 y: nextY, 49329 hasChanges: true 49330 }; 49331 }); 49332 } 49333 function handleAvatarCropPointerUp(event) { 49334 if (avatarDragRef.current?.pointerId !== event.pointerId) return; 49335 event.currentTarget.releasePointerCapture?.(event.pointerId); 49336 avatarDragRef.current = null; 49337 setAvatarDragging(false); 49338 } 49339 async function handleUploadAvatar(nextDraft = avatarDraft) { 49340 if (!nextDraft || !hasExistingSession) return false;
49341 setAvatarSaving(true); 49342 setAvatarError(""); 49343 try { 49344 await onAvatarUpload( 49345 nextDraft.file, 49346 avatarCropPayload(nextDraft), 49347 { width: nextDraft.width, height: nextDraft.height } 49348 ); 49349 return true; 49350 } catch (uploadError) { 49351 setAvatarError(uploadError?.message || t3("profile.error.avatar_failed")); 49352 return false; 49353 } finally { 49354 setAvatarSaving(false); 49355 } 49356 } 49357 async function handleUpdateAvatarCrop(nextDraft = avatarDraft) { 49358 if (!nextDraft || !nextDraft.uploaded || !hasExistingSession) return false; 49359 setAvatarSaving(true); 49360 setAvatarError(""); 49361 try { 49362 await onAvatarCropUpdate(avatarCropPayload(nextDraft)); 49363 return true; 49364 } catch (uploadError) { 49365 setAvatarError(uploadError?.message || t3("profile.error.avatar_failed")); 49366 return false; 49367 } finally { 49368 setAvatarSaving(false); 49369 } 49370 } 49371 async function handleSaveAvatarDraft() { 49372 if (!avatarDraft) return; 49373 if (!hasExistingSession) { 49374 setAvatarDraft((current) => current ? { ...current, editing: false, hasChanges: false } : current); 49375 return; 49376 } 49377 const saved = avatarDraft.uploaded ? await handleUpdateAvatarCrop(avatarDraft) : await handleUploadAvatar(avatarDraft); 49378 if (saved) clearAvatarDraft(); 49379 } 49380 async function handleRemoveAvatar() { 49381 if (!hasExistingSession) return; 49382 setAvatarRemoving(true); 49383 setAvatarError(""); 49384 try { 49385 await onAvatarRemove(); 49386 setAvatarDraft(null); 49387 } catch (uploadError) { 49388 setAvatarError(uploadError?.message || t3("profile.error.avatar_remove_failed")); 49389 } finally { 49390 setAvatarRemoving(false); 49391 } 49392 } 49393 function renderPhotoStage() { 49394 if (avatarDraft?.editing) { 49395 return /* @__PURE__ */ import_react6.default.createElement( 49396 "div", 49397 { 49398 className: `yano-profile-photo__crop ${avatarDragging ? "yano-profile-photo__crop--dragging" : ""}`, 49399 onPointerDown: handleAvatarCropPointerDown, 49400 onPointerMove: handleAvatarCropPointerMove, 49401 onPointerUp: handleAvatarCropPointerUp, 49402 onPointerCancel: handleAvatarCropPointerUp 49403 },
49404 /* @__PURE__ */ import_react6.default.createElement( 49405 "img", 49406 { 49407 src: avatarDraft.previewUrl, 49408 alt: "", 49409 className: "yano-profile-photo__image", 49410 style: avatarPreviewStyle(avatarDraft), 49411 draggable: "false", 49412 onDragStart: (event) => event.preventDefault() 49413 } 49414 ), 49415 /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__crop-mask", "aria-hidden": "true" }) 49416 ); 49417 } 49418 if (avatarDraft) { 49419 return /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__inner yano-profile-photo__inner--staged" }, /* @__PURE__ */ import_react6.default.createElement( 49420 "img", 49421 { 49422 className: "yano-profile-photo__image", 49423 src: avatarDraft.previewUrl, 49424 alt: "", 49425 style: avatarPreviewStyle(avatarDraft, 140), 49426 draggable: "false" 49427 } 49428 ), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__plus", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 14 14", className: "h-3.5 w-3.5", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M7 2.5v9M2.5 7h9" })))); 49429 } 49430 if (avatarUrl) { 49431 return /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__inner yano-profile-photo__inner--image" }, /* @__PURE__ */ import_react6.default.createElement("img", { className: "yano-profile-photo__image", src: avatarUrl, alt: "" }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__plus", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 14 14", className: "h-3.5 w-3.5", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M7 2.5v9M2.5 7h9" })))); 49432 } 49433 return /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__ring" }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__aura" }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__inner" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 28 28", className: "h-8 w-8", fill: "none", stroke: "currentColor", strokeWidth: "1.7", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M5 9.2h3.2l1.6-2.2h8.4l1.6 2.2H23a1.6 1.6 0 0 1 1.6 1.6v9.4a1.6 1.6 0 0 1-1.6 1.6H5a1.6 1.6 0 0 1-1.6-1.6v-9.4A1.6 1.6 0 0 1 5 9.2Z" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "14", cy: "15.2", r: "3.6" })), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__plus", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 14 14", className: "h-3.5 w-3.5", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M7 2.5v9M2.5 7h9" }))))); 49434 } 49435 const genderOptions = [ 49436 { value: "woman", label: t3("profile.gender.woman") }, 49437 { value: "man", label: t3("profile.gender.man") }, 49438 { value: "unspecified", label: t3("profile.gender.unspecified") } 49439 ]; 49440 return /* @__PURE__ */ import_react6.default.createElement("div", { className: "fixed inset-0 z-[400] flex items-end justify-center sm:items-center sm:p-6" }, /* @__PURE__ */ import_react6.default.createElement( 49441 "button", 49442 { 49443 type: "button", 49444 "aria-label": t3("profile.close"), 49445 onClick: handleBackdropClick, 49446 className: "yano-profile-backdrop absolute inset-0 cursor-default" 49447 }
49448 ), /* @__PURE__ */ import_react6.default.createElement( 49449 "div", 49450 { 49451 ref: dialogRef, 49452 role: "dialog", 49453 "aria-modal": "true", 49454 "aria-labelledby": "profile-sheet-title", 49455 className: "yano-profile-sheet relative flex max-h-[min(94vh,720px)] w-full max-w-[420px] flex-col" 49456 }, 49457 /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-sheet__handle", "aria-hidden": "true" }), 49458 /* @__PURE__ */ import_react6.default.createElement("form", { onSubmit: handleSubmit, className: "flex min-h-0 flex-1 flex-col" }, /* @__PURE__ */ import_react6.default.createElement("header", { className: "flex items-start justify-between gap-3 px-6 pb-2 pt-2 sm:pt-5" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react6.default.createElement("h2", { id: "profile-sheet-title", className: "font-display text-[clamp(1.65rem,6vw,2rem)] font-extrabold leading-[0.98] tracking-[-0.035em] text-white" }, hasExistingSession ? t3("profile.title_edit") : t3("profile.title_new"))), /* @__PURE__ */ import_react6.default.createElement( 49459 "button", 49460 { 49461 type: "button", 49462 onClick: onClose, 49463 disabled: busy, 49464 "aria-label": t3("profile.close"), 49465 className: "yano-profile-sheet__close shrink-0" 49466 },
49467 /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 20 20", className: "h-4 w-4", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M5 5l10 10M15 5L5 15" })) 49468 )), avatarDraft?.editing ? /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-4 pt-6" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-photo yano-profile-photo--editing" }, /* @__PURE__ */ import_react6.default.createElement( 49469 "input", 49470 { 49471 ref: fileInputRef, 49472 type: "file", 49473 accept: AVATAR_ACCEPT, 49474 className: "sr-only", 49475 onChange: handleAvatarFileChange 49476 } 49477 ), /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-photo__stage", "aria-hidden": "true" }, renderPhotoStage()), /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-photo__editor" }, /* @__PURE__ */ import_react6.default.createElement("label", { className: "yano-profile-photo__range" }, /* @__PURE__ */ import_react6.default.createElement("span", null, t3("profile.photo_zoom")), /* @__PURE__ */ import_react6.default.createElement( 49478 "input", 49479 { 49480 type: "range", 49481 min: AVATAR_ZOOM_MIN, 49482 max: AVATAR_ZOOM_MAX, 49483 step: "0.01", 49484 value: avatarZoomValue(avatarDraft), 49485 onChange: (event) => updateAvatarZoom(event.target.value), 49486 disabled: busy 49487 } 49488 ))), avatarError ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3 rounded-2xl border border-red-400/30 bg-red-500/10 px-4 py-3 text-[13px] font-semibold text-red-100" }
49488, avatarError) : null)), /* @__PURE__ */ import_react6.default.createElement("footer", { className: "flex gap-3 px-6 pb-[max(1.1rem,env(safe-area-inset-bottom))] pt-3" }, /* @__PURE__ */ import_react6.default.createElement( 49489 "button", 49490 { 49491 type: "button", 49492 onClick: clearAvatarDraft, 49493 disabled: busy, 49494 className: "yano-button yano-button--secondary flex-1" 49495 }, 49496 t3("profile.photo_cancel") 49497 ), /* @__PURE__ */ import_react6.default.createElement( 49498 "button", 49499 { 49500 type: "button", 49501 onClick: handleSaveAvatarDraft, 49502 disabled: busy, 49503 className: "yano-button yano-button--primary flex-1" 49504 }, 49505 avatarSaving ? t3("profile.photo_uploading") : t3("profile.photo_save") 49506 ))) : /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("div", { className: "min-h-0 flex-1 overflow-y-auto px-6 pb-2 pt-3" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex justify-center" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-photo" }, /* @__PURE__ */ import_react6.default.createElement( 49507 "input", 49508 { 49509 ref: fileInputRef, 49510 type: "file", 49511 accept: AVATAR_ACCEPT, 49512 className: "sr-only", 49513 onChange: handleAvatarFileChange 49514 } 49515 ), /* @__PURE__ */ import_react6.default.createElement( 49516 "button", 49517 { 49518 type: "button", 49519 onClick: openFilePicker, 49520 disabled: !canManageAvatar, 49521 "aria-label": t3("profile.add_photo"), 49522 title: t3("profile.add_photo"), 49523 className: "yano-profile-photo__button group" 49524 },
49525 /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__stage", "aria-hidden": "true" }, renderPhotoStage()) 49526 ), avatarSaving || avatarRemoving ? /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-photo__caption" }, avatarSaving ? t3("profile.photo_uploading") : t3("profile.photo_removing")) : null, avatarError ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3 rounded-2xl border border-red-400/30 bg-red-500/10 px-4 py-3 text-[13px] font-semibold text-red-100" }, avatarError) : null, avatarUrl || avatarDraft ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "yano-profile-photo__actions" }, /* @__PURE__ */ import_react6.default.createElement( 49527 "button", 49528 { 49529 type: "button", 49530 onClick: avatarUrl ? handleRemoveAvatar : clearAvatarDraft, 49531 disabled: !canManageAvatar, 49532 className: "yano-profile-photo__action" 49533 }, 49534 avatarRemoving ? t3("profile.photo_removing") : t3("profile.photo_remove")
49535 )) : null)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-7" }, /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "profile-name", className: "yano-profile-label" }, t3("profile.name_label"), " ", /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[var(--melon)]" }, "*")), /* @__PURE__ */ import_react6.default.createElement( 49536 "input", 49537 { 49538 id: "profile-name", 49539 ref: nameInputRef, 49540 type: "text", 49541 inputMode: "text", 49542 autoComplete: "given-name", 49543 maxLength: 40, 49544 value: draft.display_name, 49545 onChange: (event) => updateField("display_name", event.target.value), 49546 placeholder: t3("profile.name_placeholder"), 49547 className: "yano-profile-input mt-2" 49548 } 49549 )), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-5" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "grid grid-cols-3 gap-2", role: "group", "aria-label": t3("profile.gender_label") }, genderOptions.map((option) => { 49550 const active = draft.gender === option.value; 49551 return /* @__PURE__ */ import_react6.default.createElement( 49552 "button", 49553 { 49554 key: option.value, 49555 type: "button", 49556 onClick: () => updateField("gender", option.value), 49557 "aria-pressed": active, 49558 className: `yano-profile-chip yano-profile-chip--${option.value} ${active ? "yano-profile-chip--active" : ""}` 49559 },
49560 /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-chip__icon" }, /* @__PURE__ */ import_react6.default.createElement(ProfileGenderIcon2, { value: option.value })), 49561 /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-chip__label" }, option.label) 49562 ); 49563 }))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-5" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-baseline justify-between gap-3" }, /* @__PURE__ */ import_react6.default.createElement("label", { htmlFor: "profile-bio", className: "yano-profile-label" }, t3("profile.bio_label"), /* @__PURE__ */ import_react6.default.createElement("span", { className: "ml-1.5 text-[10px] font-bold tracking-[0.16em] text-violet-300/40" }, t3("profile.bio_optional"))), /* @__PURE__ */ import_react6.default.createElement("span", { className: `text-[10px] font-bold tabular-nums ${bioLength >= 180 ? "text-[var(--melon)]" : "text-violet-300/40"}` }
49563, bioLength, "/200")), /* @__PURE__ */ import_react6.default.createElement( 49564 "textarea", 49565 { 49566 id: "profile-bio", 49567 value: draft.bio, 49568 onChange: (event) => updateField("bio", event.target.value.slice(0, 200)), 49569 placeholder: t3("profile.bio_placeholder"), 49570 rows: 3, 49571 className: "yano-profile-input yano-profile-input--textarea mt-2" 49572 } 49573 )), errorMessage ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-4 rounded-2xl border border-red-400/30 bg-red-500/10 px-4 py-3 text-[13px] font-semibold text-red-100" }, errorMessage) : null), /* @__PURE__ */ import_react6.default.createElement("footer", { className: "px-6 pb-[max(1.1rem,env(safe-area-inset-bottom))] pt-3" }, /* @__PURE__ */ import_react6.default.createElement( 49574 "button", 49575 { 49576 type: "submit", 49577 disabled: !canSave, 49578 className: "yano-button yano-button--primary" 49579 }, 49580 saving ? t3("profile.saving") : hasExistingSession ? t3("profile.cta_edit") : t3("profile.cta_new") 49581 )))) 49582 )); 49583} 49584var EFFECTS_IMAGES = ["/effects-1.webp", "/effects-2.webp", "/effects-3.webp"]; 49585function EffectsShowcase() { 49586 const [index, setIndex] = (0, import_react6.useState)(0); 49587 (0, import_react6.useEffect)(() => { 49588 const interval = window.setInterval(() => setIndex((i3) => (i3 + 1) % EFFECTS_IMAGES.length), 800); 49589 return () => window.clearInterval(interval); 49590 }, []); 49591 return /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative aspect-[4/3] w-full max-w-xs overflow-hidden rounded-2xl border border-white/8 sm:w-64" }, EFFECTS_IMAGES.map((src, i3) => /* @__PURE__ */ import_react6.default.createElement( 49592 "img", 49593 { 49594 key: src, 49595 src, 49596 alt: "", 49597 loading: "lazy", 49598 className: "absolute inset-0 h-full w-full object-cover transition-opacity duration-150 ease-in-out", 49599 style: { opacity: i3 === index ? 1 : 0 } 49600 } 49601 ))); 49602} 49603function StatusBanner({ tone = "neutral", children }) { 49604 const className = [ 49605 "rounded-[1rem] border px-4 py-3 text-sm font-semibold", 49606 tone === "error" ? "border-red-500/30 bg-red-500/14 text-red-100" : "", 49607 tone === "success" ? "border-violet-500/30 bg-violet-500/14 text-violet-100" : "", 49608 tone === "neutral" ? "border-zinc-700 bg-zinc-900 text-zinc-300" : "" 49609 ].filter(Boolean).join(" "); 49610 return /* @__PURE__ */ import_react6.default.createElement("div", { className }, children); 49611} 49612function EndedScreen({ room, onRejoin, onReturnHome, submitting = false }) { 49613 const { t: t3 } = useI18n(); 49614 return /* @__PURE__ */ import_react6.default.createElement("section", { className: "grid min-h-0 flex-1 place-items-center p-4" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-md text-center" }, /* @__PURE__ */ import_react6.default.createElement("p", { className: "font-display text-[clamp(2.4rem,9vw,3.6rem)] font-extrabold leading-[1] tracking-[-0.04em] text-violet-100" }, t3("ended.heading")), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-sm font-semibold text-violet-400/70 sm:text-base" }, room?.title ? t3("ended.room_ended", { title: room.title }) : t3("ended.left")), room?.code ? /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-xs font-extrabold uppercase tracking-[0.18em] text-violet-500/50" }, "Room ", room.code) : null, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-10 grid gap-3" }, /* @__PURE__ */ import_react6.default.createElement("button", { className: "yano-button yano-button--primary", type: "button", disabled: submitting, onClick: onRejoin }, submitting ? t3("ended.rejoining") : t3("ended.rejoin")), /* @__P
49614URE__ */ import_react6.default.createElement("button", { className: "yano-button yano-button--secondary", type: "button", onClick: onReturnHome }, t3("ended.home"))))); 49615} 49616function App() { 49617 const { t: t3, locale } = useI18n(); 49618 const storedSession = loadStoredSession(); 49619 const [session2, setSession] = (0, import_react6.useState)(storedSession); 49620 const [profile, setProfile] = (0, import_react6.useState)(() => normalizeProfile(storedSession?.user || EMPTY_FORM)); 49621 const [profileSheetOpen, setProfileSheetOpen] = (0, import_react6.useState)(false); 49622 const [profileSheetSaving, setProfileSheetSaving] = (0, import_react6.useState)(false); 49623 const [profileSheetError, setProfileSheetError] = (0, import_react6.useState)(""); 49624 const [inviteRoom, setInviteRoom] = (0, import_react6.useState)(null); 49625 const [roomCode, setRoomCode] = (0, import_react6.useState)(currentRoomCodeFromPath()); 49626 const [copied, setCopied] = (0, import_react6.useState)(false); 49627 const [notice, setNotice] = (0, import_react6.useState)(""); 49628 const [error2, setError] = (0, import_react6.useState)(""); 49629 const [submitting, setSubmitting] = (0, import_react6.useState)(false); 49630 const [roomLoading, setRoomLoading] = (0, import_react6.useState)(false); 49631 const [meetingStarted, setMeetingStarted] = (0, import_react6.useState)(false); 49632 const [endedRoom, setEndedRoom] = (0, import_react6.useState)(null); 49633 const [mediaPreferences, setMediaPreferences] = (0, import_react6.useState)({ 49634 audioEnabled: true, 49635 videoEnabled: true 49636 }); 49637 const [prejoinEffectsOpen, setPrejoinEffectsOpen] = (0, import_react6.useState)(false); 49638 const [prejoinGrade, setPrejoinGrade] = (0, import_react6.useState)(() => { 49639 try { 49640 const legacy = localStorage.getItem("yano_prejoin_effect"); 49641 if (legacy && PREJOIN_GRADES.some((item) => item.id === legacy)) return legacy; 49642 if (legacy === "portrait") return "pop"; 49643 return localStorage.getItem("yano_prejoin_grade") || "pop"; 49644 } catch (_error) { 49645 return "pop"; 49646 } 49647 }); 49648 const [prejoinSoftEnabled, setPrejoinSoftEnabled] = (0, import_react6.useState)(() => { 49649 try { 49650 const legacy = localStorage.getItem("yano_prejoin_effect"); 49651 if (legacy === "portrait") return true; 49652 const stored = localStorage.getItem("yano_prejoin_soft"); 49653 return stored ? stored === "1" : false; 49654 } catch (_error) { 49655 return false; 49656 } 49657 }); 49658 const [prejoinVignetteEnabled, setPrejoinVignetteEnabled] = (0, import_react6.useState)(() => { 49659 try { 49660 const stored = localStorage.getItem("yano_prejoin_vignette"); 49661 return stored ? stored === "1" : true; 49662 } catch (_error) { 49663 return true; 49664 } 49665 }); 49666 const [prejoinFaceBlurEnabled, setPrejoinFaceBlurEnabled] = (0, import_react6.useState)(() => { 49667 try { 49668 const stored = localStorage.getItem("yano_prejoin_face_blur"); 49669 return stored ? stored === "1" : false; 49670 } catch (_error) { 49671 return false; 49672 } 49673 }); 49674 const [prejoinFaceBlurAmount, setPrejoinFaceBlurAmount] = (0, import_react6.useState)(() => { 49675 try { 49676 const raw = localStorage.getItem("yano_prejoin_face_blur_amount"); 49677 const value = raw ? Number(raw) : 6; 49678 if (!Number.isFinite(value)) return 6; 49679 return Math.min(9, Math.max(2, Math.round(value))); 49680 } catch (_error) { 49681 return 6; 49682 } 49683 }); 49684 const [chatMessages, setChatMessages] = (0, import_react6.useState)([]); 49685 const [chatOpen, setChatOpen] = (0, import_react6.useState)(false); 49686 const [unreadCount, setUnreadCount] = (0, import_react6.useState)(0); 49687 const [chatHasMore, setChatHasMore] = (0, import_react6.useState)(false); 49688 const [chatLoading, setChatLoading] = (0, import_react6.useState)(false); 49689 const [chatConnected, setChatConnected] = (0, import_react6.useState)(false); 49690 const [chatOverlayTick, setChatOverlayTick] = (0, import_react6.useState)(0); 49691 const [joinByCodeOpen, setJoinByCodeOpen] = (0, import_react6.useState)(false); 49692 const [joinCodeDraft, setJoinCodeDraft] = (0, import_react6.useState)(""); 49693 const chatConnectionRef = (0, import_react6.useRef)(null); 49694 const chatOpenRef = (0, import_react6.useRef)(false); 49695 const currentUserIdRef = (0, import_react6.useRef)(storedSession?.user?.id || null); 49696 const pendingProfileActionRef = (0, import_react6.useRef)(null);
49697 const inviteJoined = inviteRoom?.membership?.status === "joined"; 49698 const invitePending = inviteRoom?.membership?.status === "pending"; 49699 (0, import_react6.useEffect)(() => { 49700 bootstrap(); 49701 }, []); 49702 (0, import_react6.useEffect)(() => { 49703 if (!roomCode) { 49704 setInviteRoom(null); 49705 setMeetingStarted(false); 49706 return; 49707 } 49708 loadRoom(roomCode); 49709 }, [roomCode, session2?.api_token]); 49710 (0, import_react6.useEffect)(() => { 49711 setCopied(false); 49712 }, [inviteRoom?.code]); 49713 (0, import_react6.useEffect)(() => { 49714 chatOpenRef.current = chatOpen; 49715 if (chatOpen) { 49716 setUnreadCount(0); 49717 } 49718 }, [chatOpen]); 49719 (0, import_react6.useEffect)(() => { 49720 currentUserIdRef.current = session2?.user?.id || null; 49721 }, [session2?.user?.id]); 49722 (0, import_react6.useEffect)(() => { 49723 if (roomCode) { 49724 setEndedRoom(null); 49725 } 49726 }, [roomCode]); 49727 (0, import_react6.useEffect)(() => { 49728 let cancelled = false; 49729 function teardownChat(clearState = true) { 49730 if (chatConnectionRef.current) { 49731 chatConnectionRef.current.unsubscribe(); 49732 chatConnectionRef.current = null; 49733 } 49734 setChatConnected(false); 49735 if (clearState) { 49736 setChatMessages([]); 49737 setChatHasMore(false); 49738 setUnreadCount(0); 49739 setChatOpen(false); 49740 setChatLoading(false); 49741 } 49742 } 49743 async function bootstrapChat() { 49744 if (!session2?.api_token || !inviteRoom?.code || !inviteJoined && !invitePending) { 49745 teardownChat(); 49746 return; 49747 } 49748 teardownChat(false); 49749 setChatMessages([]); 49750 setChatHasMore(false); 49751 setUnreadCount(0); 49752 try { 49753 const connection = subscribeToRoomChannel(session2.api_token, inviteRoom.code, { 49754 onConnected() { 49755 if (!cancelled) { 49756 setChatConnected(true); 49757 } 49758 }, 49759 onDisconnected() { 49760 if (!cancelled) { 49761 setChatConnected(false); 49762 } 49763 }, 49764 onRejected() { 49765 setChatConnected(false); 49766 setError(t3("app.chat_connection_rejected")); 49767 }, 49768 onEvent(data) { 49769 if (data?.type === "new_message" && data.message) { 49770 setChatMessages((current) => mergeMessages(current, [{ ...data.message, _receivedAt: Date.now() }])); 49771 if (!chatOpenRef.current && data.message.sender.id !== currentUserIdRef.current) { 49772 setUnreadCount((count) => count + 1); 49773 } 49774 return; 49775 } 49776 if (data?.type === "member_joined" && data.member) { 49777 setInviteRoom((current) => { 49778 if (!current) return current; 49779 const nextPresenceCount = Number.isFinite(Number(data.presence_count)) ? Number(data.presence_count) : current.presence_count; 49780 const members = current.members || []; 49781 const existing = members.find((m3) => m3.id === data.member.id); 49782 if (existing) { 49783 return { 49784 ...current, 49785 presence_count: nextPresenceCount, 49786 members: members.map((m3) => m3.id === data.member.id ? { ...m3, ...data.member, present_in_call: true } : m3) 49787 }; 49788 } 49789 return { ...current, presence_count: nextPresenceCount, members: [...members, { ...data.member, present_in_call: true }] }; 49790 }); 49791 return; 49792 } 49793 if (data?.type === "member_left" && data.user_id) { 49794 setInviteRoom((current) => { 49795 if (!current) return current; 49796 const nextPresenceCount = Number.isFinite(Number(data.presence_count)) ? Number(data.presence_count) : current.presence_count; 49797 return { 49798 ...current, 49799 presence_count: nextPresenceCount, 49800 members: (current.members || []).map((m3) => m3.id === data.user_id ? { ...m3, present_in_call: false } : m3) 49801 }; 49802 }); 49803 return; 49804 } 49805 if (data?.type === "chat_error" && data.error) { 49806 setError(data.error); 49807 return; 49808 } 49809 if (data?.type === "room_locked") { 49810 setInviteRoom((current) => current ? { ...current, locked: true, locked_at: data.locked_at } : current); 49811 return; 49812 } 49813 if (data?.type === "room_unlocked") { 49814 setInviteRoom((current) =>
49814 current ? { ...current, locked: false, locked_at: null } : current); 49815 return; 49816 } 49817 if (data?.type === "member_kicked") { 49818 if (data.user_id === currentUserIdRef.current) { 49819 handleLeaveRoom(); 49820 return; 49821 } 49822 setInviteRoom((current) => { 49823 if (!current) return current; 49824 return { ...current, members: (current.members || []).filter((m3) => m3.id !== data.user_id) }; 49825 }); 49826 return; 49827 } 49828 if (data?.type === "member_muted") { 49829 setInviteRoom((current) => { 49830 if (!current) return current; 49831 return { 49832 ...current, 49833 members: (current.members || []).map( 49834 (m3) => m3.id === data.user_id ? { ...m3, muted_by_host: data.muted } : m3 49835 ) 49836 }; 49837 }); 49838 return; 49839 } 49840 if (data?.type === "member_requested") { 49841 setInviteRoom((current) => { 49842 if (!current) return current; 49843 const pending = current.pending_members || []; 49844 if (pending.some((m3) => m3.id === data.user_id)) return current; 49845 return { ...current, pending_members: [...pending, { id: data.user_id, display_name: data.display_name }] }; 49846 }); 49847 return; 49848 } 49849 if (data?.type === "join_approved") { 49850 if (data.user_id === currentUserIdRef.current) { 49851 refreshRoom(); 49852 return; 49853 } 49854 setInviteRoom((current) => { 49855 if (!current) return current; 49856 const pending = (current.pending_members || []).filter((m3) => m3.id !== data.user_id); 49857 const alreadyMember = (current.members || []).some((m3) => m3.id === data.user_id); 49858 const members = alreadyMember ? current.members : [...current.members || [], { id: data.user_id, display_name: data.display_name, role: "guest", muted_by_host: false }]; 49859 return { ...current, pending_members: pending, members }; 49860 }); 49861 return; 49862 } 49863 if (data?.type === "join_denied") { 49864 if (data.user_id === currentUserIdRef.current) { 49865 setInviteRoom(null); 49866 setRoomCode(""); 49867 setRoomPath(""); 49868 setError(t3("home.join_denied")); 49869 return; 49870 } 49871 setInviteRoom((current) => { 49872 if (!current) return current; 49873 return { ...current, pending_members: (current.pending_members || []).filter((m3) => m3.id !== data.user_id) }; 49874 }); 49875 return; 49876 } 49877 } 49878 }); 49879 if (cancelled) { 49880 connection.unsubscribe(); 49881 return; 49882 } 49883 chatConnectionRef.current = connection; 49884 if (inviteJoined) { 49885 setChatLoading(true); 49886 const payload = await api.getRoomMessages(session2.api_token, inviteRoom.code); 49887 if (cancelled) return; 49888 setChatMessages((current) => mergeMessages(current, payload.messages || [], true)); 49889 setChatHasMore(Boolean(payload.has_more)); 49890 } 49891 } catch (event) { 49892 if (!cancelled) { 49893 setChatConnected(false); 49894 setError(event.message); 49895 } 49896 } finally { 49897 if (!cancelled) { 49898 setChatLoading(false); 49899 } 49900 } 49901 } 49902 bootstrapChat(); 49903 return () => { 49904 cancelled = true; 49905 teardownChat(); 49906 }; 49907 }, [session2?.api_token, inviteRoom?.code, inviteJoined, invitePending, t3]); 49908 const stageJoin = inviteRoom?.join; 49909 const inMeeting = Boolean(stageJoin && meetingStarted); 49910 const previewName = session2?.user?.display_name || profile.display_name || t3("call.guest"); 49911 const localVideoEffects = (0, import_react6.useMemo)( 49912 () => normalizeVideoEffects({ 49913 grade: prejoinGrade, 49914 soft: prejoinSoftEnabled, 49915 vignette: prejoinVignetteEnabled, 49916 faceBlur: prejoinFaceBlurEnabled, 49917 faceBlurPx: prejoinFaceBlurAmount 49918 }), 49919 [prejoinGrade, prejoinSoftEnabled, prejoinVignetteEnabled, prejoinFaceBlurEnabled, prejoinFaceBlurAmount] 49920 ); 49921 const roomMembers = inviteRoom?.members || []; 49922 const termsHref = locale === "en" ? "/terms" : `/terms?lang=${encodeURIComponent(locale)}`; 49923 const marketingUseCases = [ 49924 t3("home.marketing.use_case.study_group"), 49925 t3("home.marketing.use_case.game_night"), 49926 t3("home.marketing.use_case.standup"),
49927 t3("home.marketing.use_case.watch_party"), 49928 t3("home.marketing.use_case.catch_up"), 49929 t3("home.marketing.use_case.jam_session"), 49930 t3("home.marketing.use_case.book_club"), 49931 t3("home.marketing.use_case.coworking") 49932 ]; 49933 const stageTitle = inviteRoom?.title || t3("app.room_default_title"); 49934 const prejoinHeading = (0, import_react6.useMemo)(() => { 49935 if (roomLoading) return t3("home.heading.loading"); 49936 if (!inviteRoom) return t3("home.heading.default"); 49937 if (invitePending) return t3("home.heading.pending"); 49938 if (!inviteJoined) return t3("home.heading.join"); 49939 return t3("home.heading.joined"); 49940 }, [inviteJoined, invitePending, inviteRoom, roomLoading, t3]); 49941 const prejoinBody = (0, import_react6.useMemo)(() => { 49942 if (roomLoading) return t3("home.body.loading"); 49943 if (!inviteRoom) return t3("home.body.default"); 49944 if (invitePending) return t3("home.body.pending"); 49945 if (!inviteJoined) return t3("home.body.join"); 49946 const countRaw = inviteRoom?.presence_count; 49947 const count = Number.isFinite(Number(countRaw)) ? Number(countRaw) : roomMembers.length; 49948 const people = count === 1 ? t3("home.people_one") : t3("home.people_other"); 49949 return `${count} ${people} ${t3("home.body.joined_in_room")}`; 49950 }, [inviteJoined, invitePending, inviteRoom, roomLoading, roomMembers.length, t3]); 49951 const primaryActionLabel = (0, import_react6.useMemo)(() => { 49952 if (roomLoading) return t3("home.cta.opening"); 49953 if (!inviteRoom) return t3("home.cta.create"); 49954 if (invitePending) return t3("home.cta.pending"); 49955 if (!inviteJoined) return t3("home.cta.join"); 49956 return t3("home.cta.enter"); 49957 }, [inviteJoined, invitePending, inviteRoom, roomLoading, t3]); 49958 async function bootstrap() { 49959 if (!storedSession?.api_token) return; 49960 try { 49961 const me3 = await api.getMe(storedSession.api_token); 49962 persistSessionUser(me3.user, storedSession.api_token); 49963 } catch (event) { 49964 saveStoredSession(null); 49965 setSession(null); 49966 setInviteRoom(null); 49967 setProfile(EMPTY_FORM); 49968 setError(event.message); 49969 } 49970 } 49971 function persistSessionUser(user, apiToken = session2?.api_token || user?.api_token) { 49972 const nextSession = { 49973 api_token: apiToken, 49974 user 49975 }; 49976 saveStoredSession(nextSession); 49977 setSession(nextSession); 49978 setProfile(normalizeProfile(user)); 49979 setInviteRoom((current) => mergeUserIntoRoom(current, user)); 49980 setChatMessages((current) => mergeUserIntoMessages(current, user)); 49981 return nextSession; 49982 } 49983 async function ensureSession() { 49984 if (!session2?.api_token) { 49985 setProfileSheetError(""); 49986 setProfileSheetOpen(true); 49987 throw new Error(t3("home.error.profile_required")); 49988 } 49989 return session2; 49990 } 49991 function openProfileSheet() { 49992 setProfileSheetError(""); 49993 setProfileSheetOpen(true); 49994 } 49995 function closeProfileSheet() { 49996 if (profileSheetSaving) return; 49997 pendingProfileActionRef.current = null; 49998 setProfileSheetOpen(false); 49999 setProfileSheetError(""); 50000 } 50001 function queueProfileAction(action) { 50002 pendingProfileActionRef.current = action; 50003 openProfileSheet(); 50004 } 50005 async function createRoomWithSession(activeSession) { 50006 const payload = await api.createRoom(activeSession.api_token, {}); 50007 setInviteRoom(payload.room); 50008 setRoomCode(payload.room.code); 50009 setRoomPath(payload.room.code); 50010 setNotice(""); 50011 setMeetingStarted(true); 50012 setEndedRoom(null); 50013 } 50014 async function joinRoomByCodeWithSession(activeSession, code) { 50015 const payload = await api.joinRoom(activeSession.api_token, code); 50016 setInviteRoom(payload.room); 50017 setRoomCode(payload.room.code); 50018 setMeetingStarted(true); 50019 setEndedRoom(null); 50020 setChatOpen(false); 50021 } 50022 async function resumePendingProfileAction(activeSession) { 50023 const pendingAction = pendingProfileActionRef.current; 50024 pendingProfileActionRef.current = null; 50025 if (!pendingAction) return; 50026 setSubmitting(true); 50027 setError(""); 50028 setNotice(""); 50029 try { 50030 if (pendingAction.type === "create_room") { 50031 await createRoomWithSession(activeSession); 50032 } else if (pendingAction.type === "join_room" && pendingAction.code) {
50033 await joinRoomByCodeWithSession(activeSession, pendingAction.code); 50034 } 50035 } catch (event) { 50036 setError(event.message); 50037 } finally { 50038 setSubmitting(false); 50039 } 50040 } 50041 async function handleSaveProfile(payload, stagedAvatar = null) { 50042 setProfileSheetSaving(true); 50043 setProfileSheetError(""); 50044 try { 50045 const result = session2?.api_token ? await api.updateMe(session2.api_token, payload) : await api.createSession(payload); 50046 const token = session2?.api_token || result.user.api_token; 50047 let user = result.user; 50048 if (stagedAvatar) { 50049 try { 50050 const avatarResult = await api.uploadAvatar( 50051 token, 50052 stagedAvatar.file, 50053 avatarCropPayload(stagedAvatar), 50054 { width: stagedAvatar.width, height: stagedAvatar.height } 50055 ); 50056 user = avatarResult.user; 50057 } catch (avatarError) { 50058 console.error("avatar upload failed after signup", avatarError); 50059 } 50060 } 50061 const persisted = persistSessionUser(user, token); 50062 setProfileSheetOpen(false); 50063 await resumePendingProfileAction(persisted); 50064 } catch (event) { 50065 setProfileSheetError(event.message || t3("profile.error.save_failed")); 50066 } finally { 50067 setProfileSheetSaving(false); 50068 } 50069 } 50070 async function handleProfileAvatarUpload(file, crop, source) { 50071 const result = await api.uploadAvatar(session2.api_token, file, crop, source); 50072 persistSessionUser(result.user, session2.api_token); 50073 return result.user; 50074 } 50075 async function handleProfileAvatarCropUpdate(crop) { 50076 const result = await api.updateAvatarCrop(session2.api_token, crop); 50077 persistSessionUser(result.user, session2.api_token); 50078 return result.user; 50079 } 50080 async function handleProfileAvatarRemove() { 50081 const result = await api.deleteAvatar(session2.api_token); 50082 persistSessionUser(result.user, session2.api_token); 50083 return result.user; 50084 } 50085 async function loadRoom(code) { 50086 setRoomLoading(true); 50087 setError(""); 50088 try { 50089 const payload = await api.getRoom(code, session2?.api_token); 50090 setInviteRoom(payload.room); 50091 } catch (event) { 50092 setInviteRoom(null); 50093 if (event?.code === "room_not_found") { 50094 setError(t3("home.error.room_not_found")); 50095 } else { 50096 setError(event.message); 50097 } 50098 } finally { 50099 setRoomLoading(false); 50100 } 50101 } 50102 async function handleCreateRoom() { 50103 setSubmitting(true); 50104 setError(""); 50105 setNotice(""); 50106 try { 50107 const activeSession = await ensureSession(); 50108 await createRoomWithSession(activeSession); 50109 } catch (event) { 50110 setError(event.message); 50111 } finally { 50112 setSubmitting(false); 50113 } 50114 } 50115 async function handleJoinRoom() { 50116 await handleJoinRoomFromCode(roomCode); 50117 } 50118 function handleEnterRoom() { 50119 setMeetingStarted(true); 50120 setNotice(""); 50121 setError(""); 50122 } 50123 async function handleLeaveRoom() { 50124 if (!session2?.api_token || !inviteRoom?.code) return; 50125 setSubmitting(true); 50126 setError(""); 50127 try { 50128 const endedSnapshot = inviteRoom ? { 50129 code: inviteRoom.code, 50130 title: inviteRoom.title, 50131 share_url: inviteRoom.share_url 50132 } : null; 50133 await api.leaveRoom(session2.api_token, inviteRoom.code); 50134 setEndedRoom(endedSnapshot); 50135 setInviteRoom(null); 50136 setRoomCode(""); 50137 setCopied(false); 50138 setMeetingStarted(false); 50139 setChatOpen(false); 50140 setRoomPath(""); 50141 setNotice(""); 50142 } catch (event) { 50143 setError(event.message); 50144 } finally { 50145 setSubmitting(false); 50146 } 50147 } 50148 async function handleLockRoom() { 50149 if (!session2?.api_token || !inviteRoom?.code) return; 50150 setInviteRoom((current) => current ? { ...current, locked: true } : current); 50151 try { 50152 await api.lockRoom(session2.api_token, inviteRoom.code); 50153 } catch (event) { 50154 setInviteRoom((current) => current ? { ...current, locked: false } : current); 50155 setError(event.message); 50156 } 50157 } 50158 async function handleUnlockRoom() { 50159 if (!session2?.api_token || !inviteRoom?.code) return; 50160 setInviteRoom((current) =>
50160 current ? { ...current, locked: false } : current); 50161 try { 50162 await api.unlockRoom(session2.api_token, inviteRoom.code); 50163 } catch (event) { 50164 setInviteRoom((current) => current ? { ...current, locked: true } : current); 50165 setError(event.message); 50166 } 50167 } 50168 async function handleKickMember(userId) { 50169 if (!session2?.api_token || !inviteRoom?.code) return; 50170 try { 50171 await api.kickMember(session2.api_token, inviteRoom.code, userId); 50172 } catch (event) { 50173 setError(event.message); 50174 } 50175 } 50176 async function handleMuteMember(userId, muted = true) { 50177 if (!session2?.api_token || !inviteRoom?.code) return; 50178 try { 50179 await api.muteMember(session2.api_token, inviteRoom.code, userId, muted); 50180 } catch (event) { 50181 setError(event.message); 50182 } 50183 } 50184 async function refreshRoom() { 50185 if (!session2?.api_token || !inviteRoom?.code) return; 50186 try { 50187 const payload = await api.getRoom(inviteRoom.code, session2.api_token); 50188 if (payload?.room) setInviteRoom(payload.room); 50189 } catch (_event) { 50190 } 50191 } 50192 async function handleApproveMember(userId) { 50193 if (!session2?.api_token || !inviteRoom?.code) return; 50194 try { 50195 await api.approveMember(session2.api_token, inviteRoom.code, userId); 50196 } catch (event) { 50197 setError(event.message); 50198 } 50199 } 50200 async function handleDenyMember(userId) { 50201 if (!session2?.api_token || !inviteRoom?.code) return; 50202 try { 50203 await api.denyMember(session2.api_token, inviteRoom.code, userId); 50204 } catch (event) { 50205 setError(event.message); 50206 } 50207 } 50208 async function copyRoomLink() { 50209 if (!inviteRoom?.share_url) return; 50210 try { 50211 let urlToCopy = inviteRoom.share_url; 50212 try { 50213 const next = new URL(inviteRoom.share_url, window.location.origin); 50214 next.searchParams.set("lang", locale); 50215 urlToCopy = next.toString(); 50216 } catch (_error) { 50217 const sep = inviteRoom.share_url.includes("?") ? "&" : "?"; 50218 urlToCopy = `${inviteRoom.share_url}${sep}lang=${encodeURIComponent(locale)}`; 50219 } 50220 await navigator.clipboard.writeText(urlToCopy); 50221 setCopied(true); 50222 window.setTimeout(() => setCopied(false), 1500); 50223 } catch (_error) { 50224 setError(t3("app.copy_failed")); 50225 } 50226 } 50227 function handleSetPrejoinGrade(gradeId) { 50228 setPrejoinGrade(gradeId); 50229 try { 50230 localStorage.setItem("yano_prejoin_grade", gradeId); 50231 } catch (_error) { 50232 } 50233 } 50234 function handleTogglePrejoinSoft() { 50235 setPrejoinSoftEnabled((value) => { 50236 const next = !value; 50237 try { 50238 localStorage.setItem("yano_prejoin_soft", next ? "1" : "0"); 50239 } catch (_error) { 50240 } 50241 return next; 50242 }); 50243 } 50244 function handleTogglePrejoinVignette() { 50245 setPrejoinVignetteEnabled((value) => { 50246 const next = !value; 50247 try { 50248 localStorage.setItem("yano_prejoin_vignette", next ? "1" : "0"); 50249 } catch (_error) { 50250 } 50251 return next; 50252 }); 50253 } 50254 function handleTogglePrejoinFaceBlur() { 50255 setPrejoinFaceBlurEnabled((value) => { 50256 const next = !value; 50257 try { 50258 localStorage.setItem("yano_prejoin_face_blur", next ? "1" : "0"); 50259 } catch (_error) { 50260 } 50261 return next; 50262 }); 50263 } 50264 function handleSetPrejoinFaceBlurAmount(nextValue) { 50265 const value = Math.min(9, Math.max(2, Math.round(Number(nextValue) || 2))); 50266 setPrejoinFaceBlurAmount(value); 50267 try { 50268 localStorage.setItem("yano_prejoin_face_blur_amount", String(value)); 50269 } catch (_error) { 50270 } 50271 } 50272 function renderPrimaryAction() { 50273 const hasProfile = Boolean(session2?.user?.display_name); 50274 if (roomLoading) { 50275 return /* @__PURE__ */ import_react6.default.createElement("button", { className: "yano-button yano-button--primary", type: "button", disabled: true }, t3("home.cta.opening")); 50276 } 50277 if (!inviteRoom) { 50278 return /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement( 50279 "button", 50280 { 50281 className: "yano-button yano-button--primary", 50282 type: "button", 50283 disabled: submitting, 50284 onClick: hasProfile ? handleCreateRoom : () => queueProfileAction({ type: "create_room" }) 50285 }, 50286 submitting ? t3("home.cta.creating") : hasProfile ? primaryActionLabel : t3("home.cta.set_up_profile")
50287 ), joinByCodeOpen ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3 flex items-center gap-2" }, /* @__PURE__ */ import_react6.default.createElement( 50288 "input", 50289 { 50290 type: "text", 50291 value: joinCodeDraft, 50292 onChange: (event) => setJoinCodeDraft(event.target.value.toUpperCase()), 50293 onKeyDown: (event) => { 50294 if (event.key === "Enter" && joinCodeDraft.trim()) { 50295 if (hasProfile) handleJoinRoomFromCode(joinCodeDraft.trim()); 50296 else queueProfileAction({ type: "join_room", code: joinCodeDraft.trim() }); 50297 } 50298 }, 50299 placeholder: t3("home.code_placeholder"), 50300 maxLength: 6, 50301 className: "min-w-0 flex-1 rounded-2xl border border-violet-500/15 bg-violet-500/8 px-4 py-2.5 text-center text-sm font-bold uppercase tracking-widest text-violet-100 outline-none transition placeholder:text-violet-500/40 placeholder:tracking-normal placeholder:font-semibold focus:border-violet-400/40", 50302 autoFocus: true 50303 } 50304 ), /* @__PURE__ */ import_react6.default.createElement( 50305 "button", 50306 { 50307 className: "yano-button yano-button--secondary shrink-0", 50308 type: "button", 50309 disabled: !joinCodeDraft.trim() || submitting, 50310 onClick: () => { 50311 if (hasProfile) handleJoinRoomFromCode(joinCodeDraft.trim()); 50312 else queueProfileAction({ type: "join_room", code: joinCodeDraft.trim() }); 50313 } 50314 }, 50315 t3("home.cta.join") 50316 )) : /* @__PURE__ */ import_react6.default.createElement("button", { className: "mt-3 text-sm font-semibold text-violet-300/70 transition hover:text-violet-200", type: "button", onClick: () => setJoinByCodeOpen(true) }, t3("home.join_by_code"))); 50317 } 50318 if (invitePending) { 50319 return /* @__PURE__ */ import_react6.default.createElement("button", { className: "yano-button yano-button--primary", type: "button", disabled: true }, primaryActionLabel); 50320 } 50321 if (!inviteJoined) { 50322 return /* @__PURE__ */ import_react6.default.createElement( 50323 "button", 50324 { 50325 className: "yano-button yano-button--primary", 50326 type: "button", 50327 disabled: submitting, 50328 onClick: hasProfile ? handleJoinRoom : () => queueProfileAction({ type: "join_room", code: roomCode }) 50329 }, 50330 submitting ? t3("home.cta.joining") : hasProfile ? primaryActionLabel : t3("home.cta.set_up_profile") 50331 ); 50332 } 50333 return /* @__PURE__ */ import_react6.default.createElement("button", { className: "yano-button yano-button--primary", type: "button", onClick: handleEnterRoom }, primaryActionLabel); 50334 } 50335 async function handleRejoinEndedRoom() { 50336 if (!endedRoom?.code) return; 50337 setRoomCode(endedRoom.code); 50338 setRoomPath(endedRoom.code); 50339 setNotice(""); 50340 setError(""); 50341 await handleJoinRoomFromCode(endedRoom.code); 50342 } 50343 async function handleJoinRoomFromCode(code) { 50344 if (!code) return; 50345 setSubmitting(true); 50346 setError(""); 50347 setNotice(""); 50348 try { 50349 const activeSession = await ensureSession(); 50350 await joinRoomByCodeWithSession(activeSession, code); 50351 } catch (event) { 50352 setError(event.message); 50353 } finally { 50354 setSubmitting(false); 50355 } 50356 } 50357 function handleReturnHome() { 50358 if (chatConnectionRef.current) { 50359 chatConnectionRef.current.unsubscribe(); 50360 chatConnectionRef.current = null; 50361 } 50362 setEndedRoom(null); 50363 setInviteRoom(null); 50364 setRoomCode(""); 50365 setCopied(false); 50366 setMeetingStarted(false); 50367 setNotice(""); 50368 setError(""); 50369 setChatMessages([]); 50370 setChatHasMore(false); 50371 setUnreadCount(0); 50372 setChatOpen(false); 50373 setRoomPath(""); 50374 } 50375 async function handleSendMessage(body) { 50376 if (!chatConnectionRef.current || !chatConnected) { 50377 throw new Error(t3("app.chat_not_connected")); 50378 } 50379 chatConnectionRef.current.send("send_message", { body }); 50380 } 50381 async function handleLoadMoreMessages() { 50382 if (!session2?.api_token || !inviteRoom?.code || !chatHasMore || !chatMessages.length) return; 50383 setChatLoading(true); 50384 try { 50385 const payload = await api.getRoomMessages(session2.api_token, inviteRoom.code, chatMessages[0].id); 50386 setChatMessages((current) => mergeMessages(current, payload.messages || [], true)); 50387 setChatHasMore(Boolean(payload.has_more)); 50388 } catch (event) { 50389 setError(event.message); 50390 } finally { 50391 setChatLoading(false); 50392 } 50393 } 50394 function handleToggleChat() { 50395 setChatOpen((open) => !open); 50396 } 50397 (0, import_react6.useEffect)(() => { 50398 if (!inMeeting) return; 50399 const interval = window.setInterval(() => setChatOverlayTick((n3) => n3 + 1), 5e3); 50400 return () => window.clearInterval(interval); 50401 }, [inMeeting]); 50402 if (inMeeting) { 50403 const now3 = Date.now(); 50404 const chatOverlayMessages = chatMessages.filter((m3) => m3._receivedAt && now3 - m3._receivedAt < 3e4).slice(-4); 50405 return /* @__PURE__ */ import_react6.default.createElement("main", { className: "h-dvh overflow-hidden bg-[#1a0e2e] p-0" }
50405, /* @__PURE__ */ import_react6.default.createElement( 50406 CallStage, 50407 { 50408 join: stageJoin, 50409 title: stageTitle, 50410 roomCode: inviteRoom?.code, 50411 shareUrl: inviteRoom?.share_url, 50412 copied, 50413 onCopyLink: copyRoomLink, 50414 onLeaveRoom: handleLeaveRoom, 50415 chatOpen, 50416 onToggleChat: handleToggleChat, 50417 unreadCount, 50418 onSendMessage: handleSendMessage, 50419 onLoadMoreMessages: handleLoadMoreMessages, 50420 chatOverlayMessages, 50421 chatMessages, 50422 chatHasMore, 50423 chatLoading, 50424 chatConnected, 50425 apiToken: session2?.api_token, 50426 currentUserId: session2?.user?.id, 50427 displayName: previewName, 50428 initialMedia: mediaPreferences, 50429 localVideoEffects, 50430 isHost: inviteRoom?.membership?.role === "host", 50431 roomLocked: Boolean(inviteRoom?.locked), 50432 roomMembers, 50433 onLockRoom: handleLockRoom, 50434 onUnlockRoom: handleUnlockRoom, 50435 onKickMember: handleKickMember, 50436 onMuteMember: handleMuteMember, 50437 pendingMembers: inviteRoom?.pending_members || [], 50438 onApproveMember: handleApproveMember, 50439 onDenyMember: handleDenyMember 50440 } 50441 )); 50442 } 50443 if (endedRoom) { 50444 return /* @__PURE__ */ import_react6.default.createElement("main", { className: "yano-grain h-dvh overflow-hidden bg-[#1a0e2e] text-white" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative z-[1] mx-auto flex h-dvh max-w-md flex-col px-5 py-5 sm:px-8" }, /* @__PURE__ */ import_react6.default.createElement("header", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react6.default.createElement(YanoLogo, { className: "h-10 w-10" }), /* @__PURE__ */ import_react6.default.createElement(YanoWordmark, null)), /* @__P
50444URE__ */ import_react6.default.createElement(EndedScreen, { room: endedRoom, onRejoin: handleRejoinEndedRoom, onReturnHome: handleReturnHome, submitting }))); 50445 } 50446 return /* @__PURE__ */ import_react6.default.createElement("main", { className: "yano-grain min-h-dvh bg-[#1a0e2e] text-white" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative z-[1] mx-auto flex min-h-dvh max-w-md flex-col px-5 py-5 sm:px-8 lg:max-w-5xl lg:px-10 lg:py-8" }, /* @__PURE__ */ import_react6.default.createElement("header", { className: "yano-enter relative z-[140] flex items-center justify-between overflow-visible", style: { animationDelay: "0ms" } }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ import_react6.default.createElement(YanoLogo, { className: "h-10 w-10" }), /* @__PURE__ */ import_react6.default.createElement(YanoWordmark, null)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2" }, inviteRoom?.code ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "rounded-full bg-violet-500/15 px-3 py-1.5 text-xs font-bold text-violet-300" }, inviteRoom.code) : null, /* @__PURE__ */ import_react6.default.createElement(LocalePicker, null))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative z-0 flex flex-1 flex-col items-center justify-center py-8 lg:py-10" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full lg:grid lg:grid-cols-[minmax(0,1.35fr)_minmax(0,0.95fr)] lg:items-start lg:gap-10" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full yano-enter lg:col-start-2 lg:row-start-1", style: { animationDelay: "60ms" } }, /* @__PURE__ */ import_react6.default.createElement("h1", { className: "font-display text-[clamp(2.6rem,10vw,4rem)] font-extrabold leading-[0.95] tracking-[-0.045em] text-white" }, prejoinHeading), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-[0.95rem] leading-relaxed text-violet-300/60" }, prejoinBody)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-8 w-full yano-enter lg:col-start-1 lg:row-start-1 lg:row-span-3 lg:mt-0", style: { animationDelay: "120ms" } }, /* @__PURE__ */ import_react6.default.createElement( 50447 "div", 50448 { 50449 className: "yano-prejoin-preview overflow-hidden rounded-[1.6rem] bg-violet-500/8 lg:rounded-[2rem]", 50450 style: { 50451 "--yano-preview-filter": filterStringForVideoEffects(localVideoEffects), 50452 "--yano-face-blur": `${prejoinFaceBlurAmount}px` 50453 } 50454 }, 50455 /* @__PURE__ */ import_react6.default.createElement("div", { className: "rounded-[1.6rem] bg-violet-500/20 p-[2px] lg:rounded-[2rem]" }, /* @__PURE__ */ import_react6.default.createElement( 50456 CameraPreview, 50457 { 50458 className: "aspect-[3/4] w-full sm:aspect-video", 50459 minimal: true, 50460 vignette: prejoinVignetteEnabled, 50461 faceBlur: prejoinFaceBlurEnabled, 50462 label: previewName, 50463 videoEnabled: mediaPreferences.videoEnabled, 50464 audioEnabled: mediaPreferences.audioEnabled 50465 } 50466 )), 50467 /* @__PURE__ */ import_react6.default.createElement( 50468 "div", 50469 { 50470 className: "grid transition-[grid-template-rows] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]", 50471 style: { gridTemplateRows: prejoinEffectsOpen ? "1fr" : "0fr" } 50472 },
50473 /* @__PURE__ */ import_react6.default.createElement("div", { className: "overflow-hidden" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: `px-4 pt-3 ${prejoinEffectsOpen ? "opacity-100 translate-y-0" : "opacity-0 -translate-y-1"} transition-[opacity,transform] duration-200 ease-[cubic-bezier(0.16,1,0.3,1)]` }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex flex-wrap gap-2" }, PREJOIN_GRADES.map((effect) => { 50474 const selected = prejoinGrade === effect.id; 50475 return /* @__PURE__ */ import_react6.default.createElement( 50476 "button", 50477 { 50478 key: effect.id, 50479 type: "button", 50480 onClick: () => handleSetPrejoinGrade(effect.id), 50481 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${selected ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 50482 title: t3(`effects.grade.${effect.id}`), 50483 "aria-pressed": selected 50484 }, 50485 t3(`effects.grade.${effect.id}`) 50486 ); 50487 })), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "h-px w-full bg-violet-500/10" }), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-2 flex flex-wrap items-center gap-2" }, /* @__PURE__ */ import_react6.default.createElement( 50488 "button", 50489 { 50490 type: "button", 50491 onClick: handleTogglePrejoinSoft, 50492 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${prejoinSoftEnabled ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 50493 "aria-pressed": prejoinSoftEnabled, 50494 title: t3("effects.soft") 50495 }, 50496 t3("effects.soft") 50497 ), /* @__PURE__ */ import_react6.default.createElement( 50498 "button", 50499 { 50500 type: "button", 50501 onClick: handleTogglePrejoinVignette, 50502 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${prejoinVignetteEnabled ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 50503 "aria-pressed": prejoinVignetteEnabled, 50504 title: t3("effects.vignette") 50505 }, 50506 t3("effects.vignette") 50507 ), /* @__PURE__ */ import_react6.default.createElement( 50508 "button", 50509 { 50510 type: "button", 50511 onClick: handleTogglePrejoinFaceBlur, 50512 className: `rounded-2xl border px-3 py-2 text-xs font-extrabold tracking-[0.12em] transition ${prejoinFaceBlurEnabled ? "border-violet-400/30 bg-violet-500/18 text-violet-100" : "border-violet-500/12 bg-black/10 text-violet-300/70 hover:bg-violet-500/10 hover:text-violet-200"}`, 50513 "aria-pressed": prejoinFaceBlurEnabled, 50514 title: t3("effects.face_preview_only") 50515 }, 50516 t3("effects.face") 50517 ))), prejoinFaceBlurEnabled ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3 rounded-2xl border border-violet-500/12 bg-black/10 px-3 py-3" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center justify-between gap-3" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[11px] font-extrabold tracking-[0.14em] text-violet-200/90" }, t3("effects.face")), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[11px] font-bold text-violet-300/60" }
50517, prejoinFaceBlurAmount, "px")), /* @__PURE__ */ import_react6.default.createElement( 50518 "input", 50519 { 50520 className: "yano-range mt-2 w-full", 50521 type: "range", 50522 min: "2", 50523 max: "9", 50524 step: "1", 50525 value: prejoinFaceBlurAmount, 50526 onChange: (event) => handleSetPrejoinFaceBlurAmount(event.target.value), 50527 "aria-label": t3("effects.face_strength") 50528 } 50529 )) : null)) 50530 ), 50531 /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative flex items-center justify-between gap-3 px-4 py-3" }, /* @__PURE__ */ import_react6.default.createElement( 50532 "button", 50533 { 50534 type: "button", 50535 onClick: openProfileSheet, 50536 className: "yano-profile-trigger group min-w-0 flex-1", 50537 "aria-label": session2?.user?.display_name ? t3("home.profile_trigger_edit_aria") : t3("home.profile_trigger_new_aria") 50538 }, 50539 session2?.user?.display_name ? /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement(ProfileAvatar, { name: session2.user.display_name, avatarUrl: session2.user.avatar_url, size: 32 }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "min-w-0 flex-1 truncate text-left text-sm font-bold text-violet-100" }, session2.user.display_name), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-trigger__edit shrink-0" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 16 16", className: "h-3.5 w-3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M11.5 2.5a1.6 1.6 0 0 1 2.3 2.3l-7.4 7.4-3 .7.7-3 7.4-7.4Z" })))) : /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-trigger__avatar-empty shrink-0", "aria-hidden": "true" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 18 18", className: "h-3.5 w-3.5", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M9 3.5v11M3.5 9h11" }))), /* @__PURE__ */ import_react6.default.createElement("span", { className: "min-w-0 flex-1 truncate text-left text-sm font-bold text-violet-200/85" }
50539, t3("home.profile_trigger_new")), /* @__PURE__ */ import_react6.default.createElement("span", { className: "yano-profile-trigger__arrow shrink-0", "aria-hidden": "true" }, "\u2192")) 50540 ), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ import_react6.default.createElement(MediaToggle, { active: mediaPreferences.audioEnabled, label: mediaPreferences.audioEnabled ? t3("mic.on") : t3("mic.off"), onClick: () => setMediaPreferences((current) => ({ ...current, audioEnabled: !current.audioEnabled })) }, /* @__PURE__ */ import_react6.default.createElement(MicIcon, null)), /* @__PURE__ */ import_react6.default.createElement(MediaToggle, { active: mediaPreferences.videoEnabled, label: mediaPreferences.videoEnabled ? t3("video.on") : t3("video.off"), onClick: () => setMediaPreferences((current) => ({ ...current, videoEnabled: !current.videoEnabled })) }, /* @__PURE__ */ import_react6.default.createElement(VideoIcon, null)), /* @__PURE__ */ import_react6.default.createElement( 50541 "button", 50542 { 50543 type: "button", 50544 className: "yano-media-toggle", 50545 onClick: () => setPrejoinEffectsOpen((value) => !value), 50546 "aria-pressed": prejoinEffectsOpen, 50547 "aria-label": t3("effects.title"), 50548 title: t3("effects.title") 50549 },
50550 /* @__PURE__ */ import_react6.default.createElement(EffectsIcon, null) 50551 ))) 50552 )), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-8 w-full lg:col-start-2 lg:row-start-2 lg:mt-6" }, error2 ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full yano-enter" }, /* @__PURE__ */ import_react6.default.createElement(StatusBanner, { tone: "error" }, error2)) : null, !error2 && notice ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full yano-enter" }, /* @__PURE__ */ import_react6.default.createElement(StatusBanner, { tone: "success" }, notice)) : null, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-6 w-full yano-enter", style: { animationDelay: "180ms" } }, renderPrimaryAction(), inviteRoom ? /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-3 flex items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "inline-flex items-center gap-1.5 rounded-full border border-violet-500/15 bg-violet-500/8 px-3 py-1.5 text-sm font-semibold text-violet-200/80" }, /* @__PURE__ */ import_react6.default.createElement(UsersIcon_default, { className: "h-4 w-4 text-violet-300/70" }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "tabular-nums" }, inviteRoom?.presence_count ?? roomMembers.length))) : null))))), /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("section", { className: "relative z-[1] overflow-hidden border-t border-violet-500/8 bg-[#130a22]" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "pointer-events-none absolute inset-0", "aria-hidden": true }, /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute right-[4%] top-[10%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(100px, 14vw, 200px)" }, viewBox: "0 0 120 100", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "20", cy: "20", r: "8", stroke: "#a78bfa", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "100", cy: "15", r: "6", stroke: "#a78bfa", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "60", cy: "70", r: "10", stroke: "#a78bfa", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "105", cy: "80", r: "5", stroke: "#a78bfa", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "28", y1: "24", x2: "52", y2: "62", stroke: "#a78bfa", strokeWidth: "1", opacity: "0.5" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "68", y1: "64", x2: "94", y2: "18", stroke: "#a78bfa", strokeWidth: "1", opacity: "0.5" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "70", y1: "72", x2: "100", y2: "78", stroke: "#a78bfa", strokeWidth: "1", opacity: "0.5" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[12%] left-[4%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(80px, 10vw, 150px)" }, viewBox: "0 0 80 80", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "15", cy: "40", r: "10", stroke: "#c084fc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "65", cy: "15", r: "10", stroke: "#c084fc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "65", cy: "65", r: "10", stroke: "#c084fc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "25", y1: "35", x2: "55", y2: "20", stroke: "#c084fc", strokeWidth: "1", opacity: "0.5" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "25", y1: "45", x2: "55", y2: "60", stroke: "#c084fc", strokeWidth: "1", opacity: "0.5" }))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative mx-auto flex max-w-4xl flex-col gap-6 px-6 py-20 sm:flex-row sm:items-center sm:gap-14 sm:py-28" }
50552, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "font-display text-[clamp(1.6rem,5vw,2.4rem)] font-extrabold leading-[1.05] tracking-[-0.04em] text-white" }, t3("home.marketing.invite.title").split("\n").map((line, index) => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, { key: line }, index > 0 ? /* @__PURE__ */ import_react6.default.createElement("br", null) : null, line))), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-[0.9rem] leading-relaxed text-violet-300/50" }, t3("home.marketing.invite.body"))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex shrink-0 items-center justify-center sm:w-60" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-[14rem]" }, /* @__PURE__ */ import_react6.default.createElement("svg", { viewBox: "0 0 240 160", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "w-full" }, /* @__PURE__ */ import_react6.default.createElement("rect", { x: "1", y: "1", width: "238", height: "158", rx: "12", stroke: "#a78bfa", strokeWidth: "1", opacity: "0.15" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "1", y: "1", width: "238", height: "24", rx: "12", fill: "#a78bfa", fillOpacity: "0.06" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "1", y: "13", width: "238", height: "12", fill: "#a78bfa", fillOpacity: "0.06" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "16", cy: "13", r: "3", fill: "#a78bfa", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "26", cy: "13", r: "3", fill: "#a78bfa", opacity: "0.15" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "36", cy: "13", r: "3", fill: "#a78bfa", opacity: "0.1" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "52", y: "8", width: "136", height: "10", rx: "5", fill: "#a78bfa", fillOpacity: "0.08" }), /* @__PURE__ */ import_react6.default.createElement("text", { x: "72", y: "16", fontSize: "6", fontWeight: "600", fill: "#a78bfa", opacity: "0.35", fontFamily: "system-ui" }, t3("home.marketing.invite.preview_url")), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "12", y: "34", width: "104", height: "56", rx: "8", fill: "#a78bfa", fillOpacity: "0.06", stroke: "#a78bfa", strokeWidth: "0.8", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "124", y: "34", width: "104", height: "56", rx: "8", fill: "#a78bfa", fillOpacity: "0.06", stroke: "#a78bfa", strokeWidth: "0.8", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "12", y: "96", width: "104", height: "56", rx: "8", fill: "#a78bfa", fillOpacity: "0.06", stroke: "#a78bfa", strokeWidth: "0.8", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "124", y: "96", width: "104", height: "56", rx: "8", fill: "#a78bfa", fillOpacity: "0.06", stroke: "#a78bfa", strokeWidth: "0.8", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "64", cy: "58", r: "10", stroke: "#c084fc", strokeWidth: "1", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "176", cy: "58", r: "10", stroke: "#c084fc", strokeWidth: "1", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "64", cy: "120", r: "10", stroke: "#c084fc", strokeWidth: "1", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "176", cy: "120", r: "10", stroke: "#c084fc", strokeWidth: "1", opacity: "0.2", strokeDasharray: "3 3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "172", y1: "120", x2: "180", y2: "120", stroke: "#c084fc", strokeWidth: "1", opacity: "0.2" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "176", y1: "116", x2: "176", y2: "124", stroke: "#c084fc", strokeWidth: "1", opacity: "0.2" }
50552), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "50", y: "72", width: "28", height: "3", rx: "1.5", fill: "#a78bfa", opacity: "0.15" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "162", y: "72", width: "28", height: "3", rx: "1.5", fill: "#a78bfa", opacity: "0.15" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "50", y: "134", width: "28", height: "3", rx: "1.5", fill: "#a78bfa", opacity: "0.15" })))))), /* @__PURE__ */ import_react6.default.createElement("section", { className: "relative z-[1] overflow-hidden bg-[#0f0720]" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "pointer-events-none absolute inset-0", "aria-hidden": true }, /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute left-[3%] top-[8%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(90px, 12vw, 170px)" }, viewBox: "0 0 100 100", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "50", cy: "50", r: "44", stroke: "#f0abfc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "50", cy: "50", r: "28", stroke: "#f0abfc", strokeWidth: "1", opacity: "0.6" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "50", cy: "50", r: "12", stroke: "#f0abfc", strokeWidth: "1", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "50", y1: "6", x2: "50", y2: "22", stroke: "#f0abfc", strokeWidth: "0.8", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "50", y1: "78", x2: "50", y2: "94", stroke: "#f0abfc", strokeWidth: "0.8", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "6", y1: "50", x2: "22", y2: "50", stroke: "#f0abfc", strokeWidth: "0.8", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "78", y1: "50", x2: "94", y2: "50", stroke: "#f0abfc", strokeWidth: "0.8", opacity: "0.3" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[10%] right-[4%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(80px, 11vw, 160px)" }, viewBox: "0 0 100 80", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("line", { x1: "10", y1: "15", x2: "90", y2: "15", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.4" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "35", cy: "15", r: "5", stroke: "#c084fc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "10", y1: "40", x2: "90", y2: "40", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.4" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "62", cy: "40", r: "5", stroke: "#c084fc", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "10", y1: "65", x2: "90", y2: "65", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.4" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "48", cy: "65", r: "5", stroke: "#c084fc", strokeWidth: "1.3" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute right-[8%] top-[15%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(60px, 8vw, 110px)" }, viewBox: "0 0 60 60", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "30", cy: "10", r: "2.5", fill: "#e879f9", opacity: "0.5" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "10", cy: "35", r: "1.5", fill: "#e879f9", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "50", cy: "30", r: "3", fill: "#e879f9", opacity: "0.4" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "25", cy: "50", r: "2", fill: "#e879f9", opacity: "0.35" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "45", cy: "55", r: "1.5", fill: "#e879f9", opacity: "0.25" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M30 2 L32 8 L38 10 L32 12 L30 18 L28 12 L22 10 L28 8 Z", stroke: "#e879f9", strokeWidth: "0.8", opacity: "0.4", fill: "none" }
50552))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative mx-auto flex max-w-4xl flex-col-reverse gap-6 px-6 py-20 sm:flex-row sm:items-center sm:gap-14 sm:py-28" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex shrink-0 items-center justify-center" }, /* @__PURE__ */ import_react6.default.createElement(EffectsShowcase, null)), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "font-display text-[clamp(1.6rem,5vw,2.4rem)] font-extrabold leading-[1.05] tracking-[-0.04em] text-white" }, t3("home.marketing.look.title").split("\n").map((line, index) => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, { key: line }, index > 0 ? /* @__PURE__ */ import_react6.default.createElement("br", null) : null, line))), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-[0.9rem] leading-relaxed text-violet-300/50" }, t3("home.marketing.look.body"))))), /* @__PURE__ */ import_react6.default.createElement("section", { className: "relative z-[1] overflow-hidden bg-[#0f0720]" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "pointer-events-none absolute inset-0", "aria-hidden": true }, /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute right-[5%] top-[8%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(80px, 11vw, 150px)" }, viewBox: "0 0 80 100", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("path", { d: "M40 4 L72 20 L72 52 Q72 80 40 96 Q8 80 8 52 L8 20 Z", stroke: "#fbbf24", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M40 24 L56 32 L56 48 Q56 64 40 72 Q24 64 24 48 L24 32 Z", stroke: "#fbbf24", strokeWidth: "1", opacity: "0.4" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[10%] left-[4%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(70px, 9vw, 130px)" }, viewBox: "0 0 80 80", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "40", cy: "28", r: "12", stroke: "#f59e0b", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M20 68 Q20 50 40 50 Q60 50 60 68", stroke: "#f59e0b", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "14", y1: "14", x2: "66", y2: "66", stroke: "#f59e0b", strokeWidth: "1.5", strokeLinecap: "round", opacity: "0.5" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[15%] right-[8%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(50px, 7vw, 90px)" }, viewBox: "0 0 60 60", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("rect", { x: "22", y: "8", width: "16", height: "28", rx: "8", stroke: "#fbbf24", strokeWidth: "1.3" }), /* @__PURE__ */ import_react6.default.createElement("path", { d: "M14 30 Q14 48 30 48 Q46 48 46 30", stroke: "#fbbf24", strokeWidth: "1.2", opacity: "0.5" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "30", y1: "48", x2: "30", y2: "56", stroke: "#fbbf24", strokeWidth: "1.2", opacity: "0.4" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "10", y1: "10", x2: "50", y2: "50", stroke: "#fbbf24", strokeWidth: "1.3", strokeLinecap: "round", opacity: "0.4" }))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative mx-auto flex max-w-4xl flex-col gap-6 px-6 py-20 sm:flex-row sm:items-center sm:gap-14 sm:py-28" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "font-display text-[clamp(1.6rem,5vw,2.4rem)] font-extrabold leading-[1.05] tracking-[-0.04em] text-white" }, t3("home.marketing.host.title").split("\n").map((line, index) => /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, { key: line }, index >
50552 0 ? /* @__PURE__ */ import_react6.default.createElement("br", null) : null, line))), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mt-3 text-[0.9rem] leading-relaxed text-violet-300/50" }, t3("home.marketing.host.body"))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex shrink-0 items-center justify-center sm:w-64" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "w-full max-w-[16rem] overflow-hidden rounded-2xl border border-amber-400/10 bg-amber-400/[0.03]" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2 border-b border-amber-400/8 px-4 py-2.5" }, /* @__PURE__ */ import_react6.default.createElement(LockClosedIcon_default, { className: "h-3.5 w-3.5 text-amber-400/40" }), /* @__PURE__ */ import_react6.default.createElement("span", { className: "text-[10px] font-bold uppercase tracking-wider text-amber-300/40" }, t3("home.marketing.host.locked"))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "px-4 py-3" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "mb-2 text-[9px] font-bold uppercase tracking-wider text-amber-300/25" }
50552, t3("home.marketing.host.waiting_to_join")), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-2.5" }, /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-8 w-8 shrink-0 place-items-center rounded-full bg-amber-400/10 text-[10px] font-bold text-amber-300/50" }, "SK"), /* @__PURE__ */ import_react6.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[11px] font-semibold text-amber-100/60" }, "Sara K."), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[9px] text-amber-300/30" }, t3("home.marketing.host.wants_to_join"))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-6 w-6 place-items-center rounded-full bg-emerald-500/15 text-emerald-400/70" }, /* @__PURE__ */ import_react6.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react6.default.createElement("polyline", { points: "20 6 9 17 4 12" }))), /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-6 w-6 place-items-center rounded-full bg-red-500/15 text-red-400/60" }, /* @__PURE__ */ import_react6.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" }))))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-2.5 flex items-center gap-2.5 opacity-50" }, /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-8 w-8 shrink-0 place-items-center rounded-full bg-amber-400/10 text-[10px] font-bold text-amber-300/50" }, "JM"), /* @__PURE__ */ import_react6.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[11px] font-semibold text-amber-100/60" }, "James M."), /* @__PURE__ */ import_react6.default.createElement("div", { className: "text-[9px] text-amber-300/30" }, t3("home.marketing.host.wants_to_join"))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "flex items-center gap-1.5" }, /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-6 w-6 place-items-center rounded-full bg-emerald-500/15 text-emerald-400/70" }, /* @__PURE__ */ import_react6.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round" }, /* @__PURE__ */ import_react6.default.createElement("polyline", { points: "20 6 9 17 4 12" }))), /* @__PURE__ */ import_react6.default.createElement("span", { className: "grid h-6 w-6 place-items-center rounded-full bg-red-500/15 text-red-400/60" }, /* @__PURE__ */ import_react6.default.createElement("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round" }, /* @__PURE__ */ import_react6.default.createElement("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "6", y1: "6", x2: "18", y2: "18" })))))))))), /* @__PURE__ */ import_react6.default.createElement("section", { className: "relative z-[1] overflow-hidden bg-[#130a22]" }, /* @__PURE__ */ import_react6.default.createElement("div", { className: "pointer-events-none absolute inset-0", "aria-hidden": true }, /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute left-[3%] top-[8%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(140px, 18vw, 260px)" }, viewBox: "0 0 180 130", fill: "none" }
50552, /* @__PURE__ */ import_react6.default.createElement("rect", { x: "2", y: "2", width: "82", height: "58", rx: "10", stroke: "#a78bfa", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "96", y: "2", width: "82", height: "58", rx: "10", stroke: "#a78bfa", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "2", y: "70", width: "82", height: "58", rx: "10", stroke: "#a78bfa", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "96", y: "70", width: "82", height: "58", rx: "10", stroke: "#a78bfa", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "43", cy: "27", r: "8", stroke: "#a78bfa", strokeWidth: "1.2" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "137", cy: "27", r: "8", stroke: "#a78bfa", strokeWidth: "1.2" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "43", cy: "95", r: "8", stroke: "#a78bfa", strokeWidth: "1.2" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "137", cy: "95", r: "8", stroke: "#a78bfa", strokeWidth: "1.2" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute right-[3%] top-[10%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(120px, 15vw, 220px)" }, viewBox: "0 0 140 100", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("rect", { x: "30", y: "2", width: "108", height: "32", rx: "12", stroke: "#c084fc", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("rect", { x: "2", y: "42", width: "90", height: "32", rx: "12", stroke: "#c084fc", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "40", cy: "18", r: "4", fill: "#c084fc", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "54", y1: "14", x2: "120", y2: "14", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.25" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "54", y1: "22", x2: "100", y2: "22", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.15" }), /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "14", cy: "58", r: "4", fill: "#c084fc", opacity: "0.3" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "26", y1: "54", x2: "76", y2: "54", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.25" }), /* @__PURE__ */ import_react6.default.createElement("line", { x1: "26", y1: "62", x2: "60", y2: "62", stroke: "#c084fc", strokeWidth: "1.2", opacity: "0.15" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[12%] left-[5%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(130px, 16vw, 240px)" }, viewBox: "0 0 160 50", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("polyline", { points: "0,25 12,18 24,30 36,10 48,35 60,8 72,40 84,12 96,38 108,15 120,32 132,20 144,28 160,25", stroke: "#818cf8", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })), /* @__PURE__ */ import_react6.default.createElement("svg", { className: "absolute bottom-[10%] right-[5%] opacity-[0.06] sm:opacity-[0.09]", style: { width: "clamp(70px, 9vw, 120px)" }, viewBox: "0 0 80 80", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement("circle", { cx: "40", cy: "40", r: "36", stroke: "#f0abfc", strokeWidth: "1.5" }), /* @__PURE__ */ import_react6.default.createElement("polygon", { points: "32,22 32,58 60,40", stroke: "#f0abfc", strokeWidth: "1.5", strokeLinejoin: "round", fill: "none" }))), /* @__PURE__ */ import_react6.default.createElement("div", { className: "relative mx-auto max-w-4xl px-6 py-20 sm:py-28" }, /* @__PURE__ */ import_react6.default.createElement("h2", { className: "font-display text-center text-[clamp(1.6rem,5vw,2.4rem)] font-extrabold leading-[1.05] tracking-[-0.04em] text-white" }, t3("home.marketing.anything.title")), /* @__PURE__ */ import_react6.default.createElement("p", { className: "mx-auto mt-3 max-w-md text-center text-[0.9rem] leading-relaxed text-violet-300/50" }
50552, t3("home.marketing.anything.body")), /* @__PURE__ */ import_react6.default.createElement("div", { className: "mt-10 flex flex-wrap items-center justify-center gap-3" }, marketingUseCases.map((use) => /* @__PURE__ */ import_react6.default.createElement("span", { key: use, className: "rounded-full border border-violet-400/10 bg-violet-400/5 px-4 py-2 text-sm font-semibold text-violet-300/60" }, use)))))), /* @__PURE__ */ import_react6.default.createElement("footer", { className: "relative z-[1] shrink-0 bg-[#0a0515] py-6 text-center text-xs text-violet-400/30" }, t3("footer.copyright"), " \xB7", " ", /* @__PURE__ */ import_react6.default.createElement("a", { href: termsHref, className: "underline decoration-violet-400/20 transition hover:text-violet-300/50", target: "_blank", rel: "noopener noreferrer" }, t3("footer.terms"))), /* @__PURE__ */ import_react6.default.createElement( 50553 ProfileSheet, 50554 { 50555 open: profileSheetOpen, 50556 initialProfile: profile, 50557 avatarUrl: session2?.user?.avatar_url || "", 50558 hasExistingSession: Boolean(session2?.api_token), 50559 saving: profileSheetSaving, 50560 errorMessage: profileSheetError, 50561 onSave: handleSaveProfile, 50562 onAvatarUpload: handleProfileAvatarUpload, 50563 onAvatarCropUpdate: handleProfileAvatarCropUpdate, 50564 onAvatarRemove: handleProfileAvatarRemove, 50565 onClose: closeProfileSheet, 50566 onClearError: () => setProfileSheetError("") 50567 } 50568 )); 50569} 50570
50571// app/javascript/yano/boot.jsx 50572var root; 50573var swRegistered = false; 50574function registerServiceWorker() { 50575 if (swRegistered) return; 50576 swRegistered = true; 50577 if (!("serviceWorker" in navigator)) return; 50578 if (!window.isSecureContext) return; 50579 navigator.serviceWorker.register("/service-worker.js").catch(() => { 50580 }); 50581} 50582function mount() { 50583 const element = document.getElementById("yano-app"); 50584 if (!element) return; 50585 if (!root) { 50586 root = (0, import_client.createRoot)(element); 50587 } 50588 root.render(/* @__PURE__ */ import_react7.default.createElement(I18nProvider, null, /* @__PURE__ */ import_react7.default.createElement(App, null))); 50589} 50590document.addEventListener("turbo:load", () => { 50591 registerServiceWorker(); 50592 mount(); 50593}); 50594/*! Bundled license information: 50595 50596react/cjs/react.development.js: 50597 (** 50598 * @license React 50599 * react.development.js 50600 * 50601 * Copyright (c) Meta Platforms, Inc. and affiliates. 50602 * 50603 * This source code is licensed under the MIT license found in the 50604 * LICENSE file in the root directory of this source tree. 50605 *) 50606 50607scheduler/cjs/scheduler.development.js: 50608 (** 50609 * @license React 50610 * scheduler.development.js 50611 * 50612 * Copyright (c) Meta Platforms, Inc. and affiliates. 50613 * 50614 * This source code is licensed under the MIT license found in the 50615 * LICENSE file in the root directory of this source tree. 50616 *) 50617 50618react-dom/cjs/react-dom.development.js: 50619 (** 50620 * @license React 50621 * react-dom.development.js 50622 * 50623 * Copyright (c) Meta Platforms, Inc. and affiliates. 50624 * 50625 * This source code is licensed under the MIT license found in the 50626 * LICENSE file in the root directory of this source tree. 50627 *) 50628 50629react-dom/cjs/react-dom-client.development.js: 50630 (** 50631 * @license React 50632 * react-dom-client.development.js 50633 * 50634 * Copyright (c) Meta Platforms, Inc. and affiliates. 50635 * 50636 * This source code is licensed under the MIT license found in the 50637 * LICENSE file in the root directory of this source tree. 50638 *) 50639 50640@daily-co/daily-js/dist/daily-esm.js: 50641 (*! 50642 * Bowser - a browser detector 50643 * https://github.com/lancedikson/bowser 50644 * MIT License | (c) Dustin Diaz 2012-2015 50645 * MIT License | (c) Denis Demchenko 2015-2019 50646 *) 50647 50648@hotwired/turbo/dist/turbo.es2017-esm.js: 50649 (*! 50650 Turbo 8.0.23 50651 Copyright © 2026 37signals LLC 50652 *) 50653*/ 50654//# sourceMappingURL=/assets/application-c5cbcc37.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.