PageSourceSearch

https://www.better.org.uk/library/assets/application-f2fc7c11.js

js better.org.uk collected 2026-10-01 10:37:28 UTC 1,648,901 bytes, 42,860 lines download raw bytes

1(() => {
2  var __create = Object.create;
3  var __defProp = Object.defineProperty;
4  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5  var __getOwnPropNames = Object.getOwnPropertyNames;
6  var __getProtoOf = Object.getPrototypeOf;
7  var __hasOwnProp = Object.prototype.hasOwnProperty;
8  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9  var __require = /* @__PURE__ */ ((x5) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x5, {
10    get: (a4, b4) => (typeof require !== "undefined" ? require : a4)[b4]
11  }) : x5)(function(x5) {
12    if (typeof require !== "undefined")
13      return require.apply(this, arguments);
14    throw new Error('Dynamic require of "' + x5 + '" is not supported');
15  });
16  var __esm = (fn3, res) => function __init() {
17    return fn3 && (res = (0, fn3[__getOwnPropNames(fn3)[0]])(fn3 = 0)), res;
18  };
19  var __commonJS = (cb, mod) => function __require2() {
20    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
21  };
22  var __export = (target, all) => {
23    for (var name in all)
24      __defProp(target, name, { get: all[name], enumerable: true });
25  };
26  var __copyProps = (to2, from, except, desc) => {
27    if (from && typeof from === "object" || typeof from === "function") {
28      for (let key of __getOwnPropNames(from))
29        if (!__hasOwnProp.call(to2, key) && key !== except)
30          __defProp(to2, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
31    }
32    return to2;
33  };
34  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
35    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
36    mod
37  ));
38  var __publicField = (obj, key, value) => {
39    __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
40    return value;
41  };
42
43  
vendor: 354 bytes, lines 43-54
43// node_modules/@rails/actioncable/src/adapters.js
44  var adapters_default;
45  var init_adapters = __esm({
46    "node_modules/@rails/actioncable/src/adapters.js"() {
47      adapters_default = {
48        logger: typeof console !== "undefined" ? console : void 0,
49        WebSocket: typeof WebSocket !== "undefined" ? WebSocket : void 0
50      };
51    }
52  });
53
54  
vendor: 416 bytes, lines 54-70
54// node_modules/@rails/actioncable/src/logger.js
55  var logger_default;
56  var init_logger = __esm({
57    "node_modules/@rails/actioncable/src/logger.js"() {
58      init_adapters();
59      logger_default = {
60        log(...messages) {
61          if (this.enabled) {
62            messages.push(Date.now());
63            adapters_default.logger.log("[ActionCable]", ...messages);
64          }
65        }
66      };
67    }
68  });
69
70  
vendor: 4,282 bytes, lines 70-179
70// node_modules/@rails/actioncable/src/connection_monitor.js
71  var now, secondsSince, ConnectionMonitor, connection_monitor_default;
72  var init_connection_monitor = __esm({
73    "node_modules/@rails/actioncable/src/connection_monitor.js"() {
74      init_logger();
75      now = () => new Date().getTime();
76      secondsSince = (time) => (now() - time) / 1e3;
77      ConnectionMonitor = class {
78        constructor(connection) {
79          this.visibilityDidChange = this.visibilityDidChange.bind(this);
80          this.connection = connection;
81          this.reconnectAttempts = 0;
82        }
83        start() {
84          if (!this.isRunning()) {
85            this.startedAt = now();
86            delete this.stoppedAt;
87            this.startPolling();
88            addEventListener("visibilitychange", this.visibilityDidChange);
89            logger_default.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);
90          }
91        }
92        stop() {
93          if (this.isRunning()) {
94            this.stoppedAt = now();
95            this.stopPolling();
96            removeEventListener("visibilitychange", this.visibilityDidChange);
97            logger_default.log("ConnectionMonitor stopped");
98          }
99        }
100        isRunning() {
101          return this.startedAt && !this.stoppedAt;
102        }
103        recordMessage() {
104          this.pingedAt = now();
105        }
106        recordConnect() {
107          this.reconnectAttempts = 0;
108          delete this.disconnectedAt;
109          logger_default.log("ConnectionMonitor recorded connect");
110        }
111        recordDisconnect() {
112          this.disconnectedAt = now();
113          logger_default.log("ConnectionMonitor recorded disconnect");
114        }
115        startPolling() {
116          this.stopPolling();
117          this.poll();
118        }
119        stopPolling() {
120          clearTimeout(this.pollTimeout);
121        }
122        poll() {
123          this.pollTimeout = setTimeout(
124            () => {
125              this.reconnectIfStale();
126              this.poll();
127            },
128            this.getPollInterval()
129          );
130        }
131        getPollInterval() {
132          const { staleThreshold, reconnectionBackoffRate } = this.constructor;
133          const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));
134          const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;
135          const jitter = jitterMax * Math.random();
136          return staleThreshold * 1e3 * backoff * (1 + jitter);
137        }
138        reconnectIfStale() {
139          if (this.connectionIsStale()) {
140            logger_default.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);
141            this.reconnectAttempts++;
142            if (this.disconnectedRecently()) {
143              logger_default.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);
144            } else {
145              logger_default.log("ConnectionMonitor reopening");
146              this.connection.reopen();
147            }
148          }
149        }
150        get refreshedAt() {
151          return this.pingedAt ? this.pingedAt : this.startedAt;
152        }
153        connectionIsStale() {
154          return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;
155        }
156        disconnectedRecently() {
157          return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;
158        }
159        visibilityDidChange() {
160          if (document.visibilityState === "visible") {
161            setTimeout(
162              () => {
163                if (this.connectionIsStale() || !this.connection.isOpen()) {
164                  logger_default.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);
165                  this.connection.reopen();
166                }
167              },
168              200
169            );
170          }
171        }
172      };
173      ConnectionMonitor.staleThreshold = 6;
174      ConnectionMonitor.reconnectionBackoffRate = 0.15;
175      connection_monitor_default = ConnectionMonitor;
176    }
177  });
178
179  
vendor: 793 bytes, lines 179-206
179// node_modules/@rails/actioncable/src/internal.js
180  var internal_default;
181  var init_internal = __esm({
182    "node_modules/@rails/actioncable/src/internal.js"() {
183      internal_default = {
184        "message_types": {
185          "welcome": "welcome",
186          "disconnect": "disconnect",
187          "ping": "ping",
188          "confirmation": "confirm_subscription",
189          "rejection": "reject_subscription"
190        },
191        "disconnect_reasons": {
192          "unauthorized": "unauthorized",
193          "invalid_request": "invalid_request",
194          "server_restart": "server_restart",
195          "remote": "remote"
196        },
197        "default_mount_path": "/cable",
198        "protocols": [
199          "actioncable-v1-json",
200          "actioncable-unsupported"
201        ]
202      };
203    }
204  });
205
206  
vendor: 6,207 bytes, lines 206-374
206// node_modules/@rails/actioncable/src/connection.js
207  var message_types, protocols, supportedProtocols, indexOf, Connection, connection_default;
208  var init_connection = __esm({
209    "node_modules/@rails/actioncable/src/connection.js"() {
210      init_adapters();
211      init_connection_monitor();
212      init_internal();
213      init_logger();
214      ({ message_types, protocols } = internal_default);
215      supportedProtocols = protocols.slice(0, protocols.length - 1);
216      indexOf = [].indexOf;
217      Connection = class {
218        constructor(consumer2) {
219          this.open = this.open.bind(this);
220          this.consumer = consumer2;
221          this.subscriptions = this.consumer.subscriptions;
222          this.monitor = new connection_monitor_default(this);
223          this.disconnected = true;
224        }
225        send(data) {
226          if (this.isOpen()) {
227            this.webSocket.send(JSON.stringify(data));
228            return true;
229          } else {
230            return false;
231          }
232        }
233        open() {
234          if (this.isActive()) {
235            logger_default.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);
236            return false;
237          } else {
238            const socketProtocols = [...protocols, ...this.consumer.subprotocols || []];
239            logger_default.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);
240            if (this.webSocket) {
241              this.uninstallEventHandlers();
242            }
243            this.webSocket = new adapters_default.WebSocket(this.consumer.url, socketProtocols);
244            this.installEventHandlers();
245            this.monitor.start();
246            return true;
247          }
248        }
249        close({ allowReconnect } = { allowReconnect: true }) {
250          if (!allowReconnect) {
251            this.monitor.stop();
252          }
253          if (this.isOpen()) {
254            return this.webSocket.close();
255          }
256        }
257        reopen() {
258          logger_default.log(`Reopening WebSocket, current state is ${this.getState()}`);
259          if (this.isActive()) {
260            try {
261              return this.close();
262            } catch (error2) {
263              logger_default.log("Failed to reopen WebSocket", error2);
264            } finally {
265              logger_default.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);
266              setTimeout(this.open, this.constructor.reopenDelay);
267            }
268          } else {
269            return this.open();
270          }
271        }
272        getProtocol() {
273          if (this.webSocket) {
274            return this.webSocket.protocol;
275          }
276        }
277        isOpen() {
278          return this.isState("open");
279        }
280        isActive() {
281          return this.isState("open", "connecting");
282        }
283        triedToReconnect() {
284          return this.monitor.reconnectAttempts > 0;
285        }
286        isProtocolSupported() {
287          return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;
288        }
289        isState(...states) {
290          return indexOf.call(states, this.getState()) >= 0;
291        }
292        getState() {
293          if (this.webSocket) {
294            for (let state in adapters_default.WebSocket) {
295              if (adapters_default.WebSocket[state] === this.webSocket.readyState) {
296                return state.toLowerCase();
297              }
298            }
299          }
300          return null;
301        }
302        installEventHandlers() {
303          for (let eventName in this.events) {
304            const handler = this.events[eventName].bind(this);
305            this.webSocket[`on${eventName}`] = handler;
306          }
307        }
308        uninstallEventHandlers() {
309          for (let eventName in this.events) {
310            this.webSocket[`on${eventName}`] = function() {
311            };
312          }
313        }
314      };
315      Connection.reopenDelay = 500;
316      Connection.prototype.events = {
317        message(event2) {
318          if (!this.isProtocolSupported()) {
319            return;
320          }
321          const { identifier, message, reason, reconnect, type } = JSON.parse(event2.data);
322          this.monitor.recordMessage();
323          switch (type) {
324            case message_types.welcome:
325              if (this.triedToReconnect()) {
326                this.reconnectAttempted = true;
327              }
328              this.monitor.recordConnect();
329              return this.subscriptions.reload();
330            case message_types.disconnect:
331              logger_default.log(`Disconnecting. Reason: ${reason}`);
332              return this.close({ allowReconnect: reconnect });
333            case message_types.ping:
334              return null;
335            case message_types.confirmation:
336              this.subscriptions.confirmSubscription(identifier);
337              if (this.reconnectAttempted) {
338                this.reconnectAttempted = false;
339                return this.subscriptions.notify(identifier, "connected", { reconnected: true });
340              } else {
341                return this.subscriptions.notify(identifier, "connected", { reconnected: false });
342              }
343            case message_types.rejection:
344              return this.subscriptions.reject(identifier);
345            default:
346              return this.subscriptions.notify(identifier, "received", message);
347          }
348        },
349        open() {
350          logger_default.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);
351          this.disconnected = false;
352          if (!this.isProtocolSupported()) {
353            logger_default.log("Protocol is unsupported. Stopping monitor and disconnecting.");
354            return this.close({ allowReconnect: false });
355          }
356        },
357        close(event2) {
358          logger_default.log("WebSocket onclose event");
359          if (this.disconnected) {
360            return;
361          }
362          this.disconnected = true;
363          this.monitor.recordDisconnect();
364          return this.subscriptions.notifyAll("disconnected", { willAttemptReconnect: this.monitor.isRunning() });
365        },
366        error() {
367          logger_default.log("WebSocket onerror event");
368        }
369      };
370      connection_default = Connection;
371    }
372  });
373
374  
vendor: 1,020 bytes, lines 374-407
374// node_modules/@rails/actioncable/src/subscription.js
375  var extend, Subscription;
376  var init_subscription = __esm({
377    "node_modules/@rails/actioncable/src/subscription.js"() {
378      extend = function(object, properties) {
379        if (properties != null) {
380          for (let key in properties) {
381            const value = properties[key];
382            object[key] = value;
383          }
384        }
385        return object;
386      };
387      Subscription = class {
388        constructor(consumer2, params = {}, mixin) {
389          this.consumer = consumer2;
390          this.identifier = JSON.stringify(params);
391          extend(this, mixin);
392        }
393        perform(action, data = {}) {
394          data.action = action;
395          return this.send(data);
396        }
397        send(data) {
398          return this.consumer.send({ command: "message", identifier: this.identifier, data: JSON.stringify(data) });
399        }
400        unsubscribe() {
401          return this.consumer.subscriptions.remove(this);
402        }
403      };
404    }
405  });
406
407  
vendor: 1,898 bytes, lines 407-455
407// node_modules/@rails/actioncable/src/subscription_guarantor.js
408  var SubscriptionGuarantor, subscription_guarantor_default;
409  var init_subscription_guarantor = __esm({
410    "node_modules/@rails/actioncable/src/subscription_guarantor.js"() {
411      init_logger();
412      SubscriptionGuarantor = class {
413        constructor(subscriptions) {
414          this.subscriptions = subscriptions;
415          this.pendingSubscriptions = [];
416        }
417        guarantee(subscription) {
418          if (this.pendingSubscriptions.indexOf(subscription) == -1) {
419            logger_default.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);
420            this.pendingSubscriptions.push(subscription);
421          } else {
422            logger_default.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);
423          }
424          this.startGuaranteeing();
425        }
426        forget(subscription) {
427          logger_default.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);
428          this.pendingSubscriptions = this.pendingSubscriptions.filter((s4) => s4 !== subscription);
429        }
430        startGuaranteeing() {
431          this.stopGuaranteeing();
432          this.retrySubscribing();
433        }
434        stopGuaranteeing() {
435          clearTimeout(this.retryTimeout);
436        }
437        retrySubscribing() {
438          this.retryTimeout = setTimeout(
439            () => {
440              if (this.subscriptions && typeof this.subscriptions.subscribe === "function") {
441                this.pendingSubscriptions.map((subscription) => {
442                  logger_default.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);
443                  this.subscriptions.subscribe(subscription);
444                });
445              }
446            },
447            500
448          );
449        }
450      };
451      subscription_guarantor_default = SubscriptionGuarantor;
452    }
453  });
454
455  
vendor: 3,113 bytes, lines 455-535
455// node_modules/@rails/actioncable/src/subscriptions.js
456  var Subscriptions;
457  var init_subscriptions = __esm({
458    "node_modules/@rails/actioncable/src/subscriptions.js"() {
459      init_subscription();
460      init_subscription_guarantor();
461      init_logger();
462      Subscriptions = class {
463        constructor(consumer2) {
464          this.consumer = consumer2;
465          this.guarantor = new subscription_guarantor_default(this);
466          this.subscriptions = [];
467        }
468        create(channelName, mixin) {
469          const channel = channelName;
470          const params = typeof channel === "object" ? channel : { channel };
471          const subscription = new Subscription(this.consumer, params, mixin);
472          return this.add(subscription);
473        }
474        add(subscription) {
475          this.subscriptions.push(subscription);
476          this.consumer.ensureActiveConnection();
477          this.notify(subscription, "initialized");
478          this.subscribe(subscription);
479          return subscription;
480        }
481        remove(subscription) {
482          this.forget(subscription);
483          if (!this.findAll(subscription.identifier).length) {
484            this.sendCommand(subscription, "unsubscribe");
485          }
486          return subscription;
487        }
488        reject(identifier) {
489          return this.findAll(identifier).map((subscription) => {
490            this.forget(subscription);
491            this.notify(subscription, "rejected");
492            return subscription;
493          });
494        }
495        forget(subscription) {
496          this.guarantor.forget(subscription);
497          this.subscriptions = this.subscriptions.filter((s4) => s4 !== subscription);
498          return subscription;
499        }
500        findAll(identifier) {
501          return this.subscriptions.filter((s4) => s4.identifier === identifier);
502        }
503        reload() {
504          return this.subscriptions.map((subscription) => this.subscribe(subscription));
505        }
506        notifyAll(callbackName, ...args) {
507          return this.subscriptions.map((subscription) => this.notify(subscription, callbackName, ...args));
508        }
509        notify(subscription, callbackName, ...args) {
510          let subscriptions;
511          if (typeof subscription === "string") {
512            subscriptions = this.findAll(subscription);
513          } else {
514            subscriptions = [subscription];
515          }
516          return subscriptions.map((subscription2) => typeof subscription2[callbackName] === "function" ? subscription2[callbackName](...args) : void 0);
517        }
518        subscribe(subscription) {
519          if (this.sendCommand(subscription, "subscribe")) {
520            this.guarantor.guarantee(subscription);
521          }
522        }
523        confirmSubscription(identifier) {
524          logger_default.log(`Subscription confirmed ${identifier}`);
525          this.findAll(identifier).map((subscription) => this.guarantor.forget(subscription));
526        }
527        sendCommand(subscription, command) {
528          const { identifier } = subscription;
529          return this.consumer.send({ command, identifier });
530        }
531      };
532    }
533  });
534
535  
vendor: 1,402 bytes, lines 535-586
535// node_modules/@rails/actioncable/src/consumer.js
536  function createWebSocketURL(url) {
537    if (typeof url === "function") {
538      url = url();
539    }
540    if (url && !/^wss?:/i.test(url)) {
541      const a4 = document.createElement("a");
542      a4.href = url;
543      a4.href = a4.href;
544      a4.protocol = a4.protocol.replace("http", "ws");
545      return a4.href;
546    } else {
547      return url;
548    }
549  }
550  var Consumer;
551  var init_consumer = __esm({
552    "node_modules/@rails/actioncable/src/consumer.js"() {
553      init_connection();
554      init_subscriptions();
555      Consumer = class {
556        constructor(url) {
557          this._url = url;
558          this.subscriptions = new Subscriptions(this);
559          this.connection = new connection_default(this);
560          this.subprotocols = [];
561        }
562        get url() {
563          return createWebSocketURL(this._url);
564        }
565        send(data) {
566          return this.connection.send(data);
567        }
568        connect() {
569          return this.connection.open();
570        }
571        disconnect() {
572          return this.connection.close({ allowReconnect: false });
573        }
574        ensureActiveConnection() {
575          if (!this.connection.isActive()) {
576            return this.connection.open();
577          }
578        }
579        addSubProtocol(subprotocol) {
580          this.subprotocols = [...this.subprotocols, subprotocol];
581        }
582      };
583    }
584  });
585
586  
vendor: 1,259 bytes, lines 586-625
586// node_modules/@rails/actioncable/src/index.js
587  var src_exports = {};
588  __export(src_exports, {
589    Connection: () => connection_default,
590    ConnectionMonitor: () => connection_monitor_default,
591    Consumer: () => Consumer,
592    INTERNAL: () => internal_default,
593    Subscription: () => Subscription,
594    SubscriptionGuarantor: () => subscription_guarantor_default,
595    Subscriptions: () => Subscriptions,
596    adapters: () => adapters_default,
597    createConsumer: () => createConsumer,
598    createWebSocketURL: () => createWebSocketURL,
599    getConfig: () => getConfig,
600    logger: () => logger_default
601  });
602  function createConsumer(url = getConfig("url") || internal_default.default_mount_path) {
603    return new Consumer(url);
604  }
605  function getConfig(name) {
606    const element = document.head.querySelector(`meta[name='action-cable-${name}']`);
607    if (element) {
608      return element.getAttribute("content");
609    }
610  }
611  var init_src = __esm({
612    "node_modules/@rails/actioncable/src/index.js"() {
613      init_connection();
614      init_connection_monitor();
615      init_consumer();
616      init_internal();
617      init_subscription();
618      init_subscriptions();
619      init_subscription_guarantor();
620      init_adapters();
621      init_logger();
622    }
623  });
624
625  
vendor: 154,670 bytes, lines 625-4593
625// node_modules/moment/moment.js
626  var require_moment = __commonJS({
627    "node_modules/moment/moment.js"(exports, module) {
628      (function(global, factory) {
629        typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.moment = factory();
630      })(exports, function() {
631        "use strict";
632        var hookCallback;
633        function hooks() {
634          return hookCallback.apply(null, arguments);
635        }
636        function setHookCallback(callback) {
637          hookCallback = callback;
638        }
639        function isArray(input) {
640          return input instanceof Array || Object.prototype.toString.call(input) === "[object Array]";
641        }
642        function isObject3(input) {
643          return input != null && Object.prototype.toString.call(input) === "[object Object]";
644        }
645        function hasOwnProp(a4, b4) {
646          return Object.prototype.hasOwnProperty.call(a4, b4);
647        }
648        function isObjectEmpty(obj) {
649          if (Object.getOwnPropertyNames) {
650            return Object.getOwnPropertyNames(obj).length === 0;
651          } else {
652            var k4;
653            for (k4 in obj) {
654              if (hasOwnProp(obj, k4)) {
655                return false;
656              }
657            }
658            return true;
659          }
660        }
661        function isUndefined(input) {
662          return input === void 0;
663        }
664        function isNumber(input) {
665          return typeof input === "number" || Object.prototype.toString.call(input) === "[object Number]";
666        }
667        function isDate(input) {
668          return input instanceof Date || Object.prototype.toString.call(input) === "[object Date]";
669        }
670        function map(arr, fn3) {
671          var res = [], i4, arrLen = arr.length;
672          for (i4 = 0; i4 < arrLen; ++i4) {
673            res.push(fn3(arr[i4], i4));
674          }
675          return res;
676        }
677        function extend5(a4, b4) {
678          for (var i4 in b4) {
679            if (hasOwnProp(b4, i4)) {
680              a4[i4] = b4[i4];
681            }
682          }
683          if (hasOwnProp(b4, "toString")) {
684            a4.toString = b4.toString;
685          }
686          if (hasOwnProp(b4, "valueOf")) {
687            a4.valueOf = b4.valueOf;
688          }
689          return a4;
690        }
691        function createUTC(input, format2, locale2, strict) {
692          return createLocalOrUTC(input, format2, locale2, strict, true).utc();
693        }
694        function defaultParsingFlags() {
695          return {
696            empty: false,
697            unusedTokens: [],
698            unusedInput: [],
699            overflow: -2,
700            charsLeftOver: 0,
701            nullInput: false,
702            invalidEra: null,
703            invalidMonth: null,
704            invalidFormat: false,
705            userInvalidated: false,
706            iso: false,
707            parsedDateParts: [],
708            era: null,
709            meridiem: null,
710            rfc2822: false,
711            weekdayMismatch: false
712          };
713        }
714        function getParsingFlags(m5) {
715          if (m5._pf == null) {
716            m5._pf = defaultParsingFlags();
717          }
718          return m5._pf;
719        }
720        var some;
721        if (Array.prototype.some) {
722          some = Array.prototype.some;
723        } else {
724          some = function(fun) {
725            var t5 = Object(this), len = t5.length >>> 0, i4;
726            for (i4 = 0; i4 < len; i4++) {
727              if (i4 in t5 && fun.call(this, t5[i4], i4, t5)) {
728                return true;
729              }
730            }
731            return false;
732          };
733        }
734        function isValid(m5) {
735          var flags = null, parsedParts = false, isNowValid = m5._d && !isNaN(m5._d.getTime());
736          if (isNowValid) {
737            flags = getParsingFlags(m5);
738            parsedParts = some.call(flags.parsedDateParts, function(i4) {
739              return i4 != null;
740            });
741            isNowValid = flags.overflow < 0 && !flags.empty && !flags.invalidEra && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);
742            if (m5._strict) {
743              isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === void 0;
744            }
745          }
746          if (Object.isFrozen == null || !Object.isFrozen(m5)) {
747            m5._isValid = isNowValid;
748          } else {
749            return isNowValid;
750          }
751          return m5._isValid;
752        }
753        function createInvalid(flags) {
754          var m5 = createUTC(NaN);
755          if (flags != null) {
756            extend5(getParsingFlags(m5), flags);
757          } else {
758            getParsingFlags(m5).userInvalidated = true;
759          }
760          return m5;
761        }
762        var momentProperties = hooks.momentProperties = [], updateInProgress = false;
763        function copyConfig(to3, from2) {
764          var i4, prop, val, momentPropertiesLen = momentProperties.length;
765          if (!isUndefined(from2._isAMomentObject)) {
766            to3._isAMomentObject = from2._isAMomentObject;
767          }
768          if (!isUndefined(from2._i)) {
769            to3._i = from2._i;
770          }
771          if (!isUndefined(from2._f)) {
772            to3._f = from2._f;
773          }
774          if (!isUndefined(from2._l)) {
775            to3._l = from2._l;
776          }
777          if (!isUndefined(from2._strict)) {
778            to3._strict = from2._strict;
779          }
780          if (!isUndefined(from2._tzm)) {
781            to3._tzm = from2._tzm;
782          }
783          if (!isUndefined(from2._isUTC)) {
784            to3._isUTC = from2._isUTC;
785          }
786          if (!isUndefined(from2._offset)) {
787            to3._offset = from2._offset;
788          }
789          if (!isUndefined(from2._pf)) {
790            to3._pf = getParsingFlags(from2);
791          }
792          if (!isUndefined(from2._locale)) {
793            to3._locale = from2._locale;
794          }
795          if (momentPropertiesLen > 0) {
796            for (i4 = 0; i4 < momentPropertiesLen; i4++) {
797              prop = momentProperties[i4];
798              val = from2[prop];
799              if (!isUndefined(val)) {
800                to3[prop] = val;
801              }
802            }
803          }
804          return to3;
805        }
806        function Moment3(config2) {
807          copyConfig(this, config2);
808          this._d = new Date(config2._d != null ? config2._d.getTime() : NaN);
809          if (!this.isValid()) {
810            this._d = new Date(NaN);
811          }
812          if (updateInProgress === false) {
813            updateInProgress = true;
814            hooks.updateOffset(this);
815            updateInProgress = false;
816          }
817        }
818        function isMoment(obj) {
819          return obj instanceof Moment3 || obj != null && obj._isAMomentObject != null;
820        }
821        function warn(msg) {
822          if (hooks.suppressDeprecationWarnings === false && typeof console !== "undefined" && console.warn) {
823            console.warn("Deprecation warning: " + msg);
824          }
825        }
826        function deprecate(msg, fn3) {
827          var firstTime = true;
828          return extend5(function() {
829            if (hooks.deprecationHandler != null) {
830              hooks.deprecationHandler(null, msg);
831            }
832            if (firstTime) {
833              var args = [], arg, i4, key, argLen = arguments.length;
834              for (i4 = 0; i4 < argLen; i4++) {
835                arg = "";
836                if (typeof arguments[i4] === "object") {
837                  arg += "\n[" + i4 + "] ";
838                  for (key in arguments[0]) {
839                    if (hasOwnProp(arguments[0], key)) {
840                      arg += key + ": " + arguments[0][key] + ", ";
841                    }
842                  }
843                  arg = arg.slice(0, -2);
844                } else {
845                  arg = arguments[i4];
846                }
847                args.push(arg);
848              }
849              warn(
850                msg + "\nArguments: " + Array.prototype.slice.call(args).join("") + "\n" + new Error().stack
851              );
852              firstTime = false;
853            }
854            return fn3.apply(this, arguments);
855          }, fn3);
856        }
857        var deprecations = {};
858        function deprecateSimple(name, msg) {
859          if (hooks.deprecationHandler != null) {
860            hooks.deprecationHandler(name, msg);
861          }
862          if (!deprecations[name]) {
863            warn(msg);
864            deprecations[name] = true;
865          }
866        }
867        hooks.suppressDeprecationWarnings = false;
868        hooks.deprecationHandler = null;
869        function isFunction(input) {
870          return typeof Function !== "undefined" && input instanceof Function || Object.prototype.toString.call(input) === "[object Function]";
871        }
872        function set(config2) {
873          var prop, i4;
874          for (i4 in config2) {
875            if (hasOwnProp(config2, i4)) {
876              prop = config2[i4];
877              if (isFunction(prop)) {
878                this[i4] = prop;
879              } else {
880                this["_" + i4] = prop;
881              }
882            }
883          }
884          this._config = config2;
885          this._dayOfMonthOrdinalParseLenient = new RegExp(
886            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + "|" + /\d{1,2}/.source
887          );
888        }
889        function mergeConfigs(parentConfig, childConfig) {
890          var res = extend5({}, parentConfig), prop;
891          for (prop in childConfig) {
892            if (hasOwnProp(childConfig, prop)) {
893              if (isObject3(parentConfig[prop]) && isObject3(childConfig[prop])) {
894                res[prop] = {};
895                extend5(res[prop], parentConfig[prop]);
896                extend5(res[prop], childConfig[prop]);
897              } else if (childConfig[prop] != null) {
898                res[prop] = childConfig[prop];
899              } else {
900                delete res[prop];
901              }
902            }
903          }
904          for (prop in parentConfig) {
905            if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject3(parentConfig[prop])) {
906              res[prop] = extend5({}, res[prop]);
907            }
908          }
909          return res;
910        }
911        function Locale(config2) {
912          if (config2 != null) {
913            this.set(config2);
914          }
915        }
916        var keys;
917        if (Object.keys) {
918          keys = Object.keys;
919        } else {
920          keys = function(obj) {
921            var i4, res = [];
922            for (i4 in obj) {
923              if (hasOwnProp(obj, i4)) {
924                res.push(i4);
925              }
926            }
927            return res;
928          };
929        }
930        var defaultCalendar = {
931          sameDay: "[Today at] LT",
932          nextDay: "[Tomorrow at] LT",
933          nextWeek: "dddd [at] LT",
934          lastDay: "[Yesterday at] LT",
935          lastWeek: "[Last] dddd [at] LT",
936          sameElse: "L"
937        };
938        function calendar(key, mom, now4) {
939          var output = this._calendar[key] || this._calendar["sameElse"];
940          return isFunction(output) ? output.call(mom, now4) : output;
941        }
942        function zeroFill(number, targetLength, forceSign) {
943          var absNumber = "" + Math.abs(number), zerosToFill = targetLength - absNumber.length, sign2 = number >= 0;
944          return (sign2 ? forceSign ? "+" : "" : "-") + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
945        }
946        var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g, localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, formatFunctions = {}, formatTokenFunctions = {};
947        function addFormatToken(token2, padded, ordinal2, callback) {
948          var func = callback;
949          if (typeof callback === "string") {
950            func = function() {
951              return this[callback]();
952            };
953          }
954          if (token2) {
955            formatTokenFunctions[token2] = func;
956          }
957          if (padded) {
958            formatTokenFunctions[padded[0]] = function() {
959              return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
960            };
961          }
962          if (ordinal2) {
963            formatTokenFunctions[ordinal2] = function() {
964              return this.localeData().ordinal(
965                func.apply(this, arguments),
966                token2
967              );
968            };
969          }
970        }
971        function removeFormattingTokens(input) {
972          if (input.match(/\[[\s\S]/)) {
973            return input.replace(/^\[|\]$/g, "");
974          }
975          return input.replace(/\\/g, "");
976        }
977        function makeFormatFunction(format2) {
978          var array = format2.match(formattingTokens), i4, length;
979          for (i4 = 0, length = array.length; i4 < length; i4++) {
980            if (formatTokenFunctions[array[i4]]) {
981              array[i4] = formatTokenFunctions[array[i4]];
982            } else {
983              array[i4] = removeFormattingTokens(array[i4]);
984            }
985          }
986          return function(mom) {
987            var output = "", i5;
988            for (i5 = 0; i5 < length; i5++) {
989              output += isFunction(array[i5]) ? array[i5].call(mom, format2) : array[i5];
990            }
991            return output;
992          };
993        }
994        function formatMoment(m5, format2) {
995          if (!m5.isValid()) {
996            return m5.localeData().invalidDate();
997          }
998          format2 = expandFormat(format2, m5.localeData());
999          formatFunctions[format2] = formatFunctions[format2] || makeFormatFunction(format2);
1000          return formatFunctions[format2](m5);
1001        }
1002        function expandFormat(format2, locale2) {
1003          var i4 = 5;
1004          function replaceLongDateFormatTokens(input) {
1005            return locale2.longDateFormat(input) || input;
1006          }
1007          localFormattingTokens.lastIndex = 0;
1008          while (i4 >= 0 && localFormattingTokens.test(format2)) {
1009            format2 = format2.replace(
1010              localFormattingTokens,
1011              replaceLongDateFormatTokens
1012            );
1013            localFormattingTokens.lastIndex = 0;
1014            i4 -= 1;
1015          }
1016          return format2;
1017        }
1018        var defaultLongDateFormat = {
1019          LTS: "h:mm:ss A",
1020          LT: "h:mm A",
1021          L: "MM/DD/YYYY",
1022          LL: "MMMM D, YYYY",
1023          LLL: "MMMM D, YYYY h:mm A",
1024          LLLL: "dddd, MMMM D, YYYY h:mm A"
1025        };
1026        function longDateFormat(key) {
1027          var format2 = this._longDateFormat[key], formatUpper = this._longDateFormat[key.toUpperCase()];
1028          if (format2 || !formatUpper) {
1029            return format2;
1030          }
1031          this._longDateFormat[key] = formatUpper.match(formattingTokens).map(function(tok) {
1032            if (tok === "MMMM" || tok === "MM" || tok === "DD" || tok === "dddd") {
1033              return tok.slice(1);
1034            }
1035            return tok;
1036          }).join("");
1037          return this._longDateFormat[key];
1038        }
1039        var defaultInvalidDate = "Invalid date";
1040        function invalidDate() {
1041          return this._invalidDate;
1042        }
1043        var defaultOrdinal = "%d", defaultDayOfMonthOrdinalParse = /\d{1,2}/;
1044        function ordinal(number) {
1045          return this._ordinal.replace("%d", number);
1046        }
1047        var defaultRelativeTime = {
1048          future: "in %s",
1049          past: "%s ago",
1050          s: "a few seconds",
1051          ss: "%d seconds",
1052          m: "a minute",
1053          mm: "%d minutes",
1054          h: "an hour",
1055          hh: "%d hours",
1056          d: "a day",
1057          dd: "%d days",
1058          w: "a week",
1059          ww: "%d weeks",
1060          M: "a month",
1061          MM: "%d months",
1062          y: "a year",
1063          yy: "%d years"
1064        };
1065        function relativeTime(number, withoutSuffix, string, isFuture) {
1066          var output = this._relativeTime[string];
1067          return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);
1068        }
1069        function pastFuture(diff2, output) {
1070          var format2 = this._relativeTime[diff2 > 0 ? "future" : "past"];
1071          return isFunction(format2) ? format2(output) : format2.replace(/%s/i, output);
1072        }
1073        var aliases = {
1074          D: "date",
1075          dates: "date",
1076          date: "date",
1077          d: "day",
1078          days: "day",
1079          day: "day",
1080          e: "weekday",
1081          weekdays: "weekday",
1082          weekday: "weekday",
1083          E: "isoWeekday",
1084          isoweekdays: "isoWeekday",
1085          isoweekday: "isoWeekday",
1086          DDD: "dayOfYear",
1087          dayofyears: "dayOfYear",
1088          dayofyear: "dayOfYear",
1089          h: "hour",
1090          hours: "hour",
1091          hour: "hour",
1092          ms: "millisecond",
1093          milliseconds: "millisecond",
1094          millisecond: "millisecond",
1095          m: "minute",
1096          minutes: "minute",
1097          minute: "minute",
1098          M: "month",
1099          months: "month",
1100          month: "month",
1101          Q: "quarter",
1102          quarters: "quarter",
1103          quarter: "quarter",
1104          s: "second",
1105          seconds: "second",
1106          second: "second",
1107          gg: "weekYear",
1108          weekyears: "weekYear",
1109          weekyear: "weekYear",
1110          GG: "isoWeekYear",
1111          isoweekyears: "isoWeekYear",
1112          isoweekyear: "isoWeekYear",
1113          w: "week",
1114          weeks: "week",
1115          week: "week",
1116          W: "isoWeek",
1117          isoweeks: "isoWeek",
1118          isoweek: "isoWeek",
1119          y: "year",
1120          years: "year",
1121          year: "year"
1122        };
1123        function normalizeUnits(units) {
1124          return typeof units === "string" ? aliases[units] || aliases[units.toLowerCase()] : void 0;
1125        }
1126        function normalizeObjectUnits(inputObject) {
1127          var normalizedInput = {}, normalizedProp, prop;
1128          for (prop in inputObject) {
1129            if (hasOwnProp(inputObject, prop)) {
1130              normalizedProp = normalizeUnits(prop);
1131              if (normalizedProp) {
1132                normalizedInput[normalizedProp] = inputObject[prop];
1133              }
1134            }
1135          }
1136          return normalizedInput;
1137        }
1138        var priorities = {
1139          date: 9,
1140          day: 11,
1141          weekday: 11,
1142          isoWeekday: 11,
1143          dayOfYear: 4,
1144          hour: 13,
1145          millisecond: 16,
1146          minute: 14,
1147          month: 8,
1148          quarter: 7,
1149          second: 15,
1150          weekYear: 1,
1151          isoWeekYear: 1,
1152          week: 5,
1153          isoWeek: 5,
1154          year: 1
1155        };
1156        function getPrioritizedUnits(unitsObj) {
1157          var units = [], u4;
1158          for (u4 in unitsObj) {
1159            if (hasOwnProp(unitsObj, u4)) {
1160              units.push({ unit: u4, priority: priorities[u4] });
1161            }
1162          }
1163          units.sort(function(a4, b4) {
1164            return a4.priority - b4.priority;
1165          });
1166          return units;
1167        }
1168        var match1 = /\d/, match2 = /\d\d/, match3 = /\d{3}/, match4 = /\d{4}/, match6 = /[+-]?\d{6}/, match1to2 = /\d\d?/, match3to4 = /\d\d\d\d?/, match5to6 = /\d\d\d\d\d\d?/, match1to3 = /\d{1,3}/, match1to4 = /\d{1,4}/, match1to6 = /[+-]?\d{1,6}/, matchUnsigned = /\d+/, matchSigned = /[+-]?\d+/, matchOffset = /Z|[+-]\d\d:?\d\d/gi, matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i, match1to2NoLeadingZero = /^[1-9]\d?/, match1to2HasZero = /^([1-9]\d|\d)/, regexes;
1169        regexes = {};
1170        function addRegexToken(token2, regex, strictRegex) {
1171          regexes[token2] = isFunction(regex) ? regex : function(isStrict, localeData2) {
1172            return isStrict && strictRegex ? strictRegex : regex;
1173          };
1174        }
1175        function getParseRegexForToken(token2, config2) {
1176          if (!hasOwnProp(regexes, token2)) {
1177            return new RegExp(unescapeFormat(token2));
1178          }
1179          return regexes[token2](config2._strict, config2._locale);
1180        }
1181        function unescapeFormat(s4) {
1182          return regexEscape(
1183            s4.replace("\\", "").replace(
1184              /\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,
1185              function(matched, p1, p22, p32, p4) {
1186                return p1 || p22 || p32 || p4;
1187              }
1188            )
1189          );
1190        }
1191        function regexEscape(s4) {
1192          return s4.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
1193        }
1194        function absFloor(number) {
1195          if (number < 0) {
1196            return Math.ceil(number) || 0;
1197          } else {
1198            return Math.floor(number);
1199          }
1200        }
1201        function toInt(argumentForCoercion) {
1202          var coercedNumber = +argumentForCoercion, value = 0;
1203          if (coercedNumber !== 0 && isFinite(coercedNumber)) {
1204            value = absFloor(coercedNumber);
1205          }
1206          return value;
1207        }
1208        var tokens = {};
1209        function addParseToken(token2, callback) {
1210          var i4, func = callback, tokenLen;
1211          if (typeof token2 === "string") {
1212            token2 = [token2];
1213          }
1214          if (isNumber(callback)) {
1215            func = function(input, array) {
1216              array[callback] = toInt(input);
1217            };
1218          }
1219          tokenLen = token2.length;
1220          for (i4 = 0; i4 < tokenLen; i4++) {
1221            tokens[token2[i4]] = func;
1222          }
1223        }
1224        function addWeekParseToken(token2, callback) {
1225          addParseToken(token2, function(input, array, config2, token3) {
1226            config2._w = config2._w || {};
1227            callback(input, config2._w, config2, token3);
1228          });
1229        }
1230        function addTimeToArrayFromToken(token2, input, config2) {
1231          if (input != null && hasOwnProp(tokens, token2)) {
1232            tokens[token2](input, config2._a, config2, token2);
1233          }
1234        }
1235        function isLeapYear(year) {
1236          return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
1237        }
1238        var YEAR = 0, MONTH = 1, DATE = 2, HOUR = 3, MINUTE = 4, SECOND = 5, MILLISECOND = 6, WEEK = 7, WEEKDAY = 8;
1239        addFormatToken("Y", 0, 0, function() {
1240          var y4 = this.year();
1241          return y4 <= 9999 ? zeroFill(y4, 4) : "+" + y4;
1242        });
1243        addFormatToken(0, ["YY", 2], 0, function() {
1244          return this.year() % 100;
1245        });
1246        addFormatToken(0, ["YYYY", 4], 0, "year");
1247        addFormatToken(0, ["YYYYY", 5], 0, "year");
1248        addFormatToken(0, ["YYYYYY", 6, true], 0, "year");
1249        addRegexToken("Y", matchSigned);
1250        addRegexToken("YY", match1to2, match2);
1251        addRegexToken("YYYY", match1to4, match4);
1252        addRegexToken("YYYYY", match1to6, match6);
1253        addRegexToken("YYYYYY", match1to6, match6);
1254        addParseToken(["YYYYY", "YYYYYY"], YEAR);
1255        addParseToken("YYYY", function(input, array) {
1256          array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
1257        });
1258        addParseToken("YY", function(input, array) {
1259          array[YEAR] = hooks.parseTwoDigitYear(input);
1260        });
1261        addParseToken("Y", function(input, array) {
1262          array[YEAR] = parseInt(input, 10);
1263        });
1264        function daysInYear(year) {
1265          return isLeapYear(year) ? 366 : 365;
1266        }
1267        hooks.parseTwoDigitYear = function(input) {
1268          return toInt(input) + (toInt(input) > 68 ? 1900 : 2e3);
1269        };
1270        var getSetYear = makeGetSet("FullYear", true);
1271        function getIsLeapYear() {
1272          return isLeapYear(this.year());
1273        }
1274        function makeGetSet(unit, keepTime) {
1275          return function(value) {
1276            if (value != null) {
1277              set$1(this, unit, value);
1278              hooks.updateOffset(this, keepTime);
1279              return this;
1280            } else {
1281              return get2(this, unit);
1282            }
1283          };
1284        }
1285        function get2(mom, unit) {
1286          if (!mom.isValid()) {
1287            return NaN;
1288          }
1289          var d3 = mom._d, isUTC = mom._isUTC;
1290          switch (unit) {
1291            case "Milliseconds":
1292              return isUTC ? d3.getUTCMilliseconds() : d3.getMilliseconds();
1293            case "Seconds":
1294              return isUTC ? d3.getUTCSeconds() : d3.getSeconds();
1295            case "Minutes":
1296              return isUTC ? d3.getUTCMinutes() : d3.getMinutes();
1297            case "Hours":
1298              return isUTC ? d3.getUTCHours() : d3.getHours();
1299            case "Date":
1300              return isUTC ? d3.getUTCDate() : d3.getDate();
1301            case "Day":
1302              return isUTC ? d3.getUTCDay() : d3.getDay();
1303            case "Month":
1304              return isUTC ? d3.getUTCMonth() : d3.getMonth();
1305            case "FullYear":
1306              return isUTC ? d3.getUTCFullYear() : d3.getFullYear();
1307            default:
1308              return NaN;
1309          }
1310        }
1311        function set$1(mom, unit, value) {
1312          var d3, isUTC, year, month, date;
1313          if (!mom.isValid() || isNaN(value)) {
1314            return;
1315          }
1316          d3 = mom._d;
1317          isUTC = mom._isUTC;
1318          switch (unit) {
1319            case "Milliseconds":
1320              return void (isUTC ? d3.setUTCMilliseconds(value) : d3.setMilliseconds(value));
1321            case "Seconds":
1322              return void (isUTC ? d3.setUTCSeconds(value) : d3.setSeconds(value));
1323            case "Minutes":
1324              return void (isUTC ? d3.setUTCMinutes(value) : d3.setMinutes(value));
1325            case "Hours":
1326              return void (isUTC ? d3.setUTCHours(value) : d3.setHours(value));
1327            case "Date":
1328              return void (isUTC ? d3.setUTCDate(value) : d3.setDate(value));
1329            case "FullYear":
1330              break;
1331            default:
1332              return;
1333          }
1334          year = value;
1335          month = mom.month();
1336          date = mom.date();
1337          date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
1338          void (isUTC ? d3.setUTCFullYear(year, month, date) : d3.setFullYear(year, month, date));
1339        }
1340        function stringGet(units) {
1341          units = normalizeUnits(units);
1342          if (isFunction(this[units])) {
1343            return this[units]();
1344          }
1345          return this;
1346        }
1347        function stringSet(units, value) {
1348          if (typeof units === "object") {
1349            units = normalizeObjectUnits(units);
1350            var prioritized = getPrioritizedUnits(units), i4, prioritizedLen = prioritized.length;
1351            for (i4 = 0; i4 < prioritizedLen; i4++) {
1352              this[prioritized[i4].unit](units[prioritized[i4].unit]);
1353            }
1354          } else {
1355            units = normalizeUnits(units);
1356            if (isFunction(this[units])) {
1357              return this[units](value);
1358            }
1359          }
1360          return this;
1361        }
1362        function mod(n3, x5) {
1363          return (n3 % x5 + x5) % x5;
1364        }
1365        var indexOf2;
1366        if (Array.prototype.indexOf) {
1367          indexOf2 = Array.prototype.indexOf;
1368        } else {
1369          indexOf2 = function(o3) {
1370            var i4;
1371            for (i4 = 0; i4 < this.length; ++i4) {
1372              if (this[i4] === o3) {
1373                return i4;
1374              }
1375            }
1376            return -1;
1377          };
1378        }
1379        function daysInMonth(year, month) {
1380          if (isNaN(year) || isNaN(month)) {
1381            return NaN;
1382          }
1383          var modMonth = mod(month, 12);
1384          year += (month - modMonth) / 12;
1385          return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;
1386        }
1387        addFormatToken("M", ["MM", 2], "Mo", function() {
1388          return this.month() + 1;
1389        });
1390        addFormatToken("MMM", 0, 0, function(format2) {
1391          return this.localeData().monthsShort(this, format2);
1392        });
1393        addFormatToken("MMMM", 0, 0, function(format2) {
1394          return this.localeData().months(this, format2);
1395        });
1396        addRegexToken("M", match1to2, match1to2NoLeadingZero);
1397        addRegexToken("MM", match1to2, match2);
1398        addRegexToken("MMM", function(isStrict, locale2) {
1399          return locale2.monthsShortRegex(isStrict);
1400        });
1401        addRegexToken("MMMM", function(isStrict, locale2) {
1402          return locale2.monthsRegex(isStrict);
1403        });
1404        addParseToken(["M", "MM"], function(input, array) {
1405          array[MONTH] = toInt(input) - 1;
1406        });
1407        addParseToken(["MMM", "MMMM"], function(input, array, config2, token2) {
1408          var month = config2._locale.monthsParse(input, token2, config2._strict);
1409          if (month != null) {
1410            array[MONTH] = month;
1411          } else {
1412            getParsingFlags(config2).invalidMonth = input;
1413          }
1414        });
1415        var defaultLocaleMonths = "January_February_March_April_May_June_July_August_September_October_November_December".split(
1416          "_"
1417        ), defaultLocaleMonthsShort = "Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"), MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/, defaultMonthsShortRegex = matchWord, defaultMonthsRegex = matchWord;
1418        function localeMonths(m5, format2) {
1419          if (!m5) {
1420            return isArray(this._months) ? this._months : this._months["standalone"];
1421          }
1422          return isArray(this._months) ? this._months[m5.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format2) ? "format" : "standalone"][m5.month()];
1423        }
1424        function localeMonthsShort(m5, format2) {
1425          if (!m5) {
1426            return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort["standalone"];
1427          }
1428          return isArray(this._monthsShort) ? this._monthsShort[m5.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format2) ? "format" : "standalone"][m5.month()];
1429        }
1430        function handleStrictParse(monthName, format2, strict) {
1431          var i4, ii2, mom, llc = monthName.toLocaleLowerCase();
1432          if (!this._monthsParse) {
1433            this._monthsParse = [];
1434            this._longMonthsParse = [];
1435            this._shortMonthsParse = [];
1436            for (i4 = 0; i4 < 12; ++i4) {
1437              mom = createUTC([2e3, i4]);
1438              this._shortMonthsParse[i4] = this.monthsShort(
1439                mom,
1440                ""
1441              ).toLocaleLowerCase();
1442              this._longMonthsParse[i4] = this.months(mom, "").toLocaleLowerCase();
1443            }
1444          }
1445          if (strict) {
1446            if (format2 === "MMM") {
1447              ii2 = indexOf2.call(this._shortMonthsParse, llc);
1448              return ii2 !== -1 ? ii2 : null;
1449            } else {
1450              ii2 = indexOf2.call(this._longMonthsParse, llc);
1451              return ii2 !== -1 ? ii2 : null;
1452            }
1453          } else {
1454            if (format2 === "MMM") {
1455              ii2 = indexOf2.call(this._shortMonthsParse, llc);
1456              if (ii2 !== -1) {
1457                return ii2;
1458              }
1459              ii2 = indexOf2.call(this._longMonthsParse, llc);
1460              return ii2 !== -1 ? ii2 : null;
1461            } else {
1462              ii2 = indexOf2.call(this._longMonthsParse, llc);
1463              if (ii2 !== -1) {
1464                return ii2;
1465              }
1466              ii2 = indexOf2.call(this._shortMonthsParse, llc);
1467              return ii2 !== -1 ? ii2 : null;
1468            }
1469          }
1470        }
1471        function localeMonthsParse(monthName, format2, strict) {
1472          var i4, mom, regex;
1473          if (this._monthsParseExact) {
1474            return handleStrictParse.call(this, monthName, format2, strict);
1475          }
1476          if (!this._monthsParse) {
1477            this._monthsParse = [];
1478            this._longMonthsParse = [];
1479            this._shortMonthsParse = [];
1480          }
1481          for (i4 = 0; i4 < 12; i4++) {
1482            mom = createUTC([2e3, i4]);
1483            if (strict && !this._longMonthsParse[i4]) {
1484              this._longMonthsParse[i4] = new RegExp(
1485                "^" + this.months(mom, "").replace(".", "") + "$",
1486                "i"
1487              );
1488              this._shortMonthsParse[i4] = new RegExp(
1489                "^" + this.monthsShort(mom, "").replace(".", "") + "$",
1490                "i"
1491              );
1492            }
1493            if (!strict && !this._monthsParse[i4]) {
1494              regex = "^" + this.months(mom, "") + "|^" + this.monthsShort(mom, "");
1495              this._monthsParse[i4] = new RegExp(regex.replace(".", ""), "i");
1496            }
1497            if (strict && format2 === "MMMM" && this._longMonthsParse[i4].test(monthName)) {
1498              return i4;
1499            } else if (strict && format2 === "MMM" && this._shortMonthsParse[i4].test(monthName)) {
1500              return i4;
1501            } else if (!strict && this._monthsParse[i4].test(monthName)) {
1502              return i4;
1503            }
1504          }
1505        }
1506        function setMonth(mom, value) {
1507          if (!mom.isValid()) {
1508            return mom;
1509          }
1510          if (typeof value === "string") {
1511            if (/^\d+$/.test(value)) {
1512              value = toInt(value);
1513            } else {
1514              value = mom.localeData().monthsParse(value);
1515              if (!isNumber(value)) {
1516                return mom;
1517              }
1518            }
1519          }
1520          var month = value, date = mom.date();
1521          date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
1522          void (mom._isUTC ? mom._d.setUTCMonth(month, date) : mom._d.setMonth(month, date));
1523          return mom;
1524        }
1525        function getSetMonth(value) {
1526          if (value != null) {
1527            setMonth(this, value);
1528            hooks.updateOffset(this, true);
1529            return this;
1530          } else {
1531            return get2(this, "Month");
1532          }
1533        }
1534        function getDaysInMonth() {
1535          return daysInMonth(this.year(), this.month());
1536        }
1537        function monthsShortRegex(isStrict) {
1538          if (this._monthsParseExact) {
1539            if (!hasOwnProp(this, "_monthsRegex")) {
1540              computeMonthsParse.call(this);
1541            }
1542            if (isStrict) {
1543              return this._monthsShortStrictRegex;
1544            } else {
1545              return this._monthsShortRegex;
1546            }
1547          } else {
1548            if (!hasOwnProp(this, "_monthsShortRegex")) {
1549              this._monthsShortRegex = defaultMonthsShortRegex;
1550            }
1551            return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;
1552          }
1553        }
1554        function monthsRegex(isStrict) {
1555          if (this._monthsParseExact) {
1556            if (!hasOwnProp(this, "_monthsRegex")) {
1557              computeMonthsParse.call(this);
1558            }
1559            if (isStrict) {
1560              return this._monthsStrictRegex;
1561            } else {
1562              return this._monthsRegex;
1563            }
1564          } else {
1565            if (!hasOwnProp(this, "_monthsRegex")) {
1566              this._monthsRegex = defaultMonthsRegex;
1567            }
1568            return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;
1569          }
1570        }
1571        function computeMonthsParse() {
1572          function cmpLenRev(a4, b4) {
1573            return b4.length - a4.length;
1574          }
1575          var shortPieces = [], longPieces = [], mixedPieces = [], i4, mom, shortP, longP;
1576          for (i4 = 0; i4 < 12; i4++) {
1577            mom = createUTC([2e3, i4]);
1578            shortP = regexEscape(this.monthsShort(mom, ""));
1579            longP = regexEscape(this.months(mom, ""));
1580            shortPieces.push(shortP);
1581            longPieces.push(longP);
1582            mixedPieces.push(longP);
1583            mixedPieces.push(shortP);
1584          }
1585          shortPieces.sort(cmpLenRev);
1586          longPieces.sort(cmpLenRev);
1587          mixedPieces.sort(cmpLenRev);
1588          this._monthsRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
1589          this._monthsShortRegex = this._monthsRegex;
1590          this._monthsStrictRegex = new RegExp(
1591            "^(" + longPieces.join("|") + ")",
1592            "i"
1593          );
1594          this._monthsShortStrictRegex = new RegExp(
1595            "^(" + shortPieces.join("|") + ")",
1596            "i"
1597          );
1598        }
1599        function createDate(y4, m5, d3, h4, M3, s4, ms) {
1600          var date;
1601          if (y4 < 100 && y4 >= 0) {
1602            date = new Date(y4 + 400, m5, d3, h4, M3, s4, ms);
1603            if (isFinite(date.getFullYear())) {
1604              date.setFullYear(y4);
1605            }
1606          } else {
1607            date = new Date(y4, m5, d3, h4, M3, s4, ms);
1608          }
1609          return date;
1610        }
1611        function createUTCDate(y4) {
1612          var date, args;
1613          if (y4 < 100 && y4 >= 0) {
1614            args = Array.prototype.slice.call(arguments);
1615            args[0] = y4 + 400;
1616            date = new Date(Date.UTC.apply(null, args));
1617            if (isFinite(date.getUTCFullYear())) {
1618              date.setUTCFullYear(y4);
1619            }
1620          } else {
1621            date = new Date(Date.UTC.apply(null, arguments));
1622          }
1623          return date;
1624        }
1625        function firstWeekOffset2(year, dow, doy) {
1626          var fwd = 7 + dow - doy, fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
1627          return -fwdlw + fwd - 1;
1628        }
1629        function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
1630          var localWeekday = (7 + weekday - dow) % 7, weekOffset = firstWeekOffset2(year, dow, doy), dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, resYear, resDayOfYear;
1631          if (dayOfYear <= 0) {
1632            resYear = year - 1;
1633            resDayOfYear = daysInYear(resYear) + dayOfYear;
1634          } else if (dayOfYear > daysInYear(year)) {
1635            resYear = year + 1;
1636            resDayOfYear = dayOfYear - daysInYear(year);
1637          } else {
1638            resYear = year;
1639            resDayOfYear = dayOfYear;
1640          }
1641          return {
1642            year: resYear,
1643            dayOfYear: resDayOfYear
1644          };
1645        }
1646        function weekOfYear2(mom, dow, doy) {
1647          var weekOffset = firstWeekOffset2(mom.year(), dow, doy), week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, resWeek, resYear;
1648          if (week < 1) {
1649            resYear = mom.year() - 1;
1650            resWeek = week + weeksInYear(resYear, dow, doy);
1651          } else if (week > weeksInYear(mom.year(), dow, doy)) {
1652            resWeek = week - weeksInYear(mom.year(), dow, doy);
1653            resYear = mom.year() + 1;
1654          } else {
1655            resYear = mom.year();
1656            resWeek = week;
1657          }
1658          return {
1659            week: resWeek,
1660            year: resYear
1661          };
1662        }
1663        function weeksInYear(year, dow, doy) {
1664          var weekOffset = firstWeekOffset2(year, dow, doy), weekOffsetNext = firstWeekOffset2(year + 1, dow, doy);
1665          return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
1666        }
1667        addFormatToken("w", ["ww", 2], "wo", "week");
1668        addFormatToken("W", ["WW", 2], "Wo", "isoWeek");
1669        addRegexToken("w", match1to2, match1to2NoLeadingZero);
1670        addRegexToken("ww", match1to2, match2);
1671        addRegexToken("W", match1to2, match1to2NoLeadingZero);
1672        addRegexToken("WW", match1to2, match2);
1673        addWeekParseToken(
1674          ["w", "ww", "W", "WW"],
1675          function(input, week, config2, token2) {
1676            week[token2.substr(0, 1)] = toInt(input);
1677          }
1678        );
1679        function localeWeek(mom) {
1680          return weekOfYear2(mom, this._week.dow, this._week.doy).week;
1681        }
1682        var defaultLocaleWeek = {
1683          dow: 0,
1684          doy: 6
1685        };
1686        function localeFirstDayOfWeek() {
1687          return this._week.dow;
1688        }
1689        function localeFirstDayOfYear() {
1690          return this._week.doy;
1691        }
1692        function getSetWeek(input) {
1693          var week = this.localeData().week(this);
1694          return input == null ? week : this.add((input - week) * 7, "d");
1695        }
1696        function getSetISOWeek(input) {
1697          var week = weekOfYear2(this, 1, 4).week;
1698          return input == null ? week : this.add((input - week) * 7, "d");
1699        }
1700        addFormatToken("d", 0, "do", "day");
1701        addFormatToken("dd", 0, 0, function(format2) {
1702          return this.localeData().weekdaysMin(this, format2);
1703        });
1704        addFormatToken("ddd", 0, 0, function(format2) {
1705          return this.localeData().weekdaysShort(this, format2);
1706        });
1707        addFormatToken("dddd", 0, 0, function(format2) {
1708          return this.localeData().weekdays(this, format2);
1709        });
1710        addFormatToken("e", 0, 0, "weekday");
1711        addFormatToken("E", 0, 0, "isoWeekday");
1712        addRegexToken("d", match1to2);
1713        addRegexToken("e", match1to2);
1714        addRegexToken("E", match1to2);
1715        addRegexToken("dd", function(isStrict, locale2) {
1716          return locale2.weekdaysMinRegex(isStrict);
1717        });
1718        addRegexToken("ddd", function(isStrict, locale2) {
1719          return locale2.weekdaysShortRegex(isStrict);
1720        });
1721        addRegexToken("dddd", function(isStrict, locale2) {
1722          return locale2.weekdaysRegex(isStrict);
1723        });
1724        addWeekParseToken(["dd", "ddd", "dddd"], function(input, week, config2, token2) {
1725          var weekday = config2._locale.weekdaysParse(input, token2, config2._strict);
1726          if (weekday != null) {
1727            week.d = weekday;
1728          } else {
1729            getParsingFlags(config2).invalidWeekday = input;
1730          }
1731        });
1732        addWeekParseToken(["d", "e", "E"], function(input, week, config2, token2) {
1733          week[token2] = toInt(input);
1734        });
1735        function parseWeekday(input, locale2) {
1736          if (typeof input !== "string") {
1737            return input;
1738          }
1739          if (!isNaN(input)) {
1740            return parseInt(input, 10);
1741          }
1742          input = locale2.weekdaysParse(input);
1743          if (typeof input === "number") {
1744            return input;
1745          }
1746          return null;
1747        }
1748        function parseIsoWeekday(input, locale2) {
1749          if (typeof input === "string") {
1750            return locale2.weekdaysParse(input) % 7 || 7;
1751          }
1752          return isNaN(input) ? null : input;
1753        }
1754        function shiftWeekdays(ws, n3) {
1755          return ws.slice(n3, 7).concat(ws.slice(0, n3));
1756        }
1757        var defaultLocaleWeekdays = "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), defaultLocaleWeekdaysShort = "Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"), defaultLocaleWeekdaysMin = "Su_Mo_Tu_We_Th_Fr_Sa".split("_"), defaultWeekdaysRegex = matchWord, defaultWeekdaysShortRegex = matchWord, defaultWeekdaysMinRegex = matchWord;
1758        function localeWeekdays(m5, format2) {
1759          var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m5 && m5 !== true && this._weekdays.isFormat.test(format2) ? "format" : "standalone"];
1760          return m5 === true ? shiftWeekdays(weekdays, this._week.dow) : m5 ? weekdays[m5.day()] : weekdays;
1761        }
1762        function localeWeekdaysShort(m5) {
1763          return m5 === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m5 ? this._weekdaysShort[m5.day()] : this._weekdaysShort;
1764        }
1765        function localeWeekdaysMin(m5) {
1766          return m5 === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m5 ? this._weekdaysMin[m5.day()] : this._weekdaysMin;
1767        }
1768        function handleStrictParse$1(weekdayName, format2, strict) {
1769          var i4, ii2, mom, llc = weekdayName.toLocaleLowerCase();
1770          if (!this._weekdaysParse) {
1771            this._weekdaysParse = [];
1772            this._shortWeekdaysParse = [];
1773            this._minWeekdaysParse = [];
1774            for (i4 = 0; i4 < 7; ++i4) {
1775              mom = createUTC([2e3, 1]).day(i4);
1776              this._minWeekdaysParse[i4] = this.weekdaysMin(
1777                mom,
1778                ""
1779              ).toLocaleLowerCase();
1780              this._shortWeekdaysParse[i4] = this.weekdaysShort(
1781                mom,
1782                ""
1783              ).toLocaleLowerCase();
1784              this._weekdaysParse[i4] = this.weekdays(mom, "").toLocaleLowerCase();
1785            }
1786          }
1787          if (strict) {
1788            if (format2 === "dddd") {
1789              ii2 = indexOf2.call(this._weekdaysParse, llc);
1790              return ii2 !== -1 ? ii2 : null;
1791            } else if (format2 === "ddd") {
1792              ii2 = indexOf2.call(this._shortWeekdaysParse, llc);
1793              return ii2 !== -1 ? ii2 : null;
1794            } else {
1795              ii2 = indexOf2.call(this._minWeekdaysParse, llc);
1796              return ii2 !== -1 ? ii2 : null;
1797            }
1798          } else {
1799            if (format2 === "dddd") {
1800              ii2 = indexOf2.call(this._weekdaysParse, llc);
1801              if (ii2 !== -1) {
1802                return ii2;
1803              }
1804              ii2 = indexOf2.call(this._shortWeekdaysParse, llc);
1805              if (ii2 !== -1) {
1806                return ii2;
1807              }
1808              ii2 = indexOf2.call(this._minWeekdaysParse, llc);
1809              return ii2 !== -1 ? ii2 : null;
1810            } else if (format2 === "ddd") {
1811              ii2 = indexOf2.call(this._shortWeekdaysParse, llc);
1812              if (ii2 !== -1) {
1813                return ii2;
1814              }
1815              ii2 = indexOf2.call(this._weekdaysParse, llc);
1816              if (ii2 !== -1) {
1817                return ii2;
1818              }
1819              ii2 = indexOf2.call(this._minWeekdaysParse, llc);
1820              return ii2 !== -1 ? ii2 : null;
1821            } else {
1822              ii2 = indexOf2.call(this._minWeekdaysParse, llc);
1823              if (ii2 !== -1) {
1824                return ii2;
1825              }
1826              ii2 = indexOf2.call(this._weekdaysParse, llc);
1827              if (ii2 !== -1) {
1828                return ii2;
1829              }
1830              ii2 = indexOf2.call(this._shortWeekdaysParse, llc);
1831              return ii2 !== -1 ? ii2 : null;
1832            }
1833          }
1834        }
1835        function localeWeekdaysParse(weekdayName, format2, strict) {
1836          var i4, mom, regex;
1837          if (this._weekdaysParseExact) {
1838            return handleStrictParse$1.call(this, weekdayName, format2, strict);
1839          }
1840          if (!this._weekdaysParse) {
1841            this._weekdaysParse = [];
1842            this._minWeekdaysParse = [];
1843            this._shortWeekdaysParse = [];
1844            this._fullWeekdaysParse = [];
1845          }
1846          for (i4 = 0; i4 < 7; i4++) {
1847            mom = createUTC([2e3, 1]).day(i4);
1848            if (strict && !this._fullWeekdaysParse[i4]) {
1849              this._fullWeekdaysParse[i4] = new RegExp(
1850                "^" + this.weekdays(mom, "").replace(".", "\\.?") + "$",
1851                "i"
1852              );
1853              this._shortWeekdaysParse[i4] = new RegExp(
1854                "^" + this.weekdaysShort(mom, "").replace(".", "\\.?") + "$",
1855                "i"
1856              );
1857              this._minWeekdaysParse[i4] = new RegExp(
1858                "^" + this.weekdaysMin(mom, "").replace(".", "\\.?") + "$",
1859                "i"
1860              );
1861            }
1862            if (!this._weekdaysParse[i4]) {
1863              regex = "^" + this.weekdays(mom, "") + "|^" + this.weekdaysShort(mom, "") + "|^" + this.weekdaysMin(mom, "");
1864              this._weekdaysParse[i4] = new RegExp(regex.replace(".", ""), "i");
1865            }
1866            if (strict && format2 === "dddd" && this._fullWeekdaysParse[i4].test(weekdayName)) {
1867              return i4;
1868            } else if (strict && format2 === "ddd" && this._shortWeekdaysParse[i4].test(weekdayName)) {
1869              return i4;
1870            } else if (strict && format2 === "dd" && this._minWeekdaysParse[i4].test(weekdayName)) {
1871              return i4;
1872            } else if (!strict && this._weekdaysParse[i4].test(weekdayName)) {
1873              return i4;
1874            }
1875          }
1876        }
1877        function getSetDayOfWeek(input) {
1878          if (!this.isValid()) {
1879            return input != null ? this : NaN;
1880          }
1881          var day = get2(this, "Day");
1882          if (input != null) {
1883            input = parseWeekday(input, this.localeData());
1884            return this.add(input - day, "d");
1885          } else {
1886            return day;
1887          }
1888        }
1889        function getSetLocaleDayOfWeek(input) {
1890          if (!this.isValid()) {
1891            return input != null ? this : NaN;
1892          }
1893          var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
1894          return input == null ? weekday : this.add(input - weekday, "d");
1895        }
1896        function getSetISODayOfWeek(input) {
1897          if (!this.isValid()) {
1898            return input != null ? this : NaN;
1899          }
1900          if (input != null) {
1901            var weekday = parseIsoWeekday(input, this.localeData());
1902            return this.day(this.day() % 7 ? weekday : weekday - 7);
1903          } else {
1904            return this.day() || 7;
1905          }
1906        }
1907        function weekdaysRegex(isStrict) {
1908          if (this._weekdaysParseExact) {
1909            if (!hasOwnProp(this, "_weekdaysRegex")) {
1910              computeWeekdaysParse.call(this);
1911            }
1912            if (isStrict) {
1913              return this._weekdaysStrictRegex;
1914            } else {
1915              return this._weekdaysRegex;
1916            }
1917          } else {
1918            if (!hasOwnProp(this, "_weekdaysRegex")) {
1919              this._weekdaysRegex = defaultWeekdaysRegex;
1920            }
1921            return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;
1922          }
1923        }
1924        function weekdaysShortRegex(isStrict) {
1925          if (this._weekdaysParseExact) {
1926            if (!hasOwnProp(this, "_weekdaysRegex")) {
1927              computeWeekdaysParse.call(this);
1928            }
1929            if (isStrict) {
1930              return this._weekdaysShortStrictRegex;
1931            } else {
1932              return this._weekdaysShortRegex;
1933            }
1934          } else {
1935            if (!hasOwnProp(this, "_weekdaysShortRegex")) {
1936              this._weekdaysShortRegex = defaultWeekdaysShortRegex;
1937            }
1938            return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
1939          }
1940        }
1941        function weekdaysMinRegex(isStrict) {
1942          if (this._weekdaysParseExact) {
1943            if (!hasOwnProp(this, "_weekdaysRegex")) {
1944              computeWeekdaysParse.call(this);
1945            }
1946            if (isStrict) {
1947              return this._weekdaysMinStrictRegex;
1948            } else {
1949              return this._weekdaysMinRegex;
1950            }
1951          } else {
1952            if (!hasOwnProp(this, "_weekdaysMinRegex")) {
1953              this._weekdaysMinRegex = defaultWeekdaysMinRegex;
1954            }
1955            return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
1956          }
1957        }
1958        function computeWeekdaysParse() {
1959          function cmpLenRev(a4, b4) {
1960            return b4.length - a4.length;
1961          }
1962          var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], i4, mom, minp, shortp, longp;
1963          for (i4 = 0; i4 < 7; i4++) {
1964            mom = createUTC([2e3, 1]).day(i4);
1965            minp = regexEscape(this.weekdaysMin(mom, ""));
1966            shortp = regexEscape(this.weekdaysShort(mom, ""));
1967            longp = regexEscape(this.weekdays(mom, ""));
1968            minPieces.push(minp);
1969            shortPieces.push(shortp);
1970            longPieces.push(longp);
1971            mixedPieces.push(minp);
1972            mixedPieces.push(shortp);
1973            mixedPieces.push(longp);
1974          }
1975          minPieces.sort(cmpLenRev);
1976          shortPieces.sort(cmpLenRev);
1977          longPieces.sort(cmpLenRev);
1978          mixedPieces.sort(cmpLenRev);
1979          this._weekdaysRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
1980          this._weekdaysShortRegex = this._weekdaysRegex;
1981          this._weekdaysMinRegex = this._weekdaysRegex;
1982          this._weekdaysStrictRegex = new RegExp(
1983            "^(" + longPieces.join("|") + ")",
1984            "i"
1985          );
1986          this._weekdaysShortStrictRegex = new RegExp(
1987            "^(" + shortPieces.join("|") + ")",
1988            "i"
1989          );
1990          this._weekdaysMinStrictRegex = new RegExp(
1991            "^(" + minPieces.join("|") + ")",
1992            "i"
1993          );
1994        }
1995        function hFormat() {
1996          return this.hours() % 12 || 12;
1997        }
1998        function kFormat() {
1999          return this.hours() || 24;
2000        }
2001        addFormatToken("H", ["HH", 2], 0, "hour");
2002        addFormatToken("h", ["hh", 2], 0, hFormat);
2003        addFormatToken("k", ["kk", 2], 0, kFormat);
2004        addFormatToken("hmm", 0, 0, function() {
2005          return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2);
2006        });
2007        addFormatToken("hmmss", 0, 0, function() {
2008          return "" + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
2009        });
2010        addFormatToken("Hmm", 0, 0, function() {
2011          return "" + this.hours() + zeroFill(this.minutes(), 2);
2012        });
2013        addFormatToken("Hmmss", 0, 0, function() {
2014          return "" + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);
2015        });
2016        function meridiem(token2, lowercase) {
2017          addFormatToken(token2, 0, 0, function() {
2018            return this.localeData().meridiem(
2019              this.hours(),
2020              this.minutes(),
2021              lowercase
2022            );
2023          });
2024        }
2025        meridiem("a", true);
2026        meridiem("A", false);
2027        function matchMeridiem(isStrict, locale2) {
2028          return locale2._meridiemParse;
2029        }
2030        addRegexToken("a", matchMeridiem);
2031        addRegexToken("A", matchMeridiem);
2032        addRegexToken("H", match1to2, match1to2HasZero);
2033        addRegexToken("h", match1to2, match1to2NoLeadingZero);
2034        addRegexToken("k", match1to2, match1to2NoLeadingZero);
2035        addRegexToken("HH", match1to2, match2);
2036        addRegexToken("hh", match1to2, match2);
2037        addRegexToken("kk", match1to2, match2);
2038        addRegexToken("hmm", match3to4);
2039        addRegexToken("hmmss", match5to6);
2040        addRegexToken("Hmm", match3to4);
2041        addRegexToken("Hmmss", match5to6);
2042        addParseToken(["H", "HH"], HOUR);
2043        addParseToken(["k", "kk"], function(input, array, config2) {
2044          var kInput = toInt(input);
2045          array[HOUR] = kInput === 24 ? 0 : kInput;
2046        });
2047        addParseToken(["a", "A"], function(input, array, config2) {
2048          config2._isPm = config2._locale.isPM(input);
2049          config2._meridiem = input;
2050        });
2051        addParseToken(["h", "hh"], function(input, array, config2) {
2052          array[HOUR] = toInt(input);
2053          getParsingFlags(config2).bigHour = true;
2054        });
2055        addParseToken("hmm", function(input, array, config2) {
2056          var pos = input.length - 2;
2057          array[HOUR] = toInt(input.substr(0, pos));
2058          array[MINUTE] = toInt(input.substr(pos));
2059          getParsingFlags(config2).bigHour = true;
2060        });
2061        addParseToken("hmmss", function(input, array, config2) {
2062          var pos1 = input.length - 4, pos2 = input.length - 2;
2063          array[HOUR] = toInt(input.substr(0, pos1));
2064          array[MINUTE] = toInt(input.substr(pos1, 2));
2065          array[SECOND] = toInt(input.substr(pos2));
2066          getParsingFlags(config2).bigHour = true;
2067        });
2068        addParseToken("Hmm", function(input, array, config2) {
2069          var pos = input.length - 2;
2070          array[HOUR] = toInt(input.substr(0, pos));
2071          array[MINUTE] = toInt(input.substr(pos));
2072        });
2073        addParseToken("Hmmss", function(input, array, config2) {
2074          var pos1 = input.length - 4, pos2 = input.length - 2;
2075          array[HOUR] = toInt(input.substr(0, pos1));
2076          array[MINUTE] = toInt(input.substr(pos1, 2));
2077          array[SECOND] = toInt(input.substr(pos2));
2078        });
2079        function localeIsPM(input) {
2080          return (input + "").toLowerCase().charAt(0) === "p";
2081        }
2082        var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i, getSetHour = makeGetSet("Hours", true);
2083        function localeMeridiem(hours2, minutes2, isLower) {
2084          if (hours2 > 11) {
2085            return isLower ? "pm" : "PM";
2086          } else {
2087            return isLower ? "am" : "AM";
2088          }
2089        }
2090        var baseConfig = {
2091          calendar: defaultCalendar,
2092          longDateFormat: defaultLongDateFormat,
2093          invalidDate: defaultInvalidDate,
2094          ordinal: defaultOrdinal,
2095          dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
2096          relativeTime: defaultRelativeTime,
2097          months: defaultLocaleMonths,
2098          monthsShort: defaultLocaleMonthsShort,
2099          week: defaultLocaleWeek,
2100          weekdays: defaultLocaleWeekdays,
2101          weekdaysMin: defaultLocaleWeekdaysMin,
2102          weekdaysShort: defaultLocaleWeekdaysShort,
2103          meridiemParse: defaultLocaleMeridiemParse
2104        };
2105        var locales = {}, localeFamilies = {}, globalLocale;
2106        function commonPrefix(arr1, arr2) {
2107          var i4, minl = Math.min(arr1.length, arr2.length);
2108          for (i4 = 0; i4 < minl; i4 += 1) {
2109            if (arr1[i4] !== arr2[i4]) {
2110              return i4;
2111            }
2112          }
2113          return minl;
2114        }
2115        function normalizeLocale(key) {
2116          return key ? key.toLowerCase().replace("_", "-") : key;
2117        }
2118        function chooseLocale(names) {
2119          var i4 = 0, j5, next, locale2, split;
2120          while (i4 < names.length) {
2121            split = normalizeLocale(names[i4]).split("-");
2122            j5 = split.length;
2123            next = normalizeLocale(names[i4 + 1]);
2124            next = next ? next.split("-") : null;
2125            while (j5 > 0) {
2126              locale2 = loadLocale(split.slice(0, j5).join("-"));
2127              if (locale2) {
2128                return locale2;
2129              }
2130              if (next && next.length >= j5 && commonPrefix(split, next) >= j5 - 1) {
2131                break;
2132              }
2133              j5--;
2134            }
2135            i4++;
2136          }
2137          return globalLocale;
2138        }
2139        function isLocaleNameSane(name) {
2140          return !!(name && name.match("^[^/\\\\]*$"));
2141        }
2142        function loadLocale(name) {
2143          var oldLocale = null, aliasedRequire;
2144          if (locales[name] === void 0 && typeof module !== "undefined" && module && module.exports && isLocaleNameSane(name)) {
2145            try {
2146              oldLocale = globalLocale._abbr;
2147              aliasedRequire = __require;
2148              aliasedRequire("./locale/" + name);
2149              getSetGlobalLocale(oldLocale);
2150            } catch (e4) {
2151              locales[name] = null;
2152            }
2153          }
2154          return locales[name];
2155        }
2156        function getSetGlobalLocale(key, values) {
2157          var data;
2158          if (key) {
2159            if (isUndefined(values)) {
2160              data = getLocale(key);
2161            } else {
2162              data = defineLocale(key, values);
2163            }
2164            if (data) {
2165              globalLocale = data;
2166            } else {
2167              if (typeof console !== "undefined" && console.warn) {
2168                console.warn(
2169                  "Locale " + key + " not found. Did you forget to load it?"
2170                );
2171              }
2172            }
2173          }
2174          return globalLocale._abbr;
2175        }
2176        function defineLocale(name, config2) {
2177          if (config2 !== null) {
2178            var locale2, parentConfig = baseConfig;
2179            config2.abbr = name;
2180            if (locales[name] != null) {
2181              deprecateSimple(
2182                "defineLocaleOverride",
2183                "use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."
2184              );
2185              parentConfig = locales[name]._config;
2186            } else if (config2.parentLocale != null) {
2187              if (locales[config2.parentLocale] != null) {
2188                parentConfig = locales[config2.parentLocale]._config;
2189              } else {
2190                locale2 = loadLocale(config2.parentLocale);
2191                if (locale2 != null) {
2192                  parentConfig = locale2._config;
2193                } else {
2194                  if (!localeFamilies[config2.parentLocale]) {
2195                    localeFamilies[config2.parentLocale] = [];
2196                  }
2197                  localeFamilies[config2.parentLocale].push({
2198                    name,
2199                    config: config2
2200                  });
2201                  return null;
2202                }
2203              }
2204            }
2205            locales[name] = new Locale(mergeConfigs(parentConfig, config2));
2206            if (localeFamilies[name]) {
2207              localeFamilies[name].forEach(function(x5) {
2208                defineLocale(x5.name, x5.config);
2209              });
2210            }
2211            getSetGlobalLocale(name);
2212            return locales[name];
2213          } else {
2214            delete locales[name];
2215            return null;
2216          }
2217        }
2218        function updateLocale(name, config2) {
2219          if (config2 != null) {
2220            var locale2, tmpLocale, parentConfig = baseConfig;
2221            if (locales[name] != null && locales[name].parentLocale != null) {
2222              locales[name].set(mergeConfigs(locales[name]._config, config2));
2223            } else {
2224              tmpLocale = loadLocale(name);
2225              if (tmpLocale != null) {
2226                parentConfig = tmpLocale._config;
2227              }
2228              config2 = mergeConfigs(parentConfig, config2);
2229              if (tmpLocale == null) {
2230                config2.abbr = name;
2231              }
2232              locale2 = new Locale(config2);
2233              locale2.parentLocale = locales[name];
2234              locales[name] = locale2;
2235            }
2236            getSetGlobalLocale(name);
2237          } else {
2238            if (locales[name] != null) {
2239              if (locales[name].parentLocale != null) {
2240                locales[name] = locales[name].parentLocale;
2241                if (name === getSetGlobalLocale()) {
2242                  getSetGlobalLocale(name);
2243                }
2244              } else if (locales[name] != null) {
2245                delete locales[name];
2246              }
2247            }
2248          }
2249          return locales[name];
2250        }
2251        function getLocale(key) {
2252          var locale2;
2253          if (key && key._locale && key._locale._abbr) {
2254            key = key._locale._abbr;
2255          }
2256          if (!key) {
2257            return globalLocale;
2258          }
2259          if (!isArray(key)) {
2260            locale2 = loadLocale(key);
2261            if (locale2) {
2262              return locale2;
2263            }
2264            key = [key];
2265          }
2266          return chooseLocale(key);
2267        }
2268        function listLocales() {
2269          return keys(locales);
2270        }
2271        function checkOverflow2(m5) {
2272          var overflow, a4 = m5._a;
2273          if (a4 && getParsingFlags(m5).overflow === -2) {
2274            overflow = a4[MONTH] < 0 || a4[MONTH] > 11 ? MONTH : a4[DATE] < 1 || a4[DATE] > daysInMonth(a4[YEAR], a4[MONTH]) ? DATE : a4[HOUR] < 0 || a4[HOUR] > 24 || a4[HOUR] === 24 && (a4[MINUTE] !== 0 || a4[SECOND] !== 0 || a4[MILLISECOND] !== 0) ? HOUR : a4[MINUTE] < 0 || a4[MINUTE] > 59 ? MINUTE : a4[SECOND] < 0 || a4[SECOND] > 59 ? SECOND : a4[MILLISECOND] < 0 || a4[MILLISECOND] > 999 ? MILLISECOND : -1;
2275            if (getParsingFlags(m5)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
2276              overflow = DATE;
2277            }
2278            if (getParsingFlags(m5)._overflowWeeks && overflow === -1) {
2279              overflow = WEEK;
2280            }
2281            if (getParsingFlags(m5)._overflowWeekday && overflow === -1) {
2282              overflow = WEEKDAY;
2283            }
2284            getParsingFlags(m5).overflow = overflow;
2285          }
2286          return m5;
2287        }
2288        var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/, tzRegex = /Z|[+-]\d\d(?::?\d\d)?/, isoDates = [
2289          ["YYYYYY-MM-DD", /[+-]\d{6}-\d\d-\d\d/],
2290          ["YYYY-MM-DD", /\d{4}-\d\d-\d\d/],
2291          ["GGGG-[W]WW-E", /\d{4}-W\d\d-\d/],
2292          ["GGGG-[W]WW", /\d{4}-W\d\d/, false],
2293          ["YYYY-DDD", /\d{4}-\d{3}/],
2294          ["YYYY-MM", /\d{4}-\d\d/, false],
2295          ["YYYYYYMMDD", /[+-]\d{10}/],
2296          ["YYYYMMDD", /\d{8}/],
2297          ["GGGG[W]WWE", /\d{4}W\d{3}/],
2298          ["GGGG[W]WW", /\d{4}W\d{2}/, false],
2299          ["YYYYDDD", /\d{7}/],
2300          ["YYYYMM", /\d{6}/, false],
2301          ["YYYY", /\d{4}/, false]
2302        ], isoTimes = [
2303          ["HH:mm:ss.SSSS", /\d\d:\d\d:\d\d\.\d+/],
2304          ["HH:mm:ss,SSSS", /\d\d:\d\d:\d\d,\d+/],
2305          ["HH:mm:ss", /\d\d:\d\d:\d\d/],
2306          ["HH:mm", /\d\d:\d\d/],
2307          ["HHmmss.SSSS", /\d\d\d\d\d\d\.\d+/],
2308          ["HHmmss,SSSS", /\d\d\d\d\d\d,\d+/],
2309          ["HHmmss", /\d\d\d\d\d\d/],
2310          ["HHmm", /\d\d\d\d/],
2311          ["HH", /\d\d/]
2312        ], aspNetJsonRegex = /^\/?Date\((-?\d+)/i, rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/, obsOffsets = {
2313          UT: 0,
2314          GMT: 0,
2315          EDT: -4 * 60,
2316          EST: -5 * 60,
2317          CDT: -5 * 60,
2318          CST: -6 * 60,
2319          MDT: -6 * 60,
2320          MST: -7 * 60,
2321          PDT: -7 * 60,
2322          PST: -8 * 60
2323        };
2324        function configFromISO(config2) {
2325          var i4, l4, string = config2._i, match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), allowTime, dateFormat, timeFormat, tzFormat, isoDatesLen = isoDates.length, isoTimesLen = isoTimes.length;
2326          if (match) {
2327            getParsingFlags(config2).iso = true;
2328            for (i4 = 0, l4 = isoDatesLen; i4 < l4; i4++) {
2329              if (isoDates[i4][1].exec(match[1])) {
2330                dateFormat = isoDates[i4][0];
2331                allowTime = isoDates[i4][2] !== false;
2332                break;
2333              }
2334            }
2335            if (dateFormat == null) {
2336              config2._isValid = false;
2337              return;
2338            }
2339            if (match[3]) {
2340              for (i4 = 0, l4 = isoTimesLen; i4 < l4; i4++) {
2341                if (isoTimes[i4][1].exec(match[3])) {
2342                  timeFormat = (match[2] || " ") + isoTimes[i4][0];
2343                  break;
2344                }
2345              }
2346              if (timeFormat == null) {
2347                config2._isValid = false;
2348                return;
2349              }
2350            }
2351            if (!allowTime && timeFormat != null) {
2352              config2._isValid = false;
2353              return;
2354            }
2355            if (match[4]) {
2356              if (tzRegex.exec(match[4])) {
2357                tzFormat = "Z";
2358              } else {
2359                config2._isValid = false;
2360                return;
2361              }
2362            }
2363            config2._f = dateFormat + (timeFormat || "") + (tzFormat || "");
2364            configFromStringAndFormat(config2);
2365          } else {
2366            config2._isValid = false;
2367          }
2368        }
2369        function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
2370          var result = [
2371            untruncateYear(yearStr),
2372            defaultLocaleMonthsShort.indexOf(monthStr),
2373            parseInt(dayStr, 10),
2374            parseInt(hourStr, 10),
2375            parseInt(minuteStr, 10)
2376          ];
2377          if (secondStr) {
2378            result.push(parseInt(secondStr, 10));
2379          }
2380          return result;
2381        }
2382        function untruncateYear(yearStr) {
2383          var year = parseInt(yearStr, 10);
2384          if (year <= 49) {
2385            return 2e3 + year;
2386          } else if (year <= 999) {
2387            return 1900 + year;
2388          }
2389          return year;
2390        }
2391        function preprocessRFC2822(s4) {
2392          return s4.replace(/\([^()]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").replace(/^\s\s*/, "").replace(/\s\s*$/, "");
2393        }
2394        function checkWeekday(weekdayStr, parsedInput, config2) {
2395          if (weekdayStr) {
2396            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr), weekdayActual = new Date(
2397              parsedInput[0],
2398              parsedInput[1],
2399              parsedInput[2]
2400            ).getDay();
2401            if (weekdayProvided !== weekdayActual) {
2402              getParsingFlags(config2).weekdayMismatch = true;
2403              config2._isValid = false;
2404              return false;
2405            }
2406          }
2407          return true;
2408        }
2409        function calculateOffset(obsOffset, militaryOffset, numOffset) {
2410          if (obsOffset) {
2411            return obsOffsets[obsOffset];
2412          } else if (militaryOffset) {
2413            return 0;
2414          } else {
2415            var hm = parseInt(numOffset, 10), m5 = hm % 100, h4 = (hm - m5) / 100;
2416            return h4 * 60 + m5;
2417          }
2418        }
2419        function configFromRFC2822(config2) {
2420          var match = rfc2822.exec(preprocessRFC2822(config2._i)), parsedArray;
2421          if (match) {
2422            parsedArray = extractFromRFC2822Strings(
2423              match[4],
2424              match[3],
2425              match[2],
2426              match[5],
2427              match[6],
2428              match[7]
2429            );
2430            if (!checkWeekday(match[1], parsedArray, config2)) {
2431              return;
2432            }
2433            config2._a = parsedArray;
2434            config2._tzm = calculateOffset(match[8], match[9], match[10]);
2435            config2._d = createUTCDate.apply(null, config2._a);
2436            config2._d.setUTCMinutes(config2._d.getUTCMinutes() - config2._tzm);
2437            getParsingFlags(config2).rfc2822 = true;
2438          } else {
2439            config2._isValid = false;
2440          }
2441        }
2442        function configFromString(config2) {
2443          var matched = aspNetJsonRegex.exec(config2._i);
2444          if (matched !== null) {
2445            config2._d = new Date(+matched[1]);
2446            return;
2447          }
2448          configFromISO(config2);
2449          if (config2._isValid === false) {
2450            delete config2._isValid;
2451          } else {
2452            return;
2453          }
2454          configFromRFC2822(config2);
2455          if (config2._isValid === false) {
2456            delete config2._isValid;
2457          } else {
2458            return;
2459          }
2460          if (config2._strict) {
2461            config2._isValid = false;
2462          } else {
2463            hooks.createFromInputFallback(config2);
2464          }
2465        }
2466        hooks.createFromInputFallback = deprecate(
2467          "value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",
2468          function(config2) {
2469            config2._d = new Date(config2._i + (config2._useUTC ? " UTC" : ""));
2470          }
2471        );
2472        function defaults2(a4, b4, c4) {
2473          if (a4 != null) {
2474            return a4;
2475          }
2476          if (b4 != null) {
2477            return b4;
2478          }
2479          return c4;
2480        }
2481        function currentDateArray(config2) {
2482          var nowValue = new Date(hooks.now());
2483          if (config2._useUTC) {
2484            return [
2485              nowValue.getUTCFullYear(),
2486              nowValue.getUTCMonth(),
2487              nowValue.getUTCDate()
2488            ];
2489          }
2490          return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
2491        }
2492        function configFromArray(config2) {
2493          var i4, date, input = [], currentDate, expectedWeekday, yearToUse;
2494          if (config2._d) {
2495            return;
2496          }
2497          currentDate = currentDateArray(config2);
2498          if (config2._w && config2._a[DATE] == null && config2._a[MONTH] == null) {
2499            dayOfYearFromWeekInfo(config2);
2500          }
2501          if (config2._dayOfYear != null) {
2502            yearToUse = defaults2(config2._a[YEAR], currentDate[YEAR]);
2503            if (config2._dayOfYear > daysInYear(yearToUse) || config2._dayOfYear === 0) {
2504              getParsingFlags(config2)._overflowDayOfYear = true;
2505            }
2506            date = createUTCDate(yearToUse, 0, config2._dayOfYear);
2507            config2._a[MONTH] = date.getUTCMonth();
2508            config2._a[DATE] = date.getUTCDate();
2509          }
2510          for (i4 = 0; i4 < 3 && config2._a[i4] == null; ++i4) {
2511            config2._a[i4] = input[i4] = currentDate[i4];
2512          }
2513          for (; i4 < 7; i4++) {
2514            config2._a[i4] = input[i4] = config2._a[i4] == null ? i4 === 2 ? 1 : 0 : config2._a[i4];
2515          }
2516          if (config2._a[HOUR] === 24 && config2._a[MINUTE] === 0 && config2._a[SECOND] === 0 && config2._a[MILLISECOND] === 0) {
2517            config2._nextDay = true;
2518            config2._a[HOUR] = 0;
2519          }
2520          config2._d = (config2._useUTC ? createUTCDate : createDate).apply(
2521            null,
2522            input
2523          );
2524          expectedWeekday = config2._useUTC ? config2._d.getUTCDay() : config2._d.getDay();
2525          if (config2._tzm != null) {
2526            config2._d.setUTCMinutes(config2._d.getUTCMinutes() - config2._tzm);
2527          }
2528          if (config2._nextDay) {
2529            config2._a[HOUR] = 24;
2530          }
2531          if (config2._w && typeof config2._w.d !== "undefined" && config2._w.d !== expectedWeekday) {
2532            getParsingFlags(config2).weekdayMismatch = true;
2533          }
2534        }
2535        function dayOfYearFromWeekInfo(config2) {
2536          var w5, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
2537          w5 = config2._w;
2538          if (w5.GG != null || w5.W != null || w5.E != null) {
2539            dow = 1;
2540            doy = 4;
2541            weekYear = defaults2(
2542              w5.GG,
2543              config2._a[YEAR],
2544              weekOfYear2(createLocal(), 1, 4).year
2545            );
2546            week = defaults2(w5.W, 1);
2547            weekday = defaults2(w5.E, 1);
2548            if (weekday < 1 || weekday > 7) {
2549              weekdayOverflow = true;
2550            }
2551          } else {
2552            dow = config2._locale._week.dow;
2553            doy = config2._locale._week.doy;
2554            curWeek = weekOfYear2(createLocal(), dow, doy);
2555            weekYear = defaults2(w5.gg, config2._a[YEAR], curWeek.year);
2556            week = defaults2(w5.w, curWeek.week);
2557            if (w5.d != null) {
2558              weekday = w5.d;
2559              if (weekday < 0 || weekday > 6) {
2560                weekdayOverflow = true;
2561              }
2562            } else if (w5.e != null) {
2563              weekday = w5.e + dow;
2564              if (w5.e < 0 || w5.e > 6) {
2565                weekdayOverflow = true;
2566              }
2567            } else {
2568              weekday = dow;
2569            }
2570          }
2571          if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
2572            getParsingFlags(config2)._overflowWeeks = true;
2573          } else if (weekdayOverflow != null) {
2574            getParsingFlags(config2)._overflowWeekday = true;
2575          } else {
2576            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
2577            config2._a[YEAR] = temp.year;
2578            config2._dayOfYear = temp.dayOfYear;
2579          }
2580        }
2581        hooks.ISO_8601 = function() {
2582        };
2583        hooks.RFC_2822 = function() {
2584        };
2585        function configFromStringAndFormat(config2) {
2586          if (config2._f === hooks.ISO_8601) {
2587            configFromISO(config2);
2588            return;
2589          }
2590          if (config2._f === hooks.RFC_2822) {
2591            configFromRFC2822(config2);
2592            return;
2593          }
2594          config2._a = [];
2595          getParsingFlags(config2).empty = true;
2596          var string = "" + config2._i, i4, parsedInput, tokens2, token2, skipped, stringLength = string.length, totalParsedInputLength = 0, era, tokenLen;
2597          tokens2 = expandFormat(config2._f, config2._locale).match(formattingTokens) || [];
2598          tokenLen = tokens2.length;
2599          for (i4 = 0; i4 < tokenLen; i4++) {
2600            token2 = tokens2[i4];
2601            parsedInput = (string.match(getParseRegexForToken(token2, config2)) || [])[0];
2602            if (parsedInput) {
2603              skipped = string.substr(0, string.indexOf(parsedInput));
2604              if (skipped.length > 0) {
2605                getParsingFlags(config2).unusedInput.push(skipped);
2606              }
2607              string = string.slice(
2608                string.indexOf(parsedInput) + parsedInput.length
2609              );
2610              totalParsedInputLength += parsedInput.length;
2611            }
2612            if (formatTokenFunctions[token2]) {
2613              if (parsedInput) {
2614                getParsingFlags(config2).empty = false;
2615              } else {
2616                getParsingFlags(config2).unusedTokens.push(token2);
2617              }
2618              addTimeToArrayFromToken(token2, parsedInput, config2);
2619            } else if (config2._strict && !parsedInput) {
2620              getParsingFlags(config2).unusedTokens.push(token2);
2621            }
2622          }
2623          getParsingFlags(config2).charsLeftOver = stringLength - totalParsedInputLength;
2624          if (string.length > 0) {
2625            getParsingFlags(config2).unusedInput.push(string);
2626          }
2627          if (config2._a[HOUR] <= 12 && getParsingFlags(config2).bigHour === true && config2._a[HOUR] > 0) {
2628            getParsingFlags(config2).bigHour = void 0;
2629          }
2630          getParsingFlags(config2).parsedDateParts = config2._a.slice(0);
2631          getParsingFlags(config2).meridiem = config2._meridiem;
2632          config2._a[HOUR] = meridiemFixWrap(
2633            config2._locale,
2634            config2._a[HOUR],
2635            config2._meridiem
2636          );
2637          era = getParsingFlags(config2).era;
2638          if (era !== null) {
2639            config2._a[YEAR] = config2._locale.erasConvertYear(era, config2._a[YEAR]);
2640          }
2641          configFromArray(config2);
2642          checkOverflow2(config2);
2643        }
2644        function meridiemFixWrap(locale2, hour, meridiem2) {
2645          var isPm;
2646          if (meridiem2 == null) {
2647            return hour;
2648          }
2649          if (locale2.meridiemHour != null) {
2650            return locale2.meridiemHour(hour, meridiem2);
2651          } else if (locale2.isPM != null) {
2652            isPm = locale2.isPM(meridiem2);
2653            if (isPm && hour < 12) {
2654              hour += 12;
2655            }
2656            if (!isPm && hour === 12) {
2657              hour = 0;
2658            }
2659            return hour;
2660          } else {
2661            return hour;
2662          }
2663        }
2664        function configFromStringAndArray(config2) {
2665          var tempConfig, bestMoment, scoreToBeat, i4, currentScore, validFormatFound, bestFormatIsValid = false, configfLen = config2._f.length;
2666          if (configfLen === 0) {
2667            getParsingFlags(config2).invalidFormat = true;
2668            config2._d = new Date(NaN);
2669            return;
2670          }
2671          for (i4 = 0; i4 < configfLen; i4++) {
2672            currentScore = 0;
2673            validFormatFound = false;
2674            tempConfig = copyConfig({}, config2);
2675            if (config2._useUTC != null) {
2676              tempConfig._useUTC = config2._useUTC;
2677            }
2678            tempConfig._f = config2._f[i4];
2679            configFromStringAndFormat(tempConfig);
2680            if (isValid(tempConfig)) {
2681              validFormatFound = true;
2682            }
2683            currentScore += getParsingFlags(tempConfig).charsLeftOver;
2684            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
2685            getParsingFlags(tempConfig).score = currentScore;
2686            if (!bestFormatIsValid) {
2687              if (scoreToBeat == null || currentScore < scoreToBeat || validFormatFound) {
2688                scoreToBeat = currentScore;
2689                bestMoment = tempConfig;
2690                if (validFormatFound) {
2691                  bestFormatIsValid = true;
2692                }
2693              }
2694            } else {
2695              if (currentScore < scoreToBeat) {
2696                scoreToBeat = currentScore;
2697                bestMoment = tempConfig;
2698              }
2699            }
2700          }
2701          extend5(config2, bestMoment || tempConfig);
2702        }
2703        function configFromObject(config2) {
2704          if (config2._d) {
2705            return;
2706          }
2707          var i4 = normalizeObjectUnits(config2._i), dayOrDate = i4.day === void 0 ? i4.date : i4.day;
2708          config2._a = map(
2709            [i4.year, i4.month, dayOrDate, i4.hour, i4.minute, i4.second, i4.millisecond],
2710            function(obj) {
2711              return obj && parseInt(obj, 10);
2712            }
2713          );
2714          configFromArray(config2);
2715        }
2716        function createFromConfig(config2) {
2717          var res = new Moment3(checkOverflow2(prepareConfig(config2)));
2718          if (res._nextDay) {
2719            res.add(1, "d");
2720            res._nextDay = void 0;
2721          }
2722          return res;
2723        }
2724        function prepareConfig(config2) {
2725          var input = config2._i, format2 = config2._f;
2726          config2._locale = config2._locale || getLocale(config2._l);
2727          if (input === null || format2 === void 0 && input === "") {
2728            return createInvalid({ nullInput: true });
2729          }
2730          if (typeof input === "string") {
2731            config2._i = input = config2._locale.preparse(input);
2732          }
2733          if (isMoment(input)) {
2734            return new Moment3(checkOverflow2(input));
2735          } else if (isDate(input)) {
2736            config2._d = input;
2737          } else if (isArray(format2)) {
2738            configFromStringAndArray(config2);
2739          } else if (format2) {
2740            configFromStringAndFormat(config2);
2741          } else {
2742            configFromInput(config2);
2743          }
2744          if (!isValid(config2)) {
2745            config2._d = null;
2746          }
2747          return config2;
2748        }
2749        function configFromInput(config2) {
2750          var input = config2._i;
2751          if (isUndefined(input)) {
2752            config2._d = new Date(hooks.now());
2753          } else if (isDate(input)) {
2754            config2._d = new Date(input.valueOf());
2755          } else if (typeof input === "string") {
2756            configFromString(config2);
2757          } else if (isArray(input)) {
2758            config2._a = map(input.slice(0), function(obj) {
2759              return parseInt(obj, 10);
2760            });
2761            configFromArray(config2);
2762          } else if (isObject3(input)) {
2763            configFromObject(config2);
2764          } else if (isNumber(input)) {
2765            config2._d = new Date(input);
2766          } else {
2767            hooks.createFromInputFallback(config2);
2768          }
2769        }
2770        function createLocalOrUTC(input, format2, locale2, strict, isUTC) {
2771          var c4 = {};
2772          if (format2 === true || format2 === false) {
2773            strict = format2;
2774            format2 = void 0;
2775          }
2776          if (locale2 === true || locale2 === false) {
2777            strict = locale2;
2778            locale2 = void 0;
2779          }
2780          if (isObject3(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {
2781            input = void 0;
2782          }
2783          c4._isAMomentObject = true;
2784          c4._useUTC = c4._isUTC = isUTC;
2785          c4._l = locale2;
2786          c4._i = input;
2787          c4._f = format2;
2788          c4._strict = strict;
2789          return createFromConfig(c4);
2790        }
2791        function createLocal(input, format2, locale2, strict) {
2792          return createLocalOrUTC(input, format2, locale2, strict, false);
2793        }
2794        var prototypeMin = deprecate(
2795          "moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",
2796          function() {
2797            var other = createLocal.apply(null, arguments);
2798            if (this.isValid() && other.isValid()) {
2799              return other < this ? this : other;
2800            } else {
2801              return createInvalid();
2802            }
2803          }
2804        ), prototypeMax = deprecate(
2805          "moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",
2806          function() {
2807            var other = createLocal.apply(null, arguments);
2808            if (this.isValid() && other.isValid()) {
2809              return other > this ? this : other;
2810            } else {
2811              return createInvalid();
2812            }
2813          }
2814        );
2815        function pickBy(fn3, moments) {
2816          var res, i4;
2817          if (moments.length === 1 && isArray(moments[0])) {
2818            moments = moments[0];
2819          }
2820          if (!moments.length) {
2821            return createLocal();
2822          }
2823          res = moments[0];
2824          for (i4 = 1; i4 < moments.length; ++i4) {
2825            if (!moments[i4].isValid() || moments[i4][fn3](res)) {
2826              res = moments[i4];
2827            }
2828          }
2829          return res;
2830        }
2831        function min2() {
2832          var args = [].slice.call(arguments, 0);
2833          return pickBy("isBefore", args);
2834        }
2835        function max2() {
2836          var args = [].slice.call(arguments, 0);
2837          return pickBy("isAfter", args);
2838        }
2839        var now3 = function() {
2840          return Date.now ? Date.now() : +new Date();
2841        };
2842        var ordering = [
2843          "year",
2844          "quarter",
2845          "month",
2846          "week",
2847          "day",
2848          "hour",
2849          "minute",
2850          "second",
2851          "millisecond"
2852        ];
2853        function isDurationValid(m5) {
2854          var key, unitHasDecimal = false, i4, orderLen = ordering.length;
2855          for (key in m5) {
2856            if (hasOwnProp(m5, key) && !(indexOf2.call(ordering, key) !== -1 && (m5[key] == null || !isNaN(m5[key])))) {
2857              return false;
2858            }
2859          }
2860          for (i4 = 0; i4 < orderLen; ++i4) {
2861            if (m5[ordering[i4]]) {
2862              if (unitHasDecimal) {
2863                return false;
2864              }
2865              if (parseFloat(m5[ordering[i4]]) !== toInt(m5[ordering[i4]])) {
2866                unitHasDecimal = true;
2867              }
2868            }
2869          }
2870          return true;
2871        }
2872        function isValid$1() {
2873          return this._isValid;
2874        }
2875        function createInvalid$1() {
2876          return createDuration2(NaN);
2877        }
2878        function Duration(duration) {
2879          var normalizedInput = normalizeObjectUnits(duration), years2 = normalizedInput.year || 0, quarters = normalizedInput.quarter || 0, months2 = normalizedInput.month || 0, weeks2 = normalizedInput.week || normalizedInput.isoWeek || 0, days2 = normalizedInput.day || 0, hours2 = normalizedInput.hour || 0, minutes2 = normalizedInput.minute || 0, seconds2 = normalizedInput.second || 0, milliseconds2 = normalizedInput.millisecond || 0;
2880          this._isValid = isDurationValid(normalizedInput);
2881          this._milliseconds = +milliseconds2 + seconds2 * 1e3 + minutes2 * 6e4 + hours2 * 1e3 * 60 * 60;
2882          this._days = +days2 + weeks2 * 7;
2883          this._months = +months2 + quarters * 3 + years2 * 12;
2884          this._data = {};
2885          this._locale = getLocale();
2886          this._bubble();
2887        }
2888        function isDuration(obj) {
2889          return obj instanceof Duration;
2890        }
2891        function absRound(number) {
2892          if (number < 0) {
2893            return Math.round(-1 * number) * -1;
2894          } else {
2895            return Math.round(number);
2896          }
2897        }
2898        function compareArrays(array1, array2, dontConvert) {
2899          var len = Math.min(array1.length, array2.length), lengthDiff = Math.abs(array1.length - array2.length), diffs = 0, i4;
2900          for (i4 = 0; i4 < len; i4++) {
2901            if (dontConvert && array1[i4] !== array2[i4] || !dontConvert && toInt(array1[i4]) !== toInt(array2[i4])) {
2902              diffs++;
2903            }
2904          }
2905          return diffs + lengthDiff;
2906        }
2907        function offset2(token2, separator) {
2908          addFormatToken(token2, 0, 0, function() {
2909            var offset3 = this.utcOffset(), sign2 = "+";
2910            if (offset3 < 0) {
2911              offset3 = -offset3;
2912              sign2 = "-";
2913            }
2914            return sign2 + zeroFill(~~(offset3 / 60), 2) + separator + zeroFill(~~offset3 % 60, 2);
2915          });
2916        }
2917        offset2("Z", ":");
2918        offset2("ZZ", "");
2919        addRegexToken("Z", matchShortOffset);
2920        addRegexToken("ZZ", matchShortOffset);
2921        addParseToken(["Z", "ZZ"], function(input, array, config2) {
2922          config2._useUTC = true;
2923          config2._tzm = offsetFromString(matchShortOffset, input);
2924        });
2925        var chunkOffset = /([\+\-]|\d\d)/gi;
2926        function offsetFromString(matcher, string) {
2927          var matches2 = (string || "").match(matcher), chunk, parts, minutes2;
2928          if (matches2 === null) {
2929            return null;
2930          }
2931          chunk = matches2[matches2.length - 1] || [];
2932          parts = (chunk + "").match(chunkOffset) || ["-", 0, 0];
2933          minutes2 = +(parts[1] * 60) + toInt(parts[2]);
2934          return minutes2 === 0 ? 0 : parts[0] === "+" ? minutes2 : -minutes2;
2935        }
2936        function cloneWithOffset(input, model) {
2937          var res, diff2;
2938          if (model._isUTC) {
2939            res = model.clone();
2940            diff2 = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
2941            res._d.setTime(res._d.valueOf() + diff2);
2942            hooks.updateOffset(res, false);
2943            return res;
2944          } else {
2945            return createLocal(input).local();
2946          }
2947        }
2948        function getDateOffset(m5) {
2949          return -Math.round(m5._d.getTimezoneOffset());
2950        }
2951        hooks.updateOffset = function() {
2952        };
2953        function getSetOffset(input, keepLocalTime, keepMinutes) {
2954          var offset3 = this._offset || 0, localAdjust;
2955          if (!this.isValid()) {
2956            return input != null ? this : NaN;
2957          }
2958          if (input != null) {
2959            if (typeof input === "string") {
2960              input = offsetFromString(matchShortOffset, input);
2961              if (input === null) {
2962                return this;
2963              }
2964            } else if (Math.abs(input) < 16 && !keepMinutes) {
2965              input = input * 60;
2966            }
2967            if (!this._isUTC && keepLocalTime) {
2968              localAdjust = getDateOffset(this);
2969            }
2970            this._offset = input;
2971            this._isUTC = true;
2972            if (localAdjust != null) {
2973              this.add(localAdjust, "m");
2974            }
2975            if (offset3 !== input) {
2976              if (!keepLocalTime || this._changeInProgress) {
2977                addSubtract(
2978                  this,
2979                  createDuration2(input - offset3, "m"),
2980                  1,
2981                  false
2982                );
2983              } else if (!this._changeInProgress) {
2984                this._changeInProgress = true;
2985                hooks.updateOffset(this, true);
2986                this._changeInProgress = null;
2987              }
2988            }
2989            return this;
2990          } else {
2991            return this._isUTC ? offset3 : getDateOffset(this);
2992          }
2993        }
2994        function getSetZone(input, keepLocalTime) {
2995          if (input != null) {
2996            if (typeof input !== "string") {
2997              input = -input;
2998            }
2999            this.utcOffset(input, keepLocalTime);
3000            return this;
3001          } else {
3002            return -this.utcOffset();
3003          }
3004        }
3005        function setOffsetToUTC(keepLocalTime) {
3006          return this.utcOffset(0, keepLocalTime);
3007        }
3008        function setOffsetToLocal(keepLocalTime) {
3009          if (this._isUTC) {
3010            this.utcOffset(0, keepLocalTime);
3011            this._isUTC = false;
3012            if (keepLocalTime) {
3013              this.subtract(getDateOffset(this), "m");
3014            }
3015          }
3016          return this;
3017        }
3018        function setOffsetToParsedOffset() {
3019          if (this._tzm != null) {
3020            this.utcOffset(this._tzm, false, true);
3021          } else if (typeof this._i === "string") {
3022            var tZone = offsetFromString(matchOffset, this._i);
3023            if (tZone != null) {
3024              this.utcOffset(tZone);
3025            } else {
3026              this.utcOffset(0, true);
3027            }
3028          }
3029          return this;
3030        }
3031        function hasAlignedHourOffset(input) {
3032          if (!this.isValid()) {
3033            return false;
3034          }
3035          input = input ? createLocal(input).utcOffset() : 0;
3036          return (this.utcOffset() - input) % 60 === 0;
3037        }
3038        function isDaylightSavingTime() {
3039          return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();
3040        }
3041        function isDaylightSavingTimeShifted() {
3042          if (!isUndefined(this._isDSTShifted)) {
3043            return this._isDSTShifted;
3044          }
3045          var c4 = {}, other;
3046          copyConfig(c4, this);
3047          c4 = prepareConfig(c4);
3048          if (c4._a) {
3049            other = c4._isUTC ? createUTC(c4._a) : createLocal(c4._a);
3050            this._isDSTShifted = this.isValid() && compareArrays(c4._a, other.toArray()) > 0;
3051          } else {
3052            this._isDSTShifted = false;
3053          }
3054          return this._isDSTShifted;
3055        }
3056        function isLocal() {
3057          return this.isValid() ? !this._isUTC : false;
3058        }
3059        function isUtcOffset() {
3060          return this.isValid() ? this._isUTC : false;
3061        }
3062        function isUtc() {
3063          return this.isValid() ? this._isUTC && this._offset === 0 : false;
3064        }
3065        var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/, isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
3066        function createDuration2(input, key) {
3067          var duration = input, match = null, sign2, ret, diffRes;
3068          if (isDuration(input)) {
3069            duration = {
3070              ms: input._milliseconds,
3071              d: input._days,
3072              M: input._months
3073            };
3074          } else if (isNumber(input) || !isNaN(+input)) {
3075            duration = {};
3076            if (key) {
3077              duration[key] = +input;
3078            } else {
3079              duration.milliseconds = +input;
3080            }
3081          } else if (match = aspNetRegex.exec(input)) {
3082            sign2 = match[1] === "-" ? -1 : 1;
3083            duration = {
3084              y: 0,
3085              d: toInt(match[DATE]) * sign2,
3086              h: toInt(match[HOUR]) * sign2,
3087              m: toInt(match[MINUTE]) * sign2,
3088              s: toInt(match[SECOND]) * sign2,
3089              ms: toInt(absRound(match[MILLISECOND] * 1e3)) * sign2
3090            };
3091          } else if (match = isoRegex.exec(input)) {
3092            sign2 = match[1] === "-" ? -1 : 1;
3093            duration = {
3094              y: parseIso(match[2], sign2),
3095              M: parseIso(match[3], sign2),
3096              w: parseIso(match[4], sign2),
3097              d: parseIso(match[5], sign2),
3098              h: parseIso(match[6], sign2),
3099              m: parseIso(match[7], sign2),
3100              s: parseIso(match[8], sign2)
3101            };
3102          } else if (duration == null) {
3103            duration = {};
3104          } else if (typeof duration === "object" && ("from" in duration || "to" in duration)) {
3105            diffRes = momentsDifference(
3106              createLocal(duration.from),
3107              createLocal(duration.to)
3108            );
3109            duration = {};
3110            duration.ms = diffRes.milliseconds;
3111            duration.M = diffRes.months;
3112          }
3113          ret = new Duration(duration);
3114          if (isDuration(input) && hasOwnProp(input, "_locale")) {
3115            ret._locale = input._locale;
3116          }
3117          if (isDuration(input) && hasOwnProp(input, "_isValid")) {
3118            ret._isValid = input._isValid;
3119          }
3120          return ret;
3121        }
3122        createDuration2.fn = Duration.prototype;
3123        createDuration2.invalid = createInvalid$1;
3124        function parseIso(inp, sign2) {
3125          var res = inp && parseFloat(inp.replace(",", "."));
3126          return (isNaN(res) ? 0 : res) * sign2;
3127        }
3128        function positiveMomentsDifference(base, other) {
3129          var res = {};
3130          res.months = other.month() - base.month() + (other.year() - base.year()) * 12;
3131          if (base.clone().add(res.months, "M").isAfter(other)) {
3132            --res.months;
3133          }
3134          res.milliseconds = +other - +base.clone().add(res.months, "M");
3135          return res;
3136        }
3137        function momentsDifference(base, other) {
3138          var res;
3139          if (!(base.isValid() && other.isValid())) {
3140            return { milliseconds: 0, months: 0 };
3141          }
3142          other = cloneWithOffset(other, base);
3143          if (base.isBefore(other)) {
3144            res = positiveMomentsDifference(base, other);
3145          } else {
3146            res = positiveMomentsDifference(other, base);
3147            res.milliseconds = -res.milliseconds;
3148            res.months = -res.months;
3149          }
3150          return res;
3151        }
3152        function createAdder(direction, name) {
3153          return function(val, period) {
3154            var dur, tmp;
3155            if (period !== null && !isNaN(+period)) {
3156              deprecateSimple(
3157                name,
3158                "moment()." + name + "(period, number) is deprecated. Please use moment()." + name + "(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."
3159              );
3160              tmp = val;
3161              val = period;
3162              period = tmp;
3163            }
3164            dur = createDuration2(val, period);
3165            addSubtract(this, dur, direction);
3166            return this;
3167          };
3168        }
3169        function addSubtract(mom, duration, isAdding, updateOffset) {
3170          var milliseconds2 = duration._milliseconds, days2 = absRound(duration._days), months2 = absRound(duration._months);
3171          if (!mom.isValid()) {
3172            return;
3173          }
3174          updateOffset = updateOffset == null ? true : updateOffset;
3175          if (months2) {
3176            setMonth(mom, get2(mom, "Month") + months2 * isAdding);
3177          }
3178          if (days2) {
3179            set$1(mom, "Date", get2(mom, "Date") + days2 * isAdding);
3180          }
3181          if (milliseconds2) {
3182            mom._d.setTime(mom._d.valueOf() + milliseconds2 * isAdding);
3183          }
3184          if (updateOffset) {
3185            hooks.updateOffset(mom, days2 || months2);
3186          }
3187        }
3188        var add2 = createAdder(1, "add"), subtract = createAdder(-1, "subtract");
3189        function isString(input) {
3190          return typeof input === "string" || input instanceof String;
3191        }
3192        function isMomentInput(input) {
3193          return isMoment(input) || isDate(input) || isString(input) || isNumber(input) || isNumberOrStringArray(input) || isMomentInputObject(input) || input === null || input === void 0;
3194        }
3195        function isMomentInputObject(input) {
3196          var objectTest = isObject3(input) && !isObjectEmpty(input), propertyTest = false, properties = [
3197            "years",
3198            "year",
3199            "y",
3200            "months",
3201            "month",
3202            "M",
3203            "days",
3204            "day",
3205            "d",
3206            "dates",
3207            "date",
3208            "D",
3209            "hours",
3210            "hour",
3211            "h",
3212            "minutes",
3213            "minute",
3214            "m",
3215            "seconds",
3216            "second",
3217            "s",
3218            "milliseconds",
3219            "millisecond",
3220            "ms"
3221          ], i4, property, propertyLen = properties.length;
3222          for (i4 = 0; i4 < propertyLen; i4 += 1) {
3223            property = properties[i4];
3224            propertyTest = propertyTest || hasOwnProp(input, property);
3225          }
3226          return objectTest && propertyTest;
3227        }
3228        function isNumberOrStringArray(input) {
3229          var arrayTest = isArray(input), dataTypeTest = false;
3230          if (arrayTest) {
3231            dataTypeTest = input.filter(function(item) {
3232              return !isNumber(item) && isString(input);
3233            }).length === 0;
3234          }
3235          return arrayTest && dataTypeTest;
3236        }
3237        function isCalendarSpec(input) {
3238          var objectTest = isObject3(input) && !isObjectEmpty(input), propertyTest = false, properties = [
3239            "sameDay",
3240            "nextDay",
3241            "lastDay",
3242            "nextWeek",
3243            "lastWeek",
3244            "sameElse"
3245          ], i4, property;
3246          for (i4 = 0; i4 < properties.length; i4 += 1) {
3247            property = properties[i4];
3248            propertyTest = propertyTest || hasOwnProp(input, property);
3249          }
3250          return objectTest && propertyTest;
3251        }
3252        function getCalendarFormat(myMoment, now4) {
3253          var diff2 = myMoment.diff(now4, "days", true);
3254          return diff2 < -6 ? "sameElse" : diff2 < -1 ? "lastWeek" : diff2 < 0 ? "lastDay" : diff2 < 1 ? "sameDay" : diff2 < 2 ? "nextDay" : diff2 < 7 ? "nextWeek" : "sameElse";
3255        }
3256        function calendar$1(time, formats) {
3257          if (arguments.length === 1) {
3258            if (!arguments[0]) {
3259              time = void 0;
3260              formats = void 0;
3261            } else if (isMomentInput(arguments[0])) {
3262              time = arguments[0];
3263              formats = void 0;
3264            } else if (isCalendarSpec(arguments[0])) {
3265              formats = arguments[0];
3266              time = void 0;
3267            }
3268          }
3269          var now4 = time || createLocal(), sod = cloneWithOffset(now4, this).startOf("day"), format2 = hooks.calendarFormat(this, sod) || "sameElse", output = formats && (isFunction(formats[format2]) ? formats[format2].call(this, now4) : formats[format2]);
3270          return this.format(
3271            output || this.localeData().calendar(format2, this, createLocal(now4))
3272          );
3273        }
3274        function clone() {
3275          return new Moment3(this);
3276        }
3277        function isAfter(input, units) {
3278          var localInput = isMoment(input) ? input : createLocal(input);
3279          if (!(this.isValid() && localInput.isValid())) {
3280            return false;
3281          }
3282          units = normalizeUnits(units) || "millisecond";
3283          if (units === "millisecond") {
3284            return this.valueOf() > localInput.valueOf();
3285          } else {
3286            return localInput.valueOf() < this.clone().startOf(units).valueOf();
3287          }
3288        }
3289        function isBefore(input, units) {
3290          var localInput = isMoment(input) ? input : createLocal(input);
3291          if (!(this.isValid() && localInput.isValid())) {
3292            return false;
3293          }
3294          units = normalizeUnits(units) || "millisecond";
3295          if (units === "millisecond") {
3296            return this.valueOf() < localInput.valueOf();
3297          } else {
3298            return this.clone().endOf(units).valueOf() < localInput.valueOf();
3299          }
3300        }
3301        function isBetween(from2, to3, units, inclusivity) {
3302          var localFrom = isMoment(from2) ? from2 : createLocal(from2), localTo = isMoment(to3) ? to3 : createLocal(to3);
3303          if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
3304            return false;
3305          }
3306          inclusivity = inclusivity || "()";
3307          return (inclusivity[0] === "(" ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ")" ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));
3308        }
3309        function isSame(input, units) {
3310          var localInput = isMoment(input) ? input : createLocal(input), inputMs;
3311          if (!(this.isValid() && localInput.isValid())) {
3312            return false;
3313          }
3314          units = normalizeUnits(units) || "millisecond";
3315          if (units === "millisecond") {
3316            return this.valueOf() === localInput.valueOf();
3317          } else {
3318            inputMs = localInput.valueOf();
3319            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
3320          }
3321        }
3322        function isSameOrAfter(input, units) {
3323          return this.isSame(input, units) || this.isAfter(input, units);
3324        }
3325        function isSameOrBefore(input, units) {
3326          return this.isSame(input, units) || this.isBefore(input, units);
3327        }
3328        function diff(input, units, asFloat) {
3329          var that, zoneDelta, output;
3330          if (!this.isValid()) {
3331            return NaN;
3332          }
3333          that = cloneWithOffset(input, this);
3334          if (!that.isValid()) {
3335            return NaN;
3336          }
3337          zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
3338          units = normalizeUnits(units);
3339          switch (units) {
3340            case "year":
3341              output = monthDiff(this, that) / 12;
3342              break;
3343            case "month":
3344              output = monthDiff(this, that);
3345              break;
3346            case "quarter":
3347              output = monthDiff(this, that) / 3;
3348              break;
3349            case "second":
3350              output = (this - that) / 1e3;
3351              break;
3352            case "minute":
3353              output = (this - that) / 6e4;
3354              break;
3355            case "hour":
3356              output = (this - that) / 36e5;
3357              break;
3358            case "day":
3359              output = (this - that - zoneDelta) / 864e5;
3360              break;
3361            case "week":
3362              output = (this - that - zoneDelta) / 6048e5;
3363              break;
3364            default:
3365              output = this - that;
3366          }
3367          return asFloat ? output : absFloor(output);
3368        }
3369        function monthDiff(a4, b4) {
3370          if (a4.date() < b4.date()) {
3371            return -monthDiff(b4, a4);
3372          }
3373          var wholeMonthDiff = (b4.year() - a4.year()) * 12 + (b4.month() - a4.month()), anchor = a4.clone().add(wholeMonthDiff, "months"), anchor2, adjust;
3374          if (b4 - anchor < 0) {
3375            anchor2 = a4.clone().add(wholeMonthDiff - 1, "months");
3376            adjust = (b4 - anchor) / (anchor - anchor2);
3377          } else {
3378            anchor2 = a4.clone().add(wholeMonthDiff + 1, "months");
3379            adjust = (b4 - anchor) / (anchor2 - anchor);
3380          }
3381          return -(wholeMonthDiff + adjust) || 0;
3382        }
3383        hooks.defaultFormat = "YYYY-MM-DDTHH:mm:ssZ";
3384        hooks.defaultFormatUtc = "YYYY-MM-DDTHH:mm:ss[Z]";
3385        function toString() {
3386          return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ");
3387        }
3388        function toISOString(keepOffset) {
3389          if (!this.isValid()) {
3390            return null;
3391          }
3392          var utc = keepOffset !== true, m5 = utc ? this.clone().utc() : this;
3393          if (m5.year() < 0 || m5.year() > 9999) {
3394            return formatMoment(
3395              m5,
3396              utc ? "YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"
3397            );
3398          }
3399          if (isFunction(Date.prototype.toISOString)) {
3400            if (utc) {
3401              return this.toDate().toISOString();
3402            } else {
3403              return new Date(this.valueOf() + this.utcOffset() * 60 * 1e3).toISOString().replace("Z", formatMoment(m5, "Z"));
3404            }
3405          }
3406          return formatMoment(
3407            m5,
3408            utc ? "YYYY-MM-DD[T]HH:mm:ss.SSS[Z]" : "YYYY-MM-DD[T]HH:mm:ss.SSSZ"
3409          );
3410        }
3411        function inspect() {
3412          if (!this.isValid()) {
3413            return "moment.invalid(/* " + this._i + " */)";
3414          }
3415          var func = "moment", zone = "", prefix, year, datetime, suffix;
3416          if (!this.isLocal()) {
3417            func = this.utcOffset() === 0 ? "moment.utc" : "moment.parseZone";
3418            zone = "Z";
3419          }
3420          prefix = "[" + func + '("]';
3421          year = 0 <= this.year() && this.year() <= 9999 ? "YYYY" : "YYYYYY";
3422          datetime = "-MM-DD[T]HH:mm:ss.SSS";
3423          suffix = zone + '[")]';
3424          return this.format(prefix + year + datetime + suffix);
3425        }
3426        function format(inputString) {
3427          if (!inputString) {
3428            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
3429          }
3430          var output = formatMoment(this, inputString);
3431          return this.localeData().postformat(output);
3432        }
3433        function from(time, withoutSuffix) {
3434          if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
3435            return createDuration2({ to: this, from: time }).locale(this.locale()).humanize(!withoutSuffix);
3436          } else {
3437            return this.localeData().invalidDate();
3438          }
3439        }
3440        function fromNow(withoutSuffix) {
3441          return this.from(createLocal(), withoutSuffix);
3442        }
3443        function to2(time, withoutSuffix) {
3444          if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {
3445            return createDuration2({ from: this, to: time }).locale(this.locale()).humanize(!withoutSuffix);
3446          } else {
3447            return this.localeData().invalidDate();
3448          }
3449        }
3450        function toNow(withoutSuffix) {
3451          return this.to(createLocal(), withoutSuffix);
3452        }
3453        function locale(key) {
3454          var newLocaleData;
3455          if (key === void 0) {
3456            return this._locale._abbr;
3457          } else {
3458            newLocaleData = getLocale(key);
3459            if (newLocaleData != null) {
3460              this._locale = newLocaleData;
3461            }
3462            return this;
3463          }
3464        }
3465        var lang2 = deprecate(
3466          "moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",
3467          function(key) {
3468            if (key === void 0) {
3469              return this.localeData();
3470            } else {
3471              return this.locale(key);
3472            }
3473          }
3474        );
3475        function localeData() {
3476          return this._locale;
3477        }
3478        var MS_PER_SECOND = 1e3, MS_PER_MINUTE = 60 * MS_PER_SECOND, MS_PER_HOUR = 60 * MS_PER_MINUTE, MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
3479        function mod$1(dividend, divisor) {
3480          return (dividend % divisor + divisor) % divisor;
3481        }
3482        function localStartOfDate(y4, m5, d3) {
3483          if (y4 < 100 && y4 >= 0) {
3484            return new Date(y4 + 400, m5, d3) - MS_PER_400_YEARS;
3485          } else {
3486            return new Date(y4, m5, d3).valueOf();
3487          }
3488        }
3489        function utcStartOfDate(y4, m5, d3) {
3490          if (y4 < 100 && y4 >= 0) {
3491            return Date.UTC(y4 + 400, m5, d3) - MS_PER_400_YEARS;
3492          } else {
3493            return Date.UTC(y4, m5, d3);
3494          }
3495        }
3496        function startOf(units) {
3497          var time, startOfDate;
3498          units = normalizeUnits(units);
3499          if (units === void 0 || units === "millisecond" || !this.isValid()) {
3500            return this;
3501          }
3502          startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
3503          switch (units) {
3504            case "year":
3505              time = startOfDate(this.year(), 0, 1);
3506              break;
3507            case "quarter":
3508              time = startOfDate(
3509                this.year(),
3510                this.month() - this.month() % 3,
3511                1
3512              );
3513              break;
3514            case "month":
3515              time = startOfDate(this.year(), this.month(), 1);
3516              break;
3517            case "week":
3518              time = startOfDate(
3519                this.year(),
3520                this.month(),
3521                this.date() - this.weekday()
3522              );
3523              break;
3524            case "isoWeek":
3525              time = startOfDate(
3526                this.year(),
3527                this.month(),
3528                this.date() - (this.isoWeekday() - 1)
3529              );
3530              break;
3531            case "day":
3532            case "date":
3533              time = startOfDate(this.year(), this.month(), this.date());
3534              break;
3535            case "hour":
3536              time = this._d.valueOf();
3537              time -= mod$1(
3538                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
3539                MS_PER_HOUR
3540              );
3541              break;
3542            case "minute":
3543              time = this._d.valueOf();
3544              time -= mod$1(time, MS_PER_MINUTE);
3545              break;
3546            case "second":
3547              time = this._d.valueOf();
3548              time -= mod$1(time, MS_PER_SECOND);
3549              break;
3550          }
3551          this._d.setTime(time);
3552          hooks.updateOffset(this, true);
3553          return this;
3554        }
3555        function endOf(units) {
3556          var time, startOfDate;
3557          units = normalizeUnits(units);
3558          if (units === void 0 || units === "millisecond" || !this.isValid()) {
3559            return this;
3560          }
3561          startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
3562          switch (units) {
3563            case "year":
3564              time = startOfDate(this.year() + 1, 0, 1) - 1;
3565              break;
3566            case "quarter":
3567              time = startOfDate(
3568                this.year(),
3569                this.month() - this.month() % 3 + 3,
3570                1
3571              ) - 1;
3572              break;
3573            case "month":
3574              time = startOfDate(this.year(), this.month() + 1, 1) - 1;
3575              break;
3576            case "week":
3577              time = startOfDate(
3578                this.year(),
3579                this.month(),
3580                this.date() - this.weekday() + 7
3581              ) - 1;
3582              break;
3583            case "isoWeek":
3584              time = startOfDate(
3585                this.year(),
3586                this.month(),
3587                this.date() - (this.isoWeekday() - 1) + 7
3588              ) - 1;
3589              break;
3590            case "day":
3591            case "date":
3592              time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
3593              break;
3594            case "hour":
3595              time = this._d.valueOf();
3596              time += MS_PER_HOUR - mod$1(
3597                time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
3598                MS_PER_HOUR
3599              ) - 1;
3600              break;
3601            case "minute":
3602              time = this._d.valueOf();
3603              time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
3604              break;
3605            case "second":
3606              time = this._d.valueOf();
3607              time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
3608              break;
3609          }
3610          this._d.setTime(time);
3611          hooks.updateOffset(this, true);
3612          return this;
3613        }
3614        function valueOf() {
3615          return this._d.valueOf() - (this._offset || 0) * 6e4;
3616        }
3617        function unix() {
3618          return Math.floor(this.valueOf() / 1e3);
3619        }
3620        function toDate() {
3621          return new Date(this.valueOf());
3622        }
3623        function toArray3() {
3624          var m5 = this;
3625          return [
3626            m5.year(),
3627            m5.month(),
3628            m5.date(),
3629            m5.hour(),
3630            m5.minute(),
3631            m5.second(),
3632            m5.millisecond()
3633          ];
3634        }
3635        function toObject() {
3636          var m5 = this;
3637          return {
3638            years: m5.year(),
3639            months: m5.month(),
3640            date: m5.date(),
3641            hours: m5.hours(),
3642            minutes: m5.minutes(),
3643            seconds: m5.seconds(),
3644            milliseconds: m5.milliseconds()
3645          };
3646        }
3647        function toJSON() {
3648          return this.isValid() ? this.toISOString() : null;
3649        }
3650        function isValid$2() {
3651          return isValid(this);
3652        }
3653        function parsingFlags() {
3654          return extend5({}, getParsingFlags(this));
3655        }
3656        function invalidAt() {
3657          return getParsingFlags(this).overflow;
3658        }
3659        function creationData() {
3660          return {
3661            input: this._i,
3662            format: this._f,
3663            locale: this._locale,
3664            isUTC: this._isUTC,
3665            strict: this._strict
3666          };
3667        }
3668        addFormatToken("N", 0, 0, "eraAbbr");
3669        addFormatToken("NN", 0, 0, "eraAbbr");
3670        addFormatToken("NNN", 0, 0, "eraAbbr");
3671        addFormatToken("NNNN", 0, 0, "eraName");
3672        addFormatToken("NNNNN", 0, 0, "eraNarrow");
3673        addFormatToken("y", ["y", 1], "yo", "eraYear");
3674        addFormatToken("y", ["yy", 2], 0, "eraYear");
3675        addFormatToken("y", ["yyy", 3], 0, "eraYear");
3676        addFormatToken("y", ["yyyy", 4], 0, "eraYear");
3677        addRegexToken("N", matchEraAbbr);
3678        addRegexToken("NN", matchEraAbbr);
3679        addRegexToken("NNN", matchEraAbbr);
3680        addRegexToken("NNNN", matchEraName);
3681        addRegexToken("NNNNN", matchEraNarrow);
3682        addParseToken(
3683          ["N", "NN", "NNN", "NNNN", "NNNNN"],
3684          function(input, array, config2, token2) {
3685            var era = config2._locale.erasParse(input, token2, config2._strict);
3686            if (era) {
3687              getParsingFlags(config2).era = era;
3688            } else {
3689              getParsingFlags(config2).invalidEra = input;
3690            }
3691          }
3692        );
3693        addRegexToken("y", matchUnsigned);
3694        addRegexToken("yy", matchUnsigned);
3695        addRegexToken("yyy", matchUnsigned);
3696        addRegexToken("yyyy", matchUnsigned);
3697        addRegexToken("yo", matchEraYearOrdinal);
3698        addParseToken(["y", "yy", "yyy", "yyyy"], YEAR);
3699        addParseToken(["yo"], function(input, array, config2, token2) {
3700          var match;
3701          if (config2._locale._eraYearOrdinalRegex) {
3702            match = input.match(config2._locale._eraYearOrdinalRegex);
3703          }
3704          if (config2._locale.eraYearOrdinalParse) {
3705            array[YEAR] = config2._locale.eraYearOrdinalParse(input, match);
3706          } else {
3707            array[YEAR] = parseInt(input, 10);
3708          }
3709        });
3710        function localeEras(m5, format2) {
3711          var i4, l4, date, eras = this._eras || getLocale("en")._eras;
3712          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3713            switch (typeof eras[i4].since) {
3714              case "string":
3715                date = hooks(eras[i4].since).startOf("day");
3716                eras[i4].since = date.valueOf();
3717                break;
3718            }
3719            switch (typeof eras[i4].until) {
3720              case "undefined":
3721                eras[i4].until = Infinity;
3722                break;
3723              case "string":
3724                date = hooks(eras[i4].until).startOf("day").valueOf();
3725                eras[i4].until = date.valueOf();
3726                break;
3727            }
3728          }
3729          return eras;
3730        }
3731        function localeErasParse(eraName, format2, strict) {
3732          var i4, l4, eras = this.eras(), name, abbr, narrow;
3733          eraName = eraName.toUpperCase();
3734          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3735            name = eras[i4].name.toUpperCase();
3736            abbr = eras[i4].abbr.toUpperCase();
3737            narrow = eras[i4].narrow.toUpperCase();
3738            if (strict) {
3739              switch (format2) {
3740                case "N":
3741                case "NN":
3742                case "NNN":
3743                  if (abbr === eraName) {
3744                    return eras[i4];
3745                  }
3746                  break;
3747                case "NNNN":
3748                  if (name === eraName) {
3749                    return eras[i4];
3750                  }
3751                  break;
3752                case "NNNNN":
3753                  if (narrow === eraName) {
3754                    return eras[i4];
3755                  }
3756                  break;
3757              }
3758            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
3759              return eras[i4];
3760            }
3761          }
3762        }
3763        function localeErasConvertYear(era, year) {
3764          var dir = era.since <= era.until ? 1 : -1;
3765          if (year === void 0) {
3766            return hooks(era.since).year();
3767          } else {
3768            return hooks(era.since).year() + (year - era.offset) * dir;
3769          }
3770        }
3771        function getEraName() {
3772          var i4, l4, val, eras = this.localeData().eras();
3773          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3774            val = this.clone().startOf("day").valueOf();
3775            if (eras[i4].since <= val && val <= eras[i4].until) {
3776              return eras[i4].name;
3777            }
3778            if (eras[i4].until <= val && val <= eras[i4].since) {
3779              return eras[i4].name;
3780            }
3781          }
3782          return "";
3783        }
3784        function getEraNarrow() {
3785          var i4, l4, val, eras = this.localeData().eras();
3786          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3787            val = this.clone().startOf("day").valueOf();
3788            if (eras[i4].since <= val && val <= eras[i4].until) {
3789              return eras[i4].narrow;
3790            }
3791            if (eras[i4].until <= val && val <= eras[i4].since) {
3792              return eras[i4].narrow;
3793            }
3794          }
3795          return "";
3796        }
3797        function getEraAbbr() {
3798          var i4, l4, val, eras = this.localeData().eras();
3799          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3800            val = this.clone().startOf("day").valueOf();
3801            if (eras[i4].since <= val && val <= eras[i4].until) {
3802              return eras[i4].abbr;
3803            }
3804            if (eras[i4].until <= val && val <= eras[i4].since) {
3805              return eras[i4].abbr;
3806            }
3807          }
3808          return "";
3809        }
3810        function getEraYear() {
3811          var i4, l4, dir, val, eras = this.localeData().eras();
3812          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3813            dir = eras[i4].since <= eras[i4].until ? 1 : -1;
3814            val = this.clone().startOf("day").valueOf();
3815            if (eras[i4].since <= val && val <= eras[i4].until || eras[i4].until <= val && val <= eras[i4].since) {
3816              return (this.year() - hooks(eras[i4].since).year()) * dir + eras[i4].offset;
3817            }
3818          }
3819          return this.year();
3820        }
3821        function erasNameRegex(isStrict) {
3822          if (!hasOwnProp(this, "_erasNameRegex")) {
3823            computeErasParse.call(this);
3824          }
3825          return isStrict ? this._erasNameRegex : this._erasRegex;
3826        }
3827        function erasAbbrRegex(isStrict) {
3828          if (!hasOwnProp(this, "_erasAbbrRegex")) {
3829            computeErasParse.call(this);
3830          }
3831          return isStrict ? this._erasAbbrRegex : this._erasRegex;
3832        }
3833        function erasNarrowRegex(isStrict) {
3834          if (!hasOwnProp(this, "_erasNarrowRegex")) {
3835            computeErasParse.call(this);
3836          }
3837          return isStrict ? this._erasNarrowRegex : this._erasRegex;
3838        }
3839        function matchEraAbbr(isStrict, locale2) {
3840          return locale2.erasAbbrRegex(isStrict);
3841        }
3842        function matchEraName(isStrict, locale2) {
3843          return locale2.erasNameRegex(isStrict);
3844        }
3845        function matchEraNarrow(isStrict, locale2) {
3846          return locale2.erasNarrowRegex(isStrict);
3847        }
3848        function matchEraYearOrdinal(isStrict, locale2) {
3849          return locale2._eraYearOrdinalRegex || matchUnsigned;
3850        }
3851        function computeErasParse() {
3852          var abbrPieces = [], namePieces = [], narrowPieces = [], mixedPieces = [], i4, l4, erasName, erasAbbr, erasNarrow, eras = this.eras();
3853          for (i4 = 0, l4 = eras.length; i4 < l4; ++i4) {
3854            erasName = regexEscape(eras[i4].name);
3855            erasAbbr = regexEscape(eras[i4].abbr);
3856            erasNarrow = regexEscape(eras[i4].narrow);
3857            namePieces.push(erasName);
3858            abbrPieces.push(erasAbbr);
3859            narrowPieces.push(erasNarrow);
3860            mixedPieces.push(erasName);
3861            mixedPieces.push(erasAbbr);
3862            mixedPieces.push(erasNarrow);
3863          }
3864          this._erasRegex = new RegExp("^(" + mixedPieces.join("|") + ")", "i");
3865          this._erasNameRegex = new RegExp("^(" + namePieces.join("|") + ")", "i");
3866          this._erasAbbrRegex = new RegExp("^(" + abbrPieces.join("|") + ")", "i");
3867          this._erasNarrowRegex = new RegExp(
3868            "^(" + narrowPieces.join("|") + ")",
3869            "i"
3870          );
3871        }
3872        addFormatToken(0, ["gg", 2], 0, function() {
3873          return this.weekYear() % 100;
3874        });
3875        addFormatToken(0, ["GG", 2], 0, function() {
3876          return this.isoWeekYear() % 100;
3877        });
3878        function addWeekYearFormatToken(token2, getter) {
3879          addFormatToken(0, [token2, token2.length], 0, getter);
3880        }
3881        addWeekYearFormatToken("gggg", "weekYear");
3882        addWeekYearFormatToken("ggggg", "weekYear");
3883        addWeekYearFormatToken("GGGG", "isoWeekYear");
3884        addWeekYearFormatToken("GGGGG", "isoWeekYear");
3885        addRegexToken("G", matchSigned);
3886        addRegexToken("g", matchSigned);
3887        addRegexToken("GG", match1to2, match2);
3888        addRegexToken("gg", match1to2, match2);
3889        addRegexToken("GGGG", match1to4, match4);
3890        addRegexToken("gggg", match1to4, match4);
3891        addRegexToken("GGGGG", match1to6, match6);
3892        addRegexToken("ggggg", match1to6, match6);
3893        addWeekParseToken(
3894          ["gggg", "ggggg", "GGGG", "GGGGG"],
3895          function(input, week, config2, token2) {
3896            week[token2.substr(0, 2)] = toInt(input);
3897          }
3898        );
3899        addWeekParseToken(["gg", "GG"], function(input, week, config2, token2) {
3900          week[token2] = hooks.parseTwoDigitYear(input);
3901        });
3902        function getSetWeekYear(input) {
3903          return getSetWeekYearHelper.call(
3904            this,
3905            input,
3906            this.week(),
3907            this.weekday() + this.localeData()._week.dow,
3908            this.localeData()._week.dow,
3909            this.localeData()._week.doy
3910          );
3911        }
3912        function getSetISOWeekYear(input) {
3913          return getSetWeekYearHelper.call(
3914            this,
3915            input,
3916            this.isoWeek(),
3917            this.isoWeekday(),
3918            1,
3919            4
3920          );
3921        }
3922        function getISOWeeksInYear() {
3923          return weeksInYear(this.year(), 1, 4);
3924        }
3925        function getISOWeeksInISOWeekYear() {
3926          return weeksInYear(this.isoWeekYear(), 1, 4);
3927        }
3928        function getWeeksInYear() {
3929          var weekInfo = this.localeData()._week;
3930          return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
3931        }
3932        function getWeeksInWeekYear() {
3933          var weekInfo = this.localeData()._week;
3934          return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
3935        }
3936        function getSetWeekYearHelper(input, week, weekday, dow, doy) {
3937          var weeksTarget;
3938          if (input == null) {
3939            return weekOfYear2(this, dow, doy).year;
3940          } else {
3941            weeksTarget = weeksInYear(input, dow, doy);
3942            if (week > weeksTarget) {
3943              week = weeksTarget;
3944            }
3945            return setWeekAll.call(this, input, week, weekday, dow, doy);
3946          }
3947        }
3948        function setWeekAll(weekYear, week, weekday, dow, doy) {
3949          var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
3950          this.year(date.getUTCFullYear());
3951          this.month(date.getUTCMonth());
3952          this.date(date.getUTCDate());
3953          return this;
3954        }
3955        addFormatToken("Q", 0, "Qo", "quarter");
3956        addRegexToken("Q", match1);
3957        addParseToken("Q", function(input, array) {
3958          array[MONTH] = (toInt(input) - 1) * 3;
3959        });
3960        function getSetQuarter(input) {
3961          return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
3962        }
3963        addFormatToken("D", ["DD", 2], "Do", "date");
3964        addRegexToken("D", match1to2, match1to2NoLeadingZero);
3965        addRegexToken("DD", match1to2, match2);
3966        addRegexToken("Do", function(isStrict, locale2) {
3967          return isStrict ? locale2._dayOfMonthOrdinalParse || locale2._ordinalParse : locale2._dayOfMonthOrdinalParseLenient;
3968        });
3969        addParseToken(["D", "DD"], DATE);
3970        addParseToken("Do", function(input, array) {
3971          array[DATE] = toInt(input.match(match1to2)[0]);
3972        });
3973        var getSetDayOfMonth = makeGetSet("Date", true);
3974        addFormatToken("DDD", ["DDDD", 3], "DDDo", "dayOfYear");
3975        addRegexToken("DDD", match1to3);
3976        addRegexToken("DDDD", match3);
3977        addParseToken(["DDD", "DDDD"], function(input, array, config2) {
3978          config2._dayOfYear = toInt(input);
3979        });
3980        function getSetDayOfYear(input) {
3981          var dayOfYear = Math.round(
3982            (this.clone().startOf("day") - this.clone().startOf("year")) / 864e5
3983          ) + 1;
3984          return input == null ? dayOfYear : this.add(input - dayOfYear, "d");
3985        }
3986        addFormatToken("m", ["mm", 2], 0, "minute");
3987        addRegexToken("m", match1to2, match1to2HasZero);
3988        addRegexToken("mm", match1to2, match2);
3989        addParseToken(["m", "mm"], MINUTE);
3990        var getSetMinute = makeGetSet("Minutes", false);
3991        addFormatToken("s", ["ss", 2], 0, "second");
3992        addRegexToken("s", match1to2, match1to2HasZero);
3993        addRegexToken("ss", match1to2, match2);
3994        addParseToken(["s", "ss"], SECOND);
3995        var getSetSecond = makeGetSet("Seconds", false);
3996        addFormatToken("S", 0, 0, function() {
3997          return ~~(this.millisecond() / 100);
3998        });
3999        addFormatToken(0, ["SS", 2], 0, function() {
4000          return ~~(this.millisecond() / 10);
4001        });
4002        addFormatToken(0, ["SSS", 3], 0, "millisecond");
4003        addFormatToken(0, ["SSSS", 4], 0, function() {
4004          return this.millisecond() * 10;
4005        });
4006        addFormatToken(0, ["SSSSS", 5], 0, function() {
4007          return this.millisecond() * 100;
4008        });
4009        addFormatToken(0, ["SSSSSS", 6], 0, function() {
4010          return this.millisecond() * 1e3;
4011        });
4012        addFormatToken(0, ["SSSSSSS", 7], 0, function() {
4013          return this.millisecond() * 1e4;
4014        });
4015        addFormatToken(0, ["SSSSSSSS", 8], 0, function() {
4016          return this.millisecond() * 1e5;
4017        });
4018        addFormatToken(0, ["SSSSSSSSS", 9], 0, function() {
4019          return this.millisecond() * 1e6;
4020        });
4021        addRegexToken("S", match1to3, match1);
4022        addRegexToken("SS", match1to3, match2);
4023        addRegexToken("SSS", match1to3, match3);
4024        var token, getSetMillisecond;
4025        for (token = "SSSS"; token.length <= 9; token += "S") {
4026          addRegexToken(token, matchUnsigned);
4027        }
4028        function parseMs(input, array) {
4029          array[MILLISECOND] = toInt(("0." + input) * 1e3);
4030        }
4031        for (token = "S"; token.length <= 9; token += "S") {
4032          addParseToken(token, parseMs);
4033        }
4034        getSetMillisecond = makeGetSet("Milliseconds", false);
4035        addFormatToken("z", 0, 0, "zoneAbbr");
4036        addFormatToken("zz", 0, 0, "zoneName");
4037        function getZoneAbbr() {
4038          return this._isUTC ? "UTC" : "";
4039        }
4040        function getZoneName() {
4041          return this._isUTC ? "Coordinated Universal Time" : "";
4042        }
4043        var proto = Moment3.prototype;
4044        proto.add = add2;
4045        proto.calendar = calendar$1;
4046        proto.clone = clone;
4047        proto.diff = diff;
4048        proto.endOf = endOf;
4049        proto.format = format;
4050        proto.from = from;
4051        proto.fromNow = fromNow;
4052        proto.to = to2;
4053        proto.toNow = toNow;
4054        proto.get = stringGet;
4055        proto.invalidAt = invalidAt;
4056        proto.isAfter = isAfter;
4057        proto.isBefore = isBefore;
4058        proto.isBetween = isBetween;
4059        proto.isSame = isSame;
4060        proto.isSameOrAfter = isSameOrAfter;
4061        proto.isSameOrBefore = isSameOrBefore;
4062        proto.isValid = isValid$2;
4063        proto.lang = lang2;
4064        proto.locale = locale;
4065        proto.localeData = localeData;
4066        proto.max = prototypeMax;
4067        proto.min = prototypeMin;
4068        proto.parsingFlags = parsingFlags;
4069        proto.set = stringSet;
4070        proto.startOf = startOf;
4071        proto.subtract = subtract;
4072        proto.toArray = toArray3;
4073        proto.toObject = toObject;
4074        proto.toDate = toDate;
4075        proto.toISOString = toISOString;
4076        proto.inspect = inspect;
4077        if (typeof Symbol !== "undefined" && Symbol.for != null) {
4078          proto[Symbol.for("nodejs.util.inspect.custom")] = function() {
4079            return "Moment<" + this.format() + ">";
4080          };
4081        }
4082        proto.toJSON = toJSON;
4083        proto.toString = toString;
4084        proto.unix = unix;
4085        proto.valueOf = valueOf;
4086        proto.creationData = creationData;
4087        proto.eraName = getEraName;
4088        proto.eraNarrow = getEraNarrow;
4089        proto.eraAbbr = getEraAbbr;
4090        proto.eraYear = getEraYear;
4091        proto.year = getSetYear;
4092        proto.isLeapYear = getIsLeapYear;
4093        proto.weekYear = getSetWeekYear;
4094        proto.isoWeekYear = getSetISOWeekYear;
4095        proto.quarter = proto.quarters = getSetQuarter;
4096        proto.month = getSetMonth;
4097        proto.daysInMonth = getDaysInMonth;
4098        proto.week = proto.weeks = getSetWeek;
4099        proto.isoWeek = proto.isoWeeks = getSetISOWeek;
4100        proto.weeksInYear = getWeeksInYear;
4101        proto.weeksInWeekYear = getWeeksInWeekYear;
4102        proto.isoWeeksInYear = getISOWeeksInYear;
4103        proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
4104        proto.date = getSetDayOfMonth;
4105        proto.day = proto.days = getSetDayOfWeek;
4106        proto.weekday = getSetLocaleDayOfWeek;
4107        proto.isoWeekday = getSetISODayOfWeek;
4108        proto.dayOfYear = getSetDayOfYear;
4109        proto.hour = proto.hours = getSetHour;
4110        proto.minute = proto.minutes = getSetMinute;
4111        proto.second = proto.seconds = getSetSecond;
4112        proto.millisecond = proto.milliseconds = getSetMillisecond;
4113        proto.utcOffset = getSetOffset;
4114        proto.utc = setOffsetToUTC;
4115        proto.local = setOffsetToLocal;
4116        proto.parseZone = setOffsetToParsedOffset;
4117        proto.hasAlignedHourOffset = hasAlignedHourOffset;
4118        proto.isDST = isDaylightSavingTime;
4119        proto.isLocal = isLocal;
4120        proto.isUtcOffset = isUtcOffset;
4121        proto.isUtc = isUtc;
4122        proto.isUTC = isUtc;
4123        proto.zoneAbbr = getZoneAbbr;
4124        proto.zoneName = getZoneName;
4125        proto.dates = deprecate(
4126          "dates accessor is deprecated. Use date instead.",
4127          getSetDayOfMonth
4128        );
4129        proto.months = deprecate(
4130          "months accessor is deprecated. Use month instead",
4131          getSetMonth
4132        );
4133        proto.years = deprecate(
4134          "years accessor is deprecated. Use year instead",
4135          getSetYear
4136        );
4137        proto.zone = deprecate(
4138          "moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",
4139          getSetZone
4140        );
4141        proto.isDSTShifted = deprecate(
4142          "isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",
4143          isDaylightSavingTimeShifted
4144        );
4145        function createUnix(input) {
4146          return createLocal(input * 1e3);
4147        }
4148        function createInZone() {
4149          return createLocal.apply(null, arguments).parseZone();
4150        }
4151        function preParsePostFormat(string) {
4152          return string;
4153        }
4154        var proto$1 = Locale.prototype;
4155        proto$1.calendar = calendar;
4156        proto$1.longDateFormat = longDateFormat;
4157        proto$1.invalidDate = invalidDate;
4158        proto$1.ordinal = ordinal;
4159        proto$1.preparse = preParsePostFormat;
4160        proto$1.postformat = preParsePostFormat;
4161        proto$1.relativeTime = relativeTime;
4162        proto$1.pastFuture = pastFuture;
4163        proto$1.set = set;
4164        proto$1.eras = localeEras;
4165        proto$1.erasParse = localeErasParse;
4166        proto$1.erasConvertYear = localeErasConvertYear;
4167        proto$1.erasAbbrRegex = erasAbbrRegex;
4168        proto$1.erasNameRegex = erasNameRegex;
4169        proto$1.erasNarrowRegex = erasNarrowRegex;
4170        proto$1.months = localeMonths;
4171        proto$1.monthsShort = localeMonthsShort;
4172        proto$1.monthsParse = localeMonthsParse;
4173        proto$1.monthsRegex = monthsRegex;
4174        proto$1.monthsShortRegex = monthsShortRegex;
4175        proto$1.week = localeWeek;
4176        proto$1.firstDayOfYear = localeFirstDayOfYear;
4177        proto$1.firstDayOfWeek = localeFirstDayOfWeek;
4178        proto$1.weekdays = localeWeekdays;
4179        proto$1.weekdaysMin = localeWeekdaysMin;
4180        proto$1.weekdaysShort = localeWeekdaysShort;
4181        proto$1.weekdaysParse = localeWeekdaysParse;
4182        proto$1.weekdaysRegex = weekdaysRegex;
4183        proto$1.weekdaysShortRegex = weekdaysShortRegex;
4184        proto$1.weekdaysMinRegex = weekdaysMinRegex;
4185        proto$1.isPM = localeIsPM;
4186        proto$1.meridiem = localeMeridiem;
4187        function get$1(format2, index4, field, setter) {
4188          var locale2 = getLocale(), utc = createUTC().set(setter, index4);
4189          return locale2[field](utc, format2);
4190        }
4191        function listMonthsImpl(format2, index4, field) {
4192          if (isNumber(format2)) {
4193            index4 = format2;
4194            format2 = void 0;
4195          }
4196          format2 = format2 || "";
4197          if (index4 != null) {
4198            return get$1(format2, index4, field, "month");
4199          }
4200          var i4, out = [];
4201          for (i4 = 0; i4 < 12; i4++) {
4202            out[i4] = get$1(format2, i4, field, "month");
4203          }
4204          return out;
4205        }
4206        function listWeekdaysImpl(localeSorted, format2, index4, field) {
4207          if (typeof localeSorted === "boolean") {
4208            if (isNumber(format2)) {
4209              index4 = format2;
4210              format2 = void 0;
4211            }
4212            format2 = format2 || "";
4213          } else {
4214            format2 = localeSorted;
4215            index4 = format2;
4216            localeSorted = false;
4217            if (isNumber(format2)) {
4218              index4 = format2;
4219              format2 = void 0;
4220            }
4221            format2 = format2 || "";
4222          }
4223          var locale2 = getLocale(), shift = localeSorted ? locale2._week.dow : 0, i4, out = [];
4224          if (index4 != null) {
4225            return get$1(format2, (index4 + shift) % 7, field, "day");
4226          }
4227          for (i4 = 0; i4 < 7; i4++) {
4228            out[i4] = get$1(format2, (i4 + shift) % 7, field, "day");
4229          }
4230          return out;
4231        }
4232        function listMonths(format2, index4) {
4233          return listMonthsImpl(format2, index4, "months");
4234        }
4235        function listMonthsShort(format2, index4) {
4236          return listMonthsImpl(format2, index4, "monthsShort");
4237        }
4238        function listWeekdays(localeSorted, format2, index4) {
4239          return listWeekdaysImpl(localeSorted, format2, index4, "weekdays");
4240        }
4241        function listWeekdaysShort(localeSorted, format2, index4) {
4242          return listWeekdaysImpl(localeSorted, format2, index4, "weekdaysShort");
4243        }
4244        function listWeekdaysMin(localeSorted, format2, index4) {
4245          return listWeekdaysImpl(localeSorted, format2, index4, "weekdaysMin");
4246        }
4247        getSetGlobalLocale("en", {
4248          eras: [
4249            {
4250              since: "0001-01-01",
4251              until: Infinity,
4252              offset: 1,
4253              name: "Anno Domini",
4254              narrow: "AD",
4255              abbr: "AD"
4256            },
4257            {
4258              since: "0000-12-31",
4259              until: -Infinity,
4260              offset: 1,
4261              name: "Before Christ",
4262              narrow: "BC",
4263              abbr: "BC"
4264            }
4265          ],
4266          dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
4267          ordinal: function(number) {
4268            var b4 = number % 10, output = toInt(number % 100 / 10) === 1 ? "th" : b4 === 1 ? "st" : b4 === 2 ? "nd" : b4 === 3 ? "rd" : "th";
4269            return number + output;
4270          }
4271        });
4272        hooks.lang = deprecate(
4273          "moment.lang is deprecated. Use moment.locale instead.",
4274          getSetGlobalLocale
4275        );
4276        hooks.langData = deprecate(
4277          "moment.langData is deprecated. Use moment.localeData instead.",
4278          getLocale
4279        );
4280        var mathAbs = Math.abs;
4281        function abs() {
4282          var data = this._data;
4283          this._milliseconds = mathAbs(this._milliseconds);
4284          this._days = mathAbs(this._days);
4285          this._months = mathAbs(this._months);
4286          data.milliseconds = mathAbs(data.milliseconds);
4287          data.seconds = mathAbs(data.seconds);
4288          data.minutes = mathAbs(data.minutes);
4289          data.hours = mathAbs(data.hours);
4290          data.months = mathAbs(data.months);
4291          data.years = mathAbs(data.years);
4292          return this;
4293        }
4294        function addSubtract$1(duration, input, value, direction) {
4295          var other = createDuration2(input, value);
4296          duration._milliseconds += direction * other._milliseconds;
4297          duration._days += direction * other._days;
4298          duration._months += direction * other._months;
4299          return duration._bubble();
4300        }
4301        function add$1(input, value) {
4302          return addSubtract$1(this, input, value, 1);
4303        }
4304        function subtract$1(input, value) {
4305          return addSubtract$1(this, input, value, -1);
4306        }
4307        function absCeil(number) {
4308          if (number < 0) {
4309            return Math.floor(number);
4310          } else {
4311            return Math.ceil(number);
4312          }
4313        }
4314        function bubble() {
4315          var milliseconds2 = this._milliseconds, days2 = this._days, months2 = this._months, data = this._data, seconds2, minutes2, hours2, years2, monthsFromDays;
4316          if (!(milliseconds2 >= 0 && days2 >= 0 && months2 >= 0 || milliseconds2 <= 0 && days2 <= 0 && months2 <= 0)) {
4317            milliseconds2 += absCeil(monthsToDays(months2) + days2) * 864e5;
4318            days2 = 0;
4319            months2 = 0;
4320          }
4321          data.milliseconds = milliseconds2 % 1e3;
4322          seconds2 = absFloor(milliseconds2 / 1e3);
4323          data.seconds = seconds2 % 60;
4324          minutes2 = absFloor(seconds2 / 60);
4325          data.minutes = minutes2 % 60;
4326          hours2 = absFloor(minutes2 / 60);
4327          data.hours = hours2 % 24;
4328          days2 += absFloor(hours2 / 24);
4329          monthsFromDays = absFloor(daysToMonths(days2));
4330          months2 += monthsFromDays;
4331          days2 -= absCeil(monthsToDays(monthsFromDays));
4332          years2 = absFloor(months2 / 12);
4333          months2 %= 12;
4334          data.days = days2;
4335          data.months = months2;
4336          data.years = years2;
4337          return this;
4338        }
4339        function daysToMonths(days2) {
4340          return days2 * 4800 / 146097;
4341        }
4342        function monthsToDays(months2) {
4343          return months2 * 146097 / 4800;
4344        }
4345        function as(units) {
4346          if (!this.isValid()) {
4347            return NaN;
4348          }
4349          var days2, months2, milliseconds2 = this._milliseconds;
4350          units = normalizeUnits(units);
4351          if (units === "month" || units === "quarter" || units === "year") {
4352            days2 = this._days + milliseconds2 / 864e5;
4353            months2 = this._months + daysToMonths(days2);
4354            switch (units) {
4355              case "month":
4356                return months2;
4357              case "quarter":
4358                return months2 / 3;
4359              case "year":
4360                return months2 / 12;
4361            }
4362          } else {
4363            days2 = this._days + Math.round(monthsToDays(this._months));
4364            switch (units) {
4365              case "week":
4366                return days2 / 7 + milliseconds2 / 6048e5;
4367              case "day":
4368                return days2 + milliseconds2 / 864e5;
4369              case "hour":
4370                return days2 * 24 + milliseconds2 / 36e5;
4371              case "minute":
4372                return days2 * 1440 + milliseconds2 / 6e4;
4373              case "second":
4374                return days2 * 86400 + milliseconds2 / 1e3;
4375              case "millisecond":
4376                return Math.floor(days2 * 864e5) + milliseconds2;
4377              default:
4378                throw new Error("Unknown unit " + units);
4379            }
4380          }
4381        }
4382        function makeAs(alias) {
4383          return function() {
4384            return this.as(alias);
4385          };
4386        }
4387        var asMilliseconds = makeAs("ms"), asSeconds = makeAs("s"), asMinutes = makeAs("m"), asHours = makeAs("h"), asDays = makeAs("d"), asWeeks = makeAs("w"), asMonths = makeAs("M"), asQuarters = makeAs("Q"), asYears = makeAs("y"), valueOf$1 = asMilliseconds;
4388        function clone$1() {
4389          return createDuration2(this);
4390        }
4391        function get$2(units) {
4392          units = normalizeUnits(units);
4393          return this.isValid() ? this[units + "s"]() : NaN;
4394        }
4395        function makeGetter(name) {
4396          return function() {
4397            return this.isValid() ? this._data[name] : NaN;
4398          };
4399        }
4400        var milliseconds = makeGetter("milliseconds"), seconds = makeGetter("seconds"), minutes = makeGetter("minutes"), hours = makeGetter("hours"), days = makeGetter("days"), months = makeGetter("months"), years = makeGetter("years");
4401        function weeks() {
4402          return absFloor(this.days() / 7);
4403        }
4404        var round2 = Math.round, thresholds = {
4405          ss: 44,
4406          s: 45,
4407          m: 45,
4408          h: 22,
4409          d: 26,
4410          w: null,
4411          M: 11
4412        };
4413        function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale2) {
4414          return locale2.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
4415        }
4416        function relativeTime$1(posNegDuration, withoutSuffix, thresholds2, locale2) {
4417          var duration = createDuration2(posNegDuration).abs(), seconds2 = round2(duration.as("s")), minutes2 = round2(duration.as("m")), hours2 = round2(duration.as("h")), days2 = round2(duration.as("d")), months2 = round2(duration.as("M")), weeks2 = round2(duration.as("w")), years2 = round2(duration.as("y")), a4 = seconds2 <= thresholds2.ss && ["s", seconds2] || seconds2 < thresholds2.s && ["ss", seconds2] || minutes2 <= 1 && ["m"] || minutes2 < thresholds2.m && ["mm", minutes2] || hours2 <= 1 && ["h"] || hours2 < thresholds2.h && ["hh", hours2] || days2 <= 1 && ["d"] || days2 < thresholds2.d && ["dd", days2];
4418          if (thresholds2.w != null) {
4419            a4 = a4 || weeks2 <= 1 && ["w"] || weeks2 < thresholds2.w && ["ww", weeks2];
4420          }
4421          a4 = a4 || months2 <= 1 && ["M"] || months2 < thresholds2.M && ["MM", months2] || years2 <= 1 && ["y"] || ["yy", years2];
4422          a4[2] = withoutSuffix;
4423          a4[3] = +posNegDuration > 0;
4424          a4[4] = locale2;
4425          return substituteTimeAgo.apply(null, a4);
4426        }
4427        function getSetRelativeTimeRounding(roundingFunction) {
4428          if (roundingFunction === void 0) {
4429            return round2;
4430          }
4431          if (typeof roundingFunction === "function") {
4432            round2 = roundingFunction;
4433            return true;
4434          }
4435          return false;
4436        }
4437        function getSetRelativeTimeThreshold(threshold, limit) {
4438          if (thresholds[threshold] === void 0) {
4439            return false;
4440          }
4441          if (limit === void 0) {
4442            return thresholds[threshold];
4443          }
4444          thresholds[threshold] = limit;
4445          if (threshold === "s") {
4446            thresholds.ss = limit - 1;
4447          }
4448          return true;
4449        }
4450        function humanize(argWithSuffix, argThresholds) {
4451          if (!this.isValid()) {
4452            return this.localeData().invalidDate();
4453          }
4454          var withSuffix = false, th = thresholds, locale2, output;
4455          if (typeof argWithSuffix === "object") {
4456            argThresholds = argWithSuffix;
4457            argWithSuffix = false;
4458          }
4459          if (typeof argWithSuffix === "boolean") {
4460            withSuffix = argWithSuffix;
4461          }
4462          if (typeof argThresholds === "object") {
4463            th = Object.assign({}, thresholds, argThresholds);
4464            if (argThresholds.s != null && argThresholds.ss == null) {
4465              th.ss = argThresholds.s - 1;
4466            }
4467          }
4468          locale2 = this.localeData();
4469          output = relativeTime$1(this, !withSuffix, th, locale2);
4470          if (withSuffix) {
4471            output = locale2.pastFuture(+this, output);
4472          }
4473          return locale2.postformat(output);
4474        }
4475        var abs$1 = Math.abs;
4476        function sign(x5) {
4477          return (x5 > 0) - (x5 < 0) || +x5;
4478        }
4479        function toISOString$1() {
4480          if (!this.isValid()) {
4481            return this.localeData().invalidDate();
4482          }
4483          var seconds2 = abs$1(this._milliseconds) / 1e3, days2 = abs$1(this._days), months2 = abs$1(this._months), minutes2, hours2, years2, s4, total = this.asSeconds(), totalSign, ymSign, daysSign, hmsSign;
4484          if (!total) {
4485            return "P0D";
4486          }
4487          minutes2 = absFloor(seconds2 / 60);
4488          hours2 = absFloor(minutes2 / 60);
4489          seconds2 %= 60;
4490          minutes2 %= 60;
4491          years2 = absFloor(months2 / 12);
4492          months2 %= 12;
4493          s4 = seconds2 ? seconds2.toFixed(3).replace(/\.?0+$/, "") : "";
4494          totalSign = total < 0 ? "-" : "";
4495          ymSign = sign(this._months) !== sign(total) ? "-" : "";
4496          daysSign = sign(this._days) !== sign(total) ? "-" : "";
4497          hmsSign = sign(this._milliseconds) !== sign(total) ? "-" : "";
4498          return totalSign + "P" + (years2 ? ymSign + years2 + "Y" : "") + (months2 ? ymSign + months2 + "M" : "") + (days2 ? daysSign + days2 + "D" : "") + (hours2 || minutes2 || seconds2 ? "T" : "") + (hours2 ? hmsSign + hours2 + "H" : "") + (minutes2 ? hmsSign + minutes2 + "M" : "") + (seconds2 ? hmsSign + s4 + "S" : "");
4499        }
4500        var proto$2 = Duration.prototype;
4501        proto$2.isValid = isValid$1;
4502        proto$2.abs = abs;
4503        proto$2.add = add$1;
4504        proto$2.subtract = subtract$1;
4505        proto$2.as = as;
4506        proto$2.asMilliseconds = asMilliseconds;
4507        proto$2.asSeconds = asSeconds;
4508        proto$2.asMinutes = asMinutes;
4509        proto$2.asHours = asHours;
4510        proto$2.asDays = asDays;
4511        proto$2.asWeeks = asWeeks;
4512        proto$2.asMonths = asMonths;
4513        proto$2.asQuarters = asQuarters;
4514        proto$2.asYears = asYears;
4515        proto$2.valueOf = valueOf$1;
4516        proto$2._bubble = bubble;
4517        proto$2.clone = clone$1;
4518        proto$2.get = get$2;
4519        proto$2.milliseconds = milliseconds;
4520        proto$2.seconds = seconds;
4521        proto$2.minutes = minutes;
4522        proto$2.hours = hours;
4523        proto$2.days = days;
4524        proto$2.weeks = weeks;
4525        proto$2.months = months;
4526        proto$2.years = years;
4527        proto$2.humanize = humanize;
4528        proto$2.toISOString = toISOString$1;
4529        proto$2.toString = toISOString$1;
4530        proto$2.toJSON = toISOString$1;
4531        proto$2.locale = locale;
4532        proto$2.localeData = localeData;
4533        proto$2.toIsoString = deprecate(
4534          "toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",
4535          toISOString$1
4536        );
4537        proto$2.lang = lang2;
4538        addFormatToken("X", 0, 0, "unix");
4539        addFormatToken("x", 0, 0, "valueOf");
4540        addRegexToken("x", matchSigned);
4541        addRegexToken("X", matchTimestamp);
4542        addParseToken("X", function(input, array, config2) {
4543          config2._d = new Date(parseFloat(input) * 1e3);
4544        });
4545        addParseToken("x", function(input, array, config2) {
4546          config2._d = new Date(toInt(input));
4547        });
4548        hooks.version = "2.30.1";
4549        setHookCallback(createLocal);
4550        hooks.fn = proto;
4551        hooks.min = min2;
4552        hooks.max = max2;
4553        hooks.now = now3;
4554        hooks.utc = createUTC;
4555        hooks.unix = createUnix;
4556        hooks.months = listMonths;
4557        hooks.isDate = isDate;
4558        hooks.locale = getSetGlobalLocale;
4559        hooks.invalid = createInvalid;
4560        hooks.duration = createDuration2;
4561        hooks.isMoment = isMoment;
4562        hooks.weekdays = listWeekdays;
4563        hooks.parseZone = createInZone;
4564        hooks.localeData = getLocale;
4565        hooks.isDuration = isDuration;
4566        hooks.monthsShort = listMonthsShort;
4567        hooks.weekdaysMin = listWeekdaysMin;
4568        hooks.defineLocale = defineLocale;
4569        hooks.updateLocale = updateLocale;
4570        hooks.locales = listLocales;
4571        hooks.weekdaysShort = listWeekdaysShort;
4572        hooks.normalizeUnits = normalizeUnits;
4573        hooks.relativeTimeRounding = getSetRelativeTimeRounding;
4574        hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
4575        hooks.calendarFormat = getCalendarFormat;
4576        hooks.prototype = proto;
4577        hooks.HTML5_FMT = {
4578          DATETIME_LOCAL: "YYYY-MM-DDTHH:mm",
4579          DATETIME_LOCAL_SECONDS: "YYYY-MM-DDTHH:mm:ss",
4580          DATETIME_LOCAL_MS: "YYYY-MM-DDTHH:mm:ss.SSS",
4581          DATE: "YYYY-MM-DD",
4582          TIME: "HH:mm",
4583          TIME_SECONDS: "HH:mm:ss",
4584          TIME_MS: "HH:mm:ss.SSS",
4585          WEEK: "GGGG-[W]WW",
4586          MONTH: "YYYY-MM"
4587        };
4588        return hooks;
4589      });
4590    }
4591  });
4592
4593  
vendor: 35,866 bytes, lines 4593-5439
4593// node_modules/pikaday/pikaday.js
4594  var require_pikaday = __commonJS({
4595    "node_modules/pikaday/pikaday.js"(exports, module) {
4596      (function(root, factory) {
4597        "use strict";
4598        var moment;
4599        if (typeof exports === "object") {
4600          try {
4601            moment = require_moment();
4602          } catch (e4) {
4603          }
4604          module.exports = factory(moment);
4605        } else if (typeof define === "function" && define.amd) {
4606          define(function(req) {
4607            var id2 = "moment";
4608            try {
4609              moment = req(id2);
4610            } catch (e4) {
4611            }
4612            return factory(moment);
4613          });
4614        } else {
4615          root.Pikaday = factory(root.moment);
4616        }
4617      })(exports, function(moment) {
4618        "use strict";
4619        var hasMoment = typeof moment === "function", hasEventListeners = !!window.addEventListener, document2 = window.document, sto = window.setTimeout, addEvent2 = function(el, e4, callback, capture) {
4620          if (hasEventListeners) {
4621            el.addEventListener(e4, callback, !!capture);
4622          } else {
4623            el.attachEvent("on" + e4, callback);
4624          }
4625        }, removeEvent = function(el, e4, callback, capture) {
4626          if (hasEventListeners) {
4627            el.removeEventListener(e4, callback, !!capture);
4628          } else {
4629            el.detachEvent("on" + e4, callback);
4630          }
4631        }, trim = function(str) {
4632          return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, "");
4633        }, hasClass = function(el, cn2) {
4634          return (" " + el.className + " ").indexOf(" " + cn2 + " ") !== -1;
4635        }, addClass = function(el, cn2) {
4636          if (!hasClass(el, cn2)) {
4637            el.className = el.className === "" ? cn2 : el.className + " " + cn2;
4638          }
4639        }, removeClass = function(el, cn2) {
4640          el.className = trim((" " + el.className + " ").replace(" " + cn2 + " ", " "));
4641        }, isArray = function(obj) {
4642          return /Array/.test(Object.prototype.toString.call(obj));
4643        }, isDate = function(obj) {
4644          return /Date/.test(Object.prototype.toString.call(obj)) && !isNaN(obj.getTime());
4645        }, isWeekend = function(date) {
4646          var day = date.getDay();
4647          return day === 0 || day === 6;
4648        }, isLeapYear = function(year) {
4649          return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
4650        }, getDaysInMonth = function(year, month) {
4651          return [31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
4652        }, setToStartOfDay = function(date) {
4653          if (isDate(date))
4654            date.setHours(0, 0, 0, 0);
4655        }, compareDates = function(a4, b4) {
4656          return a4.getTime() === b4.getTime();
4657        }, extend5 = function(to2, from, overwrite) {
4658          var prop, hasProp;
4659          for (prop in from) {
4660            hasProp = to2[prop] !== void 0;
4661            if (hasProp && typeof from[prop] === "object" && from[prop] !== null && from[prop].nodeName === void 0) {
4662              if (isDate(from[prop])) {
4663                if (overwrite) {
4664                  to2[prop] = new Date(from[prop].getTime());
4665                }
4666              } else if (isArray(from[prop])) {
4667                if (overwrite) {
4668                  to2[prop] = from[prop].slice(0);
4669                }
4670              } else {
4671                to2[prop] = extend5({}, from[prop], overwrite);
4672              }
4673            } else if (overwrite || !hasProp) {
4674              to2[prop] = from[prop];
4675            }
4676          }
4677          return to2;
4678        }, fireEvent = function(el, eventName, data) {
4679          var ev;
4680          if (document2.createEvent) {
4681            ev = document2.createEvent("HTMLEvents");
4682            ev.initEvent(eventName, true, false);
4683            ev = extend5(ev, data);
4684            el.dispatchEvent(ev);
4685          } else if (document2.createEventObject) {
4686            ev = document2.createEventObject();
4687            ev = extend5(ev, data);
4688            el.fireEvent("on" + eventName, ev);
4689          }
4690        }, adjustCalendar = function(calendar) {
4691          if (calendar.month < 0) {
4692            calendar.year -= Math.ceil(Math.abs(calendar.month) / 12);
4693            calendar.month += 12;
4694          }
4695          if (calendar.month > 11) {
4696            calendar.year += Math.floor(Math.abs(calendar.month) / 12);
4697            calendar.month -= 12;
4698          }
4699          return calendar;
4700        }, defaults2 = {
4701          field: null,
4702          bound: void 0,
4703          ariaLabel: "Use the arrow keys to pick a date",
4704          position: "bottom left",
4705          reposition: true,
4706          format: "YYYY-MM-DD",
4707          toString: null,
4708          parse: null,
4709          defaultDate: null,
4710          setDefaultDate: false,
4711          firstDay: 0,
4712          firstWeekOfYearMinDays: 4,
4713          formatStrict: false,
4714          minDate: null,
4715          maxDate: null,
4716          yearRange: 10,
4717          showWeekNumber: false,
4718          pickWholeWeek: false,
4719          minYear: 0,
4720          maxYear: 9999,
4721          minMonth: void 0,
4722          maxMonth: void 0,
4723          startRange: null,
4724          endRange: null,
4725          isRTL: false,
4726          yearSuffix: "",
4727          showMonthAfterYear: false,
4728          showDaysInNextAndPreviousMonths: false,
4729          enableSelectionDaysInNextAndPreviousMonths: false,
4730          numberOfMonths: 1,
4731          mainCalendar: "left",
4732          container: void 0,
4733          blurFieldOnSelect: true,
4734          i18n: {
4735            previousMonth: "Previous Month",
4736            nextMonth: "Next Month",
4737            months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
4738            weekdays: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
4739            weekdaysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
4740          },
4741          theme: null,
4742          events: [],
4743          onSelect: null,
4744          onOpen: null,
4745          onClose: null,
4746          onDraw: null,
4747          keyboardInput: true
4748        }, renderDayName = function(opts, day, abbr) {
4749          day += opts.firstDay;
4750          while (day >= 7) {
4751            day -= 7;
4752          }
4753          return abbr ? opts.i18n.weekdaysShort[day] : opts.i18n.weekdays[day];
4754        }, renderDay = function(opts) {
4755          var arr = [];
4756          var ariaSelected = "false";
4757          if (opts.isEmpty) {
4758            if (opts.showDaysInNextAndPreviousMonths) {
4759              arr.push("is-outside-current-month");
4760              if (!opts.enableSelectionDaysInNextAndPreviousMonths) {
4761                arr.push("is-selection-disabled");
4762              }
4763            } else {
4764              return '<td class="is-empty"></td>';
4765            }
4766          }
4767          if (opts.isDisabled) {
4768            arr.push("is-disabled");
4769          }
4770          if (opts.isToday) {
4771            arr.push("is-today");
4772          }
4773          if (opts.isSelected) {
4774            arr.push("is-selected");
4775            ariaSelected = "true";
4776          }
4777          if (opts.hasEvent) {
4778            arr.push("has-event");
4779          }
4780          if (opts.isInRange) {
4781            arr.push("is-inrange");
4782          }
4783          if (opts.isStartRange) {
4784            arr.push("is-startrange");
4785          }
4786          if (opts.isEndRange) {
4787            arr.push("is-endrange");
4788          }
4789          return '<td data-day="' + opts.day + '" class="' + arr.join(" ") + '" aria-selected="' + ariaSelected + '"><button class="pika-button pika-day" type="button" data-pika-year="' + opts.year + '" data-pika-month="' + opts.month + '" data-pika-day="' + opts.day + '">' + opts.day + "</button></td>";
4790        }, isoWeek = function(date, firstWeekOfYearMinDays) {
4791          date.setHours(0, 0, 0, 0);
4792          var yearDay = date.getDate(), weekDay = date.getDay(), dayInFirstWeek = firstWeekOfYearMinDays, dayShift = dayInFirstWeek - 1, daysPerWeek = 7, prevWeekDay = function(day) {
4793            return (day + daysPerWeek - 1) % daysPerWeek;
4794          };
4795          date.setDate(yearDay + dayShift - prevWeekDay(weekDay));
4796          var jan4th = new Date(date.getFullYear(), 0, dayInFirstWeek), msPerDay = 24 * 60 * 60 * 1e3, daysBetween = (date.getTime() - jan4th.getTime()) / msPerDay, weekNum = 1 + Math.round((daysBetween - dayShift + prevWeekDay(jan4th.getDay())) / daysPerWeek);
4797          return weekNum;
4798        }, renderWeek = function(d3, m5, y4, firstWeekOfYearMinDays) {
4799          var date = new Date(y4, m5, d3), week = hasMoment ? moment(date).isoWeek() : isoWeek(date, firstWeekOfYearMinDays);
4800          return '<td class="pika-week">' + week + "</td>";
4801        }, renderRow = function(days, isRTL2, pickWholeWeek, isRowSelected) {
4802          return '<tr class="pika-row' + (pickWholeWeek ? " pick-whole-week" : "") + (isRowSelected ? " is-selected" : "") + '">' + (isRTL2 ? days.reverse() : days).join("") + "</tr>";
4803        }, renderBody = function(rows) {
4804          return "<tbody>" + rows.join("") + "</tbody>";
4805        }, renderHead = function(opts) {
4806          var i4, arr = [];
4807          if (opts.showWeekNumber) {
4808            arr.push("<th></th>");
4809          }
4810          for (i4 = 0; i4 < 7; i4++) {
4811            arr.push('<th scope="col"><abbr title="' + renderDayName(opts, i4) + '">' + renderDayName(opts, i4, true) + "</abbr></th>");
4812          }
4813          return "<thead><tr>" + (opts.isRTL ? arr.reverse() : arr).join("") + "</tr></thead>";
4814        }, renderTitle = function(instance, c4, year, month, refYear, randId) {
4815          var i4, j5, arr, opts = instance._o, isMinYear = year === opts.minYear, isMaxYear = year === opts.maxYear, html = '<div id="' + randId + '" class="pika-title" role="heading" aria-live="assertive">', monthHtml, yearHtml, prev = true, next = true;
4816          for (arr = [], i4 = 0; i4 < 12; i4++) {
4817            arr.push('<option value="' + (year === refYear ? i4 - c4 : 12 + i4 - c4) + '"' + (i4 === month ? ' selected="selected"' : "") + (isMinYear && i4 < opts.minMonth || isMaxYear && i4 > opts.maxMonth ? ' disabled="disabled"' : "") + ">" + opts.i18n.months[i4] + "</option>");
4818          }
4819          monthHtml = '<div class="pika-label">' + opts.i18n.months[month] + '<select class="pika-select pika-select-month" tabindex="-1">' + arr.join("") + "</select></div>";
4820          if (isArray(opts.yearRange)) {
4821            i4 = opts.yearRange[0];
4822            j5 = opts.yearRange[1] + 1;
4823          } else {
4824            i4 = year - opts.yearRange;
4825            j5 = 1 + year + opts.yearRange;
4826          }
4827          for (arr = []; i4 < j5 && i4 <= opts.maxYear; i4++) {
4828            if (i4 >= opts.minYear) {
4829              arr.push('<option value="' + i4 + '"' + (i4 === year ? ' selected="selected"' : "") + ">" + i4 + "</option>");
4830            }
4831          }
4832          yearHtml = '<div class="pika-label">' + year + opts.yearSuffix + '<select class="pika-select pika-select-year" tabindex="-1">' + arr.join("") + "</select></div>";
4833          if (opts.showMonthAfterYear) {
4834            html += yearHtml + monthHtml;
4835          } else {
4836            html += monthHtml + yearHtml;
4837          }
4838          if (isMinYear && (month === 0 || opts.minMonth >= month)) {
4839            prev = false;
4840          }
4841          if (isMaxYear && (month === 11 || opts.maxMonth <= month)) {
4842            next = false;
4843          }
4844          if (c4 === 0) {
4845            html += '<button class="pika-prev' + (prev ? "" : " is-disabled") + '" type="button">' + opts.i18n.previousMonth + "</button>";
4846          }
4847          if (c4 === instance._o.numberOfMonths - 1) {
4848            html += '<button class="pika-next' + (next ? "" : " is-disabled") + '" type="button">' + opts.i18n.nextMonth + "</button>";
4849          }
4850          return html += "</div>";
4851        }, renderTable = function(opts, data, randId) {
4852          return '<table cellpadding="0" cellspacing="0" class="pika-table" role="grid" aria-labelledby="' + randId + '">' + renderHead(opts) + renderBody(data) + "</table>";
4853        }, Pikaday5 = function(options) {
4854          var self = this, opts = self.config(options);
4855          self._onMouseDown = function(e4) {
4856            if (!self._v) {
4857              return;
4858            }
4859            e4 = e4 || window.event;
4860            var target = e4.target || e4.srcElement;
4861            if (!target) {
4862              return;
4863            }
4864            if (!hasClass(target, "is-disabled")) {
4865              if (hasClass(target, "pika-button") && !hasClass(target, "is-empty") && !hasClass(target.parentNode, "is-disabled")) {
4866                self.setDate(new Date(target.getAttribute("data-pika-year"), target.getAttribute("data-pika-month"), target.getAttribute("data-pika-day")));
4867                if (opts.bound) {
4868                  sto(function() {
4869                    self.hide();
4870                    if (opts.blurFieldOnSelect && opts.field) {
4871                      opts.field.blur();
4872                    }
4873                  }, 100);
4874                }
4875              } else if (hasClass(target, "pika-prev")) {
4876                self.prevMonth();
4877              } else if (hasClass(target, "pika-next")) {
4878                self.nextMonth();
4879              }
4880            }
4881            if (!hasClass(target, "pika-select")) {
4882              if (e4.preventDefault) {
4883                e4.preventDefault();
4884              } else {
4885                e4.returnValue = false;
4886                return false;
4887              }
4888            } else {
4889              self._c = true;
4890            }
4891          };
4892          self._onChange = function(e4) {
4893            e4 = e4 || window.event;
4894            var target = e4.target || e4.srcElement;
4895            if (!target) {
4896              return;
4897            }
4898            if (hasClass(target, "pika-select-month")) {
4899              self.gotoMonth(target.value);
4900            } else if (hasClass(target, "pika-select-year")) {
4901              self.gotoYear(target.value);
4902            }
4903          };
4904          self._onKeyChange = function(e4) {
4905            e4 = e4 || window.event;
4906            if (self.isVisible()) {
4907              switch (e4.keyCode) {
4908                case 13:
4909                case 27:
4910                  if (opts.field) {
4911                    opts.field.blur();
4912                  }
4913                  break;
4914                case 37:
4915                  self.adjustDate("subtract", 1);
4916                  break;
4917                case 38:
4918                  self.adjustDate("subtract", 7);
4919                  break;
4920                case 39:
4921                  self.adjustDate("add", 1);
4922                  break;
4923                case 40:
4924                  self.adjustDate("add", 7);
4925                  break;
4926                case 8:
4927                case 46:
4928                  self.setDate(null);
4929                  break;
4930              }
4931            }
4932          };
4933          self._parseFieldValue = function() {
4934            if (opts.parse) {
4935              return opts.parse(opts.field.value, opts.format);
4936            } else if (hasMoment) {
4937              var date = moment(opts.field.value, opts.format, opts.formatStrict);
4938              return date && date.isValid() ? date.toDate() : null;
4939            } else {
4940              return new Date(Date.parse(opts.field.value));
4941            }
4942          };
4943          self._onInputChange = function(e4) {
4944            var date;
4945            if (e4.firedBy === self) {
4946              return;
4947            }
4948            date = self._parseFieldValue();
4949            if (isDate(date)) {
4950              self.setDate(date);
4951            }
4952            if (!self._v) {
4953              self.show();
4954            }
4955          };
4956          self._onInputFocus = function() {
4957            self.show();
4958          };
4959          self._onInputClick = function() {
4960            self.show();
4961          };
4962          self._onInputBlur = function() {
4963            var pEl = document2.activeElement;
4964            do {
4965              if (hasClass(pEl, "pika-single")) {
4966                return;
4967              }
4968            } while (pEl = pEl.parentNode);
4969            if (!self._c) {
4970              self._b = sto(function() {
4971                self.hide();
4972              }, 50);
4973            }
4974            self._c = false;
4975          };
4976          self._onClick = function(e4) {
4977            e4 = e4 || window.event;
4978            var target = e4.target || e4.srcElement, pEl = target;
4979            if (!target) {
4980              return;
4981            }
4982            if (!hasEventListeners && hasClass(target, "pika-select")) {
4983              if (!target.onchange) {
4984                target.setAttribute("onchange", "return;");
4985                addEvent2(target, "change", self._onChange);
4986              }
4987            }
4988            do {
4989              if (hasClass(pEl, "pika-single") || pEl === opts.trigger) {
4990                return;
4991              }
4992            } while (pEl = pEl.parentNode);
4993            if (self._v && target !== opts.trigger && pEl !== opts.trigger) {
4994              self.hide();
4995            }
4996          };
4997          self.el = document2.createElement("div");
4998          self.el.className = "pika-single" + (opts.isRTL ? " is-rtl" : "") + (opts.theme ? " " + opts.theme : "");
4999          addEvent2(self.el, "mousedown", self._onMouseDown, true);
5000          addEvent2(self.el, "touchend", self._onMouseDown, true);
5001          addEvent2(self.el, "change", self._onChange);
5002          if (opts.keyboardInput) {
5003            addEvent2(document2, "keydown", self._onKeyChange);
5004          }
5005          if (opts.field) {
5006            if (opts.container) {
5007              opts.container.appendChild(self.el);
5008            } else if (opts.bound) {
5009              document2.body.appendChild(self.el);
5010            } else {
5011              opts.field.parentNode.insertBefore(self.el, opts.field.nextSibling);
5012            }
5013            addEvent2(opts.field, "change", self._onInputChange);
5014            if (!opts.defaultDate) {
5015              opts.defaultDate = self._parseFieldValue();
5016              opts.setDefaultDate = true;
5017            }
5018          }
5019          var defDate = opts.defaultDate;
5020          if (isDate(defDate)) {
5021            if (opts.setDefaultDate) {
5022              self.setDate(defDate, true);
5023            } else {
5024              self.gotoDate(defDate);
5025            }
5026          } else {
5027            self.gotoDate(new Date());
5028          }
5029          if (opts.bound) {
5030            this.hide();
5031            self.el.className += " is-bound";
5032            addEvent2(opts.trigger, "click", self._onInputClick);
5033            addEvent2(opts.trigger, "focus", self._onInputFocus);
5034            addEvent2(opts.trigger, "blur", self._onInputBlur);
5035          } else {
5036            this.show();
5037          }
5038        };
5039        Pikaday5.prototype = {
5040          config: function(options) {
5041            if (!this._o) {
5042              this._o = extend5({}, defaults2, true);
5043            }
5044            var opts = extend5(this._o, options, true);
5045            opts.isRTL = !!opts.isRTL;
5046            opts.field = opts.field && opts.field.nodeName ? opts.field : null;
5047            opts.theme = typeof opts.theme === "string" && opts.theme ? opts.theme : null;
5048            opts.bound = !!(opts.bound !== void 0 ? opts.field && opts.bound : opts.field);
5049            opts.trigger = opts.trigger && opts.trigger.nodeName ? opts.trigger : opts.field;
5050            opts.disableWeekends = !!opts.disableWeekends;
5051            opts.disableDayFn = typeof opts.disableDayFn === "function" ? opts.disableDayFn : null;
5052            var nom = parseInt(opts.numberOfMonths, 10) || 1;
5053            opts.numberOfMonths = nom > 4 ? 4 : nom;
5054            if (!isDate(opts.minDate)) {
5055              opts.minDate = false;
5056            }
5057            if (!isDate(opts.maxDate)) {
5058              opts.maxDate = false;
5059            }
5060            if (opts.minDate && opts.maxDate && opts.maxDate < opts.minDate) {
5061              opts.maxDate = opts.minDate = false;
5062            }
5063            if (opts.minDate) {
5064              this.setMinDate(opts.minDate);
5065            }
5066            if (opts.maxDate) {
5067              this.setMaxDate(opts.maxDate);
5068            }
5069            if (isArray(opts.yearRange)) {
5070              var fallback = new Date().getFullYear() - 10;
5071              opts.yearRange[0] = parseInt(opts.yearRange[0], 10) || fallback;
5072              opts.yearRange[1] = parseInt(opts.yearRange[1], 10) || fallback;
5073            } else {
5074              opts.yearRange = Math.abs(parseInt(opts.yearRange, 10)) || defaults2.yearRange;
5075              if (opts.yearRange > 100) {
5076                opts.yearRange = 100;
5077              }
5078            }
5079            return opts;
5080          },
5081          toString: function(format) {
5082            format = format || this._o.format;
5083            if (!isDate(this._d)) {
5084              return "";
5085            }
5086            if (this._o.toString) {
5087              return this._o.toString(this._d, format);
5088            }
5089            if (hasMoment) {
5090              return moment(this._d).format(format);
5091            }
5092            return this._d.toDateString();
5093          },
5094          getMoment: function() {
5095            return hasMoment ? moment(this._d) : null;
5096          },
5097          setMoment: function(date, preventOnSelect) {
5098            if (hasMoment && moment.isMoment(date)) {
5099              this.setDate(date.toDate(), preventOnSelect);
5100            }
5101          },
5102          getDate: function() {
5103            return isDate(this._d) ? new Date(this._d.getTime()) : null;
5104          },
5105          setDate: function(date, preventOnSelect) {
5106            if (!date) {
5107              this._d = null;
5108              if (this._o.field) {
5109                this._o.field.value = "";
5110                fireEvent(this._o.field, "change", { firedBy: this });
5111              }
5112              return this.draw();
5113            }
5114            if (typeof date === "string") {
5115              date = new Date(Date.parse(date));
5116            }
5117            if (!isDate(date)) {
5118              return;
5119            }
5120            var min2 = this._o.minDate, max2 = this._o.maxDate;
5121            if (isDate(min2) && date < min2) {
5122              date = min2;
5123            } else if (isDate(max2) && date > max2) {
5124              date = max2;
5125            }
5126            this._d = new Date(date.getTime());
5127            setToStartOfDay(this._d);
5128            this.gotoDate(this._d);
5129            if (this._o.field) {
5130              this._o.field.value = this.toString();
5131              fireEvent(this._o.field, "change", { firedBy: this });
5132            }
5133            if (!preventOnSelect && typeof this._o.onSelect === "function") {
5134              this._o.onSelect.call(this, this.getDate());
5135            }
5136          },
5137          clear: function() {
5138            this.setDate(null);
5139          },
5140          gotoDate: function(date) {
5141            var newCalendar = true;
5142            if (!isDate(date)) {
5143              return;
5144            }
5145            if (this.calendars) {
5146              var firstVisibleDate = new Date(this.calendars[0].year, this.calendars[0].month, 1), lastVisibleDate = new Date(this.calendars[this.calendars.length - 1].year, this.calendars[this.calendars.length - 1].month, 1), visibleDate = date.getTime();
5147              lastVisibleDate.setMonth(lastVisibleDate.getMonth() + 1);
5148              lastVisibleDate.setDate(lastVisibleDate.getDate() - 1);
5149              newCalendar = visibleDate < firstVisibleDate.getTime() || lastVisibleDate.getTime() < visibleDate;
5150            }
5151            if (newCalendar) {
5152              this.calendars = [{
5153                month: date.getMonth(),
5154                year: date.getFullYear()
5155              }];
5156              if (this._o.mainCalendar === "right") {
5157                this.calendars[0].month += 1 - this._o.numberOfMonths;
5158              }
5159            }
5160            this.adjustCalendars();
5161          },
5162          adjustDate: function(sign, days) {
5163            var day = this.getDate() || new Date();
5164            var difference = parseInt(days) * 24 * 60 * 60 * 1e3;
5165            var newDay;
5166            if (sign === "add") {
5167              newDay = new Date(day.valueOf() + difference);
5168            } else if (sign === "subtract") {
5169              newDay = new Date(day.valueOf() - difference);
5170            }
5171            this.setDate(newDay);
5172          },
5173          adjustCalendars: function() {
5174            this.calendars[0] = adjustCalendar(this.calendars[0]);
5175            for (var c4 = 1; c4 < this._o.numberOfMonths; c4++) {
5176              this.calendars[c4] = adjustCalendar({
5177                month: this.calendars[0].month + c4,
5178                year: this.calendars[0].year
5179              });
5180            }
5181            this.draw();
5182          },
5183          gotoToday: function() {
5184            this.gotoDate(new Date());
5185          },
5186          gotoMonth: function(month) {
5187            if (!isNaN(month)) {
5188              this.calendars[0].month = parseInt(month, 10);
5189              this.adjustCalendars();
5190            }
5191          },
5192          nextMonth: function() {
5193            this.calendars[0].month++;
5194            this.adjustCalendars();
5195          },
5196          prevMonth: function() {
5197            this.calendars[0].month--;
5198            this.adjustCalendars();
5199          },
5200          gotoYear: function(year) {
5201            if (!isNaN(year)) {
5202              this.calendars[0].year = parseInt(year, 10);
5203              this.adjustCalendars();
5204            }
5205          },
5206          setMinDate: function(value) {
5207            if (value instanceof Date) {
5208              setToStartOfDay(value);
5209              this._o.minDate = value;
5210              this._o.minYear = value.getFullYear();
5211              this._o.minMonth = value.getMonth();
5212            } else {
5213              this._o.minDate = defaults2.minDate;
5214              this._o.minYear = defaults2.minYear;
5215              this._o.minMonth = defaults2.minMonth;
5216              this._o.startRange = defaults2.startRange;
5217            }
5218            this.draw();
5219          },
5220          setMaxDate: function(value) {
5221            if (value instanceof Date) {
5222              setToStartOfDay(value);
5223              this._o.maxDate = value;
5224              this._o.maxYear = value.getFullYear();
5225              this._o.maxMonth = value.getMonth();
5226            } else {
5227              this._o.maxDate = defaults2.maxDate;
5228              this._o.maxYear = defaults2.maxYear;
5229              this._o.maxMonth = defaults2.maxMonth;
5230              this._o.endRange = defaults2.endRange;
5231            }
5232            this.draw();
5233          },
5234          setStartRange: function(value) {
5235            this._o.startRange = value;
5236          },
5237          setEndRange: function(value) {
5238            this._o.endRange = value;
5239          },
5240          draw: function(force) {
5241            if (!this._v && !force) {
5242              return;
5243            }
5244            var opts = this._o, minYear = opts.minYear, maxYear = opts.maxYear, minMonth = opts.minMonth, maxMonth = opts.maxMonth, html = "", randId;
5245            if (this._y <= minYear) {
5246              this._y = minYear;
5247              if (!isNaN(minMonth) && this._m < minMonth) {
5248                this._m = minMonth;
5249              }
5250            }
5251            if (this._y >= maxYear) {
5252              this._y = maxYear;
5253              if (!isNaN(maxMonth) && this._m > maxMonth) {
5254                this._m = maxMonth;
5255              }
5256            }
5257            for (var c4 = 0; c4 < opts.numberOfMonths; c4++) {
5258              randId = "pika-title-" + Math.random().toString(36).replace(/[^a-z]+/g, "").substr(0, 2);
5259              html += '<div class="pika-lendar">' + renderTitle(this, c4, this.calendars[c4].year, this.calendars[c4].month, this.calendars[0].year, randId) + this.render(this.calendars[c4].year, this.calendars[c4].month, randId) + "</div>";
5260            }
5261            this.el.innerHTML = html;
5262            if (opts.bound) {
5263              if (opts.field.type !== "hidden") {
5264                sto(function() {
5265                  opts.trigger.focus();
5266                }, 1);
5267              }
5268            }
5269            if (typeof this._o.onDraw === "function") {
5270              this._o.onDraw(this);
5271            }
5272            if (opts.bound) {
5273              opts.field.setAttribute("aria-label", opts.ariaLabel);
5274            }
5275          },
5276          adjustPosition: function() {
5277            var field, pEl, width, height, viewportWidth, viewportHeight, scrollTop, left2, top2, clientRect, leftAligned, bottomAligned;
5278            if (this._o.container)
5279              return;
5280            this.el.style.position = "absolute";
5281            field = this._o.trigger;
5282            pEl = field;
5283            width = this.el.offsetWidth;
5284            height = this.el.offsetHeight;
5285            viewportWidth = window.innerWidth || document2.documentElement.clientWidth;
5286            viewportHeight = window.innerHeight || document2.documentElement.clientHeight;
5287            scrollTop = window.pageYOffset || document2.body.scrollTop || document2.documentElement.scrollTop;
5288            leftAligned = true;
5289            bottomAligned = true;
5290            if (typeof field.getBoundingClientRect === "function") {
5291              clientRect = field.getBoundingClientRect();
5292              left2 = clientRect.left + window.pageXOffset;
5293              top2 = clientRect.bottom + window.pageYOffset;
5294            } else {
5295              left2 = pEl.offsetLeft;
5296              top2 = pEl.offsetTop + pEl.offsetHeight;
5297              while (pEl = pEl.offsetParent) {
5298                left2 += pEl.offsetLeft;
5299                top2 += pEl.offsetTop;
5300              }
5301            }
5302            if (this._o.reposition && left2 + width > viewportWidth || this._o.position.indexOf("right") > -1 && left2 - width + field.offsetWidth > 0) {
5303              left2 = left2 - width + field.offsetWidth;
5304              leftAligned = false;
5305            }
5306            if (this._o.reposition && top2 + height > viewportHeight + scrollTop || this._o.position.indexOf("top") > -1 && top2 - height - field.offsetHeight > 0) {
5307              top2 = top2 - height - field.offsetHeight;
5308              bottomAligned = false;
5309            }
5310            this.el.style.left = left2 + "px";
5311            this.el.style.top = top2 + "px";
5312            addClass(this.el, leftAligned ? "left-aligned" : "right-aligned");
5313            addClass(this.el, bottomAligned ? "bottom-aligned" : "top-aligned");
5314            removeClass(this.el, !leftAligned ? "left-aligned" : "right-aligned");
5315            removeClass(this.el, !bottomAligned ? "bottom-aligned" : "top-aligned");
5316          },
5317          render: function(year, month, randId) {
5318            var opts = this._o, now3 = new Date(), days = getDaysInMonth(year, month), before = new Date(year, month, 1).getDay(), data = [], row = [];
5319            setToStartOfDay(now3);
5320            if (opts.firstDay > 0) {
5321              before -= opts.firstDay;
5322              if (before < 0) {
5323                before += 7;
5324              }
5325            }
5326            var previousMonth = month === 0 ? 11 : month - 1, nextMonth = month === 11 ? 0 : month + 1, yearOfPreviousMonth = month === 0 ? year - 1 : year, yearOfNextMonth = month === 11 ? year + 1 : year, daysInPreviousMonth = getDaysInMonth(yearOfPreviousMonth, previousMonth);
5327            var cells = days + before, after = cells;
5328            while (after > 7) {
5329              after -= 7;
5330            }
5331            cells += 7 - after;
5332            var isWeekSelected = false;
5333            for (var i4 = 0, r4 = 0; i4 < cells; i4++) {
5334              var day = new Date(year, month, 1 + (i4 - before)), isSelected = isDate(this._d) ? compareDates(day, this._d) : false, isToday = compareDates(day, now3), hasEvent = opts.events.indexOf(day.toDateString()) !== -1 ? true : false, isEmpty = i4 < before || i4 >= days + before, dayNumber = 1 + (i4 - before), monthNumber = month, yearNumber = year, isStartRange = opts.startRange && compareDates(opts.startRange, day), isEndRange = opts.endRange && compareDates(opts.endRange, day), isInRange = opts.startRange && opts.endRange && opts.startRange < day && day < opts.endRange, isDisabled2 = opts.minDate && day < opts.minDate || opts.maxDate && day > opts.maxDate || opts.disableWeekends && isWeekend(day) || opts.disableDayFn && opts.disableDayFn(day);
5335              if (isEmpty) {
5336                if (i4 < before) {
5337                  dayNumber = daysInPreviousMonth + dayNumber;
5338                  monthNumber = previousMonth;
5339                  yearNumber = yearOfPreviousMonth;
5340                } else {
5341                  dayNumber = dayNumber - days;
5342                  monthNumber = nextMonth;
5343                  yearNumber = yearOfNextMonth;
5344                }
5345              }
5346              var dayConfig = {
5347                day: dayNumber,
5348                month: monthNumber,
5349                year: yearNumber,
5350                hasEvent,
5351                isSelected,
5352                isToday,
5353                isDisabled: isDisabled2,
5354                isEmpty,
5355                isStartRange,
5356                isEndRange,
5357                isInRange,
5358                showDaysInNextAndPreviousMonths: opts.showDaysInNextAndPreviousMonths,
5359                enableSelectionDaysInNextAndPreviousMonths: opts.enableSelectionDaysInNextAndPreviousMonths
5360              };
5361              if (opts.pickWholeWeek && isSelected) {
5362                isWeekSelected = true;
5363              }
5364              row.push(renderDay(dayConfig));
5365              if (++r4 === 7) {
5366                if (opts.showWeekNumber) {
5367                  row.unshift(renderWeek(i4 - before, month, year, opts.firstWeekOfYearMinDays));
5368                }
5369                data.push(renderRow(row, opts.isRTL, opts.pickWholeWeek, isWeekSelected));
5370                row = [];
5371                r4 = 0;
5372                isWeekSelected = false;
5373              }
5374            }
5375            return renderTable(opts, data, randId);
5376          },
5377          isVisible: function() {
5378            return this._v;
5379          },
5380          show: function() {
5381            if (!this.isVisible()) {
5382              this._v = true;
5383              this.draw();
5384              removeClass(this.el, "is-hidden");
5385              if (this._o.bound) {
5386                addEvent2(document2, "click", this._onClick);
5387                this.adjustPosition();
5388              }
5389              if (typeof this._o.onOpen === "function") {
5390                this._o.onOpen.call(this);
5391              }
5392            }
5393          },
5394          hide: function() {
5395            var v4 = this._v;
5396            if (v4 !== false) {
5397              if (this._o.bound) {
5398                removeEvent(document2, "click", this._onClick);
5399              }
5400              if (!this._o.container) {
5401                this.el.style.position = "static";
5402                this.el.style.left = "auto";
5403                this.el.style.top = "auto";
5404              }
5405              addClass(this.el, "is-hidden");
5406              this._v = false;
5407              if (v4 !== void 0 && typeof this._o.onClose === "function") {
5408                this._o.onClose.call(this);
5409              }
5410            }
5411          },
5412          destroy: function() {
5413            var opts = this._o;
5414            this.hide();
5415            removeEvent(this.el, "mousedown", this._onMouseDown, true);
5416            removeEvent(this.el, "touchend", this._onMouseDown, true);
5417            removeEvent(this.el, "change", this._onChange);
5418            if (opts.keyboardInput) {
5419              removeEvent(document2, "keydown", this._onKeyChange);
5420            }
5421            if (opts.field) {
5422              removeEvent(opts.field, "change", this._onInputChange);
5423              if (opts.bound) {
5424                removeEvent(opts.trigger, "click", this._onInputClick);
5425                removeEvent(opts.trigger, "focus", this._onInputFocus);
5426                removeEvent(opts.trigger, "blur", this._onInputBlur);
5427              }
5428            }
5429            if (this.el.parentNode) {
5430              this.el.parentNode.removeChild(this.el);
5431            }
5432          }
5433        };
5434        return Pikaday5;
5435      });
5436    }
5437  });
5438
5439  
vendor: 5,383 bytes, lines 5439-5549
5439// node_modules/mutation-events/src/mutation_events.min.js
5440  var require_mutation_events_min = __commonJS({
5441    "node_modules/mutation-events/src/mutation_events.min.js"() {
5442      !function() {
5443        if (window.mutationEventsPolyfillInstalled)
5444          return;
5445        window.mutationEventsPolyfillInstalled = true;
5446        let e4 = "MutationEvent" in window;
5447        if (e4 && !window.mutationEventsUsePolyfillAlways)
5448          return;
5449        let t5 = /* @__PURE__ */ new Set(["DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified"]), n3 = "Polyfilled", o3 = { attrChange: 0, bubbles: true, cancelable: false, newValue: "", prevValue: "", relatedNode: null };
5450        function r4(e5, t6, r5, a5) {
5451          let l5 = Object.assign({}, o3);
5452          r5 && (l5 = Object.assign(l5, r5));
5453          let i5 = new Event(e5 + n3, l5);
5454          i5.attrChange = l5.attrChange, i5.newValue = l5.newValue, i5.prevValue = l5.prevValue, i5.relatedNode = l5.relatedNode, a5 && Object.defineProperty(i5, "target", { writable: false, value: a5 }), t6.dispatchEvent(i5);
5455        }
5456        function a4(e5, t6) {
5457          let n4 = document.createTreeWalker(e5, NodeFilter.SHOW_ALL);
5458          do
5459            t6(n4.currentNode);
5460          while (n4.nextNode());
5461        }
5462        let l4 = /* @__PURE__ */ new Map(), i4 = /* @__PURE__ */ new Set();
5463        function u4(e5) {
5464          let t6 = [];
5465          for (let n4 of (e5.forEach(function(e6) {
5466            let n5 = e6.target, o4 = e6.type;
5467            "attributes" === o4 ? (null === e6.oldValue || null === n5.getAttribute(e6.attributeName)) && r4("DOMSubtreeModified", n5, { attributeName: e6.attributeName }) : "characterData" === o4 ? (r4("DOMCharacterDataModified", n5, { prevValue: e6.oldValue, newValue: n5.textContent }), t6.push(n5)) : "childList" === o4 && (e6.removedNodes.forEach((e7) => {
5468              t6.push(n5), r4("DOMNodeRemoved", e7), r4("DOMNodeRemoved", n5, void 0, e7), a4(e7, (e8) => r4("DOMNodeRemovedFromDocument", e8, { bubbles: false })), r4("DOMNodeRemovedFromDocument", n5, { bubbles: false }, e7);
5469            }), e6.addedNodes.forEach((e7) => {
5470              t6.push(n5), r4("DOMNodeInserted", e7), a4(e7, (e8) => r4("DOMNodeInsertedIntoDocument", e8, { bubbles: false }));
5471            }));
5472          }), t6))
5473            r4("DOMSubtreeModified", n4);
5474        }
5475        function d3(e5) {
5476          let t6 = e5.getRootNode();
5477          for (; t6 instanceof ShadowRoot; )
5478            t6 = t6.host.getRootNode();
5479          return t6 instanceof Document ? t6.documentElement : t6;
5480        }
5481        function s4(e5, t6) {
5482          return e5 && e5.has && e5.has(t6);
5483        }
5484        let c4 = { subtree: true, childList: true, attributes: true, attributeOldValue: true, characterData: true, characterDataOldValue: true }, f4 = Element.prototype.addEventListener;
5485        function v4(e5, o4, r5) {
5486          return s4(t5, e5) ? { fullEventName: e5 + n3, augmentedListener(t6) {
5487            Object.defineProperty(t6, "type", { writable: false, value: e5 }), o4(t6);
5488          } } : { fullEventName: e5, augmentedListener: o4 };
5489        }
5490        Element.prototype.addEventListener = function(e5, n4, o4) {
5491          if (s4(t5, e5)) {
5492            !function e6(t6) {
5493              if (s4(i4, t6))
5494                return;
5495              i4.add(t6);
5496              let n5 = d3(t6);
5497              if (s4(l4, n5)) {
5498                l4.get(n5).count++;
5499                return;
5500              }
5501              let o5 = new MutationObserver(u4);
5502              l4.set(n5, { observer: o5, count: 1 }), o5.observe(n5, c4);
5503            }(this);
5504            let { augmentedListener: r5, fullEventName: a5 } = v4(e5, n4, o4);
5505            f4.apply(this, [a5, r5, o4]);
5506            return;
5507          }
5508          f4.call(this, e5, n4, o4);
5509        };
5510        let p4 = window.removeEventListener;
5511        Element.prototype.removeEventListener = function(e5, n4, o4) {
5512          if (s4(t5, e5)) {
5513            !function e6(t6) {
5514              if (!s4(i4, t6))
5515                return;
5516              i4.delete(t6);
5517              let n5 = d3(t6);
5518              if (s4(l4, n5) && 0 == --l4.get(n5).count) {
5519                let o5 = l4.get(n5).observer;
5520                l4.delete(n5), o5.disconnect();
5521              }
5522            }(this);
5523            let { augmentedListener: r5, fullEventName: a5 } = v4(e5, n4, o4);
5524            p4.apply(this, [a5, r5, o4]);
5525            return;
5526          }
5527          p4.call(this, e5, n4, o4);
5528        }, window.MutationEvent = class extends CustomEvent {
5529          constructor(e5, t6) {
5530            if ("MagicString" !== e5)
5531              throw "Illegal constructor";
5532            super("", t6);
5533          }
5534          initMutationEvent(...e5) {
5535            this.initCustomEvent(...e5);
5536          }
5537          static MODIFICATION = 1;
5538          static ADDITION = 2;
5539          static REMOVAL = 3;
5540        }, window.initMutationEvent = () => new MutationEvent();
5541        let h4 = Document.prototype.createEvent;
5542        Document.prototype.createEvent = function(e5, ...t6) {
5543          return "MutationEvent" === e5 ? new MutationEvent("MagicString") : h4.call(this, e5, ...t6);
5544        }, console.log(`Mutation Events polyfill installed (native feature: ${e4 ? "supported" : "not present"}).`);
5545      }();
5546    }
5547  });
5548
5549  
vendor: 132,093 bytes, lines 5549-9346
5549// node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js
5550  (function() {
5551    if (window.Reflect === void 0 || window.customElements === void 0 || window.customElements.polyfillWrapFlushCallback) {
5552      return;
5553    }
5554    const BuiltInHTMLElement = HTMLElement;
5555    const wrapperForTheName = {
5556      HTMLElement: function HTMLElement2() {
5557        return Reflect.construct(BuiltInHTMLElement, [], this.constructor);
5558      }
5559    };
5560    window.HTMLElement = wrapperForTheName["HTMLElement"];
5561    HTMLElement.prototype = BuiltInHTMLElement.prototype;
5562    HTMLElement.prototype.constructor = HTMLElement;
5563    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);
5564  })();
5565  (function(prototype) {
5566    if (typeof prototype.requestSubmit == "function")
5567      return;
5568    prototype.requestSubmit = function(submitter) {
5569      if (submitter) {
5570        validateSubmitter(submitter, this);
5571        submitter.click();
5572      } else {
5573        submitter = document.createElement("input");
5574        submitter.type = "submit";
5575        submitter.hidden = true;
5576        this.appendChild(submitter);
5577        submitter.click();
5578        this.removeChild(submitter);
5579      }
5580    };
5581    function validateSubmitter(submitter, form) {
5582      submitter instanceof HTMLElement || raise(TypeError, "parameter 1 is not of type 'HTMLElement'");
5583      submitter.type == "submit" || raise(TypeError, "The specified element is not a submit button");
5584      submitter.form == form || raise(DOMException, "The specified element is not owned by this form element", "NotFoundError");
5585    }
5586    function raise(errorConstructor, message, name) {
5587      throw new errorConstructor("Failed to execute 'requestSubmit' on 'HTMLFormElement': " + message + ".", name);
5588    }
5589  })(HTMLFormElement.prototype);
5590  var submittersByForm = /* @__PURE__ */ new WeakMap();
5591  function findSubmitterFromClickTarget(target) {
5592    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;
5593    const candidate = element ? element.closest("input, button") : null;
5594    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == "submit" ? candidate : null;
5595  }
5596  function clickCaptured(event2) {
5597    const submitter = findSubmitterFromClickTarget(event2.target);
5598    if (submitter && submitter.form) {
5599      submittersByForm.set(submitter.form, submitter);
5600    }
5601  }
5602  (function() {
5603    if ("submitter" in Event.prototype)
5604      return;
5605    let prototype = window.Event.prototype;
5606    if ("SubmitEvent" in window && /Apple Computer/.test(navigator.vendor)) {
5607      prototype = window.SubmitEvent.prototype;
5608    } else if ("SubmitEvent" in window) {
5609      return;
5610    }
5611    addEventListener("click", clickCaptured, true);
5612    Object.defineProperty(prototype, "submitter", {
5613      get() {
5614        if (this.type == "submit" && this.target instanceof HTMLFormElement) {
5615          return submittersByForm.get(this.target);
5616        }
5617      }
5618    });
5619  })();
5620  var FrameLoadingStyle;
5621  (function(FrameLoadingStyle2) {
5622    FrameLoadingStyle2["eager"] = "eager";
5623    FrameLoadingStyle2["lazy"] = "lazy";
5624  })(FrameLoadingStyle || (FrameLoadingStyle = {}));
5625  var FrameElement = class extends HTMLElement {
5626    static get observedAttributes() {
5627      return ["disabled", "complete", "loading", "src"];
5628    }
5629    constructor() {
5630      super();
5631      this.loaded = Promise.resolve();
5632      this.delegate = new FrameElement.delegateConstructor(this);
5633    }
5634    connectedCallback() {
5635      this.delegate.connect();
5636    }
5637    disconnectedCallback() {
5638      this.delegate.disconnect();
5639    }
5640    reload() {
5641      return this.delegate.sourceURLReloaded();
5642    }
5643    attributeChangedCallback(name) {
5644      if (name == "loading") {
5645        this.delegate.loadingStyleChanged();
5646      } else if (name == "complete") {
5647        this.delegate.completeChanged();
5648      } else if (name == "src") {
5649        this.delegate.sourceURLChanged();
5650      } else {
5651        this.delegate.disabledChanged();
5652      }
5653    }
5654    get src() {
5655      return this.getAttribute("src");
5656    }
5657    set src(value) {
5658      if (value) {
5659        this.setAttribute("src", value);
5660      } else {
5661        this.removeAttribute("src");
5662      }
5663    }
5664    get loading() {
5665      return frameLoadingStyleFromString(this.getAttribute("loading") || "");
5666    }
5667    set loading(value) {
5668      if (value) {
5669        this.setAttribute("loading", value);
5670      } else {
5671        this.removeAttribute("loading");
5672      }
5673    }
5674    get disabled() {
5675      return this.hasAttribute("disabled");
5676    }
5677    set disabled(value) {
5678      if (value) {
5679        this.setAttribute("disabled", "");
5680      } else {
5681        this.removeAttribute("disabled");
5682      }
5683    }
5684    get autoscroll() {
5685      return this.hasAttribute("autoscroll");
5686    }
5687    set autoscroll(value) {
5688      if (value) {
5689        this.setAttribute("autoscroll", "");
5690      } else {
5691        this.removeAttribute("autoscroll");
5692      }
5693    }
5694    get complete() {
5695      return !this.delegate.isLoading;
5696    }
5697    get isActive() {
5698      return this.ownerDocument === document && !this.isPreview;
5699    }
5700    get isPreview() {
5701      var _a, _b;
5702      return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute("data-turbo-preview");
5703    }
5704  };
5705  function frameLoadingStyleFromString(style) {
5706    switch (style.toLowerCase()) {
5707      case "lazy":
5708        return FrameLoadingStyle.lazy;
5709      default:
5710        return FrameLoadingStyle.eager;
5711    }
5712  }
5713  function expandURL(locatable) {
5714    return new URL(locatable.toString(), document.baseURI);
5715  }
5716  function getAnchor(url) {
5717    let anchorMatch;
5718    if (url.hash) {
5719      return url.hash.slice(1);
5720    } else if (anchorMatch = url.href.match(/#(.*)$/)) {
5721      return anchorMatch[1];
5722    }
5723  }
5724  function getAction(form, submitter) {
5725    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formaction")) || form.getAttribute("action") || form.action;
5726    return expandURL(action);
5727  }
5728  function getExtension(url) {
5729    return (getLastPathComponent(url).match(/\.[^.]*$/) || [])[0] || "";
5730  }
5731  function isHTML(url) {
5732    return !!getExtension(url).match(/^(?:|\.(?:htm|html|xhtml|php))$/);
5733  }
5734  function isPrefixedBy(baseURL, url) {
5735    const prefix = getPrefix(url);
5736    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);
5737  }
5738  function locationIsVisitable(location2, rootLocation) {
5739    return isPrefixedBy(location2, rootLocation) && isHTML(location2);
5740  }
5741  function getRequestURL(url) {
5742    const anchor = getAnchor(url);
5743    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;
5744  }
5745  function toCacheKey(url) {
5746    return getRequestURL(url);
5747  }
5748  function urlsAreEqual(left2, right2) {
5749    return expandURL(left2).href == expandURL(right2).href;
5750  }
5751  function getPathComponents(url) {
5752    return url.pathname.split("/").slice(1);
5753  }
5754  function getLastPathComponent(url) {
5755    return getPathComponents(url).slice(-1)[0];
5756  }
5757  function getPrefix(url) {
5758    return addTrailingSlash(url.origin + url.pathname);
5759  }
5760  function addTrailingSlash(value) {
5761    return value.endsWith("/") ? value : value + "/";
5762  }
5763  var FetchResponse = class {
5764    constructor(response) {
5765      this.response = response;
5766    }
5767    get succeeded() {
5768      return this.response.ok;
5769    }
5770    get failed() {
5771      return !this.succeeded;
5772    }
5773    get clientError() {
5774      return this.statusCode >= 400 && this.statusCode <= 499;
5775    }
5776    get serverError() {
5777      return this.statusCode >= 500 && this.statusCode <= 599;
5778    }
5779    get redirected() {
5780      return this.response.redirected;
5781    }
5782    get location() {
5783      return expandURL(this.response.url);
5784    }
5785    get isHTML() {
5786      return this.contentType && this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/);
5787    }
5788    get statusCode() {
5789      return this.response.status;
5790    }
5791    get contentType() {
5792      return this.header("Content-Type");
5793    }
5794    get responseText() {
5795      return this.response.clone().text();
5796    }
5797    get responseHTML() {
5798      if (this.isHTML) {
5799        return this.response.clone().text();
5800      } else {
5801        return Promise.resolve(void 0);
5802      }
5803    }
5804    header(name) {
5805      return this.response.headers.get(name);
5806    }
5807  };
5808  function activateScriptElement(element) {
5809    if (element.getAttribute("data-turbo-eval") == "false") {
5810      return element;
5811    } else {
5812      const createdScriptElement = document.createElement("script");
5813      const cspNonce2 = getMetaContent("csp-nonce");
5814      if (cspNonce2) {
5815        createdScriptElement.nonce = cspNonce2;
5816      }
5817      createdScriptElement.textContent = element.textContent;
5818      createdScriptElement.async = false;
5819      copyElementAttributes(createdScriptElement, element);
5820      return createdScriptElement;
5821    }
5822  }
5823  function copyElementAttributes(destinationElement, sourceElement) {
5824    for (const { name, value } of sourceElement.attributes) {
5825      destinationElement.setAttribute(name, value);
5826    }
5827  }
5828  function createDocumentFragment(html) {
5829    const template = document.createElement("template");
5830    template.innerHTML = html;
5831    return template.content;
5832  }
5833  function dispatch(eventName, { target, cancelable, detail } = {}) {
5834    const event2 = new CustomEvent(eventName, {
5835      cancelable,
5836      bubbles: true,
5837      composed: true,
5838      detail
5839    });
5840    if (target && target.isConnected) {
5841      target.dispatchEvent(event2);
5842    } else {
5843      document.documentElement.dispatchEvent(event2);
5844    }
5845    return event2;
5846  }
5847  function nextAnimationFrame() {
5848    return new Promise((resolve) => requestAnimationFrame(() => resolve()));
5849  }
5850  function nextEventLoopTick() {
5851    return new Promise((resolve) => setTimeout(() => resolve(), 0));
5852  }
5853  function nextMicrotask() {
5854    return Promise.resolve();
5855  }
5856  function parseHTMLDocument(html = "") {
5857    return new DOMParser().parseFromString(html, "text/html");
5858  }
5859  function unindent(strings, ...values) {
5860    const lines = interpolate(strings, values).replace(/^\n/, "").split("\n");
5861    const match = lines[0].match(/^\s+/);
5862    const indent = match ? match[0].length : 0;
5863    return lines.map((line) => line.slice(indent)).join("\n");
5864  }
5865  function interpolate(strings, values) {
5866    return strings.reduce((result, string, i4) => {
5867      const value = values[i4] == void 0 ? "" : values[i4];
5868      return result + string + value;
5869    }, "");
5870  }
5871  function uuid() {
5872    return Array.from({ length: 36 }).map((_4, i4) => {
5873      if (i4 == 8 || i4 == 13 || i4 == 18 || i4 == 23) {
5874        return "-";
5875      } else if (i4 == 14) {
5876        return "4";
5877      } else if (i4 == 19) {
5878        return (Math.floor(Math.random() * 4) + 8).toString(16);
5879      } else {
5880        return Math.floor(Math.random() * 15).toString(16);
5881      }
5882    }).join("");
5883  }
5884  function getAttribute(attributeName, ...elements) {
5885    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {
5886      if (typeof value == "string")
5887        return value;
5888    }
5889    return null;
5890  }
5891  function hasAttribute(attributeName, ...elements) {
5892    return elements.some((element) => element && element.hasAttribute(attributeName));
5893  }
5894  function markAsBusy(...elements) {
5895    for (const element of elements) {
5896      if (element.localName == "turbo-frame") {
5897        element.setAttribute("busy", "");
5898      }
5899      element.setAttribute("aria-busy", "true");
5900    }
5901  }
5902  function clearBusyState(...elements) {
5903    for (const element of elements) {
5904      if (element.localName == "turbo-frame") {
5905        element.removeAttribute("busy");
5906      }
5907      element.removeAttribute("aria-busy");
5908    }
5909  }
5910  function waitForLoad(element, timeoutInMilliseconds = 2e3) {
5911    return new Promise((resolve) => {
5912      const onComplete = () => {
5913        element.removeEventListener("error", onComplete);
5914        element.removeEventListener("load", onComplete);
5915        resolve();
5916      };
5917      element.addEventListener("load", onComplete, { once: true });
5918      element.addEventListener("error", onComplete, { once: true });
5919      setTimeout(resolve, timeoutInMilliseconds);
5920    });
5921  }
5922  function getHistoryMethodForAction(action) {
5923    switch (action) {
5924      case "replace":
5925        return history.replaceState;
5926      case "advance":
5927      case "restore":
5928        return history.pushState;
5929    }
5930  }
5931  function isAction(action) {
5932    return action == "advance" || action == "replace" || action == "restore";
5933  }
5934  function getVisitAction(...elements) {
5935    const action = getAttribute("data-turbo-action", ...elements);
5936    return isAction(action) ? action : null;
5937  }
5938  function getMetaElement(name) {
5939    return document.querySelector(`meta[name="${name}"]`);
5940  }
5941  function getMetaContent(name) {
5942    const element = getMetaElement(name);
5943    return element && element.content;
5944  }
5945  function setMetaContent(name, content) {
5946    let element = getMetaElement(name);
5947    if (!element) {
5948      element = document.createElement("meta");
5949      element.setAttribute("name", name);
5950      document.head.appendChild(element);
5951    }
5952    element.setAttribute("content", content);
5953    return element;
5954  }
5955  function findClosestRecursively(element, selector) {
5956    var _a;
5957    if (element instanceof Element) {
5958      return element.closest(selector) || findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector);
5959    }
5960  }
5961  var FetchMethod;
5962  (function(FetchMethod2) {
5963    FetchMethod2[FetchMethod2["get"] = 0] = "get";
5964    FetchMethod2[FetchMethod2["post"] = 1] = "post";
5965    FetchMethod2[FetchMethod2["put"] = 2] = "put";
5966    FetchMethod2[FetchMethod2["patch"] = 3] = "patch";
5967    FetchMethod2[FetchMethod2["delete"] = 4] = "delete";
5968  })(FetchMethod || (FetchMethod = {}));
5969  function fetchMethodFromString(method) {
5970    switch (method.toLowerCase()) {
5971      case "get":
5972        return FetchMethod.get;
5973      case "post":
5974        return FetchMethod.post;
5975      case "put":
5976        return FetchMethod.put;
5977      case "patch":
5978        return FetchMethod.patch;
5979      case "delete":
5980        return FetchMethod.delete;
5981    }
5982  }
5983  var FetchRequest = class {
5984    constructor(delegate2, method, location2, body = new URLSearchParams(), target = null) {
5985      this.abortController = new AbortController();
5986      this.resolveRequestPromise = (_value) => {
5987      };
5988      this.delegate = delegate2;
5989      this.method = method;
5990      this.headers = this.defaultHeaders;
5991      this.body = body;
5992      this.url = location2;
5993      this.target = target;
5994    }
5995    get location() {
5996      return this.url;
5997    }
5998    get params() {
5999      return this.url.searchParams;
6000    }
6001    get entries() {
6002      return this.body ? Array.from(this.body.entries()) : [];
6003    }
6004    cancel() {
6005      this.abortController.abort();
6006    }
6007    async perform() {
6008      const { fetchOptions } = this;
6009      this.delegate.prepareRequest(this);
6010      await this.allowRequestToBeIntercepted(fetchOptions);
6011      try {
6012        this.delegate.requestStarted(this);
6013        const response = await fetch(this.url.href, fetchOptions);
6014        return await this.receive(response);
6015      } catch (error2) {
6016        if (error2.name !== "AbortError") {
6017          if (this.willDelegateErrorHandling(error2)) {
6018            this.delegate.requestErrored(this, error2);
6019          }
6020          throw error2;
6021        }
6022      } finally {
6023        this.delegate.requestFinished(this);
6024      }
6025    }
6026    async receive(response) {
6027      const fetchResponse = new FetchResponse(response);
6028      const event2 = dispatch("turbo:before-fetch-response", {
6029        cancelable: true,
6030        detail: { fetchResponse },
6031        target: this.target
6032      });
6033      if (event2.defaultPrevented) {
6034        this.delegate.requestPreventedHandlingResponse(this, fetchResponse);
6035      } else if (fetchResponse.succeeded) {
6036        this.delegate.requestSucceededWithResponse(this, fetchResponse);
6037      } else {
6038        this.delegate.requestFailedWithResponse(this, fetchResponse);
6039      }
6040      return fetchResponse;
6041    }
6042    get fetchOptions() {
6043      var _a;
6044      return {
6045        method: FetchMethod[this.method].toUpperCase(),
6046        credentials: "same-origin",
6047        headers: this.headers,
6048        redirect: "follow",
6049        body: this.isSafe ? null : this.body,
6050        signal: this.abortSignal,
6051        referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href
6052      };
6053    }
6054    get defaultHeaders() {
6055      return {
6056        Accept: "text/html, application/xhtml+xml"
6057      };
6058    }
6059    get isSafe() {
6060      return this.method === FetchMethod.get;
6061    }
6062    get abortSignal() {
6063      return this.abortController.signal;
6064    }
6065    acceptResponseType(mimeType) {
6066      this.headers["Accept"] = [mimeType, this.headers["Accept"]].join(", ");
6067    }
6068    async allowRequestToBeIntercepted(fetchOptions) {
6069      const requestInterception = new Promise((resolve) => this.resolveRequestPromise = resolve);
6070      const event2 = dispatch("turbo:before-fetch-request", {
6071        cancelable: true,
6072        detail: {
6073          fetchOptions,
6074          url: this.url,
6075          resume: this.resolveRequestPromise
6076        },
6077        target: this.target
6078      });
6079      if (event2.defaultPrevented)
6080        await requestInterception;
6081    }
6082    willDelegateErrorHandling(error2) {
6083      const event2 = dispatch("turbo:fetch-request-error", {
6084        target: this.target,
6085        cancelable: true,
6086        detail: { request: this, error: error2 }
6087      });
6088      return !event2.defaultPrevented;
6089    }
6090  };
6091  var AppearanceObserver = class {
6092    constructor(delegate2, element) {
6093      this.started = false;
6094      this.intersect = (entries) => {
6095        const lastEntry = entries.slice(-1)[0];
6096        if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {
6097          this.delegate.elementAppearedInViewport(this.element);
6098        }
6099      };
6100      this.delegate = delegate2;
6101      this.element = element;
6102      this.intersectionObserver = new IntersectionObserver(this.intersect);
6103    }
6104    start() {
6105      if (!this.started) {
6106        this.started = true;
6107        this.intersectionObserver.observe(this.element);
6108      }
6109    }
6110    stop() {
6111      if (this.started) {
6112        this.started = false;
6113        this.intersectionObserver.unobserve(this.element);
6114      }
6115    }
6116  };
6117  var StreamMessage = class {
6118    static wrap(message) {
6119      if (typeof message == "string") {
6120        return new this(createDocumentFragment(message));
6121      } else {
6122        return message;
6123      }
6124    }
6125    constructor(fragment) {
6126      this.fragment = importStreamElements(fragment);
6127    }
6128  };
6129  StreamMessage.contentType = "text/vnd.turbo-stream.html";
6130  function importStreamElements(fragment) {
6131    for (const element of fragment.querySelectorAll("turbo-stream")) {
6132      const streamElement = document.importNode(element, true);
6133      for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll("script")) {
6134        inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));
6135      }
6136      element.replaceWith(streamElement);
6137    }
6138    return fragment;
6139  }
6140  var FormSubmissionState;
6141  (function(FormSubmissionState2) {
6142    FormSubmissionState2[FormSubmissionState2["initialized"] = 0] = "initialized";
6143    FormSubmissionState2[FormSubmissionState2["requesting"] = 1] = "requesting";
6144    FormSubmissionState2[FormSubmissionState2["waiting"] = 2] = "waiting";
6145    FormSubmissionState2[FormSubmissionState2["receiving"] = 3] = "receiving";
6146    FormSubmissionState2[FormSubmissionState2["stopping"] = 4] = "stopping";
6147    FormSubmissionState2[FormSubmissionState2["stopped"] = 5] = "stopped";
6148  })(FormSubmissionState || (FormSubmissionState = {}));
6149  var FormEnctype;
6150  (function(FormEnctype2) {
6151    FormEnctype2["urlEncoded"] = "application/x-www-form-urlencoded";
6152    FormEnctype2["multipart"] = "multipart/form-data";
6153    FormEnctype2["plain"] = "text/plain";
6154  })(FormEnctype || (FormEnctype = {}));
6155  function formEnctypeFromString(encoding) {
6156    switch (encoding.toLowerCase()) {
6157      case FormEnctype.multipart:
6158        return FormEnctype.multipart;
6159      case FormEnctype.plain:
6160        return FormEnctype.plain;
6161      default:
6162        return FormEnctype.urlEncoded;
6163    }
6164  }
6165  var FormSubmission = class {
6166    static confirmMethod(message, _element, _submitter) {
6167      return Promise.resolve(confirm(message));
6168    }
6169    constructor(delegate2, formElement, submitter, mustRedirect = false) {
6170      this.state = FormSubmissionState.initialized;
6171      this.delegate = delegate2;
6172      this.formElement = formElement;
6173      this.submitter = submitter;
6174      this.formData = buildFormData(formElement, submitter);
6175      this.location = expandURL(this.action);
6176      if (this.method == FetchMethod.get) {
6177        mergeFormDataEntries(this.location, [...this.body.entries()]);
6178      }
6179      this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);
6180      this.mustRedirect = mustRedirect;
6181    }
6182    get method() {
6183      var _a;
6184      const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("formmethod")) || this.formElement.getAttribute("method") || "";
6185      return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;
6186    }
6187    get action() {
6188      var _a;
6189      const formElementAction = typeof this.formElement.action === "string" ? this.formElement.action : null;
6190      if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute("formaction")) {
6191        return this.submitter.getAttribute("formaction") || "";
6192      } else {
6193        return this.formElement.getAttribute("action") || formElementAction || "";
6194      }
6195    }
6196    get body() {
6197      if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {
6198        return new URLSearchParams(this.stringFormData);
6199      } else {
6200        return this.formData;
6201      }
6202    }
6203    get enctype() {
6204      var _a;
6205      return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("formenctype")) || this.formElement.enctype);
6206    }
6207    get isSafe() {
6208      return this.fetchRequest.isSafe;
6209    }
6210    get stringFormData() {
6211      return [...this.formData].reduce((entries, [name, value]) => {
6212        return entries.concat(typeof value == "string" ? [[name, value]] : []);
6213      }, []);
6214    }
6215    async start() {
6216      const { initialized, requesting } = FormSubmissionState;
6217      const confirmationMessage = getAttribute("data-turbo-confirm", this.submitter, this.formElement);
6218      if (typeof confirmationMessage === "string") {
6219        const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);
6220        if (!answer) {
6221          return;
6222        }
6223      }
6224      if (this.state == initialized) {
6225        this.state = requesting;
6226        return this.fetchRequest.perform();
6227      }
6228    }
6229    stop() {
6230      const { stopping, stopped } = FormSubmissionState;
6231      if (this.state != stopping && this.state != stopped) {
6232        this.state = stopping;
6233        this.fetchRequest.cancel();
6234        return true;
6235      }
6236    }
6237    prepareRequest(request) {
6238      if (!request.isSafe) {
6239        const token = getCookieValue(getMetaContent("csrf-param")) || getMetaContent("csrf-token");
6240        if (token) {
6241          request.headers["X-CSRF-Token"] = token;
6242        }
6243      }
6244      if (this.requestAcceptsTurboStreamResponse(request)) {
6245        request.acceptResponseType(StreamMessage.contentType);
6246      }
6247    }
6248    requestStarted(_request) {
6249      var _a;
6250      this.state = FormSubmissionState.waiting;
6251      (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute("disabled", "");
6252      this.setSubmitsWith();
6253      dispatch("turbo:submit-start", {
6254        target: this.formElement,
6255        detail: { formSubmission: this }
6256      });
6257      this.delegate.formSubmissionStarted(this);
6258    }
6259    requestPreventedHandlingResponse(request, response) {
6260      this.result = { success: response.succeeded, fetchResponse: response };
6261    }
6262    requestSucceededWithResponse(request, response) {
6263      if (response.clientError || response.serverError) {
6264        this.delegate.formSubmissionFailedWithResponse(this, response);
6265      } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {
6266        const error2 = new Error("Form responses must redirect to another location");
6267        this.delegate.formSubmissionErrored(this, error2);
6268      } else {
6269        this.state = FormSubmissionState.receiving;
6270        this.result = { success: true, fetchResponse: response };
6271        this.delegate.formSubmissionSucceededWithResponse(this, response);
6272      }
6273    }
6274    requestFailedWithResponse(request, response) {
6275      this.result = { success: false, fetchResponse: response };
6276      this.delegate.formSubmissionFailedWithResponse(this, response);
6277    }
6278    requestErrored(request, error2) {
6279      this.result = { success: false, error: error2 };
6280      this.delegate.formSubmissionErrored(this, error2);
6281    }
6282    requestFinished(_request) {
6283      var _a;
6284      this.state = FormSubmissionState.stopped;
6285      (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute("disabled");
6286      this.resetSubmitterText();
6287      dispatch("turbo:submit-end", {
6288        target: this.formElement,
6289        detail: Object.assign({ formSubmission: this }, this.result)
6290      });
6291      this.delegate.formSubmissionFinished(this);
6292    }
6293    setSubmitsWith() {
6294      if (!this.submitter || !this.submitsWith)
6295        return;
6296      if (this.submitter.matches("button")) {
6297        this.originalSubmitText = this.submitter.innerHTML;
6298        this.submitter.innerHTML = this.submitsWith;
6299      } else if (this.submitter.matches("input")) {
6300        const input = this.submitter;
6301        this.originalSubmitText = input.value;
6302        input.value = this.submitsWith;
6303      }
6304    }
6305    resetSubmitterText() {
6306      if (!this.submitter || !this.originalSubmitText)
6307        return;
6308      if (this.submitter.matches("button")) {
6309        this.submitter.innerHTML = this.originalSubmitText;
6310      } else if (this.submitter.matches("input")) {
6311        const input = this.submitter;
6312        input.value = this.originalSubmitText;
6313      }
6314    }
6315    requestMustRedirect(request) {
6316      return !request.isSafe && this.mustRedirect;
6317    }
6318    requestAcceptsTurboStreamResponse(request) {
6319      return !request.isSafe || hasAttribute("data-turbo-stream", this.submitter, this.formElement);
6320    }
6321    get submitsWith() {
6322      var _a;
6323      return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("data-turbo-submits-with");
6324    }
6325  };
6326  function buildFormData(formElement, submitter) {
6327    const formData = new FormData(formElement);
6328    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("name");
6329    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("value");
6330    if (name) {
6331      formData.append(name, value || "");
6332    }
6333    return formData;
6334  }
6335  function getCookieValue(cookieName) {
6336    if (cookieName != null) {
6337      const cookies = document.cookie ? document.cookie.split("; ") : [];
6338      const cookie = cookies.find((cookie2) => cookie2.startsWith(cookieName));
6339      if (cookie) {
6340        const value = cookie.split("=").slice(1).join("=");
6341        return value ? decodeURIComponent(value) : void 0;
6342      }
6343    }
6344  }
6345  function responseSucceededWithoutRedirect(response) {
6346    return response.statusCode == 200 && !response.redirected;
6347  }
6348  function mergeFormDataEntries(url, entries) {
6349    const searchParams = new URLSearchParams();
6350    for (const [name, value] of entries) {
6351      if (value instanceof File)
6352        continue;
6353      searchParams.append(name, value);
6354    }
6355    url.search = searchParams.toString();
6356    return url;
6357  }
6358  var Snapshot = class {
6359    constructor(element) {
6360      this.element = element;
6361    }
6362    get activeElement() {
6363      return this.element.ownerDocument.activeElement;
6364    }
6365    get children() {
6366      return [...this.element.children];
6367    }
6368    hasAnchor(anchor) {
6369      return this.getElementForAnchor(anchor) != null;
6370    }
6371    getElementForAnchor(anchor) {
6372      return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;
6373    }
6374    get isConnected() {
6375      return this.element.isConnected;
6376    }
6377    get firstAutofocusableElement() {
6378      const inertDisabledOrHidden = "[inert], :disabled, [hidden], details:not([open]), dialog:not([open])";
6379      for (const element of this.element.querySelectorAll("[autofocus]")) {
6380        if (element.closest(inertDisabledOrHidden) == null)
6381          return element;
6382        else
6383          continue;
6384      }
6385      return null;
6386    }
6387    get permanentElements() {
6388      return queryPermanentElementsAll(this.element);
6389    }
6390    getPermanentElementById(id2) {
6391      return getPermanentElementById(this.element, id2);
6392    }
6393    getPermanentElementMapForSnapshot(snapshot) {
6394      const permanentElementMap = {};
6395      for (const currentPermanentElement of this.permanentElements) {
6396        const { id: id2 } = currentPermanentElement;
6397        const newPermanentElement = snapshot.getPermanentElementById(id2);
6398        if (newPermanentElement) {
6399          permanentElementMap[id2] = [currentPermanentElement, newPermanentElement];
6400        }
6401      }
6402      return permanentElementMap;
6403    }
6404  };
6405  function getPermanentElementById(node, id2) {
6406    return node.querySelector(`#${id2}[data-turbo-permanent]`);
6407  }
6408  function queryPermanentElementsAll(node) {
6409    return node.querySelectorAll("[id][data-turbo-permanent]");
6410  }
6411  var FormSubmitObserver = class {
6412    constructor(delegate2, eventTarget) {
6413      this.started = false;
6414      this.submitCaptured = () => {
6415        this.eventTarget.removeEventListener("submit", this.submitBubbled, false);
6416        this.eventTarget.addEventListener("submit", this.submitBubbled, false);
6417      };
6418      this.submitBubbled = (event2) => {
6419        if (!event2.defaultPrevented) {
6420          const form = event2.target instanceof HTMLFormElement ? event2.target : void 0;
6421          const submitter = event2.submitter || void 0;
6422          if (form && submissionDoesNotDismissDialog(form, submitter) && submissionDoesNotTargetIFrame(form, submitter) && this.delegate.willSubmitForm(form, submitter)) {
6423            event2.preventDefault();
6424            event2.stopImmediatePropagation();
6425            this.delegate.formSubmitted(form, submitter);
6426          }
6427        }
6428      };
6429      this.delegate = delegate2;
6430      this.eventTarget = eventTarget;
6431    }
6432    start() {
6433      if (!this.started) {
6434        this.eventTarget.addEventListener("submit", this.submitCaptured, true);
6435        this.started = true;
6436      }
6437    }
6438    stop() {
6439      if (this.started) {
6440        this.eventTarget.removeEventListener("submit", this.submitCaptured, true);
6441        this.started = false;
6442      }
6443    }
6444  };
6445  function submissionDoesNotDismissDialog(form, submitter) {
6446    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formmethod")) || form.getAttribute("method");
6447    return method != "dialog";
6448  }
6449  function submissionDoesNotTargetIFrame(form, submitter) {
6450    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute("formtarget")) || form.hasAttribute("target")) {
6451      const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formtarget")) || form.target;
6452      for (const element of document.getElementsByName(target)) {
6453        if (element instanceof HTMLIFrameElement)
6454          return false;
6455      }
6456      return true;
6457    } else {
6458      return true;
6459    }
6460  }
6461  var View = class {
6462    constructor(delegate2, element) {
6463      this.resolveRenderPromise = (_value) => {
6464      };
6465      this.resolveInterceptionPromise = (_value) => {
6466      };
6467      this.delegate = delegate2;
6468      this.element = element;
6469    }
6470    scrollToAnchor(anchor) {
6471      const element = this.snapshot.getElementForAnchor(anchor);
6472      if (element) {
6473        this.scrollToElement(element);
6474        this.focusElement(element);
6475      } else {
6476        this.scrollToPosition({ x: 0, y: 0 });
6477      }
6478    }
6479    scrollToAnchorFromLocation(location2) {
6480      this.scrollToAnchor(getAnchor(location2));
6481    }
6482    scrollToElement(element) {
6483      element.scrollIntoView();
6484    }
6485    focusElement(element) {
6486      if (element instanceof HTMLElement) {
6487        if (element.hasAttribute("tabindex")) {
6488          element.focus();
6489        } else {
6490          element.setAttribute("tabindex", "-1");
6491          element.focus();
6492          element.removeAttribute("tabindex");
6493        }
6494      }
6495    }
6496    scrollToPosition({ x: x5, y: y4 }) {
6497      this.scrollRoot.scrollTo(x5, y4);
6498    }
6499    scrollToTop() {
6500      this.scrollToPosition({ x: 0, y: 0 });
6501    }
6502    get scrollRoot() {
6503      return window;
6504    }
6505    async render(renderer) {
6506      const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;
6507      if (shouldRender) {
6508        try {
6509          this.renderPromise = new Promise((resolve) => this.resolveRenderPromise = resolve);
6510          this.renderer = renderer;
6511          await this.prepareToRenderSnapshot(renderer);
6512          const renderInterception = new Promise((resolve) => this.resolveInterceptionPromise = resolve);
6513          const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };
6514          const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);
6515          if (!immediateRender)
6516            await renderInterception;
6517          await this.renderSnapshot(renderer);
6518          this.delegate.viewRenderedSnapshot(snapshot, isPreview);
6519          this.delegate.preloadOnLoadLinksForView(this.element);
6520          this.finishRenderingSnapshot(renderer);
6521        } finally {
6522          delete this.renderer;
6523          this.resolveRenderPromise(void 0);
6524          delete this.renderPromise;
6525        }
6526      } else {
6527        this.invalidate(renderer.reloadReason);
6528      }
6529    }
6530    invalidate(reason) {
6531      this.delegate.viewInvalidated(reason);
6532    }
6533    async prepareToRenderSnapshot(renderer) {
6534      this.markAsPreview(renderer.isPreview);
6535      await renderer.prepareToRender();
6536    }
6537    markAsPreview(isPreview) {
6538      if (isPreview) {
6539        this.element.setAttribute("data-turbo-preview", "");
6540      } else {
6541        this.element.removeAttribute("data-turbo-preview");
6542      }
6543    }
6544    async renderSnapshot(renderer) {
6545      await renderer.render();
6546    }
6547    finishRenderingSnapshot(renderer) {
6548      renderer.finishRendering();
6549    }
6550  };
6551  var FrameView = class extends View {
6552    missing() {
6553      this.element.innerHTML = `<strong class="turbo-frame-error">Content missing</strong>`;
6554    }
6555    get snapshot() {
6556      return new Snapshot(this.element);
6557    }
6558  };
6559  var LinkInterceptor = class {
6560    constructor(delegate2, element) {
6561      this.clickBubbled = (event2) => {
6562        if (this.respondsToEventTarget(event2.target)) {
6563          this.clickEvent = event2;
6564        } else {
6565          delete this.clickEvent;
6566        }
6567      };
6568      this.linkClicked = (event2) => {
6569        if (this.clickEvent && this.respondsToEventTarget(event2.target) && event2.target instanceof Element) {
6570          if (this.delegate.shouldInterceptLinkClick(event2.target, event2.detail.url, event2.detail.originalEvent)) {
6571            this.clickEvent.preventDefault();
6572            event2.preventDefault();
6573            this.delegate.linkClickIntercepted(event2.target, event2.detail.url, event2.detail.originalEvent);
6574          }
6575        }
6576        delete this.clickEvent;
6577      };
6578      this.willVisit = (_event) => {
6579        delete this.clickEvent;
6580      };
6581      this.delegate = delegate2;
6582      this.element = element;
6583    }
6584    start() {
6585      this.element.addEventListener("click", this.clickBubbled);
6586      document.addEventListener("turbo:click", this.linkClicked);
6587      document.addEventListener("turbo:before-visit", this.willVisit);
6588    }
6589    stop() {
6590      this.element.removeEventListener("click", this.clickBubbled);
6591      document.removeEventListener("turbo:click", this.linkClicked);
6592      document.removeEventListener("turbo:before-visit", this.willVisit);
6593    }
6594    respondsToEventTarget(target) {
6595      const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;
6596      return element && element.closest("turbo-frame, html") == this.element;
6597    }
6598  };
6599  var LinkClickObserver = class {
6600    constructor(delegate2, eventTarget) {
6601      this.started = false;
6602      this.clickCaptured = () => {
6603        this.eventTarget.removeEventListener("click", this.clickBubbled, false);
6604        this.eventTarget.addEventListener("click", this.clickBubbled, false);
6605      };
6606      this.clickBubbled = (event2) => {
6607        if (event2 instanceof MouseEvent && this.clickEventIsSignificant(event2)) {
6608          const target = event2.composedPath && event2.composedPath()[0] || event2.target;
6609          const link = this.findLinkFromClickTarget(target);
6610          if (link && doesNotTargetIFrame(link)) {
6611            const location2 = this.getLocationForLink(link);
6612            if (this.delegate.willFollowLinkToLocation(link, location2, event2)) {
6613              event2.preventDefault();
6614              this.delegate.followedLinkToLocation(link, location2);
6615            }
6616          }
6617        }
6618      };
6619      this.delegate = delegate2;
6620      this.eventTarget = eventTarget;
6621    }
6622    start() {
6623      if (!this.started) {
6624        this.eventTarget.addEventListener("click", this.clickCaptured, true);
6625        this.started = true;
6626      }
6627    }
6628    stop() {
6629      if (this.started) {
6630        this.eventTarget.removeEventListener("click", this.clickCaptured, true);
6631        this.started = false;
6632      }
6633    }
6634    clickEventIsSignificant(event2) {
6635      return !(event2.target && event2.target.isContentEditable || event2.defaultPrevented || event2.which > 1 || event2.altKey || event2.ctrlKey || event2.metaKey || event2.shiftKey);
6636    }
6637    findLinkFromClickTarget(target) {
6638      return findClosestRecursively(target, "a[href]:not([target^=_]):not([download])");
6639    }
6640    getLocationForLink(link) {
6641      return expandURL(link.getAttribute("href") || "");
6642    }
6643  };
6644  function doesNotTargetIFrame(anchor) {
6645    if (anchor.hasAttribute("target")) {
6646      for (const element of document.getElementsByName(anchor.target)) {
6647        if (element instanceof HTMLIFrameElement)
6648          return false;
6649      }
6650      return true;
6651    } else {
6652      return true;
6653    }
6654  }
6655  var FormLinkClickObserver = class {
6656    constructor(delegate2, element) {
6657      this.delegate = delegate2;
6658      this.linkInterceptor = new LinkClickObserver(this, element);
6659    }
6660    start() {
6661      this.linkInterceptor.start();
6662    }
6663    stop() {
6664      this.linkInterceptor.stop();
6665    }
6666    willFollowLinkToLocation(link, location2, originalEvent) {
6667      return this.delegate.willSubmitFormLinkToLocation(link, location2, originalEvent) && link.hasAttribute("data-turbo-method");
6668    }
6669    followedLinkToLocation(link, location2) {
6670      const form = document.createElement("form");
6671      const type = "hidden";
6672      for (const [name, value] of location2.searchParams) {
6673        form.append(Object.assign(document.createElement("input"), { type, name, value }));
6674      }
6675      const action = Object.assign(location2, { search: "" });
6676      form.setAttribute("data-turbo", "true");
6677      form.setAttribute("action", action.href);
6678      form.setAttribute("hidden", "");
6679      const method = link.getAttribute("data-turbo-method");
6680      if (method)
6681        form.setAttribute("method", method);
6682      const turboFrame = link.getAttribute("data-turbo-frame");
6683      if (turboFrame)
6684        form.setAttribute("data-turbo-frame", turboFrame);
6685      const turboAction = getVisitAction(link);
6686      if (turboAction)
6687        form.setAttribute("data-turbo-action", turboAction);
6688      const turboConfirm = link.getAttribute("data-turbo-confirm");
6689      if (turboConfirm)
6690        form.setAttribute("data-turbo-confirm", turboConfirm);
6691      const turboStream = link.hasAttribute("data-turbo-stream");
6692      if (turboStream)
6693        form.setAttribute("data-turbo-stream", "");
6694      this.delegate.submittedFormLinkToLocation(link, location2, form);
6695      document.body.appendChild(form);
6696      form.addEventListener("turbo:submit-end", () => form.remove(), { once: true });
6697      requestAnimationFrame(() => form.requestSubmit());
6698    }
6699  };
6700  var Bardo = class {
6701    static async preservingPermanentElements(delegate2, permanentElementMap, callback) {
6702      const bardo = new this(delegate2, permanentElementMap);
6703      bardo.enter();
6704      await callback();
6705      bardo.leave();
6706    }
6707    constructor(delegate2, permanentElementMap) {
6708      this.delegate = delegate2;
6709      this.permanentElementMap = permanentElementMap;
6710    }
6711    enter() {
6712      for (const id2 in this.permanentElementMap) {
6713        const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id2];
6714        this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);
6715        this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);
6716      }
6717    }
6718    leave() {
6719      for (const id2 in this.permanentElementMap) {
6720        const [currentPermanentElement] = this.permanentElementMap[id2];
6721        this.replaceCurrentPermanentElementWithClone(currentPermanentElement);
6722        this.replacePlaceholderWithPermanentElement(currentPermanentElement);
6723        this.delegate.leavingBardo(currentPermanentElement);
6724      }
6725    }
6726    replaceNewPermanentElementWithPlaceholder(permanentElement) {
6727      const placeholder = createPlaceholderForPermanentElement(permanentElement);
6728      permanentElement.replaceWith(placeholder);
6729    }
6730    replaceCurrentPermanentElementWithClone(permanentElement) {
6731      const clone = permanentElement.cloneNode(true);
6732      permanentElement.replaceWith(clone);
6733    }
6734    replacePlaceholderWithPermanentElement(permanentElement) {
6735      const placeholder = this.getPlaceholderById(permanentElement.id);
6736      placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);
6737    }
6738    getPlaceholderById(id2) {
6739      return this.placeholders.find((element) => element.content == id2);
6740    }
6741    get placeholders() {
6742      return [...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")];
6743    }
6744  };
6745  function createPlaceholderForPermanentElement(permanentElement) {
6746    const element = document.createElement("meta");
6747    element.setAttribute("name", "turbo-permanent-placeholder");
6748    element.setAttribute("content", permanentElement.id);
6749    return element;
6750  }
6751  var Renderer = class {
6752    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
6753      this.activeElement = null;
6754      this.currentSnapshot = currentSnapshot;
6755      this.newSnapshot = newSnapshot;
6756      this.isPreview = isPreview;
6757      this.willRender = willRender;
6758      this.renderElement = renderElement;
6759      this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });
6760    }
6761    get shouldRender() {
6762      return true;
6763    }
6764    get reloadReason() {
6765      return;
6766    }
6767    prepareToRender() {
6768      return;
6769    }
6770    finishRendering() {
6771      if (this.resolvingFunctions) {
6772        this.resolvingFunctions.resolve();
6773        delete this.resolvingFunctions;
6774      }
6775    }
6776    async preservingPermanentElements(callback) {
6777      await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);
6778    }
6779    focusFirstAutofocusableElement() {
6780      const element = this.connectedSnapshot.firstAutofocusableElement;
6781      if (elementIsFocusable(element)) {
6782        element.focus();
6783      }
6784    }
6785    enteringBardo(currentPermanentElement) {
6786      if (this.activeElement)
6787        return;
6788      if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {
6789        this.activeElement = this.currentSnapshot.activeElement;
6790      }
6791    }
6792    leavingBardo(currentPermanentElement) {
6793      if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {
6794        this.activeElement.focus();
6795        this.activeElement = null;
6796      }
6797    }
6798    get connectedSnapshot() {
6799      return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;
6800    }
6801    get currentElement() {
6802      return this.currentSnapshot.element;
6803    }
6804    get newElement() {
6805      return this.newSnapshot.element;
6806    }
6807    get permanentElementMap() {
6808      return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);
6809    }
6810  };
6811  function elementIsFocusable(element) {
6812    return element && typeof element.focus == "function";
6813  }
6814  var FrameRenderer = class extends Renderer {
6815    static renderElement(currentElement, newElement) {
6816      var _a;
6817      const destinationRange = document.createRange();
6818      destinationRange.selectNodeContents(currentElement);
6819      destinationRange.deleteContents();
6820      const frameElement = newElement;
6821      const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();
6822      if (sourceRange) {
6823        sourceRange.selectNodeContents(frameElement);
6824        currentElement.appendChild(sourceRange.extractContents());
6825      }
6826    }
6827    constructor(delegate2, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
6828      super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);
6829      this.delegate = delegate2;
6830    }
6831    get shouldRender() {
6832      return true;
6833    }
6834    async render() {
6835      await nextAnimationFrame();
6836      this.preservingPermanentElements(() => {
6837        this.loadFrameElement();
6838      });
6839      this.scrollFrameIntoView();
6840      await nextAnimationFrame();
6841      this.focusFirstAutofocusableElement();
6842      await nextAnimationFrame();
6843      this.activateScriptElements();
6844    }
6845    loadFrameElement() {
6846      this.delegate.willRenderFrame(this.currentElement, this.newElement);
6847      this.renderElement(this.currentElement, this.newElement);
6848    }
6849    scrollFrameIntoView() {
6850      if (this.currentElement.autoscroll || this.newElement.autoscroll) {
6851        const element = this.currentElement.firstElementChild;
6852        const block = readScrollLogicalPosition(this.currentElement.getAttribute("data-autoscroll-block"), "end");
6853        const behavior = readScrollBehavior(this.currentElement.getAttribute("data-autoscroll-behavior"), "auto");
6854        if (element) {
6855          element.scrollIntoView({ block, behavior });
6856          return true;
6857        }
6858      }
6859      return false;
6860    }
6861    activateScriptElements() {
6862      for (const inertScriptElement of this.newScriptElements) {
6863        const activatedScriptElement = activateScriptElement(inertScriptElement);
6864        inertScriptElement.replaceWith(activatedScriptElement);
6865      }
6866    }
6867    get newScriptElements() {
6868      return this.currentElement.querySelectorAll("script");
6869    }
6870  };
6871  function readScrollLogicalPosition(value, defaultValue) {
6872    if (value == "end" || value == "start" || value == "center" || value == "nearest") {
6873      return value;
6874    } else {
6875      return defaultValue;
6876    }
6877  }
6878  function readScrollBehavior(value, defaultValue) {
6879    if (value == "auto" || value == "smooth") {
6880      return value;
6881    } else {
6882      return defaultValue;
6883    }
6884  }
6885  var ProgressBar = class {
6886    static get defaultCSS() {
6887      return unindent`
6888      .turbo-progress-bar {
6889        position: fixed;
6890        display: block;
6891        top: 0;
6892        left: 0;
6893        height: 3px;
6894        background: #0076ff;
6895        z-index: 2147483647;
6896        transition:
6897          width ${ProgressBar.animationDuration}ms ease-out,
6898          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;
6899        transform: translate3d(0, 0, 0);
6900      }
6901    `;
6902    }
6903    constructor() {
6904      this.hiding = false;
6905      this.value = 0;
6906      this.visible = false;
6907      this.trickle = () => {
6908        this.setValue(this.value + Math.random() / 100);
6909      };
6910      this.stylesheetElement = this.createStylesheetElement();
6911      this.progressElement = this.createProgressElement();
6912      this.installStylesheetElement();
6913      this.setValue(0);
6914    }
6915    show() {
6916      if (!this.visible) {
6917        this.visible = true;
6918        this.installProgressElement();
6919        this.startTrickling();
6920      }
6921    }
6922    hide() {
6923      if (this.visible && !this.hiding) {
6924        this.hiding = true;
6925        this.fadeProgressElement(() => {
6926          this.uninstallProgressElement();
6927          this.stopTrickling();
6928          this.visible = false;
6929          this.hiding = false;
6930        });
6931      }
6932    }
6933    setValue(value) {
6934      this.value = value;
6935      this.refresh();
6936    }
6937    installStylesheetElement() {
6938      document.head.insertBefore(this.stylesheetElement, document.head.firstChild);
6939    }
6940    installProgressElement() {
6941      this.progressElement.style.width = "0";
6942      this.progressElement.style.opacity = "1";
6943      document.documentElement.insertBefore(this.progressElement, document.body);
6944      this.refresh();
6945    }
6946    fadeProgressElement(callback) {
6947      this.progressElement.style.opacity = "0";
6948      setTimeout(callback, ProgressBar.animationDuration * 1.5);
6949    }
6950    uninstallProgressElement() {
6951      if (this.progressElement.parentNode) {
6952        document.documentElement.removeChild(this.progressElement);
6953      }
6954    }
6955    startTrickling() {
6956      if (!this.trickleInterval) {
6957        this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);
6958      }
6959    }
6960    stopTrickling() {
6961      window.clearInterval(this.trickleInterval);
6962      delete this.trickleInterval;
6963    }
6964    refresh() {
6965      requestAnimationFrame(() => {
6966        this.progressElement.style.width = `${10 + this.value * 90}%`;
6967      });
6968    }
6969    createStylesheetElement() {
6970      const element = document.createElement("style");
6971      element.type = "text/css";
6972      element.textContent = ProgressBar.defaultCSS;
6973      if (this.cspNonce) {
6974        element.nonce = this.cspNonce;
6975      }
6976      return element;
6977    }
6978    createProgressElement() {
6979      const element = document.createElement("div");
6980      element.className = "turbo-progress-bar";
6981      return element;
6982    }
6983    get cspNonce() {
6984      return getMetaContent("csp-nonce");
6985    }
6986  };
6987  ProgressBar.animationDuration = 300;
6988  var HeadSnapshot = class extends Snapshot {
6989    constructor() {
6990      super(...arguments);
6991      this.detailsByOuterHTML = this.children.filter((element) => !elementIsNoscript(element)).map((element) => elementWithoutNonce(element)).reduce((result, element) => {
6992        const { outerHTML } = element;
6993        const details = outerHTML in result ? result[outerHTML] : {
6994          type: elementType(element),
6995          tracked: elementIsTracked(element),
6996          elements: []
6997        };
6998        return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });
6999      }, {});
7000    }
7001    get trackedElementSignature() {
7002      return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked).join("");
7003    }
7004    getScriptElementsNotInSnapshot(snapshot) {
7005      return this.getElementsMatchingTypeNotInSnapshot("script", snapshot);
7006    }
7007    getStylesheetElementsNotInSnapshot(snapshot) {
7008      return this.getElementsMatchingTypeNotInSnapshot("stylesheet", snapshot);
7009    }
7010    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {
7011      return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML)).map((outerHTML) => this.detailsByOuterHTML[outerHTML]).filter(({ type }) => type == matchedType).map(({ elements: [element] }) => element);
7012    }
7013    get provisionalElements() {
7014      return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
7015        const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];
7016        if (type == null && !tracked) {
7017          return [...result, ...elements];
7018        } else if (elements.length > 1) {
7019          return [...result, ...elements.slice(1)];
7020        } else {
7021          return result;
7022        }
7023      }, []);
7024    }
7025    getMetaValue(name) {
7026      const element = this.findMetaElementByName(name);
7027      return element ? element.getAttribute("content") : null;
7028    }
7029    findMetaElementByName(name) {
7030      return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
7031        const { elements: [element] } = this.detailsByOuterHTML[outerHTML];
7032        return elementIsMetaElementWithName(element, name) ? element : result;
7033      }, void 0);
7034    }
7035  };
7036  function elementType(element) {
7037    if (elementIsScript(element)) {
7038      return "script";
7039    } else if (elementIsStylesheet(element)) {
7040      return "stylesheet";
7041    }
7042  }
7043  function elementIsTracked(element) {
7044    return element.getAttribute("data-turbo-track") == "reload";
7045  }
7046  function elementIsScript(element) {
7047    const tagName = element.localName;
7048    return tagName == "script";
7049  }
7050  function elementIsNoscript(element) {
7051    const tagName = element.localName;
7052    return tagName == "noscript";
7053  }
7054  function elementIsStylesheet(element) {
7055    const tagName = element.localName;
7056    return tagName == "style" || tagName == "link" && element.getAttribute("rel") == "stylesheet";
7057  }
7058  function elementIsMetaElementWithName(element, name) {
7059    const tagName = element.localName;
7060    return tagName == "meta" && element.getAttribute("name") == name;
7061  }
7062  function elementWithoutNonce(element) {
7063    if (element.hasAttribute("nonce")) {
7064      element.setAttribute("nonce", "");
7065    }
7066    return element;
7067  }
7068  var PageSnapshot = class extends Snapshot {
7069    static fromHTMLString(html = "") {
7070      return this.fromDocument(parseHTMLDocument(html));
7071    }
7072    static fromElement(element) {
7073      return this.fromDocument(element.ownerDocument);
7074    }
7075    static fromDocument({ head, body }) {
7076      return new this(body, new HeadSnapshot(head));
7077    }
7078    constructor(element, headSnapshot) {
7079      super(element);
7080      this.headSnapshot = headSnapshot;
7081    }
7082    clone() {
7083      const clonedElement = this.element.cloneNode(true);
7084      const selectElements = this.element.querySelectorAll("select");
7085      const clonedSelectElements = clonedElement.querySelectorAll("select");
7086      for (const [index4, source] of selectElements.entries()) {
7087        const clone = clonedSelectElements[index4];
7088        for (const option of clone.selectedOptions)
7089          option.selected = false;
7090        for (const option of source.selectedOptions)
7091          clone.options[option.index].selected = true;
7092      }
7093      for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type="password"]')) {
7094        clonedPasswordInput.value = "";
7095      }
7096      return new PageSnapshot(clonedElement, this.headSnapshot);
7097    }
7098    get headElement() {
7099      return this.headSnapshot.element;
7100    }
7101    get rootLocation() {
7102      var _a;
7103      const root = (_a = this.getSetting("root")) !== null && _a !== void 0 ? _a : "/";
7104      return expandURL(root);
7105    }
7106    get cacheControlValue() {
7107      return this.getSetting("cache-control");
7108    }
7109    get isPreviewable() {
7110      return this.cacheControlValue != "no-preview";
7111    }
7112    get isCacheable() {
7113      return this.cacheControlValue != "no-cache";
7114    }
7115    get isVisitable() {
7116      return this.getSetting("visit-control") != "reload";
7117    }
7118    getSetting(name) {
7119      return this.headSnapshot.getMetaValue(`turbo-${name}`);
7120    }
7121  };
7122  var TimingMetric;
7123  (function(TimingMetric2) {
7124    TimingMetric2["visitStart"] = "visitStart";
7125    TimingMetric2["requestStart"] = "requestStart";
7126    TimingMetric2["requestEnd"] = "requestEnd";
7127    TimingMetric2["visitEnd"] = "visitEnd";
7128  })(TimingMetric || (TimingMetric = {}));
7129  var VisitState;
7130  (function(VisitState2) {
7131    VisitState2["initialized"] = "initialized";
7132    VisitState2["started"] = "started";
7133    VisitState2["canceled"] = "canceled";
7134    VisitState2["failed"] = "failed";
7135    VisitState2["completed"] = "completed";
7136  })(VisitState || (VisitState = {}));
7137  var defaultOptions = {
7138    action: "advance",
7139    historyChanged: false,
7140    visitCachedSnapshot: () => {
7141    },
7142    willRender: true,
7143    updateHistory: true,
7144    shouldCacheSnapshot: true,
7145    acceptsStreamResponse: false
7146  };
7147  var SystemStatusCode;
7148  (function(SystemStatusCode2) {
7149    SystemStatusCode2[SystemStatusCode2["networkFailure"] = 0] = "networkFailure";
7150    SystemStatusCode2[SystemStatusCode2["timeoutFailure"] = -1] = "timeoutFailure";
7151    SystemStatusCode2[SystemStatusCode2["contentTypeMismatch"] = -2] = "contentTypeMismatch";
7152  })(SystemStatusCode || (SystemStatusCode = {}));
7153  var Visit = class {
7154    constructor(delegate2, location2, restorationIdentifier, options = {}) {
7155      this.identifier = uuid();
7156      this.timingMetrics = {};
7157      this.followedRedirect = false;
7158      this.historyChanged = false;
7159      this.scrolled = false;
7160      this.shouldCacheSnapshot = true;
7161      this.acceptsStreamResponse = false;
7162      this.snapshotCached = false;
7163      this.state = VisitState.initialized;
7164      this.delegate = delegate2;
7165      this.location = location2;
7166      this.restorationIdentifier = restorationIdentifier || uuid();
7167      const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse } = Object.assign(Object.assign({}, defaultOptions), options);
7168      this.action = action;
7169      this.historyChanged = historyChanged;
7170      this.referrer = referrer;
7171      this.snapshot = snapshot;
7172      this.snapshotHTML = snapshotHTML;
7173      this.response = response;
7174      this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);
7175      this.visitCachedSnapshot = visitCachedSnapshot;
7176      this.willRender = willRender;
7177      this.updateHistory = updateHistory;
7178      this.scrolled = !willRender;
7179      this.shouldCacheSnapshot = shouldCacheSnapshot;
7180      this.acceptsStreamResponse = acceptsStreamResponse;
7181    }
7182    get adapter() {
7183      return this.delegate.adapter;
7184    }
7185    get view() {
7186      return this.delegate.view;
7187    }
7188    get history() {
7189      return this.delegate.history;
7190    }
7191    get restorationData() {
7192      return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);
7193    }
7194    get silent() {
7195      return this.isSamePage;
7196    }
7197    start() {
7198      if (this.state == VisitState.initialized) {
7199        this.recordTimingMetric(TimingMetric.visitStart);
7200        this.state = VisitState.started;
7201        this.adapter.visitStarted(this);
7202        this.delegate.visitStarted(this);
7203      }
7204    }
7205    cancel() {
7206      if (this.state == VisitState.started) {
7207        if (this.request) {
7208          this.request.cancel();
7209        }
7210        this.cancelRender();
7211        this.state = VisitState.canceled;
7212      }
7213    }
7214    complete() {
7215      if (this.state == VisitState.started) {
7216        this.recordTimingMetric(TimingMetric.visitEnd);
7217        this.state = VisitState.completed;
7218        this.followRedirect();
7219        if (!this.followedRedirect) {
7220          this.adapter.visitCompleted(this);
7221          this.delegate.visitCompleted(this);
7222        }
7223      }
7224    }
7225    fail() {
7226      if (this.state == VisitState.started) {
7227        this.state = VisitState.failed;
7228        this.adapter.visitFailed(this);
7229      }
7230    }
7231    changeHistory() {
7232      var _a;
7233      if (!this.historyChanged && this.updateHistory) {
7234        const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? "replace" : this.action;
7235        const method = getHistoryMethodForAction(actionForHistory);
7236        this.history.update(method, this.location, this.restorationIdentifier);
7237        this.historyChanged = true;
7238      }
7239    }
7240    issueRequest() {
7241      if (this.hasPreloadedResponse()) {
7242        this.simulateRequest();
7243      } else if (this.shouldIssueRequest() && !this.request) {
7244        this.request = new FetchRequest(this, FetchMethod.get, this.location);
7245        this.request.perform();
7246      }
7247    }
7248    simulateRequest() {
7249      if (this.response) {
7250        this.startRequest();
7251        this.recordResponse();
7252        this.finishRequest();
7253      }
7254    }
7255    startRequest() {
7256      this.recordTimingMetric(TimingMetric.requestStart);
7257      this.adapter.visitRequestStarted(this);
7258    }
7259    recordResponse(response = this.response) {
7260      this.response = response;
7261      if (response) {
7262        const { statusCode } = response;
7263        if (isSuccessful(statusCode)) {
7264          this.adapter.visitRequestCompleted(this);
7265        } else {
7266          this.adapter.visitRequestFailedWithStatusCode(this, statusCode);
7267        }
7268      }
7269    }
7270    finishRequest() {
7271      this.recordTimingMetric(TimingMetric.requestEnd);
7272      this.adapter.visitRequestFinished(this);
7273    }
7274    loadResponse() {
7275      if (this.response) {
7276        const { statusCode, responseHTML } = this.response;
7277        this.render(async () => {
7278          if (this.shouldCacheSnapshot)
7279            this.cacheSnapshot();
7280          if (this.view.renderPromise)
7281            await this.view.renderPromise;
7282          if (isSuccessful(statusCode) && responseHTML != null) {
7283            await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);
7284            this.performScroll();
7285            this.adapter.visitRendered(this);
7286            this.complete();
7287          } else {
7288            await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);
7289            this.adapter.visitRendered(this);
7290            this.fail();
7291          }
7292        });
7293      }
7294    }
7295    getCachedSnapshot() {
7296      const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();
7297      if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {
7298        if (this.action == "restore" || snapshot.isPreviewable) {
7299          return snapshot;
7300        }
7301      }
7302    }
7303    getPreloadedSnapshot() {
7304      if (this.snapshotHTML) {
7305        return PageSnapshot.fromHTMLString(this.snapshotHTML);
7306      }
7307    }
7308    hasCachedSnapshot() {
7309      return this.getCachedSnapshot() != null;
7310    }
7311    loadCachedSnapshot() {
7312      const snapshot = this.getCachedSnapshot();
7313      if (snapshot) {
7314        const isPreview = this.shouldIssueRequest();
7315        this.render(async () => {
7316          this.cacheSnapshot();
7317          if (this.isSamePage) {
7318            this.adapter.visitRendered(this);
7319          } else {
7320            if (this.view.renderPromise)
7321              await this.view.renderPromise;
7322            await this.view.renderPage(snapshot, isPreview, this.willRender, this);
7323            this.performScroll();
7324            this.adapter.visitRendered(this);
7325            if (!isPreview) {
7326              this.complete();
7327            }
7328          }
7329        });
7330      }
7331    }
7332    followRedirect() {
7333      var _a;
7334      if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {
7335        this.adapter.visitProposedToLocation(this.redirectedToLocation, {
7336          action: "replace",
7337          response: this.response,
7338          shouldCacheSnapshot: false,
7339          willRender: false
7340        });
7341        this.followedRedirect = true;
7342      }
7343    }
7344    goToSamePageAnchor() {
7345      if (this.isSamePage) {
7346        this.render(async () => {
7347          this.cacheSnapshot();
7348          this.performScroll();
7349          this.changeHistory();
7350          this.adapter.visitRendered(this);
7351        });
7352      }
7353    }
7354    prepareRequest(request) {
7355      if (this.acceptsStreamResponse) {
7356        request.acceptResponseType(StreamMessage.contentType);
7357      }
7358    }
7359    requestStarted() {
7360      this.startRequest();
7361    }
7362    requestPreventedHandlingResponse(_request, _response) {
7363    }
7364    async requestSucceededWithResponse(request, response) {
7365      const responseHTML = await response.responseHTML;
7366      const { redirected, statusCode } = response;
7367      if (responseHTML == void 0) {
7368        this.recordResponse({
7369          statusCode: SystemStatusCode.contentTypeMismatch,
7370          redirected
7371        });
7372      } else {
7373        this.redirectedToLocation = response.redirected ? response.location : void 0;
7374        this.recordResponse({ statusCode, responseHTML, redirected });
7375      }
7376    }
7377    async requestFailedWithResponse(request, response) {
7378      const responseHTML = await response.responseHTML;
7379      const { redirected, statusCode } = response;
7380      if (responseHTML == void 0) {
7381        this.recordResponse({
7382          statusCode: SystemStatusCode.contentTypeMismatch,
7383          redirected
7384        });
7385      } else {
7386        this.recordResponse({ statusCode, responseHTML, redirected });
7387      }
7388    }
7389    requestErrored(_request, _error) {
7390      this.recordResponse({
7391        statusCode: SystemStatusCode.networkFailure,
7392        redirected: false
7393      });
7394    }
7395    requestFinished() {
7396      this.finishRequest();
7397    }
7398    performScroll() {
7399      if (!this.scrolled && !this.view.forceReloaded) {
7400        if (this.action == "restore") {
7401          this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();
7402        } else {
7403          this.scrollToAnchor() || this.view.scrollToTop();
7404        }
7405        if (this.isSamePage) {
7406          this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);
7407        }
7408        this.scrolled = true;
7409      }
7410    }
7411    scrollToRestoredPosition() {
7412      const { scrollPosition } = this.restorationData;
7413      if (scrollPosition) {
7414        this.view.scrollToPosition(scrollPosition);
7415        return true;
7416      }
7417    }
7418    scrollToAnchor() {
7419      const anchor = getAnchor(this.location);
7420      if (anchor != null) {
7421        this.view.scrollToAnchor(anchor);
7422        return true;
7423      }
7424    }
7425    recordTimingMetric(metric) {
7426      this.timingMetrics[metric] = new Date().getTime();
7427    }
7428    getTimingMetrics() {
7429      return Object.assign({}, this.timingMetrics);
7430    }
7431    getHistoryMethodForAction(action) {
7432      switch (action) {
7433        case "replace":
7434          return history.replaceState;
7435        case "advance":
7436        case "restore":
7437          return history.pushState;
7438      }
7439    }
7440    hasPreloadedResponse() {
7441      return typeof this.response == "object";
7442    }
7443    shouldIssueRequest() {
7444      if (this.isSamePage) {
7445        return false;
7446      } else if (this.action == "restore") {
7447        return !this.hasCachedSnapshot();
7448      } else {
7449        return this.willRender;
7450      }
7451    }
7452    cacheSnapshot() {
7453      if (!this.snapshotCached) {
7454        this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));
7455        this.snapshotCached = true;
7456      }
7457    }
7458    async render(callback) {
7459      this.cancelRender();
7460      await new Promise((resolve) => {
7461        this.frame = requestAnimationFrame(() => resolve());
7462      });
7463      await callback();
7464      delete this.frame;
7465    }
7466    cancelRender() {
7467      if (this.frame) {
7468        cancelAnimationFrame(this.frame);
7469        delete this.frame;
7470      }
7471    }
7472  };
7473  function isSuccessful(statusCode) {
7474    return statusCode >= 200 && statusCode < 300;
7475  }
7476  var BrowserAdapter = class {
7477    constructor(session2) {
7478      this.progressBar = new ProgressBar();
7479      this.showProgressBar = () => {
7480        this.progressBar.show();
7481      };
7482      this.session = session2;
7483    }
7484    visitProposedToLocation(location2, options) {
7485      this.navigator.startVisit(location2, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);
7486    }
7487    visitStarted(visit2) {
7488      this.location = visit2.location;
7489      visit2.loadCachedSnapshot();
7490      visit2.issueRequest();
7491      visit2.goToSamePageAnchor();
7492    }
7493    visitRequestStarted(visit2) {
7494      this.progressBar.setValue(0);
7495      if (visit2.hasCachedSnapshot() || visit2.action != "restore") {
7496        this.showVisitProgressBarAfterDelay();
7497      } else {
7498        this.showProgressBar();
7499      }
7500    }
7501    visitRequestCompleted(visit2) {
7502      visit2.loadResponse();
7503    }
7504    visitRequestFailedWithStatusCode(visit2, statusCode) {
7505      switch (statusCode) {
7506        case SystemStatusCode.networkFailure:
7507        case SystemStatusCode.timeoutFailure:
7508        case SystemStatusCode.contentTypeMismatch:
7509          return this.reload({
7510            reason: "request_failed",
7511            context: {
7512              statusCode
7513            }
7514          });
7515        default:
7516          return visit2.loadResponse();
7517      }
7518    }
7519    visitRequestFinished(_visit) {
7520      this.progressBar.setValue(1);
7521      this.hideVisitProgressBar();
7522    }
7523    visitCompleted(_visit) {
7524    }
7525    pageInvalidated(reason) {
7526      this.reload(reason);
7527    }
7528    visitFailed(_visit) {
7529    }
7530    visitRendered(_visit) {
7531    }
7532    formSubmissionStarted(_formSubmission) {
7533      this.progressBar.setValue(0);
7534      this.showFormProgressBarAfterDelay();
7535    }
7536    formSubmissionFinished(_formSubmission) {
7537      this.progressBar.setValue(1);
7538      this.hideFormProgressBar();
7539    }
7540    showVisitProgressBarAfterDelay() {
7541      this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);
7542    }
7543    hideVisitProgressBar() {
7544      this.progressBar.hide();
7545      if (this.visitProgressBarTimeout != null) {
7546        window.clearTimeout(this.visitProgressBarTimeout);
7547        delete this.visitProgressBarTimeout;
7548      }
7549    }
7550    showFormProgressBarAfterDelay() {
7551      if (this.formProgressBarTimeout == null) {
7552        this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);
7553      }
7554    }
7555    hideFormProgressBar() {
7556      this.progressBar.hide();
7557      if (this.formProgressBarTimeout != null) {
7558        window.clearTimeout(this.formProgressBarTimeout);
7559        delete this.formProgressBarTimeout;
7560      }
7561    }
7562    reload(reason) {
7563      var _a;
7564      dispatch("turbo:reload", { detail: reason });
7565      window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;
7566    }
7567    get navigator() {
7568      return this.session.navigator;
7569    }
7570  };
7571  var CacheObserver = class {
7572    constructor() {
7573      this.selector = "[data-turbo-temporary]";
7574      this.deprecatedSelector = "[data-turbo-cache=false]";
7575      this.started = false;
7576      this.removeTemporaryElements = (_event) => {
7577        for (const element of this.temporaryElements) {
7578          element.remove();
7579        }
7580      };
7581    }
7582    start() {
7583      if (!this.started) {
7584        this.started = true;
7585        addEventListener("turbo:before-cache", this.removeTemporaryElements, false);
7586      }
7587    }
7588    stop() {
7589      if (this.started) {
7590        this.started = false;
7591        removeEventListener("turbo:before-cache", this.removeTemporaryElements, false);
7592      }
7593    }
7594    get temporaryElements() {
7595      return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];
7596    }
7597    get temporaryElementsWithDeprecation() {
7598      const elements = document.querySelectorAll(this.deprecatedSelector);
7599      if (elements.length) {
7600        console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);
7601      }
7602      return [...elements];
7603    }
7604  };
7605  var FrameRedirector = class {
7606    constructor(session2, element) {
7607      this.session = session2;
7608      this.element = element;
7609      this.linkInterceptor = new LinkInterceptor(this, element);
7610      this.formSubmitObserver = new FormSubmitObserver(this, element);
7611    }
7612    start() {
7613      this.linkInterceptor.start();
7614      this.formSubmitObserver.start();
7615    }
7616    stop() {
7617      this.linkInterceptor.stop();
7618      this.formSubmitObserver.stop();
7619    }
7620    shouldInterceptLinkClick(element, _location, _event) {
7621      return this.shouldRedirect(element);
7622    }
7623    linkClickIntercepted(element, url, event2) {
7624      const frame = this.findFrameElement(element);
7625      if (frame) {
7626        frame.delegate.linkClickIntercepted(element, url, event2);
7627      }
7628    }
7629    willSubmitForm(element, submitter) {
7630      return element.closest("turbo-frame") == null && this.shouldSubmit(element, submitter) && this.shouldRedirect(element, submitter);
7631    }
7632    formSubmitted(element, submitter) {
7633      const frame = this.findFrameElement(element, submitter);
7634      if (frame) {
7635        frame.delegate.formSubmitted(element, submitter);
7636      }
7637    }
7638    shouldSubmit(form, submitter) {
7639      var _a;
7640      const action = getAction(form, submitter);
7641      const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`);
7642      const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : "/");
7643      return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);
7644    }
7645    shouldRedirect(element, submitter) {
7646      const isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter) : this.session.elementIsNavigatable(element);
7647      if (isNavigatable) {
7648        const frame = this.findFrameElement(element, submitter);
7649        return frame ? frame != element.closest("turbo-frame") : false;
7650      } else {
7651        return false;
7652      }
7653    }
7654    findFrameElement(element, submitter) {
7655      const id2 = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("data-turbo-frame")) || element.getAttribute("data-turbo-frame");
7656      if (id2 && id2 != "_top") {
7657        const frame = this.element.querySelector(`#${id2}:not([disabled])`);
7658        if (frame instanceof FrameElement) {
7659          return frame;
7660        }
7661      }
7662    }
7663  };
7664  var History = class {
7665    constructor(delegate2) {
7666      this.restorationIdentifier = uuid();
7667      this.restorationData = {};
7668      this.started = false;
7669      this.pageLoaded = false;
7670      this.onPopState = (event2) => {
7671        if (this.shouldHandlePopState()) {
7672          const { turbo } = event2.state || {};
7673          if (turbo) {
7674            this.location = new URL(window.location.href);
7675            const { restorationIdentifier } = turbo;
7676            this.restorationIdentifier = restorationIdentifier;
7677            this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);
7678          }
7679        }
7680      };
7681      this.onPageLoad = async (_event) => {
7682        await nextMicrotask();
7683        this.pageLoaded = true;
7684      };
7685      this.delegate = delegate2;
7686    }
7687    start() {
7688      if (!this.started) {
7689        addEventListener("popstate", this.onPopState, false);
7690        addEventListener("load", this.onPageLoad, false);
7691        this.started = true;
7692        this.replace(new URL(window.location.href));
7693      }
7694    }
7695    stop() {
7696      if (this.started) {
7697        removeEventListener("popstate", this.onPopState, false);
7698        removeEventListener("load", this.onPageLoad, false);
7699        this.started = false;
7700      }
7701    }
7702    push(location2, restorationIdentifier) {
7703      this.update(history.pushState, location2, restorationIdentifier);
7704    }
7705    replace(location2, restorationIdentifier) {
7706      this.update(history.replaceState, location2, restorationIdentifier);
7707    }
7708    update(method, location2, restorationIdentifier = uuid()) {
7709      const state = { turbo: { restorationIdentifier } };
7710      method.call(history, state, "", location2.href);
7711      this.location = location2;
7712      this.restorationIdentifier = restorationIdentifier;
7713    }
7714    getRestorationDataForIdentifier(restorationIdentifier) {
7715      return this.restorationData[restorationIdentifier] || {};
7716    }
7717    updateRestorationData(additionalData) {
7718      const { restorationIdentifier } = this;
7719      const restorationData = this.restorationData[restorationIdentifier];
7720      this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);
7721    }
7722    assumeControlOfScrollRestoration() {
7723      var _a;
7724      if (!this.previousScrollRestoration) {
7725        this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : "auto";
7726        history.scrollRestoration = "manual";
7727      }
7728    }
7729    relinquishControlOfScrollRestoration() {
7730      if (this.previousScrollRestoration) {
7731        history.scrollRestoration = this.previousScrollRestoration;
7732        delete this.previousScrollRestoration;
7733      }
7734    }
7735    shouldHandlePopState() {
7736      return this.pageIsLoaded();
7737    }
7738    pageIsLoaded() {
7739      return this.pageLoaded || document.readyState == "complete";
7740    }
7741  };
7742  var Navigator = class {
7743    constructor(delegate2) {
7744      this.delegate = delegate2;
7745    }
7746    proposeVisit(location2, options = {}) {
7747      if (this.delegate.allowsVisitingLocationWithAction(location2, options.action)) {
7748        if (locationIsVisitable(location2, this.view.snapshot.rootLocation)) {
7749          this.delegate.visitProposedToLocation(location2, options);
7750        } else {
7751          window.location.href = location2.toString();
7752        }
7753      }
7754    }
7755    startVisit(locatable, restorationIdentifier, options = {}) {
7756      this.stop();
7757      this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));
7758      this.currentVisit.start();
7759    }
7760    submitForm(form, submitter) {
7761      this.stop();
7762      this.formSubmission = new FormSubmission(this, form, submitter, true);
7763      this.formSubmission.start();
7764    }
7765    stop() {
7766      if (this.formSubmission) {
7767        this.formSubmission.stop();
7768        delete this.formSubmission;
7769      }
7770      if (this.currentVisit) {
7771        this.currentVisit.cancel();
7772        delete this.currentVisit;
7773      }
7774    }
7775    get adapter() {
7776      return this.delegate.adapter;
7777    }
7778    get view() {
7779      return this.delegate.view;
7780    }
7781    get history() {
7782      return this.delegate.history;
7783    }
7784    formSubmissionStarted(formSubmission) {
7785      if (typeof this.adapter.formSubmissionStarted === "function") {
7786        this.adapter.formSubmissionStarted(formSubmission);
7787      }
7788    }
7789    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {
7790      if (formSubmission == this.formSubmission) {
7791        const responseHTML = await fetchResponse.responseHTML;
7792        if (responseHTML) {
7793          const shouldCacheSnapshot = formSubmission.isSafe;
7794          if (!shouldCacheSnapshot) {
7795            this.view.clearSnapshotCache();
7796          }
7797          const { statusCode, redirected } = fetchResponse;
7798          const action = this.getActionForFormSubmission(formSubmission);
7799          const visitOptions = {
7800            action,
7801            shouldCacheSnapshot,
7802            response: { statusCode, responseHTML, redirected }
7803          };
7804          this.proposeVisit(fetchResponse.location, visitOptions);
7805        }
7806      }
7807    }
7808    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {
7809      const responseHTML = await fetchResponse.responseHTML;
7810      if (responseHTML) {
7811        const snapshot = PageSnapshot.fromHTMLString(responseHTML);
7812        if (fetchResponse.serverError) {
7813          await this.view.renderError(snapshot, this.currentVisit);
7814        } else {
7815          await this.view.renderPage(snapshot, false, true, this.currentVisit);
7816        }
7817        this.view.scrollToTop();
7818        this.view.clearSnapshotCache();
7819      }
7820    }
7821    formSubmissionErrored(formSubmission, error2) {
7822      console.error(error2);
7823    }
7824    formSubmissionFinished(formSubmission) {
7825      if (typeof this.adapter.formSubmissionFinished === "function") {
7826        this.adapter.formSubmissionFinished(formSubmission);
7827      }
7828    }
7829    visitStarted(visit2) {
7830      this.delegate.visitStarted(visit2);
7831    }
7832    visitCompleted(visit2) {
7833      this.delegate.visitCompleted(visit2);
7834    }
7835    locationWithActionIsSamePage(location2, action) {
7836      const anchor = getAnchor(location2);
7837      const currentAnchor = getAnchor(this.view.lastRenderedLocation);
7838      const isRestorationToTop = action === "restore" && typeof anchor === "undefined";
7839      return action !== "replace" && getRequestURL(location2) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);
7840    }
7841    visitScrolledToSamePageLocation(oldURL, newURL) {
7842      this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);
7843    }
7844    get location() {
7845      return this.history.location;
7846    }
7847    get restorationIdentifier() {
7848      return this.history.restorationIdentifier;
7849    }
7850    getActionForFormSubmission({ submitter, formElement }) {
7851      return getVisitAction(submitter, formElement) || "advance";
7852    }
7853  };
7854  var PageStage;
7855  (function(PageStage2) {
7856    PageStage2[PageStage2["initial"] = 0] = "initial";
7857    PageStage2[PageStage2["loading"] = 1] = "loading";
7858    PageStage2[PageStage2["interactive"] = 2] = "interactive";
7859    PageStage2[PageStage2["complete"] = 3] = "complete";
7860  })(PageStage || (PageStage = {}));
7861  var PageObserver = class {
7862    constructor(delegate2) {
7863      this.stage = PageStage.initial;
7864      this.started = false;
7865      this.interpretReadyState = () => {
7866        const { readyState } = this;
7867        if (readyState == "interactive") {
7868          this.pageIsInteractive();
7869        } else if (readyState == "complete") {
7870          this.pageIsComplete();
7871        }
7872      };
7873      this.pageWillUnload = () => {
7874        this.delegate.pageWillUnload();
7875      };
7876      this.delegate = delegate2;
7877    }
7878    start() {
7879      if (!this.started) {
7880        if (this.stage == PageStage.initial) {
7881          this.stage = PageStage.loading;
7882        }
7883        document.addEventListener("readystatechange", this.interpretReadyState, false);
7884        addEventListener("pagehide", this.pageWillUnload, false);
7885        this.started = true;
7886      }
7887    }
7888    stop() {
7889      if (this.started) {
7890        document.removeEventListener("readystatechange", this.interpretReadyState, false);
7891        removeEventListener("pagehide", this.pageWillUnload, false);
7892        this.started = false;
7893      }
7894    }
7895    pageIsInteractive() {
7896      if (this.stage == PageStage.loading) {
7897        this.stage = PageStage.interactive;
7898        this.delegate.pageBecameInteractive();
7899      }
7900    }
7901    pageIsComplete() {
7902      this.pageIsInteractive();
7903      if (this.stage == PageStage.interactive) {
7904        this.stage = PageStage.complete;
7905        this.delegate.pageLoaded();
7906      }
7907    }
7908    get readyState() {
7909      return document.readyState;
7910    }
7911  };
7912  var ScrollObserver = class {
7913    constructor(delegate2) {
7914      this.started = false;
7915      this.onScroll = () => {
7916        this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });
7917      };
7918      this.delegate = delegate2;
7919    }
7920    start() {
7921      if (!this.started) {
7922        addEventListener("scroll", this.onScroll, false);
7923        this.onScroll();
7924        this.started = true;
7925      }
7926    }
7927    stop() {
7928      if (this.started) {
7929        removeEventListener("scroll", this.onScroll, false);
7930        this.started = false;
7931      }
7932    }
7933    updatePosition(position) {
7934      this.delegate.scrollPositionChanged(position);
7935    }
7936  };
7937  var StreamMessageRenderer = class {
7938    render({ fragment }) {
7939      Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));
7940    }
7941    enteringBardo(currentPermanentElement, newPermanentElement) {
7942      newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));
7943    }
7944    leavingBardo() {
7945    }
7946  };
7947  function getPermanentElementMapForFragment(fragment) {
7948    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);
7949    const permanentElementMap = {};
7950    for (const permanentElementInDocument of permanentElementsInDocument) {
7951      const { id: id2 } = permanentElementInDocument;
7952      for (const streamElement of fragment.querySelectorAll("turbo-stream")) {
7953        const elementInStream = getPermanentElementById(streamElement.templateElement.content, id2);
7954        if (elementInStream) {
7955          permanentElementMap[id2] = [permanentElementInDocument, elementInStream];
7956        }
7957      }
7958    }
7959    return permanentElementMap;
7960  }
7961  var StreamObserver = class {
7962    constructor(delegate2) {
7963      this.sources = /* @__PURE__ */ new Set();
7964      this.started = false;
7965      this.inspectFetchResponse = (event2) => {
7966        const response = fetchResponseFromEvent(event2);
7967        if (response && fetchResponseIsStream(response)) {
7968          event2.preventDefault();
7969          this.receiveMessageResponse(response);
7970        }
7971      };
7972      this.receiveMessageEvent = (event2) => {
7973        if (this.started && typeof event2.data == "string") {
7974          this.receiveMessageHTML(event2.data);
7975        }
7976      };
7977      this.delegate = delegate2;
7978    }
7979    start() {
7980      if (!this.started) {
7981        this.started = true;
7982        addEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false);
7983      }
7984    }
7985    stop() {
7986      if (this.started) {
7987        this.started = false;
7988        removeEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false);
7989      }
7990    }
7991    connectStreamSource(source) {
7992      if (!this.streamSourceIsConnected(source)) {
7993        this.sources.add(source);
7994        source.addEventListener("message", this.receiveMessageEvent, false);
7995      }
7996    }
7997    disconnectStreamSource(source) {
7998      if (this.streamSourceIsConnected(source)) {
7999        this.sources.delete(source);
8000        source.removeEventListener("message", this.receiveMessageEvent, false);
8001      }
8002    }
8003    streamSourceIsConnected(source) {
8004      return this.sources.has(source);
8005    }
8006    async receiveMessageResponse(response) {
8007      const html = await response.responseHTML;
8008      if (html) {
8009        this.receiveMessageHTML(html);
8010      }
8011    }
8012    receiveMessageHTML(html) {
8013      this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));
8014    }
8015  };
8016  function fetchResponseFromEvent(event2) {
8017    var _a;
8018    const fetchResponse = (_a = event2.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;
8019    if (fetchResponse instanceof FetchResponse) {
8020      return fetchResponse;
8021    }
8022  }
8023  function fetchResponseIsStream(response) {
8024    var _a;
8025    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : "";
8026    return contentType.startsWith(StreamMessage.contentType);
8027  }
8028  var ErrorRenderer = class extends Renderer {
8029    static renderElement(currentElement, newElement) {
8030      const { documentElement, body } = document;
8031      documentElement.replaceChild(newElement, body);
8032    }
8033    async render() {
8034      this.replaceHeadAndBody();
8035      this.activateScriptElements();
8036    }
8037    replaceHeadAndBody() {
8038      const { documentElement, head } = document;
8039      documentElement.replaceChild(this.newHead, head);
8040      this.renderElement(this.currentElement, this.newElement);
8041    }
8042    activateScriptElements() {
8043      for (const replaceableElement of this.scriptElements) {
8044        const parentNode = replaceableElement.parentNode;
8045        if (parentNode) {
8046          const element = activateScriptElement(replaceableElement);
8047          parentNode.replaceChild(element, replaceableElement);
8048        }
8049      }
8050    }
8051    get newHead() {
8052      return this.newSnapshot.headSnapshot.element;
8053    }
8054    get scriptElements() {
8055      return document.documentElement.querySelectorAll("script");
8056    }
8057  };
8058  var PageRenderer = class extends Renderer {
8059    static renderElement(currentElement, newElement) {
8060      if (document.body && newElement instanceof HTMLBodyElement) {
8061        document.body.replaceWith(newElement);
8062      } else {
8063        document.documentElement.appendChild(newElement);
8064      }
8065    }
8066    get shouldRender() {
8067      return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;
8068    }
8069    get reloadReason() {
8070      if (!this.newSnapshot.isVisitable) {
8071        return {
8072          reason: "turbo_visit_control_is_reload"
8073        };
8074      }
8075      if (!this.trackedElementsAreIdentical) {
8076        return {
8077          reason: "tracked_element_mismatch"
8078        };
8079      }
8080    }
8081    async prepareToRender() {
8082      await this.mergeHead();
8083    }
8084    async render() {
8085      if (this.willRender) {
8086        await this.replaceBody();
8087      }
8088    }
8089    finishRendering() {
8090      super.finishRendering();
8091      if (!this.isPreview) {
8092        this.focusFirstAutofocusableElement();
8093      }
8094    }
8095    get currentHeadSnapshot() {
8096      return this.currentSnapshot.headSnapshot;
8097    }
8098    get newHeadSnapshot() {
8099      return this.newSnapshot.headSnapshot;
8100    }
8101    get newElement() {
8102      return this.newSnapshot.element;
8103    }
8104    async mergeHead() {
8105      const mergedHeadElements = this.mergeProvisionalElements();
8106      const newStylesheetElements = this.copyNewHeadStylesheetElements();
8107      this.copyNewHeadScriptElements();
8108      await mergedHeadElements;
8109      await newStylesheetElements;
8110    }
8111    async replaceBody() {
8112      await this.preservingPermanentElements(async () => {
8113        this.activateNewBody();
8114        await this.assignNewBody();
8115      });
8116    }
8117    get trackedElementsAreIdentical() {
8118      return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;
8119    }
8120    async copyNewHeadStylesheetElements() {
8121      const loadingElements = [];
8122      for (const element of this.newHeadStylesheetElements) {
8123        loadingElements.push(waitForLoad(element));
8124        document.head.appendChild(element);
8125      }
8126      await Promise.all(loadingElements);
8127    }
8128    copyNewHeadScriptElements() {
8129      for (const element of this.newHeadScriptElements) {
8130        document.head.appendChild(activateScriptElement(element));
8131      }
8132    }
8133    async mergeProvisionalElements() {
8134      const newHeadElements = [...this.newHeadProvisionalElements];
8135      for (const element of this.currentHeadProvisionalElements) {
8136        if (!this.isCurrentElementInElementList(element, newHeadElements)) {
8137          document.head.removeChild(element);
8138        }
8139      }
8140      for (const element of newHeadElements) {
8141        document.head.appendChild(element);
8142      }
8143    }
8144    isCurrentElementInElementList(element, elementList) {
8145      for (const [index4, newElement] of elementList.entries()) {
8146        if (element.tagName == "TITLE") {
8147          if (newElement.tagName != "TITLE") {
8148            continue;
8149          }
8150          if (element.innerHTML == newElement.innerHTML) {
8151            elementList.splice(index4, 1);
8152            return true;
8153          }
8154        }
8155        if (newElement.isEqualNode(element)) {
8156          elementList.splice(index4, 1);
8157          return true;
8158        }
8159      }
8160      return false;
8161    }
8162    removeCurrentHeadProvisionalElements() {
8163      for (const element of this.currentHeadProvisionalElements) {
8164        document.head.removeChild(element);
8165      }
8166    }
8167    copyNewHeadProvisionalElements() {
8168      for (const element of this.newHeadProvisionalElements) {
8169        document.head.appendChild(element);
8170      }
8171    }
8172    activateNewBody() {
8173      document.adoptNode(this.newElement);
8174      this.activateNewBodyScriptElements();
8175    }
8176    activateNewBodyScriptElements() {
8177      for (const inertScriptElement of this.newBodyScriptElements) {
8178        const activatedScriptElement = activateScriptElement(inertScriptElement);
8179        inertScriptElement.replaceWith(activatedScriptElement);
8180      }
8181    }
8182    async assignNewBody() {
8183      await this.renderElement(this.currentElement, this.newElement);
8184    }
8185    get newHeadStylesheetElements() {
8186      return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);
8187    }
8188    get newHeadScriptElements() {
8189      return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);
8190    }
8191    get currentHeadProvisionalElements() {
8192      return this.currentHeadSnapshot.provisionalElements;
8193    }
8194    get newHeadProvisionalElements() {
8195      return this.newHeadSnapshot.provisionalElements;
8196    }
8197    get newBodyScriptElements() {
8198      return this.newElement.querySelectorAll("script");
8199    }
8200  };
8201  var SnapshotCache = class {
8202    constructor(size) {
8203      this.keys = [];
8204      this.snapshots = {};
8205      this.size = size;
8206    }
8207    has(location2) {
8208      return toCacheKey(location2) in this.snapshots;
8209    }
8210    get(location2) {
8211      if (this.has(location2)) {
8212        const snapshot = this.read(location2);
8213        this.touch(location2);
8214        return snapshot;
8215      }
8216    }
8217    put(location2, snapshot) {
8218      this.write(location2, snapshot);
8219      this.touch(location2);
8220      return snapshot;
8221    }
8222    clear() {
8223      this.snapshots = {};
8224    }
8225    read(location2) {
8226      return this.snapshots[toCacheKey(location2)];
8227    }
8228    write(location2, snapshot) {
8229      this.snapshots[toCacheKey(location2)] = snapshot;
8230    }
8231    touch(location2) {
8232      const key = toCacheKey(location2);
8233      const index4 = this.keys.indexOf(key);
8234      if (index4 > -1)
8235        this.keys.splice(index4, 1);
8236      this.keys.unshift(key);
8237      this.trim();
8238    }
8239    trim() {
8240      for (const key of this.keys.splice(this.size)) {
8241        delete this.snapshots[key];
8242      }
8243    }
8244  };
8245  var PageView = class extends View {
8246    constructor() {
8247      super(...arguments);
8248      this.snapshotCache = new SnapshotCache(10);
8249      this.lastRenderedLocation = new URL(location.href);
8250      this.forceReloaded = false;
8251    }
8252    renderPage(snapshot, isPreview = false, willRender = true, visit2) {
8253      const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);
8254      if (!renderer.shouldRender) {
8255        this.forceReloaded = true;
8256      } else {
8257        visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();
8258      }
8259      return this.render(renderer);
8260    }
8261    renderError(snapshot, visit2) {
8262      visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();
8263      const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);
8264      return this.render(renderer);
8265    }
8266    clearSnapshotCache() {
8267      this.snapshotCache.clear();
8268    }
8269    async cacheSnapshot(snapshot = this.snapshot) {
8270      if (snapshot.isCacheable) {
8271        this.delegate.viewWillCacheSnapshot();
8272        const { lastRenderedLocation: location2 } = this;
8273        await nextEventLoopTick();
8274        const cachedSnapshot = snapshot.clone();
8275        this.snapshotCache.put(location2, cachedSnapshot);
8276        return cachedSnapshot;
8277      }
8278    }
8279    getCachedSnapshotForLocation(location2) {
8280      return this.snapshotCache.get(location2);
8281    }
8282    get snapshot() {
8283      return PageSnapshot.fromElement(this.element);
8284    }
8285  };
8286  var Preloader = class {
8287    constructor(delegate2) {
8288      this.selector = "a[data-turbo-preload]";
8289      this.delegate = delegate2;
8290    }
8291    get snapshotCache() {
8292      return this.delegate.navigator.view.snapshotCache;
8293    }
8294    start() {
8295      if (document.readyState === "loading") {
8296        return document.addEventListener("DOMContentLoaded", () => {
8297          this.preloadOnLoadLinksForView(document.body);
8298        });
8299      } else {
8300        this.preloadOnLoadLinksForView(document.body);
8301      }
8302    }
8303    preloadOnLoadLinksForView(element) {
8304      for (const link of element.querySelectorAll(this.selector)) {
8305        this.preloadURL(link);
8306      }
8307    }
8308    async preloadURL(link) {
8309      const location2 = new URL(link.href);
8310      if (this.snapshotCache.has(location2)) {
8311        return;
8312      }
8313      try {
8314        const response = await fetch(location2.toString(), { headers: { "VND.PREFETCH": "true", Accept: "text/html" } });
8315        const responseText = await response.text();
8316        const snapshot = PageSnapshot.fromHTMLString(responseText);
8317        this.snapshotCache.put(location2, snapshot);
8318      } catch (_4) {
8319      }
8320    }
8321  };
8322  var Session = class {
8323    constructor() {
8324      this.navigator = new Navigator(this);
8325      this.history = new History(this);
8326      this.preloader = new Preloader(this);
8327      this.view = new PageView(this, document.documentElement);
8328      this.adapter = new BrowserAdapter(this);
8329      this.pageObserver = new PageObserver(this);
8330      this.cacheObserver = new CacheObserver();
8331      this.linkClickObserver = new LinkClickObserver(this, window);
8332      this.formSubmitObserver = new FormSubmitObserver(this, document);
8333      this.scrollObserver = new ScrollObserver(this);
8334      this.streamObserver = new StreamObserver(this);
8335      this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);
8336      this.frameRedirector = new FrameRedirector(this, document.documentElement);
8337      this.streamMessageRenderer = new StreamMessageRenderer();
8338      this.drive = true;
8339      this.enabled = true;
8340      this.progressBarDelay = 500;
8341      this.started = false;
8342      this.formMode = "on";
8343    }
8344    start() {
8345      if (!this.started) {
8346        this.pageObserver.start();
8347        this.cacheObserver.start();
8348        this.formLinkClickObserver.start();
8349        this.linkClickObserver.start();
8350        this.formSubmitObserver.start();
8351        this.scrollObserver.start();
8352        this.streamObserver.start();
8353        this.frameRedirector.start();
8354        this.history.start();
8355        this.preloader.start();
8356        this.started = true;
8357        this.enabled = true;
8358      }
8359    }
8360    disable() {
8361      this.enabled = false;
8362    }
8363    stop() {
8364      if (this.started) {
8365        this.pageObserver.stop();
8366        this.cacheObserver.stop();
8367        this.formLinkClickObserver.stop();
8368        this.linkClickObserver.stop();
8369        this.formSubmitObserver.stop();
8370        this.scrollObserver.stop();
8371        this.streamObserver.stop();
8372        this.frameRedirector.stop();
8373        this.history.stop();
8374        this.started = false;
8375      }
8376    }
8377    registerAdapter(adapter) {
8378      this.adapter = adapter;
8379    }
8380    visit(location2, options = {}) {
8381      const frameElement = options.frame ? document.getElementById(options.frame) : null;
8382      if (frameElement instanceof FrameElement) {
8383        frameElement.src = location2.toString();
8384        frameElement.loaded;
8385      } else {
8386        this.navigator.proposeVisit(expandURL(location2), options);
8387      }
8388    }
8389    connectStreamSource(source) {
8390      this.streamObserver.connectStreamSource(source);
8391    }
8392    disconnectStreamSource(source) {
8393      this.streamObserver.disconnectStreamSource(source);
8394    }
8395    renderStreamMessage(message) {
8396      this.streamMessageRenderer.render(StreamMessage.wrap(message));
8397    }
8398    clearCache() {
8399      this.view.clearSnapshotCache();
8400    }
8401    setProgressBarDelay(delay) {
8402      this.progressBarDelay = delay;
8403    }
8404    setFormMode(mode) {
8405      this.formMode = mode;
8406    }
8407    get location() {
8408      return this.history.location;
8409    }
8410    get restorationIdentifier() {
8411      return this.history.restorationIdentifier;
8412    }
8413    historyPoppedToLocationWithRestorationIdentifier(location2, restorationIdentifier) {
8414      if (this.enabled) {
8415        this.navigator.startVisit(location2, restorationIdentifier, {
8416          action: "restore",
8417          historyChanged: true
8418        });
8419      } else {
8420        this.adapter.pageInvalidated({
8421          reason: "turbo_disabled"
8422        });
8423      }
8424    }
8425    scrollPositionChanged(position) {
8426      this.history.updateRestorationData({ scrollPosition: position });
8427    }
8428    willSubmitFormLinkToLocation(link, location2) {
8429      return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation);
8430    }
8431    submittedFormLinkToLocation() {
8432    }
8433    willFollowLinkToLocation(link, location2, event2) {
8434      return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location2, event2);
8435    }
8436    followedLinkToLocation(link, location2) {
8437      const action = this.getActionForLink(link);
8438      const acceptsStreamResponse = link.hasAttribute("data-turbo-stream");
8439      this.visit(location2.href, { action, acceptsStreamResponse });
8440    }
8441    allowsVisitingLocationWithAction(location2, action) {
8442      return this.locationWithActionIsSamePage(location2, action) || this.applicationAllowsVisitingLocation(location2);
8443    }
8444    visitProposedToLocation(location2, options) {
8445      extendURLWithDeprecatedProperties(location2);
8446      this.adapter.visitProposedToLocation(location2, options);
8447    }
8448    visitStarted(visit2) {
8449      if (!visit2.acceptsStreamResponse) {
8450        markAsBusy(document.documentElement);
8451      }
8452      extendURLWithDeprecatedProperties(visit2.location);
8453      if (!visit2.silent) {
8454        this.notifyApplicationAfterVisitingLocation(visit2.location, visit2.action);
8455      }
8456    }
8457    visitCompleted(visit2) {
8458      clearBusyState(document.documentElement);
8459      this.notifyApplicationAfterPageLoad(visit2.getTimingMetrics());
8460    }
8461    locationWithActionIsSamePage(location2, action) {
8462      return this.navigator.locationWithActionIsSamePage(location2, action);
8463    }
8464    visitScrolledToSamePageLocation(oldURL, newURL) {
8465      this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);
8466    }
8467    willSubmitForm(form, submitter) {
8468      const action = getAction(form, submitter);
8469      return this.submissionIsNavigatable(form, submitter) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);
8470    }
8471    formSubmitted(form, submitter) {
8472      this.navigator.submitForm(form, submitter);
8473    }
8474    pageBecameInteractive() {
8475      this.view.lastRenderedLocation = this.location;
8476      this.notifyApplicationAfterPageLoad();
8477    }
8478    pageLoaded() {
8479      this.history.assumeControlOfScrollRestoration();
8480    }
8481    pageWillUnload() {
8482      this.history.relinquishControlOfScrollRestoration();
8483    }
8484    receivedMessageFromStream(message) {
8485      this.renderStreamMessage(message);
8486    }
8487    viewWillCacheSnapshot() {
8488      var _a;
8489      if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {
8490        this.notifyApplicationBeforeCachingSnapshot();
8491      }
8492    }
8493    allowsImmediateRender({ element }, options) {
8494      const event2 = this.notifyApplicationBeforeRender(element, options);
8495      const { defaultPrevented, detail: { render } } = event2;
8496      if (this.view.renderer && render) {
8497        this.view.renderer.renderElement = render;
8498      }
8499      return !defaultPrevented;
8500    }
8501    viewRenderedSnapshot(_snapshot, _isPreview) {
8502      this.view.lastRenderedLocation = this.history.location;
8503      this.notifyApplicationAfterRender();
8504    }
8505    preloadOnLoadLinksForView(element) {
8506      this.preloader.preloadOnLoadLinksForView(element);
8507    }
8508    viewInvalidated(reason) {
8509      this.adapter.pageInvalidated(reason);
8510    }
8511    frameLoaded(frame) {
8512      this.notifyApplicationAfterFrameLoad(frame);
8513    }
8514    frameRendered(fetchResponse, frame) {
8515      this.notifyApplicationAfterFrameRender(fetchResponse, frame);
8516    }
8517    applicationAllowsFollowingLinkToLocation(link, location2, ev) {
8518      const event2 = this.notifyApplicationAfterClickingLinkToLocation(link, location2, ev);
8519      return !event2.defaultPrevented;
8520    }
8521    applicationAllowsVisitingLocation(location2) {
8522      const event2 = this.notifyApplicationBeforeVisitingLocation(location2);
8523      return !event2.defaultPrevented;
8524    }
8525    notifyApplicationAfterClickingLinkToLocation(link, location2, event2) {
8526      return dispatch("turbo:click", {
8527        target: link,
8528        detail: { url: location2.href, originalEvent: event2 },
8529        cancelable: true
8530      });
8531    }
8532    notifyApplicationBeforeVisitingLocation(location2) {
8533      return dispatch("turbo:before-visit", {
8534        detail: { url: location2.href },
8535        cancelable: true
8536      });
8537    }
8538    notifyApplicationAfterVisitingLocation(location2, action) {
8539      return dispatch("turbo:visit", { detail: { url: location2.href, action } });
8540    }
8541    notifyApplicationBeforeCachingSnapshot() {
8542      return dispatch("turbo:before-cache");
8543    }
8544    notifyApplicationBeforeRender(newBody, options) {
8545      return dispatch("turbo:before-render", {
8546        detail: Object.assign({ newBody }, options),
8547        cancelable: true
8548      });
8549    }
8550    notifyApplicationAfterRender() {
8551      return dispatch("turbo:render");
8552    }
8553    notifyApplicationAfterPageLoad(timing = {}) {
8554      return dispatch("turbo:load", {
8555        detail: { url: this.location.href, timing }
8556      });
8557    }
8558    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {
8559      dispatchEvent(new HashChangeEvent("hashchange", {
8560        oldURL: oldURL.toString(),
8561        newURL: newURL.toString()
8562      }));
8563    }
8564    notifyApplicationAfterFrameLoad(frame) {
8565      return dispatch("turbo:frame-load", { target: frame });
8566    }
8567    notifyApplicationAfterFrameRender(fetchResponse, frame) {
8568      return dispatch("turbo:frame-render", {
8569        detail: { fetchResponse },
8570        target: frame,
8571        cancelable: true
8572      });
8573    }
8574    submissionIsNavigatable(form, submitter) {
8575      if (this.formMode == "off") {
8576        return false;
8577      } else {
8578        const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;
8579        if (this.formMode == "optin") {
8580          return submitterIsNavigatable && form.closest('[data-turbo="true"]') != null;
8581        } else {
8582          return submitterIsNavigatable && this.elementIsNavigatable(form);
8583        }
8584      }
8585    }
8586    elementIsNavigatable(element) {
8587      const container = findClosestRecursively(element, "[data-turbo]");
8588      const withinFrame = findClosestRecursively(element, "turbo-frame");
8589      if (this.drive || withinFrame) {
8590        if (container) {
8591          return container.getAttribute("data-turbo") != "false";
8592        } else {
8593          return true;
8594        }
8595      } else {
8596        if (container) {
8597          return container.getAttribute("data-turbo") == "true";
8598        } else {
8599          return false;
8600        }
8601      }
8602    }
8603    getActionForLink(link) {
8604      return getVisitAction(link) || "advance";
8605    }
8606    get snapshot() {
8607      return this.view.snapshot;
8608    }
8609  };
8610  function extendURLWithDeprecatedProperties(url) {
8611    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);
8612  }
8613  var deprecatedLocationPropertyDescriptors = {
8614    absoluteURL: {
8615      get() {
8616        return this.toString();
8617      }
8618    }
8619  };
8620  var Cache = class {
8621    constructor(session2) {
8622      this.session = session2;
8623    }
8624    clear() {
8625      this.session.clearCache();
8626    }
8627    resetCacheControl() {
8628      this.setCacheControl("");
8629    }
8630    exemptPageFromCache() {
8631      this.setCacheControl("no-cache");
8632    }
8633    exemptPageFromPreview() {
8634      this.setCacheControl("no-preview");
8635    }
8636    setCacheControl(value) {
8637      setMetaContent("turbo-cache-control", value);
8638    }
8639  };
8640  var StreamActions = {
8641    after() {
8642      this.targetElements.forEach((e4) => {
8643        var _a;
8644        return (_a = e4.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e4.nextSibling);
8645      });
8646    },
8647    append() {
8648      this.removeDuplicateTargetChildren();
8649      this.targetElements.forEach((e4) => e4.append(this.templateContent));
8650    },
8651    before() {
8652      this.targetElements.forEach((e4) => {
8653        var _a;
8654        return (_a = e4.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e4);
8655      });
8656    },
8657    prepend() {
8658      this.removeDuplicateTargetChildren();
8659      this.targetElements.forEach((e4) => e4.prepend(this.templateContent));
8660    },
8661    remove() {
8662      this.targetElements.forEach((e4) => e4.remove());
8663    },
8664    replace() {
8665      this.targetElements.forEach((e4) => e4.replaceWith(this.templateContent));
8666    },
8667    update() {
8668      this.targetElements.forEach((targetElement) => {
8669        targetElement.innerHTML = "";
8670        targetElement.append(this.templateContent);
8671      });
8672    }
8673  };
8674  var session = new Session();
8675  var cache = new Cache(session);
8676  var { navigator: navigator$1 } = session;
8677  function start() {
8678    session.start();
8679  }
8680  function registerAdapter(adapter) {
8681    session.registerAdapter(adapter);
8682  }
8683  function visit(location2, options) {
8684    session.visit(location2, options);
8685  }
8686  function connectStreamSource(source) {
8687    session.connectStreamSource(source);
8688  }
8689  function disconnectStreamSource(source) {
8690    session.disconnectStreamSource(source);
8691  }
8692  function renderStreamMessage(message) {
8693    session.renderStreamMessage(message);
8694  }
8695  function clearCache() {
8696    console.warn("Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`");
8697    session.clearCache();
8698  }
8699  function setProgressBarDelay(delay) {
8700    session.setProgressBarDelay(delay);
8701  }
8702  function setConfirmMethod(confirmMethod) {
8703    FormSubmission.confirmMethod = confirmMethod;
8704  }
8705  function setFormMode(mode) {
8706    session.setFormMode(mode);
8707  }
8708  var Turbo2 = /* @__PURE__ */ Object.freeze({
8709    __proto__: null,
8710    navigator: navigator$1,
8711    session,
8712    cache,
8713    PageRenderer,
8714    PageSnapshot,
8715    FrameRenderer,
8716    start,
8717    registerAdapter,
8718    visit,
8719    connectStreamSource,
8720    disconnectStreamSource,
8721    renderStreamMessage,
8722    clearCache,
8723    setProgressBarDelay,
8724    setConfirmMethod,
8725    setFormMode,
8726    StreamActions
8727  });
8728  var TurboFrameMissingError = class extends Error {
8729  };
8730  var FrameController = class {
8731    constructor(element) {
8732      this.fetchResponseLoaded = (_fetchResponse) => {
8733      };
8734      this.currentFetchRequest = null;
8735      this.resolveVisitPromise = () => {
8736      };
8737      this.connected = false;
8738      this.hasBeenLoaded = false;
8739      this.ignoredAttributes = /* @__PURE__ */ new Set();
8740      this.action = null;
8741      this.visitCachedSnapshot = ({ element: element2 }) => {
8742        const frame = element2.querySelector("#" + this.element.id);
8743        if (frame && this.previousFrameElement) {
8744          frame.replaceChildren(...this.previousFrameElement.children);
8745        }
8746        delete this.previousFrameElement;
8747      };
8748      this.element = element;
8749      this.view = new FrameView(this, this.element);
8750      this.appearanceObserver = new AppearanceObserver(this, this.element);
8751      this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);
8752      this.linkInterceptor = new LinkInterceptor(this, this.element);
8753      this.restorationIdentifier = uuid();
8754      this.formSubmitObserver = new FormSubmitObserver(this, this.element);
8755    }
8756    connect() {
8757      if (!this.connected) {
8758        this.connected = true;
8759        if (this.loadingStyle == FrameLoadingStyle.lazy) {
8760          this.appearanceObserver.start();
8761        } else {
8762          this.loadSourceURL();
8763        }
8764        this.formLinkClickObserver.start();
8765        this.linkInterceptor.start();
8766        this.formSubmitObserver.start();
8767      }
8768    }
8769    disconnect() {
8770      if (this.connected) {
8771        this.connected = false;
8772        this.appearanceObserver.stop();
8773        this.formLinkClickObserver.stop();
8774        this.linkInterceptor.stop();
8775        this.formSubmitObserver.stop();
8776      }
8777    }
8778    disabledChanged() {
8779      if (this.loadingStyle == FrameLoadingStyle.eager) {
8780        this.loadSourceURL();
8781      }
8782    }
8783    sourceURLChanged() {
8784      if (this.isIgnoringChangesTo("src"))
8785        return;
8786      if (this.element.isConnected) {
8787        this.complete = false;
8788      }
8789      if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {
8790        this.loadSourceURL();
8791      }
8792    }
8793    sourceURLReloaded() {
8794      const { src } = this.element;
8795      this.ignoringChangesToAttribute("complete", () => {
8796        this.element.removeAttribute("complete");
8797      });
8798      this.element.src = null;
8799      this.element.src = src;
8800      return this.element.loaded;
8801    }
8802    completeChanged() {
8803      if (this.isIgnoringChangesTo("complete"))
8804        return;
8805      this.loadSourceURL();
8806    }
8807    loadingStyleChanged() {
8808      if (this.loadingStyle == FrameLoadingStyle.lazy) {
8809        this.appearanceObserver.start();
8810      } else {
8811        this.appearanceObserver.stop();
8812        this.loadSourceURL();
8813      }
8814    }
8815    async loadSourceURL() {
8816      if (this.enabled && this.isActive && !this.complete && this.sourceURL) {
8817        this.element.loaded = this.visit(expandURL(this.sourceURL));
8818        this.appearanceObserver.stop();
8819        await this.element.loaded;
8820        this.hasBeenLoaded = true;
8821      }
8822    }
8823    async loadResponse(fetchResponse) {
8824      if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) {
8825        this.sourceURL = fetchResponse.response.url;
8826      }
8827      try {
8828        const html = await fetchResponse.responseHTML;
8829        if (html) {
8830          const document2 = parseHTMLDocument(html);
8831          const pageSnapshot = PageSnapshot.fromDocument(document2);
8832          if (pageSnapshot.isVisitable) {
8833            await this.loadFrameResponse(fetchResponse, document2);
8834          } else {
8835            await this.handleUnvisitableFrameResponse(fetchResponse);
8836          }
8837        }
8838      } finally {
8839        this.fetchResponseLoaded = () => {
8840        };
8841      }
8842    }
8843    elementAppearedInViewport(element) {
8844      this.proposeVisitIfNavigatedWithAction(element, element);
8845      this.loadSourceURL();
8846    }
8847    willSubmitFormLinkToLocation(link) {
8848      return this.shouldInterceptNavigation(link);
8849    }
8850    submittedFormLinkToLocation(link, _location, form) {
8851      const frame = this.findFrameElement(link);
8852      if (frame)
8853        form.setAttribute("data-turbo-frame", frame.id);
8854    }
8855    shouldInterceptLinkClick(element, _location, _event) {
8856      return this.shouldInterceptNavigation(element);
8857    }
8858    linkClickIntercepted(element, location2) {
8859      this.navigateFrame(element, location2);
8860    }
8861    willSubmitForm(element, submitter) {
8862      return element.closest("turbo-frame") == this.element && this.shouldInterceptNavigation(element, submitter);
8863    }
8864    formSubmitted(element, submitter) {
8865      if (this.formSubmission) {
8866        this.formSubmission.stop();
8867      }
8868      this.formSubmission = new FormSubmission(this, element, submitter);
8869      const { fetchRequest } = this.formSubmission;
8870      this.prepareRequest(fetchRequest);
8871      this.formSubmission.start();
8872    }
8873    prepareRequest(request) {
8874      var _a;
8875      request.headers["Turbo-Frame"] = this.id;
8876      if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute("data-turbo-stream")) {
8877        request.acceptResponseType(StreamMessage.contentType);
8878      }
8879    }
8880    requestStarted(_request) {
8881      markAsBusy(this.element);
8882    }
8883    requestPreventedHandlingResponse(_request, _response) {
8884      this.resolveVisitPromise();
8885    }
8886    async requestSucceededWithResponse(request, response) {
8887      await this.loadResponse(response);
8888      this.resolveVisitPromise();
8889    }
8890    async requestFailedWithResponse(request, response) {
8891      await this.loadResponse(response);
8892      this.resolveVisitPromise();
8893    }
8894    requestErrored(request, error2) {
8895      console.error(error2);
8896      this.resolveVisitPromise();
8897    }
8898    requestFinished(_request) {
8899      clearBusyState(this.element);
8900    }
8901    formSubmissionStarted({ formElement }) {
8902      markAsBusy(formElement, this.findFrameElement(formElement));
8903    }
8904    formSubmissionSucceededWithResponse(formSubmission, response) {
8905      const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);
8906      frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);
8907      frame.delegate.loadResponse(response);
8908      if (!formSubmission.isSafe) {
8909        session.clearCache();
8910      }
8911    }
8912    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {
8913      this.element.delegate.loadResponse(fetchResponse);
8914      session.clearCache();
8915    }
8916    formSubmissionErrored(formSubmission, error2) {
8917      console.error(error2);
8918    }
8919    formSubmissionFinished({ formElement }) {
8920      clearBusyState(formElement, this.findFrameElement(formElement));
8921    }
8922    allowsImmediateRender({ element: newFrame }, options) {
8923      const event2 = dispatch("turbo:before-frame-render", {
8924        target: this.element,
8925        detail: Object.assign({ newFrame }, options),
8926        cancelable: true
8927      });
8928      const { defaultPrevented, detail: { render } } = event2;
8929      if (this.view.renderer && render) {
8930        this.view.renderer.renderElement = render;
8931      }
8932      return !defaultPrevented;
8933    }
8934    viewRenderedSnapshot(_snapshot, _isPreview) {
8935    }
8936    preloadOnLoadLinksForView(element) {
8937      session.preloadOnLoadLinksForView(element);
8938    }
8939    viewInvalidated() {
8940    }
8941    willRenderFrame(currentElement, _newElement) {
8942      this.previousFrameElement = currentElement.cloneNode(true);
8943    }
8944    async loadFrameResponse(fetchResponse, document2) {
8945      const newFrameElement = await this.extractForeignFrameElement(document2.body);
8946      if (newFrameElement) {
8947        const snapshot = new Snapshot(newFrameElement);
8948        const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);
8949        if (this.view.renderPromise)
8950          await this.view.renderPromise;
8951        this.changeHistory();
8952        await this.view.render(renderer);
8953        this.complete = true;
8954        session.frameRendered(fetchResponse, this.element);
8955        session.frameLoaded(this.element);
8956        this.fetchResponseLoaded(fetchResponse);
8957      } else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {
8958        this.handleFrameMissingFromResponse(fetchResponse);
8959      }
8960    }
8961    async visit(url) {
8962      var _a;
8963      const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);
8964      (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();
8965      this.currentFetchRequest = request;
8966      return new Promise((resolve) => {
8967        this.resolveVisitPromise = () => {
8968          this.resolveVisitPromise = () => {
8969          };
8970          this.currentFetchRequest = null;
8971          resolve();
8972        };
8973        request.perform();
8974      });
8975    }
8976    navigateFrame(element, url, submitter) {
8977      const frame = this.findFrameElement(element, submitter);
8978      frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);
8979      this.withCurrentNavigationElement(element, () => {
8980        frame.src = url;
8981      });
8982    }
8983    proposeVisitIfNavigatedWithAction(frame, element, submitter) {
8984      this.action = getVisitAction(submitter, element, frame);
8985      if (this.action) {
8986        const pageSnapshot = PageSnapshot.fromElement(frame).clone();
8987        const { visitCachedSnapshot } = frame.delegate;
8988        frame.delegate.fetchResponseLoaded = (fetchResponse) => {
8989          if (frame.src) {
8990            const { statusCode, redirected } = fetchResponse;
8991            const responseHTML = frame.ownerDocument.documentElement.outerHTML;
8992            const response = { statusCode, redirected, responseHTML };
8993            const options = {
8994              response,
8995              visitCachedSnapshot,
8996              willRender: false,
8997              updateHistory: false,
8998              restorationIdentifier: this.restorationIdentifier,
8999              snapshot: pageSnapshot
9000            };
9001            if (this.action)
9002              options.action = this.action;
9003            session.visit(frame.src, options);
9004          }
9005        };
9006      }
9007    }
9008    changeHistory() {
9009      if (this.action) {
9010        const method = getHistoryMethodForAction(this.action);
9011        session.history.update(method, expandURL(this.element.src || ""), this.restorationIdentifier);
9012      }
9013    }
9014    async handleUnvisitableFrameResponse(fetchResponse) {
9015      console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id="${this.element.id}"> is performing a full page visit due to turbo-visit-control.`);
9016      await this.visitResponse(fetchResponse.response);
9017    }
9018    willHandleFrameMissingFromResponse(fetchResponse) {
9019      this.element.setAttribute("complete", "");
9020      const response = fetchResponse.response;
9021      const visit2 = async (url, options = {}) => {
9022        if (url instanceof Response) {
9023          this.visitResponse(url);
9024        } else {
9025          session.visit(url, options);
9026        }
9027      };
9028      const event2 = dispatch("turbo:frame-missing", {
9029        target: this.element,
9030        detail: { response, visit: visit2 },
9031        cancelable: true
9032      });
9033      return !event2.defaultPrevented;
9034    }
9035    handleFrameMissingFromResponse(fetchResponse) {
9036      this.view.missing();
9037      this.throwFrameMissingError(fetchResponse);
9038    }
9039    throwFrameMissingError(fetchResponse) {
9040      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.`;
9041      throw new TurboFrameMissingError(message);
9042    }
9043    async visitResponse(response) {
9044      const wrapped = new FetchResponse(response);
9045      const responseHTML = await wrapped.responseHTML;
9046      const { location: location2, redirected, statusCode } = wrapped;
9047      return session.visit(location2, { response: { redirected, statusCode, responseHTML } });
9048    }
9049    findFrameElement(element, submitter) {
9050      var _a;
9051      const id2 = getAttribute("data-turbo-frame", submitter, element) || this.element.getAttribute("target");
9052      return (_a = getFrameElementById(id2)) !== null && _a !== void 0 ? _a : this.element;
9053    }
9054    async extractForeignFrameElement(container) {
9055      let element;
9056      const id2 = CSS.escape(this.id);
9057      try {
9058        element = activateElement(container.querySelector(`turbo-frame#${id2}`), this.sourceURL);
9059        if (element) {
9060          return element;
9061        }
9062        element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id2}]`), this.sourceURL);
9063        if (element) {
9064          await element.loaded;
9065          return await this.extractForeignFrameElement(element);
9066        }
9067      } catch (error2) {
9068        console.error(error2);
9069        return new FrameElement();
9070      }
9071      return null;
9072    }
9073    formActionIsVisitable(form, submitter) {
9074      const action = getAction(form, submitter);
9075      return locationIsVisitable(expandURL(action), this.rootLocation);
9076    }
9077    shouldInterceptNavigation(element, submitter) {
9078      const id2 = getAttribute("data-turbo-frame", submitter, element) || this.element.getAttribute("target");
9079      if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {
9080        return false;
9081      }
9082      if (!this.enabled || id2 == "_top") {
9083        return false;
9084      }
9085      if (id2) {
9086        const frameElement = getFrameElementById(id2);
9087        if (frameElement) {
9088          return !frameElement.disabled;
9089        }
9090      }
9091      if (!session.elementIsNavigatable(element)) {
9092        return false;
9093      }
9094      if (submitter && !session.elementIsNavigatable(submitter)) {
9095        return false;
9096      }
9097      return true;
9098    }
9099    get id() {
9100      return this.element.id;
9101    }
9102    get enabled() {
9103      return !this.element.disabled;
9104    }
9105    get sourceURL() {
9106      if (this.element.src) {
9107        return this.element.src;
9108      }
9109    }
9110    set sourceURL(sourceURL) {
9111      this.ignoringChangesToAttribute("src", () => {
9112        this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;
9113      });
9114    }
9115    get loadingStyle() {
9116      return this.element.loading;
9117    }
9118    get isLoading() {
9119      return this.formSubmission !== void 0 || this.resolveVisitPromise() !== void 0;
9120    }
9121    get complete() {
9122      return this.element.hasAttribute("complete");
9123    }
9124    set complete(value) {
9125      this.ignoringChangesToAttribute("complete", () => {
9126        if (value) {
9127          this.element.setAttribute("complete", "");
9128        } else {
9129          this.element.removeAttribute("complete");
9130        }
9131      });
9132    }
9133    get isActive() {
9134      return this.element.isActive && this.connected;
9135    }
9136    get rootLocation() {
9137      var _a;
9138      const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`);
9139      const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : "/";
9140      return expandURL(root);
9141    }
9142    isIgnoringChangesTo(attributeName) {
9143      return this.ignoredAttributes.has(attributeName);
9144    }
9145    ignoringChangesToAttribute(attributeName, callback) {
9146      this.ignoredAttributes.add(attributeName);
9147      callback();
9148      this.ignoredAttributes.delete(attributeName);
9149    }
9150    withCurrentNavigationElement(element, callback) {
9151      this.currentNavigationElement = element;
9152      callback();
9153      delete this.currentNavigationElement;
9154    }
9155  };
9156  function getFrameElementById(id2) {
9157    if (id2 != null) {
9158      const element = document.getElementById(id2);
9159      if (element instanceof FrameElement) {
9160        return element;
9161      }
9162    }
9163  }
9164  function activateElement(element, currentURL) {
9165    if (element) {
9166      const src = element.getAttribute("src");
9167      if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {
9168        throw new Error(`Matching <turbo-frame id="${element.id}"> element has a source URL which references itself`);
9169      }
9170      if (element.ownerDocument !== document) {
9171        element = document.importNode(element, true);
9172      }
9173      if (element instanceof FrameElement) {
9174        element.connectedCallback();
9175        element.disconnectedCallback();
9176        return element;
9177      }
9178    }
9179  }
9180  var StreamElement = class extends HTMLElement {
9181    static async renderElement(newElement) {
9182      await newElement.performAction();
9183    }
9184    async connectedCallback() {
9185      try {
9186        await this.render();
9187      } catch (error2) {
9188        console.error(error2);
9189      } finally {
9190        this.disconnect();
9191      }
9192    }
9193    async render() {
9194      var _a;
9195      return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = (async () => {
9196        const event2 = this.beforeRenderEvent;
9197        if (this.dispatchEvent(event2)) {
9198          await nextAnimationFrame();
9199          await event2.detail.render(this);
9200        }
9201      })();
9202    }
9203    disconnect() {
9204      try {
9205        this.remove();
9206      } catch (_a) {
9207      }
9208    }
9209    removeDuplicateTargetChildren() {
9210      this.duplicateChildren.forEach((c4) => c4.remove());
9211    }
9212    get duplicateChildren() {
9213      var _a;
9214      const existingChildren = this.targetElements.flatMap((e4) => [...e4.children]).filter((c4) => !!c4.id);
9215      const newChildrenIds = [...((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || []].filter((c4) => !!c4.id).map((c4) => c4.id);
9216      return existingChildren.filter((c4) => newChildrenIds.includes(c4.id));
9217    }
9218    get performAction() {
9219      if (this.action) {
9220        const actionFunction = StreamActions[this.action];
9221        if (actionFunction) {
9222          return actionFunction;
9223        }
9224        this.raise("unknown action");
9225      }
9226      this.raise("action attribute is missing");
9227    }
9228    get targetElements() {
9229      if (this.target) {
9230        return this.targetElementsById;
9231      } else if (this.targets) {
9232        return this.targetElementsByQuery;
9233      } else {
9234        this.raise("target or targets attribute is missing");
9235      }
9236    }
9237    get templateContent() {
9238      return this.templateElement.content.cloneNode(true);
9239    }
9240    get templateElement() {
9241      if (this.firstElementChild === null) {
9242        const template = this.ownerDocument.createElement("template");
9243        this.appendChild(template);
9244        return template;
9245      } else if (this.firstElementChild instanceof HTMLTemplateElement) {
9246        return this.firstElementChild;
9247      }
9248      this.raise("first child element must be a <template> element");
9249    }
9250    get action() {
9251      return this.getAttribute("action");
9252    }
9253    get target() {
9254      return this.getAttribute("target");
9255    }
9256    get targets() {
9257      return this.getAttribute("targets");
9258    }
9259    raise(message) {
9260      throw new Error(`${this.description}: ${message}`);
9261    }
9262    get description() {
9263      var _a, _b;
9264      return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : "<turbo-stream>";
9265    }
9266    get beforeRenderEvent() {
9267      return new CustomEvent("turbo:before-stream-render", {
9268        bubbles: true,
9269        cancelable: true,
9270        detail: { newStream: this, render: StreamElement.renderElement }
9271      });
9272    }
9273    get targetElementsById() {
9274      var _a;
9275      const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);
9276      if (element !== null) {
9277        return [element];
9278      } else {
9279        return [];
9280      }
9281    }
9282    get targetElementsByQuery() {
9283      var _a;
9284      const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);
9285      if (elements.length !== 0) {
9286        return Array.prototype.slice.call(elements);
9287      } else {
9288        return [];
9289      }
9290    }
9291  };
9292  var StreamSourceElement = class extends HTMLElement {
9293    constructor() {
9294      super(...arguments);
9295      this.streamSource = null;
9296    }
9297    connectedCallback() {
9298      this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);
9299      connectStreamSource(this.streamSource);
9300    }
9301    disconnectedCallback() {
9302      if (this.streamSource) {
9303        disconnectStreamSource(this.streamSource);
9304      }
9305    }
9306    get src() {
9307      return this.getAttribute("src") || "";
9308    }
9309  };
9310  FrameElement.delegateConstructor = FrameController;
9311  if (customElements.get("turbo-frame") === void 0) {
9312    customElements.define("turbo-frame", FrameElement);
9313  }
9314  if (customElements.get("turbo-stream") === void 0) {
9315    customElements.define("turbo-stream", StreamElement);
9316  }
9317  if (customElements.get("turbo-stream-source") === void 0) {
9318    customElements.define("turbo-stream-source", StreamSourceElement);
9319  }
9320  (() => {
9321    let element = document.currentScript;
9322    if (!element)
9323      return;
9324    if (element.hasAttribute("data-turbo-suppress-warning"))
9325      return;
9326    element = element.parentElement;
9327    while (element) {
9328      if (element == document.body) {
9329        return console.warn(unindent`
9330        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!
9331
9332        Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
9333
9334        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements
9335
9336        ——
9337        Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s
9338      `, element.outerHTML);
9339      }
9340      element = element.parentElement;
9341    }
9342  })();
9343  window.Turbo = Turbo2;
9344  start();
9345
9346  
vendor: 607 bytes, lines 9346-9363
9346// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js
9347  var consumer;
9348  async function getConsumer() {
9349    return consumer || setConsumer(createConsumer2().then(setConsumer));
9350  }
9351  function setConsumer(newConsumer) {
9352    return consumer = newConsumer;
9353  }
9354  async function createConsumer2() {
9355    const { createConsumer: createConsumer3 } = await Promise.resolve().then(() => (init_src(), src_exports));
9356    return createConsumer3();
9357  }
9358  async function subscribeTo(channel, mixin) {
9359    const { subscriptions } = await getConsumer();
9360    return subscriptions.create(channel, mixin);
9361  }
9362
9363  
vendor: 552 bytes, lines 9363-9380
9363// node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js
9364  function walk(obj) {
9365    if (!obj || typeof obj !== "object")
9366      return obj;
9367    if (obj instanceof Date || obj instanceof RegExp)
9368      return obj;
9369    if (Array.isArray(obj))
9370      return obj.map(walk);
9371    return Object.keys(obj).reduce(function(acc, key) {
9372      var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function(m5, x5) {
9373        return "_" + x5.toLowerCase();
9374      });
9375      acc[camel] = walk(obj[key]);
9376      return acc;
9377    }, {});
9378  }
9379
9380  
vendor: 1,308 bytes, lines 9380-9415
9380// node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js
9381  var TurboCableStreamSourceElement = class extends HTMLElement {
9382    async connectedCallback() {
9383      connectStreamSource(this);
9384      this.subscription = await subscribeTo(this.channel, {
9385        received: this.dispatchMessageEvent.bind(this),
9386        connected: this.subscriptionConnected.bind(this),
9387        disconnected: this.subscriptionDisconnected.bind(this)
9388      });
9389    }
9390    disconnectedCallback() {
9391      disconnectStreamSource(this);
9392      if (this.subscription)
9393        this.subscription.unsubscribe();
9394    }
9395    dispatchMessageEvent(data) {
9396      const event2 = new MessageEvent("message", { data });
9397      return this.dispatchEvent(event2);
9398    }
9399    subscriptionConnected() {
9400      this.setAttribute("connected", "");
9401    }
9402    subscriptionDisconnected() {
9403      this.removeAttribute("connected");
9404    }
9405    get channel() {
9406      const channel = this.getAttribute("channel");
9407      const signed_stream_name = this.getAttribute("signed-stream-name");
9408      return { channel, signed_stream_name, ...walk({ ...this.dataset }) };
9409    }
9410  };
9411  if (customElements.get("turbo-cable-stream-source") === void 0) {
9412    customElements.define("turbo-cable-stream-source", TurboCableStreamSourceElement);
9413  }
9414
9415  
vendor: 1,603 bytes, lines 9415-9460
9415// node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js
9416  function encodeMethodIntoRequestBody(event2) {
9417    if (event2.target instanceof HTMLFormElement) {
9418      const { target: form, detail: { fetchOptions } } = event2;
9419      form.addEventListener("turbo:submit-start", ({ detail: { formSubmission: { submitter } } }) => {
9420        const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams();
9421        const method = determineFetchMethod(submitter, body, form);
9422        if (!/get/i.test(method)) {
9423          if (/post/i.test(method)) {
9424            body.delete("_method");
9425          } else {
9426            body.set("_method", method);
9427          }
9428          fetchOptions.method = "post";
9429        }
9430      }, { once: true });
9431    }
9432  }
9433  function determineFetchMethod(submitter, body, form) {
9434    const formMethod = determineFormMethod(submitter);
9435    const overrideMethod = body.get("_method");
9436    const method = form.getAttribute("method") || "get";
9437    if (typeof formMethod == "string") {
9438      return formMethod;
9439    } else if (typeof overrideMethod == "string") {
9440      return overrideMethod;
9441    } else {
9442      return method;
9443    }
9444  }
9445  function determineFormMethod(submitter) {
9446    if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {
9447      if (submitter.hasAttribute("formmethod")) {
9448        return submitter.formMethod;
9449      } else {
9450        return null;
9451      }
9452    } else {
9453      return null;
9454    }
9455  }
9456  function isBodyInit(body) {
9457    return body instanceof FormData || body instanceof URLSearchParams;
9458  }
9459
9460  
vendor: 150 bytes, lines 9460-9463
9460// node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js
9461  addEventListener("turbo:before-fetch-request", encodeMethodIntoRequestBody);
9462
9463  
vendor: 31,071 bytes, lines 9463-10323
9463// node_modules/@rails/actiontext/app/assets/javascripts/actiontext.esm.js
9464  var sparkMd5 = {
9465    exports: {}
9466  };
9467  (function(module, exports) {
9468    (function(factory) {
9469      {
9470        module.exports = factory();
9471      }
9472    })(function(undefined$1) {
9473      var hex_chr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
9474      function md5cycle(x5, k4) {
9475        var a4 = x5[0], b4 = x5[1], c4 = x5[2], d3 = x5[3];
9476        a4 += (b4 & c4 | ~b4 & d3) + k4[0] - 680876936 | 0;
9477        a4 = (a4 << 7 | a4 >>> 25) + b4 | 0;
9478        d3 += (a4 & b4 | ~a4 & c4) + k4[1] - 389564586 | 0;
9479        d3 = (d3 << 12 | d3 >>> 20) + a4 | 0;
9480        c4 += (d3 & a4 | ~d3 & b4) + k4[2] + 606105819 | 0;
9481        c4 = (c4 << 17 | c4 >>> 15) + d3 | 0;
9482        b4 += (c4 & d3 | ~c4 & a4) + k4[3] - 1044525330 | 0;
9483        b4 = (b4 << 22 | b4 >>> 10) + c4 | 0;
9484        a4 += (b4 & c4 | ~b4 & d3) + k4[4] - 176418897 | 0;
9485        a4 = (a4 << 7 | a4 >>> 25) + b4 | 0;
9486        d3 += (a4 & b4 | ~a4 & c4) + k4[5] + 1200080426 | 0;
9487        d3 = (d3 << 12 | d3 >>> 20) + a4 | 0;
9488        c4 += (d3 & a4 | ~d3 & b4) + k4[6] - 1473231341 | 0;
9489        c4 = (c4 << 17 | c4 >>> 15) + d3 | 0;
9490        b4 += (c4 & d3 | ~c4 & a4) + k4[7] - 45705983 | 0;
9491        b4 = (b4 << 22 | b4 >>> 10) + c4 | 0;
9492        a4 += (b4 & c4 | ~b4 & d3) + k4[8] + 1770035416 | 0;
9493        a4 = (a4 << 7 | a4 >>> 25) + b4 | 0;
9494        d3 += (a4 & b4 | ~a4 & c4) + k4[9] - 1958414417 | 0;
9495        d3 = (d3 << 12 | d3 >>> 20) + a4 | 0;
9496        c4 += (d3 & a4 | ~d3 & b4) + k4[10] - 42063 | 0;
9497        c4 = (c4 << 17 | c4 >>> 15) + d3 | 0;
9498        b4 += (c4 & d3 | ~c4 & a4) + k4[11] - 1990404162 | 0;
9499        b4 = (b4 << 22 | b4 >>> 10) + c4 | 0;
9500        a4 += (b4 & c4 | ~b4 & d3) + k4[12] + 1804603682 | 0;
9501        a4 = (a4 << 7 | a4 >>> 25) + b4 | 0;
9502        d3 += (a4 & b4 | ~a4 & c4) + k4[13] - 40341101 | 0;
9503        d3 = (d3 << 12 | d3 >>> 20) + a4 | 0;
9504        c4 += (d3 & a4 | ~d3 & b4) + k4[14] - 1502002290 | 0;
9505        c4 = (c4 << 17 | c4 >>> 15) + d3 | 0;
9506        b4 += (c4 & d3 | ~c4 & a4) + k4[15] + 1236535329 | 0;
9507        b4 = (b4 << 22 | b4 >>> 10) + c4 | 0;
9508        a4 += (b4 & d3 | c4 & ~d3) + k4[1] - 165796510 | 0;
9509        a4 = (a4 << 5 | a4 >>> 27) + b4 | 0;
9510        d3 += (a4 & c4 | b4 & ~c4) + k4[6] - 1069501632 | 0;
9511        d3 = (d3 << 9 | d3 >>> 23) + a4 | 0;
9512        c4 += (d3 & b4 | a4 & ~b4) + k4[11] + 643717713 | 0;
9513        c4 = (c4 << 14 | c4 >>> 18) + d3 | 0;
9514        b4 += (c4 & a4 | d3 & ~a4) + k4[0] - 373897302 | 0;
9515        b4 = (b4 << 20 | b4 >>> 12) + c4 | 0;
9516        a4 += (b4 & d3 | c4 & ~d3) + k4[5] - 701558691 | 0;
9517        a4 = (a4 << 5 | a4 >>> 27) + b4 | 0;
9518        d3 += (a4 & c4 | b4 & ~c4) + k4[10] + 38016083 | 0;
9519        d3 = (d3 << 9 | d3 >>> 23) + a4 | 0;
9520        c4 += (d3 & b4 | a4 & ~b4) + k4[15] - 660478335 | 0;
9521        c4 = (c4 << 14 | c4 >>> 18) + d3 | 0;
9522        b4 += (c4 & a4 | d3 & ~a4) + k4[4] - 405537848 | 0;
9523        b4 = (b4 << 20 | b4 >>> 12) + c4 | 0;
9524        a4 += (b4 & d3 | c4 & ~d3) + k4[9] + 568446438 | 0;
9525        a4 = (a4 << 5 | a4 >>> 27) + b4 | 0;
9526        d3 += (a4 & c4 | b4 & ~c4) + k4[14] - 1019803690 | 0;
9527        d3 = (d3 << 9 | d3 >>> 23) + a4 | 0;
9528        c4 += (d3 & b4 | a4 & ~b4) + k4[3] - 187363961 | 0;
9529        c4 = (c4 << 14 | c4 >>> 18) + d3 | 0;
9530        b4 += (c4 & a4 | d3 & ~a4) + k4[8] + 1163531501 | 0;
9531        b4 = (b4 << 20 | b4 >>> 12) + c4 | 0;
9532        a4 += (b4 & d3 | c4 & ~d3) + k4[13] - 1444681467 | 0;
9533        a4 = (a4 << 5 | a4 >>> 27) + b4 | 0;
9534        d3 += (a4 & c4 | b4 & ~c4) + k4[2] - 51403784 | 0;
9535        d3 = (d3 << 9 | d3 >>> 23) + a4 | 0;
9536        c4 += (d3 & b4 | a4 & ~b4) + k4[7] + 1735328473 | 0;
9537        c4 = (c4 << 14 | c4 >>> 18) + d3 | 0;
9538        b4 += (c4 & a4 | d3 & ~a4) + k4[12] - 1926607734 | 0;
9539        b4 = (b4 << 20 | b4 >>> 12) + c4 | 0;
9540        a4 += (b4 ^ c4 ^ d3) + k4[5] - 378558 | 0;
9541        a4 = (a4 << 4 | a4 >>> 28) + b4 | 0;
9542        d3 += (a4 ^ b4 ^ c4) + k4[8] - 2022574463 | 0;
9543        d3 = (d3 << 11 | d3 >>> 21) + a4 | 0;
9544        c4 += (d3 ^ a4 ^ b4) + k4[11] + 1839030562 | 0;
9545        c4 = (c4 << 16 | c4 >>> 16) + d3 | 0;
9546        b4 += (c4 ^ d3 ^ a4) + k4[14] - 35309556 | 0;
9547        b4 = (b4 << 23 | b4 >>> 9) + c4 | 0;
9548        a4 += (b4 ^ c4 ^ d3) + k4[1] - 1530992060 | 0;
9549        a4 = (a4 << 4 | a4 >>> 28) + b4 | 0;
9550        d3 += (a4 ^ b4 ^ c4) + k4[4] + 1272893353 | 0;
9551        d3 = (d3 << 11 | d3 >>> 21) + a4 | 0;
9552        c4 += (d3 ^ a4 ^ b4) + k4[7] - 155497632 | 0;
9553        c4 = (c4 << 16 | c4 >>> 16) + d3 | 0;
9554        b4 += (c4 ^ d3 ^ a4) + k4[10] - 1094730640 | 0;
9555        b4 = (b4 << 23 | b4 >>> 9) + c4 | 0;
9556        a4 += (b4 ^ c4 ^ d3) + k4[13] + 681279174 | 0;
9557        a4 = (a4 << 4 | a4 >>> 28) + b4 | 0;
9558        d3 += (a4 ^ b4 ^ c4) + k4[0] - 358537222 | 0;
9559        d3 = (d3 << 11 | d3 >>> 21) + a4 | 0;
9560        c4 += (d3 ^ a4 ^ b4) + k4[3] - 722521979 | 0;
9561        c4 = (c4 << 16 | c4 >>> 16) + d3 | 0;
9562        b4 += (c4 ^ d3 ^ a4) + k4[6] + 76029189 | 0;
9563        b4 = (b4 << 23 | b4 >>> 9) + c4 | 0;
9564        a4 += (b4 ^ c4 ^ d3) + k4[9] - 640364487 | 0;
9565        a4 = (a4 << 4 | a4 >>> 28) + b4 | 0;
9566        d3 += (a4 ^ b4 ^ c4) + k4[12] - 421815835 | 0;
9567        d3 = (d3 << 11 | d3 >>> 21) + a4 | 0;
9568        c4 += (d3 ^ a4 ^ b4) + k4[15] + 530742520 | 0;
9569        c4 = (c4 << 16 | c4 >>> 16) + d3 | 0;
9570        b4 += (c4 ^ d3 ^ a4) + k4[2] - 995338651 | 0;
9571        b4 = (b4 << 23 | b4 >>> 9) + c4 | 0;
9572        a4 += (c4 ^ (b4 | ~d3)) + k4[0] - 198630844 | 0;
9573        a4 = (a4 << 6 | a4 >>> 26) + b4 | 0;
9574        d3 += (b4 ^ (a4 | ~c4)) + k4[7] + 1126891415 | 0;
9575        d3 = (d3 << 10 | d3 >>> 22) + a4 | 0;
9576        c4 += (a4 ^ (d3 | ~b4)) + k4[14] - 1416354905 | 0;
9577        c4 = (c4 << 15 | c4 >>> 17) + d3 | 0;
9578        b4 += (d3 ^ (c4 | ~a4)) + k4[5] - 57434055 | 0;
9579        b4 = (b4 << 21 | b4 >>> 11) + c4 | 0;
9580        a4 += (c4 ^ (b4 | ~d3)) + k4[12] + 1700485571 | 0;
9581        a4 = (a4 << 6 | a4 >>> 26) + b4 | 0;
9582        d3 += (b4 ^ (a4 | ~c4)) + k4[3] - 1894986606 | 0;
9583        d3 = (d3 << 10 | d3 >>> 22) + a4 | 0;
9584        c4 += (a4 ^ (d3 | ~b4)) + k4[10] - 1051523 | 0;
9585        c4 = (c4 << 15 | c4 >>> 17) + d3 | 0;
9586        b4 += (d3 ^ (c4 | ~a4)) + k4[1] - 2054922799 | 0;
9587        b4 = (b4 << 21 | b4 >>> 11) + c4 | 0;
9588        a4 += (c4 ^ (b4 | ~d3)) + k4[8] + 1873313359 | 0;
9589        a4 = (a4 << 6 | a4 >>> 26) + b4 | 0;
9590        d3 += (b4 ^ (a4 | ~c4)) + k4[15] - 30611744 | 0;
9591        d3 = (d3 << 10 | d3 >>> 22) + a4 | 0;
9592        c4 += (a4 ^ (d3 | ~b4)) + k4[6] - 1560198380 | 0;
9593        c4 = (c4 << 15 | c4 >>> 17) + d3 | 0;
9594        b4 += (d3 ^ (c4 | ~a4)) + k4[13] + 1309151649 | 0;
9595        b4 = (b4 << 21 | b4 >>> 11) + c4 | 0;
9596        a4 += (c4 ^ (b4 | ~d3)) + k4[4] - 145523070 | 0;
9597        a4 = (a4 << 6 | a4 >>> 26) + b4 | 0;
9598        d3 += (b4 ^ (a4 | ~c4)) + k4[11] - 1120210379 | 0;
9599        d3 = (d3 << 10 | d3 >>> 22) + a4 | 0;
9600        c4 += (a4 ^ (d3 | ~b4)) + k4[2] + 718787259 | 0;
9601        c4 = (c4 << 15 | c4 >>> 17) + d3 | 0;
9602        b4 += (d3 ^ (c4 | ~a4)) + k4[9] - 343485551 | 0;
9603        b4 = (b4 << 21 | b4 >>> 11) + c4 | 0;
9604        x5[0] = a4 + x5[0] | 0;
9605        x5[1] = b4 + x5[1] | 0;
9606        x5[2] = c4 + x5[2] | 0;
9607        x5[3] = d3 + x5[3] | 0;
9608      }
9609      function md5blk(s4) {
9610        var md5blks = [], i4;
9611        for (i4 = 0; i4 < 64; i4 += 4) {
9612          md5blks[i4 >> 2] = s4.charCodeAt(i4) + (s4.charCodeAt(i4 + 1) << 8) + (s4.charCodeAt(i4 + 2) << 16) + (s4.charCodeAt(i4 + 3) << 24);
9613        }
9614        return md5blks;
9615      }
9616      function md5blk_array(a4) {
9617        var md5blks = [], i4;
9618        for (i4 = 0; i4 < 64; i4 += 4) {
9619          md5blks[i4 >> 2] = a4[i4] + (a4[i4 + 1] << 8) + (a4[i4 + 2] << 16) + (a4[i4 + 3] << 24);
9620        }
9621        return md5blks;
9622      }
9623      function md51(s4) {
9624        var n3 = s4.length, state = [1732584193, -271733879, -1732584194, 271733878], i4, length, tail, tmp, lo, hi2;
9625        for (i4 = 64; i4 <= n3; i4 += 64) {
9626          md5cycle(state, md5blk(s4.substring(i4 - 64, i4)));
9627        }
9628        s4 = s4.substring(i4 - 64);
9629        length = s4.length;
9630        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
9631        for (i4 = 0; i4 < length; i4 += 1) {
9632          tail[i4 >> 2] |= s4.charCodeAt(i4) << (i4 % 4 << 3);
9633        }
9634        tail[i4 >> 2] |= 128 << (i4 % 4 << 3);
9635        if (i4 > 55) {
9636          md5cycle(state, tail);
9637          for (i4 = 0; i4 < 16; i4 += 1) {
9638            tail[i4] = 0;
9639          }
9640        }
9641        tmp = n3 * 8;
9642        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
9643        lo = parseInt(tmp[2], 16);
9644        hi2 = parseInt(tmp[1], 16) || 0;
9645        tail[14] = lo;
9646        tail[15] = hi2;
9647        md5cycle(state, tail);
9648        return state;
9649      }
9650      function md51_array(a4) {
9651        var n3 = a4.length, state = [1732584193, -271733879, -1732584194, 271733878], i4, length, tail, tmp, lo, hi2;
9652        for (i4 = 64; i4 <= n3; i4 += 64) {
9653          md5cycle(state, md5blk_array(a4.subarray(i4 - 64, i4)));
9654        }
9655        a4 = i4 - 64 < n3 ? a4.subarray(i4 - 64) : new Uint8Array(0);
9656        length = a4.length;
9657        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
9658        for (i4 = 0; i4 < length; i4 += 1) {
9659          tail[i4 >> 2] |= a4[i4] << (i4 % 4 << 3);
9660        }
9661        tail[i4 >> 2] |= 128 << (i4 % 4 << 3);
9662        if (i4 > 55) {
9663          md5cycle(state, tail);
9664          for (i4 = 0; i4 < 16; i4 += 1) {
9665            tail[i4] = 0;
9666          }
9667        }
9668        tmp = n3 * 8;
9669        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
9670        lo = parseInt(tmp[2], 16);
9671        hi2 = parseInt(tmp[1], 16) || 0;
9672        tail[14] = lo;
9673        tail[15] = hi2;
9674        md5cycle(state, tail);
9675        return state;
9676      }
9677      function rhex(n3) {
9678        var s4 = "", j5;
9679        for (j5 = 0; j5 < 4; j5 += 1) {
9680          s4 += hex_chr[n3 >> j5 * 8 + 4 & 15] + hex_chr[n3 >> j5 * 8 & 15];
9681        }
9682        return s4;
9683      }
9684      function hex(x5) {
9685        var i4;
9686        for (i4 = 0; i4 < x5.length; i4 += 1) {
9687          x5[i4] = rhex(x5[i4]);
9688        }
9689        return x5.join("");
9690      }
9691      if (hex(md51("hello")) !== "5d41402abc4b2a76b9719d911017c592")
9692        ;
9693      if (typeof ArrayBuffer !== "undefined" && !ArrayBuffer.prototype.slice) {
9694        (function() {
9695          function clamp(val, length) {
9696            val = val | 0 || 0;
9697            if (val < 0) {
9698              return Math.max(val + length, 0);
9699            }
9700            return Math.min(val, length);
9701          }
9702          ArrayBuffer.prototype.slice = function(from, to2) {
9703            var length = this.byteLength, begin = clamp(from, length), end2 = length, num, target, targetArray, sourceArray;
9704            if (to2 !== undefined$1) {
9705              end2 = clamp(to2, length);
9706            }
9707            if (begin > end2) {
9708              return new ArrayBuffer(0);
9709            }
9710            num = end2 - begin;
9711            target = new ArrayBuffer(num);
9712            targetArray = new Uint8Array(target);
9713            sourceArray = new Uint8Array(this, begin, num);
9714            targetArray.set(sourceArray);
9715            return target;
9716          };
9717        })();
9718      }
9719      function toUtf8(str) {
9720        if (/[\u0080-\uFFFF]/.test(str)) {
9721          str = unescape(encodeURIComponent(str));
9722        }
9723        return str;
9724      }
9725      function utf8Str2ArrayBuffer(str, returnUInt8Array) {
9726        var length = str.length, buff = new ArrayBuffer(length), arr = new Uint8Array(buff), i4;
9727        for (i4 = 0; i4 < length; i4 += 1) {
9728          arr[i4] = str.charCodeAt(i4);
9729        }
9730        return returnUInt8Array ? arr : buff;
9731      }
9732      function arrayBuffer2Utf8Str(buff) {
9733        return String.fromCharCode.apply(null, new Uint8Array(buff));
9734      }
9735      function concatenateArrayBuffers(first, second, returnUInt8Array) {
9736        var result = new Uint8Array(first.byteLength + second.byteLength);
9737        result.set(new Uint8Array(first));
9738        result.set(new Uint8Array(second), first.byteLength);
9739        return returnUInt8Array ? result : result.buffer;
9740      }
9741      function hexToBinaryString(hex2) {
9742        var bytes = [], length = hex2.length, x5;
9743        for (x5 = 0; x5 < length - 1; x5 += 2) {
9744          bytes.push(parseInt(hex2.substr(x5, 2), 16));
9745        }
9746        return String.fromCharCode.apply(String, bytes);
9747      }
9748      function SparkMD52() {
9749        this.reset();
9750      }
9751      SparkMD52.prototype.append = function(str) {
9752        this.appendBinary(toUtf8(str));
9753        return this;
9754      };
9755      SparkMD52.prototype.appendBinary = function(contents) {
9756        this._buff += contents;
9757        this._length += contents.length;
9758        var length = this._buff.length, i4;
9759        for (i4 = 64; i4 <= length; i4 += 64) {
9760          md5cycle(this._hash, md5blk(this._buff.substring(i4 - 64, i4)));
9761        }
9762        this._buff = this._buff.substring(i4 - 64);
9763        return this;
9764      };
9765      SparkMD52.prototype.end = function(raw) {
9766        var buff = this._buff, length = buff.length, i4, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ret;
9767        for (i4 = 0; i4 < length; i4 += 1) {
9768          tail[i4 >> 2] |= buff.charCodeAt(i4) << (i4 % 4 << 3);
9769        }
9770        this._finish(tail, length);
9771        ret = hex(this._hash);
9772        if (raw) {
9773          ret = hexToBinaryString(ret);
9774        }
9775        this.reset();
9776        return ret;
9777      };
9778      SparkMD52.prototype.reset = function() {
9779        this._buff = "";
9780        this._length = 0;
9781        this._hash = [1732584193, -271733879, -1732584194, 271733878];
9782        return this;
9783      };
9784      SparkMD52.prototype.getState = function() {
9785        return {
9786          buff: this._buff,
9787          length: this._length,
9788          hash: this._hash.slice()
9789        };
9790      };
9791      SparkMD52.prototype.setState = function(state) {
9792        this._buff = state.buff;
9793        this._length = state.length;
9794        this._hash = state.hash;
9795        return this;
9796      };
9797      SparkMD52.prototype.destroy = function() {
9798        delete this._hash;
9799        delete this._buff;
9800        delete this._length;
9801      };
9802      SparkMD52.prototype._finish = function(tail, length) {
9803        var i4 = length, tmp, lo, hi2;
9804        tail[i4 >> 2] |= 128 << (i4 % 4 << 3);
9805        if (i4 > 55) {
9806          md5cycle(this._hash, tail);
9807          for (i4 = 0; i4 < 16; i4 += 1) {
9808            tail[i4] = 0;
9809          }
9810        }
9811        tmp = this._length * 8;
9812        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
9813        lo = parseInt(tmp[2], 16);
9814        hi2 = parseInt(tmp[1], 16) || 0;
9815        tail[14] = lo;
9816        tail[15] = hi2;
9817        md5cycle(this._hash, tail);
9818      };
9819      SparkMD52.hash = function(str, raw) {
9820        return SparkMD52.hashBinary(toUtf8(str), raw);
9821      };
9822      SparkMD52.hashBinary = function(content, raw) {
9823        var hash3 = md51(content), ret = hex(hash3);
9824        return raw ? hexToBinaryString(ret) : ret;
9825      };
9826      SparkMD52.ArrayBuffer = function() {
9827        this.reset();
9828      };
9829      SparkMD52.ArrayBuffer.prototype.append = function(arr) {
9830        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true), length = buff.length, i4;
9831        this._length += arr.byteLength;
9832        for (i4 = 64; i4 <= length; i4 += 64) {
9833          md5cycle(this._hash, md5blk_array(buff.subarray(i4 - 64, i4)));
9834        }
9835        this._buff = i4 - 64 < length ? new Uint8Array(buff.buffer.slice(i4 - 64)) : new Uint8Array(0);
9836        return this;
9837      };
9838      SparkMD52.ArrayBuffer.prototype.end = function(raw) {
9839        var buff = this._buff, length = buff.length, tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], i4, ret;
9840        for (i4 = 0; i4 < length; i4 += 1) {
9841          tail[i4 >> 2] |= buff[i4] << (i4 % 4 << 3);
9842        }
9843        this._finish(tail, length);
9844        ret = hex(this._hash);
9845        if (raw) {
9846          ret = hexToBinaryString(ret);
9847        }
9848        this.reset();
9849        return ret;
9850      };
9851      SparkMD52.ArrayBuffer.prototype.reset = function() {
9852        this._buff = new Uint8Array(0);
9853        this._length = 0;
9854        this._hash = [1732584193, -271733879, -1732584194, 271733878];
9855        return this;
9856      };
9857      SparkMD52.ArrayBuffer.prototype.getState = function() {
9858        var state = SparkMD52.prototype.getState.call(this);
9859        state.buff = arrayBuffer2Utf8Str(state.buff);
9860        return state;
9861      };
9862      SparkMD52.ArrayBuffer.prototype.setState = function(state) {
9863        state.buff = utf8Str2ArrayBuffer(state.buff, true);
9864        return SparkMD52.prototype.setState.call(this, state);
9865      };
9866      SparkMD52.ArrayBuffer.prototype.destroy = SparkMD52.prototype.destroy;
9867      SparkMD52.ArrayBuffer.prototype._finish = SparkMD52.prototype._finish;
9868      SparkMD52.ArrayBuffer.hash = function(arr, raw) {
9869        var hash3 = md51_array(new Uint8Array(arr)), ret = hex(hash3);
9870        return raw ? hexToBinaryString(ret) : ret;
9871      };
9872      return SparkMD52;
9873    });
9874  })(sparkMd5);
9875  var SparkMD5 = sparkMd5.exports;
9876  var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
9877  var FileChecksum = class {
9878    static create(file, callback) {
9879      const instance = new FileChecksum(file);
9880      instance.create(callback);
9881    }
9882    constructor(file) {
9883      this.file = file;
9884      this.chunkSize = 2097152;
9885      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);
9886      this.chunkIndex = 0;
9887    }
9888    create(callback) {
9889      this.callback = callback;
9890      this.md5Buffer = new SparkMD5.ArrayBuffer();
9891      this.fileReader = new FileReader();
9892      this.fileReader.addEventListener("load", (event2) => this.fileReaderDidLoad(event2));
9893      this.fileReader.addEventListener("error", (event2) => this.fileReaderDidError(event2));
9894      this.readNextChunk();
9895    }
9896    fileReaderDidLoad(event2) {
9897      this.md5Buffer.append(event2.target.result);
9898      if (!this.readNextChunk()) {
9899        const binaryDigest = this.md5Buffer.end(true);
9900        const base64digest = btoa(binaryDigest);
9901        this.callback(null, base64digest);
9902      }
9903    }
9904    fileReaderDidError(event2) {
9905      this.callback(`Error reading ${this.file.name}`);
9906    }
9907    readNextChunk() {
9908      if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {
9909        const start5 = this.chunkIndex * this.chunkSize;
9910        const end2 = Math.min(start5 + this.chunkSize, this.file.size);
9911        const bytes = fileSlice.call(this.file, start5, end2);
9912        this.fileReader.readAsArrayBuffer(bytes);
9913        this.chunkIndex++;
9914        return true;
9915      } else {
9916        return false;
9917      }
9918    }
9919  };
9920  function getMetaValue(name) {
9921    const element = findElement(document.head, `meta[name="${name}"]`);
9922    if (element) {
9923      return element.getAttribute("content");
9924    }
9925  }
9926  function findElements(root, selector) {
9927    if (typeof root == "string") {
9928      selector = root;
9929      root = document;
9930    }
9931    const elements = root.querySelectorAll(selector);
9932    return toArray(elements);
9933  }
9934  function findElement(root, selector) {
9935    if (typeof root == "string") {
9936      selector = root;
9937      root = document;
9938    }
9939    return root.querySelector(selector);
9940  }
9941  function dispatchEvent2(element, type, eventInit = {}) {
9942    const { disabled } = element;
9943    const { bubbles, cancelable, detail } = eventInit;
9944    const event2 = document.createEvent("Event");
9945    event2.initEvent(type, bubbles || true, cancelable || true);
9946    event2.detail = detail || {};
9947    try {
9948      element.disabled = false;
9949      element.dispatchEvent(event2);
9950    } finally {
9951      element.disabled = disabled;
9952    }
9953    return event2;
9954  }
9955  function toArray(value) {
9956    if (Array.isArray(value)) {
9957      return value;
9958    } else if (Array.from) {
9959      return Array.from(value);
9960    } else {
9961      return [].slice.call(value);
9962    }
9963  }
9964  var BlobRecord = class {
9965    constructor(file, checksum, url, customHeaders = {}) {
9966      this.file = file;
9967      this.attributes = {
9968        filename: file.name,
9969        content_type: file.type || "application/octet-stream",
9970        byte_size: file.size,
9971        checksum
9972      };
9973      this.xhr = new XMLHttpRequest();
9974      this.xhr.open("POST", url, true);
9975      this.xhr.responseType = "json";
9976      this.xhr.setRequestHeader("Content-Type", "application/json");
9977      this.xhr.setRequestHeader("Accept", "application/json");
9978      this.xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
9979      Object.keys(customHeaders).forEach((headerKey) => {
9980        this.xhr.setRequestHeader(headerKey, customHeaders[headerKey]);
9981      });
9982      const csrfToken2 = getMetaValue("csrf-token");
9983      if (csrfToken2 != void 0) {
9984        this.xhr.setRequestHeader("X-CSRF-Token", csrfToken2);
9985      }
9986      this.xhr.addEventListener("load", (event2) => this.requestDidLoad(event2));
9987      this.xhr.addEventListener("error", (event2) => this.requestDidError(event2));
9988    }
9989    get status() {
9990      return this.xhr.status;
9991    }
9992    get response() {
9993      const { responseType, response } = this.xhr;
9994      if (responseType == "json") {
9995        return response;
9996      } else {
9997        return JSON.parse(response);
9998      }
9999    }
10000    create(callback) {
10001      this.callback = callback;
10002      this.xhr.send(JSON.stringify({
10003        blob: this.attributes
10004      }));
10005    }
10006    requestDidLoad(event2) {
10007      if (this.status >= 200 && this.status < 300) {
10008        const { response } = this;
10009        const { direct_upload } = response;
10010        delete response.direct_upload;
10011        this.attributes = response;
10012        this.directUploadData = direct_upload;
10013        this.callback(null, this.toJSON());
10014      } else {
10015        this.requestDidError(event2);
10016      }
10017    }
10018    requestDidError(event2) {
10019      this.callback(`Error creating Blob for "${this.file.name}". Status: ${this.status}`);
10020    }
10021    toJSON() {
10022      const result = {};
10023      for (const key in this.attributes) {
10024        result[key] = this.attributes[key];
10025      }
10026      return result;
10027    }
10028  };
10029  var BlobUpload = class {
10030    constructor(blob) {
10031      this.blob = blob;
10032      this.file = blob.file;
10033      const { url, headers } = blob.directUploadData;
10034      this.xhr = new XMLHttpRequest();
10035      this.xhr.open("PUT", url, true);
10036      this.xhr.responseType = "text";
10037      for (const key in headers) {
10038        this.xhr.setRequestHeader(key, headers[key]);
10039      }
10040      this.xhr.addEventListener("load", (event2) => this.requestDidLoad(event2));
10041      this.xhr.addEventListener("error", (event2) => this.requestDidError(event2));
10042    }
10043    create(callback) {
10044      this.callback = callback;
10045      this.xhr.send(this.file.slice());
10046    }
10047    requestDidLoad(event2) {
10048      const { status, response } = this.xhr;
10049      if (status >= 200 && status < 300) {
10050        this.callback(null, response);
10051      } else {
10052        this.requestDidError(event2);
10053      }
10054    }
10055    requestDidError(event2) {
10056      this.callback(`Error storing "${this.file.name}". Status: ${this.xhr.status}`);
10057    }
10058  };
10059  var id = 0;
10060  var DirectUpload = class {
10061    constructor(file, url, delegate2, customHeaders = {}) {
10062      this.id = ++id;
10063      this.file = file;
10064      this.url = url;
10065      this.delegate = delegate2;
10066      this.customHeaders = customHeaders;
10067    }
10068    create(callback) {
10069      FileChecksum.create(this.file, (error2, checksum) => {
10070        if (error2) {
10071          callback(error2);
10072          return;
10073        }
10074        const blob = new BlobRecord(this.file, checksum, this.url, this.customHeaders);
10075        notify(this.delegate, "directUploadWillCreateBlobWithXHR", blob.xhr);
10076        blob.create((error3) => {
10077          if (error3) {
10078            callback(error3);
10079          } else {
10080            const upload = new BlobUpload(blob);
10081            notify(this.delegate, "directUploadWillStoreFileWithXHR", upload.xhr);
10082            upload.create((error4) => {
10083              if (error4) {
10084                callback(error4);
10085              } else {
10086                callback(null, blob.toJSON());
10087              }
10088            });
10089          }
10090        });
10091      });
10092    }
10093  };
10094  function notify(object, methodName, ...messages) {
10095    if (object && typeof object[methodName] == "function") {
10096      return object[methodName](...messages);
10097    }
10098  }
10099  var DirectUploadController = class {
10100    constructor(input, file) {
10101      this.input = input;
10102      this.file = file;
10103      this.directUpload = new DirectUpload(this.file, this.url, this);
10104      this.dispatch("initialize");
10105    }
10106    start(callback) {
10107      const hiddenInput = document.createElement("input");
10108      hiddenInput.type = "hidden";
10109      hiddenInput.name = this.input.name;
10110      this.input.insertAdjacentElement("beforebegin", hiddenInput);
10111      this.dispatch("start");
10112      this.directUpload.create((error2, attributes) => {
10113        if (error2) {
10114          hiddenInput.parentNode.removeChild(hiddenInput);
10115          this.dispatchError(error2);
10116        } else {
10117          hiddenInput.value = attributes.signed_id;
10118        }
10119        this.dispatch("end");
10120        callback(error2);
10121      });
10122    }
10123    uploadRequestDidProgress(event2) {
10124      const progress = event2.loaded / event2.total * 100;
10125      if (progress) {
10126        this.dispatch("progress", {
10127          progress
10128        });
10129      }
10130    }
10131    get url() {
10132      return this.input.getAttribute("data-direct-upload-url");
10133    }
10134    dispatch(name, detail = {}) {
10135      detail.file = this.file;
10136      detail.id = this.directUpload.id;
10137      return dispatchEvent2(this.input, `direct-upload:${name}`, {
10138        detail
10139      });
10140    }
10141    dispatchError(error2) {
10142      const event2 = this.dispatch("error", {
10143        error: error2
10144      });
10145      if (!event2.defaultPrevented) {
10146        alert(error2);
10147      }
10148    }
10149    directUploadWillCreateBlobWithXHR(xhr) {
10150      this.dispatch("before-blob-request", {
10151        xhr
10152      });
10153    }
10154    directUploadWillStoreFileWithXHR(xhr) {
10155      this.dispatch("before-storage-request", {
10156        xhr
10157      });
10158      xhr.upload.addEventListener("progress", (event2) => this.uploadRequestDidProgress(event2));
10159    }
10160  };
10161  var inputSelector = "input[type=file][data-direct-upload-url]:not([disabled])";
10162  var DirectUploadsController = class {
10163    constructor(form) {
10164      this.form = form;
10165      this.inputs = findElements(form, inputSelector).filter((input) => input.files.length);
10166    }
10167    start(callback) {
10168      const controllers = this.createDirectUploadControllers();
10169      const startNextController = () => {
10170        const controller = controllers.shift();
10171        if (controller) {
10172          controller.start((error2) => {
10173            if (error2) {
10174              callback(error2);
10175              this.dispatch("end");
10176            } else {
10177              startNextController();
10178            }
10179          });
10180        } else {
10181          callback();
10182          this.dispatch("end");
10183        }
10184      };
10185      this.dispatch("start");
10186      startNextController();
10187    }
10188    createDirectUploadControllers() {
10189      const controllers = [];
10190      this.inputs.forEach((input) => {
10191        toArray(input.files).forEach((file) => {
10192          const controller = new DirectUploadController(input, file);
10193          controllers.push(controller);
10194        });
10195      });
10196      return controllers;
10197    }
10198    dispatch(name, detail = {}) {
10199      return dispatchEvent2(this.form, `direct-uploads:${name}`, {
10200        detail
10201      });
10202    }
10203  };
10204  var processingAttribute = "data-direct-uploads-processing";
10205  var submitButtonsByForm = /* @__PURE__ */ new WeakMap();
10206  var started = false;
10207  function start2() {
10208    if (!started) {
10209      started = true;
10210      document.addEventListener("click", didClick, true);
10211      document.addEventListener("submit", didSubmitForm, true);
10212      document.addEventListener("ajax:before", didSubmitRemoteElement);
10213    }
10214  }
10215  function didClick(event2) {
10216    const button = event2.target.closest("button, input");
10217    if (button && button.type === "submit" && button.form) {
10218      submitButtonsByForm.set(button.form, button);
10219    }
10220  }
10221  function didSubmitForm(event2) {
10222    handleFormSubmissionEvent(event2);
10223  }
10224  function didSubmitRemoteElement(event2) {
10225    if (event2.target.tagName == "FORM") {
10226      handleFormSubmissionEvent(event2);
10227    }
10228  }
10229  function handleFormSubmissionEvent(event2) {
10230    const form = event2.target;
10231    if (form.hasAttribute(processingAttribute)) {
10232      event2.preventDefault();
10233      return;
10234    }
10235    const controller = new DirectUploadsController(form);
10236    const { inputs } = controller;
10237    if (inputs.length) {
10238      event2.preventDefault();
10239      form.setAttribute(processingAttribute, "");
10240      inputs.forEach(disable);
10241      controller.start((error2) => {
10242        form.removeAttribute(processingAttribute);
10243        if (error2) {
10244          inputs.forEach(enable);
10245        } else {
10246          submitForm(form);
10247        }
10248      });
10249    }
10250  }
10251  function submitForm(form) {
10252    let button = submitButtonsByForm.get(form) || findElement(form, "input[type=submit], button[type=submit]");
10253    if (button) {
10254      const { disabled } = button;
10255      button.disabled = false;
10256      button.focus();
10257      button.click();
10258      button.disabled = disabled;
10259    } else {
10260      button = document.createElement("input");
10261      button.type = "submit";
10262      button.style.display = "none";
10263      form.appendChild(button);
10264      button.click();
10265      form.removeChild(button);
10266    }
10267    submitButtonsByForm.delete(form);
10268  }
10269  function disable(input) {
10270    input.disabled = true;
10271  }
10272  function enable(input) {
10273    input.disabled = false;
10274  }
10275  function autostart() {
10276    if (window.ActiveStorage) {
10277      start2();
10278    }
10279  }
10280  setTimeout(autostart, 1);
10281  var AttachmentUpload = class {
10282    constructor(attachment, element) {
10283      this.attachment = attachment;
10284      this.element = element;
10285      this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);
10286    }
10287    start() {
10288      this.directUpload.create(this.directUploadDidComplete.bind(this));
10289    }
10290    directUploadWillStoreFileWithXHR(xhr) {
10291      xhr.upload.addEventListener("progress", (event2) => {
10292        const progress = event2.loaded / event2.total * 100;
10293        this.attachment.setUploadProgress(progress);
10294      });
10295    }
10296    directUploadDidComplete(error2, attributes) {
10297      if (error2) {
10298        throw new Error(`Direct upload failed: ${error2}`);
10299      }
10300      this.attachment.setAttributes({
10301        sgid: attributes.attachable_sgid,
10302        url: this.createBlobUrl(attributes.signed_id, attributes.filename)
10303      });
10304    }
10305    createBlobUrl(signedId, filename) {
10306      return this.blobUrlTemplate.replace(":signed_id", signedId).replace(":filename", encodeURIComponent(filename));
10307    }
10308    get directUploadUrl() {
10309      return this.element.dataset.directUploadUrl;
10310    }
10311    get blobUrlTemplate() {
10312      return this.element.dataset.blobUrlTemplate;
10313    }
10314  };
10315  addEventListener("trix-attachment-add", (event2) => {
10316    const { attachment, target } = event2;
10317    if (attachment.file) {
10318      const upload = new AttachmentUpload(attachment, target);
10319      upload.start();
10320    }
10321  });
10322
10323  
vendor: 270,774 bytes, lines 10323-16245
10323// node_modules/trix/dist/trix.esm.min.js
10324  var t = "2.1.11";
10325  var e = "[data-trix-attachment]";
10326  var i = { preview: { presentation: "gallery", caption: { name: true, size: true } }, file: { caption: { size: true } } };
10327  var n = { default: { tagName: "div", parse: false }, quote: { tagName: "blockquote", nestable: true }, heading1: { tagName: "h1", terminal: true, breakOnReturn: true, group: false }, code: { tagName: "pre", terminal: true, htmlAttributes: ["language"], text: { plaintext: true } }, bulletList: { tagName: "ul", parse: false }, bullet: { tagName: "li", listAttribute: "bulletList", group: false, nestable: true, test(t5) {
10328    return r(t5.parentNode) === n[this.listAttribute].tagName;
10329  } }, numberList: { tagName: "ol", parse: false }, number: { tagName: "li", listAttribute: "numberList", group: false, nestable: true, test(t5) {
10330    return r(t5.parentNode) === n[this.listAttribute].tagName;
10331  } }, attachmentGallery: { tagName: "div", exclusive: true, terminal: true, parse: false, group: false } };
10332  var r = (t5) => {
10333    var e4;
10334    return null == t5 || null === (e4 = t5.tagName) || void 0 === e4 ? void 0 : e4.toLowerCase();
10335  };
10336  var o = navigator.userAgent.match(/android\s([0-9]+.*Chrome)/i);
10337  var s = o && parseInt(o[1]);
10338  var a = { composesExistingText: /Android.*Chrome/.test(navigator.userAgent), recentAndroid: s && s > 12, samsungAndroid: s && navigator.userAgent.match(/Android.*SM-/), forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent), supportsInputEvents: "undefined" != typeof InputEvent && ["data", "getTargetRanges", "inputType"].every((t5) => t5 in InputEvent.prototype) };
10339  var l = { ADD_ATTR: ["language"], SAFE_FOR_XML: false, RETURN_DOM: true };
10340  var c = { attachFiles: "Attach Files", bold: "Bold", bullets: "Bullets", byte: "Byte", bytes: "Bytes", captionPlaceholder: "Add a caption\u2026", code: "Code", heading1: "Heading", indent: "Increase Level", italic: "Italic", link: "Link", numbers: "Numbers", outdent: "Decrease Level", quote: "Quote", redo: "Redo", remove: "Remove", strike: "Strikethrough", undo: "Undo", unlink: "Unlink", url: "URL", urlPlaceholder: "Enter a URL\u2026", GB: "GB", KB: "KB", MB: "MB", PB: "PB", TB: "TB" };
10341  var u = [c.bytes, c.KB, c.MB, c.GB, c.TB, c.PB];
10342  var h = { prefix: "IEC", precision: 2, formatter(t5) {
10343    switch (t5) {
10344      case 0:
10345        return "0 ".concat(c.bytes);
10346      case 1:
10347        return "1 ".concat(c.byte);
10348      default:
10349        let e4;
10350        "SI" === this.prefix ? e4 = 1e3 : "IEC" === this.prefix && (e4 = 1024);
10351        const i4 = Math.floor(Math.log(t5) / Math.log(e4)), n3 = (t5 / Math.pow(e4, i4)).toFixed(this.precision).replace(/0*$/, "").replace(/\.$/, "");
10352        return "".concat(n3, " ").concat(u[i4]);
10353    }
10354  } };
10355  var d = "\uFEFF";
10356  var g = "\xA0";
10357  var m = function(t5) {
10358    for (const e4 in t5) {
10359      const i4 = t5[e4];
10360      this[e4] = i4;
10361    }
10362    return this;
10363  };
10364  var p = document.documentElement;
10365  var f = p.matches;
10366  var b = function(t5) {
10367    let { onElement: e4, matchingSelector: i4, withCallback: n3, inPhase: r4, preventDefault: o3, times: s4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10368    const a4 = e4 || p, l4 = i4, c4 = "capturing" === r4, u4 = function(t6) {
10369      null != s4 && 0 == --s4 && u4.destroy();
10370      const e5 = y(t6.target, { matchingSelector: l4 });
10371      null != e5 && (null == n3 || n3.call(e5, t6, e5), o3 && t6.preventDefault());
10372    };
10373    return u4.destroy = () => a4.removeEventListener(t5, u4, c4), a4.addEventListener(t5, u4, c4), u4;
10374  };
10375  var v = function(t5) {
10376    let { onElement: e4, bubbles: i4, cancelable: n3, attributes: r4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10377    const o3 = null != e4 ? e4 : p;
10378    i4 = false !== i4, n3 = false !== n3;
10379    const s4 = document.createEvent("Events");
10380    return s4.initEvent(t5, i4, n3), null != r4 && m.call(s4, r4), o3.dispatchEvent(s4);
10381  };
10382  var A = function(t5, e4) {
10383    if (1 === (null == t5 ? void 0 : t5.nodeType))
10384      return f.call(t5, e4);
10385  };
10386  var y = function(t5) {
10387    let { matchingSelector: e4, untilNode: i4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10388    for (; t5 && t5.nodeType !== Node.ELEMENT_NODE; )
10389      t5 = t5.parentNode;
10390    if (null != t5) {
10391      if (null == e4)
10392        return t5;
10393      if (t5.closest && null == i4)
10394        return t5.closest(e4);
10395      for (; t5 && t5 !== i4; ) {
10396        if (A(t5, e4))
10397          return t5;
10398        t5 = t5.parentNode;
10399      }
10400    }
10401  };
10402  var x = (t5) => document.activeElement !== t5 && C(t5, document.activeElement);
10403  var C = function(t5, e4) {
10404    if (t5 && e4)
10405      for (; e4; ) {
10406        if (e4 === t5)
10407          return true;
10408        e4 = e4.parentNode;
10409      }
10410  };
10411  var E = function(t5) {
10412    var e4;
10413    if (null === (e4 = t5) || void 0 === e4 || !e4.parentNode)
10414      return;
10415    let i4 = 0;
10416    for (t5 = t5.previousSibling; t5; )
10417      i4++, t5 = t5.previousSibling;
10418    return i4;
10419  };
10420  var S = (t5) => {
10421    var e4;
10422    return null == t5 || null === (e4 = t5.parentNode) || void 0 === e4 ? void 0 : e4.removeChild(t5);
10423  };
10424  var R = function(t5) {
10425    let { onlyNodesOfType: e4, usingFilter: i4, expandEntityReferences: n3 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10426    const r4 = (() => {
10427      switch (e4) {
10428        case "element":
10429          return NodeFilter.SHOW_ELEMENT;
10430        case "text":
10431          return NodeFilter.SHOW_TEXT;
10432        case "comment":
10433          return NodeFilter.SHOW_COMMENT;
10434        default:
10435          return NodeFilter.SHOW_ALL;
10436      }
10437    })();
10438    return document.createTreeWalker(t5, r4, null != i4 ? i4 : null, true === n3);
10439  };
10440  var k = (t5) => {
10441    var e4;
10442    return null == t5 || null === (e4 = t5.tagName) || void 0 === e4 ? void 0 : e4.toLowerCase();
10443  };
10444  var T = function(t5) {
10445    let e4, i4, n3 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10446    "object" == typeof t5 ? (n3 = t5, t5 = n3.tagName) : n3 = { attributes: n3 };
10447    const r4 = document.createElement(t5);
10448    if (null != n3.editable && (null == n3.attributes && (n3.attributes = {}), n3.attributes.contenteditable = n3.editable), n3.attributes)
10449      for (e4 in n3.attributes)
10450        i4 = n3.attributes[e4], r4.setAttribute(e4, i4);
10451    if (n3.style)
10452      for (e4 in n3.style)
10453        i4 = n3.style[e4], r4.style[e4] = i4;
10454    if (n3.data)
10455      for (e4 in n3.data)
10456        i4 = n3.data[e4], r4.dataset[e4] = i4;
10457    return n3.className && n3.className.split(" ").forEach((t6) => {
10458      r4.classList.add(t6);
10459    }), n3.textContent && (r4.textContent = n3.textContent), n3.childNodes && [].concat(n3.childNodes).forEach((t6) => {
10460      r4.appendChild(t6);
10461    }), r4;
10462  };
10463  var w;
10464  var L = function() {
10465    if (null != w)
10466      return w;
10467    w = [];
10468    for (const t5 in n) {
10469      const e4 = n[t5];
10470      e4.tagName && w.push(e4.tagName);
10471    }
10472    return w;
10473  };
10474  var D = (t5) => I(null == t5 ? void 0 : t5.firstChild);
10475  var N = function(t5) {
10476    let { strict: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { strict: true };
10477    return e4 ? I(t5) : I(t5) || !I(t5.firstChild) && function(t6) {
10478      return L().includes(k(t6)) && !L().includes(k(t6.firstChild));
10479    }(t5);
10480  };
10481  var I = (t5) => O(t5) && "block" === (null == t5 ? void 0 : t5.data);
10482  var O = (t5) => (null == t5 ? void 0 : t5.nodeType) === Node.COMMENT_NODE;
10483  var F = function(t5) {
10484    let { name: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10485    if (t5)
10486      return B(t5) ? t5.data === d ? !e4 || t5.parentNode.dataset.trixCursorTarget === e4 : void 0 : F(t5.firstChild);
10487  };
10488  var P = (t5) => A(t5, e);
10489  var M = (t5) => B(t5) && "" === (null == t5 ? void 0 : t5.data);
10490  var B = (t5) => (null == t5 ? void 0 : t5.nodeType) === Node.TEXT_NODE;
10491  var _ = { level2Enabled: true, getLevel() {
10492    return this.level2Enabled && a.supportsInputEvents ? 2 : 0;
10493  }, pickFiles(t5) {
10494    const e4 = T("input", { type: "file", multiple: true, hidden: true, id: this.fileInputId });
10495    e4.addEventListener("change", () => {
10496      t5(e4.files), S(e4);
10497    }), S(document.getElementById(this.fileInputId)), document.body.appendChild(e4), e4.click();
10498  } };
10499  var j = { removeBlankTableCells: false, tableCellSeparator: " | ", tableRowSeparator: "\n" };
10500  var W = { bold: { tagName: "strong", inheritable: true, parser(t5) {
10501    const e4 = window.getComputedStyle(t5);
10502    return "bold" === e4.fontWeight || e4.fontWeight >= 600;
10503  } }, italic: { tagName: "em", inheritable: true, parser: (t5) => "italic" === window.getComputedStyle(t5).fontStyle }, href: { groupTagName: "a", parser(t5) {
10504    const i4 = "a:not(".concat(e, ")"), n3 = t5.closest(i4);
10505    if (n3)
10506      return n3.getAttribute("href");
10507  } }, strike: { tagName: "del", inheritable: true }, frozen: { style: { backgroundColor: "highlight" } } };
10508  var U = { getDefaultHTML: () => '<div class="trix-button-row">\n      <span class="trix-button-group trix-button-group--text-tools" data-trix-button-group="text-tools">\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-bold" data-trix-attribute="bold" data-trix-key="b" title="'.concat(c.bold, '" tabindex="-1">').concat(c.bold, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-italic" data-trix-attribute="italic" data-trix-key="i" title="').concat(c.italic, '" tabindex="-1">').concat(c.italic, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-strike" data-trix-attribute="strike" title="').concat(c.strike, '" tabindex="-1">').concat(c.strike, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-link" data-trix-attribute="href" data-trix-action="link" data-trix-key="k" title="').concat(c.link, '" tabindex="-1">').concat(c.link, '</button>\n      </span>\n\n      <span class="trix-button-group trix-button-group--block-tools" data-trix-button-group="block-tools">\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-heading-1" data-trix-attribute="heading1" title="').concat(c.heading1, '" tabindex="-1">').concat(c.heading1, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-quote" data-trix-attribute="quote" title="').concat(c.quote, '" tabindex="-1">').concat(c.quote, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-code" data-trix-attribute="code" title="').concat(c.code, '" tabindex="-1">').concat(c.code, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-bullet-list" data-trix-attribute="bullet" title="').concat(c.bullets, '" tabindex="-1">').concat(c.bullets, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-number-list" data-trix-attribute="number" title="').concat(c.numbers, '" tabindex="-1">').concat(c.numbers, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-decrease-nesting-level" data-trix-action="decreaseNestingLevel" title="').concat(c.outdent, '" tabindex="-1">').concat(c.outdent, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-increase-nesting-level" data-trix-action="increaseNestingLevel" title="').concat(c.indent, '" tabindex="-1">').concat(c.indent, '</button>\n      </span>\n\n      <span class="trix-button-group trix-button-group--file-tools" data-trix-button-group="file-tools">\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-attach" data-trix-action="attachFiles" title="').concat(c.attachFiles, '" tabindex="-1">').concat(c.attachFiles, '</button>\n      </span>\n\n      <span class="trix-button-group-spacer"></span>\n\n      <span class="trix-button-group trix-button-group--history-tools" data-trix-button-group="history-tools">\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-undo" data-trix-action="undo" data-trix-key="z" title="').concat(c.undo, '" tabindex="-1">').concat(c.undo, '</button>\n        <button type="button" class="trix-button trix-button--icon trix-button--icon-redo" data-trix-action="redo" data-trix-key="shift+z" title="').concat(c.redo, '" tabindex="-1">').concat(c.redo, '</button>\n      </span>\n    </div>\n\n    <div class="trix-dialogs" data-trix-dialogs>\n      <div class="trix-dialog trix-dialog--link" data-trix-dialog="href" data-trix-dialog-attribute="href">\n        <div class="trix-dialog__link-fields">\n          <input type="url" name="href" class="trix-input trix-input--dialog" placeholder="').concat(c.urlPlaceholder, '" aria-label="').concat(c.url, '" required data-trix-input>\n          <div class="trix-button-group">\n            <input type="button" class="trix-button trix-button--dialog" value="').concat(c.link, '" data-trix-method="setAttribute">\n            <input type="button" class="trix-button trix-button--dialog" value="').concat(c.unlink, '" data-trix-method="removeAttribute">\n          </div>\n        </div>\n      </div>\n    </div>') };
10509  var V = { interval: 5e3 };
10510  var z = Object.freeze({ __proto__: null, attachments: i, blockAttributes: n, browser: a, css: { attachment: "attachment", attachmentCaption: "attachment__caption", attachmentCaptionEditor: "attachment__caption-editor", attachmentMetadata: "attachment__metadata", attachmentMetadataContainer: "attachment__metadata-container", attachmentName: "attachment__name", attachmentProgress: "attachment__progress", attachmentSize: "attachment__size", attachmentToolbar: "attachment__toolbar", attachmentGallery: "attachment-gallery" }, dompurify: l, fileSize: h, input: _, keyNames: { 8: "backspace", 9: "tab", 13: "return", 27: "escape", 37: "left", 39: "right", 46: "delete", 68: "d", 72: "h", 79: "o" }, lang: c, parser: j, textAttributes: W, toolbar: U, undo: V });
10511  var q = class {
10512    static proxyMethod(t5) {
10513      const { name: e4, toMethod: i4, toProperty: n3, optional: r4 } = H(t5);
10514      this.prototype[e4] = function() {
10515        let t6, o3;
10516        var s4, a4;
10517        i4 ? o3 = r4 ? null === (s4 = this[i4]) || void 0 === s4 ? void 0 : s4.call(this) : this[i4]() : n3 && (o3 = this[n3]);
10518        return r4 ? (t6 = null === (a4 = o3) || void 0 === a4 ? void 0 : a4[e4], t6 ? J.call(t6, o3, arguments) : void 0) : (t6 = o3[e4], J.call(t6, o3, arguments));
10519      };
10520    }
10521  };
10522  var H = function(t5) {
10523    const e4 = t5.match(K);
10524    if (!e4)
10525      throw new Error("can't parse @proxyMethod expression: ".concat(t5));
10526    const i4 = { name: e4[4] };
10527    return null != e4[2] ? i4.toMethod = e4[1] : i4.toProperty = e4[1], null != e4[3] && (i4.optional = true), i4;
10528  };
10529  var { apply: J } = Function.prototype;
10530  var K = new RegExp("^(.+?)(\\(\\))?(\\?)?\\.(.+?)$");
10531  var G;
10532  var Y;
10533  var $;
10534  var X = class extends q {
10535    static box() {
10536      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
10537      return t5 instanceof this ? t5 : this.fromUCS2String(null == t5 ? void 0 : t5.toString());
10538    }
10539    static fromUCS2String(t5) {
10540      return new this(t5, et(t5));
10541    }
10542    static fromCodepoints(t5) {
10543      return new this(it(t5), t5);
10544    }
10545    constructor(t5, e4) {
10546      super(...arguments), this.ucs2String = t5, this.codepoints = e4, this.length = this.codepoints.length, this.ucs2Length = this.ucs2String.length;
10547    }
10548    offsetToUCS2Offset(t5) {
10549      return it(this.codepoints.slice(0, Math.max(0, t5))).length;
10550    }
10551    offsetFromUCS2Offset(t5) {
10552      return et(this.ucs2String.slice(0, Math.max(0, t5))).length;
10553    }
10554    slice() {
10555      return this.constructor.fromCodepoints(this.codepoints.slice(...arguments));
10556    }
10557    charAt(t5) {
10558      return this.slice(t5, t5 + 1);
10559    }
10560    isEqualTo(t5) {
10561      return this.constructor.box(t5).ucs2String === this.ucs2String;
10562    }
10563    toJSON() {
10564      return this.ucs2String;
10565    }
10566    getCacheKey() {
10567      return this.ucs2String;
10568    }
10569    toString() {
10570      return this.ucs2String;
10571    }
10572  };
10573  var Z = 1 === (null === (G = Array.from) || void 0 === G ? void 0 : G.call(Array, "\u{1F47C}").length);
10574  var Q = null != (null === (Y = " ".codePointAt) || void 0 === Y ? void 0 : Y.call(" ", 0));
10575  var tt = " \u{1F47C}" === (null === ($ = String.fromCodePoint) || void 0 === $ ? void 0 : $.call(String, 32, 128124));
10576  var et;
10577  var it;
10578  et = Z && Q ? (t5) => Array.from(t5).map((t6) => t6.codePointAt(0)) : function(t5) {
10579    const e4 = [];
10580    let i4 = 0;
10581    const { length: n3 } = t5;
10582    for (; i4 < n3; ) {
10583      let r4 = t5.charCodeAt(i4++);
10584      if (55296 <= r4 && r4 <= 56319 && i4 < n3) {
10585        const e5 = t5.charCodeAt(i4++);
10586        56320 == (64512 & e5) ? r4 = ((1023 & r4) << 10) + (1023 & e5) + 65536 : i4--;
10587      }
10588      e4.push(r4);
10589    }
10590    return e4;
10591  }, it = tt ? (t5) => String.fromCodePoint(...Array.from(t5 || [])) : function(t5) {
10592    return (() => {
10593      const e4 = [];
10594      return Array.from(t5).forEach((t6) => {
10595        let i4 = "";
10596        t6 > 65535 && (t6 -= 65536, i4 += String.fromCharCode(t6 >>> 10 & 1023 | 55296), t6 = 56320 | 1023 & t6), e4.push(i4 + String.fromCharCode(t6));
10597      }), e4;
10598    })().join("");
10599  };
10600  var nt = 0;
10601  var rt = class extends q {
10602    static fromJSONString(t5) {
10603      return this.fromJSON(JSON.parse(t5));
10604    }
10605    constructor() {
10606      super(...arguments), this.id = ++nt;
10607    }
10608    hasSameConstructorAs(t5) {
10609      return this.constructor === (null == t5 ? void 0 : t5.constructor);
10610    }
10611    isEqualTo(t5) {
10612      return this === t5;
10613    }
10614    inspect() {
10615      const t5 = [], e4 = this.contentsForInspection() || {};
10616      for (const i4 in e4) {
10617        const n3 = e4[i4];
10618        t5.push("".concat(i4, "=").concat(n3));
10619      }
10620      return "#<".concat(this.constructor.name, ":").concat(this.id).concat(t5.length ? " ".concat(t5.join(", ")) : "", ">");
10621    }
10622    contentsForInspection() {
10623    }
10624    toJSONString() {
10625      return JSON.stringify(this);
10626    }
10627    toUTF16String() {
10628      return X.box(this);
10629    }
10630    getCacheKey() {
10631      return this.id.toString();
10632    }
10633  };
10634  var ot = function() {
10635    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
10636    if (t5.length !== e4.length)
10637      return false;
10638    for (let i4 = 0; i4 < t5.length; i4++) {
10639      if (t5[i4] !== e4[i4])
10640        return false;
10641    }
10642    return true;
10643  };
10644  var st = function(t5) {
10645    const e4 = t5.slice(0);
10646    for (var i4 = arguments.length, n3 = new Array(i4 > 1 ? i4 - 1 : 0), r4 = 1; r4 < i4; r4++)
10647      n3[r4 - 1] = arguments[r4];
10648    return e4.splice(...n3), e4;
10649  };
10650  var at = /[\u05BE\u05C0\u05C3\u05D0-\u05EA\u05F0-\u05F4\u061B\u061F\u0621-\u063A\u0640-\u064A\u066D\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D5\u06E5\u06E6\u200F\u202B\u202E\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE72\uFE74\uFE76-\uFEFC]/;
10651  var lt = function() {
10652    const t5 = T("input", { dir: "auto", name: "x", dirName: "x.dir" }), e4 = T("textarea", { dir: "auto", name: "y", dirName: "y.dir" }), i4 = T("form");
10653    i4.appendChild(t5), i4.appendChild(e4);
10654    const n3 = function() {
10655      try {
10656        return new FormData(i4).has(e4.dirName);
10657      } catch (t6) {
10658        return false;
10659      }
10660    }(), r4 = function() {
10661      try {
10662        return t5.matches(":dir(ltr),:dir(rtl)");
10663      } catch (t6) {
10664        return false;
10665      }
10666    }();
10667    return n3 ? function(t6) {
10668      return e4.value = t6, new FormData(i4).get(e4.dirName);
10669    } : r4 ? function(e5) {
10670      return t5.value = e5, t5.matches(":dir(rtl)") ? "rtl" : "ltr";
10671    } : function(t6) {
10672      const e5 = t6.trim().charAt(0);
10673      return at.test(e5) ? "rtl" : "ltr";
10674    };
10675  }();
10676  var ct = null;
10677  var ut = null;
10678  var ht = null;
10679  var dt = null;
10680  var gt = () => (ct || (ct = bt().concat(pt())), ct);
10681  var mt = (t5) => n[t5];
10682  var pt = () => (ut || (ut = Object.keys(n)), ut);
10683  var ft = (t5) => W[t5];
10684  var bt = () => (ht || (ht = Object.keys(W)), ht);
10685  var vt = function(t5, e4) {
10686    At(t5).textContent = e4.replace(/%t/g, t5);
10687  };
10688  var At = function(t5) {
10689    const e4 = document.createElement("style");
10690    e4.setAttribute("type", "text/css"), e4.setAttribute("data-tag-name", t5.toLowerCase());
10691    const i4 = yt();
10692    return i4 && e4.setAttribute("nonce", i4), document.head.insertBefore(e4, document.head.firstChild), e4;
10693  };
10694  var yt = function() {
10695    const t5 = xt("trix-csp-nonce") || xt("csp-nonce");
10696    if (t5) {
10697      const { nonce: e4, content: i4 } = t5;
10698      return "" == e4 ? i4 : e4;
10699    }
10700  };
10701  var xt = (t5) => document.head.querySelector("meta[name=".concat(t5, "]"));
10702  var Ct = { "application/x-trix-feature-detection": "test" };
10703  var Et = function(t5) {
10704    const e4 = t5.getData("text/plain"), i4 = t5.getData("text/html");
10705    if (!e4 || !i4)
10706      return null == e4 ? void 0 : e4.length;
10707    {
10708      const { body: t6 } = new DOMParser().parseFromString(i4, "text/html");
10709      if (t6.textContent === e4)
10710        return !t6.querySelector("*");
10711    }
10712  };
10713  var St = /Mac|^iP/.test(navigator.platform) ? (t5) => t5.metaKey : (t5) => t5.ctrlKey;
10714  var Rt = (t5) => setTimeout(t5, 1);
10715  var kt = function() {
10716    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
10717    const e4 = {};
10718    for (const i4 in t5) {
10719      const n3 = t5[i4];
10720      e4[i4] = n3;
10721    }
10722    return e4;
10723  };
10724  var Tt = function() {
10725    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10726    if (Object.keys(t5).length !== Object.keys(e4).length)
10727      return false;
10728    for (const i4 in t5) {
10729      if (t5[i4] !== e4[i4])
10730        return false;
10731    }
10732    return true;
10733  };
10734  var wt = function(t5) {
10735    if (null != t5)
10736      return Array.isArray(t5) || (t5 = [t5, t5]), [Nt(t5[0]), Nt(null != t5[1] ? t5[1] : t5[0])];
10737  };
10738  var Lt = function(t5) {
10739    if (null == t5)
10740      return;
10741    const [e4, i4] = wt(t5);
10742    return It(e4, i4);
10743  };
10744  var Dt = function(t5, e4) {
10745    if (null == t5 || null == e4)
10746      return;
10747    const [i4, n3] = wt(t5), [r4, o3] = wt(e4);
10748    return It(i4, r4) && It(n3, o3);
10749  };
10750  var Nt = function(t5) {
10751    return "number" == typeof t5 ? t5 : kt(t5);
10752  };
10753  var It = function(t5, e4) {
10754    return "number" == typeof t5 ? t5 === e4 : Tt(t5, e4);
10755  };
10756  var Ot = class extends q {
10757    constructor() {
10758      super(...arguments), this.update = this.update.bind(this), this.selectionManagers = [];
10759    }
10760    start() {
10761      this.started || (this.started = true, document.addEventListener("selectionchange", this.update, true));
10762    }
10763    stop() {
10764      if (this.started)
10765        return this.started = false, document.removeEventListener("selectionchange", this.update, true);
10766    }
10767    registerSelectionManager(t5) {
10768      if (!this.selectionManagers.includes(t5))
10769        return this.selectionManagers.push(t5), this.start();
10770    }
10771    unregisterSelectionManager(t5) {
10772      if (this.selectionManagers = this.selectionManagers.filter((e4) => e4 !== t5), 0 === this.selectionManagers.length)
10773        return this.stop();
10774    }
10775    notifySelectionManagersOfSelectionChange() {
10776      return this.selectionManagers.map((t5) => t5.selectionDidChange());
10777    }
10778    update() {
10779      this.notifySelectionManagersOfSelectionChange();
10780    }
10781    reset() {
10782      this.update();
10783    }
10784  };
10785  var Ft = new Ot();
10786  var Pt = function() {
10787    const t5 = window.getSelection();
10788    if (t5.rangeCount > 0)
10789      return t5;
10790  };
10791  var Mt = function() {
10792    var t5;
10793    const e4 = null === (t5 = Pt()) || void 0 === t5 ? void 0 : t5.getRangeAt(0);
10794    if (e4 && !_t(e4))
10795      return e4;
10796  };
10797  var Bt = function(t5) {
10798    const e4 = window.getSelection();
10799    return e4.removeAllRanges(), e4.addRange(t5), Ft.update();
10800  };
10801  var _t = (t5) => jt(t5.startContainer) || jt(t5.endContainer);
10802  var jt = (t5) => !Object.getPrototypeOf(t5);
10803  var Wt = (t5) => t5.replace(new RegExp("".concat(d), "g"), "").replace(new RegExp("".concat(g), "g"), " ");
10804  var Ut = new RegExp("[^\\S".concat(g, "]"));
10805  var Vt = (t5) => t5.replace(new RegExp("".concat(Ut.source), "g"), " ").replace(/\ {2,}/g, " ");
10806  var zt = function(t5, e4) {
10807    if (t5.isEqualTo(e4))
10808      return ["", ""];
10809    const i4 = qt(t5, e4), { length: n3 } = i4.utf16String;
10810    let r4;
10811    if (n3) {
10812      const { offset: o3 } = i4, s4 = t5.codepoints.slice(0, o3).concat(t5.codepoints.slice(o3 + n3));
10813      r4 = qt(e4, X.fromCodepoints(s4));
10814    } else
10815      r4 = qt(e4, t5);
10816    return [i4.utf16String.toString(), r4.utf16String.toString()];
10817  };
10818  var qt = function(t5, e4) {
10819    let i4 = 0, n3 = t5.length, r4 = e4.length;
10820    for (; i4 < n3 && t5.charAt(i4).isEqualTo(e4.charAt(i4)); )
10821      i4++;
10822    for (; n3 > i4 + 1 && t5.charAt(n3 - 1).isEqualTo(e4.charAt(r4 - 1)); )
10823      n3--, r4--;
10824    return { utf16String: t5.slice(i4, n3), offset: i4 };
10825  };
10826  var Ht = class extends rt {
10827    static fromCommonAttributesOfObjects() {
10828      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
10829      if (!t5.length)
10830        return new this();
10831      let e4 = Yt(t5[0]), i4 = e4.getKeys();
10832      return t5.slice(1).forEach((t6) => {
10833        i4 = e4.getKeysCommonToHash(Yt(t6)), e4 = e4.slice(i4);
10834      }), e4;
10835    }
10836    static box(t5) {
10837      return Yt(t5);
10838    }
10839    constructor() {
10840      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
10841      super(...arguments), this.values = Gt(t5);
10842    }
10843    add(t5, e4) {
10844      return this.merge(Jt(t5, e4));
10845    }
10846    remove(t5) {
10847      return new Ht(Gt(this.values, t5));
10848    }
10849    get(t5) {
10850      return this.values[t5];
10851    }
10852    has(t5) {
10853      return t5 in this.values;
10854    }
10855    merge(t5) {
10856      return new Ht(Kt(this.values, $t(t5)));
10857    }
10858    slice(t5) {
10859      const e4 = {};
10860      return Array.from(t5).forEach((t6) => {
10861        this.has(t6) && (e4[t6] = this.values[t6]);
10862      }), new Ht(e4);
10863    }
10864    getKeys() {
10865      return Object.keys(this.values);
10866    }
10867    getKeysCommonToHash(t5) {
10868      return t5 = Yt(t5), this.getKeys().filter((e4) => this.values[e4] === t5.values[e4]);
10869    }
10870    isEqualTo(t5) {
10871      return ot(this.toArray(), Yt(t5).toArray());
10872    }
10873    isEmpty() {
10874      return 0 === this.getKeys().length;
10875    }
10876    toArray() {
10877      if (!this.array) {
10878        const t5 = [];
10879        for (const e4 in this.values) {
10880          const i4 = this.values[e4];
10881          t5.push(t5.push(e4, i4));
10882        }
10883        this.array = t5.slice(0);
10884      }
10885      return this.array;
10886    }
10887    toObject() {
10888      return Gt(this.values);
10889    }
10890    toJSON() {
10891      return this.toObject();
10892    }
10893    contentsForInspection() {
10894      return { values: JSON.stringify(this.values) };
10895    }
10896  };
10897  var Jt = function(t5, e4) {
10898    const i4 = {};
10899    return i4[t5] = e4, i4;
10900  };
10901  var Kt = function(t5, e4) {
10902    const i4 = Gt(t5);
10903    for (const t6 in e4) {
10904      const n3 = e4[t6];
10905      i4[t6] = n3;
10906    }
10907    return i4;
10908  };
10909  var Gt = function(t5, e4) {
10910    const i4 = {};
10911    return Object.keys(t5).sort().forEach((n3) => {
10912      n3 !== e4 && (i4[n3] = t5[n3]);
10913    }), i4;
10914  };
10915  var Yt = function(t5) {
10916    return t5 instanceof Ht ? t5 : new Ht(t5);
10917  };
10918  var $t = function(t5) {
10919    return t5 instanceof Ht ? t5.values : t5;
10920  };
10921  var Xt = class {
10922    static groupObjects() {
10923      let t5, e4 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], { depth: i4, asTree: n3 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
10924      n3 && null == i4 && (i4 = 0);
10925      const r4 = [];
10926      return Array.from(e4).forEach((e5) => {
10927        var o3;
10928        if (t5) {
10929          var s4, a4, l4;
10930          if (null !== (s4 = e5.canBeGrouped) && void 0 !== s4 && s4.call(e5, i4) && null !== (a4 = (l4 = t5[t5.length - 1]).canBeGroupedWith) && void 0 !== a4 && a4.call(l4, e5, i4))
10931            return void t5.push(e5);
10932          r4.push(new this(t5, { depth: i4, asTree: n3 })), t5 = null;
10933        }
10934        null !== (o3 = e5.canBeGrouped) && void 0 !== o3 && o3.call(e5, i4) ? t5 = [e5] : r4.push(e5);
10935      }), t5 && r4.push(new this(t5, { depth: i4, asTree: n3 })), r4;
10936    }
10937    constructor() {
10938      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], { depth: e4, asTree: i4 } = arguments.length > 1 ? arguments[1] : void 0;
10939      this.objects = t5, i4 && (this.depth = e4, this.objects = this.constructor.groupObjects(this.objects, { asTree: i4, depth: this.depth + 1 }));
10940    }
10941    getObjects() {
10942      return this.objects;
10943    }
10944    getDepth() {
10945      return this.depth;
10946    }
10947    getCacheKey() {
10948      const t5 = ["objectGroup"];
10949      return Array.from(this.getObjects()).forEach((e4) => {
10950        t5.push(e4.getCacheKey());
10951      }), t5.join("/");
10952    }
10953  };
10954  var Zt = class extends q {
10955    constructor() {
10956      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
10957      super(...arguments), this.objects = {}, Array.from(t5).forEach((t6) => {
10958        const e4 = JSON.stringify(t6);
10959        null == this.objects[e4] && (this.objects[e4] = t6);
10960      });
10961    }
10962    find(t5) {
10963      const e4 = JSON.stringify(t5);
10964      return this.objects[e4];
10965    }
10966  };
10967  var Qt = class {
10968    constructor(t5) {
10969      this.reset(t5);
10970    }
10971    add(t5) {
10972      const e4 = te(t5);
10973      this.elements[e4] = t5;
10974    }
10975    remove(t5) {
10976      const e4 = te(t5), i4 = this.elements[e4];
10977      if (i4)
10978        return delete this.elements[e4], i4;
10979    }
10980    reset() {
10981      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
10982      return this.elements = {}, Array.from(t5).forEach((t6) => {
10983        this.add(t6);
10984      }), t5;
10985    }
10986  };
10987  var te = (t5) => t5.dataset.trixStoreKey;
10988  var ee = class extends q {
10989    isPerforming() {
10990      return true === this.performing;
10991    }
10992    hasPerformed() {
10993      return true === this.performed;
10994    }
10995    hasSucceeded() {
10996      return this.performed && this.succeeded;
10997    }
10998    hasFailed() {
10999      return this.performed && !this.succeeded;
11000    }
11001    getPromise() {
11002      return this.promise || (this.promise = new Promise((t5, e4) => (this.performing = true, this.perform((i4, n3) => {
11003        this.succeeded = i4, this.performing = false, this.performed = true, this.succeeded ? t5(n3) : e4(n3);
11004      })))), this.promise;
11005    }
11006    perform(t5) {
11007      return t5(false);
11008    }
11009    release() {
11010      var t5, e4;
11011      null === (t5 = this.promise) || void 0 === t5 || null === (e4 = t5.cancel) || void 0 === e4 || e4.call(t5), this.promise = null, this.performing = null, this.performed = null, this.succeeded = null;
11012    }
11013  };
11014  ee.proxyMethod("getPromise().then"), ee.proxyMethod("getPromise().catch");
11015  var ie = class extends q {
11016    constructor(t5) {
11017      let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
11018      super(...arguments), this.object = t5, this.options = e4, this.childViews = [], this.rootView = this;
11019    }
11020    getNodes() {
11021      return this.nodes || (this.nodes = this.createNodes()), this.nodes.map((t5) => t5.cloneNode(true));
11022    }
11023    invalidate() {
11024      var t5;
11025      return this.nodes = null, this.childViews = [], null === (t5 = this.parentView) || void 0 === t5 ? void 0 : t5.invalidate();
11026    }
11027    invalidateViewForObject(t5) {
11028      var e4;
11029      return null === (e4 = this.findViewForObject(t5)) || void 0 === e4 ? void 0 : e4.invalidate();
11030    }
11031    findOrCreateCachedChildView(t5, e4, i4) {
11032      let n3 = this.getCachedViewForObject(e4);
11033      return n3 ? this.recordChildView(n3) : (n3 = this.createChildView(...arguments), this.cacheViewForObject(n3, e4)), n3;
11034    }
11035    createChildView(t5, e4) {
11036      let i4 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
11037      e4 instanceof Xt && (i4.viewClass = t5, t5 = ne);
11038      const n3 = new t5(e4, i4);
11039      return this.recordChildView(n3);
11040    }
11041    recordChildView(t5) {
11042      return t5.parentView = this, t5.rootView = this.rootView, this.childViews.push(t5), t5;
11043    }
11044    getAllChildViews() {
11045      let t5 = [];
11046      return this.childViews.forEach((e4) => {
11047        t5.push(e4), t5 = t5.concat(e4.getAllChildViews());
11048      }), t5;
11049    }
11050    findElement() {
11051      return this.findElementForObject(this.object);
11052    }
11053    findElementForObject(t5) {
11054      const e4 = null == t5 ? void 0 : t5.id;
11055      if (e4)
11056        return this.rootView.element.querySelector("[data-trix-id='".concat(e4, "']"));
11057    }
11058    findViewForObject(t5) {
11059      for (const e4 of this.getAllChildViews())
11060        if (e4.object === t5)
11061          return e4;
11062    }
11063    getViewCache() {
11064      return this.rootView !== this ? this.rootView.getViewCache() : this.isViewCachingEnabled() ? (this.viewCache || (this.viewCache = {}), this.viewCache) : void 0;
11065    }
11066    isViewCachingEnabled() {
11067      return false !== this.shouldCacheViews;
11068    }
11069    enableViewCaching() {
11070      this.shouldCacheViews = true;
11071    }
11072    disableViewCaching() {
11073      this.shouldCacheViews = false;
11074    }
11075    getCachedViewForObject(t5) {
11076      var e4;
11077      return null === (e4 = this.getViewCache()) || void 0 === e4 ? void 0 : e4[t5.getCacheKey()];
11078    }
11079    cacheViewForObject(t5, e4) {
11080      const i4 = this.getViewCache();
11081      i4 && (i4[e4.getCacheKey()] = t5);
11082    }
11083    garbageCollectCachedViews() {
11084      const t5 = this.getViewCache();
11085      if (t5) {
11086        const e4 = this.getAllChildViews().concat(this).map((t6) => t6.object.getCacheKey());
11087        for (const i4 in t5)
11088          e4.includes(i4) || delete t5[i4];
11089      }
11090    }
11091  };
11092  var ne = class extends ie {
11093    constructor() {
11094      super(...arguments), this.objectGroup = this.object, this.viewClass = this.options.viewClass, delete this.options.viewClass;
11095    }
11096    getChildViews() {
11097      return this.childViews.length || Array.from(this.objectGroup.getObjects()).forEach((t5) => {
11098        this.findOrCreateCachedChildView(this.viewClass, t5, this.options);
11099      }), this.childViews;
11100    }
11101    createNodes() {
11102      const t5 = this.createContainerElement();
11103      return this.getChildViews().forEach((e4) => {
11104        Array.from(e4.getNodes()).forEach((e5) => {
11105          t5.appendChild(e5);
11106        });
11107      }), [t5];
11108    }
11109    createContainerElement() {
11110      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : this.objectGroup.getDepth();
11111      return this.getChildViews()[0].createContainerElement(t5);
11112    }
11113  };
11114  var { entries: re, setPrototypeOf: oe, isFrozen: se, getPrototypeOf: ae, getOwnPropertyDescriptor: le } = Object;
11115  var { freeze: ce, seal: ue, create: he } = Object;
11116  var { apply: de, construct: ge } = "undefined" != typeof Reflect && Reflect;
11117  ce || (ce = function(t5) {
11118    return t5;
11119  }), ue || (ue = function(t5) {
11120    return t5;
11121  }), de || (de = function(t5, e4, i4) {
11122    return t5.apply(e4, i4);
11123  }), ge || (ge = function(t5, e4) {
11124    return new t5(...e4);
11125  });
11126  var me = Te(Array.prototype.forEach);
11127  var pe = Te(Array.prototype.pop);
11128  var fe = Te(Array.prototype.push);
11129  var be = Te(String.prototype.toLowerCase);
11130  var ve = Te(String.prototype.toString);
11131  var Ae = Te(String.prototype.match);
11132  var ye = Te(String.prototype.replace);
11133  var xe = Te(String.prototype.indexOf);
11134  var Ce = Te(String.prototype.trim);
11135  var Ee = Te(Object.prototype.hasOwnProperty);
11136  var Se = Te(RegExp.prototype.test);
11137  var Re = (ke = TypeError, function() {
11138    for (var t5 = arguments.length, e4 = new Array(t5), i4 = 0; i4 < t5; i4++)
11139      e4[i4] = arguments[i4];
11140    return ge(ke, e4);
11141  });
11142  var ke;
11143  function Te(t5) {
11144    return function(e4) {
11145      for (var i4 = arguments.length, n3 = new Array(i4 > 1 ? i4 - 1 : 0), r4 = 1; r4 < i4; r4++)
11146        n3[r4 - 1] = arguments[r4];
11147      return de(t5, e4, n3);
11148    };
11149  }
11150  function we(t5, e4) {
11151    let i4 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : be;
11152    oe && oe(t5, null);
11153    let n3 = e4.length;
11154    for (; n3--; ) {
11155      let r4 = e4[n3];
11156      if ("string" == typeof r4) {
11157        const t6 = i4(r4);
11158        t6 !== r4 && (se(e4) || (e4[n3] = t6), r4 = t6);
11159      }
11160      t5[r4] = true;
11161    }
11162    return t5;
11163  }
11164  function Le(t5) {
11165    for (let e4 = 0; e4 < t5.length; e4++) {
11166      Ee(t5, e4) || (t5[e4] = null);
11167    }
11168    return t5;
11169  }
11170  function De(t5) {
11171    const e4 = he(null);
11172    for (const [i4, n3] of re(t5)) {
11173      Ee(t5, i4) && (Array.isArray(n3) ? e4[i4] = Le(n3) : n3 && "object" == typeof n3 && n3.constructor === Object ? e4[i4] = De(n3) : e4[i4] = n3);
11174    }
11175    return e4;
11176  }
11177  function Ne(t5, e4) {
11178    for (; null !== t5; ) {
11179      const i4 = le(t5, e4);
11180      if (i4) {
11181        if (i4.get)
11182          return Te(i4.get);
11183        if ("function" == typeof i4.value)
11184          return Te(i4.value);
11185      }
11186      t5 = ae(t5);
11187    }
11188    return function() {
11189      return null;
11190    };
11191  }
11192  var Ie = ce(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]);
11193  var Oe = ce(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]);
11194  var Fe = ce(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]);
11195  var Pe = ce(["animate", "color-profile", "cursor", "discard", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]);
11196  var Me = ce(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover", "mprescripts"]);
11197  var Be = ce(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]);
11198  var _e = ce(["#text"]);
11199  var je = ce(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "popover", "popovertarget", "popovertargetaction", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "wrap", "xmlns", "slot"]);
11200  var We = ce(["accent-height", "accumulate", "additive", "alignment-baseline", "amplitude", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "exponent", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "intercept", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "slope", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "tablevalues", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]);
11201  var Ue = ce(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]);
11202  var Ve = ce(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]);
11203  var ze = ue(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
11204  var qe = ue(/<%[\w\W]*|[\w\W]*%>/gm);
11205  var He = ue(/\$\{[\w\W]*}/gm);
11206  var Je = ue(/^data-[\-\w.\u00B7-\uFFFF]+$/);
11207  var Ke = ue(/^aria-[\-\w]+$/);
11208  var Ge = ue(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
11209  var Ye = ue(/^(?:\w+script|data):/i);
11210  var $e = ue(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
11211  var Xe = ue(/^html$/i);
11212  var Ze = ue(/^[a-z][.\w]*(-[.\w]+)+$/i);
11213  var Qe = Object.freeze({ __proto__: null, ARIA_ATTR: Ke, ATTR_WHITESPACE: $e, CUSTOM_ELEMENT: Ze, DATA_ATTR: Je, DOCTYPE_NAME: Xe, ERB_EXPR: qe, IS_ALLOWED_URI: Ge, IS_SCRIPT_OR_DATA: Ye, MUSTACHE_EXPR: ze, TMPLIT_EXPR: He });
11214  var ti = 1;
11215  var ei = 3;
11216  var ii = 7;
11217  var ni = 8;
11218  var ri = 9;
11219  var oi = function() {
11220    return "undefined" == typeof window ? null : window;
11221  };
11222  var si = function t2() {
11223    let e4 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : oi();
11224    const i4 = (e5) => t2(e5);
11225    if (i4.version = "3.2.3", i4.removed = [], !e4 || !e4.document || e4.document.nodeType !== ri)
11226      return i4.isSupported = false, i4;
11227    let { document: n3 } = e4;
11228    const r4 = n3, o3 = r4.currentScript, { DocumentFragment: s4, HTMLTemplateElement: a4, Node: l4, Element: c4, NodeFilter: u4, NamedNodeMap: h4 = e4.NamedNodeMap || e4.MozNamedAttrMap, HTMLFormElement: d3, DOMParser: g5, trustedTypes: m5 } = e4, p4 = c4.prototype, f4 = Ne(p4, "cloneNode"), b4 = Ne(p4, "remove"), v4 = Ne(p4, "nextSibling"), A4 = Ne(p4, "childNodes"), y4 = Ne(p4, "parentNode");
11229    if ("function" == typeof a4) {
11230      const t5 = n3.createElement("template");
11231      t5.content && t5.content.ownerDocument && (n3 = t5.content.ownerDocument);
11232    }
11233    let x5, C4 = "";
11234    const { implementation: E3, createNodeIterator: S3, createDocumentFragment: R2, getElementsByTagName: k4 } = n3, { importNode: T5 } = r4;
11235    let w5 = { afterSanitizeAttributes: [], afterSanitizeElements: [], afterSanitizeShadowDOM: [], beforeSanitizeAttributes: [], beforeSanitizeElements: [], beforeSanitizeShadowDOM: [], uponSanitizeAttribute: [], uponSanitizeElement: [], uponSanitizeShadowNode: [] };
11236    i4.isSupported = "function" == typeof re && "function" == typeof y4 && E3 && void 0 !== E3.createHTMLDocument;
11237    const { MUSTACHE_EXPR: L4, ERB_EXPR: D4, TMPLIT_EXPR: N4, DATA_ATTR: I4, ARIA_ATTR: O3, IS_SCRIPT_OR_DATA: F5, ATTR_WHITESPACE: P4, CUSTOM_ELEMENT: M3 } = Qe;
11238    let { IS_ALLOWED_URI: B4 } = Qe, _4 = null;
11239    const j5 = we({}, [...Ie, ...Oe, ...Fe, ...Me, ..._e]);
11240    let W3 = null;
11241    const U3 = we({}, [...je, ...We, ...Ue, ...Ve]);
11242    let V4 = Object.seal(he(null, { tagNameCheck: { writable: true, configurable: false, enumerable: true, value: null }, attributeNameCheck: { writable: true, configurable: false, enumerable: true, value: null }, allowCustomizedBuiltInElements: { writable: true, configurable: false, enumerable: true, value: false } })), z4 = null, q4 = null, H4 = true, J3 = true, K3 = false, G4 = true, Y2 = false, $5 = true, X3 = false, Z3 = false, Q3 = false, tt2 = false, et2 = false, it2 = false, nt2 = true, rt2 = false, ot2 = true, st2 = false, at2 = {}, lt2 = null;
11243    const ct2 = we({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]);
11244    let ut2 = null;
11245    const ht2 = we({}, ["audio", "video", "img", "source", "image", "track"]);
11246    let dt2 = null;
11247    const gt2 = we({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]), mt2 = "http://www.w3.org/1998/Math/MathML", pt2 = "http://www.w3.org/2000/svg", ft2 = "http://www.w3.org/1999/xhtml";
11248    let bt2 = ft2, vt2 = false, At2 = null;
11249    const yt2 = we({}, [mt2, pt2, ft2], ve);
11250    let xt2 = we({}, ["mi", "mo", "mn", "ms", "mtext"]), Ct2 = we({}, ["annotation-xml"]);
11251    const Et2 = we({}, ["title", "style", "font", "a", "script"]);
11252    let St2 = null;
11253    const Rt2 = ["application/xhtml+xml", "text/html"];
11254    let kt2 = null, Tt2 = null;
11255    const wt2 = n3.createElement("form"), Lt2 = function(t5) {
11256      return t5 instanceof RegExp || t5 instanceof Function;
11257    }, Dt2 = function() {
11258      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
11259      if (!Tt2 || Tt2 !== t5) {
11260        if (t5 && "object" == typeof t5 || (t5 = {}), t5 = De(t5), St2 = -1 === Rt2.indexOf(t5.PARSER_MEDIA_TYPE) ? "text/html" : t5.PARSER_MEDIA_TYPE, kt2 = "application/xhtml+xml" === St2 ? ve : be, _4 = Ee(t5, "ALLOWED_TAGS") ? we({}, t5.ALLOWED_TAGS, kt2) : j5, W3 = Ee(t5, "ALLOWED_ATTR") ? we({}, t5.ALLOWED_ATTR, kt2) : U3, At2 = Ee(t5, "ALLOWED_NAMESPACES") ? we({}, t5.ALLOWED_NAMESPACES, ve) : yt2, dt2 = Ee(t5, "ADD_URI_SAFE_ATTR") ? we(De(gt2), t5.ADD_URI_SAFE_ATTR, kt2) : gt2, ut2 = Ee(t5, "ADD_DATA_URI_TAGS") ? we(De(ht2), t5.ADD_DATA_URI_TAGS, kt2) : ht2, lt2 = Ee(t5, "FORBID_CONTENTS") ? we({}, t5.FORBID_CONTENTS, kt2) : ct2, z4 = Ee(t5, "FORBID_TAGS") ? we({}, t5.FORBID_TAGS, kt2) : {}, q4 = Ee(t5, "FORBID_ATTR") ? we({}, t5.FORBID_ATTR, kt2) : {}, at2 = !!Ee(t5, "USE_PROFILES") && t5.USE_PROFILES, H4 = false !== t5.ALLOW_ARIA_ATTR, J3 = false !== t5.ALLOW_DATA_ATTR, K3 = t5.ALLOW_UNKNOWN_PROTOCOLS || false, G4 = false !== t5.ALLOW_SELF_CLOSE_IN_ATTR, Y2 = t5.SAFE_FOR_TEMPLATES || false, $5 = false !== t5.SAFE_FOR_XML, X3 = t5.WHOLE_DOCUMENT || false, tt2 = t5.RETURN_DOM || false, et2 = t5.RETURN_DOM_FRAGMENT || false, it2 = t5.RETURN_TRUSTED_TYPE || false, Q3 = t5.FORCE_BODY || false, nt2 = false !== t5.SANITIZE_DOM, rt2 = t5.SANITIZE_NAMED_PROPS || false, ot2 = false !== t5.KEEP_CONTENT, st2 = t5.IN_PLACE || false, B4 = t5.ALLOWED_URI_REGEXP || Ge, bt2 = t5.NAMESPACE || ft2, xt2 = t5.MATHML_TEXT_INTEGRATION_POINTS || xt2, Ct2 = t5.HTML_INTEGRATION_POINTS || Ct2, V4 = t5.CUSTOM_ELEMENT_HANDLING || {}, t5.CUSTOM_ELEMENT_HANDLING && Lt2(t5.CUSTOM_ELEMENT_HANDLING.tagNameCheck) && (V4.tagNameCheck = t5.CUSTOM_ELEMENT_HANDLING.tagNameCheck), t5.CUSTOM_ELEMENT_HANDLING && Lt2(t5.CUSTOM_ELEMENT_HANDLING.attributeNameCheck) && (V4.attributeNameCheck = t5.CUSTOM_ELEMENT_HANDLING.attributeNameCheck), t5.CUSTOM_ELEMENT_HANDLING && "boolean" == typeof t5.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (V4.allowCustomizedBuiltInElements = t5.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements), Y2 && (J3 = false), et2 && (tt2 = true), at2 && (_4 = we({}, _e), W3 = [], true === at2.html && (we(_4, Ie), we(W3, je)), true === at2.svg && (we(_4, Oe), we(W3, We), we(W3, Ve)), true === at2.svgFilters && (we(_4, Fe), we(W3, We), we(W3, Ve)), true === at2.mathMl && (we(_4, Me), we(W3, Ue), we(W3, Ve))), t5.ADD_TAGS && (_4 === j5 && (_4 = De(_4)), we(_4, t5.ADD_TAGS, kt2)), t5.ADD_ATTR && (W3 === U3 && (W3 = De(W3)), we(W3, t5.ADD_ATTR, kt2)), t5.ADD_URI_SAFE_ATTR && we(dt2, t5.ADD_URI_SAFE_ATTR, kt2), t5.FORBID_CONTENTS && (lt2 === ct2 && (lt2 = De(lt2)), we(lt2, t5.FORBID_CONTENTS, kt2)), ot2 && (_4["#text"] = true), X3 && we(_4, ["html", "head", "body"]), _4.table && (we(_4, ["tbody"]), delete z4.tbody), t5.TRUSTED_TYPES_POLICY) {
11261          if ("function" != typeof t5.TRUSTED_TYPES_POLICY.createHTML)
11262            throw Re('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');
11263          if ("function" != typeof t5.TRUSTED_TYPES_POLICY.createScriptURL)
11264            throw Re('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');
11265          x5 = t5.TRUSTED_TYPES_POLICY, C4 = x5.createHTML("");
11266        } else
11267          void 0 === x5 && (x5 = function(t6, e5) {
11268            if ("object" != typeof t6 || "function" != typeof t6.createPolicy)
11269              return null;
11270            let i5 = null;
11271            const n4 = "data-tt-policy-suffix";
11272            e5 && e5.hasAttribute(n4) && (i5 = e5.getAttribute(n4));
11273            const r5 = "dompurify" + (i5 ? "#" + i5 : "");
11274            try {
11275              return t6.createPolicy(r5, { createHTML: (t7) => t7, createScriptURL: (t7) => t7 });
11276            } catch (t7) {
11277              return console.warn("TrustedTypes policy " + r5 + " could not be created."), null;
11278            }
11279          }(m5, o3)), null !== x5 && "string" == typeof C4 && (C4 = x5.createHTML(""));
11280        ce && ce(t5), Tt2 = t5;
11281      }
11282    }, Nt2 = we({}, [...Oe, ...Fe, ...Pe]), It2 = we({}, [...Me, ...Be]), Ot2 = function(t5) {
11283      fe(i4.removed, { element: t5 });
11284      try {
11285        y4(t5).removeChild(t5);
11286      } catch (e5) {
11287        b4(t5);
11288      }
11289    }, Ft2 = function(t5, e5) {
11290      try {
11291        fe(i4.removed, { attribute: e5.getAttributeNode(t5), from: e5 });
11292      } catch (t6) {
11293        fe(i4.removed, { attribute: null, from: e5 });
11294      }
11295      if (e5.removeAttribute(t5), "is" === t5)
11296        if (tt2 || et2)
11297          try {
11298            Ot2(e5);
11299          } catch (t6) {
11300          }
11301        else
11302          try {
11303            e5.setAttribute(t5, "");
11304          } catch (t6) {
11305          }
11306    }, Pt2 = function(t5) {
11307      let e5 = null, i5 = null;
11308      if (Q3)
11309        t5 = "<remove></remove>" + t5;
11310      else {
11311        const e6 = Ae(t5, /^[\r\n\t ]+/);
11312        i5 = e6 && e6[0];
11313      }
11314      "application/xhtml+xml" === St2 && bt2 === ft2 && (t5 = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + t5 + "</body></html>");
11315      const r5 = x5 ? x5.createHTML(t5) : t5;
11316      if (bt2 === ft2)
11317        try {
11318          e5 = new g5().parseFromString(r5, St2);
11319        } catch (t6) {
11320        }
11321      if (!e5 || !e5.documentElement) {
11322        e5 = E3.createDocument(bt2, "template", null);
11323        try {
11324          e5.documentElement.innerHTML = vt2 ? C4 : r5;
11325        } catch (t6) {
11326        }
11327      }
11328      const o4 = e5.body || e5.documentElement;
11329      return t5 && i5 && o4.insertBefore(n3.createTextNode(i5), o4.childNodes[0] || null), bt2 === ft2 ? k4.call(e5, X3 ? "html" : "body")[0] : X3 ? e5.documentElement : o4;
11330    }, Mt2 = function(t5) {
11331      return S3.call(t5.ownerDocument || t5, t5, u4.SHOW_ELEMENT | u4.SHOW_COMMENT | u4.SHOW_TEXT | u4.SHOW_PROCESSING_INSTRUCTION | u4.SHOW_CDATA_SECTION, null);
11332    }, Bt2 = function(t5) {
11333      return t5 instanceof d3 && ("string" != typeof t5.nodeName || "string" != typeof t5.textContent || "function" != typeof t5.removeChild || !(t5.attributes instanceof h4) || "function" != typeof t5.removeAttribute || "function" != typeof t5.setAttribute || "string" != typeof t5.namespaceURI || "function" != typeof t5.insertBefore || "function" != typeof t5.hasChildNodes);
11334    }, _t2 = function(t5) {
11335      return "function" == typeof l4 && t5 instanceof l4;
11336    };
11337    function jt2(t5, e5, n4) {
11338      me(t5, (t6) => {
11339        t6.call(i4, e5, n4, Tt2);
11340      });
11341    }
11342    const Wt2 = function(t5) {
11343      let e5 = null;
11344      if (jt2(w5.beforeSanitizeElements, t5, null), Bt2(t5))
11345        return Ot2(t5), true;
11346      const n4 = kt2(t5.nodeName);
11347      if (jt2(w5.uponSanitizeElement, t5, { tagName: n4, allowedTags: _4 }), t5.hasChildNodes() && !_t2(t5.firstElementChild) && Se(/<[/\w]/g, t5.innerHTML) && Se(/<[/\w]/g, t5.textContent))
11348        return Ot2(t5), true;
11349      if (t5.nodeType === ii)
11350        return Ot2(t5), true;
11351      if ($5 && t5.nodeType === ni && Se(/<[/\w]/g, t5.data))
11352        return Ot2(t5), true;
11353      if (!_4[n4] || z4[n4]) {
11354        if (!z4[n4] && Vt2(n4)) {
11355          if (V4.tagNameCheck instanceof RegExp && Se(V4.tagNameCheck, n4))
11356            return false;
11357          if (V4.tagNameCheck instanceof Function && V4.tagNameCheck(n4))
11358            return false;
11359        }
11360        if (ot2 && !lt2[n4]) {
11361          const e6 = y4(t5) || t5.parentNode, i5 = A4(t5) || t5.childNodes;
11362          if (i5 && e6) {
11363            for (let n5 = i5.length - 1; n5 >= 0; --n5) {
11364              const r5 = f4(i5[n5], true);
11365              r5.__removalCount = (t5.__removalCount || 0) + 1, e6.insertBefore(r5, v4(t5));
11366            }
11367          }
11368        }
11369        return Ot2(t5), true;
11370      }
11371      return t5 instanceof c4 && !function(t6) {
11372        let e6 = y4(t6);
11373        e6 && e6.tagName || (e6 = { namespaceURI: bt2, tagName: "template" });
11374        const i5 = be(t6.tagName), n5 = be(e6.tagName);
11375        return !!At2[t6.namespaceURI] && (t6.namespaceURI === pt2 ? e6.namespaceURI === ft2 ? "svg" === i5 : e6.namespaceURI === mt2 ? "svg" === i5 && ("annotation-xml" === n5 || xt2[n5]) : Boolean(Nt2[i5]) : t6.namespaceURI === mt2 ? e6.namespaceURI === ft2 ? "math" === i5 : e6.namespaceURI === pt2 ? "math" === i5 && Ct2[n5] : Boolean(It2[i5]) : t6.namespaceURI === ft2 ? !(e6.namespaceURI === pt2 && !Ct2[n5]) && !(e6.namespaceURI === mt2 && !xt2[n5]) && !It2[i5] && (Et2[i5] || !Nt2[i5]) : !("application/xhtml+xml" !== St2 || !At2[t6.namespaceURI]));
11376      }(t5) ? (Ot2(t5), true) : "noscript" !== n4 && "noembed" !== n4 && "noframes" !== n4 || !Se(/<\/no(script|embed|frames)/i, t5.innerHTML) ? (Y2 && t5.nodeType === ei && (e5 = t5.textContent, me([L4, D4, N4], (t6) => {
11377        e5 = ye(e5, t6, " ");
11378      }), t5.textContent !== e5 && (fe(i4.removed, { element: t5.cloneNode() }), t5.textContent = e5)), jt2(w5.afterSanitizeElements, t5, null), false) : (Ot2(t5), true);
11379    }, Ut2 = function(t5, e5, i5) {
11380      if (nt2 && ("id" === e5 || "name" === e5) && (i5 in n3 || i5 in wt2))
11381        return false;
11382      if (J3 && !q4[e5] && Se(I4, e5))
11383        ;
11384      else if (H4 && Se(O3, e5))
11385        ;
11386      else if (!W3[e5] || q4[e5]) {
11387        if (!(Vt2(t5) && (V4.tagNameCheck instanceof RegExp && Se(V4.tagNameCheck, t5) || V4.tagNameCheck instanceof Function && V4.tagNameCheck(t5)) && (V4.attributeNameCheck instanceof RegExp && Se(V4.attributeNameCheck, e5) || V4.attributeNameCheck instanceof Function && V4.attributeNameCheck(e5)) || "is" === e5 && V4.allowCustomizedBuiltInElements && (V4.tagNameCheck instanceof RegExp && Se(V4.tagNameCheck, i5) || V4.tagNameCheck instanceof Function && V4.tagNameCheck(i5))))
11388          return false;
11389      } else if (dt2[e5])
11390        ;
11391      else if (Se(B4, ye(i5, P4, "")))
11392        ;
11393      else if ("src" !== e5 && "xlink:href" !== e5 && "href" !== e5 || "script" === t5 || 0 !== xe(i5, "data:") || !ut2[t5]) {
11394        if (K3 && !Se(F5, ye(i5, P4, "")))
11395          ;
11396        else if (i5)
11397          return false;
11398      } else
11399        ;
11400      return true;
11401    }, Vt2 = function(t5) {
11402      return "annotation-xml" !== t5 && Ae(t5, M3);
11403    }, zt2 = function(t5) {
11404      jt2(w5.beforeSanitizeAttributes, t5, null);
11405      const { attributes: e5 } = t5;
11406      if (!e5 || Bt2(t5))
11407        return;
11408      const n4 = { attrName: "", attrValue: "", keepAttr: true, allowedAttributes: W3, forceKeepAttr: void 0 };
11409      let r5 = e5.length;
11410      for (; r5--; ) {
11411        const o4 = e5[r5], { name: s5, namespaceURI: a5, value: l5 } = o4, c5 = kt2(s5);
11412        let u5 = "value" === s5 ? l5 : Ce(l5);
11413        if (n4.attrName = c5, n4.attrValue = u5, n4.keepAttr = true, n4.forceKeepAttr = void 0, jt2(w5.uponSanitizeAttribute, t5, n4), u5 = n4.attrValue, !rt2 || "id" !== c5 && "name" !== c5 || (Ft2(s5, t5), u5 = "user-content-" + u5), $5 && Se(/((--!?|])>)|<\/(style|title)/i, u5)) {
11414          Ft2(s5, t5);
11415          continue;
11416        }
11417        if (n4.forceKeepAttr)
11418          continue;
11419        if (Ft2(s5, t5), !n4.keepAttr)
11420          continue;
11421        if (!G4 && Se(/\/>/i, u5)) {
11422          Ft2(s5, t5);
11423          continue;
11424        }
11425        Y2 && me([L4, D4, N4], (t6) => {
11426          u5 = ye(u5, t6, " ");
11427        });
11428        const h5 = kt2(t5.nodeName);
11429        if (Ut2(h5, c5, u5)) {
11430          if (x5 && "object" == typeof m5 && "function" == typeof m5.getAttributeType)
11431            if (a5)
11432              ;
11433            else
11434              switch (m5.getAttributeType(h5, c5)) {
11435                case "TrustedHTML":
11436                  u5 = x5.createHTML(u5);
11437                  break;
11438                case "TrustedScriptURL":
11439                  u5 = x5.createScriptURL(u5);
11440              }
11441          try {
11442            a5 ? t5.setAttributeNS(a5, s5, u5) : t5.setAttribute(s5, u5), Bt2(t5) ? Ot2(t5) : pe(i4.removed);
11443          } catch (t6) {
11444          }
11445        }
11446      }
11447      jt2(w5.afterSanitizeAttributes, t5, null);
11448    }, qt2 = function t5(e5) {
11449      let i5 = null;
11450      const n4 = Mt2(e5);
11451      for (jt2(w5.beforeSanitizeShadowDOM, e5, null); i5 = n4.nextNode(); )
11452        jt2(w5.uponSanitizeShadowNode, i5, null), Wt2(i5), zt2(i5), i5.content instanceof s4 && t5(i5.content);
11453      jt2(w5.afterSanitizeShadowDOM, e5, null);
11454    };
11455    return i4.sanitize = function(t5) {
11456      let e5 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, n4 = null, o4 = null, a5 = null, c5 = null;
11457      if (vt2 = !t5, vt2 && (t5 = "<!-->"), "string" != typeof t5 && !_t2(t5)) {
11458        if ("function" != typeof t5.toString)
11459          throw Re("toString is not a function");
11460        if ("string" != typeof (t5 = t5.toString()))
11461          throw Re("dirty is not a string, aborting");
11462      }
11463      if (!i4.isSupported)
11464        return t5;
11465      if (Z3 || Dt2(e5), i4.removed = [], "string" == typeof t5 && (st2 = false), st2) {
11466        if (t5.nodeName) {
11467          const e6 = kt2(t5.nodeName);
11468          if (!_4[e6] || z4[e6])
11469            throw Re("root node is forbidden and cannot be sanitized in-place");
11470        }
11471      } else if (t5 instanceof l4)
11472        n4 = Pt2("<!---->"), o4 = n4.ownerDocument.importNode(t5, true), o4.nodeType === ti && "BODY" === o4.nodeName || "HTML" === o4.nodeName ? n4 = o4 : n4.appendChild(o4);
11473      else {
11474        if (!tt2 && !Y2 && !X3 && -1 === t5.indexOf("<"))
11475          return x5 && it2 ? x5.createHTML(t5) : t5;
11476        if (n4 = Pt2(t5), !n4)
11477          return tt2 ? null : it2 ? C4 : "";
11478      }
11479      n4 && Q3 && Ot2(n4.firstChild);
11480      const u5 = Mt2(st2 ? t5 : n4);
11481      for (; a5 = u5.nextNode(); )
11482        Wt2(a5), zt2(a5), a5.content instanceof s4 && qt2(a5.content);
11483      if (st2)
11484        return t5;
11485      if (tt2) {
11486        if (et2)
11487          for (c5 = R2.call(n4.ownerDocument); n4.firstChild; )
11488            c5.appendChild(n4.firstChild);
11489        else
11490          c5 = n4;
11491        return (W3.shadowroot || W3.shadowrootmode) && (c5 = T5.call(r4, c5, true)), c5;
11492      }
11493      let h5 = X3 ? n4.outerHTML : n4.innerHTML;
11494      return X3 && _4["!doctype"] && n4.ownerDocument && n4.ownerDocument.doctype && n4.ownerDocument.doctype.name && Se(Xe, n4.ownerDocument.doctype.name) && (h5 = "<!DOCTYPE " + n4.ownerDocument.doctype.name + ">\n" + h5), Y2 && me([L4, D4, N4], (t6) => {
11495        h5 = ye(h5, t6, " ");
11496      }), x5 && it2 ? x5.createHTML(h5) : h5;
11497    }, i4.setConfig = function() {
11498      Dt2(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}), Z3 = true;
11499    }, i4.clearConfig = function() {
11500      Tt2 = null, Z3 = false;
11501    }, i4.isValidAttribute = function(t5, e5, i5) {
11502      Tt2 || Dt2({});
11503      const n4 = kt2(t5), r5 = kt2(e5);
11504      return Ut2(n4, r5, i5);
11505    }, i4.addHook = function(t5, e5) {
11506      "function" == typeof e5 && fe(w5[t5], e5);
11507    }, i4.removeHook = function(t5) {
11508      return pe(w5[t5]);
11509    }, i4.removeHooks = function(t5) {
11510      w5[t5] = [];
11511    }, i4.removeAllHooks = function() {
11512      w5 = { afterSanitizeAttributes: [], afterSanitizeElements: [], afterSanitizeShadowDOM: [], beforeSanitizeAttributes: [], beforeSanitizeElements: [], beforeSanitizeShadowDOM: [], uponSanitizeAttribute: [], uponSanitizeElement: [], uponSanitizeShadowNode: [] };
11513    }, i4;
11514  }();
11515  si.addHook("uponSanitizeAttribute", function(t5, e4) {
11516    /^data-trix-/.test(e4.attrName) && (e4.forceKeepAttr = true);
11517  });
11518  var ai = "style href src width height language class".split(" ");
11519  var li = "javascript:".split(" ");
11520  var ci = "script iframe form noscript".split(" ");
11521  var ui = class extends q {
11522    static setHTML(t5, e4) {
11523      const i4 = new this(e4).sanitize(), n3 = i4.getHTML ? i4.getHTML() : i4.outerHTML;
11524      t5.innerHTML = n3;
11525    }
11526    static sanitize(t5, e4) {
11527      const i4 = new this(t5, e4);
11528      return i4.sanitize(), i4;
11529    }
11530    constructor(t5) {
11531      let { allowedAttributes: e4, forbiddenProtocols: i4, forbiddenElements: n3 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
11532      super(...arguments), this.allowedAttributes = e4 || ai, this.forbiddenProtocols = i4 || li, this.forbiddenElements = n3 || ci, this.body = hi(t5);
11533    }
11534    sanitize() {
11535      return this.sanitizeElements(), this.normalizeListElementNesting(), si.setConfig(l), this.body = si.sanitize(this.body), this.body;
11536    }
11537    getHTML() {
11538      return this.body.innerHTML;
11539    }
11540    getBody() {
11541      return this.body;
11542    }
11543    sanitizeElements() {
11544      const t5 = R(this.body), e4 = [];
11545      for (; t5.nextNode(); ) {
11546        const i4 = t5.currentNode;
11547        switch (i4.nodeType) {
11548          case Node.ELEMENT_NODE:
11549            this.elementIsRemovable(i4) ? e4.push(i4) : this.sanitizeElement(i4);
11550            break;
11551          case Node.COMMENT_NODE:
11552            e4.push(i4);
11553        }
11554      }
11555      return e4.forEach((t6) => S(t6)), this.body;
11556    }
11557    sanitizeElement(t5) {
11558      return t5.hasAttribute("href") && this.forbiddenProtocols.includes(t5.protocol) && t5.removeAttribute("href"), Array.from(t5.attributes).forEach((e4) => {
11559        let { name: i4 } = e4;
11560        this.allowedAttributes.includes(i4) || 0 === i4.indexOf("data-trix") || t5.removeAttribute(i4);
11561      }), t5;
11562    }
11563    normalizeListElementNesting() {
11564      return Array.from(this.body.querySelectorAll("ul,ol")).forEach((t5) => {
11565        const e4 = t5.previousElementSibling;
11566        e4 && "li" === k(e4) && e4.appendChild(t5);
11567      }), this.body;
11568    }
11569    elementIsRemovable(t5) {
11570      if ((null == t5 ? void 0 : t5.nodeType) === Node.ELEMENT_NODE)
11571        return this.elementIsForbidden(t5) || this.elementIsntSerializable(t5);
11572    }
11573    elementIsForbidden(t5) {
11574      return this.forbiddenElements.includes(k(t5));
11575    }
11576    elementIsntSerializable(t5) {
11577      return "false" === t5.getAttribute("data-trix-serialize") && !P(t5);
11578    }
11579  };
11580  var hi = function() {
11581    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
11582    t5 = t5.replace(/<\/html[^>]*>[^]*$/i, "</html>");
11583    const e4 = document.implementation.createHTMLDocument("");
11584    return e4.documentElement.innerHTML = t5, Array.from(e4.head.querySelectorAll("style")).forEach((t6) => {
11585      e4.body.appendChild(t6);
11586    }), e4.body;
11587  };
11588  var { css: di } = z;
11589  var gi = class extends ie {
11590    constructor() {
11591      super(...arguments), this.attachment = this.object, this.attachment.uploadProgressDelegate = this, this.attachmentPiece = this.options.piece;
11592    }
11593    createContentNodes() {
11594      return [];
11595    }
11596    createNodes() {
11597      let t5;
11598      const e4 = t5 = T({ tagName: "figure", className: this.getClassName(), data: this.getData(), editable: false }), i4 = this.getHref();
11599      return i4 && (t5 = T({ tagName: "a", editable: false, attributes: { href: i4, tabindex: -1 } }), e4.appendChild(t5)), this.attachment.hasContent() ? ui.setHTML(t5, this.attachment.getContent()) : this.createContentNodes().forEach((e5) => {
11600        t5.appendChild(e5);
11601      }), t5.appendChild(this.createCaptionElement()), this.attachment.isPending() && (this.progressElement = T({ tagName: "progress", attributes: { class: di.attachmentProgress, value: this.attachment.getUploadProgress(), max: 100 }, data: { trixMutable: true, trixStoreKey: ["progressElement", this.attachment.id].join("/") } }), e4.appendChild(this.progressElement)), [mi("left"), e4, mi("right")];
11602    }
11603    createCaptionElement() {
11604      const t5 = T({ tagName: "figcaption", className: di.attachmentCaption }), e4 = this.attachmentPiece.getCaption();
11605      if (e4)
11606        t5.classList.add("".concat(di.attachmentCaption, "--edited")), t5.textContent = e4;
11607      else {
11608        let e5, i4;
11609        const n3 = this.getCaptionConfig();
11610        if (n3.name && (e5 = this.attachment.getFilename()), n3.size && (i4 = this.attachment.getFormattedFilesize()), e5) {
11611          const i5 = T({ tagName: "span", className: di.attachmentName, textContent: e5 });
11612          t5.appendChild(i5);
11613        }
11614        if (i4) {
11615          e5 && t5.appendChild(document.createTextNode(" "));
11616          const n4 = T({ tagName: "span", className: di.attachmentSize, textContent: i4 });
11617          t5.appendChild(n4);
11618        }
11619      }
11620      return t5;
11621    }
11622    getClassName() {
11623      const t5 = [di.attachment, "".concat(di.attachment, "--").concat(this.attachment.getType())], e4 = this.attachment.getExtension();
11624      return e4 && t5.push("".concat(di.attachment, "--").concat(e4)), t5.join(" ");
11625    }
11626    getData() {
11627      const t5 = { trixAttachment: JSON.stringify(this.attachment), trixContentType: this.attachment.getContentType(), trixId: this.attachment.id }, { attributes: e4 } = this.attachmentPiece;
11628      return e4.isEmpty() || (t5.trixAttributes = JSON.stringify(e4)), this.attachment.isPending() && (t5.trixSerialize = false), t5;
11629    }
11630    getHref() {
11631      if (!pi(this.attachment.getContent(), "a"))
11632        return this.attachment.getHref();
11633    }
11634    getCaptionConfig() {
11635      var t5;
11636      const e4 = this.attachment.getType(), n3 = kt(null === (t5 = i[e4]) || void 0 === t5 ? void 0 : t5.caption);
11637      return "file" === e4 && (n3.name = true), n3;
11638    }
11639    findProgressElement() {
11640      var t5;
11641      return null === (t5 = this.findElement()) || void 0 === t5 ? void 0 : t5.querySelector("progress");
11642    }
11643    attachmentDidChangeUploadProgress() {
11644      const t5 = this.attachment.getUploadProgress(), e4 = this.findProgressElement();
11645      e4 && (e4.value = t5);
11646    }
11647  };
11648  var mi = (t5) => T({ tagName: "span", textContent: d, data: { trixCursorTarget: t5, trixSerialize: false } });
11649  var pi = function(t5, e4) {
11650    const i4 = T("div");
11651    return ui.setHTML(i4, t5 || ""), i4.querySelector(e4);
11652  };
11653  var fi = class extends gi {
11654    constructor() {
11655      super(...arguments), this.attachment.previewDelegate = this;
11656    }
11657    createContentNodes() {
11658      return this.image = T({ tagName: "img", attributes: { src: "" }, data: { trixMutable: true } }), this.refresh(this.image), [this.image];
11659    }
11660    createCaptionElement() {
11661      const t5 = super.createCaptionElement(...arguments);
11662      return t5.textContent || t5.setAttribute("data-trix-placeholder", c.captionPlaceholder), t5;
11663    }
11664    refresh(t5) {
11665      var e4;
11666      t5 || (t5 = null === (e4 = this.findElement()) || void 0 === e4 ? void 0 : e4.querySelector("img"));
11667      if (t5)
11668        return this.updateAttributesForImage(t5);
11669    }
11670    updateAttributesForImage(t5) {
11671      const e4 = this.attachment.getURL(), i4 = this.attachment.getPreviewURL();
11672      if (t5.src = i4 || e4, i4 === e4)
11673        t5.removeAttribute("data-trix-serialized-attributes");
11674      else {
11675        const i5 = JSON.stringify({ src: e4 });
11676        t5.setAttribute("data-trix-serialized-attributes", i5);
11677      }
11678      const n3 = this.attachment.getWidth(), r4 = this.attachment.getHeight();
11679      null != n3 && (t5.width = n3), null != r4 && (t5.height = r4);
11680      const o3 = ["imageElement", this.attachment.id, t5.src, t5.width, t5.height].join("/");
11681      t5.dataset.trixStoreKey = o3;
11682    }
11683    attachmentDidChangeAttributes() {
11684      return this.refresh(this.image), this.refresh();
11685    }
11686  };
11687  var bi = class extends ie {
11688    constructor() {
11689      super(...arguments), this.piece = this.object, this.attributes = this.piece.getAttributes(), this.textConfig = this.options.textConfig, this.context = this.options.context, this.piece.attachment ? this.attachment = this.piece.attachment : this.string = this.piece.toString();
11690    }
11691    createNodes() {
11692      let t5 = this.attachment ? this.createAttachmentNodes() : this.createStringNodes();
11693      const e4 = this.createElement();
11694      if (e4) {
11695        const i4 = function(t6) {
11696          for (; null !== (e5 = t6) && void 0 !== e5 && e5.firstElementChild; ) {
11697            var e5;
11698            t6 = t6.firstElementChild;
11699          }
11700          return t6;
11701        }(e4);
11702        Array.from(t5).forEach((t6) => {
11703          i4.appendChild(t6);
11704        }), t5 = [e4];
11705      }
11706      return t5;
11707    }
11708    createAttachmentNodes() {
11709      const t5 = this.attachment.isPreviewable() ? fi : gi;
11710      return this.createChildView(t5, this.piece.attachment, { piece: this.piece }).getNodes();
11711    }
11712    createStringNodes() {
11713      var t5;
11714      if (null !== (t5 = this.textConfig) && void 0 !== t5 && t5.plaintext)
11715        return [document.createTextNode(this.string)];
11716      {
11717        const t6 = [], e4 = this.string.split("\n");
11718        for (let i4 = 0; i4 < e4.length; i4++) {
11719          const n3 = e4[i4];
11720          if (i4 > 0) {
11721            const e5 = T("br");
11722            t6.push(e5);
11723          }
11724          if (n3.length) {
11725            const e5 = document.createTextNode(this.preserveSpaces(n3));
11726            t6.push(e5);
11727          }
11728        }
11729        return t6;
11730      }
11731    }
11732    createElement() {
11733      let t5, e4, i4;
11734      const n3 = {};
11735      for (e4 in this.attributes) {
11736        i4 = this.attributes[e4];
11737        const o3 = ft(e4);
11738        if (o3) {
11739          if (o3.tagName) {
11740            var r4;
11741            const e5 = T(o3.tagName);
11742            r4 ? (r4.appendChild(e5), r4 = e5) : t5 = r4 = e5;
11743          }
11744          if (o3.styleProperty && (n3[o3.styleProperty] = i4), o3.style)
11745            for (e4 in o3.style)
11746              i4 = o3.style[e4], n3[e4] = i4;
11747        }
11748      }
11749      if (Object.keys(n3).length)
11750        for (e4 in t5 || (t5 = T("span")), n3)
11751          i4 = n3[e4], t5.style[e4] = i4;
11752      return t5;
11753    }
11754    createContainerElement() {
11755      for (const t5 in this.attributes) {
11756        const e4 = this.attributes[t5], i4 = ft(t5);
11757        if (i4 && i4.groupTagName) {
11758          const n3 = {};
11759          return n3[t5] = e4, T(i4.groupTagName, n3);
11760        }
11761      }
11762    }
11763    preserveSpaces(t5) {
11764      return this.context.isLast && (t5 = t5.replace(/\ $/, g)), t5 = t5.replace(/(\S)\ {3}(\S)/g, "$1 ".concat(g, " $2")).replace(/\ {2}/g, "".concat(g, " ")).replace(/\ {2}/g, " ".concat(g)), (this.context.isFirst || this.context.followsWhitespace) && (t5 = t5.replace(/^\ /, g)), t5;
11765    }
11766  };
11767  var vi = class extends ie {
11768    constructor() {
11769      super(...arguments), this.text = this.object, this.textConfig = this.options.textConfig;
11770    }
11771    createNodes() {
11772      const t5 = [], e4 = Xt.groupObjects(this.getPieces()), i4 = e4.length - 1;
11773      for (let r4 = 0; r4 < e4.length; r4++) {
11774        const o3 = e4[r4], s4 = {};
11775        0 === r4 && (s4.isFirst = true), r4 === i4 && (s4.isLast = true), Ai(n3) && (s4.followsWhitespace = true);
11776        const a4 = this.findOrCreateCachedChildView(bi, o3, { textConfig: this.textConfig, context: s4 });
11777        t5.push(...Array.from(a4.getNodes() || []));
11778        var n3 = o3;
11779      }
11780      return t5;
11781    }
11782    getPieces() {
11783      return Array.from(this.text.getPieces()).filter((t5) => !t5.hasAttribute("blockBreak"));
11784    }
11785  };
11786  var Ai = (t5) => /\s$/.test(null == t5 ? void 0 : t5.toString());
11787  var { css: yi } = z;
11788  var xi = class extends ie {
11789    constructor() {
11790      super(...arguments), this.block = this.object, this.attributes = this.block.getAttributes();
11791    }
11792    createNodes() {
11793      const t5 = [document.createComment("block")];
11794      if (this.block.isEmpty())
11795        t5.push(T("br"));
11796      else {
11797        var e4;
11798        const i4 = null === (e4 = mt(this.block.getLastAttribute())) || void 0 === e4 ? void 0 : e4.text, n3 = this.findOrCreateCachedChildView(vi, this.block.text, { textConfig: i4 });
11799        t5.push(...Array.from(n3.getNodes() || [])), this.shouldAddExtraNewlineElement() && t5.push(T("br"));
11800      }
11801      if (this.attributes.length)
11802        return t5;
11803      {
11804        let e5;
11805        const { tagName: i4 } = n.default;
11806        this.block.isRTL() && (e5 = { dir: "rtl" });
11807        const r4 = T({ tagName: i4, attributes: e5 });
11808        return t5.forEach((t6) => r4.appendChild(t6)), [r4];
11809      }
11810    }
11811    createContainerElement(t5) {
11812      const e4 = {};
11813      let i4;
11814      const n3 = this.attributes[t5], { tagName: r4, htmlAttributes: o3 = [] } = mt(n3);
11815      if (0 === t5 && this.block.isRTL() && Object.assign(e4, { dir: "rtl" }), "attachmentGallery" === n3) {
11816        const t6 = this.block.getBlockBreakPosition();
11817        i4 = "".concat(yi.attachmentGallery, " ").concat(yi.attachmentGallery, "--").concat(t6);
11818      }
11819      return Object.entries(this.block.htmlAttributes).forEach((t6) => {
11820        let [i5, n4] = t6;
11821        o3.includes(i5) && (e4[i5] = n4);
11822      }), T({ tagName: r4, className: i4, attributes: e4 });
11823    }
11824    shouldAddExtraNewlineElement() {
11825      return /\n\n$/.test(this.block.toString());
11826    }
11827  };
11828  var Ci = class extends ie {
11829    static render(t5) {
11830      const e4 = T("div"), i4 = new this(t5, { element: e4 });
11831      return i4.render(), i4.sync(), e4;
11832    }
11833    constructor() {
11834      super(...arguments), this.element = this.options.element, this.elementStore = new Qt(), this.setDocument(this.object);
11835    }
11836    setDocument(t5) {
11837      t5.isEqualTo(this.document) || (this.document = this.object = t5);
11838    }
11839    render() {
11840      if (this.childViews = [], this.shadowElement = T("div"), !this.document.isEmpty()) {
11841        const t5 = Xt.groupObjects(this.document.getBlocks(), { asTree: true });
11842        Array.from(t5).forEach((t6) => {
11843          const e4 = this.findOrCreateCachedChildView(xi, t6);
11844          Array.from(e4.getNodes()).map((t7) => this.shadowElement.appendChild(t7));
11845        });
11846      }
11847    }
11848    isSynced() {
11849      return Si(this.shadowElement, this.element);
11850    }
11851    sync() {
11852      const t5 = this.createDocumentFragmentForSync();
11853      for (; this.element.lastChild; )
11854        this.element.removeChild(this.element.lastChild);
11855      return this.element.appendChild(t5), this.didSync();
11856    }
11857    didSync() {
11858      return this.elementStore.reset(Ei(this.element)), Rt(() => this.garbageCollectCachedViews());
11859    }
11860    createDocumentFragmentForSync() {
11861      const t5 = document.createDocumentFragment();
11862      return Array.from(this.shadowElement.childNodes).forEach((e4) => {
11863        t5.appendChild(e4.cloneNode(true));
11864      }), Array.from(Ei(t5)).forEach((t6) => {
11865        const e4 = this.elementStore.remove(t6);
11866        e4 && t6.parentNode.replaceChild(e4, t6);
11867      }), t5;
11868    }
11869  };
11870  var Ei = (t5) => t5.querySelectorAll("[data-trix-store-key]");
11871  var Si = (t5, e4) => Ri(t5.innerHTML) === Ri(e4.innerHTML);
11872  var Ri = (t5) => t5.replace(/&nbsp;/g, " ");
11873  function ki(t5) {
11874    var e4, i4;
11875    function n3(e5, i5) {
11876      try {
11877        var o3 = t5[e5](i5), s4 = o3.value, a4 = s4 instanceof Ti;
11878        Promise.resolve(a4 ? s4.v : s4).then(function(i6) {
11879          if (a4) {
11880            var l4 = "return" === e5 ? "return" : "next";
11881            if (!s4.k || i6.done)
11882              return n3(l4, i6);
11883            i6 = t5[l4](i6).value;
11884          }
11885          r4(o3.done ? "return" : "normal", i6);
11886        }, function(t6) {
11887          n3("throw", t6);
11888        });
11889      } catch (t6) {
11890        r4("throw", t6);
11891      }
11892    }
11893    function r4(t6, r5) {
11894      switch (t6) {
11895        case "return":
11896          e4.resolve({ value: r5, done: true });
11897          break;
11898        case "throw":
11899          e4.reject(r5);
11900          break;
11901        default:
11902          e4.resolve({ value: r5, done: false });
11903      }
11904      (e4 = e4.next) ? n3(e4.key, e4.arg) : i4 = null;
11905    }
11906    this._invoke = function(t6, r5) {
11907      return new Promise(function(o3, s4) {
11908        var a4 = { key: t6, arg: r5, resolve: o3, reject: s4, next: null };
11909        i4 ? i4 = i4.next = a4 : (e4 = i4 = a4, n3(t6, r5));
11910      });
11911    }, "function" != typeof t5.return && (this.return = void 0);
11912  }
11913  function Ti(t5, e4) {
11914    this.v = t5, this.k = e4;
11915  }
11916  function wi(t5, e4, i4) {
11917    return (e4 = Li(e4)) in t5 ? Object.defineProperty(t5, e4, { value: i4, enumerable: true, configurable: true, writable: true }) : t5[e4] = i4, t5;
11918  }
11919  function Li(t5) {
11920    var e4 = function(t6, e5) {
11921      if ("object" != typeof t6 || null === t6)
11922        return t6;
11923      var i4 = t6[Symbol.toPrimitive];
11924      if (void 0 !== i4) {
11925        var n3 = i4.call(t6, e5 || "default");
11926        if ("object" != typeof n3)
11927          return n3;
11928        throw new TypeError("@@toPrimitive must return a primitive value.");
11929      }
11930      return ("string" === e5 ? String : Number)(t6);
11931    }(t5, "string");
11932    return "symbol" == typeof e4 ? e4 : String(e4);
11933  }
11934  ki.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function() {
11935    return this;
11936  }, ki.prototype.next = function(t5) {
11937    return this._invoke("next", t5);
11938  }, ki.prototype.throw = function(t5) {
11939    return this._invoke("throw", t5);
11940  }, ki.prototype.return = function(t5) {
11941    return this._invoke("return", t5);
11942  };
11943  function Di(t5, e4) {
11944    return Oi(t5, Ii(t5, e4, "get"));
11945  }
11946  function Ni(t5, e4, i4) {
11947    return Fi(t5, Ii(t5, e4, "set"), i4), i4;
11948  }
11949  function Ii(t5, e4, i4) {
11950    if (!e4.has(t5))
11951      throw new TypeError("attempted to " + i4 + " private field on non-instance");
11952    return e4.get(t5);
11953  }
11954  function Oi(t5, e4) {
11955    return e4.get ? e4.get.call(t5) : e4.value;
11956  }
11957  function Fi(t5, e4, i4) {
11958    if (e4.set)
11959      e4.set.call(t5, i4);
11960    else {
11961      if (!e4.writable)
11962        throw new TypeError("attempted to set read only private field");
11963      e4.value = i4;
11964    }
11965  }
11966  function Pi(t5, e4, i4) {
11967    if (!e4.has(t5))
11968      throw new TypeError("attempted to get private field on non-instance");
11969    return i4;
11970  }
11971  function Mi(t5, e4) {
11972    if (e4.has(t5))
11973      throw new TypeError("Cannot initialize the same private elements twice on an object");
11974  }
11975  function Bi(t5, e4, i4) {
11976    Mi(t5, e4), e4.set(t5, i4);
11977  }
11978  var _i = class extends rt {
11979    static registerType(t5, e4) {
11980      e4.type = t5, this.types[t5] = e4;
11981    }
11982    static fromJSON(t5) {
11983      const e4 = this.types[t5.type];
11984      if (e4)
11985        return e4.fromJSON(t5);
11986    }
11987    constructor(t5) {
11988      let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
11989      super(...arguments), this.attributes = Ht.box(e4);
11990    }
11991    copyWithAttributes(t5) {
11992      return new this.constructor(this.getValue(), t5);
11993    }
11994    copyWithAdditionalAttributes(t5) {
11995      return this.copyWithAttributes(this.attributes.merge(t5));
11996    }
11997    copyWithoutAttribute(t5) {
11998      return this.copyWithAttributes(this.attributes.remove(t5));
11999    }
12000    copy() {
12001      return this.copyWithAttributes(this.attributes);
12002    }
12003    getAttribute(t5) {
12004      return this.attributes.get(t5);
12005    }
12006    getAttributesHash() {
12007      return this.attributes;
12008    }
12009    getAttributes() {
12010      return this.attributes.toObject();
12011    }
12012    hasAttribute(t5) {
12013      return this.attributes.has(t5);
12014    }
12015    hasSameStringValueAsPiece(t5) {
12016      return t5 && this.toString() === t5.toString();
12017    }
12018    hasSameAttributesAsPiece(t5) {
12019      return t5 && (this.attributes === t5.attributes || this.attributes.isEqualTo(t5.attributes));
12020    }
12021    isBlockBreak() {
12022      return false;
12023    }
12024    isEqualTo(t5) {
12025      return super.isEqualTo(...arguments) || this.hasSameConstructorAs(t5) && this.hasSameStringValueAsPiece(t5) && this.hasSameAttributesAsPiece(t5);
12026    }
12027    isEmpty() {
12028      return 0 === this.length;
12029    }
12030    isSerializable() {
12031      return true;
12032    }
12033    toJSON() {
12034      return { type: this.constructor.type, attributes: this.getAttributes() };
12035    }
12036    contentsForInspection() {
12037      return { type: this.constructor.type, attributes: this.attributes.inspect() };
12038    }
12039    canBeGrouped() {
12040      return this.hasAttribute("href");
12041    }
12042    canBeGroupedWith(t5) {
12043      return this.getAttribute("href") === t5.getAttribute("href");
12044    }
12045    getLength() {
12046      return this.length;
12047    }
12048    canBeConsolidatedWith(t5) {
12049      return false;
12050    }
12051  };
12052  wi(_i, "types", {});
12053  var ji = class extends ee {
12054    constructor(t5) {
12055      super(...arguments), this.url = t5;
12056    }
12057    perform(t5) {
12058      const e4 = new Image();
12059      e4.onload = () => (e4.width = this.width = e4.naturalWidth, e4.height = this.height = e4.naturalHeight, t5(true, e4)), e4.onerror = () => t5(false), e4.src = this.url;
12060    }
12061  };
12062  var Wi = class extends rt {
12063    static attachmentForFile(t5) {
12064      const e4 = new this(this.attributesForFile(t5));
12065      return e4.setFile(t5), e4;
12066    }
12067    static attributesForFile(t5) {
12068      return new Ht({ filename: t5.name, filesize: t5.size, contentType: t5.type });
12069    }
12070    static fromJSON(t5) {
12071      return new this(t5);
12072    }
12073    constructor() {
12074      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
12075      super(t5), this.releaseFile = this.releaseFile.bind(this), this.attributes = Ht.box(t5), this.didChangeAttributes();
12076    }
12077    getAttribute(t5) {
12078      return this.attributes.get(t5);
12079    }
12080    hasAttribute(t5) {
12081      return this.attributes.has(t5);
12082    }
12083    getAttributes() {
12084      return this.attributes.toObject();
12085    }
12086    setAttributes() {
12087      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
12088      const e4 = this.attributes.merge(t5);
12089      var i4, n3, r4, o3;
12090      if (!this.attributes.isEqualTo(e4))
12091        return this.attributes = e4, this.didChangeAttributes(), null === (i4 = this.previewDelegate) || void 0 === i4 || null === (n3 = i4.attachmentDidChangeAttributes) || void 0 === n3 || n3.call(i4, this), null === (r4 = this.delegate) || void 0 === r4 || null === (o3 = r4.attachmentDidChangeAttributes) || void 0 === o3 ? void 0 : o3.call(r4, this);
12092    }
12093    didChangeAttributes() {
12094      if (this.isPreviewable())
12095        return this.preloadURL();
12096    }
12097    isPending() {
12098      return null != this.file && !(this.getURL() || this.getHref());
12099    }
12100    isPreviewable() {
12101      return this.attributes.has("previewable") ? this.attributes.get("previewable") : Wi.previewablePattern.test(this.getContentType());
12102    }
12103    getType() {
12104      return this.hasContent() ? "content" : this.isPreviewable() ? "preview" : "file";
12105    }
12106    getURL() {
12107      return this.attributes.get("url");
12108    }
12109    getHref() {
12110      return this.attributes.get("href");
12111    }
12112    getFilename() {
12113      return this.attributes.get("filename") || "";
12114    }
12115    getFilesize() {
12116      return this.attributes.get("filesize");
12117    }
12118    getFormattedFilesize() {
12119      const t5 = this.attributes.get("filesize");
12120      return "number" == typeof t5 ? h.formatter(t5) : "";
12121    }
12122    getExtension() {
12123      var t5;
12124      return null === (t5 = this.getFilename().match(/\.(\w+)$/)) || void 0 === t5 ? void 0 : t5[1].toLowerCase();
12125    }
12126    getContentType() {
12127      return this.attributes.get("contentType");
12128    }
12129    hasContent() {
12130      return this.attributes.has("content");
12131    }
12132    getContent() {
12133      return this.attributes.get("content");
12134    }
12135    getWidth() {
12136      return this.attributes.get("width");
12137    }
12138    getHeight() {
12139      return this.attributes.get("height");
12140    }
12141    getFile() {
12142      return this.file;
12143    }
12144    setFile(t5) {
12145      if (this.file = t5, this.isPreviewable())
12146        return this.preloadFile();
12147    }
12148    releaseFile() {
12149      this.releasePreloadedFile(), this.file = null;
12150    }
12151    getUploadProgress() {
12152      return null != this.uploadProgress ? this.uploadProgress : 0;
12153    }
12154    setUploadProgress(t5) {
12155      var e4, i4;
12156      if (this.uploadProgress !== t5)
12157        return this.uploadProgress = t5, null === (e4 = this.uploadProgressDelegate) || void 0 === e4 || null === (i4 = e4.attachmentDidChangeUploadProgress) || void 0 === i4 ? void 0 : i4.call(e4, this);
12158    }
12159    toJSON() {
12160      return this.getAttributes();
12161    }
12162    getCacheKey() {
12163      return [super.getCacheKey(...arguments), this.attributes.getCacheKey(), this.getPreviewURL()].join("/");
12164    }
12165    getPreviewURL() {
12166      return this.previewURL || this.preloadingURL;
12167    }
12168    setPreviewURL(t5) {
12169      var e4, i4, n3, r4;
12170      if (t5 !== this.getPreviewURL())
12171        return this.previewURL = t5, null === (e4 = this.previewDelegate) || void 0 === e4 || null === (i4 = e4.attachmentDidChangeAttributes) || void 0 === i4 || i4.call(e4, this), null === (n3 = this.delegate) || void 0 === n3 || null === (r4 = n3.attachmentDidChangePreviewURL) || void 0 === r4 ? void 0 : r4.call(n3, this);
12172    }
12173    preloadURL() {
12174      return this.preload(this.getURL(), this.releaseFile);
12175    }
12176    preloadFile() {
12177      if (this.file)
12178        return this.fileObjectURL = URL.createObjectURL(this.file), this.preload(this.fileObjectURL);
12179    }
12180    releasePreloadedFile() {
12181      this.fileObjectURL && (URL.revokeObjectURL(this.fileObjectURL), this.fileObjectURL = null);
12182    }
12183    preload(t5, e4) {
12184      if (t5 && t5 !== this.getPreviewURL()) {
12185        this.preloadingURL = t5;
12186        return new ji(t5).then((i4) => {
12187          let { width: n3, height: r4 } = i4;
12188          return this.getWidth() && this.getHeight() || this.setAttributes({ width: n3, height: r4 }), this.preloadingURL = null, this.setPreviewURL(t5), null == e4 ? void 0 : e4();
12189        }).catch(() => (this.preloadingURL = null, null == e4 ? void 0 : e4()));
12190      }
12191    }
12192  };
12193  wi(Wi, "previewablePattern", /^image(\/(gif|png|webp|jpe?g)|$)/);
12194  var Ui = class extends _i {
12195    static fromJSON(t5) {
12196      return new this(Wi.fromJSON(t5.attachment), t5.attributes);
12197    }
12198    constructor(t5) {
12199      super(...arguments), this.attachment = t5, this.length = 1, this.ensureAttachmentExclusivelyHasAttribute("href"), this.attachment.hasContent() || this.removeProhibitedAttributes();
12200    }
12201    ensureAttachmentExclusivelyHasAttribute(t5) {
12202      this.hasAttribute(t5) && (this.attachment.hasAttribute(t5) || this.attachment.setAttributes(this.attributes.slice([t5])), this.attributes = this.attributes.remove(t5));
12203    }
12204    removeProhibitedAttributes() {
12205      const t5 = this.attributes.slice(Ui.permittedAttributes);
12206      t5.isEqualTo(this.attributes) || (this.attributes = t5);
12207    }
12208    getValue() {
12209      return this.attachment;
12210    }
12211    isSerializable() {
12212      return !this.attachment.isPending();
12213    }
12214    getCaption() {
12215      return this.attributes.get("caption") || "";
12216    }
12217    isEqualTo(t5) {
12218      var e4;
12219      return super.isEqualTo(t5) && this.attachment.id === (null == t5 || null === (e4 = t5.attachment) || void 0 === e4 ? void 0 : e4.id);
12220    }
12221    toString() {
12222      return "\uFFFC";
12223    }
12224    toJSON() {
12225      const t5 = super.toJSON(...arguments);
12226      return t5.attachment = this.attachment, t5;
12227    }
12228    getCacheKey() {
12229      return [super.getCacheKey(...arguments), this.attachment.getCacheKey()].join("/");
12230    }
12231    toConsole() {
12232      return JSON.stringify(this.toString());
12233    }
12234  };
12235  wi(Ui, "permittedAttributes", ["caption", "presentation"]), _i.registerType("attachment", Ui);
12236  var Vi = class extends _i {
12237    static fromJSON(t5) {
12238      return new this(t5.string, t5.attributes);
12239    }
12240    constructor(t5) {
12241      super(...arguments), this.string = ((t6) => t6.replace(/\r\n?/g, "\n"))(t5), this.length = this.string.length;
12242    }
12243    getValue() {
12244      return this.string;
12245    }
12246    toString() {
12247      return this.string.toString();
12248    }
12249    isBlockBreak() {
12250      return "\n" === this.toString() && true === this.getAttribute("blockBreak");
12251    }
12252    toJSON() {
12253      const t5 = super.toJSON(...arguments);
12254      return t5.string = this.string, t5;
12255    }
12256    canBeConsolidatedWith(t5) {
12257      return t5 && this.hasSameConstructorAs(t5) && this.hasSameAttributesAsPiece(t5);
12258    }
12259    consolidateWith(t5) {
12260      return new this.constructor(this.toString() + t5.toString(), this.attributes);
12261    }
12262    splitAtOffset(t5) {
12263      let e4, i4;
12264      return 0 === t5 ? (e4 = null, i4 = this) : t5 === this.length ? (e4 = this, i4 = null) : (e4 = new this.constructor(this.string.slice(0, t5), this.attributes), i4 = new this.constructor(this.string.slice(t5), this.attributes)), [e4, i4];
12265    }
12266    toConsole() {
12267      let { string: t5 } = this;
12268      return t5.length > 15 && (t5 = t5.slice(0, 14) + "\u2026"), JSON.stringify(t5.toString());
12269    }
12270  };
12271  _i.registerType("string", Vi);
12272  var zi = class extends rt {
12273    static box(t5) {
12274      return t5 instanceof this ? t5 : new this(t5);
12275    }
12276    constructor() {
12277      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
12278      super(...arguments), this.objects = t5.slice(0), this.length = this.objects.length;
12279    }
12280    indexOf(t5) {
12281      return this.objects.indexOf(t5);
12282    }
12283    splice() {
12284      for (var t5 = arguments.length, e4 = new Array(t5), i4 = 0; i4 < t5; i4++)
12285        e4[i4] = arguments[i4];
12286      return new this.constructor(st(this.objects, ...e4));
12287    }
12288    eachObject(t5) {
12289      return this.objects.map((e4, i4) => t5(e4, i4));
12290    }
12291    insertObjectAtIndex(t5, e4) {
12292      return this.splice(e4, 0, t5);
12293    }
12294    insertSplittableListAtIndex(t5, e4) {
12295      return this.splice(e4, 0, ...t5.objects);
12296    }
12297    insertSplittableListAtPosition(t5, e4) {
12298      const [i4, n3] = this.splitObjectAtPosition(e4);
12299      return new this.constructor(i4).insertSplittableListAtIndex(t5, n3);
12300    }
12301    editObjectAtIndex(t5, e4) {
12302      return this.replaceObjectAtIndex(e4(this.objects[t5]), t5);
12303    }
12304    replaceObjectAtIndex(t5, e4) {
12305      return this.splice(e4, 1, t5);
12306    }
12307    removeObjectAtIndex(t5) {
12308      return this.splice(t5, 1);
12309    }
12310    getObjectAtIndex(t5) {
12311      return this.objects[t5];
12312    }
12313    getSplittableListInRange(t5) {
12314      const [e4, i4, n3] = this.splitObjectsAtRange(t5);
12315      return new this.constructor(e4.slice(i4, n3 + 1));
12316    }
12317    selectSplittableList(t5) {
12318      const e4 = this.objects.filter((e5) => t5(e5));
12319      return new this.constructor(e4);
12320    }
12321    removeObjectsInRange(t5) {
12322      const [e4, i4, n3] = this.splitObjectsAtRange(t5);
12323      return new this.constructor(e4).splice(i4, n3 - i4 + 1);
12324    }
12325    transformObjectsInRange(t5, e4) {
12326      const [i4, n3, r4] = this.splitObjectsAtRange(t5), o3 = i4.map((t6, i5) => n3 <= i5 && i5 <= r4 ? e4(t6) : t6);
12327      return new this.constructor(o3);
12328    }
12329    splitObjectsAtRange(t5) {
12330      let e4, [i4, n3, r4] = this.splitObjectAtPosition(Hi(t5));
12331      return [i4, e4] = new this.constructor(i4).splitObjectAtPosition(Ji(t5) + r4), [i4, n3, e4 - 1];
12332    }
12333    getObjectAtPosition(t5) {
12334      const { index: e4 } = this.findIndexAndOffsetAtPosition(t5);
12335      return this.objects[e4];
12336    }
12337    splitObjectAtPosition(t5) {
12338      let e4, i4;
12339      const { index: n3, offset: r4 } = this.findIndexAndOffsetAtPosition(t5), o3 = this.objects.slice(0);
12340      if (null != n3)
12341        if (0 === r4)
12342          e4 = n3, i4 = 0;
12343        else {
12344          const t6 = this.getObjectAtIndex(n3), [s4, a4] = t6.splitAtOffset(r4);
12345          o3.splice(n3, 1, s4, a4), e4 = n3 + 1, i4 = s4.getLength() - r4;
12346        }
12347      else
12348        e4 = o3.length, i4 = 0;
12349      return [o3, e4, i4];
12350    }
12351    consolidate() {
12352      const t5 = [];
12353      let e4 = this.objects[0];
12354      return this.objects.slice(1).forEach((i4) => {
12355        var n3, r4;
12356        null !== (n3 = (r4 = e4).canBeConsolidatedWith) && void 0 !== n3 && n3.call(r4, i4) ? e4 = e4.consolidateWith(i4) : (t5.push(e4), e4 = i4);
12357      }), e4 && t5.push(e4), new this.constructor(t5);
12358    }
12359    consolidateFromIndexToIndex(t5, e4) {
12360      const i4 = this.objects.slice(0).slice(t5, e4 + 1), n3 = new this.constructor(i4).consolidate().toArray();
12361      return this.splice(t5, i4.length, ...n3);
12362    }
12363    findIndexAndOffsetAtPosition(t5) {
12364      let e4, i4 = 0;
12365      for (e4 = 0; e4 < this.objects.length; e4++) {
12366        const n3 = i4 + this.objects[e4].getLength();
12367        if (i4 <= t5 && t5 < n3)
12368          return { index: e4, offset: t5 - i4 };
12369        i4 = n3;
12370      }
12371      return { index: null, offset: null };
12372    }
12373    findPositionAtIndexAndOffset(t5, e4) {
12374      let i4 = 0;
12375      for (let n3 = 0; n3 < this.objects.length; n3++) {
12376        const r4 = this.objects[n3];
12377        if (n3 < t5)
12378          i4 += r4.getLength();
12379        else if (n3 === t5) {
12380          i4 += e4;
12381          break;
12382        }
12383      }
12384      return i4;
12385    }
12386    getEndPosition() {
12387      return null == this.endPosition && (this.endPosition = 0, this.objects.forEach((t5) => this.endPosition += t5.getLength())), this.endPosition;
12388    }
12389    toString() {
12390      return this.objects.join("");
12391    }
12392    toArray() {
12393      return this.objects.slice(0);
12394    }
12395    toJSON() {
12396      return this.toArray();
12397    }
12398    isEqualTo(t5) {
12399      return super.isEqualTo(...arguments) || qi(this.objects, null == t5 ? void 0 : t5.objects);
12400    }
12401    contentsForInspection() {
12402      return { objects: "[".concat(this.objects.map((t5) => t5.inspect()).join(", "), "]") };
12403    }
12404  };
12405  var qi = function(t5) {
12406    let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
12407    if (t5.length !== e4.length)
12408      return false;
12409    let i4 = true;
12410    for (let n3 = 0; n3 < t5.length; n3++) {
12411      const r4 = t5[n3];
12412      i4 && !r4.isEqualTo(e4[n3]) && (i4 = false);
12413    }
12414    return i4;
12415  };
12416  var Hi = (t5) => t5[0];
12417  var Ji = (t5) => t5[1];
12418  var Ki = class extends rt {
12419    static textForAttachmentWithAttributes(t5, e4) {
12420      return new this([new Ui(t5, e4)]);
12421    }
12422    static textForStringWithAttributes(t5, e4) {
12423      return new this([new Vi(t5, e4)]);
12424    }
12425    static fromJSON(t5) {
12426      return new this(Array.from(t5).map((t6) => _i.fromJSON(t6)));
12427    }
12428    constructor() {
12429      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
12430      super(...arguments);
12431      const e4 = t5.filter((t6) => !t6.isEmpty());
12432      this.pieceList = new zi(e4);
12433    }
12434    copy() {
12435      return this.copyWithPieceList(this.pieceList);
12436    }
12437    copyWithPieceList(t5) {
12438      return new this.constructor(t5.consolidate().toArray());
12439    }
12440    copyUsingObjectMap(t5) {
12441      const e4 = this.getPieces().map((e5) => t5.find(e5) || e5);
12442      return new this.constructor(e4);
12443    }
12444    appendText(t5) {
12445      return this.insertTextAtPosition(t5, this.getLength());
12446    }
12447    insertTextAtPosition(t5, e4) {
12448      return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t5.pieceList, e4));
12449    }
12450    removeTextAtRange(t5) {
12451      return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t5));
12452    }
12453    replaceTextAtRange(t5, e4) {
12454      return this.removeTextAtRange(e4).insertTextAtPosition(t5, e4[0]);
12455    }
12456    moveTextFromRangeToPosition(t5, e4) {
12457      if (t5[0] <= e4 && e4 <= t5[1])
12458        return;
12459      const i4 = this.getTextAtRange(t5), n3 = i4.getLength();
12460      return t5[0] < e4 && (e4 -= n3), this.removeTextAtRange(t5).insertTextAtPosition(i4, e4);
12461    }
12462    addAttributeAtRange(t5, e4, i4) {
12463      const n3 = {};
12464      return n3[t5] = e4, this.addAttributesAtRange(n3, i4);
12465    }
12466    addAttributesAtRange(t5, e4) {
12467      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e4, (e5) => e5.copyWithAdditionalAttributes(t5)));
12468    }
12469    removeAttributeAtRange(t5, e4) {
12470      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e4, (e5) => e5.copyWithoutAttribute(t5)));
12471    }
12472    setAttributesAtRange(t5, e4) {
12473      return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e4, (e5) => e5.copyWithAttributes(t5)));
12474    }
12475    getAttributesAtPosition(t5) {
12476      var e4;
12477      return (null === (e4 = this.pieceList.getObjectAtPosition(t5)) || void 0 === e4 ? void 0 : e4.getAttributes()) || {};
12478    }
12479    getCommonAttributes() {
12480      const t5 = Array.from(this.pieceList.toArray()).map((t6) => t6.getAttributes());
12481      return Ht.fromCommonAttributesOfObjects(t5).toObject();
12482    }
12483    getCommonAttributesAtRange(t5) {
12484      return this.getTextAtRange(t5).getCommonAttributes() || {};
12485    }
12486    getExpandedRangeForAttributeAtOffset(t5, e4) {
12487      let i4, n3 = i4 = e4;
12488      const r4 = this.getLength();
12489      for (; n3 > 0 && this.getCommonAttributesAtRange([n3 - 1, i4])[t5]; )
12490        n3--;
12491      for (; i4 < r4 && this.getCommonAttributesAtRange([e4, i4 + 1])[t5]; )
12492        i4++;
12493      return [n3, i4];
12494    }
12495    getTextAtRange(t5) {
12496      return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t5));
12497    }
12498    getStringAtRange(t5) {
12499      return this.pieceList.getSplittableListInRange(t5).toString();
12500    }
12501    getStringAtPosition(t5) {
12502      return this.getStringAtRange([t5, t5 + 1]);
12503    }
12504    startsWithString(t5) {
12505      return this.getStringAtRange([0, t5.length]) === t5;
12506    }
12507    endsWithString(t5) {
12508      const e4 = this.getLength();
12509      return this.getStringAtRange([e4 - t5.length, e4]) === t5;
12510    }
12511    getAttachmentPieces() {
12512      return this.pieceList.toArray().filter((t5) => !!t5.attachment);
12513    }
12514    getAttachments() {
12515      return this.getAttachmentPieces().map((t5) => t5.attachment);
12516    }
12517    getAttachmentAndPositionById(t5) {
12518      let e4 = 0;
12519      for (const n3 of this.pieceList.toArray()) {
12520        var i4;
12521        if ((null === (i4 = n3.attachment) || void 0 === i4 ? void 0 : i4.id) === t5)
12522          return { attachment: n3.attachment, position: e4 };
12523        e4 += n3.length;
12524      }
12525      return { attachment: null, position: null };
12526    }
12527    getAttachmentById(t5) {
12528      const { attachment: e4 } = this.getAttachmentAndPositionById(t5);
12529      return e4;
12530    }
12531    getRangeOfAttachment(t5) {
12532      const e4 = this.getAttachmentAndPositionById(t5.id), i4 = e4.position;
12533      if (t5 = e4.attachment)
12534        return [i4, i4 + 1];
12535    }
12536    updateAttributesForAttachment(t5, e4) {
12537      const i4 = this.getRangeOfAttachment(e4);
12538      return i4 ? this.addAttributesAtRange(t5, i4) : this;
12539    }
12540    getLength() {
12541      return this.pieceList.getEndPosition();
12542    }
12543    isEmpty() {
12544      return 0 === this.getLength();
12545    }
12546    isEqualTo(t5) {
12547      var e4;
12548      return super.isEqualTo(t5) || (null == t5 || null === (e4 = t5.pieceList) || void 0 === e4 ? void 0 : e4.isEqualTo(this.pieceList));
12549    }
12550    isBlockBreak() {
12551      return 1 === this.getLength() && this.pieceList.getObjectAtIndex(0).isBlockBreak();
12552    }
12553    eachPiece(t5) {
12554      return this.pieceList.eachObject(t5);
12555    }
12556    getPieces() {
12557      return this.pieceList.toArray();
12558    }
12559    getPieceAtPosition(t5) {
12560      return this.pieceList.getObjectAtPosition(t5);
12561    }
12562    contentsForInspection() {
12563      return { pieceList: this.pieceList.inspect() };
12564    }
12565    toSerializableText() {
12566      const t5 = this.pieceList.selectSplittableList((t6) => t6.isSerializable());
12567      return this.copyWithPieceList(t5);
12568    }
12569    toString() {
12570      return this.pieceList.toString();
12571    }
12572    toJSON() {
12573      return this.pieceList.toJSON();
12574    }
12575    toConsole() {
12576      return JSON.stringify(this.pieceList.toArray().map((t5) => JSON.parse(t5.toConsole())));
12577    }
12578    getDirection() {
12579      return lt(this.toString());
12580    }
12581    isRTL() {
12582      return "rtl" === this.getDirection();
12583    }
12584  };
12585  var Gi = class extends rt {
12586    static fromJSON(t5) {
12587      return new this(Ki.fromJSON(t5.text), t5.attributes, t5.htmlAttributes);
12588    }
12589    constructor(t5, e4, i4) {
12590      super(...arguments), this.text = Yi(t5 || new Ki()), this.attributes = e4 || [], this.htmlAttributes = i4 || {};
12591    }
12592    isEmpty() {
12593      return this.text.isBlockBreak();
12594    }
12595    isEqualTo(t5) {
12596      return !!super.isEqualTo(t5) || this.text.isEqualTo(null == t5 ? void 0 : t5.text) && ot(this.attributes, null == t5 ? void 0 : t5.attributes) && Tt(this.htmlAttributes, null == t5 ? void 0 : t5.htmlAttributes);
12597    }
12598    copyWithText(t5) {
12599      return new Gi(t5, this.attributes, this.htmlAttributes);
12600    }
12601    copyWithoutText() {
12602      return this.copyWithText(null);
12603    }
12604    copyWithAttributes(t5) {
12605      return new Gi(this.text, t5, this.htmlAttributes);
12606    }
12607    copyWithoutAttributes() {
12608      return this.copyWithAttributes(null);
12609    }
12610    copyUsingObjectMap(t5) {
12611      const e4 = t5.find(this.text);
12612      return e4 ? this.copyWithText(e4) : this.copyWithText(this.text.copyUsingObjectMap(t5));
12613    }
12614    addAttribute(t5) {
12615      const e4 = this.attributes.concat(en(t5));
12616      return this.copyWithAttributes(e4);
12617    }
12618    addHTMLAttribute(t5, e4) {
12619      const i4 = Object.assign({}, this.htmlAttributes, { [t5]: e4 });
12620      return new Gi(this.text, this.attributes, i4);
12621    }
12622    removeAttribute(t5) {
12623      const { listAttribute: e4 } = mt(t5), i4 = rn(rn(this.attributes, t5), e4);
12624      return this.copyWithAttributes(i4);
12625    }
12626    removeLastAttribute() {
12627      return this.removeAttribute(this.getLastAttribute());
12628    }
12629    getLastAttribute() {
12630      return nn(this.attributes);
12631    }
12632    getAttributes() {
12633      return this.attributes.slice(0);
12634    }
12635    getAttributeLevel() {
12636      return this.attributes.length;
12637    }
12638    getAttributeAtLevel(t5) {
12639      return this.attributes[t5 - 1];
12640    }
12641    hasAttribute(t5) {
12642      return this.attributes.includes(t5);
12643    }
12644    hasAttributes() {
12645      return this.getAttributeLevel() > 0;
12646    }
12647    getLastNestableAttribute() {
12648      return nn(this.getNestableAttributes());
12649    }
12650    getNestableAttributes() {
12651      return this.attributes.filter((t5) => mt(t5).nestable);
12652    }
12653    getNestingLevel() {
12654      return this.getNestableAttributes().length;
12655    }
12656    decreaseNestingLevel() {
12657      const t5 = this.getLastNestableAttribute();
12658      return t5 ? this.removeAttribute(t5) : this;
12659    }
12660    increaseNestingLevel() {
12661      const t5 = this.getLastNestableAttribute();
12662      if (t5) {
12663        const e4 = this.attributes.lastIndexOf(t5), i4 = st(this.attributes, e4 + 1, 0, ...en(t5));
12664        return this.copyWithAttributes(i4);
12665      }
12666      return this;
12667    }
12668    getListItemAttributes() {
12669      return this.attributes.filter((t5) => mt(t5).listAttribute);
12670    }
12671    isListItem() {
12672      var t5;
12673      return null === (t5 = mt(this.getLastAttribute())) || void 0 === t5 ? void 0 : t5.listAttribute;
12674    }
12675    isTerminalBlock() {
12676      var t5;
12677      return null === (t5 = mt(this.getLastAttribute())) || void 0 === t5 ? void 0 : t5.terminal;
12678    }
12679    breaksOnReturn() {
12680      var t5;
12681      return null === (t5 = mt(this.getLastAttribute())) || void 0 === t5 ? void 0 : t5.breakOnReturn;
12682    }
12683    findLineBreakInDirectionFromPosition(t5, e4) {
12684      const i4 = this.toString();
12685      let n3;
12686      switch (t5) {
12687        case "forward":
12688          n3 = i4.indexOf("\n", e4);
12689          break;
12690        case "backward":
12691          n3 = i4.slice(0, e4).lastIndexOf("\n");
12692      }
12693      if (-1 !== n3)
12694        return n3;
12695    }
12696    contentsForInspection() {
12697      return { text: this.text.inspect(), attributes: this.attributes };
12698    }
12699    toString() {
12700      return this.text.toString();
12701    }
12702    toJSON() {
12703      return { text: this.text, attributes: this.attributes, htmlAttributes: this.htmlAttributes };
12704    }
12705    getDirection() {
12706      return this.text.getDirection();
12707    }
12708    isRTL() {
12709      return this.text.isRTL();
12710    }
12711    getLength() {
12712      return this.text.getLength();
12713    }
12714    canBeConsolidatedWith(t5) {
12715      return !this.hasAttributes() && !t5.hasAttributes() && this.getDirection() === t5.getDirection();
12716    }
12717    consolidateWith(t5) {
12718      const e4 = Ki.textForStringWithAttributes("\n"), i4 = this.getTextWithoutBlockBreak().appendText(e4);
12719      return this.copyWithText(i4.appendText(t5.text));
12720    }
12721    splitAtOffset(t5) {
12722      let e4, i4;
12723      return 0 === t5 ? (e4 = null, i4 = this) : t5 === this.getLength() ? (e4 = this, i4 = null) : (e4 = this.copyWithText(this.text.getTextAtRange([0, t5])), i4 = this.copyWithText(this.text.getTextAtRange([t5, this.getLength()]))), [e4, i4];
12724    }
12725    getBlockBreakPosition() {
12726      return this.text.getLength() - 1;
12727    }
12728    getTextWithoutBlockBreak() {
12729      return Qi(this.text) ? this.text.getTextAtRange([0, this.getBlockBreakPosition()]) : this.text.copy();
12730    }
12731    canBeGrouped(t5) {
12732      return this.attributes[t5];
12733    }
12734    canBeGroupedWith(t5, e4) {
12735      const i4 = t5.getAttributes(), r4 = i4[e4], o3 = this.attributes[e4];
12736      return o3 === r4 && !(false === mt(o3).group && !(() => {
12737        if (!dt) {
12738          dt = [];
12739          for (const t6 in n) {
12740            const { listAttribute: e5 } = n[t6];
12741            null != e5 && dt.push(e5);
12742          }
12743        }
12744        return dt;
12745      })().includes(i4[e4 + 1])) && (this.getDirection() === t5.getDirection() || t5.isEmpty());
12746    }
12747  };
12748  var Yi = function(t5) {
12749    return t5 = $i(t5), t5 = Zi(t5);
12750  };
12751  var $i = function(t5) {
12752    let e4 = false;
12753    const i4 = t5.getPieces();
12754    let n3 = i4.slice(0, i4.length - 1);
12755    const r4 = i4[i4.length - 1];
12756    return r4 ? (n3 = n3.map((t6) => t6.isBlockBreak() ? (e4 = true, tn(t6)) : t6), e4 ? new Ki([...n3, r4]) : t5) : t5;
12757  };
12758  var Xi = Ki.textForStringWithAttributes("\n", { blockBreak: true });
12759  var Zi = function(t5) {
12760    return Qi(t5) ? t5 : t5.appendText(Xi);
12761  };
12762  var Qi = function(t5) {
12763    const e4 = t5.getLength();
12764    if (0 === e4)
12765      return false;
12766    return t5.getTextAtRange([e4 - 1, e4]).isBlockBreak();
12767  };
12768  var tn = (t5) => t5.copyWithoutAttribute("blockBreak");
12769  var en = function(t5) {
12770    const { listAttribute: e4 } = mt(t5);
12771    return e4 ? [e4, t5] : [t5];
12772  };
12773  var nn = (t5) => t5.slice(-1)[0];
12774  var rn = function(t5, e4) {
12775    const i4 = t5.lastIndexOf(e4);
12776    return -1 === i4 ? t5 : st(t5, i4, 1);
12777  };
12778  var on = class extends rt {
12779    static fromJSON(t5) {
12780      return new this(Array.from(t5).map((t6) => Gi.fromJSON(t6)));
12781    }
12782    static fromString(t5, e4) {
12783      const i4 = Ki.textForStringWithAttributes(t5, e4);
12784      return new this([new Gi(i4)]);
12785    }
12786    constructor() {
12787      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
12788      super(...arguments), 0 === t5.length && (t5 = [new Gi()]), this.blockList = zi.box(t5);
12789    }
12790    isEmpty() {
12791      const t5 = this.getBlockAtIndex(0);
12792      return 1 === this.blockList.length && t5.isEmpty() && !t5.hasAttributes();
12793    }
12794    copy() {
12795      const t5 = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray();
12796      return new this.constructor(t5);
12797    }
12798    copyUsingObjectsFromDocument(t5) {
12799      const e4 = new Zt(t5.getObjects());
12800      return this.copyUsingObjectMap(e4);
12801    }
12802    copyUsingObjectMap(t5) {
12803      const e4 = this.getBlocks().map((e5) => t5.find(e5) || e5.copyUsingObjectMap(t5));
12804      return new this.constructor(e4);
12805    }
12806    copyWithBaseBlockAttributes() {
12807      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
12808      const e4 = this.getBlocks().map((e5) => {
12809        const i4 = t5.concat(e5.getAttributes());
12810        return e5.copyWithAttributes(i4);
12811      });
12812      return new this.constructor(e4);
12813    }
12814    replaceBlock(t5, e4) {
12815      const i4 = this.blockList.indexOf(t5);
12816      return -1 === i4 ? this : new this.constructor(this.blockList.replaceObjectAtIndex(e4, i4));
12817    }
12818    insertDocumentAtRange(t5, e4) {
12819      const { blockList: i4 } = t5;
12820      e4 = wt(e4);
12821      let [n3] = e4;
12822      const { index: r4, offset: o3 } = this.locationFromPosition(n3);
12823      let s4 = this;
12824      const a4 = this.getBlockAtPosition(n3);
12825      return Lt(e4) && a4.isEmpty() && !a4.hasAttributes() ? s4 = new this.constructor(s4.blockList.removeObjectAtIndex(r4)) : a4.getBlockBreakPosition() === o3 && n3++, s4 = s4.removeTextAtRange(e4), new this.constructor(s4.blockList.insertSplittableListAtPosition(i4, n3));
12826    }
12827    mergeDocumentAtRange(t5, e4) {
12828      let i4, n3;
12829      e4 = wt(e4);
12830      const [r4] = e4, o3 = this.locationFromPosition(r4), s4 = this.getBlockAtIndex(o3.index).getAttributes(), a4 = t5.getBaseBlockAttributes(), l4 = s4.slice(-a4.length);
12831      if (ot(a4, l4)) {
12832        const e5 = s4.slice(0, -a4.length);
12833        i4 = t5.copyWithBaseBlockAttributes(e5);
12834      } else
12835        i4 = t5.copy({ consolidateBlocks: true }).copyWithBaseBlockAttributes(s4);
12836      const c4 = i4.getBlockCount(), u4 = i4.getBlockAtIndex(0);
12837      if (ot(s4, u4.getAttributes())) {
12838        const t6 = u4.getTextWithoutBlockBreak();
12839        if (n3 = this.insertTextAtRange(t6, e4), c4 > 1) {
12840          i4 = new this.constructor(i4.getBlocks().slice(1));
12841          const e5 = r4 + t6.getLength();
12842          n3 = n3.insertDocumentAtRange(i4, e5);
12843        }
12844      } else
12845        n3 = this.insertDocumentAtRange(i4, e4);
12846      return n3;
12847    }
12848    insertTextAtRange(t5, e4) {
12849      e4 = wt(e4);
12850      const [i4] = e4, { index: n3, offset: r4 } = this.locationFromPosition(i4), o3 = this.removeTextAtRange(e4);
12851      return new this.constructor(o3.blockList.editObjectAtIndex(n3, (e5) => e5.copyWithText(e5.text.insertTextAtPosition(t5, r4))));
12852    }
12853    removeTextAtRange(t5) {
12854      let e4;
12855      t5 = wt(t5);
12856      const [i4, n3] = t5;
12857      if (Lt(t5))
12858        return this;
12859      const [r4, o3] = Array.from(this.locationRangeFromRange(t5)), s4 = r4.index, a4 = r4.offset, l4 = this.getBlockAtIndex(s4), c4 = o3.index, u4 = o3.offset, h4 = this.getBlockAtIndex(c4);
12860      if (n3 - i4 == 1 && l4.getBlockBreakPosition() === a4 && h4.getBlockBreakPosition() !== u4 && "\n" === h4.text.getStringAtPosition(u4))
12861        e4 = this.blockList.editObjectAtIndex(c4, (t6) => t6.copyWithText(t6.text.removeTextAtRange([u4, u4 + 1])));
12862      else {
12863        let t6;
12864        const i5 = l4.text.getTextAtRange([0, a4]), n4 = h4.text.getTextAtRange([u4, h4.getLength()]), r5 = i5.appendText(n4);
12865        t6 = s4 !== c4 && 0 === a4 && l4.getAttributeLevel() >= h4.getAttributeLevel() ? h4.copyWithText(r5) : l4.copyWithText(r5);
12866        const o4 = c4 + 1 - s4;
12867        e4 = this.blockList.splice(s4, o4, t6);
12868      }
12869      return new this.constructor(e4);
12870    }
12871    moveTextFromRangeToPosition(t5, e4) {
12872      let i4;
12873      t5 = wt(t5);
12874      const [n3, r4] = t5;
12875      if (n3 <= e4 && e4 <= r4)
12876        return this;
12877      let o3 = this.getDocumentAtRange(t5), s4 = this.removeTextAtRange(t5);
12878      const a4 = n3 < e4;
12879      a4 && (e4 -= o3.getLength());
12880      const [l4, ...c4] = o3.getBlocks();
12881      return 0 === c4.length ? (i4 = l4.getTextWithoutBlockBreak(), a4 && (e4 += 1)) : i4 = l4.text, s4 = s4.insertTextAtRange(i4, e4), 0 === c4.length ? s4 : (o3 = new this.constructor(c4), e4 += i4.getLength(), s4.insertDocumentAtRange(o3, e4));
12882    }
12883    addAttributeAtRange(t5, e4, i4) {
12884      let { blockList: n3 } = this;
12885      return this.eachBlockAtRange(i4, (i5, r4, o3) => n3 = n3.editObjectAtIndex(o3, function() {
12886        return mt(t5) ? i5.addAttribute(t5, e4) : r4[0] === r4[1] ? i5 : i5.copyWithText(i5.text.addAttributeAtRange(t5, e4, r4));
12887      })), new this.constructor(n3);
12888    }
12889    addAttribute(t5, e4) {
12890      let { blockList: i4 } = this;
12891      return this.eachBlock((n3, r4) => i4 = i4.editObjectAtIndex(r4, () => n3.addAttribute(t5, e4))), new this.constructor(i4);
12892    }
12893    removeAttributeAtRange(t5, e4) {
12894      let { blockList: i4 } = this;
12895      return this.eachBlockAtRange(e4, function(e5, n3, r4) {
12896        mt(t5) ? i4 = i4.editObjectAtIndex(r4, () => e5.removeAttribute(t5)) : n3[0] !== n3[1] && (i4 = i4.editObjectAtIndex(r4, () => e5.copyWithText(e5.text.removeAttributeAtRange(t5, n3))));
12897      }), new this.constructor(i4);
12898    }
12899    updateAttributesForAttachment(t5, e4) {
12900      const i4 = this.getRangeOfAttachment(e4), [n3] = Array.from(i4), { index: r4 } = this.locationFromPosition(n3), o3 = this.getTextAtIndex(r4);
12901      return new this.constructor(this.blockList.editObjectAtIndex(r4, (i5) => i5.copyWithText(o3.updateAttributesForAttachment(t5, e4))));
12902    }
12903    removeAttributeForAttachment(t5, e4) {
12904      const i4 = this.getRangeOfAttachment(e4);
12905      return this.removeAttributeAtRange(t5, i4);
12906    }
12907    setHTMLAttributeAtPosition(t5, e4, i4) {
12908      const n3 = this.getBlockAtPosition(t5), r4 = n3.addHTMLAttribute(e4, i4);
12909      return this.replaceBlock(n3, r4);
12910    }
12911    insertBlockBreakAtRange(t5) {
12912      let e4;
12913      t5 = wt(t5);
12914      const [i4] = t5, { offset: n3 } = this.locationFromPosition(i4), r4 = this.removeTextAtRange(t5);
12915      return 0 === n3 && (e4 = [new Gi()]), new this.constructor(r4.blockList.insertSplittableListAtPosition(new zi(e4), i4));
12916    }
12917    applyBlockAttributeAtRange(t5, e4, i4) {
12918      const n3 = this.expandRangeToLineBreaksAndSplitBlocks(i4);
12919      let r4 = n3.document;
12920      i4 = n3.range;
12921      const o3 = mt(t5);
12922      if (o3.listAttribute) {
12923        r4 = r4.removeLastListAttributeAtRange(i4, { exceptAttributeName: t5 });
12924        const e5 = r4.convertLineBreaksToBlockBreaksInRange(i4);
12925        r4 = e5.document, i4 = e5.range;
12926      } else
12927        r4 = o3.exclusive ? r4.removeBlockAttributesAtRange(i4) : o3.terminal ? r4.removeLastTerminalAttributeAtRange(i4) : r4.consolidateBlocksAtRange(i4);
12928      return r4.addAttributeAtRange(t5, e4, i4);
12929    }
12930    removeLastListAttributeAtRange(t5) {
12931      let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, { blockList: i4 } = this;
12932      return this.eachBlockAtRange(t5, function(t6, n3, r4) {
12933        const o3 = t6.getLastAttribute();
12934        o3 && mt(o3).listAttribute && o3 !== e4.exceptAttributeName && (i4 = i4.editObjectAtIndex(r4, () => t6.removeAttribute(o3)));
12935      }), new this.constructor(i4);
12936    }
12937    removeLastTerminalAttributeAtRange(t5) {
12938      let { blockList: e4 } = this;
12939      return this.eachBlockAtRange(t5, function(t6, i4, n3) {
12940        const r4 = t6.getLastAttribute();
12941        r4 && mt(r4).terminal && (e4 = e4.editObjectAtIndex(n3, () => t6.removeAttribute(r4)));
12942      }), new this.constructor(e4);
12943    }
12944    removeBlockAttributesAtRange(t5) {
12945      let { blockList: e4 } = this;
12946      return this.eachBlockAtRange(t5, function(t6, i4, n3) {
12947        t6.hasAttributes() && (e4 = e4.editObjectAtIndex(n3, () => t6.copyWithoutAttributes()));
12948      }), new this.constructor(e4);
12949    }
12950    expandRangeToLineBreaksAndSplitBlocks(t5) {
12951      let e4;
12952      t5 = wt(t5);
12953      let [i4, n3] = t5;
12954      const r4 = this.locationFromPosition(i4), o3 = this.locationFromPosition(n3);
12955      let s4 = this;
12956      const a4 = s4.getBlockAtIndex(r4.index);
12957      if (r4.offset = a4.findLineBreakInDirectionFromPosition("backward", r4.offset), null != r4.offset && (e4 = s4.positionFromLocation(r4), s4 = s4.insertBlockBreakAtRange([e4, e4 + 1]), o3.index += 1, o3.offset -= s4.getBlockAtIndex(r4.index).getLength(), r4.index += 1), r4.offset = 0, 0 === o3.offset && o3.index > r4.index)
12958        o3.index -= 1, o3.offset = s4.getBlockAtIndex(o3.index).getBlockBreakPosition();
12959      else {
12960        const t6 = s4.getBlockAtIndex(o3.index);
12961        "\n" === t6.text.getStringAtRange([o3.offset - 1, o3.offset]) ? o3.offset -= 1 : o3.offset = t6.findLineBreakInDirectionFromPosition("forward", o3.offset), o3.offset !== t6.getBlockBreakPosition() && (e4 = s4.positionFromLocation(o3), s4 = s4.insertBlockBreakAtRange([e4, e4 + 1]));
12962      }
12963      return i4 = s4.positionFromLocation(r4), n3 = s4.positionFromLocation(o3), { document: s4, range: t5 = wt([i4, n3]) };
12964    }
12965    convertLineBreaksToBlockBreaksInRange(t5) {
12966      t5 = wt(t5);
12967      let [e4] = t5;
12968      const i4 = this.getStringAtRange(t5).slice(0, -1);
12969      let n3 = this;
12970      return i4.replace(/.*?\n/g, function(t6) {
12971        e4 += t6.length, n3 = n3.insertBlockBreakAtRange([e4 - 1, e4]);
12972      }), { document: n3, range: t5 };
12973    }
12974    consolidateBlocksAtRange(t5) {
12975      t5 = wt(t5);
12976      const [e4, i4] = t5, n3 = this.locationFromPosition(e4).index, r4 = this.locationFromPosition(i4).index;
12977      return new this.constructor(this.blockList.consolidateFromIndexToIndex(n3, r4));
12978    }
12979    getDocumentAtRange(t5) {
12980      t5 = wt(t5);
12981      const e4 = this.blockList.getSplittableListInRange(t5).toArray();
12982      return new this.constructor(e4);
12983    }
12984    getStringAtRange(t5) {
12985      let e4;
12986      const i4 = t5 = wt(t5);
12987      return i4[i4.length - 1] !== this.getLength() && (e4 = -1), this.getDocumentAtRange(t5).toString().slice(0, e4);
12988    }
12989    getBlockAtIndex(t5) {
12990      return this.blockList.getObjectAtIndex(t5);
12991    }
12992    getBlockAtPosition(t5) {
12993      const { index: e4 } = this.locationFromPosition(t5);
12994      return this.getBlockAtIndex(e4);
12995    }
12996    getTextAtIndex(t5) {
12997      var e4;
12998      return null === (e4 = this.getBlockAtIndex(t5)) || void 0 === e4 ? void 0 : e4.text;
12999    }
13000    getTextAtPosition(t5) {
13001      const { index: e4 } = this.locationFromPosition(t5);
13002      return this.getTextAtIndex(e4);
13003    }
13004    getPieceAtPosition(t5) {
13005      const { index: e4, offset: i4 } = this.locationFromPosition(t5);
13006      return this.getTextAtIndex(e4).getPieceAtPosition(i4);
13007    }
13008    getCharacterAtPosition(t5) {
13009      const { index: e4, offset: i4 } = this.locationFromPosition(t5);
13010      return this.getTextAtIndex(e4).getStringAtRange([i4, i4 + 1]);
13011    }
13012    getLength() {
13013      return this.blockList.getEndPosition();
13014    }
13015    getBlocks() {
13016      return this.blockList.toArray();
13017    }
13018    getBlockCount() {
13019      return this.blockList.length;
13020    }
13021    getEditCount() {
13022      return this.editCount;
13023    }
13024    eachBlock(t5) {
13025      return this.blockList.eachObject(t5);
13026    }
13027    eachBlockAtRange(t5, e4) {
13028      let i4, n3;
13029      t5 = wt(t5);
13030      const [r4, o3] = t5, s4 = this.locationFromPosition(r4), a4 = this.locationFromPosition(o3);
13031      if (s4.index === a4.index)
13032        return i4 = this.getBlockAtIndex(s4.index), n3 = [s4.offset, a4.offset], e4(i4, n3, s4.index);
13033      for (let t6 = s4.index; t6 <= a4.index; t6++)
13034        if (i4 = this.getBlockAtIndex(t6), i4) {
13035          switch (t6) {
13036            case s4.index:
13037              n3 = [s4.offset, i4.text.getLength()];
13038              break;
13039            case a4.index:
13040              n3 = [0, a4.offset];
13041              break;
13042            default:
13043              n3 = [0, i4.text.getLength()];
13044          }
13045          e4(i4, n3, t6);
13046        }
13047    }
13048    getCommonAttributesAtRange(t5) {
13049      t5 = wt(t5);
13050      const [e4] = t5;
13051      if (Lt(t5))
13052        return this.getCommonAttributesAtPosition(e4);
13053      {
13054        const e5 = [], i4 = [];
13055        return this.eachBlockAtRange(t5, function(t6, n3) {
13056          if (n3[0] !== n3[1])
13057            return e5.push(t6.text.getCommonAttributesAtRange(n3)), i4.push(sn(t6));
13058        }), Ht.fromCommonAttributesOfObjects(e5).merge(Ht.fromCommonAttributesOfObjects(i4)).toObject();
13059      }
13060    }
13061    getCommonAttributesAtPosition(t5) {
13062      let e4, i4;
13063      const { index: n3, offset: r4 } = this.locationFromPosition(t5), o3 = this.getBlockAtIndex(n3);
13064      if (!o3)
13065        return {};
13066      const s4 = sn(o3), a4 = o3.text.getAttributesAtPosition(r4), l4 = o3.text.getAttributesAtPosition(r4 - 1), c4 = Object.keys(W).filter((t6) => W[t6].inheritable);
13067      for (e4 in l4)
13068        i4 = l4[e4], (i4 === a4[e4] || c4.includes(e4)) && (s4[e4] = i4);
13069      return s4;
13070    }
13071    getRangeOfCommonAttributeAtPosition(t5, e4) {
13072      const { index: i4, offset: n3 } = this.locationFromPosition(e4), r4 = this.getTextAtIndex(i4), [o3, s4] = Array.from(r4.getExpandedRangeForAttributeAtOffset(t5, n3)), a4 = this.positionFromLocation({ index: i4, offset: o3 }), l4 = this.positionFromLocation({ index: i4, offset: s4 });
13073      return wt([a4, l4]);
13074    }
13075    getBaseBlockAttributes() {
13076      let t5 = this.getBlockAtIndex(0).getAttributes();
13077      for (let e4 = 1; e4 < this.getBlockCount(); e4++) {
13078        const i4 = this.getBlockAtIndex(e4).getAttributes(), n3 = Math.min(t5.length, i4.length);
13079        t5 = (() => {
13080          const e5 = [];
13081          for (let r4 = 0; r4 < n3 && i4[r4] === t5[r4]; r4++)
13082            e5.push(i4[r4]);
13083          return e5;
13084        })();
13085      }
13086      return t5;
13087    }
13088    getAttachmentById(t5) {
13089      for (const e4 of this.getAttachments())
13090        if (e4.id === t5)
13091          return e4;
13092    }
13093    getAttachmentPieces() {
13094      let t5 = [];
13095      return this.blockList.eachObject((e4) => {
13096        let { text: i4 } = e4;
13097        return t5 = t5.concat(i4.getAttachmentPieces());
13098      }), t5;
13099    }
13100    getAttachments() {
13101      return this.getAttachmentPieces().map((t5) => t5.attachment);
13102    }
13103    getRangeOfAttachment(t5) {
13104      let e4 = 0;
13105      const i4 = this.blockList.toArray();
13106      for (let n3 = 0; n3 < i4.length; n3++) {
13107        const { text: r4 } = i4[n3], o3 = r4.getRangeOfAttachment(t5);
13108        if (o3)
13109          return wt([e4 + o3[0], e4 + o3[1]]);
13110        e4 += r4.getLength();
13111      }
13112    }
13113    getLocationRangeOfAttachment(t5) {
13114      const e4 = this.getRangeOfAttachment(t5);
13115      return this.locationRangeFromRange(e4);
13116    }
13117    getAttachmentPieceForAttachment(t5) {
13118      for (const e4 of this.getAttachmentPieces())
13119        if (e4.attachment === t5)
13120          return e4;
13121    }
13122    findRangesForBlockAttribute(t5) {
13123      let e4 = 0;
13124      const i4 = [];
13125      return this.getBlocks().forEach((n3) => {
13126        const r4 = n3.getLength();
13127        n3.hasAttribute(t5) && i4.push([e4, e4 + r4]), e4 += r4;
13128      }), i4;
13129    }
13130    findRangesForTextAttribute(t5) {
13131      let { withValue: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, i4 = 0, n3 = [];
13132      const r4 = [];
13133      return this.getPieces().forEach((o3) => {
13134        const s4 = o3.getLength();
13135        (function(i5) {
13136          return e4 ? i5.getAttribute(t5) === e4 : i5.hasAttribute(t5);
13137        })(o3) && (n3[1] === i4 ? n3[1] = i4 + s4 : r4.push(n3 = [i4, i4 + s4])), i4 += s4;
13138      }), r4;
13139    }
13140    locationFromPosition(t5) {
13141      const e4 = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, t5));
13142      if (null != e4.index)
13143        return e4;
13144      {
13145        const t6 = this.getBlocks();
13146        return { index: t6.length - 1, offset: t6[t6.length - 1].getLength() };
13147      }
13148    }
13149    positionFromLocation(t5) {
13150      return this.blockList.findPositionAtIndexAndOffset(t5.index, t5.offset);
13151    }
13152    locationRangeFromPosition(t5) {
13153      return wt(this.locationFromPosition(t5));
13154    }
13155    locationRangeFromRange(t5) {
13156      if (!(t5 = wt(t5)))
13157        return;
13158      const [e4, i4] = Array.from(t5), n3 = this.locationFromPosition(e4), r4 = this.locationFromPosition(i4);
13159      return wt([n3, r4]);
13160    }
13161    rangeFromLocationRange(t5) {
13162      let e4;
13163      t5 = wt(t5);
13164      const i4 = this.positionFromLocation(t5[0]);
13165      return Lt(t5) || (e4 = this.positionFromLocation(t5[1])), wt([i4, e4]);
13166    }
13167    isEqualTo(t5) {
13168      return this.blockList.isEqualTo(null == t5 ? void 0 : t5.blockList);
13169    }
13170    getTexts() {
13171      return this.getBlocks().map((t5) => t5.text);
13172    }
13173    getPieces() {
13174      const t5 = [];
13175      return Array.from(this.getTexts()).forEach((e4) => {
13176        t5.push(...Array.from(e4.getPieces() || []));
13177      }), t5;
13178    }
13179    getObjects() {
13180      return this.getBlocks().concat(this.getTexts()).concat(this.getPieces());
13181    }
13182    toSerializableDocument() {
13183      const t5 = [];
13184      return this.blockList.eachObject((e4) => t5.push(e4.copyWithText(e4.text.toSerializableText()))), new this.constructor(t5);
13185    }
13186    toString() {
13187      return this.blockList.toString();
13188    }
13189    toJSON() {
13190      return this.blockList.toJSON();
13191    }
13192    toConsole() {
13193      return JSON.stringify(this.blockList.toArray().map((t5) => JSON.parse(t5.text.toConsole())));
13194    }
13195  };
13196  var sn = function(t5) {
13197    const e4 = {}, i4 = t5.getLastAttribute();
13198    return i4 && (e4[i4] = true), e4;
13199  };
13200  var an = function(t5) {
13201    let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
13202    return { string: t5 = Wt(t5), attributes: e4, type: "string" };
13203  };
13204  var ln = (t5, e4) => {
13205    try {
13206      return JSON.parse(t5.getAttribute("data-trix-".concat(e4)));
13207    } catch (t6) {
13208      return {};
13209    }
13210  };
13211  var cn = class extends q {
13212    static parse(t5, e4) {
13213      const i4 = new this(t5, e4);
13214      return i4.parse(), i4;
13215    }
13216    constructor(t5) {
13217      let { referenceElement: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
13218      super(...arguments), this.html = t5, this.referenceElement = e4, this.blocks = [], this.blockElements = [], this.processedElements = [];
13219    }
13220    getDocument() {
13221      return on.fromJSON(this.blocks);
13222    }
13223    parse() {
13224      try {
13225        this.createHiddenContainer(), ui.setHTML(this.containerElement, this.html);
13226        const t5 = R(this.containerElement, { usingFilter: gn });
13227        for (; t5.nextNode(); )
13228          this.processNode(t5.currentNode);
13229        return this.translateBlockElementMarginsToNewlines();
13230      } finally {
13231        this.removeHiddenContainer();
13232      }
13233    }
13234    createHiddenContainer() {
13235      return this.referenceElement ? (this.containerElement = this.referenceElement.cloneNode(false), this.containerElement.removeAttribute("id"), this.containerElement.setAttribute("data-trix-internal", ""), this.containerElement.style.display = "none", this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)) : (this.containerElement = T({ tagName: "div", style: { display: "none" } }), document.body.appendChild(this.containerElement));
13236    }
13237    removeHiddenContainer() {
13238      return S(this.containerElement);
13239    }
13240    processNode(t5) {
13241      switch (t5.nodeType) {
13242        case Node.TEXT_NODE:
13243          if (!this.isInsignificantTextNode(t5))
13244            return this.appendBlockForTextNode(t5), this.processTextNode(t5);
13245          break;
13246        case Node.ELEMENT_NODE:
13247          return this.appendBlockForElement(t5), this.processElement(t5);
13248      }
13249    }
13250    appendBlockForTextNode(t5) {
13251      const e4 = t5.parentNode;
13252      if (e4 === this.currentBlockElement && this.isBlockElement(t5.previousSibling))
13253        return this.appendStringWithAttributes("\n");
13254      if (e4 === this.containerElement || this.isBlockElement(e4)) {
13255        var i4;
13256        const t6 = this.getBlockAttributes(e4), n3 = this.getBlockHTMLAttributes(e4);
13257        ot(t6, null === (i4 = this.currentBlock) || void 0 === i4 ? void 0 : i4.attributes) || (this.currentBlock = this.appendBlockForAttributesWithElement(t6, e4, n3), this.currentBlockElement = e4);
13258      }
13259    }
13260    appendBlockForElement(t5) {
13261      const e4 = this.isBlockElement(t5), i4 = C(this.currentBlockElement, t5);
13262      if (e4 && !this.isBlockElement(t5.firstChild)) {
13263        if (!this.isInsignificantTextNode(t5.firstChild) || !this.isBlockElement(t5.firstElementChild)) {
13264          const e5 = this.getBlockAttributes(t5), n3 = this.getBlockHTMLAttributes(t5);
13265          if (t5.firstChild) {
13266            if (i4 && ot(e5, this.currentBlock.attributes))
13267              return this.appendStringWithAttributes("\n");
13268            this.currentBlock = this.appendBlockForAttributesWithElement(e5, t5, n3), this.currentBlockElement = t5;
13269          }
13270        }
13271      } else if (this.currentBlockElement && !i4 && !e4) {
13272        const e5 = this.findParentBlockElement(t5);
13273        if (e5)
13274          return this.appendBlockForElement(e5);
13275        this.currentBlock = this.appendEmptyBlock(), this.currentBlockElement = null;
13276      }
13277    }
13278    findParentBlockElement(t5) {
13279      let { parentElement: e4 } = t5;
13280      for (; e4 && e4 !== this.containerElement; ) {
13281        if (this.isBlockElement(e4) && this.blockElements.includes(e4))
13282          return e4;
13283        e4 = e4.parentElement;
13284      }
13285      return null;
13286    }
13287    processTextNode(t5) {
13288      let e4 = t5.data;
13289      var i4;
13290      un(t5.parentNode) || (e4 = Vt(e4), fn(null === (i4 = t5.previousSibling) || void 0 === i4 ? void 0 : i4.textContent) && (e4 = mn(e4)));
13291      return this.appendStringWithAttributes(e4, this.getTextAttributes(t5.parentNode));
13292    }
13293    processElement(t5) {
13294      let e4;
13295      if (P(t5)) {
13296        if (e4 = ln(t5, "attachment"), Object.keys(e4).length) {
13297          const i4 = this.getTextAttributes(t5);
13298          this.appendAttachmentWithAttributes(e4, i4), t5.innerHTML = "";
13299        }
13300        return this.processedElements.push(t5);
13301      }
13302      switch (k(t5)) {
13303        case "br":
13304          return this.isExtraBR(t5) || this.isBlockElement(t5.nextSibling) || this.appendStringWithAttributes("\n", this.getTextAttributes(t5)), this.processedElements.push(t5);
13305        case "img":
13306          e4 = { url: t5.getAttribute("src"), contentType: "image" };
13307          const i4 = ((t6) => {
13308            const e5 = t6.getAttribute("width"), i5 = t6.getAttribute("height"), n3 = {};
13309            return e5 && (n3.width = parseInt(e5, 10)), i5 && (n3.height = parseInt(i5, 10)), n3;
13310          })(t5);
13311          for (const t6 in i4) {
13312            const n3 = i4[t6];
13313            e4[t6] = n3;
13314          }
13315          return this.appendAttachmentWithAttributes(e4, this.getTextAttributes(t5)), this.processedElements.push(t5);
13316        case "tr":
13317          if (this.needsTableSeparator(t5))
13318            return this.appendStringWithAttributes(j.tableRowSeparator);
13319          break;
13320        case "td":
13321          if (this.needsTableSeparator(t5))
13322            return this.appendStringWithAttributes(j.tableCellSeparator);
13323      }
13324    }
13325    appendBlockForAttributesWithElement(t5, e4) {
13326      let i4 = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
13327      this.blockElements.push(e4);
13328      const n3 = function() {
13329        return { text: [], attributes: arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, htmlAttributes: arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {} };
13330      }(t5, i4);
13331      return this.blocks.push(n3), n3;
13332    }
13333    appendEmptyBlock() {
13334      return this.appendBlockForAttributesWithElement([], null);
13335    }
13336    appendStringWithAttributes(t5, e4) {
13337      return this.appendPiece(an(t5, e4));
13338    }
13339    appendAttachmentWithAttributes(t5, e4) {
13340      return this.appendPiece(function(t6) {
13341        return { attachment: t6, attributes: arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, type: "attachment" };
13342      }(t5, e4));
13343    }
13344    appendPiece(t5) {
13345      return 0 === this.blocks.length && this.appendEmptyBlock(), this.blocks[this.blocks.length - 1].text.push(t5);
13346    }
13347    appendStringToTextAtIndex(t5, e4) {
13348      const { text: i4 } = this.blocks[e4], n3 = i4[i4.length - 1];
13349      if ("string" !== (null == n3 ? void 0 : n3.type))
13350        return i4.push(an(t5));
13351      n3.string += t5;
13352    }
13353    prependStringToTextAtIndex(t5, e4) {
13354      const { text: i4 } = this.blocks[e4], n3 = i4[0];
13355      if ("string" !== (null == n3 ? void 0 : n3.type))
13356        return i4.unshift(an(t5));
13357      n3.string = t5 + n3.string;
13358    }
13359    getTextAttributes(t5) {
13360      let e4;
13361      const i4 = {};
13362      for (const n3 in W) {
13363        const r4 = W[n3];
13364        if (r4.tagName && y(t5, { matchingSelector: r4.tagName, untilNode: this.containerElement }))
13365          i4[n3] = true;
13366        else if (r4.parser) {
13367          if (e4 = r4.parser(t5), e4) {
13368            let o3 = false;
13369            for (const i5 of this.findBlockElementAncestors(t5))
13370              if (r4.parser(i5) === e4) {
13371                o3 = true;
13372                break;
13373              }
13374            o3 || (i4[n3] = e4);
13375          }
13376        } else
13377          r4.styleProperty && (e4 = t5.style[r4.styleProperty], e4 && (i4[n3] = e4));
13378      }
13379      if (P(t5)) {
13380        const n3 = ln(t5, "attributes");
13381        for (const t6 in n3)
13382          e4 = n3[t6], i4[t6] = e4;
13383      }
13384      return i4;
13385    }
13386    getBlockAttributes(t5) {
13387      const e4 = [];
13388      for (; t5 && t5 !== this.containerElement; ) {
13389        for (const r4 in n) {
13390          const o3 = n[r4];
13391          var i4;
13392          if (false !== o3.parse) {
13393            if (k(t5) === o3.tagName)
13394              (null !== (i4 = o3.test) && void 0 !== i4 && i4.call(o3, t5) || !o3.test) && (e4.push(r4), o3.listAttribute && e4.push(o3.listAttribute));
13395          }
13396        }
13397        t5 = t5.parentNode;
13398      }
13399      return e4.reverse();
13400    }
13401    getBlockHTMLAttributes(t5) {
13402      const e4 = {}, i4 = Object.values(n).find((e5) => e5.tagName === k(t5));
13403      return ((null == i4 ? void 0 : i4.htmlAttributes) || []).forEach((i5) => {
13404        t5.hasAttribute(i5) && (e4[i5] = t5.getAttribute(i5));
13405      }), e4;
13406    }
13407    findBlockElementAncestors(t5) {
13408      const e4 = [];
13409      for (; t5 && t5 !== this.containerElement; ) {
13410        const i4 = k(t5);
13411        L().includes(i4) && e4.push(t5), t5 = t5.parentNode;
13412      }
13413      return e4;
13414    }
13415    isBlockElement(t5) {
13416      if ((null == t5 ? void 0 : t5.nodeType) === Node.ELEMENT_NODE && !P(t5) && !y(t5, { matchingSelector: "td", untilNode: this.containerElement }))
13417        return L().includes(k(t5)) || "block" === window.getComputedStyle(t5).display;
13418    }
13419    isInsignificantTextNode(t5) {
13420      if ((null == t5 ? void 0 : t5.nodeType) !== Node.TEXT_NODE)
13421        return;
13422      if (!pn(t5.data))
13423        return;
13424      const { parentNode: e4, previousSibling: i4, nextSibling: n3 } = t5;
13425      return hn(e4.previousSibling) && !this.isBlockElement(e4.previousSibling) || un(e4) ? void 0 : !i4 || this.isBlockElement(i4) || !n3 || this.isBlockElement(n3);
13426    }
13427    isExtraBR(t5) {
13428      return "br" === k(t5) && this.isBlockElement(t5.parentNode) && t5.parentNode.lastChild === t5;
13429    }
13430    needsTableSeparator(t5) {
13431      if (j.removeBlankTableCells) {
13432        var e4;
13433        const i4 = null === (e4 = t5.previousSibling) || void 0 === e4 ? void 0 : e4.textContent;
13434        return i4 && /\S/.test(i4);
13435      }
13436      return t5.previousSibling;
13437    }
13438    translateBlockElementMarginsToNewlines() {
13439      const t5 = this.getMarginOfDefaultBlockElement();
13440      for (let e4 = 0; e4 < this.blocks.length; e4++) {
13441        const i4 = this.getMarginOfBlockElementAtIndex(e4);
13442        i4 && (i4.top > 2 * t5.top && this.prependStringToTextAtIndex("\n", e4), i4.bottom > 2 * t5.bottom && this.appendStringToTextAtIndex("\n", e4));
13443      }
13444    }
13445    getMarginOfBlockElementAtIndex(t5) {
13446      const e4 = this.blockElements[t5];
13447      if (e4 && e4.textContent && !L().includes(k(e4)) && !this.processedElements.includes(e4))
13448        return dn(e4);
13449    }
13450    getMarginOfDefaultBlockElement() {
13451      const t5 = T(n.default.tagName);
13452      return this.containerElement.appendChild(t5), dn(t5);
13453    }
13454  };
13455  var un = function(t5) {
13456    const { whiteSpace: e4 } = window.getComputedStyle(t5);
13457    return ["pre", "pre-wrap", "pre-line"].includes(e4);
13458  };
13459  var hn = (t5) => t5 && !fn(t5.textContent);
13460  var dn = function(t5) {
13461    const e4 = window.getComputedStyle(t5);
13462    if ("block" === e4.display)
13463      return { top: parseInt(e4.marginTop), bottom: parseInt(e4.marginBottom) };
13464  };
13465  var gn = function(t5) {
13466    return "style" === k(t5) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;
13467  };
13468  var mn = (t5) => t5.replace(new RegExp("^".concat(Ut.source, "+")), "");
13469  var pn = (t5) => new RegExp("^".concat(Ut.source, "*$")).test(t5);
13470  var fn = (t5) => /\s$/.test(t5);
13471  var bn = ["contenteditable", "data-trix-id", "data-trix-store-key", "data-trix-mutable", "data-trix-placeholder", "tabindex"];
13472  var vn = "data-trix-serialized-attributes";
13473  var An = "[".concat(vn, "]");
13474  var yn = new RegExp("<!--block-->", "g");
13475  var xn = { "application/json": function(t5) {
13476    let e4;
13477    if (t5 instanceof on)
13478      e4 = t5;
13479    else {
13480      if (!(t5 instanceof HTMLElement))
13481        throw new Error("unserializable object");
13482      e4 = cn.parse(t5.innerHTML).getDocument();
13483    }
13484    return e4.toSerializableDocument().toJSONString();
13485  }, "text/html": function(t5) {
13486    let e4;
13487    if (t5 instanceof on)
13488      e4 = Ci.render(t5);
13489    else {
13490      if (!(t5 instanceof HTMLElement))
13491        throw new Error("unserializable object");
13492      e4 = t5.cloneNode(true);
13493    }
13494    return Array.from(e4.querySelectorAll("[data-trix-serialize=false]")).forEach((t6) => {
13495      S(t6);
13496    }), bn.forEach((t6) => {
13497      Array.from(e4.querySelectorAll("[".concat(t6, "]"))).forEach((e5) => {
13498        e5.removeAttribute(t6);
13499      });
13500    }), Array.from(e4.querySelectorAll(An)).forEach((t6) => {
13501      try {
13502        const e5 = JSON.parse(t6.getAttribute(vn));
13503        t6.removeAttribute(vn);
13504        for (const i4 in e5) {
13505          const n3 = e5[i4];
13506          t6.setAttribute(i4, n3);
13507        }
13508      } catch (t7) {
13509      }
13510    }), e4.innerHTML.replace(yn, "");
13511  } };
13512  var Cn = Object.freeze({ __proto__: null });
13513  var En = class extends q {
13514    constructor(t5, e4) {
13515      super(...arguments), this.attachmentManager = t5, this.attachment = e4, this.id = this.attachment.id, this.file = this.attachment.file;
13516    }
13517    remove() {
13518      return this.attachmentManager.requestRemovalOfAttachment(this.attachment);
13519    }
13520  };
13521  En.proxyMethod("attachment.getAttribute"), En.proxyMethod("attachment.hasAttribute"), En.proxyMethod("attachment.setAttribute"), En.proxyMethod("attachment.getAttributes"), En.proxyMethod("attachment.setAttributes"), En.proxyMethod("attachment.isPending"), En.proxyMethod("attachment.isPreviewable"), En.proxyMethod("attachment.getURL"), En.proxyMethod("attachment.getHref"), En.proxyMethod("attachment.getFilename"), En.proxyMethod("attachment.getFilesize"), En.proxyMethod("attachment.getFormattedFilesize"), En.proxyMethod("attachment.getExtension"), En.proxyMethod("attachment.getContentType"), En.proxyMethod("attachment.getFile"), En.proxyMethod("attachment.setFile"), En.proxyMethod("attachment.releaseFile"), En.proxyMethod("attachment.getUploadProgress"), En.proxyMethod("attachment.setUploadProgress");
13522  var Sn = class extends q {
13523    constructor() {
13524      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
13525      super(...arguments), this.managedAttachments = {}, Array.from(t5).forEach((t6) => {
13526        this.manageAttachment(t6);
13527      });
13528    }
13529    getAttachments() {
13530      const t5 = [];
13531      for (const e4 in this.managedAttachments) {
13532        const i4 = this.managedAttachments[e4];
13533        t5.push(i4);
13534      }
13535      return t5;
13536    }
13537    manageAttachment(t5) {
13538      return this.managedAttachments[t5.id] || (this.managedAttachments[t5.id] = new En(this, t5)), this.managedAttachments[t5.id];
13539    }
13540    attachmentIsManaged(t5) {
13541      return t5.id in this.managedAttachments;
13542    }
13543    requestRemovalOfAttachment(t5) {
13544      var e4, i4;
13545      if (this.attachmentIsManaged(t5))
13546        return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.attachmentManagerDidRequestRemovalOfAttachment) || void 0 === i4 ? void 0 : i4.call(e4, t5);
13547    }
13548    unmanageAttachment(t5) {
13549      const e4 = this.managedAttachments[t5.id];
13550      return delete this.managedAttachments[t5.id], e4;
13551    }
13552  };
13553  var Rn = class {
13554    constructor(t5) {
13555      this.composition = t5, this.document = this.composition.document;
13556      const e4 = this.composition.getSelectedRange();
13557      this.startPosition = e4[0], this.endPosition = e4[1], this.startLocation = this.document.locationFromPosition(this.startPosition), this.endLocation = this.document.locationFromPosition(this.endPosition), this.block = this.document.getBlockAtIndex(this.endLocation.index), this.breaksOnReturn = this.block.breaksOnReturn(), this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1), this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset);
13558    }
13559    shouldInsertBlockBreak() {
13560      return this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty() ? 0 !== this.startLocation.offset : this.breaksOnReturn && "\n" !== this.nextCharacter;
13561    }
13562    shouldBreakFormattedBlock() {
13563      return this.block.hasAttributes() && !this.block.isListItem() && (this.breaksOnReturn && "\n" === this.nextCharacter || "\n" === this.previousCharacter);
13564    }
13565    shouldDecreaseListLevel() {
13566      return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty();
13567    }
13568    shouldPrependListItem() {
13569      return this.block.isListItem() && 0 === this.startLocation.offset && !this.block.isEmpty();
13570    }
13571    shouldRemoveLastBlockAttribute() {
13572      return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty();
13573    }
13574  };
13575  var kn = class extends q {
13576    constructor() {
13577      super(...arguments), this.document = new on(), this.attachments = [], this.currentAttributes = {}, this.revision = 0;
13578    }
13579    setDocument(t5) {
13580      var e4, i4;
13581      if (!t5.isEqualTo(this.document))
13582        return this.document = t5, this.refreshAttachments(), this.revision++, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionDidChangeDocument) || void 0 === i4 ? void 0 : i4.call(e4, t5);
13583    }
13584    getSnapshot() {
13585      return { document: this.document, selectedRange: this.getSelectedRange() };
13586    }
13587    loadSnapshot(t5) {
13588      var e4, i4, n3, r4;
13589      let { document: o3, selectedRange: s4 } = t5;
13590      return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionWillLoadSnapshot) || void 0 === i4 || i4.call(e4), this.setDocument(null != o3 ? o3 : new on()), this.setSelection(null != s4 ? s4 : [0, 0]), null === (n3 = this.delegate) || void 0 === n3 || null === (r4 = n3.compositionDidLoadSnapshot) || void 0 === r4 ? void 0 : r4.call(n3);
13591    }
13592    insertText(t5) {
13593      let { updatePosition: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { updatePosition: true };
13594      const i4 = this.getSelectedRange();
13595      this.setDocument(this.document.insertTextAtRange(t5, i4));
13596      const n3 = i4[0], r4 = n3 + t5.getLength();
13597      return e4 && this.setSelection(r4), this.notifyDelegateOfInsertionAtRange([n3, r4]);
13598    }
13599    insertBlock() {
13600      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new Gi();
13601      const e4 = new on([t5]);
13602      return this.insertDocument(e4);
13603    }
13604    insertDocument() {
13605      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new on();
13606      const e4 = this.getSelectedRange();
13607      this.setDocument(this.document.insertDocumentAtRange(t5, e4));
13608      const i4 = e4[0], n3 = i4 + t5.getLength();
13609      return this.setSelection(n3), this.notifyDelegateOfInsertionAtRange([i4, n3]);
13610    }
13611    insertString(t5, e4) {
13612      const i4 = this.getCurrentTextAttributes(), n3 = Ki.textForStringWithAttributes(t5, i4);
13613      return this.insertText(n3, e4);
13614    }
13615    insertBlockBreak() {
13616      const t5 = this.getSelectedRange();
13617      this.setDocument(this.document.insertBlockBreakAtRange(t5));
13618      const e4 = t5[0], i4 = e4 + 1;
13619      return this.setSelection(i4), this.notifyDelegateOfInsertionAtRange([e4, i4]);
13620    }
13621    insertLineBreak() {
13622      const t5 = new Rn(this);
13623      if (t5.shouldDecreaseListLevel())
13624        return this.decreaseListLevel(), this.setSelection(t5.startPosition);
13625      if (t5.shouldPrependListItem()) {
13626        const e4 = new on([t5.block.copyWithoutText()]);
13627        return this.insertDocument(e4);
13628      }
13629      return t5.shouldInsertBlockBreak() ? this.insertBlockBreak() : t5.shouldRemoveLastBlockAttribute() ? this.removeLastBlockAttribute() : t5.shouldBreakFormattedBlock() ? this.breakFormattedBlock(t5) : this.insertString("\n");
13630    }
13631    insertHTML(t5) {
13632      const e4 = cn.parse(t5).getDocument(), i4 = this.getSelectedRange();
13633      this.setDocument(this.document.mergeDocumentAtRange(e4, i4));
13634      const n3 = i4[0], r4 = n3 + e4.getLength() - 1;
13635      return this.setSelection(r4), this.notifyDelegateOfInsertionAtRange([n3, r4]);
13636    }
13637    replaceHTML(t5) {
13638      const e4 = cn.parse(t5).getDocument().copyUsingObjectsFromDocument(this.document), i4 = this.getLocationRange({ strict: false }), n3 = this.document.rangeFromLocationRange(i4);
13639      return this.setDocument(e4), this.setSelection(n3);
13640    }
13641    insertFile(t5) {
13642      return this.insertFiles([t5]);
13643    }
13644    insertFiles(t5) {
13645      const e4 = [];
13646      return Array.from(t5).forEach((t6) => {
13647        var i4;
13648        if (null !== (i4 = this.delegate) && void 0 !== i4 && i4.compositionShouldAcceptFile(t6)) {
13649          const i5 = Wi.attachmentForFile(t6);
13650          e4.push(i5);
13651        }
13652      }), this.insertAttachments(e4);
13653    }
13654    insertAttachment(t5) {
13655      return this.insertAttachments([t5]);
13656    }
13657    insertAttachments(t5) {
13658      let e4 = new Ki();
13659      return Array.from(t5).forEach((t6) => {
13660        var n3;
13661        const r4 = t6.getType(), o3 = null === (n3 = i[r4]) || void 0 === n3 ? void 0 : n3.presentation, s4 = this.getCurrentTextAttributes();
13662        o3 && (s4.presentation = o3);
13663        const a4 = Ki.textForAttachmentWithAttributes(t6, s4);
13664        e4 = e4.appendText(a4);
13665      }), this.insertText(e4);
13666    }
13667    shouldManageDeletingInDirection(t5) {
13668      const e4 = this.getLocationRange();
13669      if (Lt(e4)) {
13670        if ("backward" === t5 && 0 === e4[0].offset)
13671          return true;
13672        if (this.shouldManageMovingCursorInDirection(t5))
13673          return true;
13674      } else if (e4[0].index !== e4[1].index)
13675        return true;
13676      return false;
13677    }
13678    deleteInDirection(t5) {
13679      let e4, i4, n3, { length: r4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
13680      const o3 = this.getLocationRange();
13681      let s4 = this.getSelectedRange();
13682      const a4 = Lt(s4);
13683      if (a4 ? i4 = "backward" === t5 && 0 === o3[0].offset : n3 = o3[0].index !== o3[1].index, i4 && this.canDecreaseBlockAttributeLevel()) {
13684        const t6 = this.getBlock();
13685        if (t6.isListItem() ? this.decreaseListLevel() : this.decreaseBlockAttributeLevel(), this.setSelection(s4[0]), t6.isEmpty())
13686          return false;
13687      }
13688      return a4 && (s4 = this.getExpandedRangeInDirection(t5, { length: r4 }), "backward" === t5 && (e4 = this.getAttachmentAtRange(s4))), e4 ? (this.editAttachment(e4), false) : (this.setDocument(this.document.removeTextAtRange(s4)), this.setSelection(s4[0]), !i4 && !n3 && void 0);
13689    }
13690    moveTextFromRange(t5) {
13691      const [e4] = Array.from(this.getSelectedRange());
13692      return this.setDocument(this.document.moveTextFromRangeToPosition(t5, e4)), this.setSelection(e4);
13693    }
13694    removeAttachment(t5) {
13695      const e4 = this.document.getRangeOfAttachment(t5);
13696      if (e4)
13697        return this.stopEditingAttachment(), this.setDocument(this.document.removeTextAtRange(e4)), this.setSelection(e4[0]);
13698    }
13699    removeLastBlockAttribute() {
13700      const [t5, e4] = Array.from(this.getSelectedRange()), i4 = this.document.getBlockAtPosition(e4);
13701      return this.removeCurrentAttribute(i4.getLastAttribute()), this.setSelection(t5);
13702    }
13703    insertPlaceholder() {
13704      return this.placeholderPosition = this.getPosition(), this.insertString(" ");
13705    }
13706    selectPlaceholder() {
13707      if (null != this.placeholderPosition)
13708        return this.setSelectedRange([this.placeholderPosition, this.placeholderPosition + 1]), this.getSelectedRange();
13709    }
13710    forgetPlaceholder() {
13711      this.placeholderPosition = null;
13712    }
13713    hasCurrentAttribute(t5) {
13714      const e4 = this.currentAttributes[t5];
13715      return null != e4 && false !== e4;
13716    }
13717    toggleCurrentAttribute(t5) {
13718      const e4 = !this.currentAttributes[t5];
13719      return e4 ? this.setCurrentAttribute(t5, e4) : this.removeCurrentAttribute(t5);
13720    }
13721    canSetCurrentAttribute(t5) {
13722      return mt(t5) ? this.canSetCurrentBlockAttribute(t5) : this.canSetCurrentTextAttribute(t5);
13723    }
13724    canSetCurrentTextAttribute(t5) {
13725      const e4 = this.getSelectedDocument();
13726      if (e4) {
13727        for (const t6 of Array.from(e4.getAttachments()))
13728          if (!t6.hasContent())
13729            return false;
13730        return true;
13731      }
13732    }
13733    canSetCurrentBlockAttribute(t5) {
13734      const e4 = this.getBlock();
13735      if (e4)
13736        return !e4.isTerminalBlock();
13737    }
13738    setCurrentAttribute(t5, e4) {
13739      return mt(t5) ? this.setBlockAttribute(t5, e4) : (this.setTextAttribute(t5, e4), this.currentAttributes[t5] = e4, this.notifyDelegateOfCurrentAttributesChange());
13740    }
13741    setHTMLAtributeAtPosition(t5, e4, i4) {
13742      var n3;
13743      const r4 = this.document.getBlockAtPosition(t5), o3 = null === (n3 = mt(r4.getLastAttribute())) || void 0 === n3 ? void 0 : n3.htmlAttributes;
13744      if (r4 && null != o3 && o3.includes(e4)) {
13745        const n4 = this.document.setHTMLAttributeAtPosition(t5, e4, i4);
13746        this.setDocument(n4);
13747      }
13748    }
13749    setTextAttribute(t5, e4) {
13750      const i4 = this.getSelectedRange();
13751      if (!i4)
13752        return;
13753      const [n3, r4] = Array.from(i4);
13754      if (n3 !== r4)
13755        return this.setDocument(this.document.addAttributeAtRange(t5, e4, i4));
13756      if ("href" === t5) {
13757        const t6 = Ki.textForStringWithAttributes(e4, { href: e4 });
13758        return this.insertText(t6);
13759      }
13760    }
13761    setBlockAttribute(t5, e4) {
13762      const i4 = this.getSelectedRange();
13763      if (this.canSetCurrentAttribute(t5))
13764        return this.setDocument(this.document.applyBlockAttributeAtRange(t5, e4, i4)), this.setSelection(i4);
13765    }
13766    removeCurrentAttribute(t5) {
13767      return mt(t5) ? (this.removeBlockAttribute(t5), this.updateCurrentAttributes()) : (this.removeTextAttribute(t5), delete this.currentAttributes[t5], this.notifyDelegateOfCurrentAttributesChange());
13768    }
13769    removeTextAttribute(t5) {
13770      const e4 = this.getSelectedRange();
13771      if (e4)
13772        return this.setDocument(this.document.removeAttributeAtRange(t5, e4));
13773    }
13774    removeBlockAttribute(t5) {
13775      const e4 = this.getSelectedRange();
13776      if (e4)
13777        return this.setDocument(this.document.removeAttributeAtRange(t5, e4));
13778    }
13779    canDecreaseNestingLevel() {
13780      var t5;
13781      return (null === (t5 = this.getBlock()) || void 0 === t5 ? void 0 : t5.getNestingLevel()) > 0;
13782    }
13783    canIncreaseNestingLevel() {
13784      var t5;
13785      const e4 = this.getBlock();
13786      if (e4) {
13787        if (null === (t5 = mt(e4.getLastNestableAttribute())) || void 0 === t5 || !t5.listAttribute)
13788          return e4.getNestingLevel() > 0;
13789        {
13790          const t6 = this.getPreviousBlock();
13791          if (t6)
13792            return function() {
13793              let t7 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
13794              return ot((arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []).slice(0, t7.length), t7);
13795            }(t6.getListItemAttributes(), e4.getListItemAttributes());
13796        }
13797      }
13798    }
13799    decreaseNestingLevel() {
13800      const t5 = this.getBlock();
13801      if (t5)
13802        return this.setDocument(this.document.replaceBlock(t5, t5.decreaseNestingLevel()));
13803    }
13804    increaseNestingLevel() {
13805      const t5 = this.getBlock();
13806      if (t5)
13807        return this.setDocument(this.document.replaceBlock(t5, t5.increaseNestingLevel()));
13808    }
13809    canDecreaseBlockAttributeLevel() {
13810      var t5;
13811      return (null === (t5 = this.getBlock()) || void 0 === t5 ? void 0 : t5.getAttributeLevel()) > 0;
13812    }
13813    decreaseBlockAttributeLevel() {
13814      var t5;
13815      const e4 = null === (t5 = this.getBlock()) || void 0 === t5 ? void 0 : t5.getLastAttribute();
13816      if (e4)
13817        return this.removeCurrentAttribute(e4);
13818    }
13819    decreaseListLevel() {
13820      let [t5] = Array.from(this.getSelectedRange());
13821      const { index: e4 } = this.document.locationFromPosition(t5);
13822      let i4 = e4;
13823      const n3 = this.getBlock().getAttributeLevel();
13824      let r4 = this.document.getBlockAtIndex(i4 + 1);
13825      for (; r4 && r4.isListItem() && !(r4.getAttributeLevel() <= n3); )
13826        i4++, r4 = this.document.getBlockAtIndex(i4 + 1);
13827      t5 = this.document.positionFromLocation({ index: e4, offset: 0 });
13828      const o3 = this.document.positionFromLocation({ index: i4, offset: 0 });
13829      return this.setDocument(this.document.removeLastListAttributeAtRange([t5, o3]));
13830    }
13831    updateCurrentAttributes() {
13832      const t5 = this.getSelectedRange({ ignoreLock: true });
13833      if (t5) {
13834        const e4 = this.document.getCommonAttributesAtRange(t5);
13835        if (Array.from(gt()).forEach((t6) => {
13836          e4[t6] || this.canSetCurrentAttribute(t6) || (e4[t6] = false);
13837        }), !Tt(e4, this.currentAttributes))
13838          return this.currentAttributes = e4, this.notifyDelegateOfCurrentAttributesChange();
13839      }
13840    }
13841    getCurrentAttributes() {
13842      return m.call({}, this.currentAttributes);
13843    }
13844    getCurrentTextAttributes() {
13845      const t5 = {};
13846      for (const e4 in this.currentAttributes) {
13847        const i4 = this.currentAttributes[e4];
13848        false !== i4 && ft(e4) && (t5[e4] = i4);
13849      }
13850      return t5;
13851    }
13852    freezeSelection() {
13853      return this.setCurrentAttribute("frozen", true);
13854    }
13855    thawSelection() {
13856      return this.removeCurrentAttribute("frozen");
13857    }
13858    hasFrozenSelection() {
13859      return this.hasCurrentAttribute("frozen");
13860    }
13861    setSelection(t5) {
13862      var e4;
13863      const i4 = this.document.locationRangeFromRange(t5);
13864      return null === (e4 = this.delegate) || void 0 === e4 ? void 0 : e4.compositionDidRequestChangingSelectionToLocationRange(i4);
13865    }
13866    getSelectedRange() {
13867      const t5 = this.getLocationRange();
13868      if (t5)
13869        return this.document.rangeFromLocationRange(t5);
13870    }
13871    setSelectedRange(t5) {
13872      const e4 = this.document.locationRangeFromRange(t5);
13873      return this.getSelectionManager().setLocationRange(e4);
13874    }
13875    getPosition() {
13876      const t5 = this.getLocationRange();
13877      if (t5)
13878        return this.document.positionFromLocation(t5[0]);
13879    }
13880    getLocationRange(t5) {
13881      return this.targetLocationRange ? this.targetLocationRange : this.getSelectionManager().getLocationRange(t5) || wt({ index: 0, offset: 0 });
13882    }
13883    withTargetLocationRange(t5, e4) {
13884      let i4;
13885      this.targetLocationRange = t5;
13886      try {
13887        i4 = e4();
13888      } finally {
13889        this.targetLocationRange = null;
13890      }
13891      return i4;
13892    }
13893    withTargetRange(t5, e4) {
13894      const i4 = this.document.locationRangeFromRange(t5);
13895      return this.withTargetLocationRange(i4, e4);
13896    }
13897    withTargetDOMRange(t5, e4) {
13898      const i4 = this.createLocationRangeFromDOMRange(t5, { strict: false });
13899      return this.withTargetLocationRange(i4, e4);
13900    }
13901    getExpandedRangeInDirection(t5) {
13902      let { length: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {}, [i4, n3] = Array.from(this.getSelectedRange());
13903      return "backward" === t5 ? e4 ? i4 -= e4 : i4 = this.translateUTF16PositionFromOffset(i4, -1) : e4 ? n3 += e4 : n3 = this.translateUTF16PositionFromOffset(n3, 1), wt([i4, n3]);
13904    }
13905    shouldManageMovingCursorInDirection(t5) {
13906      if (this.editingAttachment)
13907        return true;
13908      const e4 = this.getExpandedRangeInDirection(t5);
13909      return null != this.getAttachmentAtRange(e4);
13910    }
13911    moveCursorInDirection(t5) {
13912      let e4, i4;
13913      if (this.editingAttachment)
13914        i4 = this.document.getRangeOfAttachment(this.editingAttachment);
13915      else {
13916        const n3 = this.getSelectedRange();
13917        i4 = this.getExpandedRangeInDirection(t5), e4 = !Dt(n3, i4);
13918      }
13919      if ("backward" === t5 ? this.setSelectedRange(i4[0]) : this.setSelectedRange(i4[1]), e4) {
13920        const t6 = this.getAttachmentAtRange(i4);
13921        if (t6)
13922          return this.editAttachment(t6);
13923      }
13924    }
13925    expandSelectionInDirection(t5) {
13926      let { length: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
13927      const i4 = this.getExpandedRangeInDirection(t5, { length: e4 });
13928      return this.setSelectedRange(i4);
13929    }
13930    expandSelectionForEditing() {
13931      if (this.hasCurrentAttribute("href"))
13932        return this.expandSelectionAroundCommonAttribute("href");
13933    }
13934    expandSelectionAroundCommonAttribute(t5) {
13935      const e4 = this.getPosition(), i4 = this.document.getRangeOfCommonAttributeAtPosition(t5, e4);
13936      return this.setSelectedRange(i4);
13937    }
13938    selectionContainsAttachments() {
13939      var t5;
13940      return (null === (t5 = this.getSelectedAttachments()) || void 0 === t5 ? void 0 : t5.length) > 0;
13941    }
13942    selectionIsInCursorTarget() {
13943      return this.editingAttachment || this.positionIsCursorTarget(this.getPosition());
13944    }
13945    positionIsCursorTarget(t5) {
13946      const e4 = this.document.locationFromPosition(t5);
13947      if (e4)
13948        return this.locationIsCursorTarget(e4);
13949    }
13950    positionIsBlockBreak(t5) {
13951      var e4;
13952      return null === (e4 = this.document.getPieceAtPosition(t5)) || void 0 === e4 ? void 0 : e4.isBlockBreak();
13953    }
13954    getSelectedDocument() {
13955      const t5 = this.getSelectedRange();
13956      if (t5)
13957        return this.document.getDocumentAtRange(t5);
13958    }
13959    getSelectedAttachments() {
13960      var t5;
13961      return null === (t5 = this.getSelectedDocument()) || void 0 === t5 ? void 0 : t5.getAttachments();
13962    }
13963    getAttachments() {
13964      return this.attachments.slice(0);
13965    }
13966    refreshAttachments() {
13967      const t5 = this.document.getAttachments(), { added: e4, removed: i4 } = function() {
13968        let t6 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [], e5 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [];
13969        const i5 = [], n3 = [], r4 = /* @__PURE__ */ new Set();
13970        t6.forEach((t7) => {
13971          r4.add(t7);
13972        });
13973        const o3 = /* @__PURE__ */ new Set();
13974        return e5.forEach((t7) => {
13975          o3.add(t7), r4.has(t7) || i5.push(t7);
13976        }), t6.forEach((t7) => {
13977          o3.has(t7) || n3.push(t7);
13978        }), { added: i5, removed: n3 };
13979      }(this.attachments, t5);
13980      return this.attachments = t5, Array.from(i4).forEach((t6) => {
13981        var e5, i5;
13982        t6.delegate = null, null === (e5 = this.delegate) || void 0 === e5 || null === (i5 = e5.compositionDidRemoveAttachment) || void 0 === i5 || i5.call(e5, t6);
13983      }), (() => {
13984        const t6 = [];
13985        return Array.from(e4).forEach((e5) => {
13986          var i5, n3;
13987          e5.delegate = this, t6.push(null === (i5 = this.delegate) || void 0 === i5 || null === (n3 = i5.compositionDidAddAttachment) || void 0 === n3 ? void 0 : n3.call(i5, e5));
13988        }), t6;
13989      })();
13990    }
13991    attachmentDidChangeAttributes(t5) {
13992      var e4, i4;
13993      return this.revision++, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionDidEditAttachment) || void 0 === i4 ? void 0 : i4.call(e4, t5);
13994    }
13995    attachmentDidChangePreviewURL(t5) {
13996      var e4, i4;
13997      return this.revision++, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionDidChangeAttachmentPreviewURL) || void 0 === i4 ? void 0 : i4.call(e4, t5);
13998    }
13999    editAttachment(t5, e4) {
14000      var i4, n3;
14001      if (t5 !== this.editingAttachment)
14002        return this.stopEditingAttachment(), this.editingAttachment = t5, null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.compositionDidStartEditingAttachment) || void 0 === n3 ? void 0 : n3.call(i4, this.editingAttachment, e4);
14003    }
14004    stopEditingAttachment() {
14005      var t5, e4;
14006      this.editingAttachment && (null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.compositionDidStopEditingAttachment) || void 0 === e4 || e4.call(t5, this.editingAttachment), this.editingAttachment = null);
14007    }
14008    updateAttributesForAttachment(t5, e4) {
14009      return this.setDocument(this.document.updateAttributesForAttachment(t5, e4));
14010    }
14011    removeAttributeForAttachment(t5, e4) {
14012      return this.setDocument(this.document.removeAttributeForAttachment(t5, e4));
14013    }
14014    breakFormattedBlock(t5) {
14015      let { document: e4 } = t5;
14016      const { block: i4 } = t5;
14017      let n3 = t5.startPosition, r4 = [n3 - 1, n3];
14018      i4.getBlockBreakPosition() === t5.startLocation.offset ? (i4.breaksOnReturn() && "\n" === t5.nextCharacter ? n3 += 1 : e4 = e4.removeTextAtRange(r4), r4 = [n3, n3]) : "\n" === t5.nextCharacter ? "\n" === t5.previousCharacter ? r4 = [n3 - 1, n3 + 1] : (r4 = [n3, n3 + 1], n3 += 1) : t5.startLocation.offset - 1 != 0 && (n3 += 1);
14019      const o3 = new on([i4.removeLastAttribute().copyWithoutText()]);
14020      return this.setDocument(e4.insertDocumentAtRange(o3, r4)), this.setSelection(n3);
14021    }
14022    getPreviousBlock() {
14023      const t5 = this.getLocationRange();
14024      if (t5) {
14025        const { index: e4 } = t5[0];
14026        if (e4 > 0)
14027          return this.document.getBlockAtIndex(e4 - 1);
14028      }
14029    }
14030    getBlock() {
14031      const t5 = this.getLocationRange();
14032      if (t5)
14033        return this.document.getBlockAtIndex(t5[0].index);
14034    }
14035    getAttachmentAtRange(t5) {
14036      const e4 = this.document.getDocumentAtRange(t5);
14037      if (e4.toString() === "".concat("\uFFFC", "\n"))
14038        return e4.getAttachments()[0];
14039    }
14040    notifyDelegateOfCurrentAttributesChange() {
14041      var t5, e4;
14042      return null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.compositionDidChangeCurrentAttributes) || void 0 === e4 ? void 0 : e4.call(t5, this.currentAttributes);
14043    }
14044    notifyDelegateOfInsertionAtRange(t5) {
14045      var e4, i4;
14046      return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionDidPerformInsertionAtRange) || void 0 === i4 ? void 0 : i4.call(e4, t5);
14047    }
14048    translateUTF16PositionFromOffset(t5, e4) {
14049      const i4 = this.document.toUTF16String(), n3 = i4.offsetFromUCS2Offset(t5);
14050      return i4.offsetToUCS2Offset(n3 + e4);
14051    }
14052  };
14053  kn.proxyMethod("getSelectionManager().getPointRange"), kn.proxyMethod("getSelectionManager().setLocationRangeFromPointRange"), kn.proxyMethod("getSelectionManager().createLocationRangeFromDOMRange"), kn.proxyMethod("getSelectionManager().locationIsCursorTarget"), kn.proxyMethod("getSelectionManager().selectionIsExpanded"), kn.proxyMethod("delegate?.getSelectionManager");
14054  var Tn = class extends q {
14055    constructor(t5) {
14056      super(...arguments), this.composition = t5, this.undoEntries = [], this.redoEntries = [];
14057    }
14058    recordUndoEntry(t5) {
14059      let { context: e4, consolidatable: i4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
14060      const n3 = this.undoEntries.slice(-1)[0];
14061      if (!i4 || !wn(n3, t5, e4)) {
14062        const i5 = this.createEntry({ description: t5, context: e4 });
14063        this.undoEntries.push(i5), this.redoEntries = [];
14064      }
14065    }
14066    undo() {
14067      const t5 = this.undoEntries.pop();
14068      if (t5) {
14069        const e4 = this.createEntry(t5);
14070        return this.redoEntries.push(e4), this.composition.loadSnapshot(t5.snapshot);
14071      }
14072    }
14073    redo() {
14074      const t5 = this.redoEntries.pop();
14075      if (t5) {
14076        const e4 = this.createEntry(t5);
14077        return this.undoEntries.push(e4), this.composition.loadSnapshot(t5.snapshot);
14078      }
14079    }
14080    canUndo() {
14081      return this.undoEntries.length > 0;
14082    }
14083    canRedo() {
14084      return this.redoEntries.length > 0;
14085    }
14086    createEntry() {
14087      let { description: t5, context: e4 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
14088      return { description: null == t5 ? void 0 : t5.toString(), context: JSON.stringify(e4), snapshot: this.composition.getSnapshot() };
14089    }
14090  };
14091  var wn = (t5, e4, i4) => (null == t5 ? void 0 : t5.description) === (null == e4 ? void 0 : e4.toString()) && (null == t5 ? void 0 : t5.context) === JSON.stringify(i4);
14092  var Ln = "attachmentGallery";
14093  var Dn = class {
14094    constructor(t5) {
14095      this.document = t5.document, this.selectedRange = t5.selectedRange;
14096    }
14097    perform() {
14098      return this.removeBlockAttribute(), this.applyBlockAttribute();
14099    }
14100    getSnapshot() {
14101      return { document: this.document, selectedRange: this.selectedRange };
14102    }
14103    removeBlockAttribute() {
14104      return this.findRangesOfBlocks().map((t5) => this.document = this.document.removeAttributeAtRange(Ln, t5));
14105    }
14106    applyBlockAttribute() {
14107      let t5 = 0;
14108      this.findRangesOfPieces().forEach((e4) => {
14109        e4[1] - e4[0] > 1 && (e4[0] += t5, e4[1] += t5, "\n" !== this.document.getCharacterAtPosition(e4[1]) && (this.document = this.document.insertBlockBreakAtRange(e4[1]), e4[1] < this.selectedRange[1] && this.moveSelectedRangeForward(), e4[1]++, t5++), 0 !== e4[0] && "\n" !== this.document.getCharacterAtPosition(e4[0] - 1) && (this.document = this.document.insertBlockBreakAtRange(e4[0]), e4[0] < this.selectedRange[0] && this.moveSelectedRangeForward(), e4[0]++, t5++), this.document = this.document.applyBlockAttributeAtRange(Ln, true, e4));
14110      });
14111    }
14112    findRangesOfBlocks() {
14113      return this.document.findRangesForBlockAttribute(Ln);
14114    }
14115    findRangesOfPieces() {
14116      return this.document.findRangesForTextAttribute("presentation", { withValue: "gallery" });
14117    }
14118    moveSelectedRangeForward() {
14119      this.selectedRange[0] += 1, this.selectedRange[1] += 1;
14120    }
14121  };
14122  var Nn = function(t5) {
14123    const e4 = new Dn(t5);
14124    return e4.perform(), e4.getSnapshot();
14125  };
14126  var In = [Nn];
14127  var On = class {
14128    constructor(t5, e4, i4) {
14129      this.insertFiles = this.insertFiles.bind(this), this.composition = t5, this.selectionManager = e4, this.element = i4, this.undoManager = new Tn(this.composition), this.filters = In.slice(0);
14130    }
14131    loadDocument(t5) {
14132      return this.loadSnapshot({ document: t5, selectedRange: [0, 0] });
14133    }
14134    loadHTML() {
14135      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
14136      const e4 = cn.parse(t5, { referenceElement: this.element }).getDocument();
14137      return this.loadDocument(e4);
14138    }
14139    loadJSON(t5) {
14140      let { document: e4, selectedRange: i4 } = t5;
14141      return e4 = on.fromJSON(e4), this.loadSnapshot({ document: e4, selectedRange: i4 });
14142    }
14143    loadSnapshot(t5) {
14144      return this.undoManager = new Tn(this.composition), this.composition.loadSnapshot(t5);
14145    }
14146    getDocument() {
14147      return this.composition.document;
14148    }
14149    getSelectedDocument() {
14150      return this.composition.getSelectedDocument();
14151    }
14152    getSnapshot() {
14153      return this.composition.getSnapshot();
14154    }
14155    toJSON() {
14156      return this.getSnapshot();
14157    }
14158    deleteInDirection(t5) {
14159      return this.composition.deleteInDirection(t5);
14160    }
14161    insertAttachment(t5) {
14162      return this.composition.insertAttachment(t5);
14163    }
14164    insertAttachments(t5) {
14165      return this.composition.insertAttachments(t5);
14166    }
14167    insertDocument(t5) {
14168      return this.composition.insertDocument(t5);
14169    }
14170    insertFile(t5) {
14171      return this.composition.insertFile(t5);
14172    }
14173    insertFiles(t5) {
14174      return this.composition.insertFiles(t5);
14175    }
14176    insertHTML(t5) {
14177      return this.composition.insertHTML(t5);
14178    }
14179    insertString(t5) {
14180      return this.composition.insertString(t5);
14181    }
14182    insertText(t5) {
14183      return this.composition.insertText(t5);
14184    }
14185    insertLineBreak() {
14186      return this.composition.insertLineBreak();
14187    }
14188    getSelectedRange() {
14189      return this.composition.getSelectedRange();
14190    }
14191    getPosition() {
14192      return this.composition.getPosition();
14193    }
14194    getClientRectAtPosition(t5) {
14195      const e4 = this.getDocument().locationRangeFromRange([t5, t5 + 1]);
14196      return this.selectionManager.getClientRectAtLocationRange(e4);
14197    }
14198    expandSelectionInDirection(t5) {
14199      return this.composition.expandSelectionInDirection(t5);
14200    }
14201    moveCursorInDirection(t5) {
14202      return this.composition.moveCursorInDirection(t5);
14203    }
14204    setSelectedRange(t5) {
14205      return this.composition.setSelectedRange(t5);
14206    }
14207    activateAttribute(t5) {
14208      let e4 = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1];
14209      return this.composition.setCurrentAttribute(t5, e4);
14210    }
14211    attributeIsActive(t5) {
14212      return this.composition.hasCurrentAttribute(t5);
14213    }
14214    canActivateAttribute(t5) {
14215      return this.composition.canSetCurrentAttribute(t5);
14216    }
14217    deactivateAttribute(t5) {
14218      return this.composition.removeCurrentAttribute(t5);
14219    }
14220    setHTMLAtributeAtPosition(t5, e4, i4) {
14221      this.composition.setHTMLAtributeAtPosition(t5, e4, i4);
14222    }
14223    canDecreaseNestingLevel() {
14224      return this.composition.canDecreaseNestingLevel();
14225    }
14226    canIncreaseNestingLevel() {
14227      return this.composition.canIncreaseNestingLevel();
14228    }
14229    decreaseNestingLevel() {
14230      if (this.canDecreaseNestingLevel())
14231        return this.composition.decreaseNestingLevel();
14232    }
14233    increaseNestingLevel() {
14234      if (this.canIncreaseNestingLevel())
14235        return this.composition.increaseNestingLevel();
14236    }
14237    canRedo() {
14238      return this.undoManager.canRedo();
14239    }
14240    canUndo() {
14241      return this.undoManager.canUndo();
14242    }
14243    recordUndoEntry(t5) {
14244      let { context: e4, consolidatable: i4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
14245      return this.undoManager.recordUndoEntry(t5, { context: e4, consolidatable: i4 });
14246    }
14247    redo() {
14248      if (this.canRedo())
14249        return this.undoManager.redo();
14250    }
14251    undo() {
14252      if (this.canUndo())
14253        return this.undoManager.undo();
14254    }
14255  };
14256  var Fn = class {
14257    constructor(t5) {
14258      this.element = t5;
14259    }
14260    findLocationFromContainerAndOffset(t5, e4) {
14261      let { strict: i4 } = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : { strict: true }, n3 = 0, r4 = false;
14262      const o3 = { index: 0, offset: 0 }, s4 = this.findAttachmentElementParentForNode(t5);
14263      s4 && (t5 = s4.parentNode, e4 = E(s4));
14264      const a4 = R(this.element, { usingFilter: _n });
14265      for (; a4.nextNode(); ) {
14266        const s5 = a4.currentNode;
14267        if (s5 === t5 && B(t5)) {
14268          F(s5) || (o3.offset += e4);
14269          break;
14270        }
14271        if (s5.parentNode === t5) {
14272          if (n3++ === e4)
14273            break;
14274        } else if (!C(t5, s5) && n3 > 0)
14275          break;
14276        N(s5, { strict: i4 }) ? (r4 && o3.index++, o3.offset = 0, r4 = true) : o3.offset += Pn(s5);
14277      }
14278      return o3;
14279    }
14280    findContainerAndOffsetFromLocation(t5) {
14281      let e4, i4;
14282      if (0 === t5.index && 0 === t5.offset) {
14283        for (e4 = this.element, i4 = 0; e4.firstChild; )
14284          if (e4 = e4.firstChild, D(e4)) {
14285            i4 = 1;
14286            break;
14287          }
14288        return [e4, i4];
14289      }
14290      let [n3, r4] = this.findNodeAndOffsetFromLocation(t5);
14291      if (n3) {
14292        if (B(n3))
14293          0 === Pn(n3) ? (e4 = n3.parentNode.parentNode, i4 = E(n3.parentNode), F(n3, { name: "right" }) && i4++) : (e4 = n3, i4 = t5.offset - r4);
14294        else {
14295          if (e4 = n3.parentNode, !N(n3.previousSibling) && !D(e4))
14296            for (; n3 === e4.lastChild && (n3 = e4, e4 = e4.parentNode, !D(e4)); )
14297              ;
14298          i4 = E(n3), 0 !== t5.offset && i4++;
14299        }
14300        return [e4, i4];
14301      }
14302    }
14303    findNodeAndOffsetFromLocation(t5) {
14304      let e4, i4, n3 = 0;
14305      for (const r4 of this.getSignificantNodesForIndex(t5.index)) {
14306        const o3 = Pn(r4);
14307        if (t5.offset <= n3 + o3)
14308          if (B(r4)) {
14309            if (e4 = r4, i4 = n3, t5.offset === i4 && F(e4))
14310              break;
14311          } else
14312            e4 || (e4 = r4, i4 = n3);
14313        if (n3 += o3, n3 > t5.offset)
14314          break;
14315      }
14316      return [e4, i4];
14317    }
14318    findAttachmentElementParentForNode(t5) {
14319      for (; t5 && t5 !== this.element; ) {
14320        if (P(t5))
14321          return t5;
14322        t5 = t5.parentNode;
14323      }
14324    }
14325    getSignificantNodesForIndex(t5) {
14326      const e4 = [], i4 = R(this.element, { usingFilter: Mn });
14327      let n3 = false;
14328      for (; i4.nextNode(); ) {
14329        const o3 = i4.currentNode;
14330        var r4;
14331        if (I(o3)) {
14332          if (null != r4 ? r4++ : r4 = 0, r4 === t5)
14333            n3 = true;
14334          else if (n3)
14335            break;
14336        } else
14337          n3 && e4.push(o3);
14338      }
14339      return e4;
14340    }
14341  };
14342  var Pn = function(t5) {
14343    if (t5.nodeType === Node.TEXT_NODE) {
14344      if (F(t5))
14345        return 0;
14346      return t5.textContent.length;
14347    }
14348    return "br" === k(t5) || P(t5) ? 1 : 0;
14349  };
14350  var Mn = function(t5) {
14351    return Bn(t5) === NodeFilter.FILTER_ACCEPT ? _n(t5) : NodeFilter.FILTER_REJECT;
14352  };
14353  var Bn = function(t5) {
14354    return M(t5) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;
14355  };
14356  var _n = function(t5) {
14357    return P(t5.parentNode) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;
14358  };
14359  var jn = class {
14360    createDOMRangeFromPoint(t5) {
14361      let e4, { x: i4, y: n3 } = t5;
14362      if (document.caretPositionFromPoint) {
14363        const { offsetNode: t6, offset: r4 } = document.caretPositionFromPoint(i4, n3);
14364        return e4 = document.createRange(), e4.setStart(t6, r4), e4;
14365      }
14366      if (document.caretRangeFromPoint)
14367        return document.caretRangeFromPoint(i4, n3);
14368      if (document.body.createTextRange) {
14369        const t6 = Mt();
14370        try {
14371          const t7 = document.body.createTextRange();
14372          t7.moveToPoint(i4, n3), t7.select();
14373        } catch (t7) {
14374        }
14375        return e4 = Mt(), Bt(t6), e4;
14376      }
14377    }
14378    getClientRectsForDOMRange(t5) {
14379      const e4 = Array.from(t5.getClientRects());
14380      return [e4[0], e4[e4.length - 1]];
14381    }
14382  };
14383  var Wn = class extends q {
14384    constructor(t5) {
14385      super(...arguments), this.didMouseDown = this.didMouseDown.bind(this), this.selectionDidChange = this.selectionDidChange.bind(this), this.element = t5, this.locationMapper = new Fn(this.element), this.pointMapper = new jn(), this.lockCount = 0, b("mousedown", { onElement: this.element, withCallback: this.didMouseDown });
14386    }
14387    getLocationRange() {
14388      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
14389      return false === t5.strict ? this.createLocationRangeFromDOMRange(Mt()) : t5.ignoreLock ? this.currentLocationRange : this.lockedLocationRange ? this.lockedLocationRange : this.currentLocationRange;
14390    }
14391    setLocationRange(t5) {
14392      if (this.lockedLocationRange)
14393        return;
14394      t5 = wt(t5);
14395      const e4 = this.createDOMRangeFromLocationRange(t5);
14396      e4 && (Bt(e4), this.updateCurrentLocationRange(t5));
14397    }
14398    setLocationRangeFromPointRange(t5) {
14399      t5 = wt(t5);
14400      const e4 = this.getLocationAtPoint(t5[0]), i4 = this.getLocationAtPoint(t5[1]);
14401      this.setLocationRange([e4, i4]);
14402    }
14403    getClientRectAtLocationRange(t5) {
14404      const e4 = this.createDOMRangeFromLocationRange(t5);
14405      if (e4)
14406        return this.getClientRectsForDOMRange(e4)[1];
14407    }
14408    locationIsCursorTarget(t5) {
14409      const e4 = Array.from(this.findNodeAndOffsetFromLocation(t5))[0];
14410      return F(e4);
14411    }
14412    lock() {
14413      0 == this.lockCount++ && (this.updateCurrentLocationRange(), this.lockedLocationRange = this.getLocationRange());
14414    }
14415    unlock() {
14416      if (0 == --this.lockCount) {
14417        const { lockedLocationRange: t5 } = this;
14418        if (this.lockedLocationRange = null, null != t5)
14419          return this.setLocationRange(t5);
14420      }
14421    }
14422    clearSelection() {
14423      var t5;
14424      return null === (t5 = Pt()) || void 0 === t5 ? void 0 : t5.removeAllRanges();
14425    }
14426    selectionIsCollapsed() {
14427      var t5;
14428      return true === (null === (t5 = Mt()) || void 0 === t5 ? void 0 : t5.collapsed);
14429    }
14430    selectionIsExpanded() {
14431      return !this.selectionIsCollapsed();
14432    }
14433    createLocationRangeFromDOMRange(t5, e4) {
14434      if (null == t5 || !this.domRangeWithinElement(t5))
14435        return;
14436      const i4 = this.findLocationFromContainerAndOffset(t5.startContainer, t5.startOffset, e4);
14437      if (!i4)
14438        return;
14439      const n3 = t5.collapsed ? void 0 : this.findLocationFromContainerAndOffset(t5.endContainer, t5.endOffset, e4);
14440      return wt([i4, n3]);
14441    }
14442    didMouseDown() {
14443      return this.pauseTemporarily();
14444    }
14445    pauseTemporarily() {
14446      let t5;
14447      this.paused = true;
14448      const e4 = () => {
14449        if (this.paused = false, clearTimeout(i4), Array.from(t5).forEach((t6) => {
14450          t6.destroy();
14451        }), C(document, this.element))
14452          return this.selectionDidChange();
14453      }, i4 = setTimeout(e4, 200);
14454      t5 = ["mousemove", "keydown"].map((t6) => b(t6, { onElement: document, withCallback: e4 }));
14455    }
14456    selectionDidChange() {
14457      if (!this.paused && !x(this.element))
14458        return this.updateCurrentLocationRange();
14459    }
14460    updateCurrentLocationRange(t5) {
14461      var e4, i4;
14462      if ((null != t5 ? t5 : t5 = this.createLocationRangeFromDOMRange(Mt())) && !Dt(t5, this.currentLocationRange))
14463        return this.currentLocationRange = t5, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.locationRangeDidChange) || void 0 === i4 ? void 0 : i4.call(e4, this.currentLocationRange.slice(0));
14464    }
14465    createDOMRangeFromLocationRange(t5) {
14466      const e4 = this.findContainerAndOffsetFromLocation(t5[0]), i4 = Lt(t5) ? e4 : this.findContainerAndOffsetFromLocation(t5[1]) || e4;
14467      if (null != e4 && null != i4) {
14468        const t6 = document.createRange();
14469        return t6.setStart(...Array.from(e4 || [])), t6.setEnd(...Array.from(i4 || [])), t6;
14470      }
14471    }
14472    getLocationAtPoint(t5) {
14473      const e4 = this.createDOMRangeFromPoint(t5);
14474      var i4;
14475      if (e4)
14476        return null === (i4 = this.createLocationRangeFromDOMRange(e4)) || void 0 === i4 ? void 0 : i4[0];
14477    }
14478    domRangeWithinElement(t5) {
14479      return t5.collapsed ? C(this.element, t5.startContainer) : C(this.element, t5.startContainer) && C(this.element, t5.endContainer);
14480    }
14481  };
14482  Wn.proxyMethod("locationMapper.findLocationFromContainerAndOffset"), Wn.proxyMethod("locationMapper.findContainerAndOffsetFromLocation"), Wn.proxyMethod("locationMapper.findNodeAndOffsetFromLocation"), Wn.proxyMethod("pointMapper.createDOMRangeFromPoint"), Wn.proxyMethod("pointMapper.getClientRectsForDOMRange");
14483  var Un = Object.freeze({ __proto__: null, Attachment: Wi, AttachmentManager: Sn, AttachmentPiece: Ui, Block: Gi, Composition: kn, Document: on, Editor: On, HTMLParser: cn, HTMLSanitizer: ui, LineBreakInsertion: Rn, LocationMapper: Fn, ManagedAttachment: En, Piece: _i, PointMapper: jn, SelectionManager: Wn, SplittableList: zi, StringPiece: Vi, Text: Ki, UndoManager: Tn });
14484  var Vn = Object.freeze({ __proto__: null, ObjectView: ie, AttachmentView: gi, BlockView: xi, DocumentView: Ci, PieceView: bi, PreviewableAttachmentView: fi, TextView: vi });
14485  var { lang: zn, css: qn, keyNames: Hn } = z;
14486  var Jn = function(t5) {
14487    return function() {
14488      const e4 = t5.apply(this, arguments);
14489      e4.do(), this.undos || (this.undos = []), this.undos.push(e4.undo);
14490    };
14491  };
14492  var Kn = class extends q {
14493    constructor(t5, e4, i4) {
14494      let n3 = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};
14495      super(...arguments), wi(this, "makeElementMutable", Jn(() => ({ do: () => {
14496        this.element.dataset.trixMutable = true;
14497      }, undo: () => delete this.element.dataset.trixMutable }))), wi(this, "addToolbar", Jn(() => {
14498        const t6 = T({ tagName: "div", className: qn.attachmentToolbar, data: { trixMutable: true }, childNodes: T({ tagName: "div", className: "trix-button-row", childNodes: T({ tagName: "span", className: "trix-button-group trix-button-group--actions", childNodes: T({ tagName: "button", className: "trix-button trix-button--remove", textContent: zn.remove, attributes: { title: zn.remove }, data: { trixAction: "remove" } }) }) }) });
14499        return this.attachment.isPreviewable() && t6.appendChild(T({ tagName: "div", className: qn.attachmentMetadataContainer, childNodes: T({ tagName: "span", className: qn.attachmentMetadata, childNodes: [T({ tagName: "span", className: qn.attachmentName, textContent: this.attachment.getFilename(), attributes: { title: this.attachment.getFilename() } }), T({ tagName: "span", className: qn.attachmentSize, textContent: this.attachment.getFormattedFilesize() })] }) })), b("click", { onElement: t6, withCallback: this.didClickToolbar }), b("click", { onElement: t6, matchingSelector: "[data-trix-action]", withCallback: this.didClickActionButton }), v("trix-attachment-before-toolbar", { onElement: this.element, attributes: { toolbar: t6, attachment: this.attachment } }), { do: () => this.element.appendChild(t6), undo: () => S(t6) };
14500      })), wi(this, "installCaptionEditor", Jn(() => {
14501        const t6 = T({ tagName: "textarea", className: qn.attachmentCaptionEditor, attributes: { placeholder: zn.captionPlaceholder }, data: { trixMutable: true } });
14502        t6.value = this.attachmentPiece.getCaption();
14503        const e5 = t6.cloneNode();
14504        e5.classList.add("trix-autoresize-clone"), e5.tabIndex = -1;
14505        const i5 = function() {
14506          e5.value = t6.value, t6.style.height = e5.scrollHeight + "px";
14507        };
14508        b("input", { onElement: t6, withCallback: i5 }), b("input", { onElement: t6, withCallback: this.didInputCaption }), b("keydown", { onElement: t6, withCallback: this.didKeyDownCaption }), b("change", { onElement: t6, withCallback: this.didChangeCaption }), b("blur", { onElement: t6, withCallback: this.didBlurCaption });
14509        const n4 = this.element.querySelector("figcaption"), r4 = n4.cloneNode();
14510        return { do: () => {
14511          if (n4.style.display = "none", r4.appendChild(t6), r4.appendChild(e5), r4.classList.add("".concat(qn.attachmentCaption, "--editing")), n4.parentElement.insertBefore(r4, n4), i5(), this.options.editCaption)
14512            return Rt(() => t6.focus());
14513        }, undo() {
14514          S(r4), n4.style.display = null;
14515        } };
14516      })), this.didClickToolbar = this.didClickToolbar.bind(this), this.didClickActionButton = this.didClickActionButton.bind(this), this.didKeyDownCaption = this.didKeyDownCaption.bind(this), this.didInputCaption = this.didInputCaption.bind(this), this.didChangeCaption = this.didChangeCaption.bind(this), this.didBlurCaption = this.didBlurCaption.bind(this), this.attachmentPiece = t5, this.element = e4, this.container = i4, this.options = n3, this.attachment = this.attachmentPiece.attachment, "a" === k(this.element) && (this.element = this.element.firstChild), this.install();
14517    }
14518    install() {
14519      this.makeElementMutable(), this.addToolbar(), this.attachment.isPreviewable() && this.installCaptionEditor();
14520    }
14521    uninstall() {
14522      var t5;
14523      let e4 = this.undos.pop();
14524      for (this.savePendingCaption(); e4; )
14525        e4(), e4 = this.undos.pop();
14526      null === (t5 = this.delegate) || void 0 === t5 || t5.didUninstallAttachmentEditor(this);
14527    }
14528    savePendingCaption() {
14529      if (null != this.pendingCaption) {
14530        const r4 = this.pendingCaption;
14531        var t5, e4, i4, n3;
14532        if (this.pendingCaption = null, r4)
14533          null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.attachmentEditorDidRequestUpdatingAttributesForAttachment) || void 0 === e4 || e4.call(t5, { caption: r4 }, this.attachment);
14534        else
14535          null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.attachmentEditorDidRequestRemovingAttributeForAttachment) || void 0 === n3 || n3.call(i4, "caption", this.attachment);
14536      }
14537    }
14538    didClickToolbar(t5) {
14539      return t5.preventDefault(), t5.stopPropagation();
14540    }
14541    didClickActionButton(t5) {
14542      var e4;
14543      if ("remove" === t5.target.getAttribute("data-trix-action"))
14544        return null === (e4 = this.delegate) || void 0 === e4 ? void 0 : e4.attachmentEditorDidRequestRemovalOfAttachment(this.attachment);
14545    }
14546    didKeyDownCaption(t5) {
14547      var e4, i4;
14548      if ("return" === Hn[t5.keyCode])
14549        return t5.preventDefault(), this.savePendingCaption(), null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.attachmentEditorDidRequestDeselectingAttachment) || void 0 === i4 ? void 0 : i4.call(e4, this.attachment);
14550    }
14551    didInputCaption(t5) {
14552      this.pendingCaption = t5.target.value.replace(/\s/g, " ").trim();
14553    }
14554    didChangeCaption(t5) {
14555      return this.savePendingCaption();
14556    }
14557    didBlurCaption(t5) {
14558      return this.savePendingCaption();
14559    }
14560  };
14561  var Gn = class extends q {
14562    constructor(t5, i4) {
14563      super(...arguments), this.didFocus = this.didFocus.bind(this), this.didBlur = this.didBlur.bind(this), this.didClickAttachment = this.didClickAttachment.bind(this), this.element = t5, this.composition = i4, this.documentView = new Ci(this.composition.document, { element: this.element }), b("focus", { onElement: this.element, withCallback: this.didFocus }), b("blur", { onElement: this.element, withCallback: this.didBlur }), b("click", { onElement: this.element, matchingSelector: "a[contenteditable=false]", preventDefault: true }), b("mousedown", { onElement: this.element, matchingSelector: e, withCallback: this.didClickAttachment }), b("click", { onElement: this.element, matchingSelector: "a".concat(e), preventDefault: true });
14564    }
14565    didFocus(t5) {
14566      var e4;
14567      const i4 = () => {
14568        var t6, e5;
14569        if (!this.focused)
14570          return this.focused = true, null === (t6 = this.delegate) || void 0 === t6 || null === (e5 = t6.compositionControllerDidFocus) || void 0 === e5 ? void 0 : e5.call(t6);
14571      };
14572      return (null === (e4 = this.blurPromise) || void 0 === e4 ? void 0 : e4.then(i4)) || i4();
14573    }
14574    didBlur(t5) {
14575      this.blurPromise = new Promise((t6) => Rt(() => {
14576        var e4, i4;
14577        x(this.element) || (this.focused = null, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionControllerDidBlur) || void 0 === i4 || i4.call(e4));
14578        return this.blurPromise = null, t6();
14579      }));
14580    }
14581    didClickAttachment(t5, e4) {
14582      var i4, n3;
14583      const r4 = this.findAttachmentForElement(e4), o3 = !!y(t5.target, { matchingSelector: "figcaption" });
14584      return null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.compositionControllerDidSelectAttachment) || void 0 === n3 ? void 0 : n3.call(i4, r4, { editCaption: o3 });
14585    }
14586    getSerializableElement() {
14587      return this.isEditingAttachment() ? this.documentView.shadowElement : this.element;
14588    }
14589    render() {
14590      var t5, e4, i4, n3, r4, o3;
14591      (this.revision !== this.composition.revision && (this.documentView.setDocument(this.composition.document), this.documentView.render(), this.revision = this.composition.revision), this.canSyncDocumentView() && !this.documentView.isSynced()) && (null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.compositionControllerWillSyncDocumentView) || void 0 === n3 || n3.call(i4), this.documentView.sync(), null === (r4 = this.delegate) || void 0 === r4 || null === (o3 = r4.compositionControllerDidSyncDocumentView) || void 0 === o3 || o3.call(r4));
14592      return null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.compositionControllerDidRender) || void 0 === e4 ? void 0 : e4.call(t5);
14593    }
14594    rerenderViewForObject(t5) {
14595      return this.invalidateViewForObject(t5), this.render();
14596    }
14597    invalidateViewForObject(t5) {
14598      return this.documentView.invalidateViewForObject(t5);
14599    }
14600    isViewCachingEnabled() {
14601      return this.documentView.isViewCachingEnabled();
14602    }
14603    enableViewCaching() {
14604      return this.documentView.enableViewCaching();
14605    }
14606    disableViewCaching() {
14607      return this.documentView.disableViewCaching();
14608    }
14609    refreshViewCache() {
14610      return this.documentView.garbageCollectCachedViews();
14611    }
14612    isEditingAttachment() {
14613      return !!this.attachmentEditor;
14614    }
14615    installAttachmentEditorForAttachment(t5, e4) {
14616      var i4;
14617      if ((null === (i4 = this.attachmentEditor) || void 0 === i4 ? void 0 : i4.attachment) === t5)
14618        return;
14619      const n3 = this.documentView.findElementForObject(t5);
14620      if (!n3)
14621        return;
14622      this.uninstallAttachmentEditor();
14623      const r4 = this.composition.document.getAttachmentPieceForAttachment(t5);
14624      this.attachmentEditor = new Kn(r4, n3, this.element, e4), this.attachmentEditor.delegate = this;
14625    }
14626    uninstallAttachmentEditor() {
14627      var t5;
14628      return null === (t5 = this.attachmentEditor) || void 0 === t5 ? void 0 : t5.uninstall();
14629    }
14630    didUninstallAttachmentEditor() {
14631      return this.attachmentEditor = null, this.render();
14632    }
14633    attachmentEditorDidRequestUpdatingAttributesForAttachment(t5, e4) {
14634      var i4, n3;
14635      return null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.compositionControllerWillUpdateAttachment) || void 0 === n3 || n3.call(i4, e4), this.composition.updateAttributesForAttachment(t5, e4);
14636    }
14637    attachmentEditorDidRequestRemovingAttributeForAttachment(t5, e4) {
14638      var i4, n3;
14639      return null === (i4 = this.delegate) || void 0 === i4 || null === (n3 = i4.compositionControllerWillUpdateAttachment) || void 0 === n3 || n3.call(i4, e4), this.composition.removeAttributeForAttachment(t5, e4);
14640    }
14641    attachmentEditorDidRequestRemovalOfAttachment(t5) {
14642      var e4, i4;
14643      return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionControllerDidRequestRemovalOfAttachment) || void 0 === i4 ? void 0 : i4.call(e4, t5);
14644    }
14645    attachmentEditorDidRequestDeselectingAttachment(t5) {
14646      var e4, i4;
14647      return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.compositionControllerDidRequestDeselectingAttachment) || void 0 === i4 ? void 0 : i4.call(e4, t5);
14648    }
14649    canSyncDocumentView() {
14650      return !this.isEditingAttachment();
14651    }
14652    findAttachmentForElement(t5) {
14653      return this.composition.document.getAttachmentById(parseInt(t5.dataset.trixId, 10));
14654    }
14655  };
14656  var Yn = class extends q {
14657  };
14658  var $n = "data-trix-mutable";
14659  var Xn = "[".concat($n, "]");
14660  var Zn = { attributes: true, childList: true, characterData: true, characterDataOldValue: true, subtree: true };
14661  var Qn = class extends q {
14662    constructor(t5) {
14663      super(t5), this.didMutate = this.didMutate.bind(this), this.element = t5, this.observer = new window.MutationObserver(this.didMutate), this.start();
14664    }
14665    start() {
14666      return this.reset(), this.observer.observe(this.element, Zn);
14667    }
14668    stop() {
14669      return this.observer.disconnect();
14670    }
14671    didMutate(t5) {
14672      var e4, i4;
14673      if (this.mutations.push(...Array.from(this.findSignificantMutations(t5) || [])), this.mutations.length)
14674        return null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.elementDidMutate) || void 0 === i4 || i4.call(e4, this.getMutationSummary()), this.reset();
14675    }
14676    reset() {
14677      this.mutations = [];
14678    }
14679    findSignificantMutations(t5) {
14680      return t5.filter((t6) => this.mutationIsSignificant(t6));
14681    }
14682    mutationIsSignificant(t5) {
14683      if (this.nodeIsMutable(t5.target))
14684        return false;
14685      for (const e4 of Array.from(this.nodesModifiedByMutation(t5)))
14686        if (this.nodeIsSignificant(e4))
14687          return true;
14688      return false;
14689    }
14690    nodeIsSignificant(t5) {
14691      return t5 !== this.element && !this.nodeIsMutable(t5) && !M(t5);
14692    }
14693    nodeIsMutable(t5) {
14694      return y(t5, { matchingSelector: Xn });
14695    }
14696    nodesModifiedByMutation(t5) {
14697      const e4 = [];
14698      switch (t5.type) {
14699        case "attributes":
14700          t5.attributeName !== $n && e4.push(t5.target);
14701          break;
14702        case "characterData":
14703          e4.push(t5.target.parentNode), e4.push(t5.target);
14704          break;
14705        case "childList":
14706          e4.push(...Array.from(t5.addedNodes || [])), e4.push(...Array.from(t5.removedNodes || []));
14707      }
14708      return e4;
14709    }
14710    getMutationSummary() {
14711      return this.getTextMutationSummary();
14712    }
14713    getTextMutationSummary() {
14714      const { additions: t5, deletions: e4 } = this.getTextChangesFromCharacterData(), i4 = this.getTextChangesFromChildList();
14715      Array.from(i4.additions).forEach((e5) => {
14716        Array.from(t5).includes(e5) || t5.push(e5);
14717      }), e4.push(...Array.from(i4.deletions || []));
14718      const n3 = {}, r4 = t5.join("");
14719      r4 && (n3.textAdded = r4);
14720      const o3 = e4.join("");
14721      return o3 && (n3.textDeleted = o3), n3;
14722    }
14723    getMutationsByType(t5) {
14724      return Array.from(this.mutations).filter((e4) => e4.type === t5);
14725    }
14726    getTextChangesFromChildList() {
14727      let t5, e4;
14728      const i4 = [], n3 = [];
14729      Array.from(this.getMutationsByType("childList")).forEach((t6) => {
14730        i4.push(...Array.from(t6.addedNodes || [])), n3.push(...Array.from(t6.removedNodes || []));
14731      });
14732      0 === i4.length && 1 === n3.length && I(n3[0]) ? (t5 = [], e4 = ["\n"]) : (t5 = tr(i4), e4 = tr(n3));
14733      const r4 = t5.filter((t6, i5) => t6 !== e4[i5]).map(Wt), o3 = e4.filter((e5, i5) => e5 !== t5[i5]).map(Wt);
14734      return { additions: r4, deletions: o3 };
14735    }
14736    getTextChangesFromCharacterData() {
14737      let t5, e4;
14738      const i4 = this.getMutationsByType("characterData");
14739      if (i4.length) {
14740        const n3 = i4[0], r4 = i4[i4.length - 1], o3 = function(t6, e5) {
14741          let i5, n4;
14742          return t6 = X.box(t6), (e5 = X.box(e5)).length < t6.length ? [n4, i5] = zt(t6, e5) : [i5, n4] = zt(e5, t6), { added: i5, removed: n4 };
14743        }(Wt(n3.oldValue), Wt(r4.target.data));
14744        t5 = o3.added, e4 = o3.removed;
14745      }
14746      return { additions: t5 ? [t5] : [], deletions: e4 ? [e4] : [] };
14747    }
14748  };
14749  var tr = function() {
14750    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
14751    const e4 = [];
14752    for (const i4 of Array.from(t5))
14753      switch (i4.nodeType) {
14754        case Node.TEXT_NODE:
14755          e4.push(i4.data);
14756          break;
14757        case Node.ELEMENT_NODE:
14758          "br" === k(i4) ? e4.push("\n") : e4.push(...Array.from(tr(i4.childNodes) || []));
14759      }
14760    return e4;
14761  };
14762  var er = class extends ee {
14763    constructor(t5) {
14764      super(...arguments), this.file = t5;
14765    }
14766    perform(t5) {
14767      const e4 = new FileReader();
14768      return e4.onerror = () => t5(false), e4.onload = () => {
14769        e4.onerror = null;
14770        try {
14771          e4.abort();
14772        } catch (t6) {
14773        }
14774        return t5(true, this.file);
14775      }, e4.readAsArrayBuffer(this.file);
14776    }
14777  };
14778  var ir = class {
14779    constructor(t5) {
14780      this.element = t5;
14781    }
14782    shouldIgnore(t5) {
14783      return !!a.samsungAndroid && (this.previousEvent = this.event, this.event = t5, this.checkSamsungKeyboardBuggyModeStart(), this.checkSamsungKeyboardBuggyModeEnd(), this.buggyMode);
14784    }
14785    checkSamsungKeyboardBuggyModeStart() {
14786      this.insertingLongTextAfterUnidentifiedChar() && nr(this.element.innerText, this.event.data) && (this.buggyMode = true, this.event.preventDefault());
14787    }
14788    checkSamsungKeyboardBuggyModeEnd() {
14789      this.buggyMode && "insertText" !== this.event.inputType && (this.buggyMode = false);
14790    }
14791    insertingLongTextAfterUnidentifiedChar() {
14792      var t5;
14793      return this.isBeforeInputInsertText() && this.previousEventWasUnidentifiedKeydown() && (null === (t5 = this.event.data) || void 0 === t5 ? void 0 : t5.length) > 50;
14794    }
14795    isBeforeInputInsertText() {
14796      return "beforeinput" === this.event.type && "insertText" === this.event.inputType;
14797    }
14798    previousEventWasUnidentifiedKeydown() {
14799      var t5, e4;
14800      return "keydown" === (null === (t5 = this.previousEvent) || void 0 === t5 ? void 0 : t5.type) && "Unidentified" === (null === (e4 = this.previousEvent) || void 0 === e4 ? void 0 : e4.key);
14801    }
14802  };
14803  var nr = (t5, e4) => or(t5) === or(e4);
14804  var rr = new RegExp("(".concat("\uFFFC", "|").concat(d, "|").concat(g, "|\\s)+"), "g");
14805  var or = (t5) => t5.replace(rr, " ").trim();
14806  var sr = class extends q {
14807    constructor(t5) {
14808      super(...arguments), this.element = t5, this.mutationObserver = new Qn(this.element), this.mutationObserver.delegate = this, this.flakyKeyboardDetector = new ir(this.element);
14809      for (const t6 in this.constructor.events)
14810        b(t6, { onElement: this.element, withCallback: this.handlerFor(t6) });
14811    }
14812    elementDidMutate(t5) {
14813    }
14814    editorWillSyncDocumentView() {
14815      return this.mutationObserver.stop();
14816    }
14817    editorDidSyncDocumentView() {
14818      return this.mutationObserver.start();
14819    }
14820    requestRender() {
14821      var t5, e4;
14822      return null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.inputControllerDidRequestRender) || void 0 === e4 ? void 0 : e4.call(t5);
14823    }
14824    requestReparse() {
14825      var t5, e4;
14826      return null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.inputControllerDidRequestReparse) || void 0 === e4 || e4.call(t5), this.requestRender();
14827    }
14828    attachFiles(t5) {
14829      const e4 = Array.from(t5).map((t6) => new er(t6));
14830      return Promise.all(e4).then((t6) => {
14831        this.handleInput(function() {
14832          var e5, i4;
14833          return null === (e5 = this.delegate) || void 0 === e5 || e5.inputControllerWillAttachFiles(), null === (i4 = this.responder) || void 0 === i4 || i4.insertFiles(t6), this.requestRender();
14834        });
14835      });
14836    }
14837    handlerFor(t5) {
14838      return (e4) => {
14839        e4.defaultPrevented || this.handleInput(() => {
14840          if (!x(this.element)) {
14841            if (this.flakyKeyboardDetector.shouldIgnore(e4))
14842              return;
14843            this.eventName = t5, this.constructor.events[t5].call(this, e4);
14844          }
14845        });
14846      };
14847    }
14848    handleInput(t5) {
14849      try {
14850        var e4;
14851        null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillHandleInput(), t5.call(this);
14852      } finally {
14853        var i4;
14854        null === (i4 = this.delegate) || void 0 === i4 || i4.inputControllerDidHandleInput();
14855      }
14856    }
14857    createLinkHTML(t5, e4) {
14858      const i4 = document.createElement("a");
14859      return i4.href = t5, i4.textContent = e4 || t5, i4.outerHTML;
14860    }
14861  };
14862  var ar;
14863  wi(sr, "events", {});
14864  var { browser: lr, keyNames: cr } = z;
14865  var ur = 0;
14866  var hr = class extends sr {
14867    constructor() {
14868      super(...arguments), this.resetInputSummary();
14869    }
14870    setInputSummary() {
14871      let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};
14872      this.inputSummary.eventName = this.eventName;
14873      for (const e4 in t5) {
14874        const i4 = t5[e4];
14875        this.inputSummary[e4] = i4;
14876      }
14877      return this.inputSummary;
14878    }
14879    resetInputSummary() {
14880      this.inputSummary = {};
14881    }
14882    reset() {
14883      return this.resetInputSummary(), Ft.reset();
14884    }
14885    elementDidMutate(t5) {
14886      var e4, i4;
14887      return this.isComposing() ? null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.inputControllerDidAllowUnhandledInput) || void 0 === i4 ? void 0 : i4.call(e4) : this.handleInput(function() {
14888        return this.mutationIsSignificant(t5) && (this.mutationIsExpected(t5) ? this.requestRender() : this.requestReparse()), this.reset();
14889      });
14890    }
14891    mutationIsExpected(t5) {
14892      let { textAdded: e4, textDeleted: i4 } = t5;
14893      if (this.inputSummary.preferDocument)
14894        return true;
14895      const n3 = null != e4 ? e4 === this.inputSummary.textAdded : !this.inputSummary.textAdded, r4 = null != i4 ? this.inputSummary.didDelete : !this.inputSummary.didDelete, o3 = ["\n", " \n"].includes(e4) && !n3, s4 = "\n" === i4 && !r4;
14896      if (o3 && !s4 || s4 && !o3) {
14897        const t6 = this.getSelectedRange();
14898        if (t6) {
14899          var a4;
14900          const i5 = o3 ? e4.replace(/\n$/, "").length || -1 : (null == e4 ? void 0 : e4.length) || 1;
14901          if (null !== (a4 = this.responder) && void 0 !== a4 && a4.positionIsBlockBreak(t6[1] + i5))
14902            return true;
14903        }
14904      }
14905      return n3 && r4;
14906    }
14907    mutationIsSignificant(t5) {
14908      var e4;
14909      const i4 = Object.keys(t5).length > 0, n3 = "" === (null === (e4 = this.compositionInput) || void 0 === e4 ? void 0 : e4.getEndData());
14910      return i4 || !n3;
14911    }
14912    getCompositionInput() {
14913      if (this.isComposing())
14914        return this.compositionInput;
14915      this.compositionInput = new fr(this);
14916    }
14917    isComposing() {
14918      return this.compositionInput && !this.compositionInput.isEnded();
14919    }
14920    deleteInDirection(t5, e4) {
14921      var i4;
14922      return false !== (null === (i4 = this.responder) || void 0 === i4 ? void 0 : i4.deleteInDirection(t5)) ? this.setInputSummary({ didDelete: true }) : e4 ? (e4.preventDefault(), this.requestRender()) : void 0;
14923    }
14924    serializeSelectionToDataTransfer(t5) {
14925      var e4;
14926      if (!function(t6) {
14927        if (null == t6 || !t6.setData)
14928          return false;
14929        for (const e5 in Ct) {
14930          const i5 = Ct[e5];
14931          try {
14932            if (t6.setData(e5, i5), !t6.getData(e5) === i5)
14933              return false;
14934          } catch (t7) {
14935            return false;
14936          }
14937        }
14938        return true;
14939      }(t5))
14940        return;
14941      const i4 = null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.getSelectedDocument().toSerializableDocument();
14942      return t5.setData("application/x-trix-document", JSON.stringify(i4)), t5.setData("text/html", Ci.render(i4).innerHTML), t5.setData("text/plain", i4.toString().replace(/\n$/, "")), true;
14943    }
14944    canAcceptDataTransfer(t5) {
14945      const e4 = {};
14946      return Array.from((null == t5 ? void 0 : t5.types) || []).forEach((t6) => {
14947        e4[t6] = true;
14948      }), e4.Files || e4["application/x-trix-document"] || e4["text/html"] || e4["text/plain"];
14949    }
14950    getPastedHTMLUsingHiddenElement(t5) {
14951      const e4 = this.getSelectedRange(), i4 = { position: "absolute", left: "".concat(window.pageXOffset, "px"), top: "".concat(window.pageYOffset, "px"), opacity: 0 }, n3 = T({ style: i4, tagName: "div", editable: true });
14952      return document.body.appendChild(n3), n3.focus(), requestAnimationFrame(() => {
14953        const i5 = n3.innerHTML;
14954        return S(n3), this.setSelectedRange(e4), t5(i5);
14955      });
14956    }
14957  };
14958  wi(hr, "events", { keydown(t5) {
14959    this.isComposing() || this.resetInputSummary(), this.inputSummary.didInput = true;
14960    const e4 = cr[t5.keyCode];
14961    if (e4) {
14962      var i4;
14963      let n4 = this.keys;
14964      ["ctrl", "alt", "shift", "meta"].forEach((e5) => {
14965        var i5;
14966        t5["".concat(e5, "Key")] && ("ctrl" === e5 && (e5 = "control"), n4 = null === (i5 = n4) || void 0 === i5 ? void 0 : i5[e5]);
14967      }), null != (null === (i4 = n4) || void 0 === i4 ? void 0 : i4[e4]) && (this.setInputSummary({ keyName: e4 }), Ft.reset(), n4[e4].call(this, t5));
14968    }
14969    if (St(t5)) {
14970      const e5 = String.fromCharCode(t5.keyCode).toLowerCase();
14971      if (e5) {
14972        var n3;
14973        const i5 = ["alt", "shift"].map((e6) => {
14974          if (t5["".concat(e6, "Key")])
14975            return e6;
14976        }).filter((t6) => t6);
14977        i5.push(e5), null !== (n3 = this.delegate) && void 0 !== n3 && n3.inputControllerDidReceiveKeyboardCommand(i5) && t5.preventDefault();
14978      }
14979    }
14980  }, keypress(t5) {
14981    if (null != this.inputSummary.eventName)
14982      return;
14983    if (t5.metaKey)
14984      return;
14985    if (t5.ctrlKey && !t5.altKey)
14986      return;
14987    const e4 = mr(t5);
14988    var i4, n3;
14989    return e4 ? (null === (i4 = this.delegate) || void 0 === i4 || i4.inputControllerWillPerformTyping(), null === (n3 = this.responder) || void 0 === n3 || n3.insertString(e4), this.setInputSummary({ textAdded: e4, didDelete: this.selectionIsExpanded() })) : void 0;
14990  }, textInput(t5) {
14991    const { data: e4 } = t5, { textAdded: i4 } = this.inputSummary;
14992    if (i4 && i4 !== e4 && i4.toUpperCase() === e4) {
14993      var n3;
14994      const t6 = this.getSelectedRange();
14995      return this.setSelectedRange([t6[0], t6[1] + i4.length]), null === (n3 = this.responder) || void 0 === n3 || n3.insertString(e4), this.setInputSummary({ textAdded: e4 }), this.setSelectedRange(t6);
14996    }
14997  }, dragenter(t5) {
14998    t5.preventDefault();
14999  }, dragstart(t5) {
15000    var e4, i4;
15001    return this.serializeSelectionToDataTransfer(t5.dataTransfer), this.draggedRange = this.getSelectedRange(), null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.inputControllerDidStartDrag) || void 0 === i4 ? void 0 : i4.call(e4);
15002  }, dragover(t5) {
15003    if (this.draggedRange || this.canAcceptDataTransfer(t5.dataTransfer)) {
15004      t5.preventDefault();
15005      const n3 = { x: t5.clientX, y: t5.clientY };
15006      var e4, i4;
15007      if (!Tt(n3, this.draggingPoint))
15008        return this.draggingPoint = n3, null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.inputControllerDidReceiveDragOverPoint) || void 0 === i4 ? void 0 : i4.call(e4, this.draggingPoint);
15009    }
15010  }, dragend(t5) {
15011    var e4, i4;
15012    null === (e4 = this.delegate) || void 0 === e4 || null === (i4 = e4.inputControllerDidCancelDrag) || void 0 === i4 || i4.call(e4), this.draggedRange = null, this.draggingPoint = null;
15013  }, drop(t5) {
15014    var e4, i4;
15015    t5.preventDefault();
15016    const n3 = null === (e4 = t5.dataTransfer) || void 0 === e4 ? void 0 : e4.files, r4 = t5.dataTransfer.getData("application/x-trix-document"), o3 = { x: t5.clientX, y: t5.clientY };
15017    if (null === (i4 = this.responder) || void 0 === i4 || i4.setLocationRangeFromPointRange(o3), null != n3 && n3.length)
15018      this.attachFiles(n3);
15019    else if (this.draggedRange) {
15020      var s4, a4;
15021      null === (s4 = this.delegate) || void 0 === s4 || s4.inputControllerWillMoveText(), null === (a4 = this.responder) || void 0 === a4 || a4.moveTextFromRange(this.draggedRange), this.draggedRange = null, this.requestRender();
15022    } else if (r4) {
15023      var l4;
15024      const t6 = on.fromJSONString(r4);
15025      null === (l4 = this.responder) || void 0 === l4 || l4.insertDocument(t6), this.requestRender();
15026    }
15027    this.draggedRange = null, this.draggingPoint = null;
15028  }, cut(t5) {
15029    var e4, i4;
15030    if (null !== (e4 = this.responder) && void 0 !== e4 && e4.selectionIsExpanded() && (this.serializeSelectionToDataTransfer(t5.clipboardData) && t5.preventDefault(), null === (i4 = this.delegate) || void 0 === i4 || i4.inputControllerWillCutText(), this.deleteInDirection("backward"), t5.defaultPrevented))
15031      return this.requestRender();
15032  }, copy(t5) {
15033    var e4;
15034    null !== (e4 = this.responder) && void 0 !== e4 && e4.selectionIsExpanded() && this.serializeSelectionToDataTransfer(t5.clipboardData) && t5.preventDefault();
15035  }, paste(t5) {
15036    const e4 = t5.clipboardData || t5.testClipboardData, i4 = { clipboard: e4 };
15037    if (!e4 || pr(t5))
15038      return void this.getPastedHTMLUsingHiddenElement((t6) => {
15039        var e5, n4, r5;
15040        return i4.type = "text/html", i4.html = t6, null === (e5 = this.delegate) || void 0 === e5 || e5.inputControllerWillPaste(i4), null === (n4 = this.responder) || void 0 === n4 || n4.insertHTML(i4.html), this.requestRender(), null === (r5 = this.delegate) || void 0 === r5 ? void 0 : r5.inputControllerDidPaste(i4);
15041      });
15042    const n3 = e4.getData("URL"), r4 = e4.getData("text/html"), o3 = e4.getData("public.url-name");
15043    if (n3) {
15044      var s4, a4, l4;
15045      let t6;
15046      i4.type = "text/html", t6 = o3 ? Vt(o3).trim() : n3, i4.html = this.createLinkHTML(n3, t6), null === (s4 = this.delegate) || void 0 === s4 || s4.inputControllerWillPaste(i4), this.setInputSummary({ textAdded: t6, didDelete: this.selectionIsExpanded() }), null === (a4 = this.responder) || void 0 === a4 || a4.insertHTML(i4.html), this.requestRender(), null === (l4 = this.delegate) || void 0 === l4 || l4.inputControllerDidPaste(i4);
15047    } else if (Et(e4)) {
15048      var c4, u4, h4;
15049      i4.type = "text/plain", i4.string = e4.getData("text/plain"), null === (c4 = this.delegate) || void 0 === c4 || c4.inputControllerWillPaste(i4), this.setInputSummary({ textAdded: i4.string, didDelete: this.selectionIsExpanded() }), null === (u4 = this.responder) || void 0 === u4 || u4.insertString(i4.string), this.requestRender(), null === (h4 = this.delegate) || void 0 === h4 || h4.inputControllerDidPaste(i4);
15050    } else if (r4) {
15051      var d3, g5, m5;
15052      i4.type = "text/html", i4.html = r4, null === (d3 = this.delegate) || void 0 === d3 || d3.inputControllerWillPaste(i4), null === (g5 = this.responder) || void 0 === g5 || g5.insertHTML(i4.html), this.requestRender(), null === (m5 = this.delegate) || void 0 === m5 || m5.inputControllerDidPaste(i4);
15053    } else if (Array.from(e4.types).includes("Files")) {
15054      var p4, f4;
15055      const t6 = null === (p4 = e4.items) || void 0 === p4 || null === (p4 = p4[0]) || void 0 === p4 || null === (f4 = p4.getAsFile) || void 0 === f4 ? void 0 : f4.call(p4);
15056      if (t6) {
15057        var b4, v4, A4;
15058        const e5 = dr(t6);
15059        !t6.name && e5 && (t6.name = "pasted-file-".concat(++ur, ".").concat(e5)), i4.type = "File", i4.file = t6, null === (b4 = this.delegate) || void 0 === b4 || b4.inputControllerWillAttachFiles(), null === (v4 = this.responder) || void 0 === v4 || v4.insertFile(i4.file), this.requestRender(), null === (A4 = this.delegate) || void 0 === A4 || A4.inputControllerDidPaste(i4);
15060      }
15061    }
15062    t5.preventDefault();
15063  }, compositionstart(t5) {
15064    return this.getCompositionInput().start(t5.data);
15065  }, compositionupdate(t5) {
15066    return this.getCompositionInput().update(t5.data);
15067  }, compositionend(t5) {
15068    return this.getCompositionInput().end(t5.data);
15069  }, beforeinput(t5) {
15070    this.inputSummary.didInput = true;
15071  }, input(t5) {
15072    return this.inputSummary.didInput = true, t5.stopPropagation();
15073  } }), wi(hr, "keys", { backspace(t5) {
15074    var e4;
15075    return null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), this.deleteInDirection("backward", t5);
15076  }, delete(t5) {
15077    var e4;
15078    return null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), this.deleteInDirection("forward", t5);
15079  }, return(t5) {
15080    var e4, i4;
15081    return this.setInputSummary({ preferDocument: true }), null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), null === (i4 = this.responder) || void 0 === i4 ? void 0 : i4.insertLineBreak();
15082  }, tab(t5) {
15083    var e4, i4;
15084    null !== (e4 = this.responder) && void 0 !== e4 && e4.canIncreaseNestingLevel() && (null === (i4 = this.responder) || void 0 === i4 || i4.increaseNestingLevel(), this.requestRender(), t5.preventDefault());
15085  }, left(t5) {
15086    var e4;
15087    if (this.selectionIsInCursorTarget())
15088      return t5.preventDefault(), null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.moveCursorInDirection("backward");
15089  }, right(t5) {
15090    var e4;
15091    if (this.selectionIsInCursorTarget())
15092      return t5.preventDefault(), null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.moveCursorInDirection("forward");
15093  }, control: { d(t5) {
15094    var e4;
15095    return null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), this.deleteInDirection("forward", t5);
15096  }, h(t5) {
15097    var e4;
15098    return null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), this.deleteInDirection("backward", t5);
15099  }, o(t5) {
15100    var e4, i4;
15101    return t5.preventDefault(), null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), null === (i4 = this.responder) || void 0 === i4 || i4.insertString("\n", { updatePosition: false }), this.requestRender();
15102  } }, shift: { return(t5) {
15103    var e4, i4;
15104    null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), null === (i4 = this.responder) || void 0 === i4 || i4.insertString("\n"), this.requestRender(), t5.preventDefault();
15105  }, tab(t5) {
15106    var e4, i4;
15107    null !== (e4 = this.responder) && void 0 !== e4 && e4.canDecreaseNestingLevel() && (null === (i4 = this.responder) || void 0 === i4 || i4.decreaseNestingLevel(), this.requestRender(), t5.preventDefault());
15108  }, left(t5) {
15109    if (this.selectionIsInCursorTarget())
15110      return t5.preventDefault(), this.expandSelectionInDirection("backward");
15111  }, right(t5) {
15112    if (this.selectionIsInCursorTarget())
15113      return t5.preventDefault(), this.expandSelectionInDirection("forward");
15114  } }, alt: { backspace(t5) {
15115    var e4;
15116    return this.setInputSummary({ preferDocument: false }), null === (e4 = this.delegate) || void 0 === e4 ? void 0 : e4.inputControllerWillPerformTyping();
15117  } }, meta: { backspace(t5) {
15118    var e4;
15119    return this.setInputSummary({ preferDocument: false }), null === (e4 = this.delegate) || void 0 === e4 ? void 0 : e4.inputControllerWillPerformTyping();
15120  } } }), hr.proxyMethod("responder?.getSelectedRange"), hr.proxyMethod("responder?.setSelectedRange"), hr.proxyMethod("responder?.expandSelectionInDirection"), hr.proxyMethod("responder?.selectionIsInCursorTarget"), hr.proxyMethod("responder?.selectionIsExpanded");
15121  var dr = (t5) => {
15122    var e4;
15123    return null === (e4 = t5.type) || void 0 === e4 || null === (e4 = e4.match(/\/(\w+)$/)) || void 0 === e4 ? void 0 : e4[1];
15124  };
15125  var gr = !(null === (ar = " ".codePointAt) || void 0 === ar || !ar.call(" ", 0));
15126  var mr = function(t5) {
15127    if (t5.key && gr && t5.key.codePointAt(0) === t5.keyCode)
15128      return t5.key;
15129    {
15130      let e4;
15131      if (null === t5.which ? e4 = t5.keyCode : 0 !== t5.which && 0 !== t5.charCode && (e4 = t5.charCode), null != e4 && "escape" !== cr[e4])
15132        return X.fromCodepoints([e4]).toString();
15133    }
15134  };
15135  var pr = function(t5) {
15136    const e4 = t5.clipboardData;
15137    if (e4) {
15138      if (e4.types.includes("text/html")) {
15139        for (const t6 of e4.types) {
15140          const i4 = /^CorePasteboardFlavorType/.test(t6), n3 = /^dyn\./.test(t6) && e4.getData(t6);
15141          if (i4 || n3)
15142            return true;
15143        }
15144        return false;
15145      }
15146      {
15147        const t6 = e4.types.includes("com.apple.webarchive"), i4 = e4.types.includes("com.apple.flat-rtfd");
15148        return t6 || i4;
15149      }
15150    }
15151  };
15152  var fr = class extends q {
15153    constructor(t5) {
15154      super(...arguments), this.inputController = t5, this.responder = this.inputController.responder, this.delegate = this.inputController.delegate, this.inputSummary = this.inputController.inputSummary, this.data = {};
15155    }
15156    start(t5) {
15157      if (this.data.start = t5, this.isSignificant()) {
15158        var e4, i4;
15159        if ("keypress" === this.inputSummary.eventName && this.inputSummary.textAdded)
15160          null === (i4 = this.responder) || void 0 === i4 || i4.deleteInDirection("left");
15161        this.selectionIsExpanded() || (this.insertPlaceholder(), this.requestRender()), this.range = null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.getSelectedRange();
15162      }
15163    }
15164    update(t5) {
15165      if (this.data.update = t5, this.isSignificant()) {
15166        const t6 = this.selectPlaceholder();
15167        t6 && (this.forgetPlaceholder(), this.range = t6);
15168      }
15169    }
15170    end(t5) {
15171      return this.data.end = t5, this.isSignificant() ? (this.forgetPlaceholder(), this.canApplyToDocument() ? (this.setInputSummary({ preferDocument: true, didInput: false }), null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), null === (i4 = this.responder) || void 0 === i4 || i4.setSelectedRange(this.range), null === (n3 = this.responder) || void 0 === n3 || n3.insertString(this.data.end), null === (r4 = this.responder) || void 0 === r4 ? void 0 : r4.setSelectedRange(this.range[0] + this.data.end.length)) : null != this.data.start || null != this.data.update ? (this.requestReparse(), this.inputController.reset()) : void 0) : this.inputController.reset();
15172      var e4, i4, n3, r4;
15173    }
15174    getEndData() {
15175      return this.data.end;
15176    }
15177    isEnded() {
15178      return null != this.getEndData();
15179    }
15180    isSignificant() {
15181      return !lr.composesExistingText || this.inputSummary.didInput;
15182    }
15183    canApplyToDocument() {
15184      var t5, e4;
15185      return 0 === (null === (t5 = this.data.start) || void 0 === t5 ? void 0 : t5.length) && (null === (e4 = this.data.end) || void 0 === e4 ? void 0 : e4.length) > 0 && this.range;
15186    }
15187  };
15188  fr.proxyMethod("inputController.setInputSummary"), fr.proxyMethod("inputController.requestRender"), fr.proxyMethod("inputController.requestReparse"), fr.proxyMethod("responder?.selectionIsExpanded"), fr.proxyMethod("responder?.insertPlaceholder"), fr.proxyMethod("responder?.selectPlaceholder"), fr.proxyMethod("responder?.forgetPlaceholder");
15189  var br = class extends sr {
15190    constructor() {
15191      super(...arguments), this.render = this.render.bind(this);
15192    }
15193    elementDidMutate() {
15194      return this.scheduledRender ? this.composing ? null === (t5 = this.delegate) || void 0 === t5 || null === (e4 = t5.inputControllerDidAllowUnhandledInput) || void 0 === e4 ? void 0 : e4.call(t5) : void 0 : this.reparse();
15195      var t5, e4;
15196    }
15197    scheduleRender() {
15198      return this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render);
15199    }
15200    render() {
15201      var t5, e4;
15202      (cancelAnimationFrame(this.scheduledRender), this.scheduledRender = null, this.composing) || (null === (e4 = this.delegate) || void 0 === e4 || e4.render());
15203      null === (t5 = this.afterRender) || void 0 === t5 || t5.call(this), this.afterRender = null;
15204    }
15205    reparse() {
15206      var t5;
15207      return null === (t5 = this.delegate) || void 0 === t5 ? void 0 : t5.reparse();
15208    }
15209    insertString() {
15210      var t5;
15211      let e4 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "", i4 = arguments.length > 1 ? arguments[1] : void 0;
15212      return null === (t5 = this.delegate) || void 0 === t5 || t5.inputControllerWillPerformTyping(), this.withTargetDOMRange(function() {
15213        var t6;
15214        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertString(e4, i4);
15215      });
15216    }
15217    toggleAttributeIfSupported(t5) {
15218      var e4;
15219      if (gt().includes(t5))
15220        return null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformFormatting(t5), this.withTargetDOMRange(function() {
15221          var e5;
15222          return null === (e5 = this.responder) || void 0 === e5 ? void 0 : e5.toggleCurrentAttribute(t5);
15223        });
15224    }
15225    activateAttributeIfSupported(t5, e4) {
15226      var i4;
15227      if (gt().includes(t5))
15228        return null === (i4 = this.delegate) || void 0 === i4 || i4.inputControllerWillPerformFormatting(t5), this.withTargetDOMRange(function() {
15229          var i5;
15230          return null === (i5 = this.responder) || void 0 === i5 ? void 0 : i5.setCurrentAttribute(t5, e4);
15231        });
15232    }
15233    deleteInDirection(t5) {
15234      let { recordUndoEntry: e4 } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { recordUndoEntry: true };
15235      var i4;
15236      e4 && (null === (i4 = this.delegate) || void 0 === i4 || i4.inputControllerWillPerformTyping());
15237      const n3 = () => {
15238        var e5;
15239        return null === (e5 = this.responder) || void 0 === e5 ? void 0 : e5.deleteInDirection(t5);
15240      }, r4 = this.getTargetDOMRange({ minLength: this.composing ? 1 : 2 });
15241      return r4 ? this.withTargetDOMRange(r4, n3) : n3();
15242    }
15243    withTargetDOMRange(t5, e4) {
15244      var i4;
15245      return "function" == typeof t5 && (e4 = t5, t5 = this.getTargetDOMRange()), t5 ? null === (i4 = this.responder) || void 0 === i4 ? void 0 : i4.withTargetDOMRange(t5, e4.bind(this)) : (Ft.reset(), e4.call(this));
15246    }
15247    getTargetDOMRange() {
15248      var t5, e4;
15249      let { minLength: i4 } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : { minLength: 0 };
15250      const n3 = null === (t5 = (e4 = this.event).getTargetRanges) || void 0 === t5 ? void 0 : t5.call(e4);
15251      if (n3 && n3.length) {
15252        const t6 = vr(n3[0]);
15253        if (0 === i4 || t6.toString().length >= i4)
15254          return t6;
15255      }
15256    }
15257    withEvent(t5, e4) {
15258      let i4;
15259      this.event = t5;
15260      try {
15261        i4 = e4.call(this);
15262      } finally {
15263        this.event = null;
15264      }
15265      return i4;
15266    }
15267  };
15268  wi(br, "events", { keydown(t5) {
15269    if (St(t5)) {
15270      var e4;
15271      const i4 = Er(t5);
15272      null !== (e4 = this.delegate) && void 0 !== e4 && e4.inputControllerDidReceiveKeyboardCommand(i4) && t5.preventDefault();
15273    } else {
15274      let e5 = t5.key;
15275      t5.altKey && (e5 += "+Alt"), t5.shiftKey && (e5 += "+Shift");
15276      const i4 = this.constructor.keys[e5];
15277      if (i4)
15278        return this.withEvent(t5, i4);
15279    }
15280  }, paste(t5) {
15281    var e4;
15282    let i4;
15283    const n3 = null === (e4 = t5.clipboardData) || void 0 === e4 ? void 0 : e4.getData("URL");
15284    return xr(t5) ? (t5.preventDefault(), this.attachFiles(t5.clipboardData.files)) : Cr(t5) ? (t5.preventDefault(), i4 = { type: "text/plain", string: t5.clipboardData.getData("text/plain") }, null === (r4 = this.delegate) || void 0 === r4 || r4.inputControllerWillPaste(i4), null === (o3 = this.responder) || void 0 === o3 || o3.insertString(i4.string), this.render(), null === (s4 = this.delegate) || void 0 === s4 ? void 0 : s4.inputControllerDidPaste(i4)) : n3 ? (t5.preventDefault(), i4 = { type: "text/html", html: this.createLinkHTML(n3) }, null === (a4 = this.delegate) || void 0 === a4 || a4.inputControllerWillPaste(i4), null === (l4 = this.responder) || void 0 === l4 || l4.insertHTML(i4.html), this.render(), null === (c4 = this.delegate) || void 0 === c4 ? void 0 : c4.inputControllerDidPaste(i4)) : void 0;
15285    var r4, o3, s4, a4, l4, c4;
15286  }, beforeinput(t5) {
15287    const e4 = this.constructor.inputTypes[t5.inputType], i4 = (n3 = t5, !(!/iPhone|iPad/.test(navigator.userAgent) || n3.inputType && "insertParagraph" !== n3.inputType));
15288    var n3;
15289    e4 && (this.withEvent(t5, e4), i4 || this.scheduleRender()), i4 && this.render();
15290  }, input(t5) {
15291    Ft.reset();
15292  }, dragstart(t5) {
15293    var e4, i4;
15294    null !== (e4 = this.responder) && void 0 !== e4 && e4.selectionContainsAttachments() && (t5.dataTransfer.setData("application/x-trix-dragging", true), this.dragging = { range: null === (i4 = this.responder) || void 0 === i4 ? void 0 : i4.getSelectedRange(), point: Sr(t5) });
15295  }, dragenter(t5) {
15296    Ar(t5) && t5.preventDefault();
15297  }, dragover(t5) {
15298    if (this.dragging) {
15299      t5.preventDefault();
15300      const i4 = Sr(t5);
15301      var e4;
15302      if (!Tt(i4, this.dragging.point))
15303        return this.dragging.point = i4, null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.setLocationRangeFromPointRange(i4);
15304    } else
15305      Ar(t5) && t5.preventDefault();
15306  }, drop(t5) {
15307    var e4, i4;
15308    if (this.dragging)
15309      return t5.preventDefault(), null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillMoveText(), null === (i4 = this.responder) || void 0 === i4 || i4.moveTextFromRange(this.dragging.range), this.dragging = null, this.scheduleRender();
15310    if (Ar(t5)) {
15311      var n3;
15312      t5.preventDefault();
15313      const e5 = Sr(t5);
15314      return null === (n3 = this.responder) || void 0 === n3 || n3.setLocationRangeFromPointRange(e5), this.attachFiles(t5.dataTransfer.files);
15315    }
15316  }, dragend() {
15317    var t5;
15318    this.dragging && (null === (t5 = this.responder) || void 0 === t5 || t5.setSelectedRange(this.dragging.range), this.dragging = null);
15319  }, compositionend(t5) {
15320    this.composing && (this.composing = false, a.recentAndroid || this.scheduleRender());
15321  } }), wi(br, "keys", { ArrowLeft() {
15322    var t5, e4;
15323    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.shouldManageMovingCursorInDirection("backward"))
15324      return this.event.preventDefault(), null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.moveCursorInDirection("backward");
15325  }, ArrowRight() {
15326    var t5, e4;
15327    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.shouldManageMovingCursorInDirection("forward"))
15328      return this.event.preventDefault(), null === (e4 = this.responder) || void 0 === e4 ? void 0 : e4.moveCursorInDirection("forward");
15329  }, Backspace() {
15330    var t5, e4, i4;
15331    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.shouldManageDeletingInDirection("backward"))
15332      return this.event.preventDefault(), null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillPerformTyping(), null === (i4 = this.responder) || void 0 === i4 || i4.deleteInDirection("backward"), this.render();
15333  }, Tab() {
15334    var t5, e4;
15335    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.canIncreaseNestingLevel())
15336      return this.event.preventDefault(), null === (e4 = this.responder) || void 0 === e4 || e4.increaseNestingLevel(), this.render();
15337  }, "Tab+Shift"() {
15338    var t5, e4;
15339    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.canDecreaseNestingLevel())
15340      return this.event.preventDefault(), null === (e4 = this.responder) || void 0 === e4 || e4.decreaseNestingLevel(), this.render();
15341  } }), wi(br, "inputTypes", { deleteByComposition() {
15342    return this.deleteInDirection("backward", { recordUndoEntry: false });
15343  }, deleteByCut() {
15344    return this.deleteInDirection("backward");
15345  }, deleteByDrag() {
15346    return this.event.preventDefault(), this.withTargetDOMRange(function() {
15347      var t5;
15348      this.deleteByDragRange = null === (t5 = this.responder) || void 0 === t5 ? void 0 : t5.getSelectedRange();
15349    });
15350  }, deleteCompositionText() {
15351    return this.deleteInDirection("backward", { recordUndoEntry: false });
15352  }, deleteContent() {
15353    return this.deleteInDirection("backward");
15354  }, deleteContentBackward() {
15355    return this.deleteInDirection("backward");
15356  }, deleteContentForward() {
15357    return this.deleteInDirection("forward");
15358  }, deleteEntireSoftLine() {
15359    return this.deleteInDirection("forward");
15360  }, deleteHardLineBackward() {
15361    return this.deleteInDirection("backward");
15362  }, deleteHardLineForward() {
15363    return this.deleteInDirection("forward");
15364  }, deleteSoftLineBackward() {
15365    return this.deleteInDirection("backward");
15366  }, deleteSoftLineForward() {
15367    return this.deleteInDirection("forward");
15368  }, deleteWordBackward() {
15369    return this.deleteInDirection("backward");
15370  }, deleteWordForward() {
15371    return this.deleteInDirection("forward");
15372  }, formatBackColor() {
15373    return this.activateAttributeIfSupported("backgroundColor", this.event.data);
15374  }, formatBold() {
15375    return this.toggleAttributeIfSupported("bold");
15376  }, formatFontColor() {
15377    return this.activateAttributeIfSupported("color", this.event.data);
15378  }, formatFontName() {
15379    return this.activateAttributeIfSupported("font", this.event.data);
15380  }, formatIndent() {
15381    var t5;
15382    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.canIncreaseNestingLevel())
15383      return this.withTargetDOMRange(function() {
15384        var t6;
15385        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.increaseNestingLevel();
15386      });
15387  }, formatItalic() {
15388    return this.toggleAttributeIfSupported("italic");
15389  }, formatJustifyCenter() {
15390    return this.toggleAttributeIfSupported("justifyCenter");
15391  }, formatJustifyFull() {
15392    return this.toggleAttributeIfSupported("justifyFull");
15393  }, formatJustifyLeft() {
15394    return this.toggleAttributeIfSupported("justifyLeft");
15395  }, formatJustifyRight() {
15396    return this.toggleAttributeIfSupported("justifyRight");
15397  }, formatOutdent() {
15398    var t5;
15399    if (null !== (t5 = this.responder) && void 0 !== t5 && t5.canDecreaseNestingLevel())
15400      return this.withTargetDOMRange(function() {
15401        var t6;
15402        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.decreaseNestingLevel();
15403      });
15404  }, formatRemove() {
15405    this.withTargetDOMRange(function() {
15406      for (const i4 in null === (t5 = this.responder) || void 0 === t5 ? void 0 : t5.getCurrentAttributes()) {
15407        var t5, e4;
15408        null === (e4 = this.responder) || void 0 === e4 || e4.removeCurrentAttribute(i4);
15409      }
15410    });
15411  }, formatSetBlockTextDirection() {
15412    return this.activateAttributeIfSupported("blockDir", this.event.data);
15413  }, formatSetInlineTextDirection() {
15414    return this.activateAttributeIfSupported("textDir", this.event.data);
15415  }, formatStrikeThrough() {
15416    return this.toggleAttributeIfSupported("strike");
15417  }, formatSubscript() {
15418    return this.toggleAttributeIfSupported("sub");
15419  }, formatSuperscript() {
15420    return this.toggleAttributeIfSupported("sup");
15421  }, formatUnderline() {
15422    return this.toggleAttributeIfSupported("underline");
15423  }, historyRedo() {
15424    var t5;
15425    return null === (t5 = this.delegate) || void 0 === t5 ? void 0 : t5.inputControllerWillPerformRedo();
15426  }, historyUndo() {
15427    var t5;
15428    return null === (t5 = this.delegate) || void 0 === t5 ? void 0 : t5.inputControllerWillPerformUndo();
15429  }, insertCompositionText() {
15430    return this.composing = true, this.insertString(this.event.data);
15431  }, insertFromComposition() {
15432    return this.composing = false, this.insertString(this.event.data);
15433  }, insertFromDrop() {
15434    const t5 = this.deleteByDragRange;
15435    var e4;
15436    if (t5)
15437      return this.deleteByDragRange = null, null === (e4 = this.delegate) || void 0 === e4 || e4.inputControllerWillMoveText(), this.withTargetDOMRange(function() {
15438        var e5;
15439        return null === (e5 = this.responder) || void 0 === e5 ? void 0 : e5.moveTextFromRange(t5);
15440      });
15441  }, insertFromPaste() {
15442    const { dataTransfer: t5 } = this.event, e4 = { dataTransfer: t5 }, i4 = t5.getData("URL"), n3 = t5.getData("text/html");
15443    if (i4) {
15444      var r4;
15445      let n4;
15446      this.event.preventDefault(), e4.type = "text/html";
15447      const o4 = t5.getData("public.url-name");
15448      n4 = o4 ? Vt(o4).trim() : i4, e4.html = this.createLinkHTML(i4, n4), null === (r4 = this.delegate) || void 0 === r4 || r4.inputControllerWillPaste(e4), this.withTargetDOMRange(function() {
15449        var t6;
15450        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertHTML(e4.html);
15451      }), this.afterRender = () => {
15452        var t6;
15453        return null === (t6 = this.delegate) || void 0 === t6 ? void 0 : t6.inputControllerDidPaste(e4);
15454      };
15455    } else if (Et(t5)) {
15456      var o3;
15457      e4.type = "text/plain", e4.string = t5.getData("text/plain"), null === (o3 = this.delegate) || void 0 === o3 || o3.inputControllerWillPaste(e4), this.withTargetDOMRange(function() {
15458        var t6;
15459        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertString(e4.string);
15460      }), this.afterRender = () => {
15461        var t6;
15462        return null === (t6 = this.delegate) || void 0 === t6 ? void 0 : t6.inputControllerDidPaste(e4);
15463      };
15464    } else if (yr(this.event)) {
15465      var s4;
15466      e4.type = "File", e4.file = t5.files[0], null === (s4 = this.delegate) || void 0 === s4 || s4.inputControllerWillPaste(e4), this.withTargetDOMRange(function() {
15467        var t6;
15468        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertFile(e4.file);
15469      }), this.afterRender = () => {
15470        var t6;
15471        return null === (t6 = this.delegate) || void 0 === t6 ? void 0 : t6.inputControllerDidPaste(e4);
15472      };
15473    } else if (n3) {
15474      var a4;
15475      this.event.preventDefault(), e4.type = "text/html", e4.html = n3, null === (a4 = this.delegate) || void 0 === a4 || a4.inputControllerWillPaste(e4), this.withTargetDOMRange(function() {
15476        var t6;
15477        return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertHTML(e4.html);
15478      }), this.afterRender = () => {
15479        var t6;
15480        return null === (t6 = this.delegate) || void 0 === t6 ? void 0 : t6.inputControllerDidPaste(e4);
15481      };
15482    }
15483  }, insertFromYank() {
15484    return this.insertString(this.event.data);
15485  }, insertLineBreak() {
15486    return this.insertString("\n");
15487  }, insertLink() {
15488    return this.activateAttributeIfSupported("href", this.event.data);
15489  }, insertOrderedList() {
15490    return this.toggleAttributeIfSupported("number");
15491  }, insertParagraph() {
15492    var t5;
15493    return null === (t5 = this.delegate) || void 0 === t5 || t5.inputControllerWillPerformTyping(), this.withTargetDOMRange(function() {
15494      var t6;
15495      return null === (t6 = this.responder) || void 0 === t6 ? void 0 : t6.insertLineBreak();
15496    });
15497  }, insertReplacementText() {
15498    const t5 = this.event.dataTransfer.getData("text/plain"), e4 = this.event.getTargetRanges()[0];
15499    this.withTargetDOMRange(e4, () => {
15500      this.insertString(t5, { updatePosition: false });
15501    });
15502  }, insertText() {
15503    var t5;
15504    return this.insertString(this.event.data || (null === (t5 = this.event.dataTransfer) || void 0 === t5 ? void 0 : t5.getData("text/plain")));
15505  }, insertTranspose() {
15506    return this.insertString(this.event.data);
15507  }, insertUnorderedList() {
15508    return this.toggleAttributeIfSupported("bullet");
15509  } });
15510  var vr = function(t5) {
15511    const e4 = document.createRange();
15512    return e4.setStart(t5.startContainer, t5.startOffset), e4.setEnd(t5.endContainer, t5.endOffset), e4;
15513  };
15514  var Ar = (t5) => {
15515    var e4;
15516    return Array.from((null === (e4 = t5.dataTransfer) || void 0 === e4 ? void 0 : e4.types) || []).includes("Files");
15517  };
15518  var yr = (t5) => {
15519    var e4;
15520    return (null === (e4 = t5.dataTransfer.files) || void 0 === e4 ? void 0 : e4[0]) && !xr(t5) && !((t6) => {
15521      let { dataTransfer: e5 } = t6;
15522      return e5.types.includes("Files") && e5.types.includes("text/html") && e5.getData("text/html").includes("urn:schemas-microsoft-com:office:office");
15523    })(t5);
15524  };
15525  var xr = function(t5) {
15526    const e4 = t5.clipboardData;
15527    if (e4) {
15528      return Array.from(e4.types).filter((t6) => t6.match(/file/i)).length === e4.types.length && e4.files.length >= 1;
15529    }
15530  };
15531  var Cr = function(t5) {
15532    const e4 = t5.clipboardData;
15533    if (e4)
15534      return e4.types.includes("text/plain") && 1 === e4.types.length;
15535  };
15536  var Er = function(t5) {
15537    const e4 = [];
15538    return t5.altKey && e4.push("alt"), t5.shiftKey && e4.push("shift"), e4.push(t5.key), e4;
15539  };
15540  var Sr = (t5) => ({ x: t5.clientX, y: t5.clientY });
15541  var Rr = "[data-trix-attribute]";
15542  var kr = "[data-trix-action]";
15543  var Tr = "".concat(Rr, ", ").concat(kr);
15544  var wr = "[data-trix-dialog]";
15545  var Lr = "".concat(wr, "[data-trix-active]");
15546  var Dr = "".concat(wr, " [data-trix-method]");
15547  var Nr = "".concat(wr, " [data-trix-input]");
15548  var Ir = (t5, e4) => (e4 || (e4 = Fr(t5)), t5.querySelector("[data-trix-input][name='".concat(e4, "']")));
15549  var Or = (t5) => t5.getAttribute("data-trix-action");
15550  var Fr = (t5) => t5.getAttribute("data-trix-attribute") || t5.getAttribute("data-trix-dialog-attribute");
15551  var Pr = class extends q {
15552    constructor(t5) {
15553      super(t5), this.didClickActionButton = this.didClickActionButton.bind(this), this.didClickAttributeButton = this.didClickAttributeButton.bind(this), this.didClickDialogButton = this.didClickDialogButton.bind(this), this.didKeyDownDialogInput = this.didKeyDownDialogInput.bind(this), this.element = t5, this.attributes = {}, this.actions = {}, this.resetDialogInputs(), b("mousedown", { onElement: this.element, matchingSelector: kr, withCallback: this.didClickActionButton }), b("mousedown", { onElement: this.element, matchingSelector: Rr, withCallback: this.didClickAttributeButton }), b("click", { onElement: this.element, matchingSelector: Tr, preventDefault: true }), b("click", { onElement: this.element, matchingSelector: Dr, withCallback: this.didClickDialogButton }), b("keydown", { onElement: this.element, matchingSelector: Nr, withCallback: this.didKeyDownDialogInput });
15554    }
15555    didClickActionButton(t5, e4) {
15556      var i4;
15557      null === (i4 = this.delegate) || void 0 === i4 || i4.toolbarDidClickButton(), t5.preventDefault();
15558      const n3 = Or(e4);
15559      return this.getDialog(n3) ? this.toggleDialog(n3) : null === (r4 = this.delegate) || void 0 === r4 ? void 0 : r4.toolbarDidInvokeAction(n3, e4);
15560      var r4;
15561    }
15562    didClickAttributeButton(t5, e4) {
15563      var i4;
15564      null === (i4 = this.delegate) || void 0 === i4 || i4.toolbarDidClickButton(), t5.preventDefault();
15565      const n3 = Fr(e4);
15566      var r4;
15567      this.getDialog(n3) ? this.toggleDialog(n3) : null === (r4 = this.delegate) || void 0 === r4 || r4.toolbarDidToggleAttribute(n3);
15568      return this.refreshAttributeButtons();
15569    }
15570    didClickDialogButton(t5, e4) {
15571      const i4 = y(e4, { matchingSelector: wr });
15572      return this[e4.getAttribute("data-trix-method")].call(this, i4);
15573    }
15574    didKeyDownDialogInput(t5, e4) {
15575      if (13 === t5.keyCode) {
15576        t5.preventDefault();
15577        const i4 = e4.getAttribute("name"), n3 = this.getDialog(i4);
15578        this.setAttribute(n3);
15579      }
15580      if (27 === t5.keyCode)
15581        return t5.preventDefault(), this.hideDialog();
15582    }
15583    updateActions(t5) {
15584      return this.actions = t5, this.refreshActionButtons();
15585    }
15586    refreshActionButtons() {
15587      return this.eachActionButton((t5, e4) => {
15588        t5.disabled = false === this.actions[e4];
15589      });
15590    }
15591    eachActionButton(t5) {
15592      return Array.from(this.element.querySelectorAll(kr)).map((e4) => t5(e4, Or(e4)));
15593    }
15594    updateAttributes(t5) {
15595      return this.attributes = t5, this.refreshAttributeButtons();
15596    }
15597    refreshAttributeButtons() {
15598      return this.eachAttributeButton((t5, e4) => (t5.disabled = false === this.attributes[e4], this.attributes[e4] || this.dialogIsVisible(e4) ? (t5.setAttribute("data-trix-active", ""), t5.classList.add("trix-active")) : (t5.removeAttribute("data-trix-active"), t5.classList.remove("trix-active"))));
15599    }
15600    eachAttributeButton(t5) {
15601      return Array.from(this.element.querySelectorAll(Rr)).map((e4) => t5(e4, Fr(e4)));
15602    }
15603    applyKeyboardCommand(t5) {
15604      const e4 = JSON.stringify(t5.sort());
15605      for (const t6 of Array.from(this.element.querySelectorAll("[data-trix-key]"))) {
15606        const i4 = t6.getAttribute("data-trix-key").split("+");
15607        if (JSON.stringify(i4.sort()) === e4)
15608          return v("mousedown", { onElement: t6 }), true;
15609      }
15610      return false;
15611    }
15612    dialogIsVisible(t5) {
15613      const e4 = this.getDialog(t5);
15614      if (e4)
15615        return e4.hasAttribute("data-trix-active");
15616    }
15617    toggleDialog(t5) {
15618      return this.dialogIsVisible(t5) ? this.hideDialog() : this.showDialog(t5);
15619    }
15620    showDialog(t5) {
15621      var e4, i4;
15622      this.hideDialog(), null === (e4 = this.delegate) || void 0 === e4 || e4.toolbarWillShowDialog();
15623      const n3 = this.getDialog(t5);
15624      n3.setAttribute("data-trix-active", ""), n3.classList.add("trix-active"), Array.from(n3.querySelectorAll("input[disabled]")).forEach((t6) => {
15625        t6.removeAttribute("disabled");
15626      });
15627      const r4 = Fr(n3);
15628      if (r4) {
15629        const e5 = Ir(n3, t5);
15630        e5 && (e5.value = this.attributes[r4] || "", e5.select());
15631      }
15632      return null === (i4 = this.delegate) || void 0 === i4 ? void 0 : i4.toolbarDidShowDialog(t5);
15633    }
15634    setAttribute(t5) {
15635      const e4 = Fr(t5), i4 = Ir(t5, e4);
15636      return i4.willValidate && !i4.checkValidity() ? (i4.setAttribute("data-trix-validate", ""), i4.classList.add("trix-validate"), i4.focus()) : (null === (n3 = this.delegate) || void 0 === n3 || n3.toolbarDidUpdateAttribute(e4, i4.value), this.hideDialog());
15637      var n3;
15638    }
15639    removeAttribute(t5) {
15640      var e4;
15641      const i4 = Fr(t5);
15642      return null === (e4 = this.delegate) || void 0 === e4 || e4.toolbarDidRemoveAttribute(i4), this.hideDialog();
15643    }
15644    hideDialog() {
15645      const t5 = this.element.querySelector(Lr);
15646      var e4;
15647      if (t5)
15648        return t5.removeAttribute("data-trix-active"), t5.classList.remove("trix-active"), this.resetDialogInputs(), null === (e4 = this.delegate) || void 0 === e4 ? void 0 : e4.toolbarDidHideDialog(((t6) => t6.getAttribute("data-trix-dialog"))(t5));
15649    }
15650    resetDialogInputs() {
15651      Array.from(this.element.querySelectorAll(Nr)).forEach((t5) => {
15652        t5.setAttribute("disabled", "disabled"), t5.removeAttribute("data-trix-validate"), t5.classList.remove("trix-validate");
15653      });
15654    }
15655    getDialog(t5) {
15656      return this.element.querySelector("[data-trix-dialog=".concat(t5, "]"));
15657    }
15658  };
15659  var Mr = class extends Yn {
15660    constructor(t5) {
15661      let { editorElement: e4, document: i4, html: n3 } = t5;
15662      super(...arguments), this.editorElement = e4, this.selectionManager = new Wn(this.editorElement), this.selectionManager.delegate = this, this.composition = new kn(), this.composition.delegate = this, this.attachmentManager = new Sn(this.composition.getAttachments()), this.attachmentManager.delegate = this, this.inputController = 2 === _.getLevel() ? new br(this.editorElement) : new hr(this.editorElement), this.inputController.delegate = this, this.inputController.responder = this.composition, this.compositionController = new Gn(this.editorElement, this.composition), this.compositionController.delegate = this, this.toolbarController = new Pr(this.editorElement.toolbarElement), this.toolbarController.delegate = this, this.editor = new On(this.composition, this.selectionManager, this.editorElement), i4 ? this.editor.loadDocument(i4) : this.editor.loadHTML(n3);
15663    }
15664    registerSelectionManager() {
15665      return Ft.registerSelectionManager(this.selectionManager);
15666    }
15667    unregisterSelectionManager() {
15668      return Ft.unregisterSelectionManager(this.selectionManager);
15669    }
15670    render() {
15671      return this.compositionController.render();
15672    }
15673    reparse() {
15674      return this.composition.replaceHTML(this.editorElement.innerHTML);
15675    }
15676    compositionDidChangeDocument(t5) {
15677      if (this.notifyEditorElement("document-change"), !this.handlingInput)
15678        return this.render();
15679    }
15680    compositionDidChangeCurrentAttributes(t5) {
15681      return this.currentAttributes = t5, this.toolbarController.updateAttributes(this.currentAttributes), this.updateCurrentActions(), this.notifyEditorElement("attributes-change", { attributes: this.currentAttributes });
15682    }
15683    compositionDidPerformInsertionAtRange(t5) {
15684      this.pasting && (this.pastedRange = t5);
15685    }
15686    compositionShouldAcceptFile(t5) {
15687      return this.notifyEditorElement("file-accept", { file: t5 });
15688    }
15689    compositionDidAddAttachment(t5) {
15690      const e4 = this.attachmentManager.manageAttachment(t5);
15691      return this.notifyEditorElement("attachment-add", { attachment: e4 });
15692    }
15693    compositionDidEditAttachment(t5) {
15694      this.compositionController.rerenderViewForObject(t5);
15695      const e4 = this.attachmentManager.manageAttachment(t5);
15696      return this.notifyEditorElement("attachment-edit", { attachment: e4 }), this.notifyEditorElement("change");
15697    }
15698    compositionDidChangeAttachmentPreviewURL(t5) {
15699      return this.compositionController.invalidateViewForObject(t5), this.notifyEditorElement("change");
15700    }
15701    compositionDidRemoveAttachment(t5) {
15702      const e4 = this.attachmentManager.unmanageAttachment(t5);
15703      return this.notifyEditorElement("attachment-remove", { attachment: e4 });
15704    }
15705    compositionDidStartEditingAttachment(t5, e4) {
15706      return this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(t5), this.compositionController.installAttachmentEditorForAttachment(t5, e4), this.selectionManager.setLocationRange(this.attachmentLocationRange);
15707    }
15708    compositionDidStopEditingAttachment(t5) {
15709      this.compositionController.uninstallAttachmentEditor(), this.attachmentLocationRange = null;
15710    }
15711    compositionDidRequestChangingSelectionToLocationRange(t5) {
15712      if (!this.loadingSnapshot || this.isFocused())
15713        return this.requestedLocationRange = t5, this.compositionRevisionWhenLocationRangeRequested = this.composition.revision, this.handlingInput ? void 0 : this.render();
15714    }
15715    compositionWillLoadSnapshot() {
15716      this.loadingSnapshot = true;
15717    }
15718    compositionDidLoadSnapshot() {
15719      this.compositionController.refreshViewCache(), this.render(), this.loadingSnapshot = false;
15720    }
15721    getSelectionManager() {
15722      return this.selectionManager;
15723    }
15724    attachmentManagerDidRequestRemovalOfAttachment(t5) {
15725      return this.removeAttachment(t5);
15726    }
15727    compositionControllerWillSyncDocumentView() {
15728      return this.inputController.editorWillSyncDocumentView(), this.selectionManager.lock(), this.selectionManager.clearSelection();
15729    }
15730    compositionControllerDidSyncDocumentView() {
15731      return this.inputController.editorDidSyncDocumentView(), this.selectionManager.unlock(), this.updateCurrentActions(), this.notifyEditorElement("sync");
15732    }
15733    compositionControllerDidRender() {
15734      this.requestedLocationRange && (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision && this.selectionManager.setLocationRange(this.requestedLocationRange), this.requestedLocationRange = null, this.compositionRevisionWhenLocationRangeRequested = null), this.renderedCompositionRevision !== this.composition.revision && (this.runEditorFilters(), this.composition.updateCurrentAttributes(), this.notifyEditorElement("render")), this.renderedCompositionRevision = this.composition.revision;
15735    }
15736    compositionControllerDidFocus() {
15737      return this.isFocusedInvisibly() && this.setLocationRange({ index: 0, offset: 0 }), this.toolbarController.hideDialog(), this.notifyEditorElement("focus");
15738    }
15739    compositionControllerDidBlur() {
15740      return this.notifyEditorElement("blur");
15741    }
15742    compositionControllerDidSelectAttachment(t5, e4) {
15743      return this.toolbarController.hideDialog(), this.composition.editAttachment(t5, e4);
15744    }
15745    compositionControllerDidRequestDeselectingAttachment(t5) {
15746      const e4 = this.attachmentLocationRange || this.composition.document.getLocationRangeOfAttachment(t5);
15747      return this.selectionManager.setLocationRange(e4[1]);
15748    }
15749    compositionControllerWillUpdateAttachment(t5) {
15750      return this.editor.recordUndoEntry("Edit Attachment", { context: t5.id, consolidatable: true });
15751    }
15752    compositionControllerDidRequestRemovalOfAttachment(t5) {
15753      return this.removeAttachment(t5);
15754    }
15755    inputControllerWillHandleInput() {
15756      this.handlingInput = true, this.requestedRender = false;
15757    }
15758    inputControllerDidRequestRender() {
15759      this.requestedRender = true;
15760    }
15761    inputControllerDidHandleInput() {
15762      if (this.handlingInput = false, this.requestedRender)
15763        return this.requestedRender = false, this.render();
15764    }
15765    inputControllerDidAllowUnhandledInput() {
15766      return this.notifyEditorElement("change");
15767    }
15768    inputControllerDidRequestReparse() {
15769      return this.reparse();
15770    }
15771    inputControllerWillPerformTyping() {
15772      return this.recordTypingUndoEntry();
15773    }
15774    inputControllerWillPerformFormatting(t5) {
15775      return this.recordFormattingUndoEntry(t5);
15776    }
15777    inputControllerWillCutText() {
15778      return this.editor.recordUndoEntry("Cut");
15779    }
15780    inputControllerWillPaste(t5) {
15781      return this.editor.recordUndoEntry("Paste"), this.pasting = true, this.notifyEditorElement("before-paste", { paste: t5 });
15782    }
15783    inputControllerDidPaste(t5) {
15784      return t5.range = this.pastedRange, this.pastedRange = null, this.pasting = null, this.notifyEditorElement("paste", { paste: t5 });
15785    }
15786    inputControllerWillMoveText() {
15787      return this.editor.recordUndoEntry("Move");
15788    }
15789    inputControllerWillAttachFiles() {
15790      return this.editor.recordUndoEntry("Drop Files");
15791    }
15792    inputControllerWillPerformUndo() {
15793      return this.editor.undo();
15794    }
15795    inputControllerWillPerformRedo() {
15796      return this.editor.redo();
15797    }
15798    inputControllerDidReceiveKeyboardCommand(t5) {
15799      return this.toolbarController.applyKeyboardCommand(t5);
15800    }
15801    inputControllerDidStartDrag() {
15802      this.locationRangeBeforeDrag = this.selectionManager.getLocationRange();
15803    }
15804    inputControllerDidReceiveDragOverPoint(t5) {
15805      return this.selectionManager.setLocationRangeFromPointRange(t5);
15806    }
15807    inputControllerDidCancelDrag() {
15808      this.selectionManager.setLocationRange(this.locationRangeBeforeDrag), this.locationRangeBeforeDrag = null;
15809    }
15810    locationRangeDidChange(t5) {
15811      return this.composition.updateCurrentAttributes(), this.updateCurrentActions(), this.attachmentLocationRange && !Dt(this.attachmentLocationRange, t5) && this.composition.stopEditingAttachment(), this.notifyEditorElement("selection-change");
15812    }
15813    toolbarDidClickButton() {
15814      if (!this.getLocationRange())
15815        return this.setLocationRange({ index: 0, offset: 0 });
15816    }
15817    toolbarDidInvokeAction(t5, e4) {
15818      return this.invokeAction(t5, e4);
15819    }
15820    toolbarDidToggleAttribute(t5) {
15821      if (this.recordFormattingUndoEntry(t5), this.composition.toggleCurrentAttribute(t5), this.render(), !this.selectionFrozen)
15822        return this.editorElement.focus();
15823    }
15824    toolbarDidUpdateAttribute(t5, e4) {
15825      if (this.recordFormattingUndoEntry(t5), this.composition.setCurrentAttribute(t5, e4), this.render(), !this.selectionFrozen)
15826        return this.editorElement.focus();
15827    }
15828    toolbarDidRemoveAttribute(t5) {
15829      if (this.recordFormattingUndoEntry(t5), this.composition.removeCurrentAttribute(t5), this.render(), !this.selectionFrozen)
15830        return this.editorElement.focus();
15831    }
15832    toolbarWillShowDialog(t5) {
15833      return this.composition.expandSelectionForEditing(), this.freezeSelection();
15834    }
15835    toolbarDidShowDialog(t5) {
15836      return this.notifyEditorElement("toolbar-dialog-show", { dialogName: t5 });
15837    }
15838    toolbarDidHideDialog(t5) {
15839      return this.thawSelection(), this.editorElement.focus(), this.notifyEditorElement("toolbar-dialog-hide", { dialogName: t5 });
15840    }
15841    freezeSelection() {
15842      if (!this.selectionFrozen)
15843        return this.selectionManager.lock(), this.composition.freezeSelection(), this.selectionFrozen = true, this.render();
15844    }
15845    thawSelection() {
15846      if (this.selectionFrozen)
15847        return this.composition.thawSelection(), this.selectionManager.unlock(), this.selectionFrozen = false, this.render();
15848    }
15849    canInvokeAction(t5) {
15850      return !!this.actionIsExternal(t5) || !(null === (e4 = this.actions[t5]) || void 0 === e4 || null === (e4 = e4.test) || void 0 === e4 || !e4.call(this));
15851      var e4;
15852    }
15853    invokeAction(t5, e4) {
15854      return this.actionIsExternal(t5) ? this.notifyEditorElement("action-invoke", { actionName: t5, invokingElement: e4 }) : null === (i4 = this.actions[t5]) || void 0 === i4 || null === (i4 = i4.perform) || void 0 === i4 ? void 0 : i4.call(this);
15855      var i4;
15856    }
15857    actionIsExternal(t5) {
15858      return /^x-./.test(t5);
15859    }
15860    getCurrentActions() {
15861      const t5 = {};
15862      for (const e4 in this.actions)
15863        t5[e4] = this.canInvokeAction(e4);
15864      return t5;
15865    }
15866    updateCurrentActions() {
15867      const t5 = this.getCurrentActions();
15868      if (!Tt(t5, this.currentActions))
15869        return this.currentActions = t5, this.toolbarController.updateActions(this.currentActions), this.notifyEditorElement("actions-change", { actions: this.currentActions });
15870    }
15871    runEditorFilters() {
15872      let t5 = this.composition.getSnapshot();
15873      if (Array.from(this.editor.filters).forEach((e5) => {
15874        const { document: i5, selectedRange: n3 } = t5;
15875        t5 = e5.call(this.editor, t5) || {}, t5.document || (t5.document = i5), t5.selectedRange || (t5.selectedRange = n3);
15876      }), e4 = t5, i4 = this.composition.getSnapshot(), !Dt(e4.selectedRange, i4.selectedRange) || !e4.document.isEqualTo(i4.document))
15877        return this.composition.loadSnapshot(t5);
15878      var e4, i4;
15879    }
15880    updateInputElement() {
15881      const t5 = function(t6, e4) {
15882        const i4 = xn[e4];
15883        if (i4)
15884          return i4(t6);
15885        throw new Error("unknown content type: ".concat(e4));
15886      }(this.compositionController.getSerializableElement(), "text/html");
15887      return this.editorElement.setFormValue(t5);
15888    }
15889    notifyEditorElement(t5, e4) {
15890      switch (t5) {
15891        case "document-change":
15892          this.documentChangedSinceLastRender = true;
15893          break;
15894        case "render":
15895          this.documentChangedSinceLastRender && (this.documentChangedSinceLastRender = false, this.notifyEditorElement("change"));
15896          break;
15897        case "change":
15898        case "attachment-add":
15899        case "attachment-edit":
15900        case "attachment-remove":
15901          this.updateInputElement();
15902      }
15903      return this.editorElement.notify(t5, e4);
15904    }
15905    removeAttachment(t5) {
15906      return this.editor.recordUndoEntry("Delete Attachment"), this.composition.removeAttachment(t5), this.render();
15907    }
15908    recordFormattingUndoEntry(t5) {
15909      const e4 = mt(t5), i4 = this.selectionManager.getLocationRange();
15910      if (e4 || !Lt(i4))
15911        return this.editor.recordUndoEntry("Formatting", { context: this.getUndoContext(), consolidatable: true });
15912    }
15913    recordTypingUndoEntry() {
15914      return this.editor.recordUndoEntry("Typing", { context: this.getUndoContext(this.currentAttributes), consolidatable: true });
15915    }
15916    getUndoContext() {
15917      for (var t5 = arguments.length, e4 = new Array(t5), i4 = 0; i4 < t5; i4++)
15918        e4[i4] = arguments[i4];
15919      return [this.getLocationContext(), this.getTimeContext(), ...Array.from(e4)];
15920    }
15921    getLocationContext() {
15922      const t5 = this.selectionManager.getLocationRange();
15923      return Lt(t5) ? t5[0].index : t5;
15924    }
15925    getTimeContext() {
15926      return V.interval > 0 ? Math.floor(new Date().getTime() / V.interval) : 0;
15927    }
15928    isFocused() {
15929      var t5;
15930      return this.editorElement === (null === (t5 = this.editorElement.ownerDocument) || void 0 === t5 ? void 0 : t5.activeElement);
15931    }
15932    isFocusedInvisibly() {
15933      return this.isFocused() && !this.getLocationRange();
15934    }
15935    get actions() {
15936      return this.constructor.actions;
15937    }
15938  };
15939  wi(Mr, "actions", { undo: { test() {
15940    return this.editor.canUndo();
15941  }, perform() {
15942    return this.editor.undo();
15943  } }, redo: { test() {
15944    return this.editor.canRedo();
15945  }, perform() {
15946    return this.editor.redo();
15947  } }, link: { test() {
15948    return this.editor.canActivateAttribute("href");
15949  } }, increaseNestingLevel: { test() {
15950    return this.editor.canIncreaseNestingLevel();
15951  }, perform() {
15952    return this.editor.increaseNestingLevel() && this.render();
15953  } }, decreaseNestingLevel: { test() {
15954    return this.editor.canDecreaseNestingLevel();
15955  }, perform() {
15956    return this.editor.decreaseNestingLevel() && this.render();
15957  } }, attachFiles: { test: () => true, perform() {
15958    return _.pickFiles(this.editor.insertFiles);
15959  } } }), Mr.proxyMethod("getSelectionManager().setLocationRange"), Mr.proxyMethod("getSelectionManager().getLocationRange");
15960  var Br = Object.freeze({ __proto__: null, AttachmentEditorController: Kn, CompositionController: Gn, Controller: Yn, EditorController: Mr, InputController: sr, Level0InputController: hr, Level2InputController: br, ToolbarController: Pr });
15961  var _r = Object.freeze({ __proto__: null, MutationObserver: Qn, SelectionChangeObserver: Ot });
15962  var jr = Object.freeze({ __proto__: null, FileVerificationOperation: er, ImagePreloadOperation: ji });
15963  vt("trix-toolbar", "%t {\n  display: block;\n}\n\n%t {\n  white-space: nowrap;\n}\n\n%t [data-trix-dialog] {\n  display: none;\n}\n\n%t [data-trix-dialog][data-trix-active] {\n  display: block;\n}\n\n%t [data-trix-dialog] [data-trix-validate]:invalid {\n  background-color: #ffdddd;\n}");
15964  var Wr = class extends HTMLElement {
15965    connectedCallback() {
15966      "" === this.innerHTML && (this.innerHTML = U.getDefaultHTML());
15967    }
15968  };
15969  var Ur = 0;
15970  var Vr = function(t5) {
15971    if (!t5.hasAttribute("contenteditable"))
15972      return t5.setAttribute("contenteditable", ""), function(t6) {
15973        let e4 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
15974        return e4.times = 1, b(t6, e4);
15975      }("focus", { onElement: t5, withCallback: () => zr(t5) });
15976  };
15977  var zr = function(t5) {
15978    return qr(t5), Hr(t5);
15979  };
15980  var qr = function(t5) {
15981    var e4, i4;
15982    if (null !== (e4 = (i4 = document).queryCommandSupported) && void 0 !== e4 && e4.call(i4, "enableObjectResizing"))
15983      return document.execCommand("enableObjectResizing", false, false), b("mscontrolselect", { onElement: t5, preventDefault: true });
15984  };
15985  var Hr = function(t5) {
15986    var e4, i4;
15987    if (null !== (e4 = (i4 = document).queryCommandSupported) && void 0 !== e4 && e4.call(i4, "DefaultParagraphSeparator")) {
15988      const { tagName: t6 } = n.default;
15989      if (["div", "p"].includes(t6))
15990        return document.execCommand("DefaultParagraphSeparator", false, t6);
15991    }
15992  };
15993  var Jr = a.forcesObjectResizing ? { display: "inline", width: "auto" } : { display: "inline-block", width: "1px" };
15994  vt("trix-editor", "%t {\n    display: block;\n}\n\n%t:empty::before {\n    content: attr(placeholder);\n    color: graytext;\n    cursor: text;\n    pointer-events: none;\n    white-space: pre-line;\n}\n\n%t a[contenteditable=false] {\n    cursor: text;\n}\n\n%t img {\n    max-width: 100%;\n    height: auto;\n}\n\n%t ".concat(e, " figcaption textarea {\n    resize: none;\n}\n\n%t ").concat(e, " figcaption textarea.trix-autoresize-clone {\n    position: absolute;\n    left: -9999px;\n    max-height: 0px;\n}\n\n%t ").concat(e, " figcaption[data-trix-placeholder]:empty::before {\n    content: attr(data-trix-placeholder);\n    color: graytext;\n}\n\n%t [data-trix-cursor-target] {\n    display: ").concat(Jr.display, " !important;\n    width: ").concat(Jr.width, " !important;\n    padding: 0 !important;\n    margin: 0 !important;\n    border: none !important;\n}\n\n%t [data-trix-cursor-target=left] {\n    vertical-align: top !important;\n    margin-left: -1px !important;\n}\n\n%t [data-trix-cursor-target=right] {\n    vertical-align: bottom !important;\n    margin-right: -1px !important;\n}"));
15995  var Kr = /* @__PURE__ */ new WeakMap();
15996  var Gr = /* @__PURE__ */ new WeakSet();
15997  var Yr = class {
15998    constructor(t5) {
15999      var e4, i4;
16000      Mi(e4 = this, i4 = Gr), i4.add(e4), Bi(this, Kr, { writable: true, value: void 0 }), this.element = t5, Ni(this, Kr, t5.attachInternals());
16001    }
16002    connectedCallback() {
16003      Pi(this, Gr, $r).call(this);
16004    }
16005    disconnectedCallback() {
16006    }
16007    get labels() {
16008      return Di(this, Kr).labels;
16009    }
16010    get disabled() {
16011      var t5;
16012      return null === (t5 = this.element.inputElement) || void 0 === t5 ? void 0 : t5.disabled;
16013    }
16014    set disabled(t5) {
16015      this.element.toggleAttribute("disabled", t5);
16016    }
16017    get required() {
16018      return this.element.hasAttribute("required");
16019    }
16020    set required(t5) {
16021      this.element.toggleAttribute("required", t5), Pi(this, Gr, $r).call(this);
16022    }
16023    get validity() {
16024      return Di(this, Kr).validity;
16025    }
16026    get validationMessage() {
16027      return Di(this, Kr).validationMessage;
16028    }
16029    get willValidate() {
16030      return Di(this, Kr).willValidate;
16031    }
16032    setFormValue(t5) {
16033      Pi(this, Gr, $r).call(this);
16034    }
16035    checkValidity() {
16036      return Di(this, Kr).checkValidity();
16037    }
16038    reportValidity() {
16039      return Di(this, Kr).reportValidity();
16040    }
16041    setCustomValidity(t5) {
16042      Pi(this, Gr, $r).call(this, t5);
16043    }
16044  };
16045  function $r() {
16046    let t5 = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "";
16047    const { required: e4, value: i4 } = this.element, n3 = e4 && !i4, r4 = !!t5, o3 = T("input", { required: e4 }), s4 = t5 || o3.validationMessage;
16048    Di(this, Kr).setValidity({ valueMissing: n3, customError: r4 }, s4);
16049  }
16050  var Xr = /* @__PURE__ */ new WeakMap();
16051  var Zr = /* @__PURE__ */ new WeakMap();
16052  var Qr = /* @__PURE__ */ new WeakMap();
16053  var to = class {
16054    constructor(t5) {
16055      Bi(this, Xr, { writable: true, value: void 0 }), Bi(this, Zr, { writable: true, value: (t6) => {
16056        t6.defaultPrevented || t6.target === this.element.form && this.element.reset();
16057      } }), Bi(this, Qr, { writable: true, value: (t6) => {
16058        if (t6.defaultPrevented)
16059          return;
16060        if (this.element.contains(t6.target))
16061          return;
16062        const e4 = y(t6.target, { matchingSelector: "label" });
16063        e4 && Array.from(this.labels).includes(e4) && this.element.focus();
16064      } }), this.element = t5;
16065    }
16066    connectedCallback() {
16067      Ni(this, Xr, function(t5) {
16068        if (t5.hasAttribute("aria-label") || t5.hasAttribute("aria-labelledby"))
16069          return;
16070        const e4 = function() {
16071          const e5 = Array.from(t5.labels).map((e6) => {
16072            if (!e6.contains(t5))
16073              return e6.textContent;
16074          }).filter((t6) => t6), i4 = e5.join(" ");
16075          return i4 ? t5.setAttribute("aria-label", i4) : t5.removeAttribute("aria-label");
16076        };
16077        return e4(), b("focus", { onElement: t5, withCallback: e4 });
16078      }(this.element)), window.addEventListener("reset", Di(this, Zr), false), window.addEventListener("click", Di(this, Qr), false);
16079    }
16080    disconnectedCallback() {
16081      var t5;
16082      null === (t5 = Di(this, Xr)) || void 0 === t5 || t5.destroy(), window.removeEventListener("reset", Di(this, Zr), false), window.removeEventListener("click", Di(this, Qr), false);
16083    }
16084    get labels() {
16085      const t5 = [];
16086      this.element.id && this.element.ownerDocument && t5.push(...Array.from(this.element.ownerDocument.querySelectorAll("label[for='".concat(this.element.id, "']")) || []));
16087      const e4 = y(this.element, { matchingSelector: "label" });
16088      return e4 && [this.element, null].includes(e4.control) && t5.push(e4), t5;
16089    }
16090    get disabled() {
16091      return console.warn("This browser does not support the [disabled] attribute for trix-editor elements."), false;
16092    }
16093    set disabled(t5) {
16094      console.warn("This browser does not support the [disabled] attribute for trix-editor elements.");
16095    }
16096    get required() {
16097      return console.warn("This browser does not support the [required] attribute for trix-editor elements."), false;
16098    }
16099    set required(t5) {
16100      console.warn("This browser does not support the [required] attribute for trix-editor elements.");
16101    }
16102    get validity() {
16103      return console.warn("This browser does not support the validity property for trix-editor elements."), null;
16104    }
16105    get validationMessage() {
16106      return console.warn("This browser does not support the validationMessage property for trix-editor elements."), "";
16107    }
16108    get willValidate() {
16109      return console.warn("This browser does not support the willValidate property for trix-editor elements."), false;
16110    }
16111    setFormValue(t5) {
16112    }
16113    checkValidity() {
16114      return console.warn("This browser does not support checkValidity() for trix-editor elements."), true;
16115    }
16116    reportValidity() {
16117      return console.warn("This browser does not support reportValidity() for trix-editor elements."), true;
16118    }
16119    setCustomValidity(t5) {
16120      console.warn("This browser does not support setCustomValidity(validationMessage) for trix-editor elements.");
16121    }
16122  };
16123  var eo = /* @__PURE__ */ new WeakMap();
16124  var io = class extends HTMLElement {
16125    constructor() {
16126      super(), Bi(this, eo, { writable: true, value: void 0 }), Ni(this, eo, this.constructor.formAssociated ? new Yr(this) : new to(this));
16127    }
16128    get trixId() {
16129      return this.hasAttribute("trix-id") ? this.getAttribute("trix-id") : (this.setAttribute("trix-id", ++Ur), this.trixId);
16130    }
16131    get labels() {
16132      return Di(this, eo).labels;
16133    }
16134    get disabled() {
16135      return Di(this, eo).disabled;
16136    }
16137    set disabled(t5) {
16138      Di(this, eo).disabled = t5;
16139    }
16140    get required() {
16141      return Di(this, eo).required;
16142    }
16143    set required(t5) {
16144      Di(this, eo).required = t5;
16145    }
16146    get validity() {
16147      return Di(this, eo).validity;
16148    }
16149    get validationMessage() {
16150      return Di(this, eo).validationMessage;
16151    }
16152    get willValidate() {
16153      return Di(this, eo).willValidate;
16154    }
16155    get type() {
16156      return this.localName;
16157    }
16158    get toolbarElement() {
16159      var t5;
16160      if (this.hasAttribute("toolbar"))
16161        return null === (t5 = this.ownerDocument) || void 0 === t5 ? void 0 : t5.getElementById(this.getAttribute("toolbar"));
16162      if (this.parentNode) {
16163        const t6 = "trix-toolbar-".concat(this.trixId);
16164        this.setAttribute("toolbar", t6);
16165        const e4 = T("trix-toolbar", { id: t6 });
16166        return this.parentNode.insertBefore(e4, this), e4;
16167      }
16168    }
16169    get form() {
16170      var t5;
16171      return null === (t5 = this.inputElement) || void 0 === t5 ? void 0 : t5.form;
16172    }
16173    get inputElement() {
16174      var t5;
16175      if (this.hasAttribute("input"))
16176        return null === (t5 = this.ownerDocument) || void 0 === t5 ? void 0 : t5.getElementById(this.getAttribute("input"));
16177      if (this.parentNode) {
16178        const t6 = "trix-input-".concat(this.trixId);
16179        this.setAttribute("input", t6);
16180        const e4 = T("input", { type: "hidden", id: t6 });
16181        return this.parentNode.insertBefore(e4, this.nextElementSibling), e4;
16182      }
16183    }
16184    get editor() {
16185      var t5;
16186      return null === (t5 = this.editorController) || void 0 === t5 ? void 0 : t5.editor;
16187    }
16188    get name() {
16189      var t5;
16190      return null === (t5 = this.inputElement) || void 0 === t5 ? void 0 : t5.name;
16191    }
16192    get value() {
16193      var t5;
16194      return null === (t5 = this.inputElement) || void 0 === t5 ? void 0 : t5.value;
16195    }
16196    set value(t5) {
16197      var e4;
16198      this.defaultValue = t5, null === (e4 = this.editor) || void 0 === e4 || e4.loadHTML(this.defaultValue);
16199    }
16200    notify(t5, e4) {
16201      if (this.editorController)
16202        return v("trix-".concat(t5), { onElement: this, attributes: e4 });
16203    }
16204    setFormValue(t5) {
16205      this.inputElement && (this.inputElement.value = t5, Di(this, eo).setFormValue(t5));
16206    }
16207    connectedCallback() {
16208      this.hasAttribute("data-trix-internal") || (Vr(this), function(t5) {
16209        if (!t5.hasAttribute("role"))
16210          t5.setAttribute("role", "textbox");
16211      }(this), this.editorController || (v("trix-before-initialize", { onElement: this }), this.editorController = new Mr({ editorElement: this, html: this.defaultValue = this.value }), requestAnimationFrame(() => v("trix-initialize", { onElement: this }))), this.editorController.registerSelectionManager(), Di(this, eo).connectedCallback(), function(t5) {
16212        if (!document.querySelector(":focus") && t5.hasAttribute("autofocus") && document.querySelector("[autofocus]") === t5)
16213          t5.focus();
16214      }(this));
16215    }
16216    disconnectedCallback() {
16217      var t5;
16218      null === (t5 = this.editorController) || void 0 === t5 || t5.unregisterSelectionManager(), Di(this, eo).disconnectedCallback();
16219    }
16220    checkValidity() {
16221      return Di(this, eo).checkValidity();
16222    }
16223    reportValidity() {
16224      return Di(this, eo).reportValidity();
16225    }
16226    setCustomValidity(t5) {
16227      Di(this, eo).setCustomValidity(t5);
16228    }
16229    formDisabledCallback(t5) {
16230      this.inputElement && (this.inputElement.disabled = t5), this.toggleAttribute("contenteditable", !t5);
16231    }
16232    formResetCallback() {
16233      this.reset();
16234    }
16235    reset() {
16236      this.value = this.defaultValue;
16237    }
16238  };
16239  wi(io, "formAssociated", "ElementInternals" in window);
16240  var no = { VERSION: t, config: z, core: Cn, models: Un, views: Vn, controllers: Br, observers: _r, operations: jr, elements: Object.freeze({ __proto__: null, TrixEditorElement: io, TrixToolbarElement: Wr }), filters: Object.freeze({ __proto__: null, Filter: Dn, attachmentGalleryFilter: Nn }) };
16241  Object.assign(no, Un), window.Trix = no, setTimeout(function() {
16242    customElements.get("trix-toolbar") || customElements.define("trix-toolbar", Wr), customElements.get("trix-editor") || customElements.define("trix-editor", io);
16243  }, 0);
16244
16245  
vendor: 84,501 bytes, lines 16245-18693
16245// node_modules/@hotwired/stimulus/dist/stimulus.js
16246  var EventListener = class {
16247    constructor(eventTarget, eventName, eventOptions) {
16248      this.eventTarget = eventTarget;
16249      this.eventName = eventName;
16250      this.eventOptions = eventOptions;
16251      this.unorderedBindings = /* @__PURE__ */ new Set();
16252    }
16253    connect() {
16254      this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);
16255    }
16256    disconnect() {
16257      this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);
16258    }
16259    bindingConnected(binding) {
16260      this.unorderedBindings.add(binding);
16261    }
16262    bindingDisconnected(binding) {
16263      this.unorderedBindings.delete(binding);
16264    }
16265    handleEvent(event2) {
16266      const extendedEvent = extendEvent(event2);
16267      for (const binding of this.bindings) {
16268        if (extendedEvent.immediatePropagationStopped) {
16269          break;
16270        } else {
16271          binding.handleEvent(extendedEvent);
16272        }
16273      }
16274    }
16275    hasBindings() {
16276      return this.unorderedBindings.size > 0;
16277    }
16278    get bindings() {
16279      return Array.from(this.unorderedBindings).sort((left2, right2) => {
16280        const leftIndex = left2.index, rightIndex = right2.index;
16281        return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;
16282      });
16283    }
16284  };
16285  function extendEvent(event2) {
16286    if ("immediatePropagationStopped" in event2) {
16287      return event2;
16288    } else {
16289      const { stopImmediatePropagation } = event2;
16290      return Object.assign(event2, {
16291        immediatePropagationStopped: false,
16292        stopImmediatePropagation() {
16293          this.immediatePropagationStopped = true;
16294          stopImmediatePropagation.call(this);
16295        }
16296      });
16297    }
16298  }
16299  var Dispatcher = class {
16300    constructor(application2) {
16301      this.application = application2;
16302      this.eventListenerMaps = /* @__PURE__ */ new Map();
16303      this.started = false;
16304    }
16305    start() {
16306      if (!this.started) {
16307        this.started = true;
16308        this.eventListeners.forEach((eventListener) => eventListener.connect());
16309      }
16310    }
16311    stop() {
16312      if (this.started) {
16313        this.started = false;
16314        this.eventListeners.forEach((eventListener) => eventListener.disconnect());
16315      }
16316    }
16317    get eventListeners() {
16318      return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);
16319    }
16320    bindingConnected(binding) {
16321      this.fetchEventListenerForBinding(binding).bindingConnected(binding);
16322    }
16323    bindingDisconnected(binding, clearEventListeners = false) {
16324      this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);
16325      if (clearEventListeners)
16326        this.clearEventListenersForBinding(binding);
16327    }
16328    handleError(error2, message, detail = {}) {
16329      this.application.handleError(error2, `Error ${message}`, detail);
16330    }
16331    clearEventListenersForBinding(binding) {
16332      const eventListener = this.fetchEventListenerForBinding(binding);
16333      if (!eventListener.hasBindings()) {
16334        eventListener.disconnect();
16335        this.removeMappedEventListenerFor(binding);
16336      }
16337    }
16338    removeMappedEventListenerFor(binding) {
16339      const { eventTarget, eventName, eventOptions } = binding;
16340      const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);
16341      const cacheKey = this.cacheKey(eventName, eventOptions);
16342      eventListenerMap.delete(cacheKey);
16343      if (eventListenerMap.size == 0)
16344        this.eventListenerMaps.delete(eventTarget);
16345    }
16346    fetchEventListenerForBinding(binding) {
16347      const { eventTarget, eventName, eventOptions } = binding;
16348      return this.fetchEventListener(eventTarget, eventName, eventOptions);
16349    }
16350    fetchEventListener(eventTarget, eventName, eventOptions) {
16351      const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);
16352      const cacheKey = this.cacheKey(eventName, eventOptions);
16353      let eventListener = eventListenerMap.get(cacheKey);
16354      if (!eventListener) {
16355        eventListener = this.createEventListener(eventTarget, eventName, eventOptions);
16356        eventListenerMap.set(cacheKey, eventListener);
16357      }
16358      return eventListener;
16359    }
16360    createEventListener(eventTarget, eventName, eventOptions) {
16361      const eventListener = new EventListener(eventTarget, eventName, eventOptions);
16362      if (this.started) {
16363        eventListener.connect();
16364      }
16365      return eventListener;
16366    }
16367    fetchEventListenerMapForEventTarget(eventTarget) {
16368      let eventListenerMap = this.eventListenerMaps.get(eventTarget);
16369      if (!eventListenerMap) {
16370        eventListenerMap = /* @__PURE__ */ new Map();
16371        this.eventListenerMaps.set(eventTarget, eventListenerMap);
16372      }
16373      return eventListenerMap;
16374    }
16375    cacheKey(eventName, eventOptions) {
16376      const parts = [eventName];
16377      Object.keys(eventOptions).sort().forEach((key) => {
16378        parts.push(`${eventOptions[key] ? "" : "!"}${key}`);
16379      });
16380      return parts.join(":");
16381    }
16382  };
16383  var defaultActionDescriptorFilters = {
16384    stop({ event: event2, value }) {
16385      if (value)
16386        event2.stopPropagation();
16387      return true;
16388    },
16389    prevent({ event: event2, value }) {
16390      if (value)
16391        event2.preventDefault();
16392      return true;
16393    },
16394    self({ event: event2, value, element }) {
16395      if (value) {
16396        return element === event2.target;
16397      } else {
16398        return true;
16399      }
16400    }
16401  };
16402  var descriptorPattern = /^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;
16403  function parseActionDescriptorString(descriptorString) {
16404    const source = descriptorString.trim();
16405    const matches2 = source.match(descriptorPattern) || [];
16406    let eventName = matches2[2];
16407    let keyFilter = matches2[3];
16408    if (keyFilter && !["keydown", "keyup", "keypress"].includes(eventName)) {
16409      eventName += `.${keyFilter}`;
16410      keyFilter = "";
16411    }
16412    return {
16413      eventTarget: parseEventTarget(matches2[4]),
16414      eventName,
16415      eventOptions: matches2[7] ? parseEventOptions(matches2[7]) : {},
16416      identifier: matches2[5],
16417      methodName: matches2[6],
16418      keyFilter: matches2[1] || keyFilter
16419    };
16420  }
16421  function parseEventTarget(eventTargetName) {
16422    if (eventTargetName == "window") {
16423      return window;
16424    } else if (eventTargetName == "document") {
16425      return document;
16426    }
16427  }
16428  function parseEventOptions(eventOptions) {
16429    return eventOptions.split(":").reduce((options, token) => Object.assign(options, { [token.replace(/^!/, "")]: !/^!/.test(token) }), {});
16430  }
16431  function stringifyEventTarget(eventTarget) {
16432    if (eventTarget == window) {
16433      return "window";
16434    } else if (eventTarget == document) {
16435      return "document";
16436    }
16437  }
16438  function camelize(value) {
16439    return value.replace(/(?:[_-])([a-z0-9])/g, (_4, char) => char.toUpperCase());
16440  }
16441  function namespaceCamelize(value) {
16442    return camelize(value.replace(/--/g, "-").replace(/__/g, "_"));
16443  }
16444  function capitalize(value) {
16445    return value.charAt(0).toUpperCase() + value.slice(1);
16446  }
16447  function dasherize(value) {
16448    return value.replace(/([A-Z])/g, (_4, char) => `-${char.toLowerCase()}`);
16449  }
16450  function tokenize(value) {
16451    return value.match(/[^\s]+/g) || [];
16452  }
16453  function isSomething(object) {
16454    return object !== null && object !== void 0;
16455  }
16456  function hasProperty(object, property) {
16457    return Object.prototype.hasOwnProperty.call(object, property);
16458  }
16459  var allModifiers = ["meta", "ctrl", "alt", "shift"];
16460  var Action = class {
16461    constructor(element, index4, descriptor, schema) {
16462      this.element = element;
16463      this.index = index4;
16464      this.eventTarget = descriptor.eventTarget || element;
16465      this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error("missing event name");
16466      this.eventOptions = descriptor.eventOptions || {};
16467      this.identifier = descriptor.identifier || error("missing identifier");
16468      this.methodName = descriptor.methodName || error("missing method name");
16469      this.keyFilter = descriptor.keyFilter || "";
16470      this.schema = schema;
16471    }
16472    static forToken(token, schema) {
16473      return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);
16474    }
16475    toString() {
16476      const eventFilter = this.keyFilter ? `.${this.keyFilter}` : "";
16477      const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : "";
16478      return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;
16479    }
16480    shouldIgnoreKeyboardEvent(event2) {
16481      if (!this.keyFilter) {
16482        return false;
16483      }
16484      const filters = this.keyFilter.split("+");
16485      if (this.keyFilterDissatisfied(event2, filters)) {
16486        return true;
16487      }
16488      const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];
16489      if (!standardFilter) {
16490        return false;
16491      }
16492      if (!hasProperty(this.keyMappings, standardFilter)) {
16493        error(`contains unknown key filter: ${this.keyFilter}`);
16494      }
16495      return this.keyMappings[standardFilter].toLowerCase() !== event2.key.toLowerCase();
16496    }
16497    shouldIgnoreMouseEvent(event2) {
16498      if (!this.keyFilter) {
16499        return false;
16500      }
16501      const filters = [this.keyFilter];
16502      if (this.keyFilterDissatisfied(event2, filters)) {
16503        return true;
16504      }
16505      return false;
16506    }
16507    get params() {
16508      const params = {};
16509      const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, "i");
16510      for (const { name, value } of Array.from(this.element.attributes)) {
16511        const match = name.match(pattern);
16512        const key = match && match[1];
16513        if (key) {
16514          params[camelize(key)] = typecast(value);
16515        }
16516      }
16517      return params;
16518    }
16519    get eventTargetName() {
16520      return stringifyEventTarget(this.eventTarget);
16521    }
16522    get keyMappings() {
16523      return this.schema.keyMappings;
16524    }
16525    keyFilterDissatisfied(event2, filters) {
16526      const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));
16527      return event2.metaKey !== meta || event2.ctrlKey !== ctrl || event2.altKey !== alt || event2.shiftKey !== shift;
16528    }
16529  };
16530  var defaultEventNames = {
16531    a: () => "click",
16532    button: () => "click",
16533    form: () => "submit",
16534    details: () => "toggle",
16535    input: (e4) => e4.getAttribute("type") == "submit" ? "click" : "input",
16536    select: () => "change",
16537    textarea: () => "input"
16538  };
16539  function getDefaultEventNameForElement(element) {
16540    const tagName = element.tagName.toLowerCase();
16541    if (tagName in defaultEventNames) {
16542      return defaultEventNames[tagName](element);
16543    }
16544  }
16545  function error(message) {
16546    throw new Error(message);
16547  }
16548  function typecast(value) {
16549    try {
16550      return JSON.parse(value);
16551    } catch (o_O) {
16552      return value;
16553    }
16554  }
16555  var Binding = class {
16556    constructor(context, action) {
16557      this.context = context;
16558      this.action = action;
16559    }
16560    get index() {
16561      return this.action.index;
16562    }
16563    get eventTarget() {
16564      return this.action.eventTarget;
16565    }
16566    get eventOptions() {
16567      return this.action.eventOptions;
16568    }
16569    get identifier() {
16570      return this.context.identifier;
16571    }
16572    handleEvent(event2) {
16573      const actionEvent = this.prepareActionEvent(event2);
16574      if (this.willBeInvokedByEvent(event2) && this.applyEventModifiers(actionEvent)) {
16575        this.invokeWithEvent(actionEvent);
16576      }
16577    }
16578    get eventName() {
16579      return this.action.eventName;
16580    }
16581    get method() {
16582      const method = this.controller[this.methodName];
16583      if (typeof method == "function") {
16584        return method;
16585      }
16586      throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`);
16587    }
16588    applyEventModifiers(event2) {
16589      const { element } = this.action;
16590      const { actionDescriptorFilters } = this.context.application;
16591      const { controller } = this.context;
16592      let passes = true;
16593      for (const [name, value] of Object.entries(this.eventOptions)) {
16594        if (name in actionDescriptorFilters) {
16595          const filter = actionDescriptorFilters[name];
16596          passes = passes && filter({ name, value, event: event2, element, controller });
16597        } else {
16598          continue;
16599        }
16600      }
16601      return passes;
16602    }
16603    prepareActionEvent(event2) {
16604      return Object.assign(event2, { params: this.action.params });
16605    }
16606    invokeWithEvent(event2) {
16607      const { target, currentTarget } = event2;
16608      try {
16609        this.method.call(this.controller, event2);
16610        this.context.logDebugActivity(this.methodName, { event: event2, target, currentTarget, action: this.methodName });
16611      } catch (error2) {
16612        const { identifier, controller, element, index: index4 } = this;
16613        const detail = { identifier, controller, element, index: index4, event: event2 };
16614        this.context.handleError(error2, `invoking action "${this.action}"`, detail);
16615      }
16616    }
16617    willBeInvokedByEvent(event2) {
16618      const eventTarget = event2.target;
16619      if (event2 instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event2)) {
16620        return false;
16621      }
16622      if (event2 instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event2)) {
16623        return false;
16624      }
16625      if (this.element === eventTarget) {
16626        return true;
16627      } else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {
16628        return this.scope.containsElement(eventTarget);
16629      } else {
16630        return this.scope.containsElement(this.action.element);
16631      }
16632    }
16633    get controller() {
16634      return this.context.controller;
16635    }
16636    get methodName() {
16637      return this.action.methodName;
16638    }
16639    get element() {
16640      return this.scope.element;
16641    }
16642    get scope() {
16643      return this.context.scope;
16644    }
16645  };
16646  var ElementObserver = class {
16647    constructor(element, delegate2) {
16648      this.mutationObserverInit = { attributes: true, childList: true, subtree: true };
16649      this.element = element;
16650      this.started = false;
16651      this.delegate = delegate2;
16652      this.elements = /* @__PURE__ */ new Set();
16653      this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));
16654    }
16655    start() {
16656      if (!this.started) {
16657        this.started = true;
16658        this.mutationObserver.observe(this.element, this.mutationObserverInit);
16659        this.refresh();
16660      }
16661    }
16662    pause(callback) {
16663      if (this.started) {
16664        this.mutationObserver.disconnect();
16665        this.started = false;
16666      }
16667      callback();
16668      if (!this.started) {
16669        this.mutationObserver.observe(this.element, this.mutationObserverInit);
16670        this.started = true;
16671      }
16672    }
16673    stop() {
16674      if (this.started) {
16675        this.mutationObserver.takeRecords();
16676        this.mutationObserver.disconnect();
16677        this.started = false;
16678      }
16679    }
16680    refresh() {
16681      if (this.started) {
16682        const matches2 = new Set(this.matchElementsInTree());
16683        for (const element of Array.from(this.elements)) {
16684          if (!matches2.has(element)) {
16685            this.removeElement(element);
16686          }
16687        }
16688        for (const element of Array.from(matches2)) {
16689          this.addElement(element);
16690        }
16691      }
16692    }
16693    processMutations(mutations) {
16694      if (this.started) {
16695        for (const mutation of mutations) {
16696          this.processMutation(mutation);
16697        }
16698      }
16699    }
16700    processMutation(mutation) {
16701      if (mutation.type == "attributes") {
16702        this.processAttributeChange(mutation.target, mutation.attributeName);
16703      } else if (mutation.type == "childList") {
16704        this.processRemovedNodes(mutation.removedNodes);
16705        this.processAddedNodes(mutation.addedNodes);
16706      }
16707    }
16708    processAttributeChange(element, attributeName) {
16709      if (this.elements.has(element)) {
16710        if (this.delegate.elementAttributeChanged && this.matchElement(element)) {
16711          this.delegate.elementAttributeChanged(element, attributeName);
16712        } else {
16713          this.removeElement(element);
16714        }
16715      } else if (this.matchElement(element)) {
16716        this.addElement(element);
16717      }
16718    }
16719    processRemovedNodes(nodes) {
16720      for (const node of Array.from(nodes)) {
16721        const element = this.elementFromNode(node);
16722        if (element) {
16723          this.processTree(element, this.removeElement);
16724        }
16725      }
16726    }
16727    processAddedNodes(nodes) {
16728      for (const node of Array.from(nodes)) {
16729        const element = this.elementFromNode(node);
16730        if (element && this.elementIsActive(element)) {
16731          this.processTree(element, this.addElement);
16732        }
16733      }
16734    }
16735    matchElement(element) {
16736      return this.delegate.matchElement(element);
16737    }
16738    matchElementsInTree(tree = this.element) {
16739      return this.delegate.matchElementsInTree(tree);
16740    }
16741    processTree(tree, processor) {
16742      for (const element of this.matchElementsInTree(tree)) {
16743        processor.call(this, element);
16744      }
16745    }
16746    elementFromNode(node) {
16747      if (node.nodeType == Node.ELEMENT_NODE) {
16748        return node;
16749      }
16750    }
16751    elementIsActive(element) {
16752      if (element.isConnected != this.element.isConnected) {
16753        return false;
16754      } else {
16755        return this.element.contains(element);
16756      }
16757    }
16758    addElement(element) {
16759      if (!this.elements.has(element)) {
16760        if (this.elementIsActive(element)) {
16761          this.elements.add(element);
16762          if (this.delegate.elementMatched) {
16763            this.delegate.elementMatched(element);
16764          }
16765        }
16766      }
16767    }
16768    removeElement(element) {
16769      if (this.elements.has(element)) {
16770        this.elements.delete(element);
16771        if (this.delegate.elementUnmatched) {
16772          this.delegate.elementUnmatched(element);
16773        }
16774      }
16775    }
16776  };
16777  var AttributeObserver = class {
16778    constructor(element, attributeName, delegate2) {
16779      this.attributeName = attributeName;
16780      this.delegate = delegate2;
16781      this.elementObserver = new ElementObserver(element, this);
16782    }
16783    get element() {
16784      return this.elementObserver.element;
16785    }
16786    get selector() {
16787      return `[${this.attributeName}]`;
16788    }
16789    start() {
16790      this.elementObserver.start();
16791    }
16792    pause(callback) {
16793      this.elementObserver.pause(callback);
16794    }
16795    stop() {
16796      this.elementObserver.stop();
16797    }
16798    refresh() {
16799      this.elementObserver.refresh();
16800    }
16801    get started() {
16802      return this.elementObserver.started;
16803    }
16804    matchElement(element) {
16805      return element.hasAttribute(this.attributeName);
16806    }
16807    matchElementsInTree(tree) {
16808      const match = this.matchElement(tree) ? [tree] : [];
16809      const matches2 = Array.from(tree.querySelectorAll(this.selector));
16810      return match.concat(matches2);
16811    }
16812    elementMatched(element) {
16813      if (this.delegate.elementMatchedAttribute) {
16814        this.delegate.elementMatchedAttribute(element, this.attributeName);
16815      }
16816    }
16817    elementUnmatched(element) {
16818      if (this.delegate.elementUnmatchedAttribute) {
16819        this.delegate.elementUnmatchedAttribute(element, this.attributeName);
16820      }
16821    }
16822    elementAttributeChanged(element, attributeName) {
16823      if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {
16824        this.delegate.elementAttributeValueChanged(element, attributeName);
16825      }
16826    }
16827  };
16828  function add(map, key, value) {
16829    fetch2(map, key).add(value);
16830  }
16831  function del(map, key, value) {
16832    fetch2(map, key).delete(value);
16833    prune(map, key);
16834  }
16835  function fetch2(map, key) {
16836    let values = map.get(key);
16837    if (!values) {
16838      values = /* @__PURE__ */ new Set();
16839      map.set(key, values);
16840    }
16841    return values;
16842  }
16843  function prune(map, key) {
16844    const values = map.get(key);
16845    if (values != null && values.size == 0) {
16846      map.delete(key);
16847    }
16848  }
16849  var Multimap = class {
16850    constructor() {
16851      this.valuesByKey = /* @__PURE__ */ new Map();
16852    }
16853    get keys() {
16854      return Array.from(this.valuesByKey.keys());
16855    }
16856    get values() {
16857      const sets = Array.from(this.valuesByKey.values());
16858      return sets.reduce((values, set) => values.concat(Array.from(set)), []);
16859    }
16860    get size() {
16861      const sets = Array.from(this.valuesByKey.values());
16862      return sets.reduce((size, set) => size + set.size, 0);
16863    }
16864    add(key, value) {
16865      add(this.valuesByKey, key, value);
16866    }
16867    delete(key, value) {
16868      del(this.valuesByKey, key, value);
16869    }
16870    has(key, value) {
16871      const values = this.valuesByKey.get(key);
16872      return values != null && values.has(value);
16873    }
16874    hasKey(key) {
16875      return this.valuesByKey.has(key);
16876    }
16877    hasValue(value) {
16878      const sets = Array.from(this.valuesByKey.values());
16879      return sets.some((set) => set.has(value));
16880    }
16881    getValuesForKey(key) {
16882      const values = this.valuesByKey.get(key);
16883      return values ? Array.from(values) : [];
16884    }
16885    getKeysForValue(value) {
16886      return Array.from(this.valuesByKey).filter(([_key, values]) => values.has(value)).map(([key, _values]) => key);
16887    }
16888  };
16889  var SelectorObserver = class {
16890    constructor(element, selector, delegate2, details) {
16891      this._selector = selector;
16892      this.details = details;
16893      this.elementObserver = new ElementObserver(element, this);
16894      this.delegate = delegate2;
16895      this.matchesByElement = new Multimap();
16896    }
16897    get started() {
16898      return this.elementObserver.started;
16899    }
16900    get selector() {
16901      return this._selector;
16902    }
16903    set selector(selector) {
16904      this._selector = selector;
16905      this.refresh();
16906    }
16907    start() {
16908      this.elementObserver.start();
16909    }
16910    pause(callback) {
16911      this.elementObserver.pause(callback);
16912    }
16913    stop() {
16914      this.elementObserver.stop();
16915    }
16916    refresh() {
16917      this.elementObserver.refresh();
16918    }
16919    get element() {
16920      return this.elementObserver.element;
16921    }
16922    matchElement(element) {
16923      const { selector } = this;
16924      if (selector) {
16925        const matches2 = element.matches(selector);
16926        if (this.delegate.selectorMatchElement) {
16927          return matches2 && this.delegate.selectorMatchElement(element, this.details);
16928        }
16929        return matches2;
16930      } else {
16931        return false;
16932      }
16933    }
16934    matchElementsInTree(tree) {
16935      const { selector } = this;
16936      if (selector) {
16937        const match = this.matchElement(tree) ? [tree] : [];
16938        const matches2 = Array.from(tree.querySelectorAll(selector)).filter((match2) => this.matchElement(match2));
16939        return match.concat(matches2);
16940      } else {
16941        return [];
16942      }
16943    }
16944    elementMatched(element) {
16945      const { selector } = this;
16946      if (selector) {
16947        this.selectorMatched(element, selector);
16948      }
16949    }
16950    elementUnmatched(element) {
16951      const selectors = this.matchesByElement.getKeysForValue(element);
16952      for (const selector of selectors) {
16953        this.selectorUnmatched(element, selector);
16954      }
16955    }
16956    elementAttributeChanged(element, _attributeName) {
16957      const { selector } = this;
16958      if (selector) {
16959        const matches2 = this.matchElement(element);
16960        const matchedBefore = this.matchesByElement.has(selector, element);
16961        if (matches2 && !matchedBefore) {
16962          this.selectorMatched(element, selector);
16963        } else if (!matches2 && matchedBefore) {
16964          this.selectorUnmatched(element, selector);
16965        }
16966      }
16967    }
16968    selectorMatched(element, selector) {
16969      this.delegate.selectorMatched(element, selector, this.details);
16970      this.matchesByElement.add(selector, element);
16971    }
16972    selectorUnmatched(element, selector) {
16973      this.delegate.selectorUnmatched(element, selector, this.details);
16974      this.matchesByElement.delete(selector, element);
16975    }
16976  };
16977  var StringMapObserver = class {
16978    constructor(element, delegate2) {
16979      this.element = element;
16980      this.delegate = delegate2;
16981      this.started = false;
16982      this.stringMap = /* @__PURE__ */ new Map();
16983      this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));
16984    }
16985    start() {
16986      if (!this.started) {
16987        this.started = true;
16988        this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });
16989        this.refresh();
16990      }
16991    }
16992    stop() {
16993      if (this.started) {
16994        this.mutationObserver.takeRecords();
16995        this.mutationObserver.disconnect();
16996        this.started = false;
16997      }
16998    }
16999    refresh() {
17000      if (this.started) {
17001        for (const attributeName of this.knownAttributeNames) {
17002          this.refreshAttribute(attributeName, null);
17003        }
17004      }
17005    }
17006    processMutations(mutations) {
17007      if (this.started) {
17008        for (const mutation of mutations) {
17009          this.processMutation(mutation);
17010        }
17011      }
17012    }
17013    processMutation(mutation) {
17014      const attributeName = mutation.attributeName;
17015      if (attributeName) {
17016        this.refreshAttribute(attributeName, mutation.oldValue);
17017      }
17018    }
17019    refreshAttribute(attributeName, oldValue) {
17020      const key = this.delegate.getStringMapKeyForAttribute(attributeName);
17021      if (key != null) {
17022        if (!this.stringMap.has(attributeName)) {
17023          this.stringMapKeyAdded(key, attributeName);
17024        }
17025        const value = this.element.getAttribute(attributeName);
17026        if (this.stringMap.get(attributeName) != value) {
17027          this.stringMapValueChanged(value, key, oldValue);
17028        }
17029        if (value == null) {
17030          const oldValue2 = this.stringMap.get(attributeName);
17031          this.stringMap.delete(attributeName);
17032          if (oldValue2)
17033            this.stringMapKeyRemoved(key, attributeName, oldValue2);
17034        } else {
17035          this.stringMap.set(attributeName, value);
17036        }
17037      }
17038    }
17039    stringMapKeyAdded(key, attributeName) {
17040      if (this.delegate.stringMapKeyAdded) {
17041        this.delegate.stringMapKeyAdded(key, attributeName);
17042      }
17043    }
17044    stringMapValueChanged(value, key, oldValue) {
17045      if (this.delegate.stringMapValueChanged) {
17046        this.delegate.stringMapValueChanged(value, key, oldValue);
17047      }
17048    }
17049    stringMapKeyRemoved(key, attributeName, oldValue) {
17050      if (this.delegate.stringMapKeyRemoved) {
17051        this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);
17052      }
17053    }
17054    get knownAttributeNames() {
17055      return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));
17056    }
17057    get currentAttributeNames() {
17058      return Array.from(this.element.attributes).map((attribute) => attribute.name);
17059    }
17060    get recordedAttributeNames() {
17061      return Array.from(this.stringMap.keys());
17062    }
17063  };
17064  var TokenListObserver = class {
17065    constructor(element, attributeName, delegate2) {
17066      this.attributeObserver = new AttributeObserver(element, attributeName, this);
17067      this.delegate = delegate2;
17068      this.tokensByElement = new Multimap();
17069    }
17070    get started() {
17071      return this.attributeObserver.started;
17072    }
17073    start() {
17074      this.attributeObserver.start();
17075    }
17076    pause(callback) {
17077      this.attributeObserver.pause(callback);
17078    }
17079    stop() {
17080      this.attributeObserver.stop();
17081    }
17082    refresh() {
17083      this.attributeObserver.refresh();
17084    }
17085    get element() {
17086      return this.attributeObserver.element;
17087    }
17088    get attributeName() {
17089      return this.attributeObserver.attributeName;
17090    }
17091    elementMatchedAttribute(element) {
17092      this.tokensMatched(this.readTokensForElement(element));
17093    }
17094    elementAttributeValueChanged(element) {
17095      const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);
17096      this.tokensUnmatched(unmatchedTokens);
17097      this.tokensMatched(matchedTokens);
17098    }
17099    elementUnmatchedAttribute(element) {
17100      this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));
17101    }
17102    tokensMatched(tokens) {
17103      tokens.forEach((token) => this.tokenMatched(token));
17104    }
17105    tokensUnmatched(tokens) {
17106      tokens.forEach((token) => this.tokenUnmatched(token));
17107    }
17108    tokenMatched(token) {
17109      this.delegate.tokenMatched(token);
17110      this.tokensByElement.add(token.element, token);
17111    }
17112    tokenUnmatched(token) {
17113      this.delegate.tokenUnmatched(token);
17114      this.tokensByElement.delete(token.element, token);
17115    }
17116    refreshTokensForElement(element) {
17117      const previousTokens = this.tokensByElement.getValuesForKey(element);
17118      const currentTokens = this.readTokensForElement(element);
17119      const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));
17120      if (firstDifferingIndex == -1) {
17121        return [[], []];
17122      } else {
17123        return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];
17124      }
17125    }
17126    readTokensForElement(element) {
17127      const attributeName = this.attributeName;
17128      const tokenString = element.getAttribute(attributeName) || "";
17129      return parseTokenString(tokenString, element, attributeName);
17130    }
17131  };
17132  function parseTokenString(tokenString, element, attributeName) {
17133    return tokenString.trim().split(/\s+/).filter((content) => content.length).map((content, index4) => ({ element, attributeName, content, index: index4 }));
17134  }
17135  function zip(left2, right2) {
17136    const length = Math.max(left2.length, right2.length);
17137    return Array.from({ length }, (_4, index4) => [left2[index4], right2[index4]]);
17138  }
17139  function tokensAreEqual(left2, right2) {
17140    return left2 && right2 && left2.index == right2.index && left2.content == right2.content;
17141  }
17142  var ValueListObserver = class {
17143    constructor(element, attributeName, delegate2) {
17144      this.tokenListObserver = new TokenListObserver(element, attributeName, this);
17145      this.delegate = delegate2;
17146      this.parseResultsByToken = /* @__PURE__ */ new WeakMap();
17147      this.valuesByTokenByElement = /* @__PURE__ */ new WeakMap();
17148    }
17149    get started() {
17150      return this.tokenListObserver.started;
17151    }
17152    start() {
17153      this.tokenListObserver.start();
17154    }
17155    stop() {
17156      this.tokenListObserver.stop();
17157    }
17158    refresh() {
17159      this.tokenListObserver.refresh();
17160    }
17161    get element() {
17162      return this.tokenListObserver.element;
17163    }
17164    get attributeName() {
17165      return this.tokenListObserver.attributeName;
17166    }
17167    tokenMatched(token) {
17168      const { element } = token;
17169      const { value } = this.fetchParseResultForToken(token);
17170      if (value) {
17171        this.fetchValuesByTokenForElement(element).set(token, value);
17172        this.delegate.elementMatchedValue(element, value);
17173      }
17174    }
17175    tokenUnmatched(token) {
17176      const { element } = token;
17177      const { value } = this.fetchParseResultForToken(token);
17178      if (value) {
17179        this.fetchValuesByTokenForElement(element).delete(token);
17180        this.delegate.elementUnmatchedValue(element, value);
17181      }
17182    }
17183    fetchParseResultForToken(token) {
17184      let parseResult = this.parseResultsByToken.get(token);
17185      if (!parseResult) {
17186        parseResult = this.parseToken(token);
17187        this.parseResultsByToken.set(token, parseResult);
17188      }
17189      return parseResult;
17190    }
17191    fetchValuesByTokenForElement(element) {
17192      let valuesByToken = this.valuesByTokenByElement.get(element);
17193      if (!valuesByToken) {
17194        valuesByToken = /* @__PURE__ */ new Map();
17195        this.valuesByTokenByElement.set(element, valuesByToken);
17196      }
17197      return valuesByToken;
17198    }
17199    parseToken(token) {
17200      try {
17201        const value = this.delegate.parseValueForToken(token);
17202        return { value };
17203      } catch (error2) {
17204        return { error: error2 };
17205      }
17206    }
17207  };
17208  var BindingObserver = class {
17209    constructor(context, delegate2) {
17210      this.context = context;
17211      this.delegate = delegate2;
17212      this.bindingsByAction = /* @__PURE__ */ new Map();
17213    }
17214    start() {
17215      if (!this.valueListObserver) {
17216        this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);
17217        this.valueListObserver.start();
17218      }
17219    }
17220    stop() {
17221      if (this.valueListObserver) {
17222        this.valueListObserver.stop();
17223        delete this.valueListObserver;
17224        this.disconnectAllActions();
17225      }
17226    }
17227    get element() {
17228      return this.context.element;
17229    }
17230    get identifier() {
17231      return this.context.identifier;
17232    }
17233    get actionAttribute() {
17234      return this.schema.actionAttribute;
17235    }
17236    get schema() {
17237      return this.context.schema;
17238    }
17239    get bindings() {
17240      return Array.from(this.bindingsByAction.values());
17241    }
17242    connectAction(action) {
17243      const binding = new Binding(this.context, action);
17244      this.bindingsByAction.set(action, binding);
17245      this.delegate.bindingConnected(binding);
17246    }
17247    disconnectAction(action) {
17248      const binding = this.bindingsByAction.get(action);
17249      if (binding) {
17250        this.bindingsByAction.delete(action);
17251        this.delegate.bindingDisconnected(binding);
17252      }
17253    }
17254    disconnectAllActions() {
17255      this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));
17256      this.bindingsByAction.clear();
17257    }
17258    parseValueForToken(token) {
17259      const action = Action.forToken(token, this.schema);
17260      if (action.identifier == this.identifier) {
17261        return action;
17262      }
17263    }
17264    elementMatchedValue(element, action) {
17265      this.connectAction(action);
17266    }
17267    elementUnmatchedValue(element, action) {
17268      this.disconnectAction(action);
17269    }
17270  };
17271  var ValueObserver = class {
17272    constructor(context, receiver) {
17273      this.context = context;
17274      this.receiver = receiver;
17275      this.stringMapObserver = new StringMapObserver(this.element, this);
17276      this.valueDescriptorMap = this.controller.valueDescriptorMap;
17277    }
17278    start() {
17279      this.stringMapObserver.start();
17280      this.invokeChangedCallbacksForDefaultValues();
17281    }
17282    stop() {
17283      this.stringMapObserver.stop();
17284    }
17285    get element() {
17286      return this.context.element;
17287    }
17288    get controller() {
17289      return this.context.controller;
17290    }
17291    getStringMapKeyForAttribute(attributeName) {
17292      if (attributeName in this.valueDescriptorMap) {
17293        return this.valueDescriptorMap[attributeName].name;
17294      }
17295    }
17296    stringMapKeyAdded(key, attributeName) {
17297      const descriptor = this.valueDescriptorMap[attributeName];
17298      if (!this.hasValue(key)) {
17299        this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));
17300      }
17301    }
17302    stringMapValueChanged(value, name, oldValue) {
17303      const descriptor = this.valueDescriptorNameMap[name];
17304      if (value === null)
17305        return;
17306      if (oldValue === null) {
17307        oldValue = descriptor.writer(descriptor.defaultValue);
17308      }
17309      this.invokeChangedCallback(name, value, oldValue);
17310    }
17311    stringMapKeyRemoved(key, attributeName, oldValue) {
17312      const descriptor = this.valueDescriptorNameMap[key];
17313      if (this.hasValue(key)) {
17314        this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);
17315      } else {
17316        this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);
17317      }
17318    }
17319    invokeChangedCallbacksForDefaultValues() {
17320      for (const { key, name, defaultValue, writer } of this.valueDescriptors) {
17321        if (defaultValue != void 0 && !this.controller.data.has(key)) {
17322          this.invokeChangedCallback(name, writer(defaultValue), void 0);
17323        }
17324      }
17325    }
17326    invokeChangedCallback(name, rawValue, rawOldValue) {
17327      const changedMethodName = `${name}Changed`;
17328      const changedMethod = this.receiver[changedMethodName];
17329      if (typeof changedMethod == "function") {
17330        const descriptor = this.valueDescriptorNameMap[name];
17331        try {
17332          const value = descriptor.reader(rawValue);
17333          let oldValue = rawOldValue;
17334          if (rawOldValue) {
17335            oldValue = descriptor.reader(rawOldValue);
17336          }
17337          changedMethod.call(this.receiver, value, oldValue);
17338        } catch (error2) {
17339          if (error2 instanceof TypeError) {
17340            error2.message = `Stimulus Value "${this.context.identifier}.${descriptor.name}" - ${error2.message}`;
17341          }
17342          throw error2;
17343        }
17344      }
17345    }
17346    get valueDescriptors() {
17347      const { valueDescriptorMap } = this;
17348      return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);
17349    }
17350    get valueDescriptorNameMap() {
17351      const descriptors = {};
17352      Object.keys(this.valueDescriptorMap).forEach((key) => {
17353        const descriptor = this.valueDescriptorMap[key];
17354        descriptors[descriptor.name] = descriptor;
17355      });
17356      return descriptors;
17357    }
17358    hasValue(attributeName) {
17359      const descriptor = this.valueDescriptorNameMap[attributeName];
17360      const hasMethodName = `has${capitalize(descriptor.name)}`;
17361      return this.receiver[hasMethodName];
17362    }
17363  };
17364  var TargetObserver = class {
17365    constructor(context, delegate2) {
17366      this.context = context;
17367      this.delegate = delegate2;
17368      this.targetsByName = new Multimap();
17369    }
17370    start() {
17371      if (!this.tokenListObserver) {
17372        this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);
17373        this.tokenListObserver.start();
17374      }
17375    }
17376    stop() {
17377      if (this.tokenListObserver) {
17378        this.disconnectAllTargets();
17379        this.tokenListObserver.stop();
17380        delete this.tokenListObserver;
17381      }
17382    }
17383    tokenMatched({ element, content: name }) {
17384      if (this.scope.containsElement(element)) {
17385        this.connectTarget(element, name);
17386      }
17387    }
17388    tokenUnmatched({ element, content: name }) {
17389      this.disconnectTarget(element, name);
17390    }
17391    connectTarget(element, name) {
17392      var _a;
17393      if (!this.targetsByName.has(name, element)) {
17394        this.targetsByName.add(name, element);
17395        (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));
17396      }
17397    }
17398    disconnectTarget(element, name) {
17399      var _a;
17400      if (this.targetsByName.has(name, element)) {
17401        this.targetsByName.delete(name, element);
17402        (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));
17403      }
17404    }
17405    disconnectAllTargets() {
17406      for (const name of this.targetsByName.keys) {
17407        for (const element of this.targetsByName.getValuesForKey(name)) {
17408          this.disconnectTarget(element, name);
17409        }
17410      }
17411    }
17412    get attributeName() {
17413      return `data-${this.context.identifier}-target`;
17414    }
17415    get element() {
17416      return this.context.element;
17417    }
17418    get scope() {
17419      return this.context.scope;
17420    }
17421  };
17422  function readInheritableStaticArrayValues(constructor, propertyName) {
17423    const ancestors = getAncestorsForConstructor(constructor);
17424    return Array.from(ancestors.reduce((values, constructor2) => {
17425      getOwnStaticArrayValues(constructor2, propertyName).forEach((name) => values.add(name));
17426      return values;
17427    }, /* @__PURE__ */ new Set()));
17428  }
17429  function readInheritableStaticObjectPairs(constructor, propertyName) {
17430    const ancestors = getAncestorsForConstructor(constructor);
17431    return ancestors.reduce((pairs, constructor2) => {
17432      pairs.push(...getOwnStaticObjectPairs(constructor2, propertyName));
17433      return pairs;
17434    }, []);
17435  }
17436  function getAncestorsForConstructor(constructor) {
17437    const ancestors = [];
17438    while (constructor) {
17439      ancestors.push(constructor);
17440      constructor = Object.getPrototypeOf(constructor);
17441    }
17442    return ancestors.reverse();
17443  }
17444  function getOwnStaticArrayValues(constructor, propertyName) {
17445    const definition = constructor[propertyName];
17446    return Array.isArray(definition) ? definition : [];
17447  }
17448  function getOwnStaticObjectPairs(constructor, propertyName) {
17449    const definition = constructor[propertyName];
17450    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];
17451  }
17452  var OutletObserver = class {
17453    constructor(context, delegate2) {
17454      this.started = false;
17455      this.context = context;
17456      this.delegate = delegate2;
17457      this.outletsByName = new Multimap();
17458      this.outletElementsByName = new Multimap();
17459      this.selectorObserverMap = /* @__PURE__ */ new Map();
17460      this.attributeObserverMap = /* @__PURE__ */ new Map();
17461    }
17462    start() {
17463      if (!this.started) {
17464        this.outletDefinitions.forEach((outletName) => {
17465          this.setupSelectorObserverForOutlet(outletName);
17466          this.setupAttributeObserverForOutlet(outletName);
17467        });
17468        this.started = true;
17469        this.dependentContexts.forEach((context) => context.refresh());
17470      }
17471    }
17472    refresh() {
17473      this.selectorObserverMap.forEach((observer) => observer.refresh());
17474      this.attributeObserverMap.forEach((observer) => observer.refresh());
17475    }
17476    stop() {
17477      if (this.started) {
17478        this.started = false;
17479        this.disconnectAllOutlets();
17480        this.stopSelectorObservers();
17481        this.stopAttributeObservers();
17482      }
17483    }
17484    stopSelectorObservers() {
17485      if (this.selectorObserverMap.size > 0) {
17486        this.selectorObserverMap.forEach((observer) => observer.stop());
17487        this.selectorObserverMap.clear();
17488      }
17489    }
17490    stopAttributeObservers() {
17491      if (this.attributeObserverMap.size > 0) {
17492        this.attributeObserverMap.forEach((observer) => observer.stop());
17493        this.attributeObserverMap.clear();
17494      }
17495    }
17496    selectorMatched(element, _selector, { outletName }) {
17497      const outlet = this.getOutlet(element, outletName);
17498      if (outlet) {
17499        this.connectOutlet(outlet, element, outletName);
17500      }
17501    }
17502    selectorUnmatched(element, _selector, { outletName }) {
17503      const outlet = this.getOutletFromMap(element, outletName);
17504      if (outlet) {
17505        this.disconnectOutlet(outlet, element, outletName);
17506      }
17507    }
17508    selectorMatchElement(element, { outletName }) {
17509      const selector = this.selector(outletName);
17510      const hasOutlet = this.hasOutlet(element, outletName);
17511      const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);
17512      if (selector) {
17513        return hasOutlet && hasOutletController && element.matches(selector);
17514      } else {
17515        return false;
17516      }
17517    }
17518    elementMatchedAttribute(_element, attributeName) {
17519      const outletName = this.getOutletNameFromOutletAttributeName(attributeName);
17520      if (outletName) {
17521        this.updateSelectorObserverForOutlet(outletName);
17522      }
17523    }
17524    elementAttributeValueChanged(_element, attributeName) {
17525      const outletName = this.getOutletNameFromOutletAttributeName(attributeName);
17526      if (outletName) {
17527        this.updateSelectorObserverForOutlet(outletName);
17528      }
17529    }
17530    elementUnmatchedAttribute(_element, attributeName) {
17531      const outletName = this.getOutletNameFromOutletAttributeName(attributeName);
17532      if (outletName) {
17533        this.updateSelectorObserverForOutlet(outletName);
17534      }
17535    }
17536    connectOutlet(outlet, element, outletName) {
17537      var _a;
17538      if (!this.outletElementsByName.has(outletName, element)) {
17539        this.outletsByName.add(outletName, outlet);
17540        this.outletElementsByName.add(outletName, element);
17541        (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));
17542      }
17543    }
17544    disconnectOutlet(outlet, element, outletName) {
17545      var _a;
17546      if (this.outletElementsByName.has(outletName, element)) {
17547        this.outletsByName.delete(outletName, outlet);
17548        this.outletElementsByName.delete(outletName, element);
17549        (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));
17550      }
17551    }
17552    disconnectAllOutlets() {
17553      for (const outletName of this.outletElementsByName.keys) {
17554        for (const element of this.outletElementsByName.getValuesForKey(outletName)) {
17555          for (const outlet of this.outletsByName.getValuesForKey(outletName)) {
17556            this.disconnectOutlet(outlet, element, outletName);
17557          }
17558        }
17559      }
17560    }
17561    updateSelectorObserverForOutlet(outletName) {
17562      const observer = this.selectorObserverMap.get(outletName);
17563      if (observer) {
17564        observer.selector = this.selector(outletName);
17565      }
17566    }
17567    setupSelectorObserverForOutlet(outletName) {
17568      const selector = this.selector(outletName);
17569      const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });
17570      this.selectorObserverMap.set(outletName, selectorObserver);
17571      selectorObserver.start();
17572    }
17573    setupAttributeObserverForOutlet(outletName) {
17574      const attributeName = this.attributeNameForOutletName(outletName);
17575      const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);
17576      this.attributeObserverMap.set(outletName, attributeObserver);
17577      attributeObserver.start();
17578    }
17579    selector(outletName) {
17580      return this.scope.outlets.getSelectorForOutletName(outletName);
17581    }
17582    attributeNameForOutletName(outletName) {
17583      return this.scope.schema.outletAttributeForScope(this.identifier, outletName);
17584    }
17585    getOutletNameFromOutletAttributeName(attributeName) {
17586      return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);
17587    }
17588    get outletDependencies() {
17589      const dependencies = new Multimap();
17590      this.router.modules.forEach((module) => {
17591        const constructor = module.definition.controllerConstructor;
17592        const outlets = readInheritableStaticArrayValues(constructor, "outlets");
17593        outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));
17594      });
17595      return dependencies;
17596    }
17597    get outletDefinitions() {
17598      return this.outletDependencies.getKeysForValue(this.identifier);
17599    }
17600    get dependentControllerIdentifiers() {
17601      return this.outletDependencies.getValuesForKey(this.identifier);
17602    }
17603    get dependentContexts() {
17604      const identifiers = this.dependentControllerIdentifiers;
17605      return this.router.contexts.filter((context) => identifiers.includes(context.identifier));
17606    }
17607    hasOutlet(element, outletName) {
17608      return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);
17609    }
17610    getOutlet(element, outletName) {
17611      return this.application.getControllerForElementAndIdentifier(element, outletName);
17612    }
17613    getOutletFromMap(element, outletName) {
17614      return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);
17615    }
17616    get scope() {
17617      return this.context.scope;
17618    }
17619    get schema() {
17620      return this.context.schema;
17621    }
17622    get identifier() {
17623      return this.context.identifier;
17624    }
17625    get application() {
17626      return this.context.application;
17627    }
17628    get router() {
17629      return this.application.router;
17630    }
17631  };
17632  var Context = class {
17633    constructor(module, scope) {
17634      this.logDebugActivity = (functionName, detail = {}) => {
17635        const { identifier, controller, element } = this;
17636        detail = Object.assign({ identifier, controller, element }, detail);
17637        this.application.logDebugActivity(this.identifier, functionName, detail);
17638      };
17639      this.module = module;
17640      this.scope = scope;
17641      this.controller = new module.controllerConstructor(this);
17642      this.bindingObserver = new BindingObserver(this, this.dispatcher);
17643      this.valueObserver = new ValueObserver(this, this.controller);
17644      this.targetObserver = new TargetObserver(this, this);
17645      this.outletObserver = new OutletObserver(this, this);
17646      try {
17647        this.controller.initialize();
17648        this.logDebugActivity("initialize");
17649      } catch (error2) {
17650        this.handleError(error2, "initializing controller");
17651      }
17652    }
17653    connect() {
17654      this.bindingObserver.start();
17655      this.valueObserver.start();
17656      this.targetObserver.start();
17657      this.outletObserver.start();
17658      try {
17659        this.controller.connect();
17660        this.logDebugActivity("connect");
17661      } catch (error2) {
17662        this.handleError(error2, "connecting controller");
17663      }
17664    }
17665    refresh() {
17666      this.outletObserver.refresh();
17667    }
17668    disconnect() {
17669      try {
17670        this.controller.disconnect();
17671        this.logDebugActivity("disconnect");
17672      } catch (error2) {
17673        this.handleError(error2, "disconnecting controller");
17674      }
17675      this.outletObserver.stop();
17676      this.targetObserver.stop();
17677      this.valueObserver.stop();
17678      this.bindingObserver.stop();
17679    }
17680    get application() {
17681      return this.module.application;
17682    }
17683    get identifier() {
17684      return this.module.identifier;
17685    }
17686    get schema() {
17687      return this.application.schema;
17688    }
17689    get dispatcher() {
17690      return this.application.dispatcher;
17691    }
17692    get element() {
17693      return this.scope.element;
17694    }
17695    get parentElement() {
17696      return this.element.parentElement;
17697    }
17698    handleError(error2, message, detail = {}) {
17699      const { identifier, controller, element } = this;
17700      detail = Object.assign({ identifier, controller, element }, detail);
17701      this.application.handleError(error2, `Error ${message}`, detail);
17702    }
17703    targetConnected(element, name) {
17704      this.invokeControllerMethod(`${name}TargetConnected`, element);
17705    }
17706    targetDisconnected(element, name) {
17707      this.invokeControllerMethod(`${name}TargetDisconnected`, element);
17708    }
17709    outletConnected(outlet, element, name) {
17710      this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);
17711    }
17712    outletDisconnected(outlet, element, name) {
17713      this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);
17714    }
17715    invokeControllerMethod(methodName, ...args) {
17716      const controller = this.controller;
17717      if (typeof controller[methodName] == "function") {
17718        controller[methodName](...args);
17719      }
17720    }
17721  };
17722  function bless(constructor) {
17723    return shadow(constructor, getBlessedProperties(constructor));
17724  }
17725  function shadow(constructor, properties) {
17726    const shadowConstructor = extend2(constructor);
17727    const shadowProperties = getShadowProperties(constructor.prototype, properties);
17728    Object.defineProperties(shadowConstructor.prototype, shadowProperties);
17729    return shadowConstructor;
17730  }
17731  function getBlessedProperties(constructor) {
17732    const blessings = readInheritableStaticArrayValues(constructor, "blessings");
17733    return blessings.reduce((blessedProperties, blessing) => {
17734      const properties = blessing(constructor);
17735      for (const key in properties) {
17736        const descriptor = blessedProperties[key] || {};
17737        blessedProperties[key] = Object.assign(descriptor, properties[key]);
17738      }
17739      return blessedProperties;
17740    }, {});
17741  }
17742  function getShadowProperties(prototype, properties) {
17743    return getOwnKeys(properties).reduce((shadowProperties, key) => {
17744      const descriptor = getShadowedDescriptor(prototype, properties, key);
17745      if (descriptor) {
17746        Object.assign(shadowProperties, { [key]: descriptor });
17747      }
17748      return shadowProperties;
17749    }, {});
17750  }
17751  function getShadowedDescriptor(prototype, properties, key) {
17752    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);
17753    const shadowedByValue = shadowingDescriptor && "value" in shadowingDescriptor;
17754    if (!shadowedByValue) {
17755      const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;
17756      if (shadowingDescriptor) {
17757        descriptor.get = shadowingDescriptor.get || descriptor.get;
17758        descriptor.set = shadowingDescriptor.set || descriptor.set;
17759      }
17760      return descriptor;
17761    }
17762  }
17763  var getOwnKeys = (() => {
17764    if (typeof Object.getOwnPropertySymbols == "function") {
17765      return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];
17766    } else {
17767      return Object.getOwnPropertyNames;
17768    }
17769  })();
17770  var extend2 = (() => {
17771    function extendWithReflect(constructor) {
17772      function extended() {
17773        return Reflect.construct(constructor, arguments, new.target);
17774      }
17775      extended.prototype = Object.create(constructor.prototype, {
17776        constructor: { value: extended }
17777      });
17778      Reflect.setPrototypeOf(extended, constructor);
17779      return extended;
17780    }
17781    function testReflectExtension() {
17782      const a4 = function() {
17783        this.a.call(this);
17784      };
17785      const b4 = extendWithReflect(a4);
17786      b4.prototype.a = function() {
17787      };
17788      return new b4();
17789    }
17790    try {
17791      testReflectExtension();
17792      return extendWithReflect;
17793    } catch (error2) {
17794      return (constructor) => class extended extends constructor {
17795      };
17796    }
17797  })();
17798  function blessDefinition(definition) {
17799    return {
17800      identifier: definition.identifier,
17801      controllerConstructor: bless(definition.controllerConstructor)
17802    };
17803  }
17804  var Module = class {
17805    constructor(application2, definition) {
17806      this.application = application2;
17807      this.definition = blessDefinition(definition);
17808      this.contextsByScope = /* @__PURE__ */ new WeakMap();
17809      this.connectedContexts = /* @__PURE__ */ new Set();
17810    }
17811    get identifier() {
17812      return this.definition.identifier;
17813    }
17814    get controllerConstructor() {
17815      return this.definition.controllerConstructor;
17816    }
17817    get contexts() {
17818      return Array.from(this.connectedContexts);
17819    }
17820    connectContextForScope(scope) {
17821      const context = this.fetchContextForScope(scope);
17822      this.connectedContexts.add(context);
17823      context.connect();
17824    }
17825    disconnectContextForScope(scope) {
17826      const context = this.contextsByScope.get(scope);
17827      if (context) {
17828        this.connectedContexts.delete(context);
17829        context.disconnect();
17830      }
17831    }
17832    fetchContextForScope(scope) {
17833      let context = this.contextsByScope.get(scope);
17834      if (!context) {
17835        context = new Context(this, scope);
17836        this.contextsByScope.set(scope, context);
17837      }
17838      return context;
17839    }
17840  };
17841  var ClassMap = class {
17842    constructor(scope) {
17843      this.scope = scope;
17844    }
17845    has(name) {
17846      return this.data.has(this.getDataKey(name));
17847    }
17848    get(name) {
17849      return this.getAll(name)[0];
17850    }
17851    getAll(name) {
17852      const tokenString = this.data.get(this.getDataKey(name)) || "";
17853      return tokenize(tokenString);
17854    }
17855    getAttributeName(name) {
17856      return this.data.getAttributeNameForKey(this.getDataKey(name));
17857    }
17858    getDataKey(name) {
17859      return `${name}-class`;
17860    }
17861    get data() {
17862      return this.scope.data;
17863    }
17864  };
17865  var DataMap = class {
17866    constructor(scope) {
17867      this.scope = scope;
17868    }
17869    get element() {
17870      return this.scope.element;
17871    }
17872    get identifier() {
17873      return this.scope.identifier;
17874    }
17875    get(key) {
17876      const name = this.getAttributeNameForKey(key);
17877      return this.element.getAttribute(name);
17878    }
17879    set(key, value) {
17880      const name = this.getAttributeNameForKey(key);
17881      this.element.setAttribute(name, value);
17882      return this.get(key);
17883    }
17884    has(key) {
17885      const name = this.getAttributeNameForKey(key);
17886      return this.element.hasAttribute(name);
17887    }
17888    delete(key) {
17889      if (this.has(key)) {
17890        const name = this.getAttributeNameForKey(key);
17891        this.element.removeAttribute(name);
17892        return true;
17893      } else {
17894        return false;
17895      }
17896    }
17897    getAttributeNameForKey(key) {
17898      return `data-${this.identifier}-${dasherize(key)}`;
17899    }
17900  };
17901  var Guide = class {
17902    constructor(logger) {
17903      this.warnedKeysByObject = /* @__PURE__ */ new WeakMap();
17904      this.logger = logger;
17905    }
17906    warn(object, key, message) {
17907      let warnedKeys = this.warnedKeysByObject.get(object);
17908      if (!warnedKeys) {
17909        warnedKeys = /* @__PURE__ */ new Set();
17910        this.warnedKeysByObject.set(object, warnedKeys);
17911      }
17912      if (!warnedKeys.has(key)) {
17913        warnedKeys.add(key);
17914        this.logger.warn(message, object);
17915      }
17916    }
17917  };
17918  function attributeValueContainsToken(attributeName, token) {
17919    return `[${attributeName}~="${token}"]`;
17920  }
17921  var TargetSet = class {
17922    constructor(scope) {
17923      this.scope = scope;
17924    }
17925    get element() {
17926      return this.scope.element;
17927    }
17928    get identifier() {
17929      return this.scope.identifier;
17930    }
17931    get schema() {
17932      return this.scope.schema;
17933    }
17934    has(targetName) {
17935      return this.find(targetName) != null;
17936    }
17937    find(...targetNames) {
17938      return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), void 0);
17939    }
17940    findAll(...targetNames) {
17941      return targetNames.reduce((targets, targetName) => [
17942        ...targets,
17943        ...this.findAllTargets(targetName),
17944        ...this.findAllLegacyTargets(targetName)
17945      ], []);
17946    }
17947    findTarget(targetName) {
17948      const selector = this.getSelectorForTargetName(targetName);
17949      return this.scope.findElement(selector);
17950    }
17951    findAllTargets(targetName) {
17952      const selector = this.getSelectorForTargetName(targetName);
17953      return this.scope.findAllElements(selector);
17954    }
17955    getSelectorForTargetName(targetName) {
17956      const attributeName = this.schema.targetAttributeForScope(this.identifier);
17957      return attributeValueContainsToken(attributeName, targetName);
17958    }
17959    findLegacyTarget(targetName) {
17960      const selector = this.getLegacySelectorForTargetName(targetName);
17961      return this.deprecate(this.scope.findElement(selector), targetName);
17962    }
17963    findAllLegacyTargets(targetName) {
17964      const selector = this.getLegacySelectorForTargetName(targetName);
17965      return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));
17966    }
17967    getLegacySelectorForTargetName(targetName) {
17968      const targetDescriptor = `${this.identifier}.${targetName}`;
17969      return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);
17970    }
17971    deprecate(element, targetName) {
17972      if (element) {
17973        const { identifier } = this;
17974        const attributeName = this.schema.targetAttribute;
17975        const revisedAttributeName = this.schema.targetAttributeForScope(identifier);
17976        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.`);
17977      }
17978      return element;
17979    }
17980    get guide() {
17981      return this.scope.guide;
17982    }
17983  };
17984  var OutletSet = class {
17985    constructor(scope, controllerElement) {
17986      this.scope = scope;
17987      this.controllerElement = controllerElement;
17988    }
17989    get element() {
17990      return this.scope.element;
17991    }
17992    get identifier() {
17993      return this.scope.identifier;
17994    }
17995    get schema() {
17996      return this.scope.schema;
17997    }
17998    has(outletName) {
17999      return this.find(outletName) != null;
18000    }
18001    find(...outletNames) {
18002      return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), void 0);
18003    }
18004    findAll(...outletNames) {
18005      return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);
18006    }
18007    getSelectorForOutletName(outletName) {
18008      const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);
18009      return this.controllerElement.getAttribute(attributeName);
18010    }
18011    findOutlet(outletName) {
18012      const selector = this.getSelectorForOutletName(outletName);
18013      if (selector)
18014        return this.findElement(selector, outletName);
18015    }
18016    findAllOutlets(outletName) {
18017      const selector = this.getSelectorForOutletName(outletName);
18018      return selector ? this.findAllElements(selector, outletName) : [];
18019    }
18020    findElement(selector, outletName) {
18021      const elements = this.scope.queryElements(selector);
18022      return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];
18023    }
18024    findAllElements(selector, outletName) {
18025      const elements = this.scope.queryElements(selector);
18026      return elements.filter((element) => this.matchesElement(element, selector, outletName));
18027    }
18028    matchesElement(element, selector, outletName) {
18029      const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || "";
18030      return element.matches(selector) && controllerAttribute.split(" ").includes(outletName);
18031    }
18032  };
18033  var Scope = class {
18034    constructor(schema, element, identifier, logger) {
18035      this.targets = new TargetSet(this);
18036      this.classes = new ClassMap(this);
18037      this.data = new DataMap(this);
18038      this.containsElement = (element2) => {
18039        return element2.closest(this.controllerSelector) === this.element;
18040      };
18041      this.schema = schema;
18042      this.element = element;
18043      this.identifier = identifier;
18044      this.guide = new Guide(logger);
18045      this.outlets = new OutletSet(this.documentScope, element);
18046    }
18047    findElement(selector) {
18048      return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);
18049    }
18050    findAllElements(selector) {
18051      return [
18052        ...this.element.matches(selector) ? [this.element] : [],
18053        ...this.queryElements(selector).filter(this.containsElement)
18054      ];
18055    }
18056    queryElements(selector) {
18057      return Array.from(this.element.querySelectorAll(selector));
18058    }
18059    get controllerSelector() {
18060      return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);
18061    }
18062    get isDocumentScope() {
18063      return this.element === document.documentElement;
18064    }
18065    get documentScope() {
18066      return this.isDocumentScope ? this : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);
18067    }
18068  };
18069  var ScopeObserver = class {
18070    constructor(element, schema, delegate2) {
18071      this.element = element;
18072      this.schema = schema;
18073      this.delegate = delegate2;
18074      this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);
18075      this.scopesByIdentifierByElement = /* @__PURE__ */ new WeakMap();
18076      this.scopeReferenceCounts = /* @__PURE__ */ new WeakMap();
18077    }
18078    start() {
18079      this.valueListObserver.start();
18080    }
18081    stop() {
18082      this.valueListObserver.stop();
18083    }
18084    get controllerAttribute() {
18085      return this.schema.controllerAttribute;
18086    }
18087    parseValueForToken(token) {
18088      const { element, content: identifier } = token;
18089      return this.parseValueForElementAndIdentifier(element, identifier);
18090    }
18091    parseValueForElementAndIdentifier(element, identifier) {
18092      const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);
18093      let scope = scopesByIdentifier.get(identifier);
18094      if (!scope) {
18095        scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);
18096        scopesByIdentifier.set(identifier, scope);
18097      }
18098      return scope;
18099    }
18100    elementMatchedValue(element, value) {
18101      const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;
18102      this.scopeReferenceCounts.set(value, referenceCount);
18103      if (referenceCount == 1) {
18104        this.delegate.scopeConnected(value);
18105      }
18106    }
18107    elementUnmatchedValue(element, value) {
18108      const referenceCount = this.scopeReferenceCounts.get(value);
18109      if (referenceCount) {
18110        this.scopeReferenceCounts.set(value, referenceCount - 1);
18111        if (referenceCount == 1) {
18112          this.delegate.scopeDisconnected(value);
18113        }
18114      }
18115    }
18116    fetchScopesByIdentifierForElement(element) {
18117      let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);
18118      if (!scopesByIdentifier) {
18119        scopesByIdentifier = /* @__PURE__ */ new Map();
18120        this.scopesByIdentifierByElement.set(element, scopesByIdentifier);
18121      }
18122      return scopesByIdentifier;
18123    }
18124  };
18125  var Router = class {
18126    constructor(application2) {
18127      this.application = application2;
18128      this.scopeObserver = new ScopeObserver(this.element, this.schema, this);
18129      this.scopesByIdentifier = new Multimap();
18130      this.modulesByIdentifier = /* @__PURE__ */ new Map();
18131    }
18132    get element() {
18133      return this.application.element;
18134    }
18135    get schema() {
18136      return this.application.schema;
18137    }
18138    get logger() {
18139      return this.application.logger;
18140    }
18141    get controllerAttribute() {
18142      return this.schema.controllerAttribute;
18143    }
18144    get modules() {
18145      return Array.from(this.modulesByIdentifier.values());
18146    }
18147    get contexts() {
18148      return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);
18149    }
18150    start() {
18151      this.scopeObserver.start();
18152    }
18153    stop() {
18154      this.scopeObserver.stop();
18155    }
18156    loadDefinition(definition) {
18157      this.unloadIdentifier(definition.identifier);
18158      const module = new Module(this.application, definition);
18159      this.connectModule(module);
18160      const afterLoad = definition.controllerConstructor.afterLoad;
18161      if (afterLoad) {
18162        afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);
18163      }
18164    }
18165    unloadIdentifier(identifier) {
18166      const module = this.modulesByIdentifier.get(identifier);
18167      if (module) {
18168        this.disconnectModule(module);
18169      }
18170    }
18171    getContextForElementAndIdentifier(element, identifier) {
18172      const module = this.modulesByIdentifier.get(identifier);
18173      if (module) {
18174        return module.contexts.find((context) => context.element == element);
18175      }
18176    }
18177    proposeToConnectScopeForElementAndIdentifier(element, identifier) {
18178      const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);
18179      if (scope) {
18180        this.scopeObserver.elementMatchedValue(scope.element, scope);
18181      } else {
18182        console.error(`Couldn't find or create scope for identifier: "${identifier}" and element:`, element);
18183      }
18184    }
18185    handleError(error2, message, detail) {
18186      this.application.handleError(error2, message, detail);
18187    }
18188    createScopeForElementAndIdentifier(element, identifier) {
18189      return new Scope(this.schema, element, identifier, this.logger);
18190    }
18191    scopeConnected(scope) {
18192      this.scopesByIdentifier.add(scope.identifier, scope);
18193      const module = this.modulesByIdentifier.get(scope.identifier);
18194      if (module) {
18195        module.connectContextForScope(scope);
18196      }
18197    }
18198    scopeDisconnected(scope) {
18199      this.scopesByIdentifier.delete(scope.identifier, scope);
18200      const module = this.modulesByIdentifier.get(scope.identifier);
18201      if (module) {
18202        module.disconnectContextForScope(scope);
18203      }
18204    }
18205    connectModule(module) {
18206      this.modulesByIdentifier.set(module.identifier, module);
18207      const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);
18208      scopes.forEach((scope) => module.connectContextForScope(scope));
18209    }
18210    disconnectModule(module) {
18211      this.modulesByIdentifier.delete(module.identifier);
18212      const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);
18213      scopes.forEach((scope) => module.disconnectContextForScope(scope));
18214    }
18215  };
18216  var defaultSchema = {
18217    controllerAttribute: "data-controller",
18218    actionAttribute: "data-action",
18219    targetAttribute: "data-target",
18220    targetAttributeForScope: (identifier) => `data-${identifier}-target`,
18221    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,
18222    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((c4) => [c4, c4]))), objectFromEntries("0123456789".split("").map((n3) => [n3, n3])))
18223  };
18224  function objectFromEntries(array) {
18225    return array.reduce((memo, [k4, v4]) => Object.assign(Object.assign({}, memo), { [k4]: v4 }), {});
18226  }
18227  var Application = class {
18228    constructor(element = document.documentElement, schema = defaultSchema) {
18229      this.logger = console;
18230      this.debug = false;
18231      this.logDebugActivity = (identifier, functionName, detail = {}) => {
18232        if (this.debug) {
18233          this.logFormattedMessage(identifier, functionName, detail);
18234        }
18235      };
18236      this.element = element;
18237      this.schema = schema;
18238      this.dispatcher = new Dispatcher(this);
18239      this.router = new Router(this);
18240      this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);
18241    }
18242    static start(element, schema) {
18243      const application2 = new this(element, schema);
18244      application2.start();
18245      return application2;
18246    }
18247    async start() {
18248      await domReady();
18249      this.logDebugActivity("application", "starting");
18250      this.dispatcher.start();
18251      this.router.start();
18252      this.logDebugActivity("application", "start");
18253    }
18254    stop() {
18255      this.logDebugActivity("application", "stopping");
18256      this.dispatcher.stop();
18257      this.router.stop();
18258      this.logDebugActivity("application", "stop");
18259    }
18260    register(identifier, controllerConstructor) {
18261      this.load({ identifier, controllerConstructor });
18262    }
18263    registerActionOption(name, filter) {
18264      this.actionDescriptorFilters[name] = filter;
18265    }
18266    load(head, ...rest) {
18267      const definitions = Array.isArray(head) ? head : [head, ...rest];
18268      definitions.forEach((definition) => {
18269        if (definition.controllerConstructor.shouldLoad) {
18270          this.router.loadDefinition(definition);
18271        }
18272      });
18273    }
18274    unload(head, ...rest) {
18275      const identifiers = Array.isArray(head) ? head : [head, ...rest];
18276      identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));
18277    }
18278    get controllers() {
18279      return this.router.contexts.map((context) => context.controller);
18280    }
18281    getControllerForElementAndIdentifier(element, identifier) {
18282      const context = this.router.getContextForElementAndIdentifier(element, identifier);
18283      return context ? context.controller : null;
18284    }
18285    handleError(error2, message, detail) {
18286      var _a;
18287      this.logger.error(`%s
18288
18289%o
18290
18291%o`, message, error2, detail);
18292      (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, "", 0, 0, error2);
18293    }
18294    logFormattedMessage(identifier, functionName, detail = {}) {
18295      detail = Object.assign({ application: this }, detail);
18296      this.logger.groupCollapsed(`${identifier} #${functionName}`);
18297      this.logger.log("details:", Object.assign({}, detail));
18298      this.logger.groupEnd();
18299    }
18300  };
18301  function domReady() {
18302    return new Promise((resolve) => {
18303      if (document.readyState == "loading") {
18304        document.addEventListener("DOMContentLoaded", () => resolve());
18305      } else {
18306        resolve();
18307      }
18308    });
18309  }
18310  function ClassPropertiesBlessing(constructor) {
18311    const classes2 = readInheritableStaticArrayValues(constructor, "classes");
18312    return classes2.reduce((properties, classDefinition) => {
18313      return Object.assign(properties, propertiesForClassDefinition(classDefinition));
18314    }, {});
18315  }
18316  function propertiesForClassDefinition(key) {
18317    return {
18318      [`${key}Class`]: {
18319        get() {
18320          const { classes: classes2 } = this;
18321          if (classes2.has(key)) {
18322            return classes2.get(key);
18323          } else {
18324            const attribute = classes2.getAttributeName(key);
18325            throw new Error(`Missing attribute "${attribute}"`);
18326          }
18327        }
18328      },
18329      [`${key}Classes`]: {
18330        get() {
18331          return this.classes.getAll(key);
18332        }
18333      },
18334      [`has${capitalize(key)}Class`]: {
18335        get() {
18336          return this.classes.has(key);
18337        }
18338      }
18339    };
18340  }
18341  function OutletPropertiesBlessing(constructor) {
18342    const outlets = readInheritableStaticArrayValues(constructor, "outlets");
18343    return outlets.reduce((properties, outletDefinition) => {
18344      return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));
18345    }, {});
18346  }
18347  function getOutletController(controller, element, identifier) {
18348    return controller.application.getControllerForElementAndIdentifier(element, identifier);
18349  }
18350  function getControllerAndEnsureConnectedScope(controller, element, outletName) {
18351    let outletController = getOutletController(controller, element, outletName);
18352    if (outletController)
18353      return outletController;
18354    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);
18355    outletController = getOutletController(controller, element, outletName);
18356    if (outletController)
18357      return outletController;
18358  }
18359  function propertiesForOutletDefinition(name) {
18360    const camelizedName = namespaceCamelize(name);
18361    return {
18362      [`${camelizedName}Outlet`]: {
18363        get() {
18364          const outletElement = this.outlets.find(name);
18365          const selector = this.outlets.getSelectorForOutletName(name);
18366          if (outletElement) {
18367            const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);
18368            if (outletController)
18369              return outletController;
18370            throw new Error(`The provided outlet element is missing an outlet controller "${name}" instance for host controller "${this.identifier}"`);
18371          }
18372          throw new Error(`Missing outlet element "${name}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${selector}".`);
18373        }
18374      },
18375      [`${camelizedName}Outlets`]: {
18376        get() {
18377          const outlets = this.outlets.findAll(name);
18378          if (outlets.length > 0) {
18379            return outlets.map((outletElement) => {
18380              const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);
18381              if (outletController)
18382                return outletController;
18383              console.warn(`The provided outlet element is missing an outlet controller "${name}" instance for host controller "${this.identifier}"`, outletElement);
18384            }).filter((controller) => controller);
18385          }
18386          return [];
18387        }
18388      },
18389      [`${camelizedName}OutletElement`]: {
18390        get() {
18391          const outletElement = this.outlets.find(name);
18392          const selector = this.outlets.getSelectorForOutletName(name);
18393          if (outletElement) {
18394            return outletElement;
18395          } else {
18396            throw new Error(`Missing outlet element "${name}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${selector}".`);
18397          }
18398        }
18399      },
18400      [`${camelizedName}OutletElements`]: {
18401        get() {
18402          return this.outlets.findAll(name);
18403        }
18404      },
18405      [`has${capitalize(camelizedName)}Outlet`]: {
18406        get() {
18407          return this.outlets.has(name);
18408        }
18409      }
18410    };
18411  }
18412  function TargetPropertiesBlessing(constructor) {
18413    const targets = readInheritableStaticArrayValues(constructor, "targets");
18414    return targets.reduce((properties, targetDefinition) => {
18415      return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));
18416    }, {});
18417  }
18418  function propertiesForTargetDefinition(name) {
18419    return {
18420      [`${name}Target`]: {
18421        get() {
18422          const target = this.targets.find(name);
18423          if (target) {
18424            return target;
18425          } else {
18426            throw new Error(`Missing target element "${name}" for "${this.identifier}" controller`);
18427          }
18428        }
18429      },
18430      [`${name}Targets`]: {
18431        get() {
18432          return this.targets.findAll(name);
18433        }
18434      },
18435      [`has${capitalize(name)}Target`]: {
18436        get() {
18437          return this.targets.has(name);
18438        }
18439      }
18440    };
18441  }
18442  function ValuePropertiesBlessing(constructor) {
18443    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, "values");
18444    const propertyDescriptorMap = {
18445      valueDescriptorMap: {
18446        get() {
18447          return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {
18448            const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);
18449            const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);
18450            return Object.assign(result, { [attributeName]: valueDescriptor });
18451          }, {});
18452        }
18453      }
18454    };
18455    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {
18456      return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));
18457    }, propertyDescriptorMap);
18458  }
18459  function propertiesForValueDefinitionPair(valueDefinitionPair, controller) {
18460    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);
18461    const { key, name, reader: read2, writer: write2 } = definition;
18462    return {
18463      [name]: {
18464        get() {
18465          const value = this.data.get(key);
18466          if (value !== null) {
18467            return read2(value);
18468          } else {
18469            return definition.defaultValue;
18470          }
18471        },
18472        set(value) {
18473          if (value === void 0) {
18474            this.data.delete(key);
18475          } else {
18476            this.data.set(key, write2(value));
18477          }
18478        }
18479      },
18480      [`has${capitalize(name)}`]: {
18481        get() {
18482          return this.data.has(key) || definition.hasCustomDefaultValue;
18483        }
18484      }
18485    };
18486  }
18487  function parseValueDefinitionPair([token, typeDefinition], controller) {
18488    return valueDescriptorForTokenAndTypeDefinition({
18489      controller,
18490      token,
18491      typeDefinition
18492    });
18493  }
18494  function parseValueTypeConstant(constant) {
18495    switch (constant) {
18496      case Array:
18497        return "array";
18498      case Boolean:
18499        return "boolean";
18500      case Number:
18501        return "number";
18502      case Object:
18503        return "object";
18504      case String:
18505        return "string";
18506    }
18507  }
18508  function parseValueTypeDefault(defaultValue) {
18509    switch (typeof defaultValue) {
18510      case "boolean":
18511        return "boolean";
18512      case "number":
18513        return "number";
18514      case "string":
18515        return "string";
18516    }
18517    if (Array.isArray(defaultValue))
18518      return "array";
18519    if (Object.prototype.toString.call(defaultValue) === "[object Object]")
18520      return "object";
18521  }
18522  function parseValueTypeObject(payload) {
18523    const { controller, token, typeObject } = payload;
18524    const hasType = isSomething(typeObject.type);
18525    const hasDefault = isSomething(typeObject.default);
18526    const fullObject = hasType && hasDefault;
18527    const onlyType = hasType && !hasDefault;
18528    const onlyDefault = !hasType && hasDefault;
18529    const typeFromObject = parseValueTypeConstant(typeObject.type);
18530    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);
18531    if (onlyType)
18532      return typeFromObject;
18533    if (onlyDefault)
18534      return typeFromDefaultValue;
18535    if (typeFromObject !== typeFromDefaultValue) {
18536      const propertyPath = controller ? `${controller}.${token}` : token;
18537      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}".`);
18538    }
18539    if (fullObject)
18540      return typeFromObject;
18541  }
18542  function parseValueTypeDefinition(payload) {
18543    const { controller, token, typeDefinition } = payload;
18544    const typeObject = { controller, token, typeObject: typeDefinition };
18545    const typeFromObject = parseValueTypeObject(typeObject);
18546    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);
18547    const typeFromConstant = parseValueTypeConstant(typeDefinition);
18548    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;
18549    if (type)
18550      return type;
18551    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;
18552    throw new Error(`Unknown value type "${propertyPath}" for "${token}" value`);
18553  }
18554  function defaultValueForDefinition(typeDefinition) {
18555    const constant = parseValueTypeConstant(typeDefinition);
18556    if (constant)
18557      return defaultValuesByType[constant];
18558    const hasDefault = hasProperty(typeDefinition, "default");
18559    const hasType = hasProperty(typeDefinition, "type");
18560    const typeObject = typeDefinition;
18561    if (hasDefault)
18562      return typeObject.default;
18563    if (hasType) {
18564      const { type } = typeObject;
18565      const constantFromType = parseValueTypeConstant(type);
18566      if (constantFromType)
18567        return defaultValuesByType[constantFromType];
18568    }
18569    return typeDefinition;
18570  }
18571  function valueDescriptorForTokenAndTypeDefinition(payload) {
18572    const { token, typeDefinition } = payload;
18573    const key = `${dasherize(token)}-value`;
18574    const type = parseValueTypeDefinition(payload);
18575    return {
18576      type,
18577      key,
18578      name: camelize(key),
18579      get defaultValue() {
18580        return defaultValueForDefinition(typeDefinition);
18581      },
18582      get hasCustomDefaultValue() {
18583        return parseValueTypeDefault(typeDefinition) !== void 0;
18584      },
18585      reader: readers[type],
18586      writer: writers[type] || writers.default
18587    };
18588  }
18589  var defaultValuesByType = {
18590    get array() {
18591      return [];
18592    },
18593    boolean: false,
18594    number: 0,
18595    get object() {
18596      return {};
18597    },
18598    string: ""
18599  };
18600  var readers = {
18601    array(value) {
18602      const array = JSON.parse(value);
18603      if (!Array.isArray(array)) {
18604        throw new TypeError(`expected value of type "array" but instead got value "${value}" of type "${parseValueTypeDefault(array)}"`);
18605      }
18606      return array;
18607    },
18608    boolean(value) {
18609      return !(value == "0" || String(value).toLowerCase() == "false");
18610    },
18611    number(value) {
18612      return Number(value.replace(/_/g, ""));
18613    },
18614    object(value) {
18615      const object = JSON.parse(value);
18616      if (object === null || typeof object != "object" || Array.isArray(object)) {
18617        throw new TypeError(`expected value of type "object" but instead got value "${value}" of type "${parseValueTypeDefault(object)}"`);
18618      }
18619      return object;
18620    },
18621    string(value) {
18622      return value;
18623    }
18624  };
18625  var writers = {
18626    default: writeString,
18627    array: writeJSON,
18628    object: writeJSON
18629  };
18630  function writeJSON(value) {
18631    return JSON.stringify(value);
18632  }
18633  function writeString(value) {
18634    return `${value}`;
18635  }
18636  var Controller = class {
18637    constructor(context) {
18638      this.context = context;
18639    }
18640    static get shouldLoad() {
18641      return true;
18642    }
18643    static afterLoad(_identifier, _application) {
18644      return;
18645    }
18646    get application() {
18647      return this.context.application;
18648    }
18649    get scope() {
18650      return this.context.scope;
18651    }
18652    get element() {
18653      return this.scope.element;
18654    }
18655    get identifier() {
18656      return this.scope.identifier;
18657    }
18658    get targets() {
18659      return this.scope.targets;
18660    }
18661    get outlets() {
18662      return this.scope.outlets;
18663    }
18664    get classes() {
18665      return this.scope.classes;
18666    }
18667    get data() {
18668      return this.scope.data;
18669    }
18670    initialize() {
18671    }
18672    connect() {
18673    }
18674    disconnect() {
18675    }
18676    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true } = {}) {
18677      const type = prefix ? `${prefix}:${eventName}` : eventName;
18678      const event2 = new CustomEvent(type, { detail, bubbles, cancelable });
18679      target.dispatchEvent(event2);
18680      return event2;
18681    }
18682  };
18683  Controller.blessings = [
18684    ClassPropertiesBlessing,
18685    TargetPropertiesBlessing,
18686    ValuePropertiesBlessing,
18687    OutletPropertiesBlessing
18688  ];
18689  Controller.targets = [];
18690  Controller.outlets = [];
18691  Controller.values = {};
18692
18693  
18693// app/javascript/controllers/application.js
18694  var application = Application.start();
18695  application.debug = false;
18696  window.Stimulus = application;
18697
18698  
18698// app/javascript/controllers/action_text_character_limiter_controller.js
18699  var action_text_character_limiter_controller_default = class extends Controller {
18700    connect() {
18701      this.updateCounter();
18702      this.inputTarget.addEventListener("input", this.updateCounter.bind(this));
18703      this.inputTarget.addEventListener("paste", this.handlePaste.bind(this));
18704    }
18705    disconnect() {
18706      this.inputTarget.removeEventListener("input", this.updateCounter.bind(this));
18707      this.inputTarget.removeEventListener("paste", this.updateCounter.bind(this));
18708    }
18709    handlePaste(event2) {
18710      const pastedText = (event2.clipboardData || window.clipboardData).getData("text");
18711      const plainText = pastedText.replace(/<[^>]*>/g, "");
18712      let currentLength = this.inputTarget.value.length;
18713      let remaining;
18714      if (currentLength) {
18715        remaining = 500 - currentLength;
18716      }
18717      if (plainText.length > remaining) {
18718        event2.preventDefault();
18719        this.inputTarget.value += plainText.substring(0, remaining);
18720        this.updateCounter();
18721      } else {
18722        this.inputTarget.value += plainText;
18723        this.updateCounter();
18724      }
18725    }
18726    updateCounter() {
18727      let currentLength;
18728      let remaining;
18729      if (this.inputTarget.value) {
18730        const tempDiv = document.createElement("div");
18731        tempDiv.innerHTML = this.inputTarget.value;
18732        const plainText = tempDiv.textContent || tempDiv.innerText || "";
18733        currentLength = plainText.length;
18734      }
18735      if (currentLength) {
18736        remaining = 500 - currentLength;
18737      } else {
18738        remaining = 500;
18739      }
18740      this.counterTarget.textContent = `${remaining} characters remaining`;
18741      if (remaining < 0) {
18742        this.counterTarget.classList.add("text-red-500");
18743        this.inputTarget.classList.add("border-red-500");
18744        this.inputTarget.value = this.inputTarget.value.substring(0, 500);
18745      } else {
18746        this.counterTarget.classList.remove("text-red-500");
18747        this.inputTarget.classList.remove("border-red-500");
18748      }
18749    }
18750  };
18751  __publicField(action_text_character_limiter_controller_default, "targets", ["input", "counter"]);
18752
18753  
18753// app/javascript/controllers/activities_pika_controller.js
18754  var import_pikaday = __toESM(require_pikaday());
18755  var activities_pika_controller_default = class extends Controller {
18756    connect() {
18757      const activitiesPicker = new import_pikaday.default({
18758        field: document.getElementById("timetables_item_search_date"),
18759        bound: false,
18760        container: document.getElementById("activities-calendar")
18761      });
18762    }
18763  };
18764
18765  
18765// app/javascript/controllers/adv_search_controller.js
18766  var adv_search_controller_default = class extends Controller {
18767    connect() {
18768      const modal = document.querySelector(".advanced-search-modal");
18769      const content = document.querySelector(".advanced-search-modal__content");
18770      modal.addEventListener("click", (e4) => {
18771        if (e4.target !== content) {
18772          modal.classList.remove("open");
18773        }
18774      });
18775    }
18776    open() {
18777      const modal = document.querySelector(".advanced-search-modal");
18778      modal.classList.add("open");
18779    }
18780    close() {
18781      const modal = document.querySelector(".advanced-search-modal");
18782      modal.classList.remove("open");
18783    }
18784  };
18785
18786  
18786// app/javascript/controllers/aft_occ_controller.js
18787  var aft_occ_controller_default = class extends Controller {
18788    connect() {
18789      let radio = this.element.querySelector("input[type=radio]");
18790      let field;
18791      let endAfter = this.element.querySelector(".item-group__end-occurences");
18792      let endOn = this.element.querySelector(".item-group__end-date");
18793      if (endAfter) {
18794        field = this.element.querySelector("input[type=number]");
18795      } else if (endOn) {
18796        field = this.element.querySelector("input[type=text]");
18797      }
18798      field.addEventListener("change", () => {
18799        radio.checked = true;
18800      });
18801    }
18802  };
18803
18804  
18804// app/javascript/controllers/alerts_controller.js
18805  var alerts_controller_default = class extends Controller {
18806    connect() {
18807      let alert2 = document.querySelector("section.alert");
18808      let alertColor;
18809      let alertControls = document.querySelector(".alerts-holder>.grey-panel");
18810      let alertRow = document.querySelector(".alerts-holder>div:nth-child(2)");
18811      let toggleBtn = document.querySelector(".alerts-holder__btn");
18812      if (alert2) {
18813        alertColor = window.getComputedStyle(alert2).backgroundColor;
18814      }
18815      if (alertControls) {
18816        if (alert2) {
18817          alertControls.style.backgroundColor = alertColor;
18818        }
18819        ;
18820        toggleBtn.addEventListener("click", () => {
18821          alertControls.classList.toggle("alert-controls--expanded");
18822          alertRow.classList.toggle("alerts-row-expanded");
18823          if (alertControls.style.backgroundColor == alertColor) {
18824            alertControls.style.backgroundColor = "white";
18825            toggleBtn.innerHTML = "Hide Alerts";
18826          } else {
18827            alertControls.style.backgroundColor = alertColor;
18828            toggleBtn.innerHTML = "Service updates are available at this location";
18829          }
18830          ;
18831        });
18832      }
18833      ;
18834    }
18835  };
18836
18837  
18837// app/javascript/controllers/alerts_toggle_controller.js
18838  var alerts_toggle_controller_default = class extends Controller {
18839    connect() {
18840      document.addEventListener("click", (e4) => {
18841        if (!this.btnTarget.contains(e4.target) && !this.modalTarget.contains(e4.target)) {
18842          this.close();
18843        }
18844      });
18845    }
18846    toggle() {
18847      this.modalTarget.classList.toggle("open");
18848    }
18849    close() {
18850      this.modalTarget.classList.remove("open");
18851    }
18852  };
18853  __publicField(alerts_toggle_controller_default, "targets", ["modal", "btn"]);
18854
18855  
18855// app/javascript/controllers/amount_amend_controller.js
18856  var amount_amend_controller_default = class extends Controller {
18857    connect() {
18858      if (this.inputTarget.value === "") {
18859        this.inputTarget.value = 0;
18860      }
18861    }
18862    decrease() {
18863      const submit = document.querySelector("input.btn");
18864      if (this.inputTarget.value > 0) {
18865        this.inputTarget.value--;
18866        this.submit();
18867      }
18868    }
18869    increase() {
18870      this.inputTarget.value++;
18871      this.submit();
18872    }
18873    submit() {
18874      const submitEvent = new CustomEvent("submit", { bubbles: true, cancelable: true });
18875      this.inputTarget.form.dispatchEvent(submitEvent);
18876    }
18877  };
18878  __publicField(amount_amend_controller_default, "targets", ["input", "submit"]);
18879
18880  
18880// app/javascript/controllers/asset_grid_controller.js
18881  var asset_grid_controller_default = class extends Controller {
18882    connect() {
18883      if (window.innerWidth >= 1023) {
18884        const imgs = document.querySelector(".multi-pane-video__asset-grid").querySelectorAll("img");
18885        imgs.forEach((img) => {
18886          img.addEventListener("click", () => {
18887            img.classList.toggle("expanded");
18888          });
18889        });
18890      }
18891    }
18892  };
18893
18894  
18894// app/javascript/controllers/attd_val_controller.js
18895  var attd_val_controller_default = class extends Controller {
18896    connect() {
18897      const input = this.element.querySelector("#spaces_finder_capacity");
18898      const dummyInput = this.element.querySelector(".attendees__dummy");
18899      const incr = this.element.querySelector(".attendees__incr");
18900      const decr = this.element.querySelector(".attendees__decr");
18901      let i4 = this.capacityValue;
18902      input.addEventListener("change", () => {
18903        i4 = input.value;
18904        dummyInput.value = input.value;
18905      });
18906      dummyInput.addEventListener("change", () => {
18907        i4 = dummyInput.value;
18908        input.value = dummyInput.value;
18909      });
18910      incr.addEventListener("click", () => {
18911        if (i4 < 150) {
18912          i4++;
18913          input.value = i4;
18914          dummyInput.value = i4;
18915          input.dispatchEvent(new Event("input", { bubbles: true }));
18916        }
18917      });
18918      decr.addEventListener("click", () => {
18919        if (i4 >= 2) {
18920          i4--;
18921          input.value = i4;
18922          dummyInput.value = i4;
18923          input.dispatchEvent(new Event("input", { bubbles: true }));
18924        }
18925      });
18926    }
18927    open() {
18928      this.modalTarget.classList.add("open");
18929    }
18930    close() {
18931      this.modalTarget.classList.remove("open");
18932    }
18933  };
18934  __publicField(attd_val_controller_default, "values", { capacity: Number });
18935  __publicField(attd_val_controller_default, "targets", ["modal"]);
18936
18937  
18937// app/javascript/controllers/auto_submit_controller.js
18938  var auto_submit_controller_default = class extends Controller {
18939    submit(_event) {
18940      const form = this.formValue ? document.getElementById(this.formValue) : this.element;
18941      if (form?.requestSubmit) {
18942        form.requestSubmit();
18943      } else {
18944        form?.submit();
18945      }
18946    }
18947  };
18948  __publicField(auto_submit_controller_default, "values", { form: String });
18949
18950  
18950// app/javascript/controllers/availability_all_day_toggle_controller.js
18951  var availability_all_day_toggle_controller_default = class extends Controller {
18952    connect() {
18953    }
18954    clearAllDay(event2) {
18955      this.allDayTarget.checked = false;
18956    }
18957    setAllDayTimes(event2) {
18958      if (this.allDayTarget.checked) {
18959        this.startHourTarget.value = "00";
18960        this.startMinuteTarget.value = "00";
18961        this.finishHourTarget.value = "23";
18962        this.finishMinuteTarget.value = "59";
18963      }
18964    }
18965    get startHourTarget() {
18966      return this.startTimeTarget.querySelector('select[id$="_4i"]');
18967    }
18968    get startMinuteTarget() {
18969      return this.startTimeTarget.querySelector('select[id$="_5i"]');
18970    }
18971    get finishHourTarget() {
18972      return this.finishTimeTarget.querySelector('select[id$="_4i"]');
18973    }
18974    get finishMinuteTarget() {
18975      return this.finishTimeTarget.querySelector('select[id$="_5i"]');
18976    }
18977  };
18978  __publicField(availability_all_day_toggle_controller_default, "targets", ["allDay", "finishTime", "startTime"]);
18979
18980  
18980// app/javascript/controllers/banner_img_controller.js
18981  var banner_img_controller_default = class extends Controller {
18982    connect() {
18983      this.containerTarget;
18984      const mobileImg = new String(this.containerTarget.getAttribute("data-image-url-mobile"));
18985      const tabletImg = new String(this.containerTarget.getAttribute("data-image-url-tablet"));
18986      const desktopImg = new String(this.containerTarget.getAttribute("data-image-url-desktop"));
18987      if (window.innerWidth > 1024) {
18988        if (desktopImg.length > 0) {
18989          this.containerTarget.style.backgroundImage = `url('${desktopImg}')`;
18990        } else if (tabletImg.length > 0) {
18991          this.containerTarget.style.backgroundImage = `url('${tabletImg}')`;
18992        } else {
18993          this.containerTarget.style.backgroundImage = `url('${mobileImg}')`;
18994        }
18995      } else if (window.innerWidth < 1025 && window.innerWidth > 501) {
18996        if (tabletImg.length > 0) {
18997          this.containerTarget.style.backgroundImage = `url('${tabletImg}')`;
18998        } else if (mobileImg.length > 0) {
18999          this.containerTarget.style.backgroundImage = `url('${mobileImg}')`;
19000        } else {
19001          this.containerTarget.style.backgroundImage = `url('${desktopImg}')`;
19002        }
19003      } else {
19004        if (mobileImg.length > 0) {
19005          this.containerTarget.style.backgroundImage = `url('${mobileImg}')`;
19006        } else if (tabletImg.length > 0) {
19007          this.containerTarget.style.backgroundImage = `url('${tabletImg}')`;
19008        } else {
19009          this.containerTarget.style.backgroundImage = `url('${desktopImg}')`;
19010        }
19011      }
19012    }
19013  };
19014  __publicField(banner_img_controller_default, "targets", ["container"]);
19015
19016  
19016// app/javascript/controllers/billing_address_form_controller.js
19017  var billing_address_form_controller_default = class extends Controller {
19018    connect() {
19019      this.blankForm();
19020    }
19021    change(_event) {
19022      var value = this.billingAddressIdTarget.value;
19023      if (value === "") {
19024        this.showForm();
19025      } else {
19026        this.hideForm();
19027      }
19028    }
19029    blankForm() {
19030      this.firstnameTarget.value = "";
19031      this.lastnameTarget.value = "";
19032      this.emailTarget.value = "";
19033      this.phoneTarget.value = "";
19034      this.address1Target.value = "";
19035      this.address2Target.value = "";
19036      this.address3Target.value = "";
19037      this.townTarget.value = "";
19038      this.countyTarget.value = "";
19039      this.postcodeTarget.value = "";
19040    }
19041    hideForm() {
19042      this.firstnameWrapperTarget.classList.add("hidden");
19043      this.lastnameWrapperTarget.classList.add("hidden");
19044      this.emailWrapperTarget.classList.add("hidden");
19045      this.phoneWrapperTarget.classList.add("hidden");
19046      this.address1WrapperTarget.classList.add("hidden");
19047      this.address2WrapperTarget.classList.add("hidden");
19048      this.address3WrapperTarget.classList.add("hidden");
19049      this.townWrapperTarget.classList.add("hidden");
19050      this.countyWrapperTarget.classList.add("hidden");
19051      this.postcodeWrapperTarget.classList.add("hidden");
19052      this.blankForm();
19053    }
19054    showForm() {
19055      this.firstnameWrapperTarget.classList.remove("hidden");
19056      this.lastnameWrapperTarget.classList.remove("hidden");
19057      this.emailWrapperTarget.classList.remove("hidden");
19058      this.phoneWrapperTarget.classList.remove("hidden");
19059      this.address1WrapperTarget.classList.remove("hidden");
19060      this.address2WrapperTarget.classList.remove("hidden");
19061      this.address3WrapperTarget.classList.remove("hidden");
19062      this.townWrapperTarget.classList.remove("hidden");
19063      this.countyWrapperTarget.classList.remove("hidden");
19064      this.postcodeWrapperTarget.classList.remove("hidden");
19065    }
19066  };
19067  __publicField(billing_address_form_controller_default, "targets", ["id", "firstname", "lastname", "email", "phone", "address1", "address2", "address3", "town", "county", "postcode", "addressFields", "billingAddressId", "form", "firstnameWrapper", "lastnameWrapper", "emailWrapper", "phoneWrapper", "address1Wrapper", "address2Wrapper", "address3Wrapper", "townWrapper", "countyWrapper", "postcodeWrapper"]);
19068
19069  
19069// app/javascript/controllers/blocked_delete_controller.js
19070  var blocked_delete_controller_default = class extends Controller {
19071    alert(event2) {
19072      event2.preventDefault();
19073      window.alert(this.messageValue);
19074    }
19075  };
19076  __publicField(blocked_delete_controller_default, "values", { message: String });
19077
19078  
19078// app/javascript/controllers/booking_button_enabler_controller.js
19079  var booking_button_enabler_controller_default = class extends Controller {
19080    connect() {
19081      this.checkInputs();
19082      this.inputTargets.forEach((input) => {
19083        console.log(input, input.value);
19084        input.addEventListener("input", () => this.checkInputs());
19085        input.addEventListener("change", () => this.checkInputs());
19086      });
19087    }
19088    checkInputs() {
19089      const allFilled = this.inputTargets.every((input) => input.value && input.value.trim() !== "");
19090      if (allFilled) {
19091        this.buttonTarget.classList.remove("btn-disabled");
19092      } else {
19093        this.buttonTarget.classList.add("btn-disabled");
19094      }
19095    }
19096  };
19097  __publicField(booking_button_enabler_controller_default, "targets", ["input", "button"]);
19098
19099  
19099// app/javascript/controllers/borough_reload_controller.js
19100  var borough_reload_controller_default = class extends Controller {
19101    reload(event2) {
19102      const form = event2.target.closest("form");
19103      const query = form?.querySelector('[name="prism_works_search[query]"]')?.value || "";
19104      const params = new URLSearchParams({
19105        "prism_works_search[borough_id]": event2.target.value,
19106        "prism_works_search[query]": query
19107      });
19108      window.location.assign(`${this.urlValue}?${params}`);
19109    }
19110  };
19111  __publicField(borough_reload_controller_default, "values", { url: String });
19112
19113  
19113// app/javascript/controllers/booking_form_controller.js
19114  var booking_form_controller_default = class extends Controller {
19115    connect() {
19116      const dateField = document.getElementById("booking_date");
19117      const inputs = [...document.querySelectorAll("input:not([type=submit]):not([type=hidden]):not(.trix-input):not(.trix-button)")];
19118      const selects = [...document.querySelectorAll("select")];
19119      let formElements2 = inputs.concat(selects);
19120      const submit = document.querySelector("input.btn");
19121      inputs.forEach((el) => {
19122        el.addEventListener("input", () => {
19123          submit.click();
19124        });
19125      });
19126      selects.forEach((el) => {
19127        el.addEventListener("change", () => {
19128          submit.click();
19129        });
19130      });
19131      const attendees = document.querySelector("#booking_attendee_count");
19132      if (attendees.value == "") {
19133        attendees.value = 1;
19134      }
19135    }
19136  };
19137
19138  
19138// app/javascript/controllers/booking_form_section_controller.js
19139  var booking_form_section_controller_default = class extends Controller {
19140    connect() {
19141      this.formSectionTarget.value = "event_type";
19142    }
19143    open(target) {
19144      target.classList.add("open");
19145      target.classList.remove("closed");
19146    }
19147    openDate() {
19148      this.open(this.dateBodyTarget);
19149      this.close(this.dateHeaderTarget);
19150    }
19151    openFloorplans() {
19152      this.formSectionTarget.value = "floorplans";
19153      this.closeDate();
19154      this.open(this.floorplansBodyTarget);
19155      this.close(this.floorplansHeaderTarget);
19156    }
19157    close(target) {
19158      target.classList.add("closed");
19159      target.classList.remove("open");
19160    }
19161    closeEventType() {
19162      this.close(this.eventTypeBodyTarget);
19163      this.open(this.eventTypeHeaderTarget);
19164    }
19165    closeDate() {
19166      this.close(this.dateBodyTarget);
19167      this.open(this.dateHeaderTarget);
19168    }
19169    closeFloorplans() {
19170      this.close(this.floorplansBodyTarget);
19171      this.open(this.floorplansHeaderTarget);
19172    }
19173    confirmEventType() {
19174      if (this.formSectionTarget.value === "event_type") {
19175        this.formSectionTarget.value = "date";
19176      }
19177      this.closeEventType();
19178      this.openDate();
19179    }
19180    confirmDate() {
19181      if (this.formSectionTarget.value === "date") {
19182        this.formSectionTarget.value = "floorplans";
19183      }
19184      this.closeDate();
19185      this.openFloorplans();
19186    }
19187    confirmFloorplans() {
19188      if (this.formSectionTarget.value = "floorplans") {
19189        this.formSectionTarget.value = "extras";
19190      }
19191      this.closeFloorplans();
19192      this.open(this.extrasBodyTarget);
19193      this.close(this.extrasHeaderTarget);
19194    }
19195    confirmExtras() {
19196      if (this.formSectionTarget.value === "extras") {
19197        this.formSectionTarget.value = "";
19198      }
19199      this.close(this.extrasBodyTarget);
19200      this.open(this.extrasHeaderTarget);
19201    }
19202    keepExtras() {
19203      this.formSectionTarget.value = "extras";
19204    }
19205  };
19206  __publicField(booking_form_section_controller_default, "targets", [
19207    "dateBody",
19208    "dateHeader",
19209    "extrasBody",
19210    "extrasHeader",
19211    "floorplansBody",
19212    "floorplansHeader",
19213    "formSection",
19214    "eventTypeBody",
19215    "eventTypeHeader"
19216  ]);
19217
19218  
19218// app/javascript/controllers/booking_form_submit_button_controller.js
19219  var booking_form_submit_button_controller_default = class extends Controller {
19220    connect() {
19221    }
19222    removeCheckDate() {
19223      this.checkDateTarget.value = "";
19224    }
19225  };
19226  __publicField(booking_form_submit_button_controller_default, "targets", ["checkDate"]);
19227
19228  
19228// app/javascript/controllers/booking_form_time_and_duration_button_enabler_controller.js
19229  var booking_form_time_and_duration_button_enabler_controller_default = class extends Controller {
19230    connect() {
19231      if (this.errorsTarget.innerHTML.trim() != "") {
19232        this.buttonTarget.classList.add("btn-disabled");
19233      }
19234    }
19235  };
19236  __publicField(booking_form_time_and_duration_button_enabler_controller_default, "targets", ["errors", "button"]);
19237
19238  
19238// app/javascript/controllers/booking_summary_controller.js
19239  var booking_summary_controller_default = class extends Controller {
19240    connect() {
19241    }
19242    toggle() {
19243      this.element.classList.toggle("closed");
19244    }
19245  };
19246
19247  
19247// app/javascript/controllers/booking_type_reason_controller.js
19248  var booking_type_reason_controller_default = class extends Controller {
19249    connect() {
19250      this.enableButton();
19251      this.addManualConfirmationListener();
19252    }
19253    toggleOtherReasonSection() {
19254      const required = this.reasonSelectTarget.options[this.reasonSelectTarget.selectedIndex].getAttribute("data-reason-required");
19255      if (required === "true") {
19256        this.otherReasonSectionTarget.classList.add("open");
19257      } else {
19258        this.otherReasonSectionTarget.classList.remove("open");
19259      }
19260      this.updateSummarySelect();
19261    }
19262    enableButton() {
19263      const required = this.reasonSelectTarget.options[this.reasonSelectTarget.selectedIndex].getAttribute("data-reason-required");
19264      const selectValue = this.reasonSelectTarget.value;
19265      const reason = this.otherReasonInputTarget.value;
19266      const checkbox = this.manualConfirmationInputTarget.querySelector("#booking_manual_confirmation_understood");
19267      const checkboxChecked = checkbox && checkbox.checked;
19268      if (selectValue && selectValue !== "" && required !== "true") {
19269        this.confirmButtonTarget.classList.remove("btn-disabled");
19270      } else if (required == "true" && reason.trim() !== "" && checkboxChecked) {
19271        this.confirmButtonTarget.classList.remove("btn-disabled");
19272      } else {
19273        this.confirmButtonTarget.classList.add("btn-disabled");
19274      }
19275    }
19276    addManualConfirmationListener() {
19277      if (this.manualConfirmationInputTarget) {
19278        const checkbox = this.manualConfirmationInputTarget.querySelector("#booking_manual_confirmation_understood");
19279        if (checkbox) {
19280          checkbox.addEventListener("change", () => this.enableButton());
19281        }
19282      }
19283    }
19284    updateSummarySelect() {
19285      const selectedOption = this.reasonSelectTarget.options[this.reasonSelectTarget.selectedIndex];
19286      const required = selectedOption.getAttribute("data-reason-required");
19287      const value = selectedOption ? selectedOption.text : "";
19288      this.summarySelectValueTarget.textContent = value;
19289      this.toggleSummarySelectContainer(value);
19290      this.toggleSummaryOtherInfoContainer(required);
19291    }
19292    toggleSummarySelectContainer(value) {
19293      if (value && value !== "" && value !== "Select...") {
19294        this.summarySelectContainerTarget.classList.add("open");
19295      } else {
19296        this.summarySelectContainerTarget.classList.remove("open");
19297      }
19298    }
19299    updateSummaryOtherInfo() {
19300      const info = this.otherReasonInputTarget.value.trim();
19301      this.summaryOtherInfoValueTarget.textContent = info;
19302      this.toggleSummaryOtherInfoContainer();
19303    }
19304    toggleSummaryOtherInfoContainer(required) {
19305      if (!required) {
19306        required = this.reasonSelectTarget.options[this.reasonSelectTarget.selectedIndex].getAttribute("data-reason-required");
19307      }
19308      if (required === "true") {
19309        this.summaryOtherInfoContainerTarget.classList.add("open");
19310      } else {
19311        this.summaryOtherInfoContainerTarget.classList.remove("open");
19312      }
19313    }
19314  };
19315  __publicField(booking_type_reason_controller_default, "targets", [
19316    "reasonSelect",
19317    "otherReasonSection",
19318    "otherReasonInput",
19319    "manualConfirmationInput",
19320    "confirmButton",
19321    "summarySelectContainer",
19322    "summarySelectValue",
19323    "summaryOtherInfoContainer",
19324    "summaryOtherInfoValue"
19325  ]);
19326
19327  
vendor: 16,340 bytes, lines 19327-19671
19327// node_modules/preact/dist/preact.module.js
19328  var n2;
19329  var l2;
19330  var u2;
19331  var i2;
19332  var t3;
19333  var r2;
19334  var o2;
19335  var f2;
19336  var e2;
19337  var c2 = {};
19338  var s2 = [];
19339  var a2 = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;
19340  function h2(n3, l4) {
19341    for (var u4 in l4)
19342      n3[u4] = l4[u4];
19343    return n3;
19344  }
19345  function v2(n3) {
19346    var l4 = n3.parentNode;
19347    l4 && l4.removeChild(n3);
19348  }
19349  function y2(l4, u4, i4) {
19350    var t5, r4, o3, f4 = {};
19351    for (o3 in u4)
19352      "key" == o3 ? t5 = u4[o3] : "ref" == o3 ? r4 = u4[o3] : f4[o3] = u4[o3];
19353    if (arguments.length > 2 && (f4.children = arguments.length > 3 ? n2.call(arguments, 2) : i4), "function" == typeof l4 && null != l4.defaultProps)
19354      for (o3 in l4.defaultProps)
19355        void 0 === f4[o3] && (f4[o3] = l4.defaultProps[o3]);
19356    return p2(l4, f4, t5, r4, null);
19357  }
19358  function p2(n3, i4, t5, r4, o3) {
19359    var f4 = { type: n3, props: i4, key: t5, ref: r4, __k: null, __: null, __b: 0, __e: null, __d: void 0, __c: null, __h: null, constructor: void 0, __v: null == o3 ? ++u2 : o3 };
19360    return null == o3 && null != l2.vnode && l2.vnode(f4), f4;
19361  }
19362  function d2() {
19363    return { current: null };
19364  }
19365  function _2(n3) {
19366    return n3.children;
19367  }
19368  function k2(n3, l4, u4, i4, t5) {
19369    var r4;
19370    for (r4 in u4)
19371      "children" === r4 || "key" === r4 || r4 in l4 || g2(n3, r4, null, u4[r4], i4);
19372    for (r4 in l4)
19373      t5 && "function" != typeof l4[r4] || "children" === r4 || "key" === r4 || "value" === r4 || "checked" === r4 || u4[r4] === l4[r4] || g2(n3, r4, l4[r4], u4[r4], i4);
19374  }
19375  function b2(n3, l4, u4) {
19376    "-" === l4[0] ? n3.setProperty(l4, null == u4 ? "" : u4) : n3[l4] = null == u4 ? "" : "number" != typeof u4 || a2.test(l4) ? u4 : u4 + "px";
19377  }
19378  function g2(n3, l4, u4, i4, t5) {
19379    var r4;
19380    n:
19381      if ("style" === l4)
19382        if ("string" == typeof u4)
19383          n3.style.cssText = u4;
19384        else {
19385          if ("string" == typeof i4 && (n3.style.cssText = i4 = ""), i4)
19386            for (l4 in i4)
19387              u4 && l4 in u4 || b2(n3.style, l4, "");
19388          if (u4)
19389            for (l4 in u4)
19390              i4 && u4[l4] === i4[l4] || b2(n3.style, l4, u4[l4]);
19391        }
19392      else if ("o" === l4[0] && "n" === l4[1])
19393        r4 = l4 !== (l4 = l4.replace(/Capture$/, "")), l4 = l4.toLowerCase() in n3 ? l4.toLowerCase().slice(2) : l4.slice(2), n3.l || (n3.l = {}), n3.l[l4 + r4] = u4, u4 ? i4 || n3.addEventListener(l4, r4 ? w2 : m2, r4) : n3.removeEventListener(l4, r4 ? w2 : m2, r4);
19394      else if ("dangerouslySetInnerHTML" !== l4) {
19395        if (t5)
19396          l4 = l4.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
19397        else if ("width" !== l4 && "height" !== l4 && "href" !== l4 && "list" !== l4 && "form" !== l4 && "tabIndex" !== l4 && "download" !== l4 && l4 in n3)
19398          try {
19399            n3[l4] = null == u4 ? "" : u4;
19400            break n;
19401          } catch (n4) {
19402          }
19403        "function" == typeof u4 || (null == u4 || false === u4 && -1 == l4.indexOf("-") ? n3.removeAttribute(l4) : n3.setAttribute(l4, u4));
19404      }
19405  }
19406  function m2(n3) {
19407    t3 = true;
19408    try {
19409      return this.l[n3.type + false](l2.event ? l2.event(n3) : n3);
19410    } finally {
19411      t3 = false;
19412    }
19413  }
19414  function w2(n3) {
19415    t3 = true;
19416    try {
19417      return this.l[n3.type + true](l2.event ? l2.event(n3) : n3);
19418    } finally {
19419      t3 = false;
19420    }
19421  }
19422  function x2(n3, l4) {
19423    this.props = n3, this.context = l4;
19424  }
19425  function A2(n3, l4) {
19426    if (null == l4)
19427      return n3.__ ? A2(n3.__, n3.__.__k.indexOf(n3) + 1) : null;
19428    for (var u4; l4 < n3.__k.length; l4++)
19429      if (null != (u4 = n3.__k[l4]) && null != u4.__e)
19430        return u4.__e;
19431    return "function" == typeof n3.type ? A2(n3) : null;
19432  }
19433  function P2(n3) {
19434    var l4, u4;
19435    if (null != (n3 = n3.__) && null != n3.__c) {
19436      for (n3.__e = n3.__c.base = null, l4 = 0; l4 < n3.__k.length; l4++)
19437        if (null != (u4 = n3.__k[l4]) && null != u4.__e) {
19438          n3.__e = n3.__c.base = u4.__e;
19439          break;
19440        }
19441      return P2(n3);
19442    }
19443  }
19444  function C2(n3) {
19445    t3 ? setTimeout(n3) : f2(n3);
19446  }
19447  function T2(n3) {
19448    (!n3.__d && (n3.__d = true) && r2.push(n3) && !$2.__r++ || o2 !== l2.debounceRendering) && ((o2 = l2.debounceRendering) || C2)($2);
19449  }
19450  function $2() {
19451    var n3, l4, u4, i4, t5, o3, f4, e4;
19452    for (r2.sort(function(n4, l5) {
19453      return n4.__v.__b - l5.__v.__b;
19454    }); n3 = r2.shift(); )
19455      n3.__d && (l4 = r2.length, i4 = void 0, t5 = void 0, f4 = (o3 = (u4 = n3).__v).__e, (e4 = u4.__P) && (i4 = [], (t5 = h2({}, o3)).__v = o3.__v + 1, M2(e4, o3, t5, u4.__n, void 0 !== e4.ownerSVGElement, null != o3.__h ? [f4] : null, i4, null == f4 ? A2(o3) : f4, o3.__h), N2(i4, o3), o3.__e != f4 && P2(o3)), r2.length > l4 && r2.sort(function(n4, l5) {
19456        return n4.__v.__b - l5.__v.__b;
19457      }));
19458    $2.__r = 0;
19459  }
19460  function H2(n3, l4, u4, i4, t5, r4, o3, f4, e4, a4) {
19461    var h4, v4, y4, d3, k4, b4, g5, m5 = i4 && i4.__k || s2, w5 = m5.length;
19462    for (u4.__k = [], h4 = 0; h4 < l4.length; h4++)
19463      if (null != (d3 = u4.__k[h4] = null == (d3 = l4[h4]) || "boolean" == typeof d3 ? null : "string" == typeof d3 || "number" == typeof d3 || "bigint" == typeof d3 ? p2(null, d3, null, null, d3) : Array.isArray(d3) ? p2(_2, { children: d3 }, null, null, null) : d3.__b > 0 ? p2(d3.type, d3.props, d3.key, d3.ref ? d3.ref : null, d3.__v) : d3)) {
19464        if (d3.__ = u4, d3.__b = u4.__b + 1, null === (y4 = m5[h4]) || y4 && d3.key == y4.key && d3.type === y4.type)
19465          m5[h4] = void 0;
19466        else
19467          for (v4 = 0; v4 < w5; v4++) {
19468            if ((y4 = m5[v4]) && d3.key == y4.key && d3.type === y4.type) {
19469              m5[v4] = void 0;
19470              break;
19471            }
19472            y4 = null;
19473          }
19474        M2(n3, d3, y4 = y4 || c2, t5, r4, o3, f4, e4, a4), k4 = d3.__e, (v4 = d3.ref) && y4.ref != v4 && (g5 || (g5 = []), y4.ref && g5.push(y4.ref, null, d3), g5.push(v4, d3.__c || k4, d3)), null != k4 ? (null == b4 && (b4 = k4), "function" == typeof d3.type && d3.__k === y4.__k ? d3.__d = e4 = I2(d3, e4, n3) : e4 = z2(n3, d3, y4, m5, k4, e4), "function" == typeof u4.type && (u4.__d = e4)) : e4 && y4.__e == e4 && e4.parentNode != n3 && (e4 = A2(y4));
19475      }
19476    for (u4.__e = b4, h4 = w5; h4--; )
19477      null != m5[h4] && ("function" == typeof u4.type && null != m5[h4].__e && m5[h4].__e == u4.__d && (u4.__d = L2(i4).nextSibling), q2(m5[h4], m5[h4]));
19478    if (g5)
19479      for (h4 = 0; h4 < g5.length; h4++)
19480        S2(g5[h4], g5[++h4], g5[++h4]);
19481  }
19482  function I2(n3, l4, u4) {
19483    for (var i4, t5 = n3.__k, r4 = 0; t5 && r4 < t5.length; r4++)
19484      (i4 = t5[r4]) && (i4.__ = n3, l4 = "function" == typeof i4.type ? I2(i4, l4, u4) : z2(u4, i4, i4, t5, i4.__e, l4));
19485    return l4;
19486  }
19487  function j2(n3, l4) {
19488    return l4 = l4 || [], null == n3 || "boolean" == typeof n3 || (Array.isArray(n3) ? n3.some(function(n4) {
19489      j2(n4, l4);
19490    }) : l4.push(n3)), l4;
19491  }
19492  function z2(n3, l4, u4, i4, t5, r4) {
19493    var o3, f4, e4;
19494    if (void 0 !== l4.__d)
19495      o3 = l4.__d, l4.__d = void 0;
19496    else if (null == u4 || t5 != r4 || null == t5.parentNode)
19497      n:
19498        if (null == r4 || r4.parentNode !== n3)
19499          n3.appendChild(t5), o3 = null;
19500        else {
19501          for (f4 = r4, e4 = 0; (f4 = f4.nextSibling) && e4 < i4.length; e4 += 1)
19502            if (f4 == t5)
19503              break n;
19504          n3.insertBefore(t5, r4), o3 = r4;
19505        }
19506    return void 0 !== o3 ? o3 : t5.nextSibling;
19507  }
19508  function L2(n3) {
19509    var l4, u4, i4;
19510    if (null == n3.type || "string" == typeof n3.type)
19511      return n3.__e;
19512    if (n3.__k) {
19513      for (l4 = n3.__k.length - 1; l4 >= 0; l4--)
19514        if ((u4 = n3.__k[l4]) && (i4 = L2(u4)))
19515          return i4;
19516    }
19517    return null;
19518  }
19519  function M2(n3, u4, i4, t5, r4, o3, f4, e4, c4) {
19520    var s4, a4, v4, y4, p4, d3, k4, b4, g5, m5, w5, A4, P4, C4, T5, $5 = u4.type;
19521    if (void 0 !== u4.constructor)
19522      return null;
19523    null != i4.__h && (c4 = i4.__h, e4 = u4.__e = i4.__e, u4.__h = null, o3 = [e4]), (s4 = l2.__b) && s4(u4);
19524    try {
19525      n:
19526        if ("function" == typeof $5) {
19527          if (b4 = u4.props, g5 = (s4 = $5.contextType) && t5[s4.__c], m5 = s4 ? g5 ? g5.props.value : s4.__ : t5, i4.__c ? k4 = (a4 = u4.__c = i4.__c).__ = a4.__E : ("prototype" in $5 && $5.prototype.render ? u4.__c = a4 = new $5(b4, m5) : (u4.__c = a4 = new x2(b4, m5), a4.constructor = $5, a4.render = B2), g5 && g5.sub(a4), a4.props = b4, a4.state || (a4.state = {}), a4.context = m5, a4.__n = t5, v4 = a4.__d = true, a4.__h = [], a4._sb = []), null == a4.__s && (a4.__s = a4.state), null != $5.getDerivedStateFromProps && (a4.__s == a4.state && (a4.__s = h2({}, a4.__s)), h2(a4.__s, $5.getDerivedStateFromProps(b4, a4.__s))), y4 = a4.props, p4 = a4.state, a4.__v = u4, v4)
19528            null == $5.getDerivedStateFromProps && null != a4.componentWillMount && a4.componentWillMount(), null != a4.componentDidMount && a4.__h.push(a4.componentDidMount);
19529          else {
19530            if (null == $5.getDerivedStateFromProps && b4 !== y4 && null != a4.componentWillReceiveProps && a4.componentWillReceiveProps(b4, m5), !a4.__e && null != a4.shouldComponentUpdate && false === a4.shouldComponentUpdate(b4, a4.__s, m5) || u4.__v === i4.__v) {
19531              for (u4.__v !== i4.__v && (a4.props = b4, a4.state = a4.__s, a4.__d = false), u4.__e = i4.__e, u4.__k = i4.__k, u4.__k.forEach(function(n4) {
19532                n4 && (n4.__ = u4);
19533              }), w5 = 0; w5 < a4._sb.length; w5++)
19534                a4.__h.push(a4._sb[w5]);
19535              a4._sb = [], a4.__h.length && f4.push(a4);
19536              break n;
19537            }
19538            null != a4.componentWillUpdate && a4.componentWillUpdate(b4, a4.__s, m5), null != a4.componentDidUpdate && a4.__h.push(function() {
19539              a4.componentDidUpdate(y4, p4, d3);
19540            });
19541          }
19542          if (a4.context = m5, a4.props = b4, a4.__P = n3, A4 = l2.__r, P4 = 0, "prototype" in $5 && $5.prototype.render) {
19543            for (a4.state = a4.__s, a4.__d = false, A4 && A4(u4), s4 = a4.render(a4.props, a4.state, a4.context), C4 = 0; C4 < a4._sb.length; C4++)
19544              a4.__h.push(a4._sb[C4]);
19545            a4._sb = [];
19546          } else
19547            do {
19548              a4.__d = false, A4 && A4(u4), s4 = a4.render(a4.props, a4.state, a4.context), a4.state = a4.__s;
19549            } while (a4.__d && ++P4 < 25);
19550          a4.state = a4.__s, null != a4.getChildContext && (t5 = h2(h2({}, t5), a4.getChildContext())), v4 || null == a4.getSnapshotBeforeUpdate || (d3 = a4.getSnapshotBeforeUpdate(y4, p4)), T5 = null != s4 && s4.type === _2 && null == s4.key ? s4.props.children : s4, H2(n3, Array.isArray(T5) ? T5 : [T5], u4, i4, t5, r4, o3, f4, e4, c4), a4.base = u4.__e, u4.__h = null, a4.__h.length && f4.push(a4), k4 && (a4.__E = a4.__ = null), a4.__e = false;
19551        } else
19552          null == o3 && u4.__v === i4.__v ? (u4.__k = i4.__k, u4.__e = i4.__e) : u4.__e = O2(i4.__e, u4, i4, t5, r4, o3, f4, c4);
19553      (s4 = l2.diffed) && s4(u4);
19554    } catch (n4) {
19555      u4.__v = null, (c4 || null != o3) && (u4.__e = e4, u4.__h = !!c4, o3[o3.indexOf(e4)] = null), l2.__e(n4, u4, i4);
19556    }
19557  }
19558  function N2(n3, u4) {
19559    l2.__c && l2.__c(u4, n3), n3.some(function(u5) {
19560      try {
19561        n3 = u5.__h, u5.__h = [], n3.some(function(n4) {
19562          n4.call(u5);
19563        });
19564      } catch (n4) {
19565        l2.__e(n4, u5.__v);
19566      }
19567    });
19568  }
19569  function O2(l4, u4, i4, t5, r4, o3, f4, e4) {
19570    var s4, a4, h4, y4 = i4.props, p4 = u4.props, d3 = u4.type, _4 = 0;
19571    if ("svg" === d3 && (r4 = true), null != o3) {
19572      for (; _4 < o3.length; _4++)
19573        if ((s4 = o3[_4]) && "setAttribute" in s4 == !!d3 && (d3 ? s4.localName === d3 : 3 === s4.nodeType)) {
19574          l4 = s4, o3[_4] = null;
19575          break;
19576        }
19577    }
19578    if (null == l4) {
19579      if (null === d3)
19580        return document.createTextNode(p4);
19581      l4 = r4 ? document.createElementNS("http://www.w3.org/2000/svg", d3) : document.createElement(d3, p4.is && p4), o3 = null, e4 = false;
19582    }
19583    if (null === d3)
19584      y4 === p4 || e4 && l4.data === p4 || (l4.data = p4);
19585    else {
19586      if (o3 = o3 && n2.call(l4.childNodes), a4 = (y4 = i4.props || c2).dangerouslySetInnerHTML, h4 = p4.dangerouslySetInnerHTML, !e4) {
19587        if (null != o3)
19588          for (y4 = {}, _4 = 0; _4 < l4.attributes.length; _4++)
19589            y4[l4.attributes[_4].name] = l4.attributes[_4].value;
19590        (h4 || a4) && (h4 && (a4 && h4.__html == a4.__html || h4.__html === l4.innerHTML) || (l4.innerHTML = h4 && h4.__html || ""));
19591      }
19592      if (k2(l4, p4, y4, r4, e4), h4)
19593        u4.__k = [];
19594      else if (_4 = u4.props.children, H2(l4, Array.isArray(_4) ? _4 : [_4], u4, i4, t5, r4 && "foreignObject" !== d3, o3, f4, o3 ? o3[0] : i4.__k && A2(i4, 0), e4), null != o3)
19595        for (_4 = o3.length; _4--; )
19596          null != o3[_4] && v2(o3[_4]);
19597      e4 || ("value" in p4 && void 0 !== (_4 = p4.value) && (_4 !== l4.value || "progress" === d3 && !_4 || "option" === d3 && _4 !== y4.value) && g2(l4, "value", _4, y4.value, false), "checked" in p4 && void 0 !== (_4 = p4.checked) && _4 !== l4.checked && g2(l4, "checked", _4, y4.checked, false));
19598    }
19599    return l4;
19600  }
19601  function S2(n3, u4, i4) {
19602    try {
19603      "function" == typeof n3 ? n3(u4) : n3.current = u4;
19604    } catch (n4) {
19605      l2.__e(n4, i4);
19606    }
19607  }
19608  function q2(n3, u4, i4) {
19609    var t5, r4;
19610    if (l2.unmount && l2.unmount(n3), (t5 = n3.ref) && (t5.current && t5.current !== n3.__e || S2(t5, null, u4)), null != (t5 = n3.__c)) {
19611      if (t5.componentWillUnmount)
19612        try {
19613          t5.componentWillUnmount();
19614        } catch (n4) {
19615          l2.__e(n4, u4);
19616        }
19617      t5.base = t5.__P = null, n3.__c = void 0;
19618    }
19619    if (t5 = n3.__k)
19620      for (r4 = 0; r4 < t5.length; r4++)
19621        t5[r4] && q2(t5[r4], u4, i4 || "function" != typeof n3.type);
19622    i4 || null == n3.__e || v2(n3.__e), n3.__ = n3.__e = n3.__d = void 0;
19623  }
19624  function B2(n3, l4, u4) {
19625    return this.constructor(n3, u4);
19626  }
19627  function D2(u4, i4, t5) {
19628    var r4, o3, f4;
19629    l2.__ && l2.__(u4, i4), o3 = (r4 = "function" == typeof t5) ? null : t5 && t5.__k || i4.__k, f4 = [], M2(i4, u4 = (!r4 && t5 || i4).__k = y2(_2, null, [u4]), o3 || c2, c2, void 0 !== i4.ownerSVGElement, !r4 && t5 ? [t5] : o3 ? null : i4.firstChild ? n2.call(i4.childNodes) : null, f4, !r4 && t5 ? t5 : o3 ? o3.__e : i4.firstChild, r4), N2(f4, u4);
19630  }
19631  function G2(n3, l4) {
19632    var u4 = { __c: l4 = "__cC" + e2++, __: n3, Consumer: function(n4, l5) {
19633      return n4.children(l5);
19634    }, Provider: function(n4) {
19635      var u5, i4;
19636      return this.getChildContext || (u5 = [], (i4 = {})[l4] = this, this.getChildContext = function() {
19637        return i4;
19638      }, this.shouldComponentUpdate = function(n5) {
19639        this.props.value !== n5.value && u5.some(function(n6) {
19640          n6.__e = true, T2(n6);
19641        });
19642      }, this.sub = function(n5) {
19643        u5.push(n5);
19644        var l5 = n5.componentWillUnmount;
19645        n5.componentWillUnmount = function() {
19646          u5.splice(u5.indexOf(n5), 1), l5 && l5.call(n5);
19647        };
19648      }), n4.children;
19649    } };
19650    return u4.Provider.__ = u4.Consumer.contextType = u4;
19651  }
19652  n2 = s2.slice, l2 = { __e: function(n3, l4, u4, i4) {
19653    for (var t5, r4, o3; l4 = l4.__; )
19654      if ((t5 = l4.__c) && !t5.__)
19655        try {
19656          if ((r4 = t5.constructor) && null != r4.getDerivedStateFromError && (t5.setState(r4.getDerivedStateFromError(n3)), o3 = t5.__d), null != t5.componentDidCatch && (t5.componentDidCatch(n3, i4 || {}), o3 = t5.__d), o3)
19657            return t5.__E = t5;
19658        } catch (l5) {
19659          n3 = l5;
19660        }
19661    throw n3;
19662  } }, u2 = 0, i2 = function(n3) {
19663    return null != n3 && void 0 === n3.constructor;
19664  }, t3 = false, x2.prototype.setState = function(n3, l4) {
19665    var u4;
19666    u4 = null != this.__s && this.__s !== this.state ? this.__s : this.__s = h2({}, this.state), "function" == typeof n3 && (n3 = n3(h2({}, u4), this.props)), n3 && h2(u4, n3), null != n3 && this.__v && (l4 && this._sb.push(l4), T2(this));
19667  }, x2.prototype.forceUpdate = function(n3) {
19668    this.__v && (this.__e = true, n3 && this.__h.push(n3), T2(this));
19669  }, x2.prototype.render = _2, r2 = [], f2 = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, $2.__r = 0, e2 = 0;
19670
19671  
vendor: 2,272 bytes, lines 19671-19745
19671// node_modules/preact/hooks/dist/hooks.module.js
19672  var t4;
19673  var r3;
19674  var u3;
19675  var i3;
19676  var f3 = [];
19677  var c3 = [];
19678  var e3 = l2.__b;
19679  var a3 = l2.__r;
19680  var v3 = l2.diffed;
19681  var l3 = l2.__c;
19682  var m3 = l2.unmount;
19683  function b3() {
19684    for (var t5; t5 = f3.shift(); )
19685      if (t5.__P && t5.__H)
19686        try {
19687          t5.__H.__h.forEach(k3), t5.__H.__h.forEach(w3), t5.__H.__h = [];
19688        } catch (r4) {
19689          t5.__H.__h = [], l2.__e(r4, t5.__v);
19690        }
19691  }
19692  l2.__b = function(n3) {
19693    r3 = null, e3 && e3(n3);
19694  }, l2.__r = function(n3) {
19695    a3 && a3(n3), t4 = 0;
19696    var i4 = (r3 = n3.__c).__H;
19697    i4 && (u3 === r3 ? (i4.__h = [], r3.__h = [], i4.__.forEach(function(n4) {
19698      n4.__N && (n4.__ = n4.__N), n4.__V = c3, n4.__N = n4.i = void 0;
19699    })) : (i4.__h.forEach(k3), i4.__h.forEach(w3), i4.__h = [])), u3 = r3;
19700  }, l2.diffed = function(t5) {
19701    v3 && v3(t5);
19702    var o3 = t5.__c;
19703    o3 && o3.__H && (o3.__H.__h.length && (1 !== f3.push(o3) && i3 === l2.requestAnimationFrame || ((i3 = l2.requestAnimationFrame) || j3)(b3)), o3.__H.__.forEach(function(n3) {
19704      n3.i && (n3.__H = n3.i), n3.__V !== c3 && (n3.__ = n3.__V), n3.i = void 0, n3.__V = c3;
19705    })), u3 = r3 = null;
19706  }, l2.__c = function(t5, r4) {
19707    r4.some(function(t6) {
19708      try {
19709        t6.__h.forEach(k3), t6.__h = t6.__h.filter(function(n3) {
19710          return !n3.__ || w3(n3);
19711        });
19712      } catch (u4) {
19713        r4.some(function(n3) {
19714          n3.__h && (n3.__h = []);
19715        }), r4 = [], l2.__e(u4, t6.__v);
19716      }
19717    }), l3 && l3(t5, r4);
19718  }, l2.unmount = function(t5) {
19719    m3 && m3(t5);
19720    var r4, u4 = t5.__c;
19721    u4 && u4.__H && (u4.__H.__.forEach(function(n3) {
19722      try {
19723        k3(n3);
19724      } catch (n4) {
19725        r4 = n4;
19726      }
19727    }), u4.__H = void 0, r4 && l2.__e(r4, u4.__v));
19728  };
19729  var g3 = "function" == typeof requestAnimationFrame;
19730  function j3(n3) {
19731    var t5, r4 = function() {
19732      clearTimeout(u4), g3 && cancelAnimationFrame(t5), setTimeout(n3);
19733    }, u4 = setTimeout(r4, 100);
19734    g3 && (t5 = requestAnimationFrame(r4));
19735  }
19736  function k3(n3) {
19737    var t5 = r3, u4 = n3.__c;
19738    "function" == typeof u4 && (n3.__c = void 0, u4()), r3 = t5;
19739  }
19740  function w3(n3) {
19741    var t5 = r3;
19742    n3.__c = n3.__(), r3 = t5;
19743  }
19744
19745  
vendor: 8,323 bytes, lines 19745-19941
19745// node_modules/preact/compat/dist/compat.module.js
19746  function g4(n3, t5) {
19747    for (var e4 in t5)
19748      n3[e4] = t5[e4];
19749    return n3;
19750  }
19751  function C3(n3, t5) {
19752    for (var e4 in n3)
19753      if ("__source" !== e4 && !(e4 in t5))
19754        return true;
19755    for (var r4 in t5)
19756      if ("__source" !== r4 && n3[r4] !== t5[r4])
19757        return true;
19758    return false;
19759  }
19760  function w4(n3) {
19761    this.props = n3;
19762  }
19763  (w4.prototype = new x2()).isPureReactComponent = true, w4.prototype.shouldComponentUpdate = function(n3, t5) {
19764    return C3(this.props, n3) || C3(this.state, t5);
19765  };
19766  var x4 = l2.__b;
19767  l2.__b = function(n3) {
19768    n3.type && n3.type.__f && n3.ref && (n3.props.ref = n3.ref, n3.ref = null), x4 && x4(n3);
19769  };
19770  var N3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;
19771  var T4 = l2.__e;
19772  l2.__e = function(n3, t5, e4, r4) {
19773    if (n3.then) {
19774      for (var u4, o3 = t5; o3 = o3.__; )
19775        if ((u4 = o3.__c) && u4.__c)
19776          return null == t5.__e && (t5.__e = e4.__e, t5.__k = e4.__k), u4.__c(n3, t5);
19777    }
19778    T4(n3, t5, e4, r4);
19779  };
19780  var I3 = l2.unmount;
19781  function L3(n3, t5, e4) {
19782    return n3 && (n3.__c && n3.__c.__H && (n3.__c.__H.__.forEach(function(n4) {
19783      "function" == typeof n4.__c && n4.__c();
19784    }), n3.__c.__H = null), null != (n3 = g4({}, n3)).__c && (n3.__c.__P === e4 && (n3.__c.__P = t5), n3.__c = null), n3.__k = n3.__k && n3.__k.map(function(n4) {
19785      return L3(n4, t5, e4);
19786    })), n3;
19787  }
19788  function U2(n3, t5, e4) {
19789    return n3 && (n3.__v = null, n3.__k = n3.__k && n3.__k.map(function(n4) {
19790      return U2(n4, t5, e4);
19791    }), n3.__c && n3.__c.__P === t5 && (n3.__e && e4.insertBefore(n3.__e, n3.__d), n3.__c.__e = true, n3.__c.__P = e4)), n3;
19792  }
19793  function D3() {
19794    this.__u = 0, this.t = null, this.__b = null;
19795  }
19796  function F4(n3) {
19797    var t5 = n3.__.__c;
19798    return t5 && t5.__a && t5.__a(n3);
19799  }
19800  function V3() {
19801    this.u = null, this.o = null;
19802  }
19803  l2.unmount = function(n3) {
19804    var t5 = n3.__c;
19805    t5 && t5.__R && t5.__R(), t5 && true === n3.__h && (n3.type = null), I3 && I3(n3);
19806  }, (D3.prototype = new x2()).__c = function(n3, t5) {
19807    var e4 = t5.__c, r4 = this;
19808    null == r4.t && (r4.t = []), r4.t.push(e4);
19809    var u4 = F4(r4.__v), o3 = false, i4 = function() {
19810      o3 || (o3 = true, e4.__R = null, u4 ? u4(l4) : l4());
19811    };
19812    e4.__R = i4;
19813    var l4 = function() {
19814      if (!--r4.__u) {
19815        if (r4.state.__a) {
19816          var n4 = r4.state.__a;
19817          r4.__v.__k[0] = U2(n4, n4.__c.__P, n4.__c.__O);
19818        }
19819        var t6;
19820        for (r4.setState({ __a: r4.__b = null }); t6 = r4.t.pop(); )
19821          t6.forceUpdate();
19822      }
19823    }, c4 = true === t5.__h;
19824    r4.__u++ || c4 || r4.setState({ __a: r4.__b = r4.__v.__k[0] }), n3.then(i4, i4);
19825  }, D3.prototype.componentWillUnmount = function() {
19826    this.t = [];
19827  }, D3.prototype.render = function(n3, e4) {
19828    if (this.__b) {
19829      if (this.__v.__k) {
19830        var r4 = document.createElement("div"), o3 = this.__v.__k[0].__c;
19831        this.__v.__k[0] = L3(this.__b, r4, o3.__O = o3.__P);
19832      }
19833      this.__b = null;
19834    }
19835    var i4 = e4.__a && y2(_2, null, n3.fallback);
19836    return i4 && (i4.__h = null), [y2(_2, null, e4.__a ? null : n3.children), i4];
19837  };
19838  var W2 = function(n3, t5, e4) {
19839    if (++e4[1] === e4[0] && n3.o.delete(t5), n3.props.revealOrder && ("t" !== n3.props.revealOrder[0] || !n3.o.size))
19840      for (e4 = n3.u; e4; ) {
19841        for (; e4.length > 3; )
19842          e4.pop()();
19843        if (e4[1] < e4[0])
19844          break;
19845        n3.u = e4 = e4[2];
19846      }
19847  };
19848  function P3(n3) {
19849    return this.getChildContext = function() {
19850      return n3.context;
19851    }, n3.children;
19852  }
19853  function $3(n3) {
19854    var e4 = this, r4 = n3.i;
19855    e4.componentWillUnmount = function() {
19856      D2(null, e4.l), e4.l = null, e4.i = null;
19857    }, e4.i && e4.i !== r4 && e4.componentWillUnmount(), n3.__v ? (e4.l || (e4.i = r4, e4.l = { nodeType: 1, parentNode: r4, childNodes: [], appendChild: function(n4) {
19858      this.childNodes.push(n4), e4.i.appendChild(n4);
19859    }, insertBefore: function(n4, t5) {
19860      this.childNodes.push(n4), e4.i.appendChild(n4);
19861    }, removeChild: function(n4) {
19862      this.childNodes.splice(this.childNodes.indexOf(n4) >>> 1, 1), e4.i.removeChild(n4);
19863    } }), D2(y2(P3, { context: e4.context }, n3.__v), e4.l)) : e4.l && e4.componentWillUnmount();
19864  }
19865  function j4(n3, e4) {
19866    var r4 = y2($3, { __v: n3, i: e4 });
19867    return r4.containerInfo = e4, r4;
19868  }
19869  (V3.prototype = new x2()).__a = function(n3) {
19870    var t5 = this, e4 = F4(t5.__v), r4 = t5.o.get(n3);
19871    return r4[0]++, function(u4) {
19872      var o3 = function() {
19873        t5.props.revealOrder ? (r4.push(u4), W2(t5, n3, r4)) : u4();
19874      };
19875      e4 ? e4(o3) : o3();
19876    };
19877  }, V3.prototype.render = function(n3) {
19878    this.u = null, this.o = /* @__PURE__ */ new Map();
19879    var t5 = j2(n3.children);
19880    n3.revealOrder && "b" === n3.revealOrder[0] && t5.reverse();
19881    for (var e4 = t5.length; e4--; )
19882      this.o.set(t5[e4], this.u = [1, 0, this.u]);
19883    return n3.children;
19884  }, V3.prototype.componentDidUpdate = V3.prototype.componentDidMount = function() {
19885    var n3 = this;
19886    this.o.forEach(function(t5, e4) {
19887      W2(n3, e4, t5);
19888    });
19889  };
19890  var z3 = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103;
19891  var B3 = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/;
19892  var H3 = "undefined" != typeof document;
19893  var Z2 = function(n3) {
19894    return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/i : /fil|che|ra/i).test(n3);
19895  };
19896  x2.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t5) {
19897    Object.defineProperty(x2.prototype, t5, { configurable: true, get: function() {
19898      return this["UNSAFE_" + t5];
19899    }, set: function(n3) {
19900      Object.defineProperty(this, t5, { configurable: true, writable: true, value: n3 });
19901    } });
19902  });
19903  var G3 = l2.event;
19904  function J2() {
19905  }
19906  function K2() {
19907    return this.cancelBubble;
19908  }
19909  function Q2() {
19910    return this.defaultPrevented;
19911  }
19912  l2.event = function(n3) {
19913    return G3 && (n3 = G3(n3)), n3.persist = J2, n3.isPropagationStopped = K2, n3.isDefaultPrevented = Q2, n3.nativeEvent = n3;
19914  };
19915  var X2;
19916  var nn2 = { configurable: true, get: function() {
19917    return this.class;
19918  } };
19919  var tn2 = l2.vnode;
19920  l2.vnode = function(n3) {
19921    var t5 = n3.type, e4 = n3.props, u4 = e4;
19922    if ("string" == typeof t5) {
19923      var o3 = -1 === t5.indexOf("-");
19924      for (var i4 in u4 = {}, e4) {
19925        var l4 = e4[i4];
19926        H3 && "children" === i4 && "noscript" === t5 || "value" === i4 && "defaultValue" in e4 && null == l4 || ("defaultValue" === i4 && "value" in e4 && null == e4.value ? i4 = "value" : "download" === i4 && true === l4 ? l4 = "" : /ondoubleclick/i.test(i4) ? i4 = "ondblclick" : /^onchange(textarea|input)/i.test(i4 + t5) && !Z2(e4.type) ? i4 = "oninput" : /^onfocus$/i.test(i4) ? i4 = "onfocusin" : /^onblur$/i.test(i4) ? i4 = "onfocusout" : /^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i4) ? i4 = i4.toLowerCase() : o3 && B3.test(i4) ? i4 = i4.replace(/[A-Z0-9]/g, "-$&").toLowerCase() : null === l4 && (l4 = void 0), /^oninput$/i.test(i4) && (i4 = i4.toLowerCase(), u4[i4] && (i4 = "oninputCapture")), u4[i4] = l4);
19927      }
19928      "select" == t5 && u4.multiple && Array.isArray(u4.value) && (u4.value = j2(e4.children).forEach(function(n4) {
19929        n4.props.selected = -1 != u4.value.indexOf(n4.props.value);
19930      })), "select" == t5 && null != u4.defaultValue && (u4.value = j2(e4.children).forEach(function(n4) {
19931        n4.props.selected = u4.multiple ? -1 != u4.defaultValue.indexOf(n4.props.value) : u4.defaultValue == n4.props.value;
19932      })), n3.props = u4, e4.class != e4.className && (nn2.enumerable = "className" in e4, null != e4.className && (u4.class = e4.className), Object.defineProperty(u4, "className", nn2));
19933    }
19934    n3.$$typeof = z3, tn2 && tn2(n3);
19935  };
19936  var en2 = l2.__r;
19937  l2.__r = function(n3) {
19938    en2 && en2(n3), X2 = n3.__c;
19939  };
19940
19941  
vendor: 223,513 bytes, lines 19941-26065
19941// node_modules/@fullcalendar/core/internal-common.js
19942  var styleTexts = [];
19943  var styleEls = /* @__PURE__ */ new Map();
19944  function injectStyles(styleText) {
19945    styleTexts.push(styleText);
19946    styleEls.forEach((styleEl) => {
19947      appendStylesTo(styleEl, styleText);
19948    });
19949  }
19950  function ensureElHasStyles(el) {
19951    if (el.isConnected && el.getRootNode) {
19952      registerStylesRoot(el.getRootNode());
19953    }
19954  }
19955  function registerStylesRoot(rootNode) {
19956    let styleEl = styleEls.get(rootNode);
19957    if (!styleEl || !styleEl.isConnected) {
19958      styleEl = rootNode.querySelector("style[data-fullcalendar]");
19959      if (!styleEl) {
19960        styleEl = document.createElement("style");
19961        styleEl.setAttribute("data-fullcalendar", "");
19962        const nonce2 = getNonceValue();
19963        if (nonce2) {
19964          styleEl.nonce = nonce2;
19965        }
19966        const parentEl = rootNode === document ? document.head : rootNode;
19967        const insertBefore = rootNode === document ? parentEl.querySelector("script,link[rel=stylesheet],link[as=style],style") : parentEl.firstChild;
19968        parentEl.insertBefore(styleEl, insertBefore);
19969      }
19970      styleEls.set(rootNode, styleEl);
19971      hydrateStylesRoot(styleEl);
19972    }
19973  }
19974  function hydrateStylesRoot(styleEl) {
19975    for (const styleText of styleTexts) {
19976      appendStylesTo(styleEl, styleText);
19977    }
19978  }
19979  function appendStylesTo(styleEl, styleText) {
19980    const { sheet } = styleEl;
19981    const ruleCnt = sheet.cssRules.length;
19982    styleText.split("}").forEach((styleStr, i4) => {
19983      styleStr = styleStr.trim();
19984      if (styleStr) {
19985        sheet.insertRule(styleStr + "}", ruleCnt + i4);
19986      }
19987    });
19988  }
19989  var queriedNonceValue;
19990  function getNonceValue() {
19991    if (queriedNonceValue === void 0) {
19992      queriedNonceValue = queryNonceValue();
19993    }
19994    return queriedNonceValue;
19995  }
19996  function queryNonceValue() {
19997    const metaWithNonce = document.querySelector('meta[name="csp-nonce"]');
19998    if (metaWithNonce && metaWithNonce.hasAttribute("content")) {
19999      return metaWithNonce.getAttribute("content");
20000    }
20001    const elWithNonce = document.querySelector("script[nonce]");
20002    if (elWithNonce) {
20003      return elWithNonce.nonce || "";
20004    }
20005    return "";
20006  }
20007  if (typeof document !== "undefined") {
20008    registerStylesRoot(document);
20009  }
20010  var css_248z = ':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBfAAAAC8AAAAYGNtYXAXVtKNAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZgYydxIAAAF4AAAFNGhlYWQUJ7cIAAAGrAAAADZoaGVhB20DzAAABuQAAAAkaG10eCIABhQAAAcIAAAALGxvY2ED4AU6AAAHNAAAABhtYXhwAA8AjAAAB0wAAAAgbmFtZXsr690AAAdsAAABhnBvc3QAAwAAAAAI9AAAACAAAwPAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpBgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6Qb//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAWIAjQKeAskAEwAAJSc3NjQnJiIHAQYUFwEWMjc2NCcCnuLiDQ0MJAz/AA0NAQAMJAwNDcni4gwjDQwM/wANIwz/AA0NDCMNAAAAAQFiAI0CngLJABMAACUBNjQnASYiBwYUHwEHBhQXFjI3AZ4BAA0N/wAMJAwNDeLiDQ0MJAyNAQAMIw0BAAwMDSMM4uINIwwNDQAAAAIA4gC3Ax4CngATACcAACUnNzY0JyYiDwEGFB8BFjI3NjQnISc3NjQnJiIPAQYUHwEWMjc2NCcB87e3DQ0MIw3VDQ3VDSMMDQ0BK7e3DQ0MJAzVDQ3VDCQMDQ3zuLcMJAwNDdUNIwzWDAwNIwy4twwkDA0N1Q0jDNYMDA0jDAAAAgDiALcDHgKeABMAJwAAJTc2NC8BJiIHBhQfAQcGFBcWMjchNzY0LwEmIgcGFB8BBwYUFxYyNwJJ1Q0N1Q0jDA0Nt7cNDQwjDf7V1Q0N1QwkDA0Nt7cNDQwkDLfWDCMN1Q0NDCQMt7gMIw0MDNYMIw3VDQ0MJAy3uAwjDQwMAAADAFUAAAOrA1UAMwBoAHcAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMhMjY1NCYjISIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAAVYRGRkR/qoRGRkRA1UFBAUOCQkVDAsZDf2rDRkLDBUJCA4FBQUFBQUOCQgVDAsZDQJVDRkLDBUJCQ4FBAVVAgECBQMCBwQECAX9qwQJAwQHAwMFAQICAgIBBQMDBwQDCQQCVQUIBAQHAgMFAgEC/oAZEhEZGRESGQAAAAADAFUAAAOrA1UAMwBoAIkAABMiBgcOAQcOAQcOARURFBYXHgEXHgEXHgEzITI2Nz4BNz4BNz4BNRE0JicuAScuAScuASMFITIWFx4BFx4BFx4BFREUBgcOAQcOAQcOASMhIiYnLgEnLgEnLgE1ETQ2Nz4BNz4BNz4BMxMzFRQWMzI2PQEzMjY1NCYrATU0JiMiBh0BIyIGFRQWM9UNGAwLFQkJDgUFBQUFBQ4JCRULDBgNAlYNGAwLFQkJDgUFBQUFBQ4JCRULDBgN/aoCVgQIBAQHAwMFAQIBAQIBBQMDBwQECAT9qgQIBAQHAwMFAQIBAQIBBQMDBwQECASAgBkSEhmAERkZEYAZEhIZgBEZGREDVQUEBQ4JCRUMCxkN/asNGQsMFQkIDgUFBQUFBQ4JCBUMCxkNAlUNGQsMFQkJDgUEBVUCAQIFAwIHBAQIBf2rBAkDBAcDAwUBAgICAgEFAwMHBAMJBAJVBQgEBAcCAwUCAQL+gIASGRkSgBkSERmAEhkZEoAZERIZAAABAOIAjQMeAskAIAAAExcHBhQXFjI/ARcWMjc2NC8BNzY0JyYiDwEnJiIHBhQX4uLiDQ0MJAzi4gwkDA0N4uINDQwkDOLiDCQMDQ0CjeLiDSMMDQ3h4Q0NDCMN4uIMIw0MDOLiDAwNIwwAAAABAAAAAQAAa5n0y18PPPUACwQAAAAAANivOVsAAAAA2K85WwAAAAADqwNVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAOrAAEAAAAAAAAAAAAAAAAAAAALBAAAAAAAAAAAAAAAAgAAAAQAAWIEAAFiBAAA4gQAAOIEAABVBAAAVQQAAOIAAAAAAAoAFAAeAEQAagCqAOoBngJkApoAAQAAAAsAigADAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGZjaWNvbnMAZgBjAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGZjaWNvbnMAZgBjAGkAYwBvAG4Ac2ZjaWNvbnMAZgBjAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmZjaWNvbnMAZgBjAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}';
20011  injectStyles(css_248z);
20012  var DelayedRunner = class {
20013    constructor(drainedOption) {
20014      this.drainedOption = drainedOption;
20015      this.isRunning = false;
20016      this.isDirty = false;
20017      this.pauseDepths = {};
20018      this.timeoutId = 0;
20019    }
20020    request(delay) {
20021      this.isDirty = true;
20022      if (!this.isPaused()) {
20023        this.clearTimeout();
20024        if (delay == null) {
20025          this.tryDrain();
20026        } else {
20027          this.timeoutId = setTimeout(
20028            this.tryDrain.bind(this),
20029            delay
20030          );
20031        }
20032      }
20033    }
20034    pause(scope = "") {
20035      let { pauseDepths } = this;
20036      pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;
20037      this.clearTimeout();
20038    }
20039    resume(scope = "", force) {
20040      let { pauseDepths } = this;
20041      if (scope in pauseDepths) {
20042        if (force) {
20043          delete pauseDepths[scope];
20044        } else {
20045          pauseDepths[scope] -= 1;
20046          let depth = pauseDepths[scope];
20047          if (depth <= 0) {
20048            delete pauseDepths[scope];
20049          }
20050        }
20051        this.tryDrain();
20052      }
20053    }
20054    isPaused() {
20055      return Object.keys(this.pauseDepths).length;
20056    }
20057    tryDrain() {
20058      if (!this.isRunning && !this.isPaused()) {
20059        this.isRunning = true;
20060        while (this.isDirty) {
20061          this.isDirty = false;
20062          this.drained();
20063        }
20064        this.isRunning = false;
20065      }
20066    }
20067    clear() {
20068      this.clearTimeout();
20069      this.isDirty = false;
20070      this.pauseDepths = {};
20071    }
20072    clearTimeout() {
20073      if (this.timeoutId) {
20074        clearTimeout(this.timeoutId);
20075        this.timeoutId = 0;
20076      }
20077    }
20078    drained() {
20079      if (this.drainedOption) {
20080        this.drainedOption();
20081      }
20082    }
20083  };
20084  function removeElement(el) {
20085    if (el.parentNode) {
20086      el.parentNode.removeChild(el);
20087    }
20088  }
20089  function elementClosest(el, selector) {
20090    if (el.closest) {
20091      return el.closest(selector);
20092    }
20093    if (!document.documentElement.contains(el)) {
20094      return null;
20095    }
20096    do {
20097      if (elementMatches(el, selector)) {
20098        return el;
20099      }
20100      el = el.parentElement || el.parentNode;
20101    } while (el !== null && el.nodeType === 1);
20102    return null;
20103  }
20104  function elementMatches(el, selector) {
20105    let method = el.matches || el.matchesSelector || el.msMatchesSelector;
20106    return method.call(el, selector);
20107  }
20108  function findElements2(container, selector) {
20109    let containers = container instanceof HTMLElement ? [container] : container;
20110    let allMatches = [];
20111    for (let i4 = 0; i4 < containers.length; i4 += 1) {
20112      let matches2 = containers[i4].querySelectorAll(selector);
20113      for (let j5 = 0; j5 < matches2.length; j5 += 1) {
20114        allMatches.push(matches2[j5]);
20115      }
20116    }
20117    return allMatches;
20118  }
20119  var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
20120  function applyStyle(el, props) {
20121    for (let propName in props) {
20122      applyStyleProp(el, propName, props[propName]);
20123    }
20124  }
20125  function applyStyleProp(el, name, val) {
20126    if (val == null) {
20127      el.style[name] = "";
20128    } else if (typeof val === "number" && PIXEL_PROP_RE.test(name)) {
20129      el.style[name] = `${val}px`;
20130    } else {
20131      el.style[name] = val;
20132    }
20133  }
20134  function getEventTargetViaRoot(ev) {
20135    var _a, _b;
20136    return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
20137  }
20138  var guid$1 = 0;
20139  function getUniqueDomId() {
20140    guid$1 += 1;
20141    return "fc-dom-" + guid$1;
20142  }
20143  function buildDelegationHandler(selector, handler) {
20144    return (ev) => {
20145      let matchedChild = elementClosest(ev.target, selector);
20146      if (matchedChild) {
20147        handler.call(matchedChild, ev, matchedChild);
20148      }
20149    };
20150  }
20151  function listenBySelector(container, eventType, selector, handler) {
20152    let attachedHandler = buildDelegationHandler(selector, handler);
20153    container.addEventListener(eventType, attachedHandler);
20154    return () => {
20155      container.removeEventListener(eventType, attachedHandler);
20156    };
20157  }
20158  function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
20159    let currentMatchedChild;
20160    return listenBySelector(container, "mouseover", selector, (mouseOverEv, matchedChild) => {
20161      if (matchedChild !== currentMatchedChild) {
20162        currentMatchedChild = matchedChild;
20163        onMouseEnter(mouseOverEv, matchedChild);
20164        let realOnMouseLeave = (mouseLeaveEv) => {
20165          currentMatchedChild = null;
20166          onMouseLeave(mouseLeaveEv, matchedChild);
20167          matchedChild.removeEventListener("mouseleave", realOnMouseLeave);
20168        };
20169        matchedChild.addEventListener("mouseleave", realOnMouseLeave);
20170      }
20171    });
20172  }
20173  function createAriaClickAttrs(handler) {
20174    return Object.assign({ onClick: handler }, createAriaKeyboardAttrs(handler));
20175  }
20176  function createAriaKeyboardAttrs(handler) {
20177    return {
20178      tabIndex: 0,
20179      onKeyDown(ev) {
20180        if (ev.key === "Enter" || ev.key === " ") {
20181          handler(ev);
20182          ev.preventDefault();
20183        }
20184      }
20185    };
20186  }
20187  var guidNumber = 0;
20188  function guid() {
20189    guidNumber += 1;
20190    return String(guidNumber);
20191  }
20192  function parseFieldSpecs(input) {
20193    let specs = [];
20194    let tokens = [];
20195    let i4;
20196    let token;
20197    if (typeof input === "string") {
20198      tokens = input.split(/\s*,\s*/);
20199    } else if (typeof input === "function") {
20200      tokens = [input];
20201    } else if (Array.isArray(input)) {
20202      tokens = input;
20203    }
20204    for (i4 = 0; i4 < tokens.length; i4 += 1) {
20205      token = tokens[i4];
20206      if (typeof token === "string") {
20207        specs.push(token.charAt(0) === "-" ? { field: token.substring(1), order: -1 } : { field: token, order: 1 });
20208      } else if (typeof token === "function") {
20209        specs.push({ func: token });
20210      }
20211    }
20212    return specs;
20213  }
20214  function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
20215    let i4;
20216    let cmp;
20217    for (i4 = 0; i4 < fieldSpecs.length; i4 += 1) {
20218      cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i4]);
20219      if (cmp) {
20220        return cmp;
20221      }
20222    }
20223    return 0;
20224  }
20225  function compareByFieldSpec(obj0, obj1, fieldSpec) {
20226    if (fieldSpec.func) {
20227      return fieldSpec.func(obj0, obj1);
20228    }
20229    return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field]) * (fieldSpec.order || 1);
20230  }
20231  function flexibleCompare(a4, b4) {
20232    if (!a4 && !b4) {
20233      return 0;
20234    }
20235    if (b4 == null) {
20236      return -1;
20237    }
20238    if (a4 == null) {
20239      return 1;
20240    }
20241    if (typeof a4 === "string" || typeof b4 === "string") {
20242      return String(a4).localeCompare(String(b4));
20243    }
20244    return a4 - b4;
20245  }
20246  function padStart(val, len) {
20247    let s4 = String(val);
20248    return "000".substr(0, len - s4.length) + s4;
20249  }
20250  function formatWithOrdinals(formatter, args, fallbackText) {
20251    if (typeof formatter === "function") {
20252      return formatter(...args);
20253    }
20254    if (typeof formatter === "string") {
20255      return args.reduce((str, arg, index4) => str.replace("$" + index4, arg || ""), formatter);
20256    }
20257    return fallbackText;
20258  }
20259  function isInt(n3) {
20260    return n3 % 1 === 0;
20261  }
20262  function computeSmallestCellWidth(cellEl) {
20263    let allWidthEl = cellEl.querySelector(".fc-scrollgrid-shrink-frame");
20264    let contentWidthEl = cellEl.querySelector(".fc-scrollgrid-shrink-cushion");
20265    if (!allWidthEl) {
20266      throw new Error("needs fc-scrollgrid-shrink-frame className");
20267    }
20268    if (!contentWidthEl) {
20269      throw new Error("needs fc-scrollgrid-shrink-cushion className");
20270    }
20271    return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + contentWidthEl.getBoundingClientRect().width;
20272  }
20273  var INTERNAL_UNITS = ["years", "months", "days", "milliseconds"];
20274  var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
20275  function createDuration(input, unit) {
20276    if (typeof input === "string") {
20277      return parseString(input);
20278    }
20279    if (typeof input === "object" && input) {
20280      return parseObject(input);
20281    }
20282    if (typeof input === "number") {
20283      return parseObject({ [unit || "milliseconds"]: input });
20284    }
20285    return null;
20286  }
20287  function parseString(s4) {
20288    let m5 = PARSE_RE.exec(s4);
20289    if (m5) {
20290      let sign = m5[1] ? -1 : 1;
20291      return {
20292        years: 0,
20293        months: 0,
20294        days: sign * (m5[2] ? parseInt(m5[2], 10) : 0),
20295        milliseconds: sign * ((m5[3] ? parseInt(m5[3], 10) : 0) * 60 * 60 * 1e3 + (m5[4] ? parseInt(m5[4], 10) : 0) * 60 * 1e3 + (m5[5] ? parseInt(m5[5], 10) : 0) * 1e3 + (m5[6] ? parseInt(m5[6], 10) : 0))
20296      };
20297    }
20298    return null;
20299  }
20300  function parseObject(obj) {
20301    let duration = {
20302      years: obj.years || obj.year || 0,
20303      months: obj.months || obj.month || 0,
20304      days: obj.days || obj.day || 0,
20305      milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1e3 + (obj.minutes || obj.minute || 0) * 60 * 1e3 + (obj.seconds || obj.second || 0) * 1e3 + (obj.milliseconds || obj.millisecond || obj.ms || 0)
20306    };
20307    let weeks = obj.weeks || obj.week;
20308    if (weeks) {
20309      duration.days += weeks * 7;
20310      duration.specifiedWeeks = true;
20311    }
20312    return duration;
20313  }
20314  function durationsEqual(d0, d1) {
20315    return d0.years === d1.years && d0.months === d1.months && d0.days === d1.days && d0.milliseconds === d1.milliseconds;
20316  }
20317  function addDurations(d0, d1) {
20318    return {
20319      years: d0.years + d1.years,
20320      months: d0.months + d1.months,
20321      days: d0.days + d1.days,
20322      milliseconds: d0.milliseconds + d1.milliseconds
20323    };
20324  }
20325  function subtractDurations(d1, d0) {
20326    return {
20327      years: d1.years - d0.years,
20328      months: d1.months - d0.months,
20329      days: d1.days - d0.days,
20330      milliseconds: d1.milliseconds - d0.milliseconds
20331    };
20332  }
20333  function multiplyDuration(d3, n3) {
20334    return {
20335      years: d3.years * n3,
20336      months: d3.months * n3,
20337      days: d3.days * n3,
20338      milliseconds: d3.milliseconds * n3
20339    };
20340  }
20341  function asRoughYears(dur) {
20342    return asRoughDays(dur) / 365;
20343  }
20344  function asRoughMonths(dur) {
20345    return asRoughDays(dur) / 30;
20346  }
20347  function asRoughDays(dur) {
20348    return asRoughMs(dur) / 864e5;
20349  }
20350  function asRoughMs(dur) {
20351    return dur.years * (365 * 864e5) + dur.months * (30 * 864e5) + dur.days * 864e5 + dur.milliseconds;
20352  }
20353  function wholeDivideDurations(numerator, denominator) {
20354    let res = null;
20355    for (let i4 = 0; i4 < INTERNAL_UNITS.length; i4 += 1) {
20356      let unit = INTERNAL_UNITS[i4];
20357      if (denominator[unit]) {
20358        let localRes = numerator[unit] / denominator[unit];
20359        if (!isInt(localRes) || res !== null && res !== localRes) {
20360          return null;
20361        }
20362        res = localRes;
20363      } else if (numerator[unit]) {
20364        return null;
20365      }
20366    }
20367    return res;
20368  }
20369  function greatestDurationDenominator(dur) {
20370    let ms = dur.milliseconds;
20371    if (ms) {
20372      if (ms % 1e3 !== 0) {
20373        return { unit: "millisecond", value: ms };
20374      }
20375      if (ms % (1e3 * 60) !== 0) {
20376        return { unit: "second", value: ms / 1e3 };
20377      }
20378      if (ms % (1e3 * 60 * 60) !== 0) {
20379        return { unit: "minute", value: ms / (1e3 * 60) };
20380      }
20381      if (ms) {
20382        return { unit: "hour", value: ms / (1e3 * 60 * 60) };
20383      }
20384    }
20385    if (dur.days) {
20386      if (dur.specifiedWeeks && dur.days % 7 === 0) {
20387        return { unit: "week", value: dur.days / 7 };
20388      }
20389      return { unit: "day", value: dur.days };
20390    }
20391    if (dur.months) {
20392      return { unit: "month", value: dur.months };
20393    }
20394    if (dur.years) {
20395      return { unit: "year", value: dur.years };
20396    }
20397    return { unit: "millisecond", value: 0 };
20398  }
20399  function isArraysEqual(a0, a1, equalityFunc) {
20400    if (a0 === a1) {
20401      return true;
20402    }
20403    let len = a0.length;
20404    let i4;
20405    if (len !== a1.length) {
20406      return false;
20407    }
20408    for (i4 = 0; i4 < len; i4 += 1) {
20409      if (!(equalityFunc ? equalityFunc(a0[i4], a1[i4]) : a0[i4] === a1[i4])) {
20410        return false;
20411      }
20412    }
20413    return true;
20414  }
20415  var DAY_IDS = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"];
20416  function addWeeks(m5, n3) {
20417    let a4 = dateToUtcArray(m5);
20418    a4[2] += n3 * 7;
20419    return arrayToUtcDate(a4);
20420  }
20421  function addDays(m5, n3) {
20422    let a4 = dateToUtcArray(m5);
20423    a4[2] += n3;
20424    return arrayToUtcDate(a4);
20425  }
20426  function addMs(m5, n3) {
20427    let a4 = dateToUtcArray(m5);
20428    a4[6] += n3;
20429    return arrayToUtcDate(a4);
20430  }
20431  function diffWeeks(m0, m1) {
20432    return diffDays(m0, m1) / 7;
20433  }
20434  function diffDays(m0, m1) {
20435    return (m1.valueOf() - m0.valueOf()) / (1e3 * 60 * 60 * 24);
20436  }
20437  function diffHours(m0, m1) {
20438    return (m1.valueOf() - m0.valueOf()) / (1e3 * 60 * 60);
20439  }
20440  function diffMinutes(m0, m1) {
20441    return (m1.valueOf() - m0.valueOf()) / (1e3 * 60);
20442  }
20443  function diffSeconds(m0, m1) {
20444    return (m1.valueOf() - m0.valueOf()) / 1e3;
20445  }
20446  function diffDayAndTime(m0, m1) {
20447    let m0day = startOfDay(m0);
20448    let m1day = startOfDay(m1);
20449    return {
20450      years: 0,
20451      months: 0,
20452      days: Math.round(diffDays(m0day, m1day)),
20453      milliseconds: m1.valueOf() - m1day.valueOf() - (m0.valueOf() - m0day.valueOf())
20454    };
20455  }
20456  function diffWholeWeeks(m0, m1) {
20457    let d3 = diffWholeDays(m0, m1);
20458    if (d3 !== null && d3 % 7 === 0) {
20459      return d3 / 7;
20460    }
20461    return null;
20462  }
20463  function diffWholeDays(m0, m1) {
20464    if (timeAsMs(m0) === timeAsMs(m1)) {
20465      return Math.round(diffDays(m0, m1));
20466    }
20467    return null;
20468  }
20469  function startOfDay(m5) {
20470    return arrayToUtcDate([
20471      m5.getUTCFullYear(),
20472      m5.getUTCMonth(),
20473      m5.getUTCDate()
20474    ]);
20475  }
20476  function startOfHour(m5) {
20477    return arrayToUtcDate([
20478      m5.getUTCFullYear(),
20479      m5.getUTCMonth(),
20480      m5.getUTCDate(),
20481      m5.getUTCHours()
20482    ]);
20483  }
20484  function startOfMinute(m5) {
20485    return arrayToUtcDate([
20486      m5.getUTCFullYear(),
20487      m5.getUTCMonth(),
20488      m5.getUTCDate(),
20489      m5.getUTCHours(),
20490      m5.getUTCMinutes()
20491    ]);
20492  }
20493  function startOfSecond(m5) {
20494    return arrayToUtcDate([
20495      m5.getUTCFullYear(),
20496      m5.getUTCMonth(),
20497      m5.getUTCDate(),
20498      m5.getUTCHours(),
20499      m5.getUTCMinutes(),
20500      m5.getUTCSeconds()
20501    ]);
20502  }
20503  function weekOfYear(marker, dow, doy) {
20504    let y4 = marker.getUTCFullYear();
20505    let w5 = weekOfGivenYear(marker, y4, dow, doy);
20506    if (w5 < 1) {
20507      return weekOfGivenYear(marker, y4 - 1, dow, doy);
20508    }
20509    let nextW = weekOfGivenYear(marker, y4 + 1, dow, doy);
20510    if (nextW >= 1) {
20511      return Math.min(w5, nextW);
20512    }
20513    return w5;
20514  }
20515  function weekOfGivenYear(marker, year, dow, doy) {
20516    let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
20517    let dayStart = startOfDay(marker);
20518    let days = Math.round(diffDays(firstWeekStart, dayStart));
20519    return Math.floor(days / 7) + 1;
20520  }
20521  function firstWeekOffset(year, dow, doy) {
20522    let fwd = 7 + dow - doy;
20523    let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
20524    return -fwdlw + fwd - 1;
20525  }
20526  function dateToLocalArray(date) {
20527    return [
20528      date.getFullYear(),
20529      date.getMonth(),
20530      date.getDate(),
20531      date.getHours(),
20532      date.getMinutes(),
20533      date.getSeconds(),
20534      date.getMilliseconds()
20535    ];
20536  }
20537  function arrayToLocalDate(a4) {
20538    return new Date(
20539      a4[0],
20540      a4[1] || 0,
20541      a4[2] == null ? 1 : a4[2],
20542      a4[3] || 0,
20543      a4[4] || 0,
20544      a4[5] || 0
20545    );
20546  }
20547  function dateToUtcArray(date) {
20548    return [
20549      date.getUTCFullYear(),
20550      date.getUTCMonth(),
20551      date.getUTCDate(),
20552      date.getUTCHours(),
20553      date.getUTCMinutes(),
20554      date.getUTCSeconds(),
20555      date.getUTCMilliseconds()
20556    ];
20557  }
20558  function arrayToUtcDate(a4) {
20559    if (a4.length === 1) {
20560      a4 = a4.concat([0]);
20561    }
20562    return new Date(Date.UTC(...a4));
20563  }
20564  function isValidDate(m5) {
20565    return !isNaN(m5.valueOf());
20566  }
20567  function timeAsMs(m5) {
20568    return m5.getUTCHours() * 1e3 * 60 * 60 + m5.getUTCMinutes() * 1e3 * 60 + m5.getUTCSeconds() * 1e3 + m5.getUTCMilliseconds();
20569  }
20570  function buildIsoString(marker, timeZoneOffset, stripZeroTime = false) {
20571    let s4 = marker.toISOString();
20572    s4 = s4.replace(".000", "");
20573    if (stripZeroTime) {
20574      s4 = s4.replace("T00:00:00Z", "");
20575    }
20576    if (s4.length > 10) {
20577      if (timeZoneOffset == null) {
20578        s4 = s4.replace("Z", "");
20579      } else if (timeZoneOffset !== 0) {
20580        s4 = s4.replace("Z", formatTimeZoneOffset(timeZoneOffset, true));
20581      }
20582    }
20583    return s4;
20584  }
20585  function formatDayString(marker) {
20586    return marker.toISOString().replace(/T.*$/, "");
20587  }
20588  function formatIsoMonthStr(marker) {
20589    return marker.toISOString().match(/^\d{4}-\d{2}/)[0];
20590  }
20591  function formatIsoTimeString(marker) {
20592    return padStart(marker.getUTCHours(), 2) + ":" + padStart(marker.getUTCMinutes(), 2) + ":" + padStart(marker.getUTCSeconds(), 2);
20593  }
20594  function formatTimeZoneOffset(minutes, doIso = false) {
20595    let sign = minutes < 0 ? "-" : "+";
20596    let abs = Math.abs(minutes);
20597    let hours = Math.floor(abs / 60);
20598    let mins = Math.round(abs % 60);
20599    if (doIso) {
20600      return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`;
20601    }
20602    return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ""}`;
20603  }
20604  function memoize(workerFunc, resEquality, teardownFunc) {
20605    let currentArgs;
20606    let currentRes;
20607    return function(...newArgs) {
20608      if (!currentArgs) {
20609        currentRes = workerFunc.apply(this, newArgs);
20610      } else if (!isArraysEqual(currentArgs, newArgs)) {
20611        if (teardownFunc) {
20612          teardownFunc(currentRes);
20613        }
20614        let res = workerFunc.apply(this, newArgs);
20615        if (!resEquality || !resEquality(res, currentRes)) {
20616          currentRes = res;
20617        }
20618      }
20619      currentArgs = newArgs;
20620      return currentRes;
20621    };
20622  }
20623  function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
20624    let currentArg;
20625    let currentRes;
20626    return (newArg) => {
20627      if (!currentArg) {
20628        currentRes = workerFunc.call(this, newArg);
20629      } else if (!isPropsEqual(currentArg, newArg)) {
20630        if (teardownFunc) {
20631          teardownFunc(currentRes);
20632        }
20633        let res = workerFunc.call(this, newArg);
20634        if (!resEquality || !resEquality(res, currentRes)) {
20635          currentRes = res;
20636        }
20637      }
20638      currentArg = newArg;
20639      return currentRes;
20640    };
20641  }
20642  var EXTENDED_SETTINGS_AND_SEVERITIES = {
20643    week: 3,
20644    separator: 0,
20645    omitZeroMinute: 0,
20646    meridiem: 0,
20647    omitCommas: 0
20648  };
20649  var STANDARD_DATE_PROP_SEVERITIES = {
20650    timeZoneName: 7,
20651    era: 6,
20652    year: 5,
20653    month: 4,
20654    day: 2,
20655    weekday: 2,
20656    hour: 1,
20657    minute: 1,
20658    second: 1
20659  };
20660  var MERIDIEM_RE = /\s*([ap])\.?m\.?/i;
20661  var COMMA_RE = /,/g;
20662  var MULTI_SPACE_RE = /\s+/g;
20663  var LTR_RE = /\u200e/g;
20664  var UTC_RE = /UTC|GMT/;
20665  var NativeFormatter = class {
20666    constructor(formatSettings) {
20667      let standardDateProps = {};
20668      let extendedSettings = {};
20669      let severity = 0;
20670      for (let name in formatSettings) {
20671        if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {
20672          extendedSettings[name] = formatSettings[name];
20673          severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity);
20674        } else {
20675          standardDateProps[name] = formatSettings[name];
20676          if (name in STANDARD_DATE_PROP_SEVERITIES) {
20677            severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity);
20678          }
20679        }
20680      }
20681      this.standardDateProps = standardDateProps;
20682      this.extendedSettings = extendedSettings;
20683      this.severity = severity;
20684      this.buildFormattingFunc = memoize(buildFormattingFunc);
20685    }
20686    format(date, context) {
20687      return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
20688    }
20689    formatRange(start5, end2, context, betterDefaultSeparator) {
20690      let { standardDateProps, extendedSettings } = this;
20691      let diffSeverity = computeMarkerDiffSeverity(start5.marker, end2.marker, context.calendarSystem);
20692      if (!diffSeverity) {
20693        return this.format(start5, context);
20694      }
20695      let biggestUnitForPartial = diffSeverity;
20696      if (biggestUnitForPartial > 1 && (standardDateProps.year === "numeric" || standardDateProps.year === "2-digit") && (standardDateProps.month === "numeric" || standardDateProps.month === "2-digit") && (standardDateProps.day === "numeric" || standardDateProps.day === "2-digit")) {
20697        biggestUnitForPartial = 1;
20698      }
20699      let full0 = this.format(start5, context);
20700      let full1 = this.format(end2, context);
20701      if (full0 === full1) {
20702        return full0;
20703      }
20704      let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
20705      let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
20706      let partial0 = partialFormattingFunc(start5);
20707      let partial1 = partialFormattingFunc(end2);
20708      let insertion = findCommonInsertion(full0, partial0, full1, partial1);
20709      let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || "";
20710      if (insertion) {
20711        return insertion.before + partial0 + separator + partial1 + insertion.after;
20712      }
20713      return full0 + separator + full1;
20714    }
20715    getLargestUnit() {
20716      switch (this.severity) {
20717        case 7:
20718        case 6:
20719        case 5:
20720          return "year";
20721        case 4:
20722          return "month";
20723        case 3:
20724          return "week";
20725        case 2:
20726          return "day";
20727        default:
20728          return "time";
20729      }
20730    }
20731  };
20732  function buildFormattingFunc(standardDateProps, extendedSettings, context) {
20733    let standardDatePropCnt = Object.keys(standardDateProps).length;
20734    if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === "short") {
20735      return (date) => formatTimeZoneOffset(date.timeZoneOffset);
20736    }
20737    if (standardDatePropCnt === 0 && extendedSettings.week) {
20738      return (date) => formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week);
20739    }
20740    return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
20741  }
20742  function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
20743    standardDateProps = Object.assign({}, standardDateProps);
20744    extendedSettings = Object.assign({}, extendedSettings);
20745    sanitizeSettings(standardDateProps, extendedSettings);
20746    standardDateProps.timeZone = "UTC";
20747    let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
20748    let zeroFormat;
20749    if (extendedSettings.omitZeroMinute) {
20750      let zeroProps = Object.assign({}, standardDateProps);
20751      delete zeroProps.minute;
20752      zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
20753    }
20754    return (date) => {
20755      let { marker } = date;
20756      let format;
20757      if (zeroFormat && !marker.getUTCMinutes()) {
20758        format = zeroFormat;
20759      } else {
20760        format = normalFormat;
20761      }
20762      let s4 = format.format(marker);
20763      return postProcess(s4, date, standardDateProps, extendedSettings, context);
20764    };
20765  }
20766  function sanitizeSettings(standardDateProps, extendedSettings) {
20767    if (standardDateProps.timeZoneName) {
20768      if (!standardDateProps.hour) {
20769        standardDateProps.hour = "2-digit";
20770      }
20771      if (!standardDateProps.minute) {
20772        standardDateProps.minute = "2-digit";
20773      }
20774    }
20775    if (standardDateProps.timeZoneName === "long") {
20776      standardDateProps.timeZoneName = "short";
20777    }
20778    if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
20779      delete extendedSettings.omitZeroMinute;
20780    }
20781  }
20782  function postProcess(s4, date, standardDateProps, extendedSettings, context) {
20783    s4 = s4.replace(LTR_RE, "");
20784    if (standardDateProps.timeZoneName === "short") {
20785      s4 = injectTzoStr(s4, context.timeZone === "UTC" || date.timeZoneOffset == null ? "UTC" : formatTimeZoneOffset(date.timeZoneOffset));
20786    }
20787    if (extendedSettings.omitCommas) {
20788      s4 = s4.replace(COMMA_RE, "").trim();
20789    }
20790    if (extendedSettings.omitZeroMinute) {
20791      s4 = s4.replace(":00", "");
20792    }
20793    if (extendedSettings.meridiem === false) {
20794      s4 = s4.replace(MERIDIEM_RE, "").trim();
20795    } else if (extendedSettings.meridiem === "narrow") {
20796      s4 = s4.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase());
20797    } else if (extendedSettings.meridiem === "short") {
20798      s4 = s4.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`);
20799    } else if (extendedSettings.meridiem === "lowercase") {
20800      s4 = s4.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase());
20801    }
20802    s4 = s4.replace(MULTI_SPACE_RE, " ");
20803    s4 = s4.trim();
20804    return s4;
20805  }
20806  function injectTzoStr(s4, tzoStr) {
20807    let replaced = false;
20808    s4 = s4.replace(UTC_RE, () => {
20809      replaced = true;
20810      return tzoStr;
20811    });
20812    if (!replaced) {
20813      s4 += ` ${tzoStr}`;
20814    }
20815    return s4;
20816  }
20817  function formatWeekNumber(num, weekText, weekTextLong, locale, display) {
20818    let parts = [];
20819    if (display === "long") {
20820      parts.push(weekTextLong);
20821    } else if (display === "short" || display === "narrow") {
20822      parts.push(weekText);
20823    }
20824    if (display === "long" || display === "short") {
20825      parts.push(" ");
20826    }
20827    parts.push(locale.simpleNumberFormat.format(num));
20828    if (locale.options.direction === "rtl") {
20829      parts.reverse();
20830    }
20831    return parts.join("");
20832  }
20833  function computeMarkerDiffSeverity(d0, d1, ca) {
20834    if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
20835      return 5;
20836    }
20837    if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
20838      return 4;
20839    }
20840    if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
20841      return 2;
20842    }
20843    if (timeAsMs(d0) !== timeAsMs(d1)) {
20844      return 1;
20845    }
20846    return 0;
20847  }
20848  function computePartialFormattingOptions(options, biggestUnit) {
20849    let partialOptions = {};
20850    for (let name in options) {
20851      if (!(name in STANDARD_DATE_PROP_SEVERITIES) || STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {
20852        partialOptions[name] = options[name];
20853      }
20854    }
20855    return partialOptions;
20856  }
20857  function findCommonInsertion(full0, partial0, full1, partial1) {
20858    let i0 = 0;
20859    while (i0 < full0.length) {
20860      let found0 = full0.indexOf(partial0, i0);
20861      if (found0 === -1) {
20862        break;
20863      }
20864      let before0 = full0.substr(0, found0);
20865      i0 = found0 + partial0.length;
20866      let after0 = full0.substr(i0);
20867      let i1 = 0;
20868      while (i1 < full1.length) {
20869        let found1 = full1.indexOf(partial1, i1);
20870        if (found1 === -1) {
20871          break;
20872        }
20873        let before1 = full1.substr(0, found1);
20874        i1 = found1 + partial1.length;
20875        let after1 = full1.substr(i1);
20876        if (before0 === before1 && after0 === after1) {
20877          return {
20878            before: before0,
20879            after: after0
20880          };
20881        }
20882      }
20883    }
20884    return null;
20885  }
20886  function expandZonedMarker(dateInfo, calendarSystem) {
20887    let a4 = calendarSystem.markerToArray(dateInfo.marker);
20888    return {
20889      marker: dateInfo.marker,
20890      timeZoneOffset: dateInfo.timeZoneOffset,
20891      array: a4,
20892      year: a4[0],
20893      month: a4[1],
20894      day: a4[2],
20895      hour: a4[3],
20896      minute: a4[4],
20897      second: a4[5],
20898      millisecond: a4[6]
20899    };
20900  }
20901  function createVerboseFormattingArg(start5, end2, context, betterDefaultSeparator) {
20902    let startInfo = expandZonedMarker(start5, context.calendarSystem);
20903    let endInfo = end2 ? expandZonedMarker(end2, context.calendarSystem) : null;
20904    return {
20905      date: startInfo,
20906      start: startInfo,
20907      end: endInfo,
20908      timeZone: context.timeZone,
20909      localeCodes: context.locale.codes,
20910      defaultSeparator: betterDefaultSeparator || context.defaultSeparator
20911    };
20912  }
20913  var CmdFormatter = class {
20914    constructor(cmdStr) {
20915      this.cmdStr = cmdStr;
20916    }
20917    format(date, context, betterDefaultSeparator) {
20918      return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
20919    }
20920    formatRange(start5, end2, context, betterDefaultSeparator) {
20921      return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start5, end2, context, betterDefaultSeparator));
20922    }
20923  };
20924  var FuncFormatter = class {
20925    constructor(func) {
20926      this.func = func;
20927    }
20928    format(date, context, betterDefaultSeparator) {
20929      return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
20930    }
20931    formatRange(start5, end2, context, betterDefaultSeparator) {
20932      return this.func(createVerboseFormattingArg(start5, end2, context, betterDefaultSeparator));
20933    }
20934  };
20935  function createFormatter(input) {
20936    if (typeof input === "object" && input) {
20937      return new NativeFormatter(input);
20938    }
20939    if (typeof input === "string") {
20940      return new CmdFormatter(input);
20941    }
20942    if (typeof input === "function") {
20943      return new FuncFormatter(input);
20944    }
20945    return null;
20946  }
20947  var BASE_OPTION_REFINERS = {
20948    navLinkDayClick: identity,
20949    navLinkWeekClick: identity,
20950    duration: createDuration,
20951    bootstrapFontAwesome: identity,
20952    buttonIcons: identity,
20953    customButtons: identity,
20954    defaultAllDayEventDuration: createDuration,
20955    defaultTimedEventDuration: createDuration,
20956    nextDayThreshold: createDuration,
20957    scrollTime: createDuration,
20958    scrollTimeReset: Boolean,
20959    slotMinTime: createDuration,
20960    slotMaxTime: createDuration,
20961    dayPopoverFormat: createFormatter,
20962    slotDuration: createDuration,
20963    snapDuration: createDuration,
20964    headerToolbar: identity,
20965    footerToolbar: identity,
20966    defaultRangeSeparator: String,
20967    titleRangeSeparator: String,
20968    forceEventDuration: Boolean,
20969    dayHeaders: Boolean,
20970    dayHeaderFormat: createFormatter,
20971    dayHeaderClassNames: identity,
20972    dayHeaderContent: identity,
20973    dayHeaderDidMount: identity,
20974    dayHeaderWillUnmount: identity,
20975    dayCellClassNames: identity,
20976    dayCellContent: identity,
20977    dayCellDidMount: identity,
20978    dayCellWillUnmount: identity,
20979    initialView: String,
20980    aspectRatio: Number,
20981    weekends: Boolean,
20982    weekNumberCalculation: identity,
20983    weekNumbers: Boolean,
20984    weekNumberClassNames: identity,
20985    weekNumberContent: identity,
20986    weekNumberDidMount: identity,
20987    weekNumberWillUnmount: identity,
20988    editable: Boolean,
20989    viewClassNames: identity,
20990    viewDidMount: identity,
20991    viewWillUnmount: identity,
20992    nowIndicator: Boolean,
20993    nowIndicatorClassNames: identity,
20994    nowIndicatorContent: identity,
20995    nowIndicatorDidMount: identity,
20996    nowIndicatorWillUnmount: identity,
20997    showNonCurrentDates: Boolean,
20998    lazyFetching: Boolean,
20999    startParam: String,
21000    endParam: String,
21001    timeZoneParam: String,
21002    timeZone: String,
21003    locales: identity,
21004    locale: identity,
21005    themeSystem: String,
21006    dragRevertDuration: Number,
21007    dragScroll: Boolean,
21008    allDayMaintainDuration: Boolean,
21009    unselectAuto: Boolean,
21010    dropAccept: identity,
21011    eventOrder: parseFieldSpecs,
21012    eventOrderStrict: Boolean,
21013    handleWindowResize: Boolean,
21014    windowResizeDelay: Number,
21015    longPressDelay: Number,
21016    eventDragMinDistance: Number,
21017    expandRows: Boolean,
21018    height: identity,
21019    contentHeight: identity,
21020    direction: String,
21021    weekNumberFormat: createFormatter,
21022    eventResizableFromStart: Boolean,
21023    displayEventTime: Boolean,
21024    displayEventEnd: Boolean,
21025    weekText: String,
21026    weekTextLong: String,
21027    progressiveEventRendering: Boolean,
21028    businessHours: identity,
21029    initialDate: identity,
21030    now: identity,
21031    eventDataTransform: identity,
21032    stickyHeaderDates: identity,
21033    stickyFooterScrollbar: identity,
21034    viewHeight: identity,
21035    defaultAllDay: Boolean,
21036    eventSourceFailure: identity,
21037    eventSourceSuccess: identity,
21038    eventDisplay: String,
21039    eventStartEditable: Boolean,
21040    eventDurationEditable: Boolean,
21041    eventOverlap: identity,
21042    eventConstraint: identity,
21043    eventAllow: identity,
21044    eventBackgroundColor: String,
21045    eventBorderColor: String,
21046    eventTextColor: String,
21047    eventColor: String,
21048    eventClassNames: identity,
21049    eventContent: identity,
21050    eventDidMount: identity,
21051    eventWillUnmount: identity,
21052    selectConstraint: identity,
21053    selectOverlap: identity,
21054    selectAllow: identity,
21055    droppable: Boolean,
21056    unselectCancel: String,
21057    slotLabelFormat: identity,
21058    slotLaneClassNames: identity,
21059    slotLaneContent: identity,
21060    slotLaneDidMount: identity,
21061    slotLaneWillUnmount: identity,
21062    slotLabelClassNames: identity,
21063    slotLabelContent: identity,
21064    slotLabelDidMount: identity,
21065    slotLabelWillUnmount: identity,
21066    dayMaxEvents: identity,
21067    dayMaxEventRows: identity,
21068    dayMinWidth: Number,
21069    slotLabelInterval: createDuration,
21070    allDayText: String,
21071    allDayClassNames: identity,
21072    allDayContent: identity,
21073    allDayDidMount: identity,
21074    allDayWillUnmount: identity,
21075    slotMinWidth: Number,
21076    navLinks: Boolean,
21077    eventTimeFormat: createFormatter,
21078    rerenderDelay: Number,
21079    moreLinkText: identity,
21080    moreLinkHint: identity,
21081    selectMinDistance: Number,
21082    selectable: Boolean,
21083    selectLongPressDelay: Number,
21084    eventLongPressDelay: Number,
21085    selectMirror: Boolean,
21086    eventMaxStack: Number,
21087    eventMinHeight: Number,
21088    eventMinWidth: Number,
21089    eventShortHeight: Number,
21090    slotEventOverlap: Boolean,
21091    plugins: identity,
21092    firstDay: Number,
21093    dayCount: Number,
21094    dateAlignment: String,
21095    dateIncrement: createDuration,
21096    hiddenDays: identity,
21097    fixedWeekCount: Boolean,
21098    validRange: identity,
21099    visibleRange: identity,
21100    titleFormat: identity,
21101    eventInteractive: Boolean,
21102    noEventsText: String,
21103    viewHint: identity,
21104    navLinkHint: identity,
21105    closeHint: String,
21106    timeHint: String,
21107    eventHint: String,
21108    moreLinkClick: identity,
21109    moreLinkClassNames: identity,
21110    moreLinkContent: identity,
21111    moreLinkDidMount: identity,
21112    moreLinkWillUnmount: identity,
21113    monthStartFormat: createFormatter,
21114    handleCustomRendering: identity,
21115    customRenderingMetaMap: identity,
21116    customRenderingReplaces: Boolean
21117  };
21118  var BASE_OPTION_DEFAULTS = {
21119    eventDisplay: "auto",
21120    defaultRangeSeparator: " - ",
21121    titleRangeSeparator: " \u2013 ",
21122    defaultTimedEventDuration: "01:00:00",
21123    defaultAllDayEventDuration: { day: 1 },
21124    forceEventDuration: false,
21125    nextDayThreshold: "00:00:00",
21126    dayHeaders: true,
21127    initialView: "",
21128    aspectRatio: 1.35,
21129    headerToolbar: {
21130      start: "title",
21131      center: "",
21132      end: "today prev,next"
21133    },
21134    weekends: true,
21135    weekNumbers: false,
21136    weekNumberCalculation: "local",
21137    editable: false,
21138    nowIndicator: false,
21139    scrollTime: "06:00:00",
21140    scrollTimeReset: true,
21141    slotMinTime: "00:00:00",
21142    slotMaxTime: "24:00:00",
21143    showNonCurrentDates: true,
21144    lazyFetching: true,
21145    startParam: "start",
21146    endParam: "end",
21147    timeZoneParam: "timeZone",
21148    timeZone: "local",
21149    locales: [],
21150    locale: "",
21151    themeSystem: "standard",
21152    dragRevertDuration: 500,
21153    dragScroll: true,
21154    allDayMaintainDuration: false,
21155    unselectAuto: true,
21156    dropAccept: "*",
21157    eventOrder: "start,-duration,allDay,title",
21158    dayPopoverFormat: { month: "long", day: "numeric", year: "numeric" },
21159    handleWindowResize: true,
21160    windowResizeDelay: 100,
21161    longPressDelay: 1e3,
21162    eventDragMinDistance: 5,
21163    expandRows: false,
21164    navLinks: false,
21165    selectable: false,
21166    eventMinHeight: 15,
21167    eventMinWidth: 30,
21168    eventShortHeight: 30,
21169    monthStartFormat: { month: "long", day: "numeric" }
21170  };
21171  var CALENDAR_LISTENER_REFINERS = {
21172    datesSet: identity,
21173    eventsSet: identity,
21174    eventAdd: identity,
21175    eventChange: identity,
21176    eventRemove: identity,
21177    windowResize: identity,
21178    eventClick: identity,
21179    eventMouseEnter: identity,
21180    eventMouseLeave: identity,
21181    select: identity,
21182    unselect: identity,
21183    loading: identity,
21184    _unmount: identity,
21185    _beforeprint: identity,
21186    _afterprint: identity,
21187    _noEventDrop: identity,
21188    _noEventResize: identity,
21189    _resize: identity,
21190    _scrollRequest: identity
21191  };
21192  var CALENDAR_OPTION_REFINERS = {
21193    buttonText: identity,
21194    buttonHints: identity,
21195    views: identity,
21196    plugins: identity,
21197    initialEvents: identity,
21198    events: identity,
21199    eventSources: identity
21200  };
21201  var COMPLEX_OPTION_COMPARATORS = {
21202    headerToolbar: isMaybeObjectsEqual,
21203    footerToolbar: isMaybeObjectsEqual,
21204    buttonText: isMaybeObjectsEqual,
21205    buttonHints: isMaybeObjectsEqual,
21206    buttonIcons: isMaybeObjectsEqual,
21207    dateIncrement: isMaybeObjectsEqual,
21208    plugins: isMaybeArraysEqual,
21209    events: isMaybeArraysEqual,
21210    eventSources: isMaybeArraysEqual,
21211    ["resources"]: isMaybeArraysEqual
21212  };
21213  function isMaybeObjectsEqual(a4, b4) {
21214    if (typeof a4 === "object" && typeof b4 === "object" && a4 && b4) {
21215      return isPropsEqual(a4, b4);
21216    }
21217    return a4 === b4;
21218  }
21219  function isMaybeArraysEqual(a4, b4) {
21220    if (Array.isArray(a4) && Array.isArray(b4)) {
21221      return isArraysEqual(a4, b4);
21222    }
21223    return a4 === b4;
21224  }
21225  var VIEW_OPTION_REFINERS = {
21226    type: String,
21227    component: identity,
21228    buttonText: String,
21229    buttonTextKey: String,
21230    dateProfileGeneratorClass: identity,
21231    usesMinMaxTime: Boolean,
21232    classNames: identity,
21233    content: identity,
21234    didMount: identity,
21235    willUnmount: identity
21236  };
21237  function mergeRawOptions(optionSets) {
21238    return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);
21239  }
21240  function refineProps(input, refiners) {
21241    let refined = {};
21242    let extra = {};
21243    for (let propName in refiners) {
21244      if (propName in input) {
21245        refined[propName] = refiners[propName](input[propName]);
21246      }
21247    }
21248    for (let propName in input) {
21249      if (!(propName in refiners)) {
21250        extra[propName] = input[propName];
21251      }
21252    }
21253    return { refined, extra };
21254  }
21255  function identity(raw) {
21256    return raw;
21257  }
21258  var { hasOwnProperty } = Object.prototype;
21259  function mergeProps(propObjs, complexPropsMap) {
21260    let dest = {};
21261    if (complexPropsMap) {
21262      for (let name in complexPropsMap) {
21263        if (complexPropsMap[name] === isMaybeObjectsEqual) {
21264          let complexObjs = [];
21265          for (let i4 = propObjs.length - 1; i4 >= 0; i4 -= 1) {
21266            let val = propObjs[i4][name];
21267            if (typeof val === "object" && val) {
21268              complexObjs.unshift(val);
21269            } else if (val !== void 0) {
21270              dest[name] = val;
21271              break;
21272            }
21273          }
21274          if (complexObjs.length) {
21275            dest[name] = mergeProps(complexObjs);
21276          }
21277        }
21278      }
21279    }
21280    for (let i4 = propObjs.length - 1; i4 >= 0; i4 -= 1) {
21281      let props = propObjs[i4];
21282      for (let name in props) {
21283        if (!(name in dest)) {
21284          dest[name] = props[name];
21285        }
21286      }
21287    }
21288    return dest;
21289  }
21290  function filterHash(hash3, func) {
21291    let filtered = {};
21292    for (let key in hash3) {
21293      if (func(hash3[key], key)) {
21294        filtered[key] = hash3[key];
21295      }
21296    }
21297    return filtered;
21298  }
21299  function mapHash(hash3, func) {
21300    let newHash = {};
21301    for (let key in hash3) {
21302      newHash[key] = func(hash3[key], key);
21303    }
21304    return newHash;
21305  }
21306  function arrayToHash(a4) {
21307    let hash3 = {};
21308    for (let item of a4) {
21309      hash3[item] = true;
21310    }
21311    return hash3;
21312  }
21313  function hashValuesToArray(obj) {
21314    let a4 = [];
21315    for (let key in obj) {
21316      a4.push(obj[key]);
21317    }
21318    return a4;
21319  }
21320  function isPropsEqual(obj0, obj1) {
21321    if (obj0 === obj1) {
21322      return true;
21323    }
21324    for (let key in obj0) {
21325      if (hasOwnProperty.call(obj0, key)) {
21326        if (!(key in obj1)) {
21327          return false;
21328        }
21329      }
21330    }
21331    for (let key in obj1) {
21332      if (hasOwnProperty.call(obj1, key)) {
21333        if (obj0[key] !== obj1[key]) {
21334          return false;
21335        }
21336      }
21337    }
21338    return true;
21339  }
21340  var HANDLER_RE = /^on[A-Z]/;
21341  function isNonHandlerPropsEqual(obj0, obj1) {
21342    const keys = getUnequalProps(obj0, obj1);
21343    for (let key of keys) {
21344      if (!HANDLER_RE.test(key)) {
21345        return false;
21346      }
21347    }
21348    return true;
21349  }
21350  function getUnequalProps(obj0, obj1) {
21351    let keys = [];
21352    for (let key in obj0) {
21353      if (hasOwnProperty.call(obj0, key)) {
21354        if (!(key in obj1)) {
21355          keys.push(key);
21356        }
21357      }
21358    }
21359    for (let key in obj1) {
21360      if (hasOwnProperty.call(obj1, key)) {
21361        if (obj0[key] !== obj1[key]) {
21362          keys.push(key);
21363        }
21364      }
21365    }
21366    return keys;
21367  }
21368  function compareObjs(oldProps, newProps, equalityFuncs = {}) {
21369    if (oldProps === newProps) {
21370      return true;
21371    }
21372    for (let key in newProps) {
21373      if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key]))
21374        ;
21375      else {
21376        return false;
21377      }
21378    }
21379    for (let key in oldProps) {
21380      if (!(key in newProps)) {
21381        return false;
21382      }
21383    }
21384    return true;
21385  }
21386  function isObjValsEqual(val0, val1, comparator) {
21387    if (val0 === val1 || comparator === true) {
21388      return true;
21389    }
21390    if (comparator) {
21391      return comparator(val0, val1);
21392    }
21393    return false;
21394  }
21395  function collectFromHash(hash3, startIndex = 0, endIndex, step = 1) {
21396    let res = [];
21397    if (endIndex == null) {
21398      endIndex = Object.keys(hash3).length;
21399    }
21400    for (let i4 = startIndex; i4 < endIndex; i4 += step) {
21401      let val = hash3[i4];
21402      if (val !== void 0) {
21403        res.push(val);
21404      }
21405    }
21406    return res;
21407  }
21408  var calendarSystemClassMap = {};
21409  function registerCalendarSystem(name, theClass) {
21410    calendarSystemClassMap[name] = theClass;
21411  }
21412  function createCalendarSystem(name) {
21413    return new calendarSystemClassMap[name]();
21414  }
21415  var GregorianCalendarSystem = class {
21416    getMarkerYear(d3) {
21417      return d3.getUTCFullYear();
21418    }
21419    getMarkerMonth(d3) {
21420      return d3.getUTCMonth();
21421    }
21422    getMarkerDay(d3) {
21423      return d3.getUTCDate();
21424    }
21425    arrayToMarker(arr) {
21426      return arrayToUtcDate(arr);
21427    }
21428    markerToArray(marker) {
21429      return dateToUtcArray(marker);
21430    }
21431  };
21432  registerCalendarSystem("gregory", GregorianCalendarSystem);
21433  var ISO_RE = /^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
21434  function parse(str) {
21435    let m5 = ISO_RE.exec(str);
21436    if (m5) {
21437      let marker = new Date(Date.UTC(Number(m5[1]), m5[3] ? Number(m5[3]) - 1 : 0, Number(m5[5] || 1), Number(m5[7] || 0), Number(m5[8] || 0), Number(m5[10] || 0), m5[12] ? Number(`0.${m5[12]}`) * 1e3 : 0));
21438      if (isValidDate(marker)) {
21439        let timeZoneOffset = null;
21440        if (m5[13]) {
21441          timeZoneOffset = (m5[15] === "-" ? -1 : 1) * (Number(m5[16] || 0) * 60 + Number(m5[18] || 0));
21442        }
21443        return {
21444          marker,
21445          isTimeUnspecified: !m5[6],
21446          timeZoneOffset
21447        };
21448      }
21449    }
21450    return null;
21451  }
21452  var DateEnv = class {
21453    constructor(settings) {
21454      let timeZone = this.timeZone = settings.timeZone;
21455      let isNamedTimeZone = timeZone !== "local" && timeZone !== "UTC";
21456      if (settings.namedTimeZoneImpl && isNamedTimeZone) {
21457        this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
21458      }
21459      this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
21460      this.calendarSystem = createCalendarSystem(settings.calendarSystem);
21461      this.locale = settings.locale;
21462      this.weekDow = settings.locale.week.dow;
21463      this.weekDoy = settings.locale.week.doy;
21464      if (settings.weekNumberCalculation === "ISO") {
21465        this.weekDow = 1;
21466        this.weekDoy = 4;
21467      }
21468      if (typeof settings.firstDay === "number") {
21469        this.weekDow = settings.firstDay;
21470      }
21471      if (typeof settings.weekNumberCalculation === "function") {
21472        this.weekNumberFunc = settings.weekNumberCalculation;
21473      }
21474      this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
21475      this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;
21476      this.cmdFormatter = settings.cmdFormatter;
21477      this.defaultSeparator = settings.defaultSeparator;
21478    }
21479    createMarker(input) {
21480      let meta = this.createMarkerMeta(input);
21481      if (meta === null) {
21482        return null;
21483      }
21484      return meta.marker;
21485    }
21486    createNowMarker() {
21487      if (this.canComputeOffset) {
21488        return this.timestampToMarker(new Date().valueOf());
21489      }
21490      return arrayToUtcDate(dateToLocalArray(new Date()));
21491    }
21492    createMarkerMeta(input) {
21493      if (typeof input === "string") {
21494        return this.parse(input);
21495      }
21496      let marker = null;
21497      if (typeof input === "number") {
21498        marker = this.timestampToMarker(input);
21499      } else if (input instanceof Date) {
21500        input = input.valueOf();
21501        if (!isNaN(input)) {
21502          marker = this.timestampToMarker(input);
21503        }
21504      } else if (Array.isArray(input)) {
21505        marker = arrayToUtcDate(input);
21506      }
21507      if (marker === null || !isValidDate(marker)) {
21508        return null;
21509      }
21510      return { marker, isTimeUnspecified: false, forcedTzo: null };
21511    }
21512    parse(s4) {
21513      let parts = parse(s4);
21514      if (parts === null) {
21515        return null;
21516      }
21517      let { marker } = parts;
21518      let forcedTzo = null;
21519      if (parts.timeZoneOffset !== null) {
21520        if (this.canComputeOffset) {
21521          marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1e3);
21522        } else {
21523          forcedTzo = parts.timeZoneOffset;
21524        }
21525      }
21526      return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo };
21527    }
21528    getYear(marker) {
21529      return this.calendarSystem.getMarkerYear(marker);
21530    }
21531    getMonth(marker) {
21532      return this.calendarSystem.getMarkerMonth(marker);
21533    }
21534    getDay(marker) {
21535      return this.calendarSystem.getMarkerDay(marker);
21536    }
21537    add(marker, dur) {
21538      let a4 = this.calendarSystem.markerToArray(marker);
21539      a4[0] += dur.years;
21540      a4[1] += dur.months;
21541      a4[2] += dur.days;
21542      a4[6] += dur.milliseconds;
21543      return this.calendarSystem.arrayToMarker(a4);
21544    }
21545    subtract(marker, dur) {
21546      let a4 = this.calendarSystem.markerToArray(marker);
21547      a4[0] -= dur.years;
21548      a4[1] -= dur.months;
21549      a4[2] -= dur.days;
21550      a4[6] -= dur.milliseconds;
21551      return this.calendarSystem.arrayToMarker(a4);
21552    }
21553    addYears(marker, n3) {
21554      let a4 = this.calendarSystem.markerToArray(marker);
21555      a4[0] += n3;
21556      return this.calendarSystem.arrayToMarker(a4);
21557    }
21558    addMonths(marker, n3) {
21559      let a4 = this.calendarSystem.markerToArray(marker);
21560      a4[1] += n3;
21561      return this.calendarSystem.arrayToMarker(a4);
21562    }
21563    diffWholeYears(m0, m1) {
21564      let { calendarSystem } = this;
21565      if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) && calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
21566        return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
21567      }
21568      return null;
21569    }
21570    diffWholeMonths(m0, m1) {
21571      let { calendarSystem } = this;
21572      if (timeAsMs(m0) === timeAsMs(m1) && calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
21573        return calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0) + (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
21574      }
21575      return null;
21576    }
21577    greatestWholeUnit(m0, m1) {
21578      let n3 = this.diffWholeYears(m0, m1);
21579      if (n3 !== null) {
21580        return { unit: "year", value: n3 };
21581      }
21582      n3 = this.diffWholeMonths(m0, m1);
21583      if (n3 !== null) {
21584        return { unit: "month", value: n3 };
21585      }
21586      n3 = diffWholeWeeks(m0, m1);
21587      if (n3 !== null) {
21588        return { unit: "week", value: n3 };
21589      }
21590      n3 = diffWholeDays(m0, m1);
21591      if (n3 !== null) {
21592        return { unit: "day", value: n3 };
21593      }
21594      n3 = diffHours(m0, m1);
21595      if (isInt(n3)) {
21596        return { unit: "hour", value: n3 };
21597      }
21598      n3 = diffMinutes(m0, m1);
21599      if (isInt(n3)) {
21600        return { unit: "minute", value: n3 };
21601      }
21602      n3 = diffSeconds(m0, m1);
21603      if (isInt(n3)) {
21604        return { unit: "second", value: n3 };
21605      }
21606      return { unit: "millisecond", value: m1.valueOf() - m0.valueOf() };
21607    }
21608    countDurationsBetween(m0, m1, d3) {
21609      let diff;
21610      if (d3.years) {
21611        diff = this.diffWholeYears(m0, m1);
21612        if (diff !== null) {
21613          return diff / asRoughYears(d3);
21614        }
21615      }
21616      if (d3.months) {
21617        diff = this.diffWholeMonths(m0, m1);
21618        if (diff !== null) {
21619          return diff / asRoughMonths(d3);
21620        }
21621      }
21622      if (d3.days) {
21623        diff = diffWholeDays(m0, m1);
21624        if (diff !== null) {
21625          return diff / asRoughDays(d3);
21626        }
21627      }
21628      return (m1.valueOf() - m0.valueOf()) / asRoughMs(d3);
21629    }
21630    startOf(m5, unit) {
21631      if (unit === "year") {
21632        return this.startOfYear(m5);
21633      }
21634      if (unit === "month") {
21635        return this.startOfMonth(m5);
21636      }
21637      if (unit === "week") {
21638        return this.startOfWeek(m5);
21639      }
21640      if (unit === "day") {
21641        return startOfDay(m5);
21642      }
21643      if (unit === "hour") {
21644        return startOfHour(m5);
21645      }
21646      if (unit === "minute") {
21647        return startOfMinute(m5);
21648      }
21649      if (unit === "second") {
21650        return startOfSecond(m5);
21651      }
21652      return null;
21653    }
21654    startOfYear(m5) {
21655      return this.calendarSystem.arrayToMarker([
21656        this.calendarSystem.getMarkerYear(m5)
21657      ]);
21658    }
21659    startOfMonth(m5) {
21660      return this.calendarSystem.arrayToMarker([
21661        this.calendarSystem.getMarkerYear(m5),
21662        this.calendarSystem.getMarkerMonth(m5)
21663      ]);
21664    }
21665    startOfWeek(m5) {
21666      return this.calendarSystem.arrayToMarker([
21667        this.calendarSystem.getMarkerYear(m5),
21668        this.calendarSystem.getMarkerMonth(m5),
21669        m5.getUTCDate() - (m5.getUTCDay() - this.weekDow + 7) % 7
21670      ]);
21671    }
21672    computeWeekNumber(marker) {
21673      if (this.weekNumberFunc) {
21674        return this.weekNumberFunc(this.toDate(marker));
21675      }
21676      return weekOfYear(marker, this.weekDow, this.weekDoy);
21677    }
21678    format(marker, formatter, dateOptions = {}) {
21679      return formatter.format({
21680        marker,
21681        timeZoneOffset: dateOptions.forcedTzo != null ? dateOptions.forcedTzo : this.offsetForMarker(marker)
21682      }, this);
21683    }
21684    formatRange(start5, end2, formatter, dateOptions = {}) {
21685      if (dateOptions.isEndExclusive) {
21686        end2 = addMs(end2, -1);
21687      }
21688      return formatter.formatRange({
21689        marker: start5,
21690        timeZoneOffset: dateOptions.forcedStartTzo != null ? dateOptions.forcedStartTzo : this.offsetForMarker(start5)
21691      }, {
21692        marker: end2,
21693        timeZoneOffset: dateOptions.forcedEndTzo != null ? dateOptions.forcedEndTzo : this.offsetForMarker(end2)
21694      }, this, dateOptions.defaultSeparator);
21695    }
21696    formatIso(marker, extraOptions = {}) {
21697      let timeZoneOffset = null;
21698      if (!extraOptions.omitTimeZoneOffset) {
21699        if (extraOptions.forcedTzo != null) {
21700          timeZoneOffset = extraOptions.forcedTzo;
21701        } else {
21702          timeZoneOffset = this.offsetForMarker(marker);
21703        }
21704      }
21705      return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
21706    }
21707    timestampToMarker(ms) {
21708      if (this.timeZone === "local") {
21709        return arrayToUtcDate(dateToLocalArray(new Date(ms)));
21710      }
21711      if (this.timeZone === "UTC" || !this.namedTimeZoneImpl) {
21712        return new Date(ms);
21713      }
21714      return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
21715    }
21716    offsetForMarker(m5) {
21717      if (this.timeZone === "local") {
21718        return -arrayToLocalDate(dateToUtcArray(m5)).getTimezoneOffset();
21719      }
21720      if (this.timeZone === "UTC") {
21721        return 0;
21722      }
21723      if (this.namedTimeZoneImpl) {
21724        return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m5));
21725      }
21726      return null;
21727    }
21728    toDate(m5, forcedTzo) {
21729      if (this.timeZone === "local") {
21730        return arrayToLocalDate(dateToUtcArray(m5));
21731      }
21732      if (this.timeZone === "UTC") {
21733        return new Date(m5.valueOf());
21734      }
21735      if (!this.namedTimeZoneImpl) {
21736        return new Date(m5.valueOf() - (forcedTzo || 0));
21737      }
21738      return new Date(m5.valueOf() - this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m5)) * 1e3 * 60);
21739    }
21740  };
21741  var Theme = class {
21742    constructor(calendarOptions) {
21743      if (this.iconOverrideOption) {
21744        this.setIconOverride(calendarOptions[this.iconOverrideOption]);
21745      }
21746    }
21747    setIconOverride(iconOverrideHash) {
21748      let iconClassesCopy;
21749      let buttonName;
21750      if (typeof iconOverrideHash === "object" && iconOverrideHash) {
21751        iconClassesCopy = Object.assign({}, this.iconClasses);
21752        for (buttonName in iconOverrideHash) {
21753          iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
21754        }
21755        this.iconClasses = iconClassesCopy;
21756      } else if (iconOverrideHash === false) {
21757        this.iconClasses = {};
21758      }
21759    }
21760    applyIconOverridePrefix(className) {
21761      let prefix = this.iconOverridePrefix;
21762      if (prefix && className.indexOf(prefix) !== 0) {
21763        className = prefix + className;
21764      }
21765      return className;
21766    }
21767    getClass(key) {
21768      return this.classes[key] || "";
21769    }
21770    getIconClass(buttonName, isRtl) {
21771      let className;
21772      if (isRtl && this.rtlIconClasses) {
21773        className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];
21774      } else {
21775        className = this.iconClasses[buttonName];
21776      }
21777      if (className) {
21778        return `${this.baseIconClass} ${className}`;
21779      }
21780      return "";
21781    }
21782    getCustomButtonIconClass(customButtonProps) {
21783      let className;
21784      if (this.iconOverrideCustomButtonOption) {
21785        className = customButtonProps[this.iconOverrideCustomButtonOption];
21786        if (className) {
21787          return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`;
21788        }
21789      }
21790      return "";
21791    }
21792  };
21793  Theme.prototype.classes = {};
21794  Theme.prototype.iconClasses = {};
21795  Theme.prototype.baseIconClass = "";
21796  Theme.prototype.iconOverridePrefix = "";
21797  function flushSync(runBeforeFlush) {
21798    runBeforeFlush();
21799    let oldDebounceRendering = l2.debounceRendering;
21800    let callbackQ = [];
21801    function execCallbackSync(callback) {
21802      callbackQ.push(callback);
21803    }
21804    l2.debounceRendering = execCallbackSync;
21805    D2(y2(FakeComponent, {}), document.createElement("div"));
21806    while (callbackQ.length) {
21807      callbackQ.shift()();
21808    }
21809    l2.debounceRendering = oldDebounceRendering;
21810  }
21811  var FakeComponent = class extends x2 {
21812    render() {
21813      return y2("div", {});
21814    }
21815    componentDidMount() {
21816      this.setState({});
21817    }
21818  };
21819  function createContext(defaultValue) {
21820    let ContextType = G2(defaultValue);
21821    let origProvider = ContextType.Provider;
21822    ContextType.Provider = function() {
21823      let isNew = !this.getChildContext;
21824      let children = origProvider.apply(this, arguments);
21825      if (isNew) {
21826        let subs = [];
21827        this.shouldComponentUpdate = (_props) => {
21828          if (this.props.value !== _props.value) {
21829            subs.forEach((c4) => {
21830              c4.context = _props.value;
21831              c4.forceUpdate();
21832            });
21833          }
21834        };
21835        this.sub = (c4) => {
21836          subs.push(c4);
21837          let old = c4.componentWillUnmount;
21838          c4.componentWillUnmount = () => {
21839            subs.splice(subs.indexOf(c4), 1);
21840            old && old.call(c4);
21841          };
21842        };
21843      }
21844      return children;
21845    };
21846    return ContextType;
21847  }
21848  var ScrollResponder = class {
21849    constructor(execFunc, emitter, scrollTime, scrollTimeReset) {
21850      this.execFunc = execFunc;
21851      this.emitter = emitter;
21852      this.scrollTime = scrollTime;
21853      this.scrollTimeReset = scrollTimeReset;
21854      this.handleScrollRequest = (request) => {
21855        this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request);
21856        this.drain();
21857      };
21858      emitter.on("_scrollRequest", this.handleScrollRequest);
21859      this.fireInitialScroll();
21860    }
21861    detach() {
21862      this.emitter.off("_scrollRequest", this.handleScrollRequest);
21863    }
21864    update(isDatesNew) {
21865      if (isDatesNew && this.scrollTimeReset) {
21866        this.fireInitialScroll();
21867      } else {
21868        this.drain();
21869      }
21870    }
21871    fireInitialScroll() {
21872      this.handleScrollRequest({
21873        time: this.scrollTime
21874      });
21875    }
21876    drain() {
21877      if (this.queuedRequest && this.execFunc(this.queuedRequest)) {
21878        this.queuedRequest = null;
21879      }
21880    }
21881  };
21882  var ViewContextType = createContext({});
21883  function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch2, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
21884    return {
21885      dateEnv,
21886      options: viewOptions,
21887      pluginHooks,
21888      emitter,
21889      dispatch: dispatch2,
21890      getCurrentData,
21891      calendarApi,
21892      viewSpec,
21893      viewApi,
21894      dateProfileGenerator,
21895      theme,
21896      isRtl: viewOptions.direction === "rtl",
21897      addResizeHandler(handler) {
21898        emitter.on("_resize", handler);
21899      },
21900      removeResizeHandler(handler) {
21901        emitter.off("_resize", handler);
21902      },
21903      createScrollResponder(execFunc) {
21904        return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
21905      },
21906      registerInteractiveComponent,
21907      unregisterInteractiveComponent
21908    };
21909  }
21910  var PureComponent = class extends x2 {
21911    shouldComponentUpdate(nextProps, nextState) {
21912      if (this.debug) {
21913        console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));
21914      }
21915      return !compareObjs(this.props, nextProps, this.propEquality) || !compareObjs(this.state, nextState, this.stateEquality);
21916    }
21917    safeSetState(newState) {
21918      if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {
21919        this.setState(newState);
21920      }
21921    }
21922  };
21923  PureComponent.addPropsEquality = addPropsEquality;
21924  PureComponent.addStateEquality = addStateEquality;
21925  PureComponent.contextType = ViewContextType;
21926  PureComponent.prototype.propEquality = {};
21927  PureComponent.prototype.stateEquality = {};
21928  var BaseComponent = class extends PureComponent {
21929  };
21930  BaseComponent.contextType = ViewContextType;
21931  function addPropsEquality(propEquality) {
21932    let hash3 = Object.create(this.prototype.propEquality);
21933    Object.assign(hash3, propEquality);
21934    this.prototype.propEquality = hash3;
21935  }
21936  function addStateEquality(stateEquality) {
21937    let hash3 = Object.create(this.prototype.stateEquality);
21938    Object.assign(hash3, stateEquality);
21939    this.prototype.stateEquality = hash3;
21940  }
21941  function setRef(ref, current) {
21942    if (typeof ref === "function") {
21943      ref(current);
21944    } else if (ref) {
21945      ref.current = current;
21946    }
21947  }
21948  var ContentInjector = class extends BaseComponent {
21949    constructor() {
21950      super(...arguments);
21951      this.id = guid();
21952      this.queuedDomNodes = [];
21953      this.currentDomNodes = [];
21954      this.handleEl = (el) => {
21955        const { options } = this.context;
21956        const { generatorName } = this.props;
21957        if (!options.customRenderingReplaces || !hasCustomRenderingHandler(generatorName, options)) {
21958          this.updateElRef(el);
21959        }
21960      };
21961      this.updateElRef = (el) => {
21962        if (this.props.elRef) {
21963          setRef(this.props.elRef, el);
21964        }
21965      };
21966    }
21967    render() {
21968      const { props, context } = this;
21969      const { options } = context;
21970      const { customGenerator, defaultGenerator, renderProps } = props;
21971      const attrs = buildElAttrs(props, [], this.handleEl);
21972      let useDefault = false;
21973      let innerContent;
21974      let queuedDomNodes = [];
21975      let currentGeneratorMeta;
21976      if (customGenerator != null) {
21977        const customGeneratorRes = typeof customGenerator === "function" ? customGenerator(renderProps, y2) : customGenerator;
21978        if (customGeneratorRes === true) {
21979          useDefault = true;
21980        } else {
21981          const isObject3 = customGeneratorRes && typeof customGeneratorRes === "object";
21982          if (isObject3 && "html" in customGeneratorRes) {
21983            attrs.dangerouslySetInnerHTML = { __html: customGeneratorRes.html };
21984          } else if (isObject3 && "domNodes" in customGeneratorRes) {
21985            queuedDomNodes = Array.prototype.slice.call(customGeneratorRes.domNodes);
21986          } else if (isObject3 ? i2(customGeneratorRes) : typeof customGeneratorRes !== "function") {
21987            innerContent = customGeneratorRes;
21988          } else {
21989            currentGeneratorMeta = customGeneratorRes;
21990          }
21991        }
21992      } else {
21993        useDefault = !hasCustomRenderingHandler(props.generatorName, options);
21994      }
21995      if (useDefault && defaultGenerator) {
21996        innerContent = defaultGenerator(renderProps);
21997      }
21998      this.queuedDomNodes = queuedDomNodes;
21999      this.currentGeneratorMeta = currentGeneratorMeta;
22000      return y2(props.elTag, attrs, innerContent);
22001    }
22002    componentDidMount() {
22003      this.applyQueueudDomNodes();
22004      this.triggerCustomRendering(true);
22005    }
22006    componentDidUpdate() {
22007      this.applyQueueudDomNodes();
22008      this.triggerCustomRendering(true);
22009    }
22010    componentWillUnmount() {
22011      this.triggerCustomRendering(false);
22012    }
22013    triggerCustomRendering(isActive) {
22014      var _a;
22015      const { props, context } = this;
22016      const { handleCustomRendering, customRenderingMetaMap } = context.options;
22017      if (handleCustomRendering) {
22018        const generatorMeta = (_a = this.currentGeneratorMeta) !== null && _a !== void 0 ? _a : customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];
22019        if (generatorMeta) {
22020          handleCustomRendering(Object.assign(Object.assign({
22021            id: this.id,
22022            isActive,
22023            containerEl: this.base,
22024            reportNewContainerEl: this.updateElRef,
22025            generatorMeta
22026          }, props), { elClasses: (props.elClasses || []).filter(isTruthy) }));
22027        }
22028      }
22029    }
22030    applyQueueudDomNodes() {
22031      const { queuedDomNodes, currentDomNodes } = this;
22032      const el = this.base;
22033      if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {
22034        currentDomNodes.forEach(removeElement);
22035        for (let newNode of queuedDomNodes) {
22036          el.appendChild(newNode);
22037        }
22038        this.currentDomNodes = queuedDomNodes;
22039      }
22040    }
22041  };
22042  ContentInjector.addPropsEquality({
22043    elClasses: isArraysEqual,
22044    elStyle: isPropsEqual,
22045    elAttrs: isNonHandlerPropsEqual,
22046    renderProps: isPropsEqual
22047  });
22048  function hasCustomRenderingHandler(generatorName, options) {
22049    var _a;
22050    return Boolean(options.handleCustomRendering && generatorName && ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));
22051  }
22052  function buildElAttrs(props, extraClassNames, elRef) {
22053    const attrs = Object.assign(Object.assign({}, props.elAttrs), { ref: elRef });
22054    if (props.elClasses || extraClassNames) {
22055      attrs.className = (props.elClasses || []).concat(extraClassNames || []).concat(attrs.className || []).filter(Boolean).join(" ");
22056    }
22057    if (props.elStyle) {
22058      attrs.style = props.elStyle;
22059    }
22060    return attrs;
22061  }
22062  function isTruthy(val) {
22063    return Boolean(val);
22064  }
22065  var RenderId = createContext(0);
22066  var ContentContainer = class extends x2 {
22067    constructor() {
22068      super(...arguments);
22069      this.InnerContent = InnerContentInjector.bind(void 0, this);
22070      this.handleEl = (el) => {
22071        this.el = el;
22072        if (this.props.elRef) {
22073          setRef(this.props.elRef, el);
22074          if (el && this.didMountMisfire) {
22075            this.componentDidMount();
22076          }
22077        }
22078      };
22079    }
22080    render() {
22081      const { props } = this;
22082      const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);
22083      if (props.children) {
22084        const elAttrs = buildElAttrs(props, generatedClassNames, this.handleEl);
22085        const children = props.children(this.InnerContent, props.renderProps, elAttrs);
22086        if (props.elTag) {
22087          return y2(props.elTag, elAttrs, children);
22088        } else {
22089          return children;
22090        }
22091      } else {
22092        return y2(ContentInjector, Object.assign(Object.assign({}, props), { elRef: this.handleEl, elTag: props.elTag || "div", elClasses: (props.elClasses || []).concat(generatedClassNames), renderId: this.context }));
22093      }
22094    }
22095    componentDidMount() {
22096      var _a, _b;
22097      if (this.el) {
22098        (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
22099      } else {
22100        this.didMountMisfire = true;
22101      }
22102    }
22103    componentWillUnmount() {
22104      var _a, _b;
22105      (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.el }));
22106    }
22107  };
22108  ContentContainer.contextType = RenderId;
22109  function InnerContentInjector(containerComponent, props) {
22110    const parentProps = containerComponent.props;
22111    return y2(ContentInjector, Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, customGenerator: parentProps.customGenerator, defaultGenerator: parentProps.defaultGenerator, renderId: containerComponent.context }, props));
22112  }
22113  function generateClassNames(classNameGenerator, renderProps) {
22114    const classNames = typeof classNameGenerator === "function" ? classNameGenerator(renderProps) : classNameGenerator || [];
22115    return typeof classNames === "string" ? [classNames] : classNames;
22116  }
22117  var ViewContainer = class extends BaseComponent {
22118    render() {
22119      let { props, context } = this;
22120      let { options } = context;
22121      let renderProps = { view: context.viewApi };
22122      return y2(ContentContainer, Object.assign({}, props, { elTag: props.elTag || "div", elClasses: [
22123        ...buildViewClassNames(props.viewSpec),
22124        ...props.elClasses || []
22125      ], renderProps, classNameGenerator: options.viewClassNames, generatorName: void 0, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children);
22126    }
22127  };
22128  function buildViewClassNames(viewSpec) {
22129    return [
22130      `fc-${viewSpec.type}-view`,
22131      "fc-view"
22132    ];
22133  }
22134  function parseRange(input, dateEnv) {
22135    let start5 = null;
22136    let end2 = null;
22137    if (input.start) {
22138      start5 = dateEnv.createMarker(input.start);
22139    }
22140    if (input.end) {
22141      end2 = dateEnv.createMarker(input.end);
22142    }
22143    if (!start5 && !end2) {
22144      return null;
22145    }
22146    if (start5 && end2 && end2 < start5) {
22147      return null;
22148    }
22149    return { start: start5, end: end2 };
22150  }
22151  function invertRanges(ranges, constraintRange) {
22152    let invertedRanges = [];
22153    let { start: start5 } = constraintRange;
22154    let i4;
22155    let dateRange;
22156    ranges.sort(compareRanges);
22157    for (i4 = 0; i4 < ranges.length; i4 += 1) {
22158      dateRange = ranges[i4];
22159      if (dateRange.start > start5) {
22160        invertedRanges.push({ start: start5, end: dateRange.start });
22161      }
22162      if (dateRange.end > start5) {
22163        start5 = dateRange.end;
22164      }
22165    }
22166    if (start5 < constraintRange.end) {
22167      invertedRanges.push({ start: start5, end: constraintRange.end });
22168    }
22169    return invertedRanges;
22170  }
22171  function compareRanges(range0, range1) {
22172    return range0.start.valueOf() - range1.start.valueOf();
22173  }
22174  function intersectRanges(range0, range1) {
22175    let { start: start5, end: end2 } = range0;
22176    let newRange = null;
22177    if (range1.start !== null) {
22178      if (start5 === null) {
22179        start5 = range1.start;
22180      } else {
22181        start5 = new Date(Math.max(start5.valueOf(), range1.start.valueOf()));
22182      }
22183    }
22184    if (range1.end != null) {
22185      if (end2 === null) {
22186        end2 = range1.end;
22187      } else {
22188        end2 = new Date(Math.min(end2.valueOf(), range1.end.valueOf()));
22189      }
22190    }
22191    if (start5 === null || end2 === null || start5 < end2) {
22192      newRange = { start: start5, end: end2 };
22193    }
22194    return newRange;
22195  }
22196  function rangesIntersect(range0, range1) {
22197    return (range0.end === null || range1.start === null || range0.end > range1.start) && (range0.start === null || range1.end === null || range0.start < range1.end);
22198  }
22199  function rangeContainsMarker(range, date) {
22200    return (range.start === null || date >= range.start) && (range.end === null || date < range.end);
22201  }
22202  function constrainMarkerToRange(date, range) {
22203    if (range.start != null && date < range.start) {
22204      return range.start;
22205    }
22206    if (range.end != null && date >= range.end) {
22207      return new Date(range.end.valueOf() - 1);
22208    }
22209    return date;
22210  }
22211  function computeAlignedDayRange(timedRange) {
22212    let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
22213    let start5 = startOfDay(timedRange.start);
22214    let end2 = addDays(start5, dayCnt);
22215    return { start: start5, end: end2 };
22216  }
22217  function computeVisibleDayRange(timedRange, nextDayThreshold = createDuration(0)) {
22218    let startDay = null;
22219    let endDay = null;
22220    if (timedRange.end) {
22221      endDay = startOfDay(timedRange.end);
22222      let endTimeMS = timedRange.end.valueOf() - endDay.valueOf();
22223      if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
22224        endDay = addDays(endDay, 1);
22225      }
22226    }
22227    if (timedRange.start) {
22228      startDay = startOfDay(timedRange.start);
22229      if (endDay && endDay <= startDay) {
22230        endDay = addDays(startDay, 1);
22231      }
22232    }
22233    return { start: startDay, end: endDay };
22234  }
22235  function isMultiDayRange(range) {
22236    let visibleRange = computeVisibleDayRange(range);
22237    return diffDays(visibleRange.start, visibleRange.end) > 1;
22238  }
22239  function diffDates(date0, date1, dateEnv, largeUnit) {
22240    if (largeUnit === "year") {
22241      return createDuration(dateEnv.diffWholeYears(date0, date1), "year");
22242    }
22243    if (largeUnit === "month") {
22244      return createDuration(dateEnv.diffWholeMonths(date0, date1), "month");
22245    }
22246    return diffDayAndTime(date0, date1);
22247  }
22248  function reduceCurrentDate(currentDate, action) {
22249    switch (action.type) {
22250      case "CHANGE_DATE":
22251        return action.dateMarker;
22252      default:
22253        return currentDate;
22254    }
22255  }
22256  function getInitialDate(options, dateEnv) {
22257    let initialDateInput = options.initialDate;
22258    if (initialDateInput != null) {
22259      return dateEnv.createMarker(initialDateInput);
22260    }
22261    return getNow(options.now, dateEnv);
22262  }
22263  function getNow(nowInput, dateEnv) {
22264    if (typeof nowInput === "function") {
22265      nowInput = nowInput();
22266    }
22267    if (nowInput == null) {
22268      return dateEnv.createNowMarker();
22269    }
22270    return dateEnv.createMarker(nowInput);
22271  }
22272  var DateProfileGenerator = class {
22273    constructor(props) {
22274      this.props = props;
22275      this.nowDate = getNow(props.nowInput, props.dateEnv);
22276      this.initHiddenDays();
22277    }
22278    buildPrev(currentDateProfile, currentDate, forceToValid) {
22279      let { dateEnv } = this.props;
22280      let prevDate = dateEnv.subtract(
22281        dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit),
22282        currentDateProfile.dateIncrement
22283      );
22284      return this.build(prevDate, -1, forceToValid);
22285    }
22286    buildNext(currentDateProfile, currentDate, forceToValid) {
22287      let { dateEnv } = this.props;
22288      let nextDate = dateEnv.add(
22289        dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit),
22290        currentDateProfile.dateIncrement
22291      );
22292      return this.build(nextDate, 1, forceToValid);
22293    }
22294    build(currentDate, direction, forceToValid = true) {
22295      let { props } = this;
22296      let validRange;
22297      let currentInfo;
22298      let isRangeAllDay;
22299      let renderRange;
22300      let activeRange;
22301      let isValid;
22302      validRange = this.buildValidRange();
22303      validRange = this.trimHiddenDays(validRange);
22304      if (forceToValid) {
22305        currentDate = constrainMarkerToRange(currentDate, validRange);
22306      }
22307      currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
22308      isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
22309      renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
22310      renderRange = this.trimHiddenDays(renderRange);
22311      activeRange = renderRange;
22312      if (!props.showNonCurrentDates) {
22313        activeRange = intersectRanges(activeRange, currentInfo.range);
22314      }
22315      activeRange = this.adjustActiveRange(activeRange);
22316      activeRange = intersectRanges(activeRange, validRange);
22317      isValid = rangesIntersect(currentInfo.range, validRange);
22318      if (!rangeContainsMarker(renderRange, currentDate)) {
22319        currentDate = renderRange.start;
22320      }
22321      return {
22322        currentDate,
22323        validRange,
22324        currentRange: currentInfo.range,
22325        currentRangeUnit: currentInfo.unit,
22326        isRangeAllDay,
22327        activeRange,
22328        renderRange,
22329        slotMinTime: props.slotMinTime,
22330        slotMaxTime: props.slotMaxTime,
22331        isValid,
22332        dateIncrement: this.buildDateIncrement(currentInfo.duration)
22333      };
22334    }
22335    buildValidRange() {
22336      let input = this.props.validRangeInput;
22337      let simpleInput = typeof input === "function" ? input.call(this.props.calendarApi, this.nowDate) : input;
22338      return this.refineRange(simpleInput) || { start: null, end: null };
22339    }
22340    buildCurrentRangeInfo(date, direction) {
22341      let { props } = this;
22342      let duration = null;
22343      let unit = null;
22344      let range = null;
22345      let dayCount;
22346      if (props.duration) {
22347        duration = props.duration;
22348        unit = props.durationUnit;
22349        range = this.buildRangeFromDuration(date, direction, duration, unit);
22350      } else if (dayCount = this.props.dayCount) {
22351        unit = "day";
22352        range = this.buildRangeFromDayCount(date, direction, dayCount);
22353      } else if (range = this.buildCustomVisibleRange(date)) {
22354        unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;
22355      } else {
22356        duration = this.getFallbackDuration();
22357        unit = greatestDurationDenominator(duration).unit;
22358        range = this.buildRangeFromDuration(date, direction, duration, unit);
22359      }
22360      return { duration, unit, range };
22361    }
22362    getFallbackDuration() {
22363      return createDuration({ day: 1 });
22364    }
22365    adjustActiveRange(range) {
22366      let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props;
22367      let { start: start5, end: end2 } = range;
22368      if (usesMinMaxTime) {
22369        if (asRoughDays(slotMinTime) < 0) {
22370          start5 = startOfDay(start5);
22371          start5 = dateEnv.add(start5, slotMinTime);
22372        }
22373        if (asRoughDays(slotMaxTime) > 1) {
22374          end2 = startOfDay(end2);
22375          end2 = addDays(end2, -1);
22376          end2 = dateEnv.add(end2, slotMaxTime);
22377        }
22378      }
22379      return { start: start5, end: end2 };
22380    }
22381    buildRangeFromDuration(date, direction, duration, unit) {
22382      let { dateEnv, dateAlignment } = this.props;
22383      let start5;
22384      let end2;
22385      let res;
22386      if (!dateAlignment) {
22387        let { dateIncrement } = this.props;
22388        if (dateIncrement) {
22389          if (asRoughMs(dateIncrement) < asRoughMs(duration)) {
22390            dateAlignment = greatestDurationDenominator(dateIncrement).unit;
22391          } else {
22392            dateAlignment = unit;
22393          }
22394        } else {
22395          dateAlignment = unit;
22396        }
22397      }
22398      if (asRoughDays(duration) <= 1) {
22399        if (this.isHiddenDay(start5)) {
22400          start5 = this.skipHiddenDays(start5, direction);
22401          start5 = startOfDay(start5);
22402        }
22403      }
22404      function computeRes() {
22405        start5 = dateEnv.startOf(date, dateAlignment);
22406        end2 = dateEnv.add(start5, duration);
22407        res = { start: start5, end: end2 };
22408      }
22409      computeRes();
22410      if (!this.trimHiddenDays(res)) {
22411        date = this.skipHiddenDays(date, direction);
22412        computeRes();
22413      }
22414      return res;
22415    }
22416    buildRangeFromDayCount(date, direction, dayCount) {
22417      let { dateEnv, dateAlignment } = this.props;
22418      let runningCount = 0;
22419      let start5 = date;
22420      let end2;
22421      if (dateAlignment) {
22422        start5 = dateEnv.startOf(start5, dateAlignment);
22423      }
22424      start5 = startOfDay(start5);
22425      start5 = this.skipHiddenDays(start5, direction);
22426      end2 = start5;
22427      do {
22428        end2 = addDays(end2, 1);
22429        if (!this.isHiddenDay(end2)) {
22430          runningCount += 1;
22431        }
22432      } while (runningCount < dayCount);
22433      return { start: start5, end: end2 };
22434    }
22435    buildCustomVisibleRange(date) {
22436      let { props } = this;
22437      let input = props.visibleRangeInput;
22438      let simpleInput = typeof input === "function" ? input.call(props.calendarApi, props.dateEnv.toDate(date)) : input;
22439      let range = this.refineRange(simpleInput);
22440      if (range && (range.start == null || range.end == null)) {
22441        return null;
22442      }
22443      return range;
22444    }
22445    buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
22446      return currentRange;
22447    }
22448    buildDateIncrement(fallback) {
22449      let { dateIncrement } = this.props;
22450      let customAlignment;
22451      if (dateIncrement) {
22452        return dateIncrement;
22453      }
22454      if (customAlignment = this.props.dateAlignment) {
22455        return createDuration(1, customAlignment);
22456      }
22457      if (fallback) {
22458        return fallback;
22459      }
22460      return createDuration({ days: 1 });
22461    }
22462    refineRange(rangeInput) {
22463      if (rangeInput) {
22464        let range = parseRange(rangeInput, this.props.dateEnv);
22465        if (range) {
22466          range = computeVisibleDayRange(range);
22467        }
22468        return range;
22469      }
22470      return null;
22471    }
22472    initHiddenDays() {
22473      let hiddenDays = this.props.hiddenDays || [];
22474      let isHiddenDayHash = [];
22475      let dayCnt = 0;
22476      let i4;
22477      if (this.props.weekends === false) {
22478        hiddenDays.push(0, 6);
22479      }
22480      for (i4 = 0; i4 < 7; i4 += 1) {
22481        if (!(isHiddenDayHash[i4] = hiddenDays.indexOf(i4) !== -1)) {
22482          dayCnt += 1;
22483        }
22484      }
22485      if (!dayCnt) {
22486        throw new Error("invalid hiddenDays");
22487      }
22488      this.isHiddenDayHash = isHiddenDayHash;
22489    }
22490    trimHiddenDays(range) {
22491      let { start: start5, end: end2 } = range;
22492      if (start5) {
22493        start5 = this.skipHiddenDays(start5);
22494      }
22495      if (end2) {
22496        end2 = this.skipHiddenDays(end2, -1, true);
22497      }
22498      if (start5 == null || end2 == null || start5 < end2) {
22499        return { start: start5, end: end2 };
22500      }
22501      return null;
22502    }
22503    isHiddenDay(day) {
22504      if (day instanceof Date) {
22505        day = day.getUTCDay();
22506      }
22507      return this.isHiddenDayHash[day];
22508    }
22509    skipHiddenDays(date, inc = 1, isExclusive = false) {
22510      while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
22511        date = addDays(date, inc);
22512      }
22513      return date;
22514    }
22515  };
22516  function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
22517    return {
22518      instanceId: guid(),
22519      defId,
22520      range,
22521      forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
22522      forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo
22523    };
22524  }
22525  function parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {
22526    for (let i4 = 0; i4 < recurringTypes.length; i4 += 1) {
22527      let parsed = recurringTypes[i4].parse(refined, dateEnv);
22528      if (parsed) {
22529        let { allDay } = refined;
22530        if (allDay == null) {
22531          allDay = defaultAllDay;
22532          if (allDay == null) {
22533            allDay = parsed.allDayGuess;
22534            if (allDay == null) {
22535              allDay = false;
22536            }
22537          }
22538        }
22539        return {
22540          allDay,
22541          duration: parsed.duration,
22542          typeData: parsed.typeData,
22543          typeId: i4
22544        };
22545      }
22546    }
22547    return null;
22548  }
22549  function expandRecurring(eventStore, framingRange, context) {
22550    let { dateEnv, pluginHooks, options } = context;
22551    let { defs, instances } = eventStore;
22552    instances = filterHash(instances, (instance) => !defs[instance.defId].recurringDef);
22553    for (let defId in defs) {
22554      let def = defs[defId];
22555      if (def.recurringDef) {
22556        let { duration } = def.recurringDef;
22557        if (!duration) {
22558          duration = def.allDay ? options.defaultAllDayEventDuration : options.defaultTimedEventDuration;
22559        }
22560        let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);
22561        for (let start5 of starts) {
22562          let instance = createEventInstance(defId, {
22563            start: start5,
22564            end: dateEnv.add(start5, duration)
22565          });
22566          instances[instance.instanceId] = instance;
22567        }
22568      }
22569    }
22570    return { defs, instances };
22571  }
22572  function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
22573    let typeDef = recurringTypes[eventDef.recurringDef.typeId];
22574    let markers = typeDef.expand(eventDef.recurringDef.typeData, {
22575      start: dateEnv.subtract(framingRange.start, duration),
22576      end: framingRange.end
22577    }, dateEnv);
22578    if (eventDef.allDay) {
22579      markers = markers.map(startOfDay);
22580    }
22581    return markers;
22582  }
22583  var EVENT_NON_DATE_REFINERS = {
22584    id: String,
22585    groupId: String,
22586    title: String,
22587    url: String,
22588    interactive: Boolean
22589  };
22590  var EVENT_DATE_REFINERS = {
22591    start: identity,
22592    end: identity,
22593    date: identity,
22594    allDay: Boolean
22595  };
22596  var EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });
22597  function parseEvent(raw, eventSource, context, allowOpenRange, refiners = buildEventRefiners(context), defIdMap, instanceIdMap) {
22598    let { refined, extra } = refineEventDef(raw, context, refiners);
22599    let defaultAllDay = computeIsDefaultAllDay(eventSource, context);
22600    let recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);
22601    if (recurringRes) {
22602      let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : "", recurringRes.allDay, Boolean(recurringRes.duration), context, defIdMap);
22603      def.recurringDef = {
22604        typeId: recurringRes.typeId,
22605        typeData: recurringRes.typeData,
22606        duration: recurringRes.duration
22607      };
22608      return { def, instance: null };
22609    }
22610    let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);
22611    if (singleRes) {
22612      let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : "", singleRes.allDay, singleRes.hasEnd, context, defIdMap);
22613      let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
22614      if (instanceIdMap && def.publicId && instanceIdMap[def.publicId]) {
22615        instance.instanceId = instanceIdMap[def.publicId];
22616      }
22617      return { def, instance };
22618    }
22619    return null;
22620  }
22621  function refineEventDef(raw, context, refiners = buildEventRefiners(context)) {
22622    return refineProps(raw, refiners);
22623  }
22624  function buildEventRefiners(context) {
22625    return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);
22626  }
22627  function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context, defIdMap) {
22628    let def = {
22629      title: refined.title || "",
22630      groupId: refined.groupId || "",
22631      publicId: refined.id || "",
22632      url: refined.url || "",
22633      recurringDef: null,
22634      defId: (defIdMap && refined.id ? defIdMap[refined.id] : "") || guid(),
22635      sourceId,
22636      allDay,
22637      hasEnd,
22638      interactive: refined.interactive,
22639      ui: createEventUi(refined, context),
22640      extendedProps: Object.assign(Object.assign({}, refined.extendedProps || {}), extra)
22641    };
22642    for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {
22643      Object.assign(def, memberAdder(refined));
22644    }
22645    Object.freeze(def.ui.classNames);
22646    Object.freeze(def.extendedProps);
22647    return def;
22648  }
22649  function parseSingle(refined, defaultAllDay, context, allowOpenRange) {
22650    let { allDay } = refined;
22651    let startMeta;
22652    let startMarker = null;
22653    let hasEnd = false;
22654    let endMeta;
22655    let endMarker = null;
22656    let startInput = refined.start != null ? refined.start : refined.date;
22657    startMeta = context.dateEnv.createMarkerMeta(startInput);
22658    if (startMeta) {
22659      startMarker = startMeta.marker;
22660    } else if (!allowOpenRange) {
22661      return null;
22662    }
22663    if (refined.end != null) {
22664      endMeta = context.dateEnv.createMarkerMeta(refined.end);
22665    }
22666    if (allDay == null) {
22667      if (defaultAllDay != null) {
22668        allDay = defaultAllDay;
22669      } else {
22670        allDay = (!startMeta || startMeta.isTimeUnspecified) && (!endMeta || endMeta.isTimeUnspecified);
22671      }
22672    }
22673    if (allDay && startMarker) {
22674      startMarker = startOfDay(startMarker);
22675    }
22676    if (endMeta) {
22677      endMarker = endMeta.marker;
22678      if (allDay) {
22679        endMarker = startOfDay(endMarker);
22680      }
22681      if (startMarker && endMarker <= startMarker) {
22682        endMarker = null;
22683      }
22684    }
22685    if (endMarker) {
22686      hasEnd = true;
22687    } else if (!allowOpenRange) {
22688      hasEnd = context.options.forceEventDuration || false;
22689      endMarker = context.dateEnv.add(startMarker, allDay ? context.options.defaultAllDayEventDuration : context.options.defaultTimedEventDuration);
22690    }
22691    return {
22692      allDay,
22693      hasEnd,
22694      range: { start: startMarker, end: endMarker },
22695      forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
22696      forcedEndTzo: endMeta ? endMeta.forcedTzo : null
22697    };
22698  }
22699  function computeIsDefaultAllDay(eventSource, context) {
22700    let res = null;
22701    if (eventSource) {
22702      res = eventSource.defaultAllDay;
22703    }
22704    if (res == null) {
22705      res = context.options.defaultAllDay;
22706    }
22707    return res;
22708  }
22709  function parseEvents(rawEvents, eventSource, context, allowOpenRange, defIdMap, instanceIdMap) {
22710    let eventStore = createEmptyEventStore();
22711    let eventRefiners = buildEventRefiners(context);
22712    for (let rawEvent of rawEvents) {
22713      let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners, defIdMap, instanceIdMap);
22714      if (tuple) {
22715        eventTupleToStore(tuple, eventStore);
22716      }
22717    }
22718    return eventStore;
22719  }
22720  function eventTupleToStore(tuple, eventStore = createEmptyEventStore()) {
22721    eventStore.defs[tuple.def.defId] = tuple.def;
22722    if (tuple.instance) {
22723      eventStore.instances[tuple.instance.instanceId] = tuple.instance;
22724    }
22725    return eventStore;
22726  }
22727  function getRelevantEvents(eventStore, instanceId) {
22728    let instance = eventStore.instances[instanceId];
22729    if (instance) {
22730      let def = eventStore.defs[instance.defId];
22731      let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef));
22732      newStore.defs[def.defId] = def;
22733      newStore.instances[instance.instanceId] = instance;
22734      return newStore;
22735    }
22736    return createEmptyEventStore();
22737  }
22738  function isEventDefsGrouped(def0, def1) {
22739    return Boolean(def0.groupId && def0.groupId === def1.groupId);
22740  }
22741  function createEmptyEventStore() {
22742    return { defs: {}, instances: {} };
22743  }
22744  function mergeEventStores(store0, store1) {
22745    return {
22746      defs: Object.assign(Object.assign({}, store0.defs), store1.defs),
22747      instances: Object.assign(Object.assign({}, store0.instances), store1.instances)
22748    };
22749  }
22750  function filterEventStoreDefs(eventStore, filterFunc) {
22751    let defs = filterHash(eventStore.defs, filterFunc);
22752    let instances = filterHash(eventStore.instances, (instance) => defs[instance.defId]);
22753    return { defs, instances };
22754  }
22755  function excludeSubEventStore(master, sub) {
22756    let { defs, instances } = master;
22757    let filteredDefs = {};
22758    let filteredInstances = {};
22759    for (let defId in defs) {
22760      if (!sub.defs[defId]) {
22761        filteredDefs[defId] = defs[defId];
22762      }
22763    }
22764    for (let instanceId in instances) {
22765      if (!sub.instances[instanceId] && filteredDefs[instances[instanceId].defId]) {
22766        filteredInstances[instanceId] = instances[instanceId];
22767      }
22768    }
22769    return {
22770      defs: filteredDefs,
22771      instances: filteredInstances
22772    };
22773  }
22774  function normalizeConstraint(input, context) {
22775    if (Array.isArray(input)) {
22776      return parseEvents(input, null, context, true);
22777    }
22778    if (typeof input === "object" && input) {
22779      return parseEvents([input], null, context, true);
22780    }
22781    if (input != null) {
22782      return String(input);
22783    }
22784    return null;
22785  }
22786  function parseClassNames(raw) {
22787    if (Array.isArray(raw)) {
22788      return raw;
22789    }
22790    if (typeof raw === "string") {
22791      return raw.split(/\s+/);
22792    }
22793    return [];
22794  }
22795  var EVENT_UI_REFINERS = {
22796    display: String,
22797    editable: Boolean,
22798    startEditable: Boolean,
22799    durationEditable: Boolean,
22800    constraint: identity,
22801    overlap: identity,
22802    allow: identity,
22803    className: parseClassNames,
22804    classNames: parseClassNames,
22805    color: String,
22806    backgroundColor: String,
22807    borderColor: String,
22808    textColor: String
22809  };
22810  var EMPTY_EVENT_UI = {
22811    display: null,
22812    startEditable: null,
22813    durationEditable: null,
22814    constraints: [],
22815    overlap: null,
22816    allows: [],
22817    backgroundColor: "",
22818    borderColor: "",
22819    textColor: "",
22820    classNames: []
22821  };
22822  function createEventUi(refined, context) {
22823    let constraint = normalizeConstraint(refined.constraint, context);
22824    return {
22825      display: refined.display || null,
22826      startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,
22827      durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,
22828      constraints: constraint != null ? [constraint] : [],
22829      overlap: refined.overlap != null ? refined.overlap : null,
22830      allows: refined.allow != null ? [refined.allow] : [],
22831      backgroundColor: refined.backgroundColor || refined.color || "",
22832      borderColor: refined.borderColor || refined.color || "",
22833      textColor: refined.textColor || "",
22834      classNames: (refined.className || []).concat(refined.classNames || [])
22835    };
22836  }
22837  function combineEventUis(uis) {
22838    return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
22839  }
22840  function combineTwoEventUis(item0, item1) {
22841    return {
22842      display: item1.display != null ? item1.display : item0.display,
22843      startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
22844      durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
22845      constraints: item0.constraints.concat(item1.constraints),
22846      overlap: typeof item1.overlap === "boolean" ? item1.overlap : item0.overlap,
22847      allows: item0.allows.concat(item1.allows),
22848      backgroundColor: item1.backgroundColor || item0.backgroundColor,
22849      borderColor: item1.borderColor || item0.borderColor,
22850      textColor: item1.textColor || item0.textColor,
22851      classNames: item0.classNames.concat(item1.classNames)
22852    };
22853  }
22854  var EVENT_SOURCE_REFINERS = {
22855    id: String,
22856    defaultAllDay: Boolean,
22857    url: String,
22858    format: String,
22859    events: identity,
22860    eventDataTransform: identity,
22861    success: identity,
22862    failure: identity
22863  };
22864  function parseEventSource(raw, context, refiners = buildEventSourceRefiners(context)) {
22865    let rawObj;
22866    if (typeof raw === "string") {
22867      rawObj = { url: raw };
22868    } else if (typeof raw === "function" || Array.isArray(raw)) {
22869      rawObj = { events: raw };
22870    } else if (typeof raw === "object" && raw) {
22871      rawObj = raw;
22872    }
22873    if (rawObj) {
22874      let { refined, extra } = refineProps(rawObj, refiners);
22875      let metaRes = buildEventSourceMeta(refined, context);
22876      if (metaRes) {
22877        return {
22878          _raw: raw,
22879          isFetching: false,
22880          latestFetchId: "",
22881          fetchRange: null,
22882          defaultAllDay: refined.defaultAllDay,
22883          eventDataTransform: refined.eventDataTransform,
22884          success: refined.success,
22885          failure: refined.failure,
22886          publicId: refined.id || "",
22887          sourceId: guid(),
22888          sourceDefId: metaRes.sourceDefId,
22889          meta: metaRes.meta,
22890          ui: createEventUi(refined, context),
22891          extendedProps: extra
22892        };
22893      }
22894    }
22895    return null;
22896  }
22897  function buildEventSourceRefiners(context) {
22898    return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);
22899  }
22900  function buildEventSourceMeta(raw, context) {
22901    let defs = context.pluginHooks.eventSourceDefs;
22902    for (let i4 = defs.length - 1; i4 >= 0; i4 -= 1) {
22903      let def = defs[i4];
22904      let meta = def.parseMeta(raw);
22905      if (meta) {
22906        return { sourceDefId: i4, meta };
22907      }
22908    }
22909    return null;
22910  }
22911  function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
22912    switch (action.type) {
22913      case "RECEIVE_EVENTS":
22914        return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
22915      case "RESET_RAW_EVENTS":
22916        return resetRawEvents(eventStore, eventSources[action.sourceId], action.rawEvents, dateProfile.activeRange, context);
22917      case "ADD_EVENTS":
22918        return addEvent(
22919          eventStore,
22920          action.eventStore,
22921          dateProfile ? dateProfile.activeRange : null,
22922          context
22923        );
22924      case "RESET_EVENTS":
22925        return action.eventStore;
22926      case "MERGE_EVENTS":
22927        return mergeEventStores(eventStore, action.eventStore);
22928      case "PREV":
22929      case "NEXT":
22930      case "CHANGE_DATE":
22931      case "CHANGE_VIEW_TYPE":
22932        if (dateProfile) {
22933          return expandRecurring(eventStore, dateProfile.activeRange, context);
22934        }
22935        return eventStore;
22936      case "REMOVE_EVENTS":
22937        return excludeSubEventStore(eventStore, action.eventStore);
22938      case "REMOVE_EVENT_SOURCE":
22939        return excludeEventsBySourceId(eventStore, action.sourceId);
22940      case "REMOVE_ALL_EVENT_SOURCES":
22941        return filterEventStoreDefs(eventStore, (eventDef) => !eventDef.sourceId);
22942      case "REMOVE_ALL_EVENTS":
22943        return createEmptyEventStore();
22944      default:
22945        return eventStore;
22946    }
22947  }
22948  function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
22949    if (eventSource && fetchId === eventSource.latestFetchId) {
22950      let subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
22951      if (fetchRange) {
22952        subset = expandRecurring(subset, fetchRange, context);
22953      }
22954      return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
22955    }
22956    return eventStore;
22957  }
22958  function resetRawEvents(existingEventStore, eventSource, rawEvents, activeRange, context) {
22959    const { defIdMap, instanceIdMap } = buildPublicIdMaps(existingEventStore);
22960    let newEventStore = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context, false, defIdMap, instanceIdMap);
22961    return expandRecurring(newEventStore, activeRange, context);
22962  }
22963  function transformRawEvents(rawEvents, eventSource, context) {
22964    let calEachTransform = context.options.eventDataTransform;
22965    let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
22966    if (sourceEachTransform) {
22967      rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
22968    }
22969    if (calEachTransform) {
22970      rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
22971    }
22972    return rawEvents;
22973  }
22974  function transformEachRawEvent(rawEvents, func) {
22975    let refinedEvents;
22976    if (!func) {
22977      refinedEvents = rawEvents;
22978    } else {
22979      refinedEvents = [];
22980      for (let rawEvent of rawEvents) {
22981        let refinedEvent = func(rawEvent);
22982        if (refinedEvent) {
22983          refinedEvents.push(refinedEvent);
22984        } else if (refinedEvent == null) {
22985          refinedEvents.push(rawEvent);
22986        }
22987      }
22988    }
22989    return refinedEvents;
22990  }
22991  function addEvent(eventStore, subset, expandRange, context) {
22992    if (expandRange) {
22993      subset = expandRecurring(subset, expandRange, context);
22994    }
22995    return mergeEventStores(eventStore, subset);
22996  }
22997  function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
22998    let { defs } = eventStore;
22999    let instances = mapHash(eventStore.instances, (instance) => {
23000      let def = defs[instance.defId];
23001      if (def.allDay) {
23002        return instance;
23003      }
23004      return Object.assign(Object.assign({}, instance), { range: {
23005        start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
23006        end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))
23007      }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
23008    });
23009    return { defs, instances };
23010  }
23011  function excludeEventsBySourceId(eventStore, sourceId) {
23012    return filterEventStoreDefs(eventStore, (eventDef) => eventDef.sourceId !== sourceId);
23013  }
23014  function buildPublicIdMaps(eventStore) {
23015    const { defs, instances } = eventStore;
23016    const defIdMap = {};
23017    const instanceIdMap = {};
23018    for (let defId in defs) {
23019      const def = defs[defId];
23020      const { publicId } = def;
23021      if (publicId) {
23022        defIdMap[publicId] = defId;
23023      }
23024    }
23025    for (let instanceId in instances) {
23026      const instance = instances[instanceId];
23027      const def = defs[instance.defId];
23028      const { publicId } = def;
23029      if (publicId) {
23030        instanceIdMap[publicId] = instanceId;
23031      }
23032    }
23033    return { defIdMap, instanceIdMap };
23034  }
23035  var Emitter = class {
23036    constructor() {
23037      this.handlers = {};
23038      this.thisContext = null;
23039    }
23040    setThisContext(thisContext) {
23041      this.thisContext = thisContext;
23042    }
23043    setOptions(options) {
23044      this.options = options;
23045    }
23046    on(type, handler) {
23047      addToHash(this.handlers, type, handler);
23048    }
23049    off(type, handler) {
23050      removeFromHash(this.handlers, type, handler);
23051    }
23052    trigger(type, ...args) {
23053      let attachedHandlers = this.handlers[type] || [];
23054      let optionHandler = this.options && this.options[type];
23055      let handlers = [].concat(optionHandler || [], attachedHandlers);
23056      for (let handler of handlers) {
23057        handler.apply(this.thisContext, args);
23058      }
23059    }
23060    hasHandlers(type) {
23061      return Boolean(this.handlers[type] && this.handlers[type].length || this.options && this.options[type]);
23062    }
23063  };
23064  function addToHash(hash3, type, handler) {
23065    (hash3[type] || (hash3[type] = [])).push(handler);
23066  }
23067  function removeFromHash(hash3, type, handler) {
23068    if (handler) {
23069      if (hash3[type]) {
23070        hash3[type] = hash3[type].filter((func) => func !== handler);
23071      }
23072    } else {
23073      delete hash3[type];
23074    }
23075  }
23076  var DEF_DEFAULTS = {
23077    startTime: "09:00",
23078    endTime: "17:00",
23079    daysOfWeek: [1, 2, 3, 4, 5],
23080    display: "inverse-background",
23081    classNames: "fc-non-business",
23082    groupId: "_businessHours"
23083  };
23084  function parseBusinessHours(input, context) {
23085    return parseEvents(refineInputs(input), null, context);
23086  }
23087  function refineInputs(input) {
23088    let rawDefs;
23089    if (input === true) {
23090      rawDefs = [{}];
23091    } else if (Array.isArray(input)) {
23092      rawDefs = input.filter((rawDef) => rawDef.daysOfWeek);
23093    } else if (typeof input === "object" && input) {
23094      rawDefs = [input];
23095    } else {
23096      rawDefs = [];
23097    }
23098    rawDefs = rawDefs.map((rawDef) => Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef));
23099    return rawDefs;
23100  }
23101  function triggerDateSelect(selection, pev, context) {
23102    context.emitter.trigger("select", Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));
23103  }
23104  function triggerDateUnselect(pev, context) {
23105    context.emitter.trigger("unselect", {
23106      jsEvent: pev ? pev.origEvent : null,
23107      view: context.viewApi || context.calendarApi.view
23108    });
23109  }
23110  function buildDateSpanApiWithContext(dateSpan, context) {
23111    let props = {};
23112    for (let transform of context.pluginHooks.dateSpanTransforms) {
23113      Object.assign(props, transform(dateSpan, context));
23114    }
23115    Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));
23116    return props;
23117  }
23118  function getDefaultEventEnd(allDay, marker, context) {
23119    let { dateEnv, options } = context;
23120    let end2 = marker;
23121    if (allDay) {
23122      end2 = startOfDay(end2);
23123      end2 = dateEnv.add(end2, options.defaultAllDayEventDuration);
23124    } else {
23125      end2 = dateEnv.add(end2, options.defaultTimedEventDuration);
23126    }
23127    return end2;
23128  }
23129  function applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {
23130    let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
23131    let dest = createEmptyEventStore();
23132    for (let defId in eventStore.defs) {
23133      let def = eventStore.defs[defId];
23134      dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);
23135    }
23136    for (let instanceId in eventStore.instances) {
23137      let instance = eventStore.instances[instanceId];
23138      let def = dest.defs[instance.defId];
23139      dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);
23140    }
23141    return dest;
23142  }
23143  function applyMutationToEventDef(eventDef, eventConfig, mutation, context) {
23144    let standardProps = mutation.standardProps || {};
23145    if (standardProps.hasEnd == null && eventConfig.durationEditable && (mutation.startDelta || mutation.endDelta)) {
23146      standardProps.hasEnd = true;
23147    }
23148    let copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), { ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui) });
23149    if (mutation.extendedProps) {
23150      copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);
23151    }
23152    for (let applier of context.pluginHooks.eventDefMutationAppliers) {
23153      applier(copy, mutation, context);
23154    }
23155    if (!copy.hasEnd && context.options.forceEventDuration) {
23156      copy.hasEnd = true;
23157    }
23158    return copy;
23159  }
23160  function applyMutationToEventInstance(eventInstance, eventDef, eventConfig, mutation, context) {
23161    let { dateEnv } = context;
23162    let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
23163    let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
23164    let copy = Object.assign({}, eventInstance);
23165    if (forceAllDay) {
23166      copy.range = computeAlignedDayRange(copy.range);
23167    }
23168    if (mutation.datesDelta && eventConfig.startEditable) {
23169      copy.range = {
23170        start: dateEnv.add(copy.range.start, mutation.datesDelta),
23171        end: dateEnv.add(copy.range.end, mutation.datesDelta)
23172      };
23173    }
23174    if (mutation.startDelta && eventConfig.durationEditable) {
23175      copy.range = {
23176        start: dateEnv.add(copy.range.start, mutation.startDelta),
23177        end: copy.range.end
23178      };
23179    }
23180    if (mutation.endDelta && eventConfig.durationEditable) {
23181      copy.range = {
23182        start: copy.range.start,
23183        end: dateEnv.add(copy.range.end, mutation.endDelta)
23184      };
23185    }
23186    if (clearEnd) {
23187      copy.range = {
23188        start: copy.range.start,
23189        end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context)
23190      };
23191    }
23192    if (eventDef.allDay) {
23193      copy.range = {
23194        start: startOfDay(copy.range.start),
23195        end: startOfDay(copy.range.end)
23196      };
23197    }
23198    if (copy.range.end < copy.range.start) {
23199      copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);
23200    }
23201    return copy;
23202  }
23203  var EventSourceImpl = class {
23204    constructor(context, internalEventSource) {
23205      this.context = context;
23206      this.internalEventSource = internalEventSource;
23207    }
23208    remove() {
23209      this.context.dispatch({
23210        type: "REMOVE_EVENT_SOURCE",
23211        sourceId: this.internalEventSource.sourceId
23212      });
23213    }
23214    refetch() {
23215      this.context.dispatch({
23216        type: "FETCH_EVENT_SOURCES",
23217        sourceIds: [this.internalEventSource.sourceId],
23218        isRefetch: true
23219      });
23220    }
23221    get id() {
23222      return this.internalEventSource.publicId;
23223    }
23224    get url() {
23225      return this.internalEventSource.meta.url;
23226    }
23227    get format() {
23228      return this.internalEventSource.meta.format;
23229    }
23230  };
23231  var EventImpl = class {
23232    constructor(context, def, instance) {
23233      this._context = context;
23234      this._def = def;
23235      this._instance = instance || null;
23236    }
23237    setProp(name, val) {
23238      if (name in EVENT_DATE_REFINERS) {
23239        console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");
23240      } else if (name === "id") {
23241        val = EVENT_NON_DATE_REFINERS[name](val);
23242        this.mutate({
23243          standardProps: { publicId: val }
23244        });
23245      } else if (name in EVENT_NON_DATE_REFINERS) {
23246        val = EVENT_NON_DATE_REFINERS[name](val);
23247        this.mutate({
23248          standardProps: { [name]: val }
23249        });
23250      } else if (name in EVENT_UI_REFINERS) {
23251        let ui2 = EVENT_UI_REFINERS[name](val);
23252        if (name === "color") {
23253          ui2 = { backgroundColor: val, borderColor: val };
23254        } else if (name === "editable") {
23255          ui2 = { startEditable: val, durationEditable: val };
23256        } else {
23257          ui2 = { [name]: val };
23258        }
23259        this.mutate({
23260          standardProps: { ui: ui2 }
23261        });
23262      } else {
23263        console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`);
23264      }
23265    }
23266    setExtendedProp(name, val) {
23267      this.mutate({
23268        extendedProps: { [name]: val }
23269      });
23270    }
23271    setStart(startInput, options = {}) {
23272      let { dateEnv } = this._context;
23273      let start5 = dateEnv.createMarker(startInput);
23274      if (start5 && this._instance) {
23275        let instanceRange = this._instance.range;
23276        let startDelta = diffDates(instanceRange.start, start5, dateEnv, options.granularity);
23277        if (options.maintainDuration) {
23278          this.mutate({ datesDelta: startDelta });
23279        } else {
23280          this.mutate({ startDelta });
23281        }
23282      }
23283    }
23284    setEnd(endInput, options = {}) {
23285      let { dateEnv } = this._context;
23286      let end2;
23287      if (endInput != null) {
23288        end2 = dateEnv.createMarker(endInput);
23289        if (!end2) {
23290          return;
23291        }
23292      }
23293      if (this._instance) {
23294        if (end2) {
23295          let endDelta = diffDates(this._instance.range.end, end2, dateEnv, options.granularity);
23296          this.mutate({ endDelta });
23297        } else {
23298          this.mutate({ standardProps: { hasEnd: false } });
23299        }
23300      }
23301    }
23302    setDates(startInput, endInput, options = {}) {
23303      let { dateEnv } = this._context;
23304      let standardProps = { allDay: options.allDay };
23305      let start5 = dateEnv.createMarker(startInput);
23306      let end2;
23307      if (!start5) {
23308        return;
23309      }
23310      if (endInput != null) {
23311        end2 = dateEnv.createMarker(endInput);
23312        if (!end2) {
23313          return;
23314        }
23315      }
23316      if (this._instance) {
23317        let instanceRange = this._instance.range;
23318        if (options.allDay === true) {
23319          instanceRange = computeAlignedDayRange(instanceRange);
23320        }
23321        let startDelta = diffDates(instanceRange.start, start5, dateEnv, options.granularity);
23322        if (end2) {
23323          let endDelta = diffDates(instanceRange.end, end2, dateEnv, options.granularity);
23324          if (durationsEqual(startDelta, endDelta)) {
23325            this.mutate({ datesDelta: startDelta, standardProps });
23326          } else {
23327            this.mutate({ startDelta, endDelta, standardProps });
23328          }
23329        } else {
23330          standardProps.hasEnd = false;
23331          this.mutate({ datesDelta: startDelta, standardProps });
23332        }
23333      }
23334    }
23335    moveStart(deltaInput) {
23336      let delta = createDuration(deltaInput);
23337      if (delta) {
23338        this.mutate({ startDelta: delta });
23339      }
23340    }
23341    moveEnd(deltaInput) {
23342      let delta = createDuration(deltaInput);
23343      if (delta) {
23344        this.mutate({ endDelta: delta });
23345      }
23346    }
23347    moveDates(deltaInput) {
23348      let delta = createDuration(deltaInput);
23349      if (delta) {
23350        this.mutate({ datesDelta: delta });
23351      }
23352    }
23353    setAllDay(allDay, options = {}) {
23354      let standardProps = { allDay };
23355      let { maintainDuration } = options;
23356      if (maintainDuration == null) {
23357        maintainDuration = this._context.options.allDayMaintainDuration;
23358      }
23359      if (this._def.allDay !== allDay) {
23360        standardProps.hasEnd = maintainDuration;
23361      }
23362      this.mutate({ standardProps });
23363    }
23364    formatRange(formatInput) {
23365      let { dateEnv } = this._context;
23366      let instance = this._instance;
23367      let formatter = createFormatter(formatInput);
23368      if (this._def.hasEnd) {
23369        return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
23370          forcedStartTzo: instance.forcedStartTzo,
23371          forcedEndTzo: instance.forcedEndTzo
23372        });
23373      }
23374      return dateEnv.format(instance.range.start, formatter, {
23375        forcedTzo: instance.forcedStartTzo
23376      });
23377    }
23378    mutate(mutation) {
23379      let instance = this._instance;
23380      if (instance) {
23381        let def = this._def;
23382        let context = this._context;
23383        let { eventStore } = context.getCurrentData();
23384        let relevantEvents = getRelevantEvents(eventStore, instance.instanceId);
23385        let eventConfigBase = {
23386          "": {
23387            display: "",
23388            startEditable: true,
23389            durationEditable: true,
23390            constraints: [],
23391            overlap: null,
23392            allows: [],
23393            backgroundColor: "",
23394            borderColor: "",
23395            textColor: "",
23396            classNames: []
23397          }
23398        };
23399        relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);
23400        let oldEvent = new EventImpl(context, def, instance);
23401        this._def = relevantEvents.defs[def.defId];
23402        this._instance = relevantEvents.instances[instance.instanceId];
23403        context.dispatch({
23404          type: "MERGE_EVENTS",
23405          eventStore: relevantEvents
23406        });
23407        context.emitter.trigger("eventChange", {
23408          oldEvent,
23409          event: this,
23410          relatedEvents: buildEventApis(relevantEvents, context, instance),
23411          revert() {
23412            context.dispatch({
23413              type: "RESET_EVENTS",
23414              eventStore
23415            });
23416          }
23417        });
23418      }
23419    }
23420    remove() {
23421      let context = this._context;
23422      let asStore = eventApiToStore(this);
23423      context.dispatch({
23424        type: "REMOVE_EVENTS",
23425        eventStore: asStore
23426      });
23427      context.emitter.trigger("eventRemove", {
23428        event: this,
23429        relatedEvents: [],
23430        revert() {
23431          context.dispatch({
23432            type: "MERGE_EVENTS",
23433            eventStore: asStore
23434          });
23435        }
23436      });
23437    }
23438    get source() {
23439      let { sourceId } = this._def;
23440      if (sourceId) {
23441        return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);
23442      }
23443      return null;
23444    }
23445    get start() {
23446      return this._instance ? this._context.dateEnv.toDate(this._instance.range.start) : null;
23447    }
23448    get end() {
23449      return this._instance && this._def.hasEnd ? this._context.dateEnv.toDate(this._instance.range.end) : null;
23450    }
23451    get startStr() {
23452      let instance = this._instance;
23453      if (instance) {
23454        return this._context.dateEnv.formatIso(instance.range.start, {
23455          omitTime: this._def.allDay,
23456          forcedTzo: instance.forcedStartTzo
23457        });
23458      }
23459      return "";
23460    }
23461    get endStr() {
23462      let instance = this._instance;
23463      if (instance && this._def.hasEnd) {
23464        return this._context.dateEnv.formatIso(instance.range.end, {
23465          omitTime: this._def.allDay,
23466          forcedTzo: instance.forcedEndTzo
23467        });
23468      }
23469      return "";
23470    }
23471    get id() {
23472      return this._def.publicId;
23473    }
23474    get groupId() {
23475      return this._def.groupId;
23476    }
23477    get allDay() {
23478      return this._def.allDay;
23479    }
23480    get title() {
23481      return this._def.title;
23482    }
23483    get url() {
23484      return this._def.url;
23485    }
23486    get display() {
23487      return this._def.ui.display || "auto";
23488    }
23489    get startEditable() {
23490      return this._def.ui.startEditable;
23491    }
23492    get durationEditable() {
23493      return this._def.ui.durationEditable;
23494    }
23495    get constraint() {
23496      return this._def.ui.constraints[0] || null;
23497    }
23498    get overlap() {
23499      return this._def.ui.overlap;
23500    }
23501    get allow() {
23502      return this._def.ui.allows[0] || null;
23503    }
23504    get backgroundColor() {
23505      return this._def.ui.backgroundColor;
23506    }
23507    get borderColor() {
23508      return this._def.ui.borderColor;
23509    }
23510    get textColor() {
23511      return this._def.ui.textColor;
23512    }
23513    get classNames() {
23514      return this._def.ui.classNames;
23515    }
23516    get extendedProps() {
23517      return this._def.extendedProps;
23518    }
23519    toPlainObject(settings = {}) {
23520      let def = this._def;
23521      let { ui: ui2 } = def;
23522      let { startStr, endStr } = this;
23523      let res = {
23524        allDay: def.allDay
23525      };
23526      if (def.title) {
23527        res.title = def.title;
23528      }
23529      if (startStr) {
23530        res.start = startStr;
23531      }
23532      if (endStr) {
23533        res.end = endStr;
23534      }
23535      if (def.publicId) {
23536        res.id = def.publicId;
23537      }
23538      if (def.groupId) {
23539        res.groupId = def.groupId;
23540      }
23541      if (def.url) {
23542        res.url = def.url;
23543      }
23544      if (ui2.display && ui2.display !== "auto") {
23545        res.display = ui2.display;
23546      }
23547      if (settings.collapseColor && ui2.backgroundColor && ui2.backgroundColor === ui2.borderColor) {
23548        res.color = ui2.backgroundColor;
23549      } else {
23550        if (ui2.backgroundColor) {
23551          res.backgroundColor = ui2.backgroundColor;
23552        }
23553        if (ui2.borderColor) {
23554          res.borderColor = ui2.borderColor;
23555        }
23556      }
23557      if (ui2.textColor) {
23558        res.textColor = ui2.textColor;
23559      }
23560      if (ui2.classNames.length) {
23561        res.classNames = ui2.classNames;
23562      }
23563      if (Object.keys(def.extendedProps).length) {
23564        if (settings.collapseExtendedProps) {
23565          Object.assign(res, def.extendedProps);
23566        } else {
23567          res.extendedProps = def.extendedProps;
23568        }
23569      }
23570      return res;
23571    }
23572    toJSON() {
23573      return this.toPlainObject();
23574    }
23575  };
23576  function eventApiToStore(eventApi) {
23577    let def = eventApi._def;
23578    let instance = eventApi._instance;
23579    return {
23580      defs: { [def.defId]: def },
23581      instances: instance ? { [instance.instanceId]: instance } : {}
23582    };
23583  }
23584  function buildEventApis(eventStore, context, excludeInstance) {
23585    let { defs, instances } = eventStore;
23586    let eventApis = [];
23587    let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : "";
23588    for (let id2 in instances) {
23589      let instance = instances[id2];
23590      let def = defs[instance.defId];
23591      if (instance.instanceId !== excludeInstanceId) {
23592        eventApis.push(new EventImpl(context, def, instance));
23593      }
23594    }
23595    return eventApis;
23596  }
23597  function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
23598    let inverseBgByGroupId = {};
23599    let inverseBgByDefId = {};
23600    let defByGroupId = {};
23601    let bgRanges = [];
23602    let fgRanges = [];
23603    let eventUis = compileEventUis(eventStore.defs, eventUiBases);
23604    for (let defId in eventStore.defs) {
23605      let def = eventStore.defs[defId];
23606      let ui2 = eventUis[def.defId];
23607      if (ui2.display === "inverse-background") {
23608        if (def.groupId) {
23609          inverseBgByGroupId[def.groupId] = [];
23610          if (!defByGroupId[def.groupId]) {
23611            defByGroupId[def.groupId] = def;
23612          }
23613        } else {
23614          inverseBgByDefId[defId] = [];
23615        }
23616      }
23617    }
23618    for (let instanceId in eventStore.instances) {
23619      let instance = eventStore.instances[instanceId];
23620      let def = eventStore.defs[instance.defId];
23621      let ui2 = eventUis[def.defId];
23622      let origRange = instance.range;
23623      let normalRange = !def.allDay && nextDayThreshold ? computeVisibleDayRange(origRange, nextDayThreshold) : origRange;
23624      let slicedRange = intersectRanges(normalRange, framingRange);
23625      if (slicedRange) {
23626        if (ui2.display === "inverse-background") {
23627          if (def.groupId) {
23628            inverseBgByGroupId[def.groupId].push(slicedRange);
23629          } else {
23630            inverseBgByDefId[instance.defId].push(slicedRange);
23631          }
23632        } else if (ui2.display !== "none") {
23633          (ui2.display === "background" ? bgRanges : fgRanges).push({
23634            def,
23635            ui: ui2,
23636            instance,
23637            range: slicedRange,
23638            isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
23639            isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()
23640          });
23641        }
23642      }
23643    }
23644    for (let groupId in inverseBgByGroupId) {
23645      let ranges = inverseBgByGroupId[groupId];
23646      let invertedRanges = invertRanges(ranges, framingRange);
23647      for (let invertedRange of invertedRanges) {
23648        let def = defByGroupId[groupId];
23649        let ui2 = eventUis[def.defId];
23650        bgRanges.push({
23651          def,
23652          ui: ui2,
23653          instance: null,
23654          range: invertedRange,
23655          isStart: false,
23656          isEnd: false
23657        });
23658      }
23659    }
23660    for (let defId in inverseBgByDefId) {
23661      let ranges = inverseBgByDefId[defId];
23662      let invertedRanges = invertRanges(ranges, framingRange);
23663      for (let invertedRange of invertedRanges) {
23664        bgRanges.push({
23665          def: eventStore.defs[defId],
23666          ui: eventUis[defId],
23667          instance: null,
23668          range: invertedRange,
23669          isStart: false,
23670          isEnd: false
23671        });
23672      }
23673    }
23674    return { bg: bgRanges, fg: fgRanges };
23675  }
23676  function hasBgRendering(def) {
23677    return def.ui.display === "background" || def.ui.display === "inverse-background";
23678  }
23679  function setElSeg(el, seg) {
23680    el.fcSeg = seg;
23681  }
23682  function getElSeg(el) {
23683    return el.fcSeg || el.parentNode.fcSeg || null;
23684  }
23685  function compileEventUis(eventDefs, eventUiBases) {
23686    return mapHash(eventDefs, (eventDef) => compileEventUi(eventDef, eventUiBases));
23687  }
23688  function compileEventUi(eventDef, eventUiBases) {
23689    let uis = [];
23690    if (eventUiBases[""]) {
23691      uis.push(eventUiBases[""]);
23692    }
23693    if (eventUiBases[eventDef.defId]) {
23694      uis.push(eventUiBases[eventDef.defId]);
23695    }
23696    uis.push(eventDef.ui);
23697    return combineEventUis(uis);
23698  }
23699  function sortEventSegs(segs, eventOrderSpecs) {
23700    let objs = segs.map(buildSegCompareObj);
23701    objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));
23702    return objs.map((c4) => c4._seg);
23703  }
23704  function buildSegCompareObj(seg) {
23705    let { eventRange } = seg;
23706    let eventDef = eventRange.def;
23707    let range = eventRange.instance ? eventRange.instance.range : eventRange.range;
23708    let start5 = range.start ? range.start.valueOf() : 0;
23709    let end2 = range.end ? range.end.valueOf() : 0;
23710    return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), {
23711      id: eventDef.publicId,
23712      start: start5,
23713      end: end2,
23714      duration: end2 - start5,
23715      allDay: Number(eventDef.allDay),
23716      _seg: seg
23717    });
23718  }
23719  function computeSegDraggable(seg, context) {
23720    let { pluginHooks } = context;
23721    let transformers = pluginHooks.isDraggableTransformers;
23722    let { def, ui: ui2 } = seg.eventRange;
23723    let val = ui2.startEditable;
23724    for (let transformer of transformers) {
23725      val = transformer(val, def, ui2, context);
23726    }
23727    return val;
23728  }
23729  function computeSegStartResizable(seg, context) {
23730    return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
23731  }
23732  function computeSegEndResizable(seg, context) {
23733    return seg.isEnd && seg.eventRange.ui.durationEditable;
23734  }
23735  function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, defaultDisplayEventEnd, startOverride, endOverride) {
23736    let { dateEnv, options } = context;
23737    let { displayEventTime, displayEventEnd } = options;
23738    let eventDef = seg.eventRange.def;
23739    let eventInstance = seg.eventRange.instance;
23740    if (displayEventTime == null) {
23741      displayEventTime = defaultDisplayEventTime !== false;
23742    }
23743    if (displayEventEnd == null) {
23744      displayEventEnd = defaultDisplayEventEnd !== false;
23745    }
23746    let wholeEventStart = eventInstance.range.start;
23747    let wholeEventEnd = eventInstance.range.end;
23748    let segStart = startOverride || seg.start || seg.eventRange.range.start;
23749    let segEnd = endOverride || seg.end || seg.eventRange.range.end;
23750    let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
23751    let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
23752    if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
23753      segStart = isStartDay ? wholeEventStart : segStart;
23754      segEnd = isEndDay ? wholeEventEnd : segEnd;
23755      if (displayEventEnd && eventDef.hasEnd) {
23756        return dateEnv.formatRange(segStart, segEnd, timeFormat, {
23757          forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
23758          forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo
23759        });
23760      }
23761      return dateEnv.format(segStart, timeFormat, {
23762        forcedTzo: startOverride ? null : eventInstance.forcedStartTzo
23763      });
23764    }
23765    return "";
23766  }
23767  function getSegMeta(seg, todayRange, nowDate) {
23768    let segRange = seg.eventRange.range;
23769    return {
23770      isPast: segRange.end <= (nowDate || todayRange.start),
23771      isFuture: segRange.start >= (nowDate || todayRange.end),
23772      isToday: todayRange && rangeContainsMarker(todayRange, segRange.start)
23773    };
23774  }
23775  function getEventClassNames(props) {
23776    let classNames = ["fc-event"];
23777    if (props.isMirror) {
23778      classNames.push("fc-event-mirror");
23779    }
23780    if (props.isDraggable) {
23781      classNames.push("fc-event-draggable");
23782    }
23783    if (props.isStartResizable || props.isEndResizable) {
23784      classNames.push("fc-event-resizable");
23785    }
23786    if (props.isDragging) {
23787      classNames.push("fc-event-dragging");
23788    }
23789    if (props.isResizing) {
23790      classNames.push("fc-event-resizing");
23791    }
23792    if (props.isSelected) {
23793      classNames.push("fc-event-selected");
23794    }
23795    if (props.isStart) {
23796      classNames.push("fc-event-start");
23797    }
23798    if (props.isEnd) {
23799      classNames.push("fc-event-end");
23800    }
23801    if (props.isPast) {
23802      classNames.push("fc-event-past");
23803    }
23804    if (props.isToday) {
23805      classNames.push("fc-event-today");
23806    }
23807    if (props.isFuture) {
23808      classNames.push("fc-event-future");
23809    }
23810    return classNames;
23811  }
23812  function buildEventRangeKey(eventRange) {
23813    return eventRange.instance ? eventRange.instance.instanceId : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;
23814  }
23815  function getSegAnchorAttrs(seg, context) {
23816    let { def, instance } = seg.eventRange;
23817    let { url } = def;
23818    if (url) {
23819      return { href: url };
23820    }
23821    let { emitter, options } = context;
23822    let { eventInteractive } = options;
23823    if (eventInteractive == null) {
23824      eventInteractive = def.interactive;
23825      if (eventInteractive == null) {
23826        eventInteractive = Boolean(emitter.hasHandlers("eventClick"));
23827      }
23828    }
23829    if (eventInteractive) {
23830      return createAriaKeyboardAttrs((ev) => {
23831        emitter.trigger("eventClick", {
23832          el: ev.target,
23833          event: new EventImpl(context, def, instance),
23834          jsEvent: ev,
23835          view: context.viewApi
23836        });
23837      });
23838    }
23839    return {};
23840  }
23841  var STANDARD_PROPS = {
23842    start: identity,
23843    end: identity,
23844    allDay: Boolean
23845  };
23846  function parseDateSpan(raw, dateEnv, defaultDuration) {
23847    let span = parseOpenDateSpan(raw, dateEnv);
23848    let { range } = span;
23849    if (!range.start) {
23850      return null;
23851    }
23852    if (!range.end) {
23853      if (defaultDuration == null) {
23854        return null;
23855      }
23856      range.end = dateEnv.add(range.start, defaultDuration);
23857    }
23858    return span;
23859  }
23860  function parseOpenDateSpan(raw, dateEnv) {
23861    let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS);
23862    let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
23863    let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
23864    let { allDay } = standardProps;
23865    if (allDay == null) {
23866      allDay = startMeta && startMeta.isTimeUnspecified && (!endMeta || endMeta.isTimeUnspecified);
23867    }
23868    return Object.assign({ range: {
23869      start: startMeta ? startMeta.marker : null,
23870      end: endMeta ? endMeta.marker : null
23871    }, allDay }, extra);
23872  }
23873  function buildDateSpanApi(span, dateEnv) {
23874    return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });
23875  }
23876  function buildRangeApiWithTimeZone(range, dateEnv, omitTime) {
23877    return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });
23878  }
23879  function buildRangeApi(range, dateEnv, omitTime) {
23880    return {
23881      start: dateEnv.toDate(range.start),
23882      end: dateEnv.toDate(range.end),
23883      startStr: dateEnv.formatIso(range.start, { omitTime }),
23884      endStr: dateEnv.formatIso(range.end, { omitTime })
23885    };
23886  }
23887  function fabricateEventRange(dateSpan, eventUiBases, context) {
23888    let res = refineEventDef({ editable: false }, context);
23889    let def = parseEventDef(
23890      res.refined,
23891      res.extra,
23892      "",
23893      dateSpan.allDay,
23894      true,
23895      context
23896    );
23897    return {
23898      def,
23899      ui: compileEventUi(def, eventUiBases),
23900      instance: createEventInstance(def.defId, dateSpan.range),
23901      range: dateSpan.range,
23902      isStart: true,
23903      isEnd: true
23904    };
23905  }
23906  function unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {
23907    let isResolved = false;
23908    let wrappedSuccess = function(res2) {
23909      if (!isResolved) {
23910        isResolved = true;
23911        normalizedSuccessCallback(res2);
23912      }
23913    };
23914    let wrappedFailure = function(error2) {
23915      if (!isResolved) {
23916        isResolved = true;
23917        normalizedFailureCallback(error2);
23918      }
23919    };
23920    let res = func(wrappedSuccess, wrappedFailure);
23921    if (res && typeof res.then === "function") {
23922      res.then(wrappedSuccess, wrappedFailure);
23923    }
23924  }
23925  var JsonRequestError = class extends Error {
23926    constructor(message, response) {
23927      super(message);
23928      this.response = response;
23929    }
23930  };
23931  function requestJson(method, url, params) {
23932    method = method.toUpperCase();
23933    const fetchOptions = {
23934      method
23935    };
23936    if (method === "GET") {
23937      url += (url.indexOf("?") === -1 ? "?" : "&") + new URLSearchParams(params);
23938    } else {
23939      fetchOptions.body = new URLSearchParams(params);
23940      fetchOptions.headers = {
23941        "Content-Type": "application/x-www-form-urlencoded"
23942      };
23943    }
23944    return fetch(url, fetchOptions).then((fetchRes) => {
23945      if (fetchRes.ok) {
23946        return fetchRes.json().then((parsedResponse) => {
23947          return [parsedResponse, fetchRes];
23948        }, () => {
23949          throw new JsonRequestError("Failure parsing JSON", fetchRes);
23950        });
23951      } else {
23952        throw new JsonRequestError("Request failed", fetchRes);
23953      }
23954    });
23955  }
23956  var canVGrowWithinCell;
23957  function getCanVGrowWithinCell() {
23958    if (canVGrowWithinCell == null) {
23959      canVGrowWithinCell = computeCanVGrowWithinCell();
23960    }
23961    return canVGrowWithinCell;
23962  }
23963  function computeCanVGrowWithinCell() {
23964    if (typeof document === "undefined") {
23965      return true;
23966    }
23967    let el = document.createElement("div");
23968    el.style.position = "absolute";
23969    el.style.top = "0px";
23970    el.style.left = "0px";
23971    el.innerHTML = "<table><tr><td><div></div></td></tr></table>";
23972    el.querySelector("table").style.height = "100px";
23973    el.querySelector("div").style.height = "100%";
23974    document.body.appendChild(el);
23975    let div = el.querySelector("div");
23976    let possible = div.offsetHeight > 0;
23977    document.body.removeChild(el);
23978    return possible;
23979  }
23980  var CalendarRoot = class extends BaseComponent {
23981    constructor() {
23982      super(...arguments);
23983      this.state = {
23984        forPrint: false
23985      };
23986      this.handleBeforePrint = () => {
23987        flushSync(() => {
23988          this.setState({ forPrint: true });
23989        });
23990      };
23991      this.handleAfterPrint = () => {
23992        flushSync(() => {
23993          this.setState({ forPrint: false });
23994        });
23995      };
23996    }
23997    render() {
23998      let { props } = this;
23999      let { options } = props;
24000      let { forPrint } = this.state;
24001      let isHeightAuto = forPrint || options.height === "auto" || options.contentHeight === "auto";
24002      let height = !isHeightAuto && options.height != null ? options.height : "";
24003      let classNames = [
24004        "fc",
24005        forPrint ? "fc-media-print" : "fc-media-screen",
24006        `fc-direction-${options.direction}`,
24007        props.theme.getClass("root")
24008      ];
24009      if (!getCanVGrowWithinCell()) {
24010        classNames.push("fc-liquid-hack");
24011      }
24012      return props.children(classNames, height, isHeightAuto, forPrint);
24013    }
24014    componentDidMount() {
24015      let { emitter } = this.props;
24016      emitter.on("_beforeprint", this.handleBeforePrint);
24017      emitter.on("_afterprint", this.handleAfterPrint);
24018    }
24019    componentWillUnmount() {
24020      let { emitter } = this.props;
24021      emitter.off("_beforeprint", this.handleBeforePrint);
24022      emitter.off("_afterprint", this.handleAfterPrint);
24023    }
24024  };
24025  var Interaction = class {
24026    constructor(settings) {
24027      this.component = settings.component;
24028      this.isHitComboAllowed = settings.isHitComboAllowed || null;
24029    }
24030    destroy() {
24031    }
24032  };
24033  function parseInteractionSettings(component, input) {
24034    return {
24035      component,
24036      el: input.el,
24037      useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
24038      isHitComboAllowed: input.isHitComboAllowed || null
24039    };
24040  }
24041  var interactionSettingsStore = {};
24042  var CalendarImpl = class {
24043    getCurrentData() {
24044      return this.currentDataManager.getCurrentData();
24045    }
24046    dispatch(action) {
24047      this.currentDataManager.dispatch(action);
24048    }
24049    get view() {
24050      return this.getCurrentData().viewApi;
24051    }
24052    batchRendering(callback) {
24053      callback();
24054    }
24055    updateSize() {
24056      this.trigger("_resize", true);
24057    }
24058    setOption(name, val) {
24059      this.dispatch({
24060        type: "SET_OPTION",
24061        optionName: name,
24062        rawOptionValue: val
24063      });
24064    }
24065    getOption(name) {
24066      return this.currentDataManager.currentCalendarOptionsInput[name];
24067    }
24068    getAvailableLocaleCodes() {
24069      return Object.keys(this.getCurrentData().availableRawLocales);
24070    }
24071    on(handlerName, handler) {
24072      let { currentDataManager } = this;
24073      if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {
24074        currentDataManager.emitter.on(handlerName, handler);
24075      } else {
24076        console.warn(`Unknown listener name '${handlerName}'`);
24077      }
24078    }
24079    off(handlerName, handler) {
24080      this.currentDataManager.emitter.off(handlerName, handler);
24081    }
24082    trigger(handlerName, ...args) {
24083      this.currentDataManager.emitter.trigger(handlerName, ...args);
24084    }
24085    changeView(viewType, dateOrRange) {
24086      this.batchRendering(() => {
24087        this.unselect();
24088        if (dateOrRange) {
24089          if (dateOrRange.start && dateOrRange.end) {
24090            this.dispatch({
24091              type: "CHANGE_VIEW_TYPE",
24092              viewType
24093            });
24094            this.dispatch({
24095              type: "SET_OPTION",
24096              optionName: "visibleRange",
24097              rawOptionValue: dateOrRange
24098            });
24099          } else {
24100            let { dateEnv } = this.getCurrentData();
24101            this.dispatch({
24102              type: "CHANGE_VIEW_TYPE",
24103              viewType,
24104              dateMarker: dateEnv.createMarker(dateOrRange)
24105            });
24106          }
24107        } else {
24108          this.dispatch({
24109            type: "CHANGE_VIEW_TYPE",
24110            viewType
24111          });
24112        }
24113      });
24114    }
24115    zoomTo(dateMarker, viewType) {
24116      let state = this.getCurrentData();
24117      let spec;
24118      viewType = viewType || "day";
24119      spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);
24120      this.unselect();
24121      if (spec) {
24122        this.dispatch({
24123          type: "CHANGE_VIEW_TYPE",
24124          viewType: spec.type,
24125          dateMarker
24126        });
24127      } else {
24128        this.dispatch({
24129          type: "CHANGE_DATE",
24130          dateMarker
24131        });
24132      }
24133    }
24134    getUnitViewSpec(unit) {
24135      let { viewSpecs, toolbarConfig } = this.getCurrentData();
24136      let viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);
24137      let i4;
24138      let spec;
24139      for (let viewType in viewSpecs) {
24140        viewTypes.push(viewType);
24141      }
24142      for (i4 = 0; i4 < viewTypes.length; i4 += 1) {
24143        spec = viewSpecs[viewTypes[i4]];
24144        if (spec) {
24145          if (spec.singleUnit === unit) {
24146            return spec;
24147          }
24148        }
24149      }
24150      return null;
24151    }
24152    prev() {
24153      this.unselect();
24154      this.dispatch({ type: "PREV" });
24155    }
24156    next() {
24157      this.unselect();
24158      this.dispatch({ type: "NEXT" });
24159    }
24160    prevYear() {
24161      let state = this.getCurrentData();
24162      this.unselect();
24163      this.dispatch({
24164        type: "CHANGE_DATE",
24165        dateMarker: state.dateEnv.addYears(state.currentDate, -1)
24166      });
24167    }
24168    nextYear() {
24169      let state = this.getCurrentData();
24170      this.unselect();
24171      this.dispatch({
24172        type: "CHANGE_DATE",
24173        dateMarker: state.dateEnv.addYears(state.currentDate, 1)
24174      });
24175    }
24176    today() {
24177      let state = this.getCurrentData();
24178      this.unselect();
24179      this.dispatch({
24180        type: "CHANGE_DATE",
24181        dateMarker: getNow(state.calendarOptions.now, state.dateEnv)
24182      });
24183    }
24184    gotoDate(zonedDateInput) {
24185      let state = this.getCurrentData();
24186      this.unselect();
24187      this.dispatch({
24188        type: "CHANGE_DATE",
24189        dateMarker: state.dateEnv.createMarker(zonedDateInput)
24190      });
24191    }
24192    incrementDate(deltaInput) {
24193      let state = this.getCurrentData();
24194      let delta = createDuration(deltaInput);
24195      if (delta) {
24196        this.unselect();
24197        this.dispatch({
24198          type: "CHANGE_DATE",
24199          dateMarker: state.dateEnv.add(state.currentDate, delta)
24200        });
24201      }
24202    }
24203    getDate() {
24204      let state = this.getCurrentData();
24205      return state.dateEnv.toDate(state.currentDate);
24206    }
24207    formatDate(d3, formatter) {
24208      let { dateEnv } = this.getCurrentData();
24209      return dateEnv.format(dateEnv.createMarker(d3), createFormatter(formatter));
24210    }
24211    formatRange(d0, d1, settings) {
24212      let { dateEnv } = this.getCurrentData();
24213      return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);
24214    }
24215    formatIso(d3, omitTime) {
24216      let { dateEnv } = this.getCurrentData();
24217      return dateEnv.formatIso(dateEnv.createMarker(d3), { omitTime });
24218    }
24219    select(dateOrObj, endDate) {
24220      let selectionInput;
24221      if (endDate == null) {
24222        if (dateOrObj.start != null) {
24223          selectionInput = dateOrObj;
24224        } else {
24225          selectionInput = {
24226            start: dateOrObj,
24227            end: null
24228          };
24229        }
24230      } else {
24231        selectionInput = {
24232          start: dateOrObj,
24233          end: endDate
24234        };
24235      }
24236      let state = this.getCurrentData();
24237      let selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));
24238      if (selection) {
24239        this.dispatch({ type: "SELECT_DATES", selection });
24240        triggerDateSelect(selection, null, state);
24241      }
24242    }
24243    unselect(pev) {
24244      let state = this.getCurrentData();
24245      if (state.dateSelection) {
24246        this.dispatch({ type: "UNSELECT_DATES" });
24247        triggerDateUnselect(pev, state);
24248      }
24249    }
24250    addEvent(eventInput, sourceInput) {
24251      if (eventInput instanceof EventImpl) {
24252        let def = eventInput._def;
24253        let instance = eventInput._instance;
24254        let currentData = this.getCurrentData();
24255        if (!currentData.eventStore.defs[def.defId]) {
24256          this.dispatch({
24257            type: "ADD_EVENTS",
24258            eventStore: eventTupleToStore({ def, instance })
24259          });
24260          this.triggerEventAdd(eventInput);
24261        }
24262        return eventInput;
24263      }
24264      let state = this.getCurrentData();
24265      let eventSource;
24266      if (sourceInput instanceof EventSourceImpl) {
24267        eventSource = sourceInput.internalEventSource;
24268      } else if (typeof sourceInput === "boolean") {
24269        if (sourceInput) {
24270          [eventSource] = hashValuesToArray(state.eventSources);
24271        }
24272      } else if (sourceInput != null) {
24273        let sourceApi = this.getEventSourceById(sourceInput);
24274        if (!sourceApi) {
24275          console.warn(`Could not find an event source with ID "${sourceInput}"`);
24276          return null;
24277        }
24278        eventSource = sourceApi.internalEventSource;
24279      }
24280      let tuple = parseEvent(eventInput, eventSource, state, false);
24281      if (tuple) {
24282        let newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
24283        this.dispatch({
24284          type: "ADD_EVENTS",
24285          eventStore: eventTupleToStore(tuple)
24286        });
24287        this.triggerEventAdd(newEventApi);
24288        return newEventApi;
24289      }
24290      return null;
24291    }
24292    triggerEventAdd(eventApi) {
24293      let { emitter } = this.getCurrentData();
24294      emitter.trigger("eventAdd", {
24295        event: eventApi,
24296        relatedEvents: [],
24297        revert: () => {
24298          this.dispatch({
24299            type: "REMOVE_EVENTS",
24300            eventStore: eventApiToStore(eventApi)
24301          });
24302        }
24303      });
24304    }
24305    getEventById(id2) {
24306      let state = this.getCurrentData();
24307      let { defs, instances } = state.eventStore;
24308      id2 = String(id2);
24309      for (let defId in defs) {
24310        let def = defs[defId];
24311        if (def.publicId === id2) {
24312          if (def.recurringDef) {
24313            return new EventImpl(state, def, null);
24314          }
24315          for (let instanceId in instances) {
24316            let instance = instances[instanceId];
24317            if (instance.defId === def.defId) {
24318              return new EventImpl(state, def, instance);
24319            }
24320          }
24321        }
24322      }
24323      return null;
24324    }
24325    getEvents() {
24326      let currentData = this.getCurrentData();
24327      return buildEventApis(currentData.eventStore, currentData);
24328    }
24329    removeAllEvents() {
24330      this.dispatch({ type: "REMOVE_ALL_EVENTS" });
24331    }
24332    getEventSources() {
24333      let state = this.getCurrentData();
24334      let sourceHash = state.eventSources;
24335      let sourceApis = [];
24336      for (let internalId in sourceHash) {
24337        sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));
24338      }
24339      return sourceApis;
24340    }
24341    getEventSourceById(id2) {
24342      let state = this.getCurrentData();
24343      let sourceHash = state.eventSources;
24344      id2 = String(id2);
24345      for (let sourceId in sourceHash) {
24346        if (sourceHash[sourceId].publicId === id2) {
24347          return new EventSourceImpl(state, sourceHash[sourceId]);
24348        }
24349      }
24350      return null;
24351    }
24352    addEventSource(sourceInput) {
24353      let state = this.getCurrentData();
24354      if (sourceInput instanceof EventSourceImpl) {
24355        if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {
24356          this.dispatch({
24357            type: "ADD_EVENT_SOURCES",
24358            sources: [sourceInput.internalEventSource]
24359          });
24360        }
24361        return sourceInput;
24362      }
24363      let eventSource = parseEventSource(sourceInput, state);
24364      if (eventSource) {
24365        this.dispatch({ type: "ADD_EVENT_SOURCES", sources: [eventSource] });
24366        return new EventSourceImpl(state, eventSource);
24367      }
24368      return null;
24369    }
24370    removeAllEventSources() {
24371      this.dispatch({ type: "REMOVE_ALL_EVENT_SOURCES" });
24372    }
24373    refetchEvents() {
24374      this.dispatch({ type: "FETCH_EVENT_SOURCES", isRefetch: true });
24375    }
24376    scrollToTime(timeInput) {
24377      let time = createDuration(timeInput);
24378      if (time) {
24379        this.trigger("_scrollRequest", { time });
24380      }
24381    }
24382  };
24383  function intersectRects(rect1, rect2) {
24384    let res = {
24385      left: Math.max(rect1.left, rect2.left),
24386      right: Math.min(rect1.right, rect2.right),
24387      top: Math.max(rect1.top, rect2.top),
24388      bottom: Math.min(rect1.bottom, rect2.bottom)
24389    };
24390    if (res.left < res.right && res.top < res.bottom) {
24391      return res;
24392    }
24393    return false;
24394  }
24395  var EMPTY_EVENT_STORE = createEmptyEventStore();
24396  var Splitter = class {
24397    constructor() {
24398      this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
24399      this.splitDateSelection = memoize(this._splitDateSpan);
24400      this.splitEventStore = memoize(this._splitEventStore);
24401      this.splitIndividualUi = memoize(this._splitIndividualUi);
24402      this.splitEventDrag = memoize(this._splitInteraction);
24403      this.splitEventResize = memoize(this._splitInteraction);
24404      this.eventUiBuilders = {};
24405    }
24406    splitProps(props) {
24407      let keyInfos = this.getKeyInfo(props);
24408      let defKeys = this.getKeysForEventDefs(props.eventStore);
24409      let dateSelections = this.splitDateSelection(props.dateSelection);
24410      let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys);
24411      let eventStores = this.splitEventStore(props.eventStore, defKeys);
24412      let eventDrags = this.splitEventDrag(props.eventDrag);
24413      let eventResizes = this.splitEventResize(props.eventResize);
24414      let splitProps = {};
24415      this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey));
24416      for (let key in keyInfos) {
24417        let keyInfo = keyInfos[key];
24418        let eventStore = eventStores[key] || EMPTY_EVENT_STORE;
24419        let buildEventUi = this.eventUiBuilders[key];
24420        splitProps[key] = {
24421          businessHours: keyInfo.businessHours || props.businessHours,
24422          dateSelection: dateSelections[key] || null,
24423          eventStore,
24424          eventUiBases: buildEventUi(props.eventUiBases[""], keyInfo.ui, individualUi[key]),
24425          eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : "",
24426          eventDrag: eventDrags[key] || null,
24427          eventResize: eventResizes[key] || null
24428        };
24429      }
24430      return splitProps;
24431    }
24432    _splitDateSpan(dateSpan) {
24433      let dateSpans = {};
24434      if (dateSpan) {
24435        let keys = this.getKeysForDateSpan(dateSpan);
24436        for (let key of keys) {
24437          dateSpans[key] = dateSpan;
24438        }
24439      }
24440      return dateSpans;
24441    }
24442    _getKeysForEventDefs(eventStore) {
24443      return mapHash(eventStore.defs, (eventDef) => this.getKeysForEventDef(eventDef));
24444    }
24445    _splitEventStore(eventStore, defKeys) {
24446      let { defs, instances } = eventStore;
24447      let splitStores = {};
24448      for (let defId in defs) {
24449        for (let key of defKeys[defId]) {
24450          if (!splitStores[key]) {
24451            splitStores[key] = createEmptyEventStore();
24452          }
24453          splitStores[key].defs[defId] = defs[defId];
24454        }
24455      }
24456      for (let instanceId in instances) {
24457        let instance = instances[instanceId];
24458        for (let key of defKeys[instance.defId]) {
24459          if (splitStores[key]) {
24460            splitStores[key].instances[instanceId] = instance;
24461          }
24462        }
24463      }
24464      return splitStores;
24465    }
24466    _splitIndividualUi(eventUiBases, defKeys) {
24467      let splitHashes = {};
24468      for (let defId in eventUiBases) {
24469        if (defId) {
24470          for (let key of defKeys[defId]) {
24471            if (!splitHashes[key]) {
24472              splitHashes[key] = {};
24473            }
24474            splitHashes[key][defId] = eventUiBases[defId];
24475          }
24476        }
24477      }
24478      return splitHashes;
24479    }
24480    _splitInteraction(interaction) {
24481      let splitStates = {};
24482      if (interaction) {
24483        let affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));
24484        let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
24485        let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
24486        let populate = (key) => {
24487          if (!splitStates[key]) {
24488            splitStates[key] = {
24489              affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,
24490              mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,
24491              isEvent: interaction.isEvent
24492            };
24493          }
24494        };
24495        for (let key in affectedStores) {
24496          populate(key);
24497        }
24498        for (let key in mutatedStores) {
24499          populate(key);
24500        }
24501      }
24502      return splitStates;
24503    }
24504  };
24505  function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
24506    let baseParts = [];
24507    if (allUi) {
24508      baseParts.push(allUi);
24509    }
24510    if (eventUiForKey) {
24511      baseParts.push(eventUiForKey);
24512    }
24513    let stuff = {
24514      "": combineEventUis(baseParts)
24515    };
24516    if (individualUi) {
24517      Object.assign(stuff, individualUi);
24518    }
24519    return stuff;
24520  }
24521  function getDateMeta(date, todayRange, nowDate, dateProfile) {
24522    return {
24523      dow: date.getUTCDay(),
24524      isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),
24525      isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),
24526      isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),
24527      isPast: Boolean(nowDate ? date < nowDate : todayRange ? date < todayRange.start : false),
24528      isFuture: Boolean(nowDate ? date > nowDate : todayRange ? date >= todayRange.end : false)
24529    };
24530  }
24531  function getDayClassNames(meta, theme) {
24532    let classNames = [
24533      "fc-day",
24534      `fc-day-${DAY_IDS[meta.dow]}`
24535    ];
24536    if (meta.isDisabled) {
24537      classNames.push("fc-day-disabled");
24538    } else {
24539      if (meta.isToday) {
24540        classNames.push("fc-day-today");
24541        classNames.push(theme.getClass("today"));
24542      }
24543      if (meta.isPast) {
24544        classNames.push("fc-day-past");
24545      }
24546      if (meta.isFuture) {
24547        classNames.push("fc-day-future");
24548      }
24549      if (meta.isOther) {
24550        classNames.push("fc-day-other");
24551      }
24552    }
24553    return classNames;
24554  }
24555  var DAY_FORMAT = createFormatter({ year: "numeric", month: "long", day: "numeric" });
24556  var WEEK_FORMAT = createFormatter({ week: "long" });
24557  function buildNavLinkAttrs(context, dateMarker, viewType = "day", isTabbable = true) {
24558    const { dateEnv, options, calendarApi } = context;
24559    let dateStr = dateEnv.format(dateMarker, viewType === "week" ? WEEK_FORMAT : DAY_FORMAT);
24560    if (options.navLinks) {
24561      let zonedDate = dateEnv.toDate(dateMarker);
24562      const handleInteraction = (ev) => {
24563        let customAction = viewType === "day" ? options.navLinkDayClick : viewType === "week" ? options.navLinkWeekClick : null;
24564        if (typeof customAction === "function") {
24565          customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
24566        } else {
24567          if (typeof customAction === "string") {
24568            viewType = customAction;
24569          }
24570          calendarApi.zoomTo(dateMarker, viewType);
24571        }
24572      };
24573      return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), "data-navlink": "" }, isTabbable ? createAriaClickAttrs(handleInteraction) : { onClick: handleInteraction });
24574    }
24575    return { "aria-label": dateStr };
24576  }
24577  var _scrollbarWidths;
24578  function getScrollbarWidths() {
24579    if (!_scrollbarWidths) {
24580      _scrollbarWidths = computeScrollbarWidths();
24581    }
24582    return _scrollbarWidths;
24583  }
24584  function computeScrollbarWidths() {
24585    let el = document.createElement("div");
24586    el.style.overflow = "scroll";
24587    el.style.position = "absolute";
24588    el.style.top = "-9999px";
24589    el.style.left = "-9999px";
24590    document.body.appendChild(el);
24591    let res = computeScrollbarWidthsForEl(el);
24592    document.body.removeChild(el);
24593    return res;
24594  }
24595  function computeScrollbarWidthsForEl(el) {
24596    return {
24597      x: el.offsetHeight - el.clientHeight,
24598      y: el.offsetWidth - el.clientWidth
24599    };
24600  }
24601  function computeClippedClientRect(el) {
24602    let clippingParents2 = getClippingParents(el);
24603    let rect = el.getBoundingClientRect();
24604    for (let clippingParent of clippingParents2) {
24605      let intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
24606      if (intersection) {
24607        rect = intersection;
24608      } else {
24609        return null;
24610      }
24611    }
24612    return rect;
24613  }
24614  function getClippingParents(el) {
24615    let parents = [];
24616    while (el instanceof HTMLElement) {
24617      let computedStyle = window.getComputedStyle(el);
24618      if (computedStyle.position === "fixed") {
24619        break;
24620      }
24621      if (/(auto|scroll)/.test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
24622        parents.push(el);
24623      }
24624      el = el.parentNode;
24625    }
24626    return parents;
24627  }
24628  var PositionCache = class {
24629    constructor(originEl, els, isHorizontal, isVertical) {
24630      this.els = els;
24631      let originClientRect = this.originClientRect = originEl.getBoundingClientRect();
24632      if (isHorizontal) {
24633        this.buildElHorizontals(originClientRect.left);
24634      }
24635      if (isVertical) {
24636        this.buildElVerticals(originClientRect.top);
24637      }
24638    }
24639    buildElHorizontals(originClientLeft) {
24640      let lefts = [];
24641      let rights = [];
24642      for (let el of this.els) {
24643        let rect = el.getBoundingClientRect();
24644        lefts.push(rect.left - originClientLeft);
24645        rights.push(rect.right - originClientLeft);
24646      }
24647      this.lefts = lefts;
24648      this.rights = rights;
24649    }
24650    buildElVerticals(originClientTop) {
24651      let tops = [];
24652      let bottoms = [];
24653      for (let el of this.els) {
24654        let rect = el.getBoundingClientRect();
24655        tops.push(rect.top - originClientTop);
24656        bottoms.push(rect.bottom - originClientTop);
24657      }
24658      this.tops = tops;
24659      this.bottoms = bottoms;
24660    }
24661    leftToIndex(leftPosition) {
24662      let { lefts, rights } = this;
24663      let len = lefts.length;
24664      let i4;
24665      for (i4 = 0; i4 < len; i4 += 1) {
24666        if (leftPosition >= lefts[i4] && leftPosition < rights[i4]) {
24667          return i4;
24668        }
24669      }
24670      return void 0;
24671    }
24672    topToIndex(topPosition) {
24673      let { tops, bottoms } = this;
24674      let len = tops.length;
24675      let i4;
24676      for (i4 = 0; i4 < len; i4 += 1) {
24677        if (topPosition >= tops[i4] && topPosition < bottoms[i4]) {
24678          return i4;
24679        }
24680      }
24681      return void 0;
24682    }
24683    getWidth(leftIndex) {
24684      return this.rights[leftIndex] - this.lefts[leftIndex];
24685    }
24686    getHeight(topIndex) {
24687      return this.bottoms[topIndex] - this.tops[topIndex];
24688    }
24689    similarTo(otherCache) {
24690      return similarNumArrays(this.tops || [], otherCache.tops || []) && similarNumArrays(this.bottoms || [], otherCache.bottoms || []) && similarNumArrays(this.lefts || [], otherCache.lefts || []) && similarNumArrays(this.rights || [], otherCache.rights || []);
24691    }
24692  };
24693  function similarNumArrays(a4, b4) {
24694    const len = a4.length;
24695    if (len !== b4.length) {
24696      return false;
24697    }
24698    for (let i4 = 0; i4 < len; i4++) {
24699      if (Math.round(a4[i4]) !== Math.round(b4[i4])) {
24700        return false;
24701      }
24702    }
24703    return true;
24704  }
24705  var DateComponent = class extends BaseComponent {
24706    constructor() {
24707      super(...arguments);
24708      this.uid = guid();
24709    }
24710    prepareHits() {
24711    }
24712    queryHit(positionLeft, positionTop, elWidth, elHeight) {
24713      return null;
24714    }
24715    isValidSegDownEl(el) {
24716      return !this.props.eventDrag && !this.props.eventResize && !elementClosest(el, ".fc-event-mirror");
24717    }
24718    isValidDateDownEl(el) {
24719      return !elementClosest(el, ".fc-event:not(.fc-bg-event)") && !elementClosest(el, ".fc-more-link") && !elementClosest(el, "a[data-navlink]") && !elementClosest(el, ".fc-popover");
24720    }
24721  };
24722  var SegHierarchy = class {
24723    constructor(getEntryThickness = (entry) => {
24724      return entry.thickness || 1;
24725    }) {
24726      this.getEntryThickness = getEntryThickness;
24727      this.strictOrder = false;
24728      this.allowReslicing = false;
24729      this.maxCoord = -1;
24730      this.maxStackCnt = -1;
24731      this.levelCoords = [];
24732      this.entriesByLevel = [];
24733      this.stackCnts = {};
24734    }
24735    addSegs(inputs) {
24736      let hiddenEntries = [];
24737      for (let input of inputs) {
24738        this.insertEntry(input, hiddenEntries);
24739      }
24740      return hiddenEntries;
24741    }
24742    insertEntry(entry, hiddenEntries) {
24743      let insertion = this.findInsertion(entry);
24744      if (this.isInsertionValid(insertion, entry)) {
24745        this.insertEntryAt(entry, insertion);
24746      } else {
24747        this.handleInvalidInsertion(insertion, entry, hiddenEntries);
24748      }
24749    }
24750    isInsertionValid(insertion, entry) {
24751      return (this.maxCoord === -1 || insertion.levelCoord + this.getEntryThickness(entry) <= this.maxCoord) && (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
24752    }
24753    handleInvalidInsertion(insertion, entry, hiddenEntries) {
24754      if (this.allowReslicing && insertion.touchingEntry) {
24755        const hiddenEntry = Object.assign(Object.assign({}, entry), { span: intersectSpans(entry.span, insertion.touchingEntry.span) });
24756        hiddenEntries.push(hiddenEntry);
24757        this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
24758      } else {
24759        hiddenEntries.push(entry);
24760      }
24761    }
24762    splitEntry(entry, barrier, hiddenEntries) {
24763      let entrySpan = entry.span;
24764      let barrierSpan = barrier.span;
24765      if (entrySpan.start < barrierSpan.start) {
24766        this.insertEntry({
24767          index: entry.index,
24768          thickness: entry.thickness,
24769          span: { start: entrySpan.start, end: barrierSpan.start }
24770        }, hiddenEntries);
24771      }
24772      if (entrySpan.end > barrierSpan.end) {
24773        this.insertEntry({
24774          index: entry.index,
24775          thickness: entry.thickness,
24776          span: { start: barrierSpan.end, end: entrySpan.end }
24777        }, hiddenEntries);
24778      }
24779    }
24780    insertEntryAt(entry, insertion) {
24781      let { entriesByLevel, levelCoords } = this;
24782      if (insertion.lateral === -1) {
24783        insertAt(levelCoords, insertion.level, insertion.levelCoord);
24784        insertAt(entriesByLevel, insertion.level, [entry]);
24785      } else {
24786        insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
24787      }
24788      this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
24789    }
24790    findInsertion(newEntry) {
24791      let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;
24792      let levelCnt = levelCoords.length;
24793      let candidateCoord = 0;
24794      let touchingLevel = -1;
24795      let touchingLateral = -1;
24796      let touchingEntry = null;
24797      let stackCnt = 0;
24798      for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
24799        const trackingCoord = levelCoords[trackingLevel];
24800        if (!strictOrder && trackingCoord >= candidateCoord + this.getEntryThickness(newEntry)) {
24801          break;
24802        }
24803        let trackingEntries = entriesByLevel[trackingLevel];
24804        let trackingEntry;
24805        let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd);
24806        let lateralIndex = searchRes[0] + searchRes[1];
24807        while ((trackingEntry = trackingEntries[lateralIndex]) && trackingEntry.span.start < newEntry.span.end) {
24808          let trackingEntryBottom = trackingCoord + this.getEntryThickness(trackingEntry);
24809          if (trackingEntryBottom > candidateCoord) {
24810            candidateCoord = trackingEntryBottom;
24811            touchingEntry = trackingEntry;
24812            touchingLevel = trackingLevel;
24813            touchingLateral = lateralIndex;
24814          }
24815          if (trackingEntryBottom === candidateCoord) {
24816            stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
24817          }
24818          lateralIndex += 1;
24819        }
24820      }
24821      let destLevel = 0;
24822      if (touchingEntry) {
24823        destLevel = touchingLevel + 1;
24824        while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
24825          destLevel += 1;
24826        }
24827      }
24828      let destLateral = -1;
24829      if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
24830        destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
24831      }
24832      return {
24833        touchingLevel,
24834        touchingLateral,
24835        touchingEntry,
24836        stackCnt,
24837        levelCoord: candidateCoord,
24838        level: destLevel,
24839        lateral: destLateral
24840      };
24841    }
24842    toRects() {
24843      let { entriesByLevel, levelCoords } = this;
24844      let levelCnt = entriesByLevel.length;
24845      let rects = [];
24846      for (let level = 0; level < levelCnt; level += 1) {
24847        let entries = entriesByLevel[level];
24848        let levelCoord = levelCoords[level];
24849        for (let entry of entries) {
24850          rects.push(Object.assign(Object.assign({}, entry), { thickness: this.getEntryThickness(entry), levelCoord }));
24851        }
24852      }
24853      return rects;
24854    }
24855  };
24856  function getEntrySpanEnd(entry) {
24857    return entry.span.end;
24858  }
24859  function buildEntryKey(entry) {
24860    return entry.index + ":" + entry.span.start;
24861  }
24862  function groupIntersectingEntries(entries) {
24863    let merges = [];
24864    for (let entry of entries) {
24865      let filteredMerges = [];
24866      let hungryMerge = {
24867        span: entry.span,
24868        entries: [entry]
24869      };
24870      for (let merge of merges) {
24871        if (intersectSpans(merge.span, hungryMerge.span)) {
24872          hungryMerge = {
24873            entries: merge.entries.concat(hungryMerge.entries),
24874            span: joinSpans(merge.span, hungryMerge.span)
24875          };
24876        } else {
24877          filteredMerges.push(merge);
24878        }
24879      }
24880      filteredMerges.push(hungryMerge);
24881      merges = filteredMerges;
24882    }
24883    return merges;
24884  }
24885  function joinSpans(span0, span1) {
24886    return {
24887      start: Math.min(span0.start, span1.start),
24888      end: Math.max(span0.end, span1.end)
24889    };
24890  }
24891  function intersectSpans(span0, span1) {
24892    let start5 = Math.max(span0.start, span1.start);
24893    let end2 = Math.min(span0.end, span1.end);
24894    if (start5 < end2) {
24895      return { start: start5, end: end2 };
24896    }
24897    return null;
24898  }
24899  function insertAt(arr, index4, item) {
24900    arr.splice(index4, 0, item);
24901  }
24902  function binarySearch(a4, searchVal, getItemVal) {
24903    let startIndex = 0;
24904    let endIndex = a4.length;
24905    if (!endIndex || searchVal < getItemVal(a4[startIndex])) {
24906      return [0, 0];
24907    }
24908    if (searchVal > getItemVal(a4[endIndex - 1])) {
24909      return [endIndex, 0];
24910    }
24911    while (startIndex < endIndex) {
24912      let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
24913      let middleVal = getItemVal(a4[middleIndex]);
24914      if (searchVal < middleVal) {
24915        endIndex = middleIndex;
24916      } else if (searchVal > middleVal) {
24917        startIndex = middleIndex + 1;
24918      } else {
24919        return [middleIndex, 1];
24920      }
24921    }
24922    return [startIndex, 0];
24923  }
24924  function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
24925    if (!datesRepDistinctDays || dayCnt > 10) {
24926      return createFormatter({ weekday: "short" });
24927    }
24928    if (dayCnt > 1) {
24929      return createFormatter({ weekday: "short", month: "numeric", day: "numeric", omitCommas: true });
24930    }
24931    return createFormatter({ weekday: "long" });
24932  }
24933  var CLASS_NAME = "fc-col-header-cell";
24934  function renderInner$1(renderProps) {
24935    return renderProps.text;
24936  }
24937  var TableDateCell = class extends BaseComponent {
24938    render() {
24939      let { dateEnv, options, theme, viewApi } = this.context;
24940      let { props } = this;
24941      let { date, dateProfile } = props;
24942      let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);
24943      let classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
24944      let text = dateEnv.format(date, props.dayHeaderFormat);
24945      let navLinkAttrs = !dayMeta.isDisabled && props.colCnt > 1 ? buildNavLinkAttrs(this.context, date) : {};
24946      let renderProps = Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraRenderProps), { text }), dayMeta);
24947      return y2(ContentContainer, { elTag: "th", elClasses: classNames, elAttrs: Object.assign({ role: "columnheader", colSpan: props.colSpan, "data-date": !dayMeta.isDisabled ? formatDayString(date) : void 0 }, props.extraDataAttrs), renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContainer) => y2("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && y2(InnerContainer, { elTag: "a", elAttrs: navLinkAttrs, elClasses: [
24948        "fc-col-header-cell-cushion",
24949        props.isSticky && "fc-sticky"
24950      ] })));
24951    }
24952  };
24953  var WEEKDAY_FORMAT = createFormatter({ weekday: "long" });
24954  var TableDowCell = class extends BaseComponent {
24955    render() {
24956      let { props } = this;
24957      let { dateEnv, theme, viewApi, options } = this.context;
24958      let date = addDays(new Date(2592e5), props.dow);
24959      let dateMeta = {
24960        dow: props.dow,
24961        isDisabled: false,
24962        isFuture: false,
24963        isPast: false,
24964        isToday: false,
24965        isOther: false
24966      };
24967      let text = dateEnv.format(date, props.dayHeaderFormat);
24968      let renderProps = Object.assign(Object.assign(Object.assign(Object.assign({
24969        date
24970      }, dateMeta), { view: viewApi }), props.extraRenderProps), { text });
24971      return y2(ContentContainer, { elTag: "th", elClasses: [
24972        CLASS_NAME,
24973        ...getDayClassNames(dateMeta, theme),
24974        ...props.extraClassNames || []
24975      ], elAttrs: Object.assign({ role: "columnheader", colSpan: props.colSpan }, props.extraDataAttrs), renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => y2(
24976        "div",
24977        { className: "fc-scrollgrid-sync-inner" },
24978        y2(InnerContent, { elTag: "a", elClasses: [
24979          "fc-col-header-cell-cushion",
24980          props.isSticky && "fc-sticky"
24981        ], elAttrs: {
24982          "aria-label": dateEnv.format(date, WEEKDAY_FORMAT)
24983        } })
24984      ));
24985    }
24986  };
24987  var NowTimer = class extends x2 {
24988    constructor(props, context) {
24989      super(props, context);
24990      this.initialNowDate = getNow(context.options.now, context.dateEnv);
24991      this.initialNowQueriedMs = new Date().valueOf();
24992      this.state = this.computeTiming().currentState;
24993    }
24994    render() {
24995      let { props, state } = this;
24996      return props.children(state.nowDate, state.todayRange);
24997    }
24998    componentDidMount() {
24999      this.setTimeout();
25000    }
25001    componentDidUpdate(prevProps) {
25002      if (prevProps.unit !== this.props.unit) {
25003        this.clearTimeout();
25004        this.setTimeout();
25005      }
25006    }
25007    componentWillUnmount() {
25008      this.clearTimeout();
25009    }
25010    computeTiming() {
25011      let { props, context } = this;
25012      let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);
25013      let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
25014      let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
25015      let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
25016      waitMs = Math.min(1e3 * 60 * 60 * 24, waitMs);
25017      return {
25018        currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
25019        nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
25020        waitMs
25021      };
25022    }
25023    setTimeout() {
25024      let { nextState, waitMs } = this.computeTiming();
25025      this.timeoutId = setTimeout(() => {
25026        this.setState(nextState, () => {
25027          this.setTimeout();
25028        });
25029      }, waitMs);
25030    }
25031    clearTimeout() {
25032      if (this.timeoutId) {
25033        clearTimeout(this.timeoutId);
25034      }
25035    }
25036  };
25037  NowTimer.contextType = ViewContextType;
25038  function buildDayRange(date) {
25039    let start5 = startOfDay(date);
25040    let end2 = addDays(start5, 1);
25041    return { start: start5, end: end2 };
25042  }
25043  var DayHeader = class extends BaseComponent {
25044    constructor() {
25045      super(...arguments);
25046      this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);
25047    }
25048    render() {
25049      let { context } = this;
25050      let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props;
25051      let dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
25052      return y2(NowTimer, { unit: "day" }, (nowDate, todayRange) => y2(
25053        "tr",
25054        { role: "row" },
25055        renderIntro && renderIntro("day"),
25056        dates.map((date) => datesRepDistinctDays ? y2(TableDateCell, { key: date.toISOString(), date, dateProfile, todayRange, colCnt: dates.length, dayHeaderFormat }) : y2(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat }))
25057      ));
25058    }
25059  };
25060  function createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {
25061    return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);
25062  }
25063  var DaySeriesModel = class {
25064    constructor(range, dateProfileGenerator) {
25065      let date = range.start;
25066      let { end: end2 } = range;
25067      let indices = [];
25068      let dates = [];
25069      let dayIndex = -1;
25070      while (date < end2) {
25071        if (dateProfileGenerator.isHiddenDay(date)) {
25072          indices.push(dayIndex + 0.5);
25073        } else {
25074          dayIndex += 1;
25075          indices.push(dayIndex);
25076          dates.push(date);
25077        }
25078        date = addDays(date, 1);
25079      }
25080      this.dates = dates;
25081      this.indices = indices;
25082      this.cnt = dates.length;
25083    }
25084    sliceRange(range) {
25085      let firstIndex = this.getDateDayIndex(range.start);
25086      let lastIndex = this.getDateDayIndex(addDays(range.end, -1));
25087      let clippedFirstIndex = Math.max(0, firstIndex);
25088      let clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
25089      clippedFirstIndex = Math.ceil(clippedFirstIndex);
25090      clippedLastIndex = Math.floor(clippedLastIndex);
25091      if (clippedFirstIndex <= clippedLastIndex) {
25092        return {
25093          firstIndex: clippedFirstIndex,
25094          lastIndex: clippedLastIndex,
25095          isStart: firstIndex === clippedFirstIndex,
25096          isEnd: lastIndex === clippedLastIndex
25097        };
25098      }
25099      return null;
25100    }
25101    getDateDayIndex(date) {
25102      let { indices } = this;
25103      let dayOffset = Math.floor(diffDays(this.dates[0], date));
25104      if (dayOffset < 0) {
25105        return indices[0] - 1;
25106      }
25107      if (dayOffset >= indices.length) {
25108        return indices[indices.length - 1] + 1;
25109      }
25110      return indices[dayOffset];
25111    }
25112  };
25113  var DayTableModel = class {
25114    constructor(daySeries, breakOnWeeks) {
25115      let { dates } = daySeries;
25116      let daysPerRow;
25117      let firstDay;
25118      let rowCnt;
25119      if (breakOnWeeks) {
25120        firstDay = dates[0].getUTCDay();
25121        for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {
25122          if (dates[daysPerRow].getUTCDay() === firstDay) {
25123            break;
25124          }
25125        }
25126        rowCnt = Math.ceil(dates.length / daysPerRow);
25127      } else {
25128        rowCnt = 1;
25129        daysPerRow = dates.length;
25130      }
25131      this.rowCnt = rowCnt;
25132      this.colCnt = daysPerRow;
25133      this.daySeries = daySeries;
25134      this.cells = this.buildCells();
25135      this.headerDates = this.buildHeaderDates();
25136    }
25137    buildCells() {
25138      let rows = [];
25139      for (let row = 0; row < this.rowCnt; row += 1) {
25140        let cells = [];
25141        for (let col = 0; col < this.colCnt; col += 1) {
25142          cells.push(this.buildCell(row, col));
25143        }
25144        rows.push(cells);
25145      }
25146      return rows;
25147    }
25148    buildCell(row, col) {
25149      let date = this.daySeries.dates[row * this.colCnt + col];
25150      return {
25151        key: date.toISOString(),
25152        date
25153      };
25154    }
25155    buildHeaderDates() {
25156      let dates = [];
25157      for (let col = 0; col < this.colCnt; col += 1) {
25158        dates.push(this.cells[0][col].date);
25159      }
25160      return dates;
25161    }
25162    sliceRange(range) {
25163      let { colCnt } = this;
25164      let seriesSeg = this.daySeries.sliceRange(range);
25165      let segs = [];
25166      if (seriesSeg) {
25167        let { firstIndex, lastIndex } = seriesSeg;
25168        let index4 = firstIndex;
25169        while (index4 <= lastIndex) {
25170          let row = Math.floor(index4 / colCnt);
25171          let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
25172          segs.push({
25173            row,
25174            firstCol: index4 % colCnt,
25175            lastCol: (nextIndex - 1) % colCnt,
25176            isStart: seriesSeg.isStart && index4 === firstIndex,
25177            isEnd: seriesSeg.isEnd && nextIndex - 1 === lastIndex
25178          });
25179          index4 = nextIndex;
25180        }
25181      }
25182      return segs;
25183    }
25184  };
25185  var Slicer = class {
25186    constructor() {
25187      this.sliceBusinessHours = memoize(this._sliceBusinessHours);
25188      this.sliceDateSelection = memoize(this._sliceDateSpan);
25189      this.sliceEventStore = memoize(this._sliceEventStore);
25190      this.sliceEventDrag = memoize(this._sliceInteraction);
25191      this.sliceEventResize = memoize(this._sliceInteraction);
25192      this.forceDayIfListItem = false;
25193    }
25194    sliceProps(props, dateProfile, nextDayThreshold, context, ...extraArgs) {
25195      let { eventUiBases } = props;
25196      let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs);
25197      return {
25198        dateSelectionSegs: this.sliceDateSelection(props.dateSelection, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs),
25199        businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),
25200        fgEventSegs: eventSegs.fg,
25201        bgEventSegs: eventSegs.bg,
25202        eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
25203        eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
25204        eventSelection: props.eventSelection
25205      };
25206    }
25207    sliceNowDate(date, dateProfile, nextDayThreshold, context, ...extraArgs) {
25208      return this._sliceDateSpan(
25209        { range: { start: date, end: addMs(date, 1) }, allDay: false },
25210        dateProfile,
25211        nextDayThreshold,
25212        {},
25213        context,
25214        ...extraArgs
25215      );
25216    }
25217    _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context, ...extraArgs) {
25218      if (!businessHours) {
25219        return [];
25220      }
25221      return this._sliceEventStore(expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold, ...extraArgs).bg;
25222    }
25223    _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
25224      if (eventStore) {
25225        let rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
25226        return {
25227          bg: this.sliceEventRanges(rangeRes.bg, extraArgs),
25228          fg: this.sliceEventRanges(rangeRes.fg, extraArgs)
25229        };
25230      }
25231      return { bg: [], fg: [] };
25232    }
25233    _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
25234      if (!interaction) {
25235        return null;
25236      }
25237      let rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
25238      return {
25239        segs: this.sliceEventRanges(rangeRes.fg, extraArgs),
25240        affectedInstances: interaction.affectedEvents.instances,
25241        isEvent: interaction.isEvent
25242      };
25243    }
25244    _sliceDateSpan(dateSpan, dateProfile, nextDayThreshold, eventUiBases, context, ...extraArgs) {
25245      if (!dateSpan) {
25246        return [];
25247      }
25248      let activeRange = computeActiveRange(dateProfile, Boolean(nextDayThreshold));
25249      let activeDateSpanRange = intersectRanges(dateSpan.range, activeRange);
25250      if (activeDateSpanRange) {
25251        dateSpan = Object.assign(Object.assign({}, dateSpan), { range: activeDateSpanRange });
25252        let eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
25253        let segs = this.sliceRange(dateSpan.range, ...extraArgs);
25254        for (let seg of segs) {
25255          seg.eventRange = eventRange;
25256        }
25257        return segs;
25258      }
25259      return [];
25260    }
25261    sliceEventRanges(eventRanges, extraArgs) {
25262      let segs = [];
25263      for (let eventRange of eventRanges) {
25264        segs.push(...this.sliceEventRange(eventRange, extraArgs));
25265      }
25266      return segs;
25267    }
25268    sliceEventRange(eventRange, extraArgs) {
25269      let dateRange = eventRange.range;
25270      if (this.forceDayIfListItem && eventRange.ui.display === "list-item") {
25271        dateRange = {
25272          start: dateRange.start,
25273          end: addDays(dateRange.start, 1)
25274        };
25275      }
25276      let segs = this.sliceRange(dateRange, ...extraArgs);
25277      for (let seg of segs) {
25278        seg.eventRange = eventRange;
25279        seg.isStart = eventRange.isStart && seg.isStart;
25280        seg.isEnd = eventRange.isEnd && seg.isEnd;
25281      }
25282      return segs;
25283    }
25284  };
25285  function computeActiveRange(dateProfile, isComponentAllDay) {
25286    let range = dateProfile.activeRange;
25287    if (isComponentAllDay) {
25288      return range;
25289    }
25290    return {
25291      start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
25292      end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5)
25293    };
25294  }
25295  var VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
25296  var Scroller = class extends BaseComponent {
25297    constructor() {
25298      super(...arguments);
25299      this.handleEl = (el) => {
25300        this.el = el;
25301        setRef(this.props.elRef, el);
25302      };
25303    }
25304    render() {
25305      let { props } = this;
25306      let { liquid, liquidIsAbsolute } = props;
25307      let isAbsolute = liquid && liquidIsAbsolute;
25308      let className = ["fc-scroller"];
25309      if (liquid) {
25310        if (liquidIsAbsolute) {
25311          className.push("fc-scroller-liquid-absolute");
25312        } else {
25313          className.push("fc-scroller-liquid");
25314        }
25315      }
25316      return y2("div", { ref: this.handleEl, className: className.join(" "), style: {
25317        overflowX: props.overflowX,
25318        overflowY: props.overflowY,
25319        left: isAbsolute && -(props.overcomeLeft || 0) || "",
25320        right: isAbsolute && -(props.overcomeRight || 0) || "",
25321        bottom: isAbsolute && -(props.overcomeBottom || 0) || "",
25322        marginLeft: !isAbsolute && -(props.overcomeLeft || 0) || "",
25323        marginRight: !isAbsolute && -(props.overcomeRight || 0) || "",
25324        marginBottom: !isAbsolute && -(props.overcomeBottom || 0) || "",
25325        maxHeight: props.maxHeight || ""
25326      } }, props.children);
25327    }
25328    needsXScrolling() {
25329      if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
25330        return false;
25331      }
25332      let { el } = this;
25333      let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();
25334      let { children } = el;
25335      for (let i4 = 0; i4 < children.length; i4 += 1) {
25336        let childEl = children[i4];
25337        if (childEl.getBoundingClientRect().width > realClientWidth) {
25338          return true;
25339        }
25340      }
25341      return false;
25342    }
25343    needsYScrolling() {
25344      if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
25345        return false;
25346      }
25347      let { el } = this;
25348      let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();
25349      let { children } = el;
25350      for (let i4 = 0; i4 < children.length; i4 += 1) {
25351        let childEl = children[i4];
25352        if (childEl.getBoundingClientRect().height > realClientHeight) {
25353          return true;
25354        }
25355      }
25356      return false;
25357    }
25358    getXScrollbarWidth() {
25359      if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
25360        return 0;
25361      }
25362      return this.el.offsetHeight - this.el.clientHeight;
25363    }
25364    getYScrollbarWidth() {
25365      if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
25366        return 0;
25367      }
25368      return this.el.offsetWidth - this.el.clientWidth;
25369    }
25370  };
25371  var RefMap = class {
25372    constructor(masterCallback) {
25373      this.masterCallback = masterCallback;
25374      this.currentMap = {};
25375      this.depths = {};
25376      this.callbackMap = {};
25377      this.handleValue = (val, key) => {
25378        let { depths, currentMap } = this;
25379        let removed = false;
25380        let added = false;
25381        if (val !== null) {
25382          removed = key in currentMap;
25383          currentMap[key] = val;
25384          depths[key] = (depths[key] || 0) + 1;
25385          added = true;
25386        } else {
25387          depths[key] -= 1;
25388          if (!depths[key]) {
25389            delete currentMap[key];
25390            delete this.callbackMap[key];
25391            removed = true;
25392          }
25393        }
25394        if (this.masterCallback) {
25395          if (removed) {
25396            this.masterCallback(null, String(key));
25397          }
25398          if (added) {
25399            this.masterCallback(val, String(key));
25400          }
25401        }
25402      };
25403    }
25404    createRef(key) {
25405      let refCallback = this.callbackMap[key];
25406      if (!refCallback) {
25407        refCallback = this.callbackMap[key] = (val) => {
25408          this.handleValue(val, String(key));
25409        };
25410      }
25411      return refCallback;
25412    }
25413    collect(startIndex, endIndex, step) {
25414      return collectFromHash(this.currentMap, startIndex, endIndex, step);
25415    }
25416    getAll() {
25417      return hashValuesToArray(this.currentMap);
25418    }
25419  };
25420  function computeShrinkWidth(chunkEls) {
25421    let shrinkCells = findElements2(chunkEls, ".fc-scrollgrid-shrink");
25422    let largestWidth = 0;
25423    for (let shrinkCell of shrinkCells) {
25424      largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));
25425    }
25426    return Math.ceil(largestWidth);
25427  }
25428  function getSectionHasLiquidHeight(props, sectionConfig) {
25429    return props.liquid && sectionConfig.liquid;
25430  }
25431  function getAllowYScrolling(props, sectionConfig) {
25432    return sectionConfig.maxHeight != null || getSectionHasLiquidHeight(props, sectionConfig);
25433  }
25434  function renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {
25435    let { expandRows } = arg;
25436    let content = typeof chunkConfig.content === "function" ? chunkConfig.content(arg) : y2("table", {
25437      role: "presentation",
25438      className: [
25439        chunkConfig.tableClassName,
25440        sectionConfig.syncRowHeights ? "fc-scrollgrid-sync-table" : ""
25441      ].join(" "),
25442      style: {
25443        minWidth: arg.tableMinWidth,
25444        width: arg.clientWidth,
25445        height: expandRows ? arg.clientHeight : ""
25446      }
25447    }, arg.tableColGroupNode, y2(isHeader ? "thead" : "tbody", {
25448      role: "presentation"
25449    }, typeof chunkConfig.rowContent === "function" ? chunkConfig.rowContent(arg) : chunkConfig.rowContent));
25450    return content;
25451  }
25452  function isColPropsEqual(cols0, cols1) {
25453    return isArraysEqual(cols0, cols1, isPropsEqual);
25454  }
25455  function renderMicroColGroup(cols, shrinkWidth) {
25456    let colNodes = [];
25457    for (let colProps of cols) {
25458      let span = colProps.span || 1;
25459      for (let i4 = 0; i4 < span; i4 += 1) {
25460        colNodes.push(y2("col", { style: {
25461          width: colProps.width === "shrink" ? sanitizeShrinkWidth(shrinkWidth) : colProps.width || "",
25462          minWidth: colProps.minWidth || ""
25463        } }));
25464      }
25465    }
25466    return y2("colgroup", {}, ...colNodes);
25467  }
25468  function sanitizeShrinkWidth(shrinkWidth) {
25469    return shrinkWidth == null ? 4 : shrinkWidth;
25470  }
25471  function hasShrinkWidth(cols) {
25472    for (let col of cols) {
25473      if (col.width === "shrink") {
25474        return true;
25475      }
25476    }
25477    return false;
25478  }
25479  function getScrollGridClassNames(liquid, context) {
25480    let classNames = [
25481      "fc-scrollgrid",
25482      context.theme.getClass("table")
25483    ];
25484    if (liquid) {
25485      classNames.push("fc-scrollgrid-liquid");
25486    }
25487    return classNames;
25488  }
25489  function getSectionClassNames(sectionConfig, wholeTableVGrow) {
25490    let classNames = [
25491      "fc-scrollgrid-section",
25492      `fc-scrollgrid-section-${sectionConfig.type}`,
25493      sectionConfig.className
25494    ];
25495    if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
25496      classNames.push("fc-scrollgrid-section-liquid");
25497    }
25498    if (sectionConfig.isSticky) {
25499      classNames.push("fc-scrollgrid-section-sticky");
25500    }
25501    return classNames;
25502  }
25503  function renderScrollShim(arg) {
25504    return y2("div", { className: "fc-scrollgrid-sticky-shim", style: {
25505      width: arg.clientWidth,
25506      minWidth: arg.tableMinWidth
25507    } });
25508  }
25509  function getStickyHeaderDates(options) {
25510    let { stickyHeaderDates } = options;
25511    if (stickyHeaderDates == null || stickyHeaderDates === "auto") {
25512      stickyHeaderDates = options.height === "auto" || options.viewHeight === "auto";
25513    }
25514    return stickyHeaderDates;
25515  }
25516  function getStickyFooterScrollbar(options) {
25517    let { stickyFooterScrollbar } = options;
25518    if (stickyFooterScrollbar == null || stickyFooterScrollbar === "auto") {
25519      stickyFooterScrollbar = options.height === "auto" || options.viewHeight === "auto";
25520    }
25521    return stickyFooterScrollbar;
25522  }
25523  var SimpleScrollGrid = class extends BaseComponent {
25524    constructor() {
25525      super(...arguments);
25526      this.processCols = memoize((a4) => a4, isColPropsEqual);
25527      this.renderMicroColGroup = memoize(renderMicroColGroup);
25528      this.scrollerRefs = new RefMap();
25529      this.scrollerElRefs = new RefMap(this._handleScrollerEl.bind(this));
25530      this.state = {
25531        shrinkWidth: null,
25532        forceYScrollbars: false,
25533        scrollerClientWidths: {},
25534        scrollerClientHeights: {}
25535      };
25536      this.handleSizing = () => {
25537        this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));
25538      };
25539    }
25540    render() {
25541      let { props, state, context } = this;
25542      let sectionConfigs = props.sections || [];
25543      let cols = this.processCols(props.cols);
25544      let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
25545      let classNames = getScrollGridClassNames(props.liquid, context);
25546      if (props.collapsibleWidth) {
25547        classNames.push("fc-scrollgrid-collapsible");
25548      }
25549      let configCnt = sectionConfigs.length;
25550      let configI = 0;
25551      let currentConfig;
25552      let headSectionNodes = [];
25553      let bodySectionNodes = [];
25554      let footSectionNodes = [];
25555      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === "header") {
25556        headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
25557        configI += 1;
25558      }
25559      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === "body") {
25560        bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));
25561        configI += 1;
25562      }
25563      while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === "footer") {
25564        footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
25565        configI += 1;
25566      }
25567      let isBuggy = !getCanVGrowWithinCell();
25568      const roleAttrs = { role: "rowgroup" };
25569      return y2("table", {
25570        role: "grid",
25571        className: classNames.join(" "),
25572        style: { height: props.height }
25573      }, Boolean(!isBuggy && headSectionNodes.length) && y2("thead", roleAttrs, ...headSectionNodes), Boolean(!isBuggy && bodySectionNodes.length) && y2("tbody", roleAttrs, ...bodySectionNodes), Boolean(!isBuggy && footSectionNodes.length) && y2("tfoot", roleAttrs, ...footSectionNodes), isBuggy && y2("tbody", roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes));
25574    }
25575    renderSection(sectionConfig, microColGroupNode, isHeader) {
25576      if ("outerContent" in sectionConfig) {
25577        return y2(_2, { key: sectionConfig.key }, sectionConfig.outerContent);
25578      }
25579      return y2("tr", { key: sectionConfig.key, role: "presentation", className: getSectionClassNames(sectionConfig, this.props.liquid).join(" ") }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader));
25580    }
25581    renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {
25582      if ("outerContent" in chunkConfig) {
25583        return chunkConfig.outerContent;
25584      }
25585      let { props } = this;
25586      let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state;
25587      let needsYScrolling = getAllowYScrolling(props, sectionConfig);
25588      let isLiquid = getSectionHasLiquidHeight(props, sectionConfig);
25589      let overflowY = !props.liquid ? "visible" : forceYScrollbars ? "scroll" : !needsYScrolling ? "hidden" : "auto";
25590      let sectionKey = sectionConfig.key;
25591      let content = renderChunkContent(sectionConfig, chunkConfig, {
25592        tableColGroupNode: microColGroupNode,
25593        tableMinWidth: "",
25594        clientWidth: !props.collapsibleWidth && scrollerClientWidths[sectionKey] !== void 0 ? scrollerClientWidths[sectionKey] : null,
25595        clientHeight: scrollerClientHeights[sectionKey] !== void 0 ? scrollerClientHeights[sectionKey] : null,
25596        expandRows: sectionConfig.expandRows,
25597        syncRowHeights: false,
25598        rowSyncHeights: [],
25599        reportRowHeightChange: () => {
25600        }
25601      }, isHeader);
25602      return y2(isHeader ? "th" : "td", {
25603        ref: chunkConfig.elRef,
25604        role: "presentation"
25605      }, y2(
25606        "div",
25607        { className: `fc-scroller-harness${isLiquid ? " fc-scroller-harness-liquid" : ""}` },
25608        y2(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY, overflowX: !props.liquid ? "visible" : "hidden", maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute: true }, content)
25609      ));
25610    }
25611    _handleScrollerEl(scrollerEl, key) {
25612      let section = getSectionByKey(this.props.sections, key);
25613      if (section) {
25614        setRef(section.chunk.scrollerElRef, scrollerEl);
25615      }
25616    }
25617    componentDidMount() {
25618      this.handleSizing();
25619      this.context.addResizeHandler(this.handleSizing);
25620    }
25621    componentDidUpdate() {
25622      this.handleSizing();
25623    }
25624    componentWillUnmount() {
25625      this.context.removeResizeHandler(this.handleSizing);
25626    }
25627    computeShrinkWidth() {
25628      return hasShrinkWidth(this.props.cols) ? computeShrinkWidth(this.scrollerElRefs.getAll()) : 0;
25629    }
25630    computeScrollerDims() {
25631      let scrollbarWidth = getScrollbarWidths();
25632      let { scrollerRefs, scrollerElRefs } = this;
25633      let forceYScrollbars = false;
25634      let scrollerClientWidths = {};
25635      let scrollerClientHeights = {};
25636      for (let sectionKey in scrollerRefs.currentMap) {
25637        let scroller = scrollerRefs.currentMap[sectionKey];
25638        if (scroller && scroller.needsYScrolling()) {
25639          forceYScrollbars = true;
25640          break;
25641        }
25642      }
25643      for (let section of this.props.sections) {
25644        let sectionKey = section.key;
25645        let scrollerEl = scrollerElRefs.currentMap[sectionKey];
25646        if (scrollerEl) {
25647          let harnessEl = scrollerEl.parentNode;
25648          scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars ? scrollbarWidth.y : 0));
25649          scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
25650        }
25651      }
25652      return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights };
25653    }
25654  };
25655  SimpleScrollGrid.addStateEquality({
25656    scrollerClientWidths: isPropsEqual,
25657    scrollerClientHeights: isPropsEqual
25658  });
25659  function getSectionByKey(sections, key) {
25660    for (let section of sections) {
25661      if (section.key === key) {
25662        return section;
25663      }
25664    }
25665    return null;
25666  }
25667  var EventContainer = class extends BaseComponent {
25668    constructor() {
25669      super(...arguments);
25670      this.handleEl = (el) => {
25671        this.el = el;
25672        if (el) {
25673          setElSeg(el, this.props.seg);
25674        }
25675      };
25676    }
25677    render() {
25678      const { props, context } = this;
25679      const { options } = context;
25680      const { seg } = props;
25681      const { eventRange } = seg;
25682      const { ui: ui2 } = eventRange;
25683      const renderProps = {
25684        event: new EventImpl(context, eventRange.def, eventRange.instance),
25685        view: context.viewApi,
25686        timeText: props.timeText,
25687        textColor: ui2.textColor,
25688        backgroundColor: ui2.backgroundColor,
25689        borderColor: ui2.borderColor,
25690        isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
25691        isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
25692        isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
25693        isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
25694        isStart: Boolean(seg.isStart),
25695        isEnd: Boolean(seg.isEnd),
25696        isPast: Boolean(props.isPast),
25697        isFuture: Boolean(props.isFuture),
25698        isToday: Boolean(props.isToday),
25699        isSelected: Boolean(props.isSelected),
25700        isDragging: Boolean(props.isDragging),
25701        isResizing: Boolean(props.isResizing)
25702      };
25703      return y2(ContentContainer, Object.assign({}, props, { elRef: this.handleEl, elClasses: [
25704        ...getEventClassNames(renderProps),
25705        ...seg.eventRange.ui.classNames,
25706        ...props.elClasses || []
25707      ], renderProps, generatorName: "eventContent", customGenerator: options.eventContent, defaultGenerator: props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount }));
25708    }
25709    componentDidUpdate(prevProps) {
25710      if (this.el && this.props.seg !== prevProps.seg) {
25711        setElSeg(this.el, this.props.seg);
25712      }
25713    }
25714  };
25715  var StandardEvent = class extends BaseComponent {
25716    render() {
25717      let { props, context } = this;
25718      let { options } = context;
25719      let { seg } = props;
25720      let { ui: ui2 } = seg.eventRange;
25721      let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
25722      let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
25723      return y2(EventContainer, Object.assign({}, props, { elTag: "a", elStyle: {
25724        borderColor: ui2.borderColor,
25725        backgroundColor: ui2.backgroundColor
25726      }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1, timeText }), (InnerContent, eventContentArg) => y2(
25727        _2,
25728        null,
25729        y2(InnerContent, { elTag: "div", elClasses: ["fc-event-main"], elStyle: { color: eventContentArg.textColor } }),
25730        Boolean(eventContentArg.isStartResizable) && y2("div", { className: "fc-event-resizer fc-event-resizer-start" }),
25731        Boolean(eventContentArg.isEndResizable) && y2("div", { className: "fc-event-resizer fc-event-resizer-end" })
25732      ));
25733    }
25734  };
25735  function renderInnerContent$1(innerProps) {
25736    return y2(
25737      "div",
25738      { className: "fc-event-main-frame" },
25739      innerProps.timeText && y2("div", { className: "fc-event-time" }, innerProps.timeText),
25740      y2(
25741        "div",
25742        { className: "fc-event-title-container" },
25743        y2("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || y2(_2, null, "\xA0"))
25744      )
25745    );
25746  }
25747  var NowIndicatorContainer = (props) => y2(ViewContextType.Consumer, null, (context) => {
25748    let { options } = context;
25749    let renderProps = {
25750      isAxis: props.isAxis,
25751      date: context.dateEnv.toDate(props.date),
25752      view: context.viewApi
25753    };
25754    return y2(ContentContainer, Object.assign({}, props, { elTag: props.elTag || "div", renderProps, generatorName: "nowIndicatorContent", customGenerator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount }));
25755  });
25756  var DAY_NUM_FORMAT = createFormatter({ day: "numeric" });
25757  var DayCellContainer = class extends BaseComponent {
25758    constructor() {
25759      super(...arguments);
25760      this.refineRenderProps = memoizeObjArg(refineRenderProps);
25761    }
25762    render() {
25763      let { props, context } = this;
25764      let { options } = context;
25765      let renderProps = this.refineRenderProps({
25766        date: props.date,
25767        dateProfile: props.dateProfile,
25768        todayRange: props.todayRange,
25769        isMonthStart: props.isMonthStart || false,
25770        showDayNumber: props.showDayNumber,
25771        extraRenderProps: props.extraRenderProps,
25772        viewApi: context.viewApi,
25773        dateEnv: context.dateEnv,
25774        monthStartFormat: options.monthStartFormat
25775      });
25776      return y2(ContentContainer, Object.assign({}, props, { elClasses: [
25777        ...getDayClassNames(renderProps, context.theme),
25778        ...props.elClasses || []
25779      ], elAttrs: Object.assign(Object.assign({}, props.elAttrs), renderProps.isDisabled ? {} : { "data-date": formatDayString(props.date) }), renderProps, generatorName: "dayCellContent", customGenerator: options.dayCellContent, defaultGenerator: props.defaultGenerator, classNameGenerator: renderProps.isDisabled ? void 0 : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount }));
25780    }
25781  };
25782  function hasCustomDayCellContent(options) {
25783    return Boolean(options.dayCellContent || hasCustomRenderingHandler("dayCellContent", options));
25784  }
25785  function refineRenderProps(raw) {
25786    let { date, dateEnv, dateProfile, isMonthStart } = raw;
25787    let dayMeta = getDateMeta(date, raw.todayRange, null, dateProfile);
25788    let dayNumberText = raw.showDayNumber ? dateEnv.format(date, isMonthStart ? raw.monthStartFormat : DAY_NUM_FORMAT) : "";
25789    return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), {
25790      isMonthStart,
25791      dayNumberText
25792    }), raw.extraRenderProps);
25793  }
25794  var BgEvent = class extends BaseComponent {
25795    render() {
25796      let { props } = this;
25797      let { seg } = props;
25798      return y2(EventContainer, { elTag: "div", elClasses: ["fc-bg-event"], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, seg, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true });
25799    }
25800  };
25801  function renderInnerContent(props) {
25802    let { title } = props.event;
25803    return title && y2("div", { className: "fc-event-title" }, props.event.title);
25804  }
25805  function renderFill(fillType) {
25806    return y2("div", { className: `fc-${fillType}` });
25807  }
25808  var WeekNumberContainer = (props) => y2(ViewContextType.Consumer, null, (context) => {
25809    let { dateEnv, options } = context;
25810    let { date } = props;
25811    let format = options.weekNumberFormat || props.defaultFormat;
25812    let num = dateEnv.computeWeekNumber(date);
25813    let text = dateEnv.format(date, format);
25814    let renderProps = { num, text, date };
25815    return y2(
25816      ContentContainer,
25817      Object.assign({}, props, { renderProps, generatorName: "weekNumberContent", customGenerator: options.weekNumberContent, defaultGenerator: renderInner, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount })
25818    );
25819  });
25820  function renderInner(innerProps) {
25821    return innerProps.text;
25822  }
25823  var PADDING_FROM_VIEWPORT = 10;
25824  var Popover = class extends BaseComponent {
25825    constructor() {
25826      super(...arguments);
25827      this.state = {
25828        titleId: getUniqueDomId()
25829      };
25830      this.handleRootEl = (el) => {
25831        this.rootEl = el;
25832        if (this.props.elRef) {
25833          setRef(this.props.elRef, el);
25834        }
25835      };
25836      this.handleDocumentMouseDown = (ev) => {
25837        const target = getEventTargetViaRoot(ev);
25838        if (!this.rootEl.contains(target)) {
25839          this.handleCloseClick();
25840        }
25841      };
25842      this.handleDocumentKeyDown = (ev) => {
25843        if (ev.key === "Escape") {
25844          this.handleCloseClick();
25845        }
25846      };
25847      this.handleCloseClick = () => {
25848        let { onClose } = this.props;
25849        if (onClose) {
25850          onClose();
25851        }
25852      };
25853    }
25854    render() {
25855      let { theme, options } = this.context;
25856      let { props, state } = this;
25857      let classNames = [
25858        "fc-popover",
25859        theme.getClass("popover")
25860      ].concat(props.extraClassNames || []);
25861      return j4(y2(
25862        "div",
25863        Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(" "), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
25864        y2(
25865          "div",
25866          { className: "fc-popover-header " + theme.getClass("popoverHeader") },
25867          y2("span", { className: "fc-popover-title", id: state.titleId }, props.title),
25868          y2("span", { className: "fc-popover-close " + theme.getIconClass("close"), title: options.closeHint, onClick: this.handleCloseClick })
25869        ),
25870        y2("div", { className: "fc-popover-body " + theme.getClass("popoverContent") }, props.children)
25871      ), props.parentEl);
25872    }
25873    componentDidMount() {
25874      document.addEventListener("mousedown", this.handleDocumentMouseDown);
25875      document.addEventListener("keydown", this.handleDocumentKeyDown);
25876      this.updateSize();
25877    }
25878    componentWillUnmount() {
25879      document.removeEventListener("mousedown", this.handleDocumentMouseDown);
25880      document.removeEventListener("keydown", this.handleDocumentKeyDown);
25881    }
25882    updateSize() {
25883      let { isRtl } = this.context;
25884      let { alignmentEl, alignGridTop } = this.props;
25885      let { rootEl } = this;
25886      let alignmentRect = computeClippedClientRect(alignmentEl);
25887      if (alignmentRect) {
25888        let popoverDims = rootEl.getBoundingClientRect();
25889        let popoverTop = alignGridTop ? elementClosest(alignmentEl, ".fc-scrollgrid").getBoundingClientRect().top : alignmentRect.top;
25890        let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
25891        popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
25892        popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
25893        popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
25894        let origin = rootEl.offsetParent.getBoundingClientRect();
25895        applyStyle(rootEl, {
25896          top: popoverTop - origin.top,
25897          left: popoverLeft - origin.left
25898        });
25899      }
25900    }
25901  };
25902  var MorePopover = class extends DateComponent {
25903    constructor() {
25904      super(...arguments);
25905      this.handleRootEl = (rootEl) => {
25906        this.rootEl = rootEl;
25907        if (rootEl) {
25908          this.context.registerInteractiveComponent(this, {
25909            el: rootEl,
25910            useEventCenter: false
25911          });
25912        } else {
25913          this.context.unregisterInteractiveComponent(this);
25914        }
25915      };
25916    }
25917    render() {
25918      let { options, dateEnv } = this.context;
25919      let { props } = this;
25920      let { startDate, todayRange, dateProfile } = props;
25921      let title = dateEnv.format(startDate, options.dayPopoverFormat);
25922      return y2(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile, todayRange }, (InnerContent, renderProps, elAttrs) => y2(
25923        Popover,
25924        { elRef: elAttrs.ref, id: props.id, title, extraClassNames: ["fc-more-popover"].concat(elAttrs.className || []), extraAttrs: elAttrs, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
25925        hasCustomDayCellContent(options) && y2(InnerContent, { elTag: "div", elClasses: ["fc-more-popover-misc"] }),
25926        props.children
25927      ));
25928    }
25929    queryHit(positionLeft, positionTop, elWidth, elHeight) {
25930      let { rootEl, props } = this;
25931      if (positionLeft >= 0 && positionLeft < elWidth && positionTop >= 0 && positionTop < elHeight) {
25932        return {
25933          dateProfile: props.dateProfile,
25934          dateSpan: Object.assign({ allDay: !props.forceTimed, range: {
25935            start: props.startDate,
25936            end: props.endDate
25937          } }, props.extraDateSpan),
25938          dayEl: rootEl,
25939          rect: {
25940            left: 0,
25941            top: 0,
25942            right: elWidth,
25943            bottom: elHeight
25944          },
25945          layer: 1
25946        };
25947      }
25948      return null;
25949    }
25950  };
25951  var MoreLinkContainer = class extends BaseComponent {
25952    constructor() {
25953      super(...arguments);
25954      this.state = {
25955        isPopoverOpen: false,
25956        popoverId: getUniqueDomId()
25957      };
25958      this.handleLinkEl = (linkEl) => {
25959        this.linkEl = linkEl;
25960        if (this.props.elRef) {
25961          setRef(this.props.elRef, linkEl);
25962        }
25963      };
25964      this.handleClick = (ev) => {
25965        let { props, context } = this;
25966        let { moreLinkClick } = context.options;
25967        let date = computeRange(props).start;
25968        function buildPublicSeg(seg) {
25969          let { def, instance, range } = seg.eventRange;
25970          return {
25971            event: new EventImpl(context, def, instance),
25972            start: context.dateEnv.toDate(range.start),
25973            end: context.dateEnv.toDate(range.end),
25974            isStart: seg.isStart,
25975            isEnd: seg.isEnd
25976          };
25977        }
25978        if (typeof moreLinkClick === "function") {
25979          moreLinkClick = moreLinkClick({
25980            date,
25981            allDay: Boolean(props.allDayDate),
25982            allSegs: props.allSegs.map(buildPublicSeg),
25983            hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
25984            jsEvent: ev,
25985            view: context.viewApi
25986          });
25987        }
25988        if (!moreLinkClick || moreLinkClick === "popover") {
25989          this.setState({ isPopoverOpen: true });
25990        } else if (typeof moreLinkClick === "string") {
25991          context.calendarApi.zoomTo(date, moreLinkClick);
25992        }
25993      };
25994      this.handlePopoverClose = () => {
25995        this.setState({ isPopoverOpen: false });
25996      };
25997    }
25998    render() {
25999      let { props, state } = this;
26000      return y2(ViewContextType.Consumer, null, (context) => {
26001        let { viewApi, options, calendarApi } = context;
26002        let { moreLinkText } = options;
26003        let { moreCnt } = props;
26004        let range = computeRange(props);
26005        let text = typeof moreLinkText === "function" ? moreLinkText.call(calendarApi, moreCnt) : `+${moreCnt} ${moreLinkText}`;
26006        let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
26007        let renderProps = {
26008          num: moreCnt,
26009          shortText: `+${moreCnt}`,
26010          text,
26011          view: viewApi
26012        };
26013        return y2(
26014          _2,
26015          null,
26016          Boolean(props.moreCnt) && y2(ContentContainer, { elTag: props.elTag || "a", elRef: this.handleLinkEl, elClasses: [
26017            ...props.elClasses || [],
26018            "fc-more-link"
26019          ], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, "aria-expanded": state.isPopoverOpen, "aria-controls": state.isPopoverOpen ? state.popoverId : "" }), renderProps, generatorName: "moreLinkContent", customGenerator: options.moreLinkContent, defaultGenerator: props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children),
26020          state.isPopoverOpen && y2(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ? props.alignmentElRef.current : this.linkEl, alignGridTop: props.alignGridTop, forceTimed: props.forceTimed, onClose: this.handlePopoverClose }, props.popoverContent())
26021        );
26022      });
26023    }
26024    componentDidMount() {
26025      this.updateParentEl();
26026    }
26027    componentDidUpdate() {
26028      this.updateParentEl();
26029    }
26030    updateParentEl() {
26031      if (this.linkEl) {
26032        this.parentEl = elementClosest(this.linkEl, ".fc-view-harness");
26033      }
26034    }
26035  };
26036  function renderMoreLinkInner(props) {
26037    return props.text;
26038  }
26039  function computeRange(props) {
26040    if (props.allDayDate) {
26041      return {
26042        start: props.allDayDate,
26043        end: addDays(props.allDayDate, 1)
26044      };
26045    }
26046    let { hiddenSegs } = props;
26047    return {
26048      start: computeEarliestSegStart(hiddenSegs),
26049      end: computeLatestSegEnd(hiddenSegs)
26050    };
26051  }
26052  function computeEarliestSegStart(segs) {
26053    return segs.reduce(pickEarliestStart).eventRange.range.start;
26054  }
26055  function pickEarliestStart(seg0, seg1) {
26056    return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
26057  }
26058  function computeLatestSegEnd(segs) {
26059    return segs.reduce(pickLatestEnd).eventRange.range.end;
26060  }
26061  function pickLatestEnd(seg0, seg1) {
26062    return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
26063  }
26064
26065  
vendor: 77,560 bytes, lines 26065-27992
26065// node_modules/@fullcalendar/core/index.js
26066  var globalLocales = [];
26067  var MINIMAL_RAW_EN_LOCALE = {
26068    code: "en",
26069    week: {
26070      dow: 0,
26071      doy: 4
26072    },
26073    direction: "ltr",
26074    buttonText: {
26075      prev: "prev",
26076      next: "next",
26077      prevYear: "prev year",
26078      nextYear: "next year",
26079      year: "year",
26080      today: "today",
26081      month: "month",
26082      week: "week",
26083      day: "day",
26084      list: "list"
26085    },
26086    weekText: "W",
26087    weekTextLong: "Week",
26088    closeHint: "Close",
26089    timeHint: "Time",
26090    eventHint: "Event",
26091    allDayText: "all-day",
26092    moreLinkText: "more",
26093    noEventsText: "No events to display"
26094  };
26095  var RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
26096    buttonHints: {
26097      prev: "Previous $0",
26098      next: "Next $0",
26099      today(buttonText, unit) {
26100        return unit === "day" ? "Today" : `This ${buttonText}`;
26101      }
26102    },
26103    viewHint: "$0 view",
26104    navLinkHint: "Go to $0",
26105    moreLinkHint(eventCnt) {
26106      return `Show ${eventCnt} more event${eventCnt === 1 ? "" : "s"}`;
26107    }
26108  });
26109  function organizeRawLocales(explicitRawLocales) {
26110    let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : "en";
26111    let allRawLocales = globalLocales.concat(explicitRawLocales);
26112    let rawLocaleMap = {
26113      en: RAW_EN_LOCALE
26114    };
26115    for (let rawLocale of allRawLocales) {
26116      rawLocaleMap[rawLocale.code] = rawLocale;
26117    }
26118    return {
26119      map: rawLocaleMap,
26120      defaultCode
26121    };
26122  }
26123  function buildLocale(inputSingular, available) {
26124    if (typeof inputSingular === "object" && !Array.isArray(inputSingular)) {
26125      return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
26126    }
26127    return queryLocale(inputSingular, available);
26128  }
26129  function queryLocale(codeArg, available) {
26130    let codes = [].concat(codeArg || []);
26131    let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
26132    return parseLocale(codeArg, codes, raw);
26133  }
26134  function queryRawLocale(codes, available) {
26135    for (let i4 = 0; i4 < codes.length; i4 += 1) {
26136      let parts = codes[i4].toLocaleLowerCase().split("-");
26137      for (let j5 = parts.length; j5 > 0; j5 -= 1) {
26138        let simpleId = parts.slice(0, j5).join("-");
26139        if (available[simpleId]) {
26140          return available[simpleId];
26141        }
26142      }
26143    }
26144    return null;
26145  }
26146  function parseLocale(codeArg, codes, raw) {
26147    let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ["buttonText"]);
26148    delete merged.code;
26149    let { week } = merged;
26150    delete merged.week;
26151    return {
26152      codeArg,
26153      codes,
26154      week,
26155      simpleNumberFormat: new Intl.NumberFormat(codeArg),
26156      options: merged
26157    };
26158  }
26159  function createPlugin(input) {
26160    return {
26161      id: guid(),
26162      name: input.name,
26163      premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : void 0,
26164      deps: input.deps || [],
26165      reducers: input.reducers || [],
26166      isLoadingFuncs: input.isLoadingFuncs || [],
26167      contextInit: [].concat(input.contextInit || []),
26168      eventRefiners: input.eventRefiners || {},
26169      eventDefMemberAdders: input.eventDefMemberAdders || [],
26170      eventSourceRefiners: input.eventSourceRefiners || {},
26171      isDraggableTransformers: input.isDraggableTransformers || [],
26172      eventDragMutationMassagers: input.eventDragMutationMassagers || [],
26173      eventDefMutationAppliers: input.eventDefMutationAppliers || [],
26174      dateSelectionTransformers: input.dateSelectionTransformers || [],
26175      datePointTransforms: input.datePointTransforms || [],
26176      dateSpanTransforms: input.dateSpanTransforms || [],
26177      views: input.views || {},
26178      viewPropsTransformers: input.viewPropsTransformers || [],
26179      isPropsValid: input.isPropsValid || null,
26180      externalDefTransforms: input.externalDefTransforms || [],
26181      viewContainerAppends: input.viewContainerAppends || [],
26182      eventDropTransformers: input.eventDropTransformers || [],
26183      componentInteractions: input.componentInteractions || [],
26184      calendarInteractions: input.calendarInteractions || [],
26185      themeClasses: input.themeClasses || {},
26186      eventSourceDefs: input.eventSourceDefs || [],
26187      cmdFormatter: input.cmdFormatter,
26188      recurringTypes: input.recurringTypes || [],
26189      namedTimeZonedImpl: input.namedTimeZonedImpl,
26190      initialView: input.initialView || "",
26191      elementDraggingImpl: input.elementDraggingImpl,
26192      optionChangeHandlers: input.optionChangeHandlers || {},
26193      scrollGridImpl: input.scrollGridImpl || null,
26194      listenerRefiners: input.listenerRefiners || {},
26195      optionRefiners: input.optionRefiners || {},
26196      propSetHandlers: input.propSetHandlers || {}
26197    };
26198  }
26199  function buildPluginHooks(pluginDefs, globalDefs) {
26200    let currentPluginIds = {};
26201    let hooks = {
26202      premiumReleaseDate: void 0,
26203      reducers: [],
26204      isLoadingFuncs: [],
26205      contextInit: [],
26206      eventRefiners: {},
26207      eventDefMemberAdders: [],
26208      eventSourceRefiners: {},
26209      isDraggableTransformers: [],
26210      eventDragMutationMassagers: [],
26211      eventDefMutationAppliers: [],
26212      dateSelectionTransformers: [],
26213      datePointTransforms: [],
26214      dateSpanTransforms: [],
26215      views: {},
26216      viewPropsTransformers: [],
26217      isPropsValid: null,
26218      externalDefTransforms: [],
26219      viewContainerAppends: [],
26220      eventDropTransformers: [],
26221      componentInteractions: [],
26222      calendarInteractions: [],
26223      themeClasses: {},
26224      eventSourceDefs: [],
26225      cmdFormatter: null,
26226      recurringTypes: [],
26227      namedTimeZonedImpl: null,
26228      initialView: "",
26229      elementDraggingImpl: null,
26230      optionChangeHandlers: {},
26231      scrollGridImpl: null,
26232      listenerRefiners: {},
26233      optionRefiners: {},
26234      propSetHandlers: {}
26235    };
26236    function addDefs(defs) {
26237      for (let def of defs) {
26238        const pluginName = def.name;
26239        const currentId = currentPluginIds[pluginName];
26240        if (currentId === void 0) {
26241          currentPluginIds[pluginName] = def.id;
26242          addDefs(def.deps);
26243          hooks = combineHooks(hooks, def);
26244        } else if (currentId !== def.id) {
26245          console.warn(`Duplicate plugin '${pluginName}'`);
26246        }
26247      }
26248    }
26249    if (pluginDefs) {
26250      addDefs(pluginDefs);
26251    }
26252    addDefs(globalDefs);
26253    return hooks;
26254  }
26255  function buildBuildPluginHooks() {
26256    let currentOverrideDefs = [];
26257    let currentGlobalDefs = [];
26258    let currentHooks;
26259    return (overrideDefs, globalDefs) => {
26260      if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
26261        currentHooks = buildPluginHooks(overrideDefs, globalDefs);
26262      }
26263      currentOverrideDefs = overrideDefs;
26264      currentGlobalDefs = globalDefs;
26265      return currentHooks;
26266    };
26267  }
26268  function combineHooks(hooks0, hooks1) {
26269    return {
26270      premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),
26271      reducers: hooks0.reducers.concat(hooks1.reducers),
26272      isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
26273      contextInit: hooks0.contextInit.concat(hooks1.contextInit),
26274      eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
26275      eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
26276      eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
26277      isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
26278      eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
26279      eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
26280      dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
26281      datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
26282      dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
26283      views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),
26284      viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
26285      isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
26286      externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
26287      viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
26288      eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
26289      calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
26290      componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
26291      themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),
26292      eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
26293      cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
26294      recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
26295      namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
26296      initialView: hooks0.initialView || hooks1.initialView,
26297      elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
26298      optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
26299      scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
26300      listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
26301      optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
26302      propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers)
26303    };
26304  }
26305  function compareOptionalDates(date0, date1) {
26306    if (date0 === void 0) {
26307      return date1;
26308    }
26309    if (date1 === void 0) {
26310      return date0;
26311    }
26312    return new Date(Math.max(date0.valueOf(), date1.valueOf()));
26313  }
26314  var StandardTheme = class extends Theme {
26315  };
26316  StandardTheme.prototype.classes = {
26317    root: "fc-theme-standard",
26318    tableCellShaded: "fc-cell-shaded",
26319    buttonGroup: "fc-button-group",
26320    button: "fc-button fc-button-primary",
26321    buttonActive: "fc-button-active"
26322  };
26323  StandardTheme.prototype.baseIconClass = "fc-icon";
26324  StandardTheme.prototype.iconClasses = {
26325    close: "fc-icon-x",
26326    prev: "fc-icon-chevron-left",
26327    next: "fc-icon-chevron-right",
26328    prevYear: "fc-icon-chevrons-left",
26329    nextYear: "fc-icon-chevrons-right"
26330  };
26331  StandardTheme.prototype.rtlIconClasses = {
26332    prev: "fc-icon-chevron-right",
26333    next: "fc-icon-chevron-left",
26334    prevYear: "fc-icon-chevrons-right",
26335    nextYear: "fc-icon-chevrons-left"
26336  };
26337  StandardTheme.prototype.iconOverrideOption = "buttonIcons";
26338  StandardTheme.prototype.iconOverrideCustomButtonOption = "icon";
26339  StandardTheme.prototype.iconOverridePrefix = "fc-icon-";
26340  function compileViewDefs(defaultConfigs, overrideConfigs) {
26341    let hash3 = {};
26342    let viewType;
26343    for (viewType in defaultConfigs) {
26344      ensureViewDef(viewType, hash3, defaultConfigs, overrideConfigs);
26345    }
26346    for (viewType in overrideConfigs) {
26347      ensureViewDef(viewType, hash3, defaultConfigs, overrideConfigs);
26348    }
26349    return hash3;
26350  }
26351  function ensureViewDef(viewType, hash3, defaultConfigs, overrideConfigs) {
26352    if (hash3[viewType]) {
26353      return hash3[viewType];
26354    }
26355    let viewDef = buildViewDef(viewType, hash3, defaultConfigs, overrideConfigs);
26356    if (viewDef) {
26357      hash3[viewType] = viewDef;
26358    }
26359    return viewDef;
26360  }
26361  function buildViewDef(viewType, hash3, defaultConfigs, overrideConfigs) {
26362    let defaultConfig = defaultConfigs[viewType];
26363    let overrideConfig = overrideConfigs[viewType];
26364    let queryProp = (name) => defaultConfig && defaultConfig[name] !== null ? defaultConfig[name] : overrideConfig && overrideConfig[name] !== null ? overrideConfig[name] : null;
26365    let theComponent = queryProp("component");
26366    let superType = queryProp("superType");
26367    let superDef = null;
26368    if (superType) {
26369      if (superType === viewType) {
26370        throw new Error("Can't have a custom view type that references itself");
26371      }
26372      superDef = ensureViewDef(superType, hash3, defaultConfigs, overrideConfigs);
26373    }
26374    if (!theComponent && superDef) {
26375      theComponent = superDef.component;
26376    }
26377    if (!theComponent) {
26378      return null;
26379    }
26380    return {
26381      type: viewType,
26382      component: theComponent,
26383      defaults: Object.assign(Object.assign({}, superDef ? superDef.defaults : {}), defaultConfig ? defaultConfig.rawOptions : {}),
26384      overrides: Object.assign(Object.assign({}, superDef ? superDef.overrides : {}), overrideConfig ? overrideConfig.rawOptions : {})
26385    };
26386  }
26387  function parseViewConfigs(inputs) {
26388    return mapHash(inputs, parseViewConfig);
26389  }
26390  function parseViewConfig(input) {
26391    let rawOptions = typeof input === "function" ? { component: input } : input;
26392    let { component } = rawOptions;
26393    if (rawOptions.content) {
26394      component = createViewHookComponent(rawOptions);
26395    } else if (component && !(component.prototype instanceof BaseComponent)) {
26396      component = createViewHookComponent(Object.assign(Object.assign({}, rawOptions), { content: component }));
26397    }
26398    return {
26399      superType: rawOptions.type,
26400      component,
26401      rawOptions
26402    };
26403  }
26404  function createViewHookComponent(options) {
26405    return (viewProps) => y2(ViewContextType.Consumer, null, (context) => y2(ContentContainer, { elTag: "div", elClasses: buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: void 0, customGenerator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }));
26406  }
26407  function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
26408    let defaultConfigs = parseViewConfigs(defaultInputs);
26409    let overrideConfigs = parseViewConfigs(optionOverrides.views);
26410    let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
26411    return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));
26412  }
26413  function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
26414    let durationInput = viewDef.overrides.duration || viewDef.defaults.duration || dynamicOptionOverrides.duration || optionOverrides.duration;
26415    let duration = null;
26416    let durationUnit = "";
26417    let singleUnit = "";
26418    let singleUnitOverrides = {};
26419    if (durationInput) {
26420      duration = createDurationCached(durationInput);
26421      if (duration) {
26422        let denom = greatestDurationDenominator(duration);
26423        durationUnit = denom.unit;
26424        if (denom.value === 1) {
26425          singleUnit = durationUnit;
26426          singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};
26427        }
26428      }
26429    }
26430    let queryButtonText = (optionsSubset) => {
26431      let buttonTextMap = optionsSubset.buttonText || {};
26432      let buttonTextKey = viewDef.defaults.buttonTextKey;
26433      if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
26434        return buttonTextMap[buttonTextKey];
26435      }
26436      if (buttonTextMap[viewDef.type] != null) {
26437        return buttonTextMap[viewDef.type];
26438      }
26439      if (buttonTextMap[singleUnit] != null) {
26440        return buttonTextMap[singleUnit];
26441      }
26442      return null;
26443    };
26444    let queryButtonTitle = (optionsSubset) => {
26445      let buttonHints = optionsSubset.buttonHints || {};
26446      let buttonKey = viewDef.defaults.buttonTextKey;
26447      if (buttonKey != null && buttonHints[buttonKey] != null) {
26448        return buttonHints[buttonKey];
26449      }
26450      if (buttonHints[viewDef.type] != null) {
26451        return buttonHints[viewDef.type];
26452      }
26453      if (buttonHints[singleUnit] != null) {
26454        return buttonHints[singleUnit];
26455      }
26456      return null;
26457    };
26458    return {
26459      type: viewDef.type,
26460      component: viewDef.component,
26461      duration,
26462      durationUnit,
26463      singleUnit,
26464      optionDefaults: viewDef.defaults,
26465      optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),
26466      buttonTextOverride: queryButtonText(dynamicOptionOverrides) || queryButtonText(optionOverrides) || viewDef.overrides.buttonText,
26467      buttonTextDefault: queryButtonText(localeDefaults) || viewDef.defaults.buttonText || queryButtonText(BASE_OPTION_DEFAULTS) || viewDef.type,
26468      buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) || queryButtonTitle(optionOverrides) || viewDef.overrides.buttonHint,
26469      buttonTitleDefault: queryButtonTitle(localeDefaults) || viewDef.defaults.buttonHint || queryButtonTitle(BASE_OPTION_DEFAULTS)
26470    };
26471  }
26472  var durationInputMap = {};
26473  function createDurationCached(durationInput) {
26474    let json = JSON.stringify(durationInput);
26475    let res = durationInputMap[json];
26476    if (res === void 0) {
26477      res = createDuration(durationInput);
26478      durationInputMap[json] = res;
26479    }
26480    return res;
26481  }
26482  function reduceViewType(viewType, action) {
26483    switch (action.type) {
26484      case "CHANGE_VIEW_TYPE":
26485        viewType = action.viewType;
26486    }
26487    return viewType;
26488  }
26489  function reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {
26490    switch (action.type) {
26491      case "SET_OPTION":
26492        return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });
26493      default:
26494        return dynamicOptionOverrides;
26495    }
26496  }
26497  function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {
26498    let dp;
26499    switch (action.type) {
26500      case "CHANGE_VIEW_TYPE":
26501        return dateProfileGenerator.build(action.dateMarker || currentDate);
26502      case "CHANGE_DATE":
26503        return dateProfileGenerator.build(action.dateMarker);
26504      case "PREV":
26505        dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
26506        if (dp.isValid) {
26507          return dp;
26508        }
26509        break;
26510      case "NEXT":
26511        dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);
26512        if (dp.isValid) {
26513          return dp;
26514        }
26515        break;
26516    }
26517    return currentDateProfile;
26518  }
26519  function initEventSources(calendarOptions, dateProfile, context) {
26520    let activeRange = dateProfile ? dateProfile.activeRange : null;
26521    return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
26522  }
26523  function reduceEventSources(eventSources, action, dateProfile, context) {
26524    let activeRange = dateProfile ? dateProfile.activeRange : null;
26525    switch (action.type) {
26526      case "ADD_EVENT_SOURCES":
26527        return addSources(eventSources, action.sources, activeRange, context);
26528      case "REMOVE_EVENT_SOURCE":
26529        return removeSource(eventSources, action.sourceId);
26530      case "PREV":
26531      case "NEXT":
26532      case "CHANGE_DATE":
26533      case "CHANGE_VIEW_TYPE":
26534        if (dateProfile) {
26535          return fetchDirtySources(eventSources, activeRange, context);
26536        }
26537        return eventSources;
26538      case "FETCH_EVENT_SOURCES":
26539        return fetchSourcesByIds(eventSources, action.sourceIds ? arrayToHash(action.sourceIds) : excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
26540      case "RECEIVE_EVENTS":
26541      case "RECEIVE_EVENT_ERROR":
26542        return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
26543      case "REMOVE_ALL_EVENT_SOURCES":
26544        return {};
26545      default:
26546        return eventSources;
26547    }
26548  }
26549  function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
26550    let activeRange = dateProfile ? dateProfile.activeRange : null;
26551    return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
26552  }
26553  function computeEventSourcesLoading(eventSources) {
26554    for (let sourceId in eventSources) {
26555      if (eventSources[sourceId].isFetching) {
26556        return true;
26557      }
26558    }
26559    return false;
26560  }
26561  function addSources(eventSourceHash, sources, fetchRange, context) {
26562    let hash3 = {};
26563    for (let source of sources) {
26564      hash3[source.sourceId] = source;
26565    }
26566    if (fetchRange) {
26567      hash3 = fetchDirtySources(hash3, fetchRange, context);
26568    }
26569    return Object.assign(Object.assign({}, eventSourceHash), hash3);
26570  }
26571  function removeSource(eventSourceHash, sourceId) {
26572    return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
26573  }
26574  function fetchDirtySources(sourceHash, fetchRange, context) {
26575    return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
26576  }
26577  function isSourceDirty(eventSource, fetchRange, context) {
26578    if (!doesSourceNeedRange(eventSource, context)) {
26579      return !eventSource.latestFetchId;
26580    }
26581    return !context.options.lazyFetching || !eventSource.fetchRange || eventSource.isFetching || fetchRange.start < eventSource.fetchRange.start || fetchRange.end > eventSource.fetchRange.end;
26582  }
26583  function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
26584    let nextSources = {};
26585    for (let sourceId in prevSources) {
26586      let source = prevSources[sourceId];
26587      if (sourceIdHash[sourceId]) {
26588        nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
26589      } else {
26590        nextSources[sourceId] = source;
26591      }
26592    }
26593    return nextSources;
26594  }
26595  function fetchSource(eventSource, fetchRange, isRefetch, context) {
26596    let { options, calendarApi } = context;
26597    let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
26598    let fetchId = guid();
26599    sourceDef.fetch({
26600      eventSource,
26601      range: fetchRange,
26602      isRefetch,
26603      context
26604    }, (res) => {
26605      let { rawEvents } = res;
26606      if (options.eventSourceSuccess) {
26607        rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;
26608      }
26609      if (eventSource.success) {
26610        rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;
26611      }
26612      context.dispatch({
26613        type: "RECEIVE_EVENTS",
26614        sourceId: eventSource.sourceId,
26615        fetchId,
26616        fetchRange,
26617        rawEvents
26618      });
26619    }, (error2) => {
26620      let errorHandled = false;
26621      if (options.eventSourceFailure) {
26622        options.eventSourceFailure.call(calendarApi, error2);
26623        errorHandled = true;
26624      }
26625      if (eventSource.failure) {
26626        eventSource.failure(error2);
26627        errorHandled = true;
26628      }
26629      if (!errorHandled) {
26630        console.warn(error2.message, error2);
26631      }
26632      context.dispatch({
26633        type: "RECEIVE_EVENT_ERROR",
26634        sourceId: eventSource.sourceId,
26635        fetchId,
26636        fetchRange,
26637        error: error2
26638      });
26639    });
26640    return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
26641  }
26642  function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
26643    let eventSource = sourceHash[sourceId];
26644    if (eventSource && fetchId === eventSource.latestFetchId) {
26645      return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });
26646    }
26647    return sourceHash;
26648  }
26649  function excludeStaticSources(eventSources, context) {
26650    return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
26651  }
26652  function parseInitialSources(rawOptions, context) {
26653    let refiners = buildEventSourceRefiners(context);
26654    let rawSources = [].concat(rawOptions.eventSources || []);
26655    let sources = [];
26656    if (rawOptions.initialEvents) {
26657      rawSources.unshift(rawOptions.initialEvents);
26658    }
26659    if (rawOptions.events) {
26660      rawSources.unshift(rawOptions.events);
26661    }
26662    for (let rawSource of rawSources) {
26663      let source = parseEventSource(rawSource, context, refiners);
26664      if (source) {
26665        sources.push(source);
26666      }
26667    }
26668    return sources;
26669  }
26670  function doesSourceNeedRange(eventSource, context) {
26671    let defs = context.pluginHooks.eventSourceDefs;
26672    return !defs[eventSource.sourceDefId].ignoreRange;
26673  }
26674  function reduceDateSelection(currentSelection, action) {
26675    switch (action.type) {
26676      case "UNSELECT_DATES":
26677        return null;
26678      case "SELECT_DATES":
26679        return action.selection;
26680      default:
26681        return currentSelection;
26682    }
26683  }
26684  function reduceSelectedEvent(currentInstanceId, action) {
26685    switch (action.type) {
26686      case "UNSELECT_EVENT":
26687        return "";
26688      case "SELECT_EVENT":
26689        return action.eventInstanceId;
26690      default:
26691        return currentInstanceId;
26692    }
26693  }
26694  function reduceEventDrag(currentDrag, action) {
26695    let newDrag;
26696    switch (action.type) {
26697      case "UNSET_EVENT_DRAG":
26698        return null;
26699      case "SET_EVENT_DRAG":
26700        newDrag = action.state;
26701        return {
26702          affectedEvents: newDrag.affectedEvents,
26703          mutatedEvents: newDrag.mutatedEvents,
26704          isEvent: newDrag.isEvent
26705        };
26706      default:
26707        return currentDrag;
26708    }
26709  }
26710  function reduceEventResize(currentResize, action) {
26711    let newResize;
26712    switch (action.type) {
26713      case "UNSET_EVENT_RESIZE":
26714        return null;
26715      case "SET_EVENT_RESIZE":
26716        newResize = action.state;
26717        return {
26718          affectedEvents: newResize.affectedEvents,
26719          mutatedEvents: newResize.mutatedEvents,
26720          isEvent: newResize.isEvent
26721        };
26722      default:
26723        return currentResize;
26724    }
26725  }
26726  function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
26727    let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
26728    let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
26729    return { header, footer };
26730  }
26731  function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
26732    let sectionWidgets = {};
26733    let viewsWithButtons = [];
26734    let hasTitle = false;
26735    for (let sectionName in sectionStrHash) {
26736      let sectionStr = sectionStrHash[sectionName];
26737      let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
26738      sectionWidgets[sectionName] = sectionRes.widgets;
26739      viewsWithButtons.push(...sectionRes.viewsWithButtons);
26740      hasTitle = hasTitle || sectionRes.hasTitle;
26741    }
26742    return { sectionWidgets, viewsWithButtons, hasTitle };
26743  }
26744  function parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
26745    let isRtl = calendarOptions.direction === "rtl";
26746    let calendarCustomButtons = calendarOptions.customButtons || {};
26747    let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
26748    let calendarButtonText = calendarOptions.buttonText || {};
26749    let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};
26750    let calendarButtonHints = calendarOptions.buttonHints || {};
26751    let sectionSubstrs = sectionStr ? sectionStr.split(" ") : [];
26752    let viewsWithButtons = [];
26753    let hasTitle = false;
26754    let widgets = sectionSubstrs.map((buttonGroupStr) => buttonGroupStr.split(",").map((buttonName) => {
26755      if (buttonName === "title") {
26756        hasTitle = true;
26757        return { buttonName };
26758      }
26759      let customButtonProps;
26760      let viewSpec;
26761      let buttonClick;
26762      let buttonIcon;
26763      let buttonText;
26764      let buttonHint;
26765      if (customButtonProps = calendarCustomButtons[buttonName]) {
26766        buttonClick = (ev) => {
26767          if (customButtonProps.click) {
26768            customButtonProps.click.call(ev.target, ev, ev.target);
26769          }
26770        };
26771        (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = customButtonProps.text);
26772        buttonHint = customButtonProps.hint || customButtonProps.text;
26773      } else if (viewSpec = viewSpecs[buttonName]) {
26774        viewsWithButtons.push(buttonName);
26775        buttonClick = () => {
26776          calendarApi.changeView(buttonName);
26777        };
26778        (buttonText = viewSpec.buttonTextOverride) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = viewSpec.buttonTextDefault);
26779        let textFallback = viewSpec.buttonTextOverride || viewSpec.buttonTextDefault;
26780        buttonHint = formatWithOrdinals(
26781          viewSpec.buttonTitleOverride || viewSpec.buttonTitleDefault || calendarOptions.viewHint,
26782          [textFallback, buttonName],
26783          textFallback
26784        );
26785      } else if (calendarApi[buttonName]) {
26786        buttonClick = () => {
26787          calendarApi[buttonName]();
26788        };
26789        (buttonText = calendarButtonTextOverrides[buttonName]) || (buttonIcon = theme.getIconClass(buttonName, isRtl)) || (buttonText = calendarButtonText[buttonName]);
26790        if (buttonName === "prevYear" || buttonName === "nextYear") {
26791          let prevOrNext = buttonName === "prevYear" ? "prev" : "next";
26792          buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] || calendarButtonHints[prevOrNext], [
26793            calendarButtonText.year || "year",
26794            "year"
26795          ], calendarButtonText[buttonName]);
26796        } else {
26797          buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] || calendarButtonHints[buttonName], [
26798            calendarButtonText[navUnit] || navUnit,
26799            navUnit
26800          ], calendarButtonText[buttonName]);
26801        }
26802      }
26803      return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };
26804    }));
26805    return { widgets, viewsWithButtons, hasTitle };
26806  }
26807  var ViewImpl = class {
26808    constructor(type, getCurrentData, dateEnv) {
26809      this.type = type;
26810      this.getCurrentData = getCurrentData;
26811      this.dateEnv = dateEnv;
26812    }
26813    get calendar() {
26814      return this.getCurrentData().calendarApi;
26815    }
26816    get title() {
26817      return this.getCurrentData().viewTitle;
26818    }
26819    get activeStart() {
26820      return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
26821    }
26822    get activeEnd() {
26823      return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
26824    }
26825    get currentStart() {
26826      return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
26827    }
26828    get currentEnd() {
26829      return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
26830    }
26831    getOption(name) {
26832      return this.getCurrentData().options[name];
26833    }
26834  };
26835  var eventSourceDef$2 = {
26836    ignoreRange: true,
26837    parseMeta(refined) {
26838      if (Array.isArray(refined.events)) {
26839        return refined.events;
26840      }
26841      return null;
26842    },
26843    fetch(arg, successCallback) {
26844      successCallback({
26845        rawEvents: arg.eventSource.meta
26846      });
26847    }
26848  };
26849  var arrayEventSourcePlugin = createPlugin({
26850    name: "array-event-source",
26851    eventSourceDefs: [eventSourceDef$2]
26852  });
26853  var eventSourceDef$1 = {
26854    parseMeta(refined) {
26855      if (typeof refined.events === "function") {
26856        return refined.events;
26857      }
26858      return null;
26859    },
26860    fetch(arg, successCallback, errorCallback) {
26861      const { dateEnv } = arg.context;
26862      const func = arg.eventSource.meta;
26863      unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
26864    }
26865  };
26866  var funcEventSourcePlugin = createPlugin({
26867    name: "func-event-source",
26868    eventSourceDefs: [eventSourceDef$1]
26869  });
26870  var JSON_FEED_EVENT_SOURCE_REFINERS = {
26871    method: String,
26872    extraParams: identity,
26873    startParam: String,
26874    endParam: String,
26875    timeZoneParam: String
26876  };
26877  var eventSourceDef = {
26878    parseMeta(refined) {
26879      if (refined.url && (refined.format === "json" || !refined.format)) {
26880        return {
26881          url: refined.url,
26882          format: "json",
26883          method: (refined.method || "GET").toUpperCase(),
26884          extraParams: refined.extraParams,
26885          startParam: refined.startParam,
26886          endParam: refined.endParam,
26887          timeZoneParam: refined.timeZoneParam
26888        };
26889      }
26890      return null;
26891    },
26892    fetch(arg, successCallback, errorCallback) {
26893      const { meta } = arg.eventSource;
26894      const requestParams = buildRequestParams(meta, arg.range, arg.context);
26895      requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
26896        successCallback({ rawEvents, response });
26897      }, errorCallback);
26898    }
26899  };
26900  var jsonFeedEventSourcePlugin = createPlugin({
26901    name: "json-event-source",
26902    eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
26903    eventSourceDefs: [eventSourceDef]
26904  });
26905  function buildRequestParams(meta, range, context) {
26906    let { dateEnv, options } = context;
26907    let startParam;
26908    let endParam;
26909    let timeZoneParam;
26910    let customRequestParams;
26911    let params = {};
26912    startParam = meta.startParam;
26913    if (startParam == null) {
26914      startParam = options.startParam;
26915    }
26916    endParam = meta.endParam;
26917    if (endParam == null) {
26918      endParam = options.endParam;
26919    }
26920    timeZoneParam = meta.timeZoneParam;
26921    if (timeZoneParam == null) {
26922      timeZoneParam = options.timeZoneParam;
26923    }
26924    if (typeof meta.extraParams === "function") {
26925      customRequestParams = meta.extraParams();
26926    } else {
26927      customRequestParams = meta.extraParams || {};
26928    }
26929    Object.assign(params, customRequestParams);
26930    params[startParam] = dateEnv.formatIso(range.start);
26931    params[endParam] = dateEnv.formatIso(range.end);
26932    if (dateEnv.timeZone !== "local") {
26933      params[timeZoneParam] = dateEnv.timeZone;
26934    }
26935    return params;
26936  }
26937  var SIMPLE_RECURRING_REFINERS = {
26938    daysOfWeek: identity,
26939    startTime: createDuration,
26940    endTime: createDuration,
26941    duration: createDuration,
26942    startRecur: identity,
26943    endRecur: identity
26944  };
26945  var recurring = {
26946    parse(refined, dateEnv) {
26947      if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
26948        let recurringData = {
26949          daysOfWeek: refined.daysOfWeek || null,
26950          startTime: refined.startTime || null,
26951          endTime: refined.endTime || null,
26952          startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
26953          endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null
26954        };
26955        let duration;
26956        if (refined.duration) {
26957          duration = refined.duration;
26958        }
26959        if (!duration && refined.startTime && refined.endTime) {
26960          duration = subtractDurations(refined.endTime, refined.startTime);
26961        }
26962        return {
26963          allDayGuess: Boolean(!refined.startTime && !refined.endTime),
26964          duration,
26965          typeData: recurringData
26966        };
26967      }
26968      return null;
26969    },
26970    expand(typeData, framingRange, dateEnv) {
26971      let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
26972      if (clippedFramingRange) {
26973        return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
26974      }
26975      return [];
26976    }
26977  };
26978  var simpleRecurringEventsPlugin = createPlugin({
26979    name: "simple-recurring-event",
26980    recurringTypes: [recurring],
26981    eventRefiners: SIMPLE_RECURRING_REFINERS
26982  });
26983  function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
26984    let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
26985    let dayMarker = startOfDay(framingRange.start);
26986    let endMarker = framingRange.end;
26987    let instanceStarts = [];
26988    while (dayMarker < endMarker) {
26989      let instanceStart;
26990      if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
26991        if (startTime) {
26992          instanceStart = dateEnv.add(dayMarker, startTime);
26993        } else {
26994          instanceStart = dayMarker;
26995        }
26996        instanceStarts.push(instanceStart);
26997      }
26998      dayMarker = addDays(dayMarker, 1);
26999    }
27000    return instanceStarts;
27001  }
27002  var changeHandlerPlugin = createPlugin({
27003    name: "change-handler",
27004    optionChangeHandlers: {
27005      events(events2, context) {
27006        handleEventSources([events2], context);
27007      },
27008      eventSources: handleEventSources
27009    }
27010  });
27011  function handleEventSources(inputs, context) {
27012    let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
27013    if (unfoundSources.length === 1 && inputs.length === 1 && Array.isArray(unfoundSources[0]._raw) && Array.isArray(inputs[0])) {
27014      context.dispatch({
27015        type: "RESET_RAW_EVENTS",
27016        sourceId: unfoundSources[0].sourceId,
27017        rawEvents: inputs[0]
27018      });
27019      return;
27020    }
27021    let newInputs = [];
27022    for (let input of inputs) {
27023      let inputFound = false;
27024      for (let i4 = 0; i4 < unfoundSources.length; i4 += 1) {
27025        if (unfoundSources[i4]._raw === input) {
27026          unfoundSources.splice(i4, 1);
27027          inputFound = true;
27028          break;
27029        }
27030      }
27031      if (!inputFound) {
27032        newInputs.push(input);
27033      }
27034    }
27035    for (let unfoundSource of unfoundSources) {
27036      context.dispatch({
27037        type: "REMOVE_EVENT_SOURCE",
27038        sourceId: unfoundSource.sourceId
27039      });
27040    }
27041    for (let newInput of newInputs) {
27042      context.calendarApi.addEventSource(newInput);
27043    }
27044  }
27045  function handleDateProfile(dateProfile, context) {
27046    context.emitter.trigger("datesSet", Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
27047  }
27048  function handleEventStore(eventStore, context) {
27049    let { emitter } = context;
27050    if (emitter.hasHandlers("eventsSet")) {
27051      emitter.trigger("eventsSet", buildEventApis(eventStore, context));
27052    }
27053  }
27054  var globalPlugins = [
27055    arrayEventSourcePlugin,
27056    funcEventSourcePlugin,
27057    jsonFeedEventSourcePlugin,
27058    simpleRecurringEventsPlugin,
27059    changeHandlerPlugin,
27060    createPlugin({
27061      name: "misc",
27062      isLoadingFuncs: [
27063        (state) => computeEventSourcesLoading(state.eventSources)
27064      ],
27065      propSetHandlers: {
27066        dateProfile: handleDateProfile,
27067        eventStore: handleEventStore
27068      }
27069    })
27070  ];
27071  var TaskRunner = class {
27072    constructor(runTaskOption, drainedOption) {
27073      this.runTaskOption = runTaskOption;
27074      this.drainedOption = drainedOption;
27075      this.queue = [];
27076      this.delayedRunner = new DelayedRunner(this.drain.bind(this));
27077    }
27078    request(task, delay) {
27079      this.queue.push(task);
27080      this.delayedRunner.request(delay);
27081    }
27082    pause(scope) {
27083      this.delayedRunner.pause(scope);
27084    }
27085    resume(scope, force) {
27086      this.delayedRunner.resume(scope, force);
27087    }
27088    drain() {
27089      let { queue } = this;
27090      while (queue.length) {
27091        let completedTasks = [];
27092        let task;
27093        while (task = queue.shift()) {
27094          this.runTask(task);
27095          completedTasks.push(task);
27096        }
27097        this.drained(completedTasks);
27098      }
27099    }
27100    runTask(task) {
27101      if (this.runTaskOption) {
27102        this.runTaskOption(task);
27103      }
27104    }
27105    drained(completedTasks) {
27106      if (this.drainedOption) {
27107        this.drainedOption(completedTasks);
27108      }
27109    }
27110  };
27111  function buildTitle(dateProfile, viewOptions, dateEnv) {
27112    let range;
27113    if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
27114      range = dateProfile.currentRange;
27115    } else {
27116      range = dateProfile.activeRange;
27117    }
27118    return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
27119      isEndExclusive: dateProfile.isRangeAllDay,
27120      defaultSeparator: viewOptions.titleRangeSeparator
27121    });
27122  }
27123  function buildTitleFormat(dateProfile) {
27124    let { currentRangeUnit } = dateProfile;
27125    if (currentRangeUnit === "year") {
27126      return { year: "numeric" };
27127    }
27128    if (currentRangeUnit === "month") {
27129      return { year: "numeric", month: "long" };
27130    }
27131    let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
27132    if (days !== null && days > 1) {
27133      return { year: "numeric", month: "short", day: "numeric" };
27134    }
27135    return { year: "numeric", month: "long", day: "numeric" };
27136  }
27137  var CalendarDataManager = class {
27138    constructor(props) {
27139      this.computeCurrentViewData = memoize(this._computeCurrentViewData);
27140      this.organizeRawLocales = memoize(organizeRawLocales);
27141      this.buildLocale = memoize(buildLocale);
27142      this.buildPluginHooks = buildBuildPluginHooks();
27143      this.buildDateEnv = memoize(buildDateEnv$1);
27144      this.buildTheme = memoize(buildTheme);
27145      this.parseToolbars = memoize(parseToolbars);
27146      this.buildViewSpecs = memoize(buildViewSpecs);
27147      this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
27148      this.buildViewApi = memoize(buildViewApi);
27149      this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
27150      this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
27151      this.buildEventUiBases = memoize(buildEventUiBases);
27152      this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
27153      this.buildTitle = memoize(buildTitle);
27154      this.emitter = new Emitter();
27155      this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
27156      this.currentCalendarOptionsInput = {};
27157      this.currentCalendarOptionsRefined = {};
27158      this.currentViewOptionsInput = {};
27159      this.currentViewOptionsRefined = {};
27160      this.currentCalendarOptionsRefiners = {};
27161      this.optionsForRefining = [];
27162      this.optionsForHandling = [];
27163      this.getCurrentData = () => this.data;
27164      this.dispatch = (action) => {
27165        this.actionRunner.request(action);
27166      };
27167      this.props = props;
27168      this.actionRunner.pause();
27169      let dynamicOptionOverrides = {};
27170      let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
27171      let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;
27172      let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
27173      props.calendarApi.currentDataManager = this;
27174      this.emitter.setThisContext(props.calendarApi);
27175      this.emitter.setOptions(currentViewData.options);
27176      let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
27177      let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
27178      if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
27179        currentDate = dateProfile.currentRange.start;
27180      }
27181      let calendarContext = {
27182        dateEnv: optionsData.dateEnv,
27183        options: optionsData.calendarOptions,
27184        pluginHooks: optionsData.pluginHooks,
27185        calendarApi: props.calendarApi,
27186        dispatch: this.dispatch,
27187        emitter: this.emitter,
27188        getCurrentData: this.getCurrentData
27189      };
27190      for (let callback of optionsData.pluginHooks.contextInit) {
27191        callback(calendarContext);
27192      }
27193      let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
27194      let initialState = {
27195        dynamicOptionOverrides,
27196        currentViewType,
27197        currentDate,
27198        dateProfile,
27199        businessHours: this.parseContextBusinessHours(calendarContext),
27200        eventSources,
27201        eventUiBases: {},
27202        eventStore: createEmptyEventStore(),
27203        renderableEventStore: createEmptyEventStore(),
27204        dateSelection: null,
27205        eventSelection: "",
27206        eventDrag: null,
27207        eventResize: null,
27208        selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig
27209      };
27210      let contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);
27211      for (let reducer of optionsData.pluginHooks.reducers) {
27212        Object.assign(initialState, reducer(null, null, contextAndState));
27213      }
27214      if (computeIsLoading(initialState, calendarContext)) {
27215        this.emitter.trigger("loading", true);
27216      }
27217      this.state = initialState;
27218      this.updateData();
27219      this.actionRunner.resume();
27220    }
27221    resetOptions(optionOverrides, changedOptionNames) {
27222      let { props } = this;
27223      if (changedOptionNames === void 0) {
27224        props.optionOverrides = optionOverrides;
27225      } else {
27226        props.optionOverrides = Object.assign(Object.assign({}, props.optionOverrides || {}), optionOverrides);
27227        this.optionsForRefining.push(...changedOptionNames);
27228      }
27229      if (changedOptionNames === void 0 || changedOptionNames.length) {
27230        this.actionRunner.request({
27231          type: "NOTHING"
27232        });
27233      }
27234    }
27235    _handleAction(action) {
27236      let { props, state, emitter } = this;
27237      let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);
27238      let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
27239      let currentViewType = reduceViewType(state.currentViewType, action);
27240      let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
27241      props.calendarApi.currentDataManager = this;
27242      emitter.setThisContext(props.calendarApi);
27243      emitter.setOptions(currentViewData.options);
27244      let calendarContext = {
27245        dateEnv: optionsData.dateEnv,
27246        options: optionsData.calendarOptions,
27247        pluginHooks: optionsData.pluginHooks,
27248        calendarApi: props.calendarApi,
27249        dispatch: this.dispatch,
27250        emitter,
27251        getCurrentData: this.getCurrentData
27252      };
27253      let { currentDate, dateProfile } = state;
27254      if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) {
27255        dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
27256      }
27257      currentDate = reduceCurrentDate(currentDate, action);
27258      dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
27259      if (action.type === "PREV" || action.type === "NEXT" || !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
27260        currentDate = dateProfile.currentRange.start;
27261      }
27262      let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
27263      let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
27264      let isEventsLoading = computeEventSourcesLoading(eventSources);
27265      let renderableEventStore = isEventsLoading && !currentViewData.options.progressiveEventRendering ? state.renderableEventStore || eventStore : eventStore;
27266      let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext);
27267      let eventUiBySource = this.buildEventUiBySource(eventSources);
27268      let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
27269      let newState = {
27270        dynamicOptionOverrides,
27271        currentViewType,
27272        currentDate,
27273        dateProfile,
27274        eventSources,
27275        eventStore,
27276        renderableEventStore,
27277        selectionConfig,
27278        eventUiBases,
27279        businessHours: this.parseContextBusinessHours(calendarContext),
27280        dateSelection: reduceDateSelection(state.dateSelection, action),
27281        eventSelection: reduceSelectedEvent(state.eventSelection, action),
27282        eventDrag: reduceEventDrag(state.eventDrag, action),
27283        eventResize: reduceEventResize(state.eventResize, action)
27284      };
27285      let contextAndState = Object.assign(Object.assign({}, calendarContext), newState);
27286      for (let reducer of optionsData.pluginHooks.reducers) {
27287        Object.assign(newState, reducer(state, action, contextAndState));
27288      }
27289      let wasLoading = computeIsLoading(state, calendarContext);
27290      let isLoading = computeIsLoading(newState, calendarContext);
27291      if (!wasLoading && isLoading) {
27292        emitter.trigger("loading", true);
27293      } else if (wasLoading && !isLoading) {
27294        emitter.trigger("loading", false);
27295      }
27296      this.state = newState;
27297      if (props.onAction) {
27298        props.onAction(action);
27299      }
27300    }
27301    updateData() {
27302      let { props, state } = this;
27303      let oldData = this.data;
27304      let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);
27305      let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);
27306      let data = this.data = Object.assign(Object.assign(Object.assign({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);
27307      let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;
27308      let oldCalendarOptions = oldData && oldData.calendarOptions;
27309      let newCalendarOptions = optionsData.calendarOptions;
27310      if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
27311        if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
27312          state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
27313          state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
27314          state.renderableEventStore = data.renderableEventStore = rezoneEventStoreDates(data.renderableEventStore, oldData.dateEnv, data.dateEnv);
27315        }
27316        for (let optionName in changeHandlers) {
27317          if (this.optionsForHandling.indexOf(optionName) !== -1 || oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
27318            changeHandlers[optionName](newCalendarOptions[optionName], data);
27319          }
27320        }
27321      }
27322      this.optionsForHandling = [];
27323      if (props.onData) {
27324        props.onData(data);
27325      }
27326    }
27327    computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {
27328      if (!this.optionsForRefining.length && optionOverrides === this.stableOptionOverrides && dynamicOptionOverrides === this.stableDynamicOptionOverrides) {
27329        return this.stableCalendarOptionsData;
27330      }
27331      let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);
27332      warnUnknownOptions(extra);
27333      let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
27334      let viewSpecs = this.buildViewSpecs(pluginHooks.views, this.stableOptionOverrides, this.stableDynamicOptionOverrides, localeDefaults);
27335      let theme = this.buildTheme(refinedOptions, pluginHooks);
27336      let toolbarConfig = this.parseToolbars(refinedOptions, this.stableOptionOverrides, theme, viewSpecs, calendarApi);
27337      return this.stableCalendarOptionsData = {
27338        calendarOptions: refinedOptions,
27339        pluginHooks,
27340        dateEnv,
27341        viewSpecs,
27342        theme,
27343        toolbarConfig,
27344        localeDefaults,
27345        availableRawLocales: availableLocaleData.map
27346      };
27347    }
27348    processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {
27349      let { locales, locale } = mergeRawOptions([
27350        BASE_OPTION_DEFAULTS,
27351        optionOverrides,
27352        dynamicOptionOverrides
27353      ]);
27354      let availableLocaleData = this.organizeRawLocales(locales);
27355      let availableRawLocales = availableLocaleData.map;
27356      let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
27357      let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
27358      let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
27359      let extra = {};
27360      let raw = mergeRawOptions([
27361        BASE_OPTION_DEFAULTS,
27362        localeDefaults,
27363        optionOverrides,
27364        dynamicOptionOverrides
27365      ]);
27366      let refined = {};
27367      let currentRaw = this.currentCalendarOptionsInput;
27368      let currentRefined = this.currentCalendarOptionsRefined;
27369      let anyChanges = false;
27370      for (let optionName in raw) {
27371        if (this.optionsForRefining.indexOf(optionName) === -1 && (raw[optionName] === currentRaw[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && optionName in currentRaw && COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
27372          refined[optionName] = currentRefined[optionName];
27373        } else if (refiners[optionName]) {
27374          refined[optionName] = refiners[optionName](raw[optionName]);
27375          anyChanges = true;
27376        } else {
27377          extra[optionName] = currentRaw[optionName];
27378        }
27379      }
27380      if (anyChanges) {
27381        this.currentCalendarOptionsInput = raw;
27382        this.currentCalendarOptionsRefined = refined;
27383        this.stableOptionOverrides = optionOverrides;
27384        this.stableDynamicOptionOverrides = dynamicOptionOverrides;
27385      }
27386      this.optionsForHandling.push(...this.optionsForRefining);
27387      this.optionsForRefining = [];
27388      return {
27389        rawOptions: this.currentCalendarOptionsInput,
27390        refinedOptions: this.currentCalendarOptionsRefined,
27391        pluginHooks,
27392        availableLocaleData,
27393        localeDefaults,
27394        extra
27395      };
27396    }
27397    _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {
27398      let viewSpec = optionsData.viewSpecs[viewType];
27399      if (!viewSpec) {
27400        throw new Error(`viewType "${viewType}" is not available. Please make sure you've loaded all neccessary plugins`);
27401      }
27402      let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);
27403      warnUnknownOptions(extra);
27404      let dateProfileGenerator = this.buildDateProfileGenerator({
27405        dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,
27406        duration: viewSpec.duration,
27407        durationUnit: viewSpec.durationUnit,
27408        usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,
27409        dateEnv: optionsData.dateEnv,
27410        calendarApi: this.props.calendarApi,
27411        slotMinTime: refinedOptions.slotMinTime,
27412        slotMaxTime: refinedOptions.slotMaxTime,
27413        showNonCurrentDates: refinedOptions.showNonCurrentDates,
27414        dayCount: refinedOptions.dayCount,
27415        dateAlignment: refinedOptions.dateAlignment,
27416        dateIncrement: refinedOptions.dateIncrement,
27417        hiddenDays: refinedOptions.hiddenDays,
27418        weekends: refinedOptions.weekends,
27419        nowInput: refinedOptions.now,
27420        validRangeInput: refinedOptions.validRange,
27421        visibleRangeInput: refinedOptions.visibleRange,
27422        fixedWeekCount: refinedOptions.fixedWeekCount
27423      });
27424      let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
27425      return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };
27426    }
27427    processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
27428      let raw = mergeRawOptions([
27429        BASE_OPTION_DEFAULTS,
27430        viewSpec.optionDefaults,
27431        localeDefaults,
27432        optionOverrides,
27433        viewSpec.optionOverrides,
27434        dynamicOptionOverrides
27435      ]);
27436      let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
27437      let refined = {};
27438      let currentRaw = this.currentViewOptionsInput;
27439      let currentRefined = this.currentViewOptionsRefined;
27440      let anyChanges = false;
27441      let extra = {};
27442      for (let optionName in raw) {
27443        if (raw[optionName] === currentRaw[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName])) {
27444          refined[optionName] = currentRefined[optionName];
27445        } else {
27446          if (raw[optionName] === this.currentCalendarOptionsInput[optionName] || COMPLEX_OPTION_COMPARATORS[optionName] && COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName])) {
27447            if (optionName in this.currentCalendarOptionsRefined) {
27448              refined[optionName] = this.currentCalendarOptionsRefined[optionName];
27449            }
27450          } else if (refiners[optionName]) {
27451            refined[optionName] = refiners[optionName](raw[optionName]);
27452          } else {
27453            extra[optionName] = raw[optionName];
27454          }
27455          anyChanges = true;
27456        }
27457      }
27458      if (anyChanges) {
27459        this.currentViewOptionsInput = raw;
27460        this.currentViewOptionsRefined = refined;
27461      }
27462      return {
27463        rawOptions: this.currentViewOptionsInput,
27464        refinedOptions: this.currentViewOptionsRefined,
27465        extra
27466      };
27467    }
27468  };
27469  function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
27470    let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
27471    return new DateEnv({
27472      calendarSystem: "gregory",
27473      timeZone,
27474      namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
27475      locale,
27476      weekNumberCalculation,
27477      firstDay,
27478      weekText,
27479      cmdFormatter: pluginHooks.cmdFormatter,
27480      defaultSeparator
27481    });
27482  }
27483  function buildTheme(options, pluginHooks) {
27484    let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;
27485    return new ThemeClass(options);
27486  }
27487  function buildDateProfileGenerator(props) {
27488    let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
27489    return new DateProfileGeneratorClass(props);
27490  }
27491  function buildViewApi(type, getCurrentData, dateEnv) {
27492    return new ViewImpl(type, getCurrentData, dateEnv);
27493  }
27494  function buildEventUiBySource(eventSources) {
27495    return mapHash(eventSources, (eventSource) => eventSource.ui);
27496  }
27497  function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
27498    let eventUiBases = { "": eventUiSingleBase };
27499    for (let defId in eventDefs) {
27500      let def = eventDefs[defId];
27501      if (def.sourceId && eventUiBySource[def.sourceId]) {
27502        eventUiBases[defId] = eventUiBySource[def.sourceId];
27503      }
27504    }
27505    return eventUiBases;
27506  }
27507  function buildViewUiProps(calendarContext) {
27508    let { options } = calendarContext;
27509    return {
27510      eventUiSingleBase: createEventUi({
27511        display: options.eventDisplay,
27512        editable: options.editable,
27513        startEditable: options.eventStartEditable,
27514        durationEditable: options.eventDurationEditable,
27515        constraint: options.eventConstraint,
27516        overlap: typeof options.eventOverlap === "boolean" ? options.eventOverlap : void 0,
27517        allow: options.eventAllow,
27518        backgroundColor: options.eventBackgroundColor,
27519        borderColor: options.eventBorderColor,
27520        textColor: options.eventTextColor,
27521        color: options.eventColor
27522      }, calendarContext),
27523      selectionConfig: createEventUi({
27524        constraint: options.selectConstraint,
27525        overlap: typeof options.selectOverlap === "boolean" ? options.selectOverlap : void 0,
27526        allow: options.selectAllow
27527      }, calendarContext)
27528    };
27529  }
27530  function computeIsLoading(state, context) {
27531    for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {
27532      if (isLoadingFunc(state)) {
27533        return true;
27534      }
27535    }
27536    return false;
27537  }
27538  function parseContextBusinessHours(calendarContext) {
27539    return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
27540  }
27541  function warnUnknownOptions(options, viewName) {
27542    for (let optionName in options) {
27543      console.warn(`Unknown option '${optionName}'` + (viewName ? ` for view '${viewName}'` : ""));
27544    }
27545  }
27546  var ToolbarSection = class extends BaseComponent {
27547    render() {
27548      let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));
27549      return y2("div", { className: "fc-toolbar-chunk" }, ...children);
27550    }
27551    renderWidgetGroup(widgetGroup) {
27552      let { props } = this;
27553      let { theme } = this.context;
27554      let children = [];
27555      let isOnlyButtons = true;
27556      for (let widget of widgetGroup) {
27557        let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
27558        if (buttonName === "title") {
27559          isOnlyButtons = false;
27560          children.push(y2("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
27561        } else {
27562          let isPressed = buttonName === props.activeButton;
27563          let isDisabled2 = !props.isTodayEnabled && buttonName === "today" || !props.isPrevEnabled && buttonName === "prev" || !props.isNextEnabled && buttonName === "next";
27564          let buttonClasses = [`fc-${buttonName}-button`, theme.getClass("button")];
27565          if (isPressed) {
27566            buttonClasses.push(theme.getClass("buttonActive"));
27567          }
27568          children.push(y2("button", { type: "button", title: typeof buttonHint === "function" ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled2, "aria-pressed": isPressed, className: buttonClasses.join(" "), onClick: buttonClick }, buttonText || (buttonIcon ? y2("span", { className: buttonIcon, role: "img" }) : "")));
27569        }
27570      }
27571      if (children.length > 1) {
27572        let groupClassName = isOnlyButtons && theme.getClass("buttonGroup") || "";
27573        return y2("div", { className: groupClassName }, ...children);
27574      }
27575      return children[0];
27576    }
27577  };
27578  var Toolbar = class extends BaseComponent {
27579    render() {
27580      let { model, extraClassName } = this.props;
27581      let forceLtr = false;
27582      let startContent;
27583      let endContent;
27584      let sectionWidgets = model.sectionWidgets;
27585      let centerContent = sectionWidgets.center;
27586      if (sectionWidgets.left) {
27587        forceLtr = true;
27588        startContent = sectionWidgets.left;
27589      } else {
27590        startContent = sectionWidgets.start;
27591      }
27592      if (sectionWidgets.right) {
27593        forceLtr = true;
27594        endContent = sectionWidgets.right;
27595      } else {
27596        endContent = sectionWidgets.end;
27597      }
27598      let classNames = [
27599        extraClassName || "",
27600        "fc-toolbar",
27601        forceLtr ? "fc-toolbar-ltr" : ""
27602      ];
27603      return y2(
27604        "div",
27605        { className: classNames.join(" ") },
27606        this.renderSection("start", startContent || []),
27607        this.renderSection("center", centerContent || []),
27608        this.renderSection("end", endContent || [])
27609      );
27610    }
27611    renderSection(key, widgetGroups) {
27612      let { props } = this;
27613      return y2(ToolbarSection, { key, widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId });
27614    }
27615  };
27616  var ViewHarness = class extends BaseComponent {
27617    constructor() {
27618      super(...arguments);
27619      this.state = {
27620        availableWidth: null
27621      };
27622      this.handleEl = (el) => {
27623        this.el = el;
27624        setRef(this.props.elRef, el);
27625        this.updateAvailableWidth();
27626      };
27627      this.handleResize = () => {
27628        this.updateAvailableWidth();
27629      };
27630    }
27631    render() {
27632      let { props, state } = this;
27633      let { aspectRatio } = props;
27634      let classNames = [
27635        "fc-view-harness",
27636        aspectRatio || props.liquid || props.height ? "fc-view-harness-active" : "fc-view-harness-passive"
27637      ];
27638      let height = "";
27639      let paddingBottom = "";
27640      if (aspectRatio) {
27641        if (state.availableWidth !== null) {
27642          height = state.availableWidth / aspectRatio;
27643        } else {
27644          paddingBottom = `${1 / aspectRatio * 100}%`;
27645        }
27646      } else {
27647        height = props.height || "";
27648      }
27649      return y2("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(" "), style: { height, paddingBottom } }, props.children);
27650    }
27651    componentDidMount() {
27652      this.context.addResizeHandler(this.handleResize);
27653    }
27654    componentWillUnmount() {
27655      this.context.removeResizeHandler(this.handleResize);
27656    }
27657    updateAvailableWidth() {
27658      if (this.el && this.props.aspectRatio) {
27659        this.setState({ availableWidth: this.el.offsetWidth });
27660      }
27661    }
27662  };
27663  var EventClicking = class extends Interaction {
27664    constructor(settings) {
27665      super(settings);
27666      this.handleSegClick = (ev, segEl) => {
27667        let { component } = this;
27668        let { context } = component;
27669        let seg = getElSeg(segEl);
27670        if (seg && component.isValidSegDownEl(ev.target)) {
27671          let hasUrlContainer = elementClosest(ev.target, ".fc-event-forced-url");
27672          let url = hasUrlContainer ? hasUrlContainer.querySelector("a[href]").href : "";
27673          context.emitter.trigger("eventClick", {
27674            el: segEl,
27675            event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
27676            jsEvent: ev,
27677            view: context.viewApi
27678          });
27679          if (url && !ev.defaultPrevented) {
27680            window.location.href = url;
27681          }
27682        }
27683      };
27684      this.destroy = listenBySelector(
27685        settings.el,
27686        "click",
27687        ".fc-event",
27688        this.handleSegClick
27689      );
27690    }
27691  };
27692  var EventHovering = class extends Interaction {
27693    constructor(settings) {
27694      super(settings);
27695      this.handleEventElRemove = (el) => {
27696        if (el === this.currentSegEl) {
27697          this.handleSegLeave(null, this.currentSegEl);
27698        }
27699      };
27700      this.handleSegEnter = (ev, segEl) => {
27701        if (getElSeg(segEl)) {
27702          this.currentSegEl = segEl;
27703          this.triggerEvent("eventMouseEnter", ev, segEl);
27704        }
27705      };
27706      this.handleSegLeave = (ev, segEl) => {
27707        if (this.currentSegEl) {
27708          this.currentSegEl = null;
27709          this.triggerEvent("eventMouseLeave", ev, segEl);
27710        }
27711      };
27712      this.removeHoverListeners = listenToHoverBySelector(
27713        settings.el,
27714        ".fc-event",
27715        this.handleSegEnter,
27716        this.handleSegLeave
27717      );
27718    }
27719    destroy() {
27720      this.removeHoverListeners();
27721    }
27722    triggerEvent(publicEvName, ev, segEl) {
27723      let { component } = this;
27724      let { context } = component;
27725      let seg = getElSeg(segEl);
27726      if (!ev || component.isValidSegDownEl(ev.target)) {
27727        context.emitter.trigger(publicEvName, {
27728          el: segEl,
27729          event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
27730          jsEvent: ev,
27731          view: context.viewApi
27732        });
27733      }
27734    }
27735  };
27736  var CalendarContent = class extends PureComponent {
27737    constructor() {
27738      super(...arguments);
27739      this.buildViewContext = memoize(buildViewContext);
27740      this.buildViewPropTransformers = memoize(buildViewPropTransformers);
27741      this.buildToolbarProps = memoize(buildToolbarProps);
27742      this.headerRef = d2();
27743      this.footerRef = d2();
27744      this.interactionsStore = {};
27745      this.state = {
27746        viewLabelId: getUniqueDomId()
27747      };
27748      this.registerInteractiveComponent = (component, settingsInput) => {
27749        let settings = parseInteractionSettings(component, settingsInput);
27750        let DEFAULT_INTERACTIONS = [
27751          EventClicking,
27752          EventHovering
27753        ];
27754        let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);
27755        let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));
27756        this.interactionsStore[component.uid] = interactions;
27757        interactionSettingsStore[component.uid] = settings;
27758      };
27759      this.unregisterInteractiveComponent = (component) => {
27760        let listeners = this.interactionsStore[component.uid];
27761        if (listeners) {
27762          for (let listener of listeners) {
27763            listener.destroy();
27764          }
27765          delete this.interactionsStore[component.uid];
27766        }
27767        delete interactionSettingsStore[component.uid];
27768      };
27769      this.resizeRunner = new DelayedRunner(() => {
27770        this.props.emitter.trigger("_resize", true);
27771        this.props.emitter.trigger("windowResize", { view: this.props.viewApi });
27772      });
27773      this.handleWindowResize = (ev) => {
27774        let { options } = this.props;
27775        if (options.handleWindowResize && ev.target === window) {
27776          this.resizeRunner.request(options.windowResizeDelay);
27777        }
27778      };
27779    }
27780    render() {
27781      let { props } = this;
27782      let { toolbarConfig, options } = props;
27783      let toolbarProps = this.buildToolbarProps(
27784        props.viewSpec,
27785        props.dateProfile,
27786        props.dateProfileGenerator,
27787        props.currentDate,
27788        getNow(props.options.now, props.dateEnv),
27789        props.viewTitle
27790      );
27791      let viewVGrow = false;
27792      let viewHeight = "";
27793      let viewAspectRatio;
27794      if (props.isHeightAuto || props.forPrint) {
27795        viewHeight = "";
27796      } else if (options.height != null) {
27797        viewVGrow = true;
27798      } else if (options.contentHeight != null) {
27799        viewHeight = options.contentHeight;
27800      } else {
27801        viewAspectRatio = Math.max(options.aspectRatio, 0.5);
27802      }
27803      let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
27804      let viewLabelId = toolbarConfig.header && toolbarConfig.header.hasTitle ? this.state.viewLabelId : void 0;
27805      return y2(
27806        ViewContextType.Provider,
27807        { value: viewContext },
27808        toolbarConfig.header && y2(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps)),
27809        y2(
27810          ViewHarness,
27811          { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
27812          this.renderView(props),
27813          this.buildAppendContent()
27814        ),
27815        toolbarConfig.footer && y2(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps))
27816      );
27817    }
27818    componentDidMount() {
27819      let { props } = this;
27820      this.calendarInteractions = props.pluginHooks.calendarInteractions.map((CalendarInteractionClass) => new CalendarInteractionClass(props));
27821      window.addEventListener("resize", this.handleWindowResize);
27822      let { propSetHandlers } = props.pluginHooks;
27823      for (let propName in propSetHandlers) {
27824        propSetHandlers[propName](props[propName], props);
27825      }
27826    }
27827    componentDidUpdate(prevProps) {
27828      let { props } = this;
27829      let { propSetHandlers } = props.pluginHooks;
27830      for (let propName in propSetHandlers) {
27831        if (props[propName] !== prevProps[propName]) {
27832          propSetHandlers[propName](props[propName], props);
27833        }
27834      }
27835    }
27836    componentWillUnmount() {
27837      window.removeEventListener("resize", this.handleWindowResize);
27838      this.resizeRunner.clear();
27839      for (let interaction of this.calendarInteractions) {
27840        interaction.destroy();
27841      }
27842      this.props.emitter.trigger("_unmount");
27843    }
27844    buildAppendContent() {
27845      let { props } = this;
27846      let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
27847      return y2(_2, {}, ...children);
27848    }
27849    renderView(props) {
27850      let { pluginHooks } = props;
27851      let { viewSpec } = props;
27852      let viewProps = {
27853        dateProfile: props.dateProfile,
27854        businessHours: props.businessHours,
27855        eventStore: props.renderableEventStore,
27856        eventUiBases: props.eventUiBases,
27857        dateSelection: props.dateSelection,
27858        eventSelection: props.eventSelection,
27859        eventDrag: props.eventDrag,
27860        eventResize: props.eventResize,
27861        isHeightAuto: props.isHeightAuto,
27862        forPrint: props.forPrint
27863      };
27864      let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
27865      for (let transformer of transformers) {
27866        Object.assign(viewProps, transformer.transform(viewProps, props));
27867      }
27868      let ViewComponent = viewSpec.component;
27869      return y2(ViewComponent, Object.assign({}, viewProps));
27870    }
27871  };
27872  function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now3, title) {
27873    let todayInfo = dateProfileGenerator.build(now3, void 0, false);
27874    let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);
27875    let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);
27876    return {
27877      title,
27878      activeButton: viewSpec.type,
27879      navUnit: viewSpec.singleUnit,
27880      isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now3),
27881      isPrevEnabled: prevInfo.isValid,
27882      isNextEnabled: nextInfo.isValid
27883    };
27884  }
27885  function buildViewPropTransformers(theClasses) {
27886    return theClasses.map((TheClass) => new TheClass());
27887  }
27888  var Calendar = class extends CalendarImpl {
27889    constructor(el, optionOverrides = {}) {
27890      super();
27891      this.isRendering = false;
27892      this.isRendered = false;
27893      this.currentClassNames = [];
27894      this.customContentRenderId = 0;
27895      this.handleAction = (action) => {
27896        switch (action.type) {
27897          case "SET_EVENT_DRAG":
27898          case "SET_EVENT_RESIZE":
27899            this.renderRunner.tryDrain();
27900        }
27901      };
27902      this.handleData = (data) => {
27903        this.currentData = data;
27904        this.renderRunner.request(data.calendarOptions.rerenderDelay);
27905      };
27906      this.handleRenderRequest = () => {
27907        if (this.isRendering) {
27908          this.isRendered = true;
27909          let { currentData } = this;
27910          flushSync(() => {
27911            D2(y2(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {
27912              this.setClassNames(classNames);
27913              this.setHeight(height);
27914              return y2(
27915                RenderId.Provider,
27916                { value: this.customContentRenderId },
27917                y2(CalendarContent, Object.assign({ isHeightAuto, forPrint }, currentData))
27918              );
27919            }), this.el);
27920          });
27921        } else if (this.isRendered) {
27922          this.isRendered = false;
27923          D2(null, this.el);
27924          this.setClassNames([]);
27925          this.setHeight("");
27926        }
27927      };
27928      ensureElHasStyles(el);
27929      this.el = el;
27930      this.renderRunner = new DelayedRunner(this.handleRenderRequest);
27931      new CalendarDataManager({
27932        optionOverrides,
27933        calendarApi: this,
27934        onAction: this.handleAction,
27935        onData: this.handleData
27936      });
27937    }
27938    render() {
27939      let wasRendering = this.isRendering;
27940      if (!wasRendering) {
27941        this.isRendering = true;
27942      } else {
27943        this.customContentRenderId += 1;
27944      }
27945      this.renderRunner.request();
27946      if (wasRendering) {
27947        this.updateSize();
27948      }
27949    }
27950    destroy() {
27951      if (this.isRendering) {
27952        this.isRendering = false;
27953        this.renderRunner.request();
27954      }
27955    }
27956    updateSize() {
27957      flushSync(() => {
27958        super.updateSize();
27959      });
27960    }
27961    batchRendering(func) {
27962      this.renderRunner.pause("batchRendering");
27963      func();
27964      this.renderRunner.resume("batchRendering");
27965    }
27966    pauseRendering() {
27967      this.renderRunner.pause("pauseRendering");
27968    }
27969    resumeRendering() {
27970      this.renderRunner.resume("pauseRendering", true);
27971    }
27972    resetOptions(optionOverrides, changedOptionNames) {
27973      this.currentDataManager.resetOptions(optionOverrides, changedOptionNames);
27974    }
27975    setClassNames(classNames) {
27976      if (!isArraysEqual(classNames, this.currentClassNames)) {
27977        let { classList } = this.el;
27978        for (let className of this.currentClassNames) {
27979          classList.remove(className);
27980        }
27981        for (let className of classNames) {
27982          classList.add(className);
27983        }
27984        this.currentClassNames = classNames;
27985      }
27986    }
27987    setHeight(height) {
27988      applyStyleProp(this.el, "height", height);
27989    }
27990  };
27991
27992  
vendor: 44,146 bytes, lines 27992-28944
27992// node_modules/@fullcalendar/daygrid/internal.js
27993  var TableView = class extends DateComponent {
27994    constructor() {
27995      super(...arguments);
27996      this.headerElRef = d2();
27997    }
27998    renderSimpleLayout(headerRowContent, bodyContent) {
27999      let { props, context } = this;
28000      let sections = [];
28001      let stickyHeaderDates = getStickyHeaderDates(context.options);
28002      if (headerRowContent) {
28003        sections.push({
28004          type: "header",
28005          key: "header",
28006          isSticky: stickyHeaderDates,
28007          chunk: {
28008            elRef: this.headerElRef,
28009            tableClassName: "fc-col-header",
28010            rowContent: headerRowContent
28011          }
28012        });
28013      }
28014      sections.push({
28015        type: "body",
28016        key: "body",
28017        liquid: true,
28018        chunk: { content: bodyContent }
28019      });
28020      return y2(
28021        ViewContainer,
28022        { elClasses: ["fc-daygrid"], viewSpec: context.viewSpec },
28023        y2(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [], sections })
28024      );
28025    }
28026    renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {
28027      let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
28028      if (!ScrollGrid) {
28029        throw new Error("No ScrollGrid implementation");
28030      }
28031      let { props, context } = this;
28032      let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
28033      let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
28034      let sections = [];
28035      if (headerRowContent) {
28036        sections.push({
28037          type: "header",
28038          key: "header",
28039          isSticky: stickyHeaderDates,
28040          chunks: [{
28041            key: "main",
28042            elRef: this.headerElRef,
28043            tableClassName: "fc-col-header",
28044            rowContent: headerRowContent
28045          }]
28046        });
28047      }
28048      sections.push({
28049        type: "body",
28050        key: "body",
28051        liquid: true,
28052        chunks: [{
28053          key: "main",
28054          content: bodyContent
28055        }]
28056      });
28057      if (stickyFooterScrollbar) {
28058        sections.push({
28059          type: "footer",
28060          key: "footer",
28061          isSticky: true,
28062          chunks: [{
28063            key: "main",
28064            content: renderScrollShim
28065          }]
28066        });
28067      }
28068      return y2(
28069        ViewContainer,
28070        { elClasses: ["fc-daygrid"], viewSpec: context.viewSpec },
28071        y2(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections })
28072      );
28073    }
28074  };
28075  function splitSegsByRow(segs, rowCnt) {
28076    let byRow = [];
28077    for (let i4 = 0; i4 < rowCnt; i4 += 1) {
28078      byRow[i4] = [];
28079    }
28080    for (let seg of segs) {
28081      byRow[seg.row].push(seg);
28082    }
28083    return byRow;
28084  }
28085  function splitSegsByFirstCol(segs, colCnt) {
28086    let byCol = [];
28087    for (let i4 = 0; i4 < colCnt; i4 += 1) {
28088      byCol[i4] = [];
28089    }
28090    for (let seg of segs) {
28091      byCol[seg.firstCol].push(seg);
28092    }
28093    return byCol;
28094  }
28095  function splitInteractionByRow(ui2, rowCnt) {
28096    let byRow = [];
28097    if (!ui2) {
28098      for (let i4 = 0; i4 < rowCnt; i4 += 1) {
28099        byRow[i4] = null;
28100      }
28101    } else {
28102      for (let i4 = 0; i4 < rowCnt; i4 += 1) {
28103        byRow[i4] = {
28104          affectedInstances: ui2.affectedInstances,
28105          isEvent: ui2.isEvent,
28106          segs: []
28107        };
28108      }
28109      for (let seg of ui2.segs) {
28110        byRow[seg.row].segs.push(seg);
28111      }
28112    }
28113    return byRow;
28114  }
28115  var DEFAULT_TABLE_EVENT_TIME_FORMAT = createFormatter({
28116    hour: "numeric",
28117    minute: "2-digit",
28118    omitZeroMinute: true,
28119    meridiem: "narrow"
28120  });
28121  function hasListItemDisplay(seg) {
28122    let { display } = seg.eventRange.ui;
28123    return display === "list-item" || display === "auto" && !seg.eventRange.def.allDay && seg.firstCol === seg.lastCol && seg.isStart && seg.isEnd;
28124  }
28125  var TableBlockEvent = class extends BaseComponent {
28126    render() {
28127      let { props } = this;
28128      return y2(StandardEvent, Object.assign({}, props, { elClasses: ["fc-daygrid-event", "fc-daygrid-block-event", "fc-h-event"], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay }));
28129    }
28130  };
28131  var TableListItemEvent = class extends BaseComponent {
28132    render() {
28133      let { props, context } = this;
28134      let { options } = context;
28135      let { seg } = props;
28136      let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
28137      let timeText = buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
28138      return y2(EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ["fc-daygrid-event", "fc-daygrid-dot-event"], elAttrs: getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent2, timeText, isResizing: false, isDateSelecting: false }));
28139    }
28140  };
28141  function renderInnerContent2(renderProps) {
28142    return y2(
28143      _2,
28144      null,
28145      y2("div", { className: "fc-daygrid-event-dot", style: { borderColor: renderProps.borderColor || renderProps.backgroundColor } }),
28146      renderProps.timeText && y2("div", { className: "fc-event-time" }, renderProps.timeText),
28147      y2("div", { className: "fc-event-title" }, renderProps.event.title || y2(_2, null, "\xA0"))
28148    );
28149  }
28150  var TableCellMoreLink = class extends BaseComponent {
28151    constructor() {
28152      super(...arguments);
28153      this.compileSegs = memoize(compileSegs);
28154    }
28155    render() {
28156      let { props } = this;
28157      let { allSegs, invisibleSegs } = this.compileSegs(props.singlePlacements);
28158      return y2(MoreLinkContainer, { elClasses: ["fc-daygrid-more-link"], dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: () => {
28159        let isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) || (props.eventResize ? props.eventResize.affectedInstances : null) || {};
28160        return y2(_2, null, allSegs.map((seg) => {
28161          let instanceId = seg.eventRange.instance.instanceId;
28162          return y2("div", { className: "fc-daygrid-event-harness", key: instanceId, style: {
28163            visibility: isForcedInvisible[instanceId] ? "hidden" : ""
28164          } }, hasListItemDisplay(seg) ? y2(TableListItemEvent, Object.assign({ seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))) : y2(TableBlockEvent, Object.assign({ seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))));
28165        }));
28166      } });
28167    }
28168  };
28169  function compileSegs(singlePlacements) {
28170    let allSegs = [];
28171    let invisibleSegs = [];
28172    for (let placement of singlePlacements) {
28173      allSegs.push(placement.seg);
28174      if (!placement.isVisible) {
28175        invisibleSegs.push(placement.seg);
28176      }
28177    }
28178    return { allSegs, invisibleSegs };
28179  }
28180  var DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: "narrow" });
28181  var TableCell = class extends DateComponent {
28182    constructor() {
28183      super(...arguments);
28184      this.rootElRef = d2();
28185      this.state = {
28186        dayNumberId: getUniqueDomId()
28187      };
28188      this.handleRootEl = (el) => {
28189        setRef(this.rootElRef, el);
28190        setRef(this.props.elRef, el);
28191      };
28192    }
28193    render() {
28194      let { context, props, state, rootElRef } = this;
28195      let { options, dateEnv } = context;
28196      let { date, dateProfile } = props;
28197      const isMonthStart = props.showDayNumber && shouldDisplayMonthStart(date, dateProfile.currentRange, dateEnv);
28198      return y2(DayCellContainer, { elTag: "td", elRef: this.handleRootEl, elClasses: [
28199        "fc-daygrid-day",
28200        ...props.extraClassNames || []
28201      ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), props.showDayNumber ? { "aria-labelledby": state.dayNumberId } : {}), { role: "gridcell" }), defaultGenerator: renderTopInner, date, dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, isMonthStart, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => y2(
28202        "div",
28203        { ref: props.innerElRef, className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", style: { minHeight: props.minHeight } },
28204        props.showWeekNumber && y2(WeekNumberContainer, { elTag: "a", elClasses: ["fc-daygrid-week-number"], elAttrs: buildNavLinkAttrs(context, date, "week"), date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }),
28205        !renderProps.isDisabled && (props.showDayNumber || hasCustomDayCellContent(options) || props.forceDayTop) ? y2(
28206          "div",
28207          { className: "fc-daygrid-day-top" },
28208          y2(InnerContent, { elTag: "a", elClasses: [
28209            "fc-daygrid-day-number",
28210            isMonthStart && "fc-daygrid-month-start"
28211          ], elAttrs: Object.assign(Object.assign({}, buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) })
28212        ) : props.showDayNumber ? y2(
28213          "div",
28214          { className: "fc-daygrid-day-top", style: { visibility: "hidden" } },
28215          y2("a", { className: "fc-daygrid-day-number" }, "\xA0")
28216        ) : void 0,
28217        y2(
28218          "div",
28219          { className: "fc-daygrid-day-events", ref: props.fgContentElRef },
28220          props.fgContent,
28221          y2(
28222            "div",
28223            { className: "fc-daygrid-day-bottom", style: { marginTop: props.moreMarginTop } },
28224            y2(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange })
28225          )
28226        ),
28227        y2("div", { className: "fc-daygrid-day-bg" }, props.bgContent)
28228      ));
28229    }
28230  };
28231  function renderTopInner(props) {
28232    return props.dayNumberText || y2(_2, null, "\xA0");
28233  }
28234  function shouldDisplayMonthStart(date, currentRange, dateEnv) {
28235    const { start: currentStart, end: currentEnd } = currentRange;
28236    const currentEndIncl = addMs(currentEnd, -1);
28237    const currentFirstYear = dateEnv.getYear(currentStart);
28238    const currentFirstMonth = dateEnv.getMonth(currentStart);
28239    const currentLastYear = dateEnv.getYear(currentEndIncl);
28240    const currentLastMonth = dateEnv.getMonth(currentEndIncl);
28241    return !(currentFirstYear === currentLastYear && currentFirstMonth === currentLastMonth) && Boolean(
28242      date.valueOf() === currentStart.valueOf() || dateEnv.getDay(date) === 1 && date.valueOf() < currentEnd.valueOf()
28243    );
28244  }
28245  function generateSegKey(seg) {
28246    return seg.eventRange.instance.instanceId + ":" + seg.firstCol;
28247  }
28248  function generateSegUid(seg) {
28249    return generateSegKey(seg) + ":" + seg.lastCol;
28250  }
28251  function computeFgSegPlacement(segs, dayMaxEvents, dayMaxEventRows, strictOrder, segHeights, maxContentHeight, cells) {
28252    let hierarchy = new DayGridSegHierarchy((segEntry) => {
28253      let segUid = segs[segEntry.index].eventRange.instance.instanceId + ":" + segEntry.span.start + ":" + (segEntry.span.end - 1);
28254      return segHeights[segUid] || 1;
28255    });
28256    hierarchy.allowReslicing = true;
28257    hierarchy.strictOrder = strictOrder;
28258    if (dayMaxEvents === true || dayMaxEventRows === true) {
28259      hierarchy.maxCoord = maxContentHeight;
28260      hierarchy.hiddenConsumes = true;
28261    } else if (typeof dayMaxEvents === "number") {
28262      hierarchy.maxStackCnt = dayMaxEvents;
28263    } else if (typeof dayMaxEventRows === "number") {
28264      hierarchy.maxStackCnt = dayMaxEventRows;
28265      hierarchy.hiddenConsumes = true;
28266    }
28267    let segInputs = [];
28268    let unknownHeightSegs = [];
28269    for (let i4 = 0; i4 < segs.length; i4 += 1) {
28270      let seg = segs[i4];
28271      let segUid = generateSegUid(seg);
28272      let eventHeight = segHeights[segUid];
28273      if (eventHeight != null) {
28274        segInputs.push({
28275          index: i4,
28276          span: {
28277            start: seg.firstCol,
28278            end: seg.lastCol + 1
28279          }
28280        });
28281      } else {
28282        unknownHeightSegs.push(seg);
28283      }
28284    }
28285    let hiddenEntries = hierarchy.addSegs(segInputs);
28286    let segRects = hierarchy.toRects();
28287    let { singleColPlacements, multiColPlacements, leftoverMargins } = placeRects(segRects, segs, cells);
28288    let moreCnts = [];
28289    let moreMarginTops = [];
28290    for (let seg of unknownHeightSegs) {
28291      multiColPlacements[seg.firstCol].push({
28292        seg,
28293        isVisible: false,
28294        isAbsolute: true,
28295        absoluteTop: 0,
28296        marginTop: 0
28297      });
28298      for (let col = seg.firstCol; col <= seg.lastCol; col += 1) {
28299        singleColPlacements[col].push({
28300          seg: resliceSeg(seg, col, col + 1, cells),
28301          isVisible: false,
28302          isAbsolute: false,
28303          absoluteTop: 0,
28304          marginTop: 0
28305        });
28306      }
28307    }
28308    for (let col = 0; col < cells.length; col += 1) {
28309      moreCnts.push(0);
28310    }
28311    for (let hiddenEntry of hiddenEntries) {
28312      let seg = segs[hiddenEntry.index];
28313      let hiddenSpan = hiddenEntry.span;
28314      multiColPlacements[hiddenSpan.start].push({
28315        seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),
28316        isVisible: false,
28317        isAbsolute: true,
28318        absoluteTop: 0,
28319        marginTop: 0
28320      });
28321      for (let col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {
28322        moreCnts[col] += 1;
28323        singleColPlacements[col].push({
28324          seg: resliceSeg(seg, col, col + 1, cells),
28325          isVisible: false,
28326          isAbsolute: false,
28327          absoluteTop: 0,
28328          marginTop: 0
28329        });
28330      }
28331    }
28332    for (let col = 0; col < cells.length; col += 1) {
28333      moreMarginTops.push(leftoverMargins[col]);
28334    }
28335    return { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops };
28336  }
28337  function placeRects(allRects, segs, cells) {
28338    let rectsByEachCol = groupRectsByEachCol(allRects, cells.length);
28339    let singleColPlacements = [];
28340    let multiColPlacements = [];
28341    let leftoverMargins = [];
28342    for (let col = 0; col < cells.length; col += 1) {
28343      let rects = rectsByEachCol[col];
28344      let singlePlacements = [];
28345      let currentHeight = 0;
28346      let currentMarginTop = 0;
28347      for (let rect of rects) {
28348        let seg = segs[rect.index];
28349        singlePlacements.push({
28350          seg: resliceSeg(seg, col, col + 1, cells),
28351          isVisible: true,
28352          isAbsolute: false,
28353          absoluteTop: rect.levelCoord,
28354          marginTop: rect.levelCoord - currentHeight
28355        });
28356        currentHeight = rect.levelCoord + rect.thickness;
28357      }
28358      let multiPlacements = [];
28359      currentHeight = 0;
28360      currentMarginTop = 0;
28361      for (let rect of rects) {
28362        let seg = segs[rect.index];
28363        let isAbsolute = rect.span.end - rect.span.start > 1;
28364        let isFirstCol = rect.span.start === col;
28365        currentMarginTop += rect.levelCoord - currentHeight;
28366        currentHeight = rect.levelCoord + rect.thickness;
28367        if (isAbsolute) {
28368          currentMarginTop += rect.thickness;
28369          if (isFirstCol) {
28370            multiPlacements.push({
28371              seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
28372              isVisible: true,
28373              isAbsolute: true,
28374              absoluteTop: rect.levelCoord,
28375              marginTop: 0
28376            });
28377          }
28378        } else if (isFirstCol) {
28379          multiPlacements.push({
28380            seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
28381            isVisible: true,
28382            isAbsolute: false,
28383            absoluteTop: rect.levelCoord,
28384            marginTop: currentMarginTop
28385          });
28386          currentMarginTop = 0;
28387        }
28388      }
28389      singleColPlacements.push(singlePlacements);
28390      multiColPlacements.push(multiPlacements);
28391      leftoverMargins.push(currentMarginTop);
28392    }
28393    return { singleColPlacements, multiColPlacements, leftoverMargins };
28394  }
28395  function groupRectsByEachCol(rects, colCnt) {
28396    let rectsByEachCol = [];
28397    for (let col = 0; col < colCnt; col += 1) {
28398      rectsByEachCol.push([]);
28399    }
28400    for (let rect of rects) {
28401      for (let col = rect.span.start; col < rect.span.end; col += 1) {
28402        rectsByEachCol[col].push(rect);
28403      }
28404    }
28405    return rectsByEachCol;
28406  }
28407  function resliceSeg(seg, spanStart, spanEnd, cells) {
28408    if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {
28409      return seg;
28410    }
28411    let eventRange = seg.eventRange;
28412    let origRange = eventRange.range;
28413    let slicedRange = intersectRanges(origRange, {
28414      start: cells[spanStart].date,
28415      end: addDays(cells[spanEnd - 1].date, 1)
28416    });
28417    return Object.assign(Object.assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {
28418      def: eventRange.def,
28419      ui: Object.assign(Object.assign({}, eventRange.ui), { durationEditable: false }),
28420      instance: eventRange.instance,
28421      range: slicedRange
28422    }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });
28423  }
28424  var DayGridSegHierarchy = class extends SegHierarchy {
28425    constructor() {
28426      super(...arguments);
28427      this.hiddenConsumes = false;
28428      this.forceHidden = {};
28429    }
28430    addSegs(segInputs) {
28431      const hiddenSegs = super.addSegs(segInputs);
28432      const { entriesByLevel } = this;
28433      const excludeHidden = (entry) => !this.forceHidden[buildEntryKey(entry)];
28434      for (let level = 0; level < entriesByLevel.length; level += 1) {
28435        entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);
28436      }
28437      return hiddenSegs;
28438    }
28439    handleInvalidInsertion(insertion, entry, hiddenEntries) {
28440      const { entriesByLevel, forceHidden } = this;
28441      const { touchingEntry, touchingLevel, touchingLateral } = insertion;
28442      if (this.hiddenConsumes && touchingEntry) {
28443        const touchingEntryId = buildEntryKey(touchingEntry);
28444        if (!forceHidden[touchingEntryId]) {
28445          if (this.allowReslicing) {
28446            const hiddenEntry = Object.assign(Object.assign({}, touchingEntry), { span: intersectSpans(touchingEntry.span, entry.span) });
28447            const hiddenEntryId = buildEntryKey(hiddenEntry);
28448            forceHidden[hiddenEntryId] = true;
28449            entriesByLevel[touchingLevel][touchingLateral] = hiddenEntry;
28450            hiddenEntries.push(hiddenEntry);
28451            this.splitEntry(touchingEntry, entry, hiddenEntries);
28452          } else {
28453            forceHidden[touchingEntryId] = true;
28454            hiddenEntries.push(touchingEntry);
28455          }
28456        }
28457      }
28458      super.handleInvalidInsertion(insertion, entry, hiddenEntries);
28459    }
28460  };
28461  var TableRow = class extends DateComponent {
28462    constructor() {
28463      super(...arguments);
28464      this.cellElRefs = new RefMap();
28465      this.frameElRefs = new RefMap();
28466      this.fgElRefs = new RefMap();
28467      this.segHarnessRefs = new RefMap();
28468      this.rootElRef = d2();
28469      this.state = {
28470        framePositions: null,
28471        maxContentHeight: null,
28472        segHeights: {}
28473      };
28474      this.handleResize = (isForced) => {
28475        if (isForced) {
28476          this.updateSizing(true);
28477        }
28478      };
28479    }
28480    render() {
28481      let { props, state, context } = this;
28482      let { options } = context;
28483      let colCnt = props.cells.length;
28484      let businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);
28485      let bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);
28486      let highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);
28487      let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);
28488      let { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops } = computeFgSegPlacement(sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.segHeights, state.maxContentHeight, props.cells);
28489      let isForcedInvisible = props.eventDrag && props.eventDrag.affectedInstances || props.eventResize && props.eventResize.affectedInstances || {};
28490      return y2(
28491        "tr",
28492        { ref: this.rootElRef, role: "row" },
28493        props.renderIntro && props.renderIntro(),
28494        props.cells.map((cell, col) => {
28495          let normalFgNodes = this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);
28496          let mirrorFgNodes = this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);
28497          return y2(TableCell, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), innerElRef: this.frameElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: this.fgElRefs.createRef(cell.key), fgContent: y2(
28498            _2,
28499            null,
28500            y2(_2, null, normalFgNodes),
28501            y2(_2, null, mirrorFgNodes)
28502          ), bgContent: y2(
28503            _2,
28504            null,
28505            this.renderFillSegs(highlightSegsByCol[col], "highlight"),
28506            this.renderFillSegs(businessHoursByCol[col], "non-business"),
28507            this.renderFillSegs(bgEventSegsByCol[col], "bg-event")
28508          ), minHeight: props.cellMinHeight });
28509        })
28510      );
28511    }
28512    componentDidMount() {
28513      this.updateSizing(true);
28514      this.context.addResizeHandler(this.handleResize);
28515    }
28516    componentDidUpdate(prevProps, prevState) {
28517      let currentProps = this.props;
28518      this.updateSizing(!isPropsEqual(prevProps, currentProps));
28519    }
28520    componentWillUnmount() {
28521      this.context.removeResizeHandler(this.handleResize);
28522    }
28523    getHighlightSegs() {
28524      let { props } = this;
28525      if (props.eventDrag && props.eventDrag.segs.length) {
28526        return props.eventDrag.segs;
28527      }
28528      if (props.eventResize && props.eventResize.segs.length) {
28529        return props.eventResize.segs;
28530      }
28531      return props.dateSelectionSegs;
28532    }
28533    getMirrorSegs() {
28534      let { props } = this;
28535      if (props.eventResize && props.eventResize.segs.length) {
28536        return props.eventResize.segs;
28537      }
28538      return [];
28539    }
28540    renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {
28541      let { context } = this;
28542      let { eventSelection } = this.props;
28543      let { framePositions } = this.state;
28544      let defaultDisplayEventEnd = this.props.cells.length === 1;
28545      let isMirror = isDragging || isResizing || isDateSelecting;
28546      let nodes = [];
28547      if (framePositions) {
28548        for (let placement of segPlacements) {
28549          let { seg } = placement;
28550          let { instanceId } = seg.eventRange.instance;
28551          let isVisible2 = placement.isVisible && !isForcedInvisible[instanceId];
28552          let isAbsolute = placement.isAbsolute;
28553          let left2 = "";
28554          let right2 = "";
28555          if (isAbsolute) {
28556            if (context.isRtl) {
28557              right2 = 0;
28558              left2 = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];
28559            } else {
28560              left2 = 0;
28561              right2 = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];
28562            }
28563          }
28564          nodes.push(y2("div", { className: "fc-daygrid-event-harness" + (isAbsolute ? " fc-daygrid-event-harness-abs" : ""), key: generateSegKey(seg), ref: isMirror ? null : this.segHarnessRefs.createRef(generateSegUid(seg)), style: {
28565            visibility: isVisible2 ? "" : "hidden",
28566            marginTop: isAbsolute ? "" : placement.marginTop,
28567            top: isAbsolute ? placement.absoluteTop : "",
28568            left: left2,
28569            right: right2
28570          } }, hasListItemDisplay(seg) ? y2(TableListItemEvent, Object.assign({ seg, isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd }, getSegMeta(seg, todayRange))) : y2(TableBlockEvent, Object.assign({ seg, isDragging, isResizing, isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd }, getSegMeta(seg, todayRange)))));
28571        }
28572      }
28573      return nodes;
28574    }
28575    renderFillSegs(segs, fillType) {
28576      let { isRtl } = this.context;
28577      let { todayRange } = this.props;
28578      let { framePositions } = this.state;
28579      let nodes = [];
28580      if (framePositions) {
28581        for (let seg of segs) {
28582          let leftRightCss = isRtl ? {
28583            right: 0,
28584            left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol]
28585          } : {
28586            left: 0,
28587            right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol]
28588          };
28589          nodes.push(y2("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-daygrid-bg-harness", style: leftRightCss }, fillType === "bg-event" ? y2(BgEvent, Object.assign({ seg }, getSegMeta(seg, todayRange))) : renderFill(fillType)));
28590        }
28591      }
28592      return y2(_2, {}, ...nodes);
28593    }
28594    updateSizing(isExternalSizingChange) {
28595      let { props, state, frameElRefs } = this;
28596      if (!props.forPrint && props.clientWidth !== null) {
28597        if (isExternalSizingChange) {
28598          let frameEls = props.cells.map((cell) => frameElRefs.currentMap[cell.key]);
28599          if (frameEls.length) {
28600            let originEl = this.rootElRef.current;
28601            let newPositionCache = new PositionCache(
28602              originEl,
28603              frameEls,
28604              true,
28605              false
28606            );
28607            if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {
28608              this.setState({
28609                framePositions: new PositionCache(
28610                  originEl,
28611                  frameEls,
28612                  true,
28613                  false
28614                )
28615              });
28616            }
28617          }
28618        }
28619        const oldSegHeights = this.state.segHeights;
28620        const newSegHeights = this.querySegHeights();
28621        const limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;
28622        this.safeSetState({
28623          segHeights: Object.assign(Object.assign({}, oldSegHeights), newSegHeights),
28624          maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null
28625        });
28626      }
28627    }
28628    querySegHeights() {
28629      let segElMap = this.segHarnessRefs.currentMap;
28630      let segHeights = {};
28631      for (let segUid in segElMap) {
28632        let height = Math.round(segElMap[segUid].getBoundingClientRect().height);
28633        segHeights[segUid] = Math.max(segHeights[segUid] || 0, height);
28634      }
28635      return segHeights;
28636    }
28637    computeMaxContentHeight() {
28638      let firstKey = this.props.cells[0].key;
28639      let cellEl = this.cellElRefs.currentMap[firstKey];
28640      let fcContainerEl = this.fgElRefs.currentMap[firstKey];
28641      return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;
28642    }
28643    getCellEls() {
28644      let elMap = this.cellElRefs.currentMap;
28645      return this.props.cells.map((cell) => elMap[cell.key]);
28646    }
28647  };
28648  TableRow.addStateEquality({
28649    segHeights: isPropsEqual
28650  });
28651  function buildMirrorPlacements(mirrorSegs, colPlacements) {
28652    if (!mirrorSegs.length) {
28653      return [];
28654    }
28655    let topsByInstanceId = buildAbsoluteTopHash(colPlacements);
28656    return mirrorSegs.map((seg) => ({
28657      seg,
28658      isVisible: true,
28659      isAbsolute: true,
28660      absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],
28661      marginTop: 0
28662    }));
28663  }
28664  function buildAbsoluteTopHash(colPlacements) {
28665    let topsByInstanceId = {};
28666    for (let placements2 of colPlacements) {
28667      for (let placement of placements2) {
28668        topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;
28669      }
28670    }
28671    return topsByInstanceId;
28672  }
28673  var TableRows = class extends DateComponent {
28674    constructor() {
28675      super(...arguments);
28676      this.splitBusinessHourSegs = memoize(splitSegsByRow);
28677      this.splitBgEventSegs = memoize(splitSegsByRow);
28678      this.splitFgEventSegs = memoize(splitSegsByRow);
28679      this.splitDateSelectionSegs = memoize(splitSegsByRow);
28680      this.splitEventDrag = memoize(splitInteractionByRow);
28681      this.splitEventResize = memoize(splitInteractionByRow);
28682      this.rowRefs = new RefMap();
28683    }
28684    render() {
28685      let { props, context } = this;
28686      let rowCnt = props.cells.length;
28687      let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);
28688      let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);
28689      let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);
28690      let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);
28691      let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);
28692      let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
28693      let cellMinHeight = rowCnt >= 7 && props.clientWidth ? props.clientWidth / context.options.aspectRatio / 6 : null;
28694      return y2(NowTimer, { unit: "day" }, (nowDate, todayRange) => y2(_2, null, props.cells.map((cells, row) => y2(TableRow, {
28695        ref: this.rowRefs.createRef(row),
28696        key: cells.length ? cells[0].date.toISOString() : row,
28697        showDayNumbers: rowCnt > 1,
28698        showWeekNumbers: props.showWeekNumbers,
28699        todayRange,
28700        dateProfile: props.dateProfile,
28701        cells,
28702        renderIntro: props.renderRowIntro,
28703        businessHourSegs: businessHourSegsByRow[row],
28704        eventSelection: props.eventSelection,
28705        bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay),
28706        fgEventSegs: fgEventSegsByRow[row],
28707        dateSelectionSegs: dateSelectionSegsByRow[row],
28708        eventDrag: eventDragByRow[row],
28709        eventResize: eventResizeByRow[row],
28710        dayMaxEvents: props.dayMaxEvents,
28711        dayMaxEventRows: props.dayMaxEventRows,
28712        clientWidth: props.clientWidth,
28713        clientHeight: props.clientHeight,
28714        cellMinHeight,
28715        forPrint: props.forPrint
28716      }))));
28717    }
28718    componentDidMount() {
28719      this.registerInteractiveComponent();
28720    }
28721    componentDidUpdate() {
28722      this.registerInteractiveComponent();
28723    }
28724    registerInteractiveComponent() {
28725      if (!this.rootEl) {
28726        const firstCellEl = this.rowRefs.currentMap[0].getCellEls()[0];
28727        const rootEl = firstCellEl ? firstCellEl.closest(".fc-daygrid-body") : null;
28728        if (rootEl) {
28729          this.rootEl = rootEl;
28730          this.context.registerInteractiveComponent(this, {
28731            el: rootEl,
28732            isHitComboAllowed: this.props.isHitComboAllowed
28733          });
28734        }
28735      }
28736    }
28737    componentWillUnmount() {
28738      if (this.rootEl) {
28739        this.context.unregisterInteractiveComponent(this);
28740        this.rootEl = null;
28741      }
28742    }
28743    prepareHits() {
28744      this.rowPositions = new PositionCache(
28745        this.rootEl,
28746        this.rowRefs.collect().map((rowObj) => rowObj.getCellEls()[0]),
28747        false,
28748        true
28749      );
28750      this.colPositions = new PositionCache(
28751        this.rootEl,
28752        this.rowRefs.currentMap[0].getCellEls(),
28753        true,
28754        false
28755      );
28756    }
28757    queryHit(positionLeft, positionTop) {
28758      let { colPositions, rowPositions } = this;
28759      let col = colPositions.leftToIndex(positionLeft);
28760      let row = rowPositions.topToIndex(positionTop);
28761      if (row != null && col != null) {
28762        let cell = this.props.cells[row][col];
28763        return {
28764          dateProfile: this.props.dateProfile,
28765          dateSpan: Object.assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),
28766          dayEl: this.getCellEl(row, col),
28767          rect: {
28768            left: colPositions.lefts[col],
28769            right: colPositions.rights[col],
28770            top: rowPositions.tops[row],
28771            bottom: rowPositions.bottoms[row]
28772          },
28773          layer: 0
28774        };
28775      }
28776      return null;
28777    }
28778    getCellEl(row, col) {
28779      return this.rowRefs.currentMap[row].getCellEls()[col];
28780    }
28781    getCellRange(row, col) {
28782      let start5 = this.props.cells[row][col].date;
28783      let end2 = addDays(start5, 1);
28784      return { start: start5, end: end2 };
28785    }
28786  };
28787  function isSegAllDay(seg) {
28788    return seg.eventRange.def.allDay;
28789  }
28790  var Table = class extends DateComponent {
28791    constructor() {
28792      super(...arguments);
28793      this.elRef = d2();
28794      this.needsScrollReset = false;
28795    }
28796    render() {
28797      let { props } = this;
28798      let { dayMaxEventRows, dayMaxEvents, expandRows } = props;
28799      let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;
28800      if (limitViaBalanced && !expandRows) {
28801        limitViaBalanced = false;
28802        dayMaxEventRows = null;
28803        dayMaxEvents = null;
28804      }
28805      let classNames = [
28806        "fc-daygrid-body",
28807        limitViaBalanced ? "fc-daygrid-body-balanced" : "fc-daygrid-body-unbalanced",
28808        expandRows ? "" : "fc-daygrid-body-natural"
28809      ];
28810      return y2(
28811        "div",
28812        { ref: this.elRef, className: classNames.join(" "), style: {
28813          width: props.clientWidth,
28814          minWidth: props.tableMinWidth
28815        } },
28816        y2(
28817          "table",
28818          { role: "presentation", className: "fc-scrollgrid-sync-table", style: {
28819            width: props.clientWidth,
28820            minWidth: props.tableMinWidth,
28821            height: expandRows ? props.clientHeight : ""
28822          } },
28823          props.colGroupNode,
28824          y2(
28825            "tbody",
28826            { role: "presentation" },
28827            y2(TableRows, { dateProfile: props.dateProfile, cells: props.cells, renderRowIntro: props.renderRowIntro, showWeekNumbers: props.showWeekNumbers, clientWidth: props.clientWidth, clientHeight: props.clientHeight, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, dayMaxEvents, dayMaxEventRows, forPrint: props.forPrint, isHitComboAllowed: props.isHitComboAllowed })
28828          )
28829        )
28830      );
28831    }
28832    componentDidMount() {
28833      this.requestScrollReset();
28834    }
28835    componentDidUpdate(prevProps) {
28836      if (prevProps.dateProfile !== this.props.dateProfile) {
28837        this.requestScrollReset();
28838      } else {
28839        this.flushScrollReset();
28840      }
28841    }
28842    requestScrollReset() {
28843      this.needsScrollReset = true;
28844      this.flushScrollReset();
28845    }
28846    flushScrollReset() {
28847      if (this.needsScrollReset && this.props.clientWidth) {
28848        const subjectEl = getScrollSubjectEl(this.elRef.current, this.props.dateProfile);
28849        if (subjectEl) {
28850          const originEl = subjectEl.closest(".fc-daygrid-body");
28851          const scrollEl = originEl.closest(".fc-scroller");
28852          const scrollTop = subjectEl.getBoundingClientRect().top - originEl.getBoundingClientRect().top;
28853          scrollEl.scrollTop = scrollTop ? scrollTop + 1 : 0;
28854        }
28855        this.needsScrollReset = false;
28856      }
28857    }
28858  };
28859  function getScrollSubjectEl(containerEl, dateProfile) {
28860    let el;
28861    if (dateProfile.currentRangeUnit.match(/year|month/)) {
28862      el = containerEl.querySelector(`[data-date="${formatIsoMonthStr(dateProfile.currentDate)}-01"]`);
28863    }
28864    if (!el) {
28865      el = containerEl.querySelector(`[data-date="${formatDayString(dateProfile.currentDate)}"]`);
28866    }
28867    return el;
28868  }
28869  var DayTableSlicer = class extends Slicer {
28870    constructor() {
28871      super(...arguments);
28872      this.forceDayIfListItem = true;
28873    }
28874    sliceRange(dateRange, dayTableModel) {
28875      return dayTableModel.sliceRange(dateRange);
28876    }
28877  };
28878  var DayTable = class extends DateComponent {
28879    constructor() {
28880      super(...arguments);
28881      this.slicer = new DayTableSlicer();
28882      this.tableRef = d2();
28883    }
28884    render() {
28885      let { props, context } = this;
28886      return y2(Table, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint }));
28887    }
28888  };
28889  var DayTableView = class extends TableView {
28890    constructor() {
28891      super(...arguments);
28892      this.buildDayTableModel = memoize(buildDayTableModel);
28893      this.headerRef = d2();
28894      this.tableRef = d2();
28895    }
28896    render() {
28897      let { options, dateProfileGenerator } = this.context;
28898      let { props } = this;
28899      let dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);
28900      let headerContent = options.dayHeaders && y2(DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 });
28901      let bodyContent = (contentArg) => y2(DayTable, { ref: this.tableRef, dateProfile: props.dateProfile, dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint });
28902      return options.dayMinWidth ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth) : this.renderSimpleLayout(headerContent, bodyContent);
28903    }
28904  };
28905  function buildDayTableModel(dateProfile, dateProfileGenerator) {
28906    let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
28907    return new DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
28908  }
28909  var TableDateProfileGenerator = class extends DateProfileGenerator {
28910    buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
28911      let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);
28912      let { props } = this;
28913      return buildDayTableRenderRange({
28914        currentRange: renderRange,
28915        snapToWeek: /^(year|month)$/.test(currentRangeUnit),
28916        fixedWeekCount: props.fixedWeekCount,
28917        dateEnv: props.dateEnv
28918      });
28919    }
28920  };
28921  function buildDayTableRenderRange(props) {
28922    let { dateEnv, currentRange } = props;
28923    let { start: start5, end: end2 } = currentRange;
28924    let endOfWeek;
28925    if (props.snapToWeek) {
28926      start5 = dateEnv.startOfWeek(start5);
28927      endOfWeek = dateEnv.startOfWeek(end2);
28928      if (endOfWeek.valueOf() !== end2.valueOf()) {
28929        end2 = addWeeks(endOfWeek, 1);
28930      }
28931    }
28932    if (props.fixedWeekCount) {
28933      let lastMonthRenderStart = dateEnv.startOfWeek(dateEnv.startOfMonth(addDays(currentRange.end, -1)));
28934      let rowCnt = Math.ceil(
28935        diffWeeks(lastMonthRenderStart, end2)
28936      );
28937      end2 = addWeeks(end2, 6 - rowCnt);
28938    }
28939    return { start: start5, end: end2 };
28940  }
28941  var css_248z2 = ':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-month-start{font-size:1.1em;font-weight:700}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;margin:0 2px}.fc .fc-daygrid-day-bottom:after,.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{border-radius:3px;cursor:pointer;line-height:1;margin-top:1px;max-width:100%;overflow:hidden;padding:2px;position:relative;white-space:nowrap;z-index:4}.fc .fc-daygrid-more-link:hover{background-color:rgba(0,0,0,.1)}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-more-link{float:left}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-more-link{float:right}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}';
28942  injectStyles(css_248z2);
28943
28944  
vendor: 665 bytes, lines 28944-28973
28944// node_modules/@fullcalendar/daygrid/index.js
28945  var index = createPlugin({
28946    name: "@fullcalendar/daygrid",
28947    initialView: "dayGridMonth",
28948    views: {
28949      dayGrid: {
28950        component: DayTableView,
28951        dateProfileGeneratorClass: TableDateProfileGenerator
28952      },
28953      dayGridDay: {
28954        type: "dayGrid",
28955        duration: { days: 1 }
28956      },
28957      dayGridWeek: {
28958        type: "dayGrid",
28959        duration: { weeks: 1 }
28960      },
28961      dayGridMonth: {
28962        type: "dayGrid",
28963        duration: { months: 1 },
28964        fixedWeekCount: true
28965      },
28966      dayGridYear: {
28967        type: "dayGrid",
28968        duration: { years: 1 }
28969      }
28970    }
28971  });
28972
28973  
vendor: 51,896 bytes, lines 28973-30098
28973// node_modules/@fullcalendar/timegrid/internal.js
28974  var AllDaySplitter = class extends Splitter {
28975    getKeyInfo() {
28976      return {
28977        allDay: {},
28978        timed: {}
28979      };
28980    }
28981    getKeysForDateSpan(dateSpan) {
28982      if (dateSpan.allDay) {
28983        return ["allDay"];
28984      }
28985      return ["timed"];
28986    }
28987    getKeysForEventDef(eventDef) {
28988      if (!eventDef.allDay) {
28989        return ["timed"];
28990      }
28991      if (hasBgRendering(eventDef)) {
28992        return ["timed", "allDay"];
28993      }
28994      return ["allDay"];
28995    }
28996  };
28997  var DEFAULT_SLAT_LABEL_FORMAT = createFormatter({
28998    hour: "numeric",
28999    minute: "2-digit",
29000    omitZeroMinute: true,
29001    meridiem: "short"
29002  });
29003  function TimeColsAxisCell(props) {
29004    let classNames = [
29005      "fc-timegrid-slot",
29006      "fc-timegrid-slot-label",
29007      props.isLabeled ? "fc-scrollgrid-shrink" : "fc-timegrid-slot-minor"
29008    ];
29009    return y2(ViewContextType.Consumer, null, (context) => {
29010      if (!props.isLabeled) {
29011        return y2("td", { className: classNames.join(" "), "data-time": props.isoTimeStr });
29012      }
29013      let { dateEnv, options, viewApi } = context;
29014      let labelFormat = options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT : Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) : createFormatter(options.slotLabelFormat);
29015      let renderProps = {
29016        level: 0,
29017        time: props.time,
29018        date: dateEnv.toDate(props.date),
29019        view: viewApi,
29020        text: dateEnv.format(props.date, labelFormat)
29021      };
29022      return y2(ContentContainer, { elTag: "td", elClasses: classNames, elAttrs: {
29023        "data-time": props.isoTimeStr
29024      }, renderProps, generatorName: "slotLabelContent", customGenerator: options.slotLabelContent, defaultGenerator: renderInnerContent3, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => y2(
29025        "div",
29026        { className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
29027        y2(InnerContent, { elTag: "div", elClasses: [
29028          "fc-timegrid-slot-label-cushion",
29029          "fc-scrollgrid-shrink-cushion"
29030        ] })
29031      ));
29032    });
29033  }
29034  function renderInnerContent3(props) {
29035    return props.text;
29036  }
29037  var TimeBodyAxis = class extends BaseComponent {
29038    render() {
29039      return this.props.slatMetas.map((slatMeta) => y2(
29040        "tr",
29041        { key: slatMeta.key },
29042        y2(TimeColsAxisCell, Object.assign({}, slatMeta))
29043      ));
29044    }
29045  };
29046  var DEFAULT_WEEK_NUM_FORMAT2 = createFormatter({ week: "short" });
29047  var AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;
29048  var TimeColsView = class extends DateComponent {
29049    constructor() {
29050      super(...arguments);
29051      this.allDaySplitter = new AllDaySplitter();
29052      this.headerElRef = d2();
29053      this.rootElRef = d2();
29054      this.scrollerElRef = d2();
29055      this.state = {
29056        slatCoords: null
29057      };
29058      this.handleScrollTopRequest = (scrollTop) => {
29059        let scrollerEl = this.scrollerElRef.current;
29060        if (scrollerEl) {
29061          scrollerEl.scrollTop = scrollTop;
29062        }
29063      };
29064      this.renderHeadAxis = (rowKey, frameHeight = "") => {
29065        let { options } = this.context;
29066        let { dateProfile } = this.props;
29067        let range = dateProfile.renderRange;
29068        let dayCnt = diffDays(range.start, range.end);
29069        let navLinkAttrs = dayCnt === 1 ? buildNavLinkAttrs(this.context, range.start, "week") : {};
29070        if (options.weekNumbers && rowKey === "day") {
29071          return y2(WeekNumberContainer, { elTag: "th", elClasses: [
29072            "fc-timegrid-axis",
29073            "fc-scrollgrid-shrink"
29074          ], elAttrs: {
29075            "aria-hidden": true
29076          }, date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT2 }, (InnerContent) => y2(
29077            "div",
29078            { className: [
29079              "fc-timegrid-axis-frame",
29080              "fc-scrollgrid-shrink-frame",
29081              "fc-timegrid-axis-frame-liquid"
29082            ].join(" "), style: { height: frameHeight } },
29083            y2(InnerContent, { elTag: "a", elClasses: [
29084              "fc-timegrid-axis-cushion",
29085              "fc-scrollgrid-shrink-cushion",
29086              "fc-scrollgrid-sync-inner"
29087            ], elAttrs: navLinkAttrs })
29088          ));
29089        }
29090        return y2(
29091          "th",
29092          { "aria-hidden": true, className: "fc-timegrid-axis" },
29093          y2("div", { className: "fc-timegrid-axis-frame", style: { height: frameHeight } })
29094        );
29095      };
29096      this.renderTableRowAxis = (rowHeight) => {
29097        let { options, viewApi } = this.context;
29098        let renderProps = {
29099          text: options.allDayText,
29100          view: viewApi
29101        };
29102        return y2(ContentContainer, { elTag: "td", elClasses: [
29103          "fc-timegrid-axis",
29104          "fc-scrollgrid-shrink"
29105        ], elAttrs: {
29106          "aria-hidden": true
29107        }, renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => y2(
29108          "div",
29109          { className: [
29110            "fc-timegrid-axis-frame",
29111            "fc-scrollgrid-shrink-frame",
29112            rowHeight == null ? " fc-timegrid-axis-frame-liquid" : ""
29113          ].join(" "), style: { height: rowHeight } },
29114          y2(InnerContent, { elTag: "span", elClasses: [
29115            "fc-timegrid-axis-cushion",
29116            "fc-scrollgrid-shrink-cushion",
29117            "fc-scrollgrid-sync-inner"
29118          ] })
29119        ));
29120      };
29121      this.handleSlatCoords = (slatCoords) => {
29122        this.setState({ slatCoords });
29123      };
29124    }
29125    renderSimpleLayout(headerRowContent, allDayContent, timeContent) {
29126      let { context, props } = this;
29127      let sections = [];
29128      let stickyHeaderDates = getStickyHeaderDates(context.options);
29129      if (headerRowContent) {
29130        sections.push({
29131          type: "header",
29132          key: "header",
29133          isSticky: stickyHeaderDates,
29134          chunk: {
29135            elRef: this.headerElRef,
29136            tableClassName: "fc-col-header",
29137            rowContent: headerRowContent
29138          }
29139        });
29140      }
29141      if (allDayContent) {
29142        sections.push({
29143          type: "body",
29144          key: "all-day",
29145          chunk: { content: allDayContent }
29146        });
29147        sections.push({
29148          type: "body",
29149          key: "all-day-divider",
29150          outerContent: y2(
29151            "tr",
29152            { role: "presentation", className: "fc-scrollgrid-section" },
29153            y2("td", { className: "fc-timegrid-divider " + context.theme.getClass("tableCellShaded") })
29154          )
29155        });
29156      }
29157      sections.push({
29158        type: "body",
29159        key: "body",
29160        liquid: true,
29161        expandRows: Boolean(context.options.expandRows),
29162        chunk: {
29163          scrollerElRef: this.scrollerElRef,
29164          content: timeContent
29165        }
29166      });
29167      return y2(
29168        ViewContainer,
29169        { elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: context.viewSpec },
29170        y2(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: "shrink" }], sections })
29171      );
29172    }
29173    renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {
29174      let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
29175      if (!ScrollGrid) {
29176        throw new Error("No ScrollGrid implementation");
29177      }
29178      let { context, props } = this;
29179      let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
29180      let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
29181      let sections = [];
29182      if (headerRowContent) {
29183        sections.push({
29184          type: "header",
29185          key: "header",
29186          isSticky: stickyHeaderDates,
29187          syncRowHeights: true,
29188          chunks: [
29189            {
29190              key: "axis",
29191              rowContent: (arg) => y2("tr", { role: "presentation" }, this.renderHeadAxis("day", arg.rowSyncHeights[0]))
29192            },
29193            {
29194              key: "cols",
29195              elRef: this.headerElRef,
29196              tableClassName: "fc-col-header",
29197              rowContent: headerRowContent
29198            }
29199          ]
29200        });
29201      }
29202      if (allDayContent) {
29203        sections.push({
29204          type: "body",
29205          key: "all-day",
29206          syncRowHeights: true,
29207          chunks: [
29208            {
29209              key: "axis",
29210              rowContent: (contentArg) => y2("tr", { role: "presentation" }, this.renderTableRowAxis(contentArg.rowSyncHeights[0]))
29211            },
29212            {
29213              key: "cols",
29214              content: allDayContent
29215            }
29216          ]
29217        });
29218        sections.push({
29219          key: "all-day-divider",
29220          type: "body",
29221          outerContent: y2(
29222            "tr",
29223            { role: "presentation", className: "fc-scrollgrid-section" },
29224            y2("td", { colSpan: 2, className: "fc-timegrid-divider " + context.theme.getClass("tableCellShaded") })
29225          )
29226        });
29227      }
29228      let isNowIndicator = context.options.nowIndicator;
29229      sections.push({
29230        type: "body",
29231        key: "body",
29232        liquid: true,
29233        expandRows: Boolean(context.options.expandRows),
29234        chunks: [
29235          {
29236            key: "axis",
29237            content: (arg) => y2(
29238              "div",
29239              { className: "fc-timegrid-axis-chunk" },
29240              y2(
29241                "table",
29242                { "aria-hidden": true, style: { height: arg.expandRows ? arg.clientHeight : "" } },
29243                arg.tableColGroupNode,
29244                y2(
29245                  "tbody",
29246                  null,
29247                  y2(TimeBodyAxis, { slatMetas })
29248                )
29249              ),
29250              y2(
29251                "div",
29252                { className: "fc-timegrid-now-indicator-container" },
29253                y2(NowTimer, { unit: isNowIndicator ? "minute" : "day" }, (nowDate) => {
29254                  let nowIndicatorTop = isNowIndicator && slatCoords && slatCoords.safeComputeTop(nowDate);
29255                  if (typeof nowIndicatorTop === "number") {
29256                    return y2(NowIndicatorContainer, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: nowIndicatorTop }, isAxis: true, date: nowDate });
29257                  }
29258                  return null;
29259                })
29260              )
29261            )
29262          },
29263          {
29264            key: "cols",
29265            scrollerElRef: this.scrollerElRef,
29266            content: timeContent
29267          }
29268        ]
29269      });
29270      if (stickyFooterScrollbar) {
29271        sections.push({
29272          key: "footer",
29273          type: "footer",
29274          isSticky: true,
29275          chunks: [
29276            {
29277              key: "axis",
29278              content: renderScrollShim
29279            },
29280            {
29281              key: "cols",
29282              content: renderScrollShim
29283            }
29284          ]
29285        });
29286      }
29287      return y2(
29288        ViewContainer,
29289        { elRef: this.rootElRef, elClasses: ["fc-timegrid"], viewSpec: context.viewSpec },
29290        y2(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, forPrint: props.forPrint, collapsibleWidth: false, colGroups: [
29291          { width: "shrink", cols: [{ width: "shrink" }] },
29292          { cols: [{ span: colCnt, minWidth: dayMinWidth }] }
29293        ], sections })
29294      );
29295    }
29296    getAllDayMaxEventProps() {
29297      let { dayMaxEvents, dayMaxEventRows } = this.context.options;
29298      if (dayMaxEvents === true || dayMaxEventRows === true) {
29299        dayMaxEvents = void 0;
29300        dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS;
29301      }
29302      return { dayMaxEvents, dayMaxEventRows };
29303    }
29304  };
29305  function renderAllDayInner(renderProps) {
29306    return renderProps.text;
29307  }
29308  var TimeColsSlatsCoords = class {
29309    constructor(positions, dateProfile, slotDuration) {
29310      this.positions = positions;
29311      this.dateProfile = dateProfile;
29312      this.slotDuration = slotDuration;
29313    }
29314    safeComputeTop(date) {
29315      let { dateProfile } = this;
29316      if (rangeContainsMarker(dateProfile.currentRange, date)) {
29317        let startOfDayDate = startOfDay(date);
29318        let timeMs = date.valueOf() - startOfDayDate.valueOf();
29319        if (timeMs >= asRoughMs(dateProfile.slotMinTime) && timeMs < asRoughMs(dateProfile.slotMaxTime)) {
29320          return this.computeTimeTop(createDuration(timeMs));
29321        }
29322      }
29323      return null;
29324    }
29325    computeDateTop(when, startOfDayDate) {
29326      if (!startOfDayDate) {
29327        startOfDayDate = startOfDay(when);
29328      }
29329      return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));
29330    }
29331    computeTimeTop(duration) {
29332      let { positions, dateProfile } = this;
29333      let len = positions.els.length;
29334      let slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);
29335      let slatIndex;
29336      let slatRemainder;
29337      slatCoverage = Math.max(0, slatCoverage);
29338      slatCoverage = Math.min(len, slatCoverage);
29339      slatIndex = Math.floor(slatCoverage);
29340      slatIndex = Math.min(slatIndex, len - 1);
29341      slatRemainder = slatCoverage - slatIndex;
29342      return positions.tops[slatIndex] + positions.getHeight(slatIndex) * slatRemainder;
29343    }
29344  };
29345  var TimeColsSlatsBody = class extends BaseComponent {
29346    render() {
29347      let { props, context } = this;
29348      let { options } = context;
29349      let { slatElRefs } = props;
29350      return y2("tbody", null, props.slatMetas.map((slatMeta, i4) => {
29351        let renderProps = {
29352          time: slatMeta.time,
29353          date: context.dateEnv.toDate(slatMeta.date),
29354          view: context.viewApi
29355        };
29356        return y2(
29357          "tr",
29358          { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },
29359          props.axis && y2(TimeColsAxisCell, Object.assign({}, slatMeta)),
29360          y2(ContentContainer, { elTag: "td", elClasses: [
29361            "fc-timegrid-slot",
29362            "fc-timegrid-slot-lane",
29363            !slatMeta.isLabeled && "fc-timegrid-slot-minor"
29364          ], elAttrs: {
29365            "data-time": slatMeta.isoTimeStr
29366          }, renderProps, generatorName: "slotLaneContent", customGenerator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount })
29367        );
29368      }));
29369    }
29370  };
29371  var TimeColsSlats = class extends BaseComponent {
29372    constructor() {
29373      super(...arguments);
29374      this.rootElRef = d2();
29375      this.slatElRefs = new RefMap();
29376    }
29377    render() {
29378      let { props, context } = this;
29379      return y2(
29380        "div",
29381        { ref: this.rootElRef, className: "fc-timegrid-slots" },
29382        y2(
29383          "table",
29384          { "aria-hidden": true, className: context.theme.getClass("table"), style: {
29385            minWidth: props.tableMinWidth,
29386            width: props.clientWidth,
29387            height: props.minHeight
29388          } },
29389          props.tableColGroupNode,
29390          y2(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas })
29391        )
29392      );
29393    }
29394    componentDidMount() {
29395      this.updateSizing();
29396    }
29397    componentDidUpdate() {
29398      this.updateSizing();
29399    }
29400    componentWillUnmount() {
29401      if (this.props.onCoords) {
29402        this.props.onCoords(null);
29403      }
29404    }
29405    updateSizing() {
29406      let { context, props } = this;
29407      if (props.onCoords && props.clientWidth !== null) {
29408        let rootEl = this.rootElRef.current;
29409        if (rootEl.offsetHeight) {
29410          props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));
29411        }
29412      }
29413    }
29414  };
29415  function collectSlatEls(elMap, slatMetas) {
29416    return slatMetas.map((slatMeta) => elMap[slatMeta.key]);
29417  }
29418  function splitSegsByCol(segs, colCnt) {
29419    let segsByCol = [];
29420    let i4;
29421    for (i4 = 0; i4 < colCnt; i4 += 1) {
29422      segsByCol.push([]);
29423    }
29424    if (segs) {
29425      for (i4 = 0; i4 < segs.length; i4 += 1) {
29426        segsByCol[segs[i4].col].push(segs[i4]);
29427      }
29428    }
29429    return segsByCol;
29430  }
29431  function splitInteractionByCol(ui2, colCnt) {
29432    let byRow = [];
29433    if (!ui2) {
29434      for (let i4 = 0; i4 < colCnt; i4 += 1) {
29435        byRow[i4] = null;
29436      }
29437    } else {
29438      for (let i4 = 0; i4 < colCnt; i4 += 1) {
29439        byRow[i4] = {
29440          affectedInstances: ui2.affectedInstances,
29441          isEvent: ui2.isEvent,
29442          segs: []
29443        };
29444      }
29445      for (let seg of ui2.segs) {
29446        byRow[seg.col].segs.push(seg);
29447      }
29448    }
29449    return byRow;
29450  }
29451  var TimeColMoreLink = class extends BaseComponent {
29452    render() {
29453      let { props } = this;
29454      return y2(MoreLinkContainer, { elClasses: ["fc-timegrid-more-link"], elStyle: {
29455        top: props.top,
29456        bottom: props.bottom
29457      }, allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: () => renderPlainFgSegs(props.hiddenSegs, props), defaultGenerator: renderMoreLinkInner2, forceTimed: true }, (InnerContent) => y2(InnerContent, { elTag: "div", elClasses: ["fc-timegrid-more-link-inner", "fc-sticky"] }));
29458    }
29459  };
29460  function renderMoreLinkInner2(props) {
29461    return props.shortText;
29462  }
29463  function buildPositioning(segInputs, strictOrder, maxStackCnt) {
29464    let hierarchy = new SegHierarchy();
29465    if (strictOrder != null) {
29466      hierarchy.strictOrder = strictOrder;
29467    }
29468    if (maxStackCnt != null) {
29469      hierarchy.maxStackCnt = maxStackCnt;
29470    }
29471    let hiddenEntries = hierarchy.addSegs(segInputs);
29472    let hiddenGroups = groupIntersectingEntries(hiddenEntries);
29473    let web = buildWeb(hierarchy);
29474    web = stretchWeb(web, 1);
29475    let segRects = webToRects(web);
29476    return { segRects, hiddenGroups };
29477  }
29478  function buildWeb(hierarchy) {
29479    const { entriesByLevel } = hierarchy;
29480    const buildNode = cacheable((level, lateral) => level + ":" + lateral, (level, lateral) => {
29481      let siblingRange = findNextLevelSegs(hierarchy, level, lateral);
29482      let nextLevelRes = buildNodes(siblingRange, buildNode);
29483      let entry = entriesByLevel[level][lateral];
29484      return [
29485        Object.assign(Object.assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),
29486        entry.thickness + nextLevelRes[1]
29487      ];
29488    });
29489    return buildNodes(entriesByLevel.length ? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length } : null, buildNode)[0];
29490  }
29491  function buildNodes(siblingRange, buildNode) {
29492    if (!siblingRange) {
29493      return [[], 0];
29494    }
29495    let { level, lateralStart, lateralEnd } = siblingRange;
29496    let lateral = lateralStart;
29497    let pairs = [];
29498    while (lateral < lateralEnd) {
29499      pairs.push(buildNode(level, lateral));
29500      lateral += 1;
29501    }
29502    pairs.sort(cmpDescPressures);
29503    return [
29504      pairs.map(extractNode),
29505      pairs[0][1]
29506    ];
29507  }
29508  function cmpDescPressures(a4, b4) {
29509    return b4[1] - a4[1];
29510  }
29511  function extractNode(a4) {
29512    return a4[0];
29513  }
29514  function findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {
29515    let { levelCoords, entriesByLevel } = hierarchy;
29516    let subjectEntry = entriesByLevel[subjectLevel][subjectLateral];
29517    let afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;
29518    let levelCnt = levelCoords.length;
29519    let level = subjectLevel;
29520    for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)
29521      ;
29522    for (; level < levelCnt; level += 1) {
29523      let entries = entriesByLevel[level];
29524      let entry;
29525      let searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);
29526      let lateralStart = searchIndex[0] + searchIndex[1];
29527      let lateralEnd = lateralStart;
29528      while ((entry = entries[lateralEnd]) && entry.span.start < subjectEntry.span.end) {
29529        lateralEnd += 1;
29530      }
29531      if (lateralStart < lateralEnd) {
29532        return { level, lateralStart, lateralEnd };
29533      }
29534    }
29535    return null;
29536  }
29537  function stretchWeb(topLevelNodes, totalThickness) {
29538    const stretchNode = cacheable((node, startCoord, prevThickness) => buildEntryKey(node), (node, startCoord, prevThickness) => {
29539      let { nextLevelNodes, thickness } = node;
29540      let allThickness = thickness + prevThickness;
29541      let thicknessFraction = thickness / allThickness;
29542      let endCoord;
29543      let newChildren = [];
29544      if (!nextLevelNodes.length) {
29545        endCoord = totalThickness;
29546      } else {
29547        for (let childNode of nextLevelNodes) {
29548          if (endCoord === void 0) {
29549            let res = stretchNode(childNode, startCoord, allThickness);
29550            endCoord = res[0];
29551            newChildren.push(res[1]);
29552          } else {
29553            let res = stretchNode(childNode, endCoord, 0);
29554            newChildren.push(res[1]);
29555          }
29556        }
29557      }
29558      let newThickness = (endCoord - startCoord) * thicknessFraction;
29559      return [endCoord - newThickness, Object.assign(Object.assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];
29560    });
29561    return topLevelNodes.map((node) => stretchNode(node, 0, 0)[1]);
29562  }
29563  function webToRects(topLevelNodes) {
29564    let rects = [];
29565    const processNode = cacheable((node, levelCoord, stackDepth) => buildEntryKey(node), (node, levelCoord, stackDepth) => {
29566      let rect = Object.assign(Object.assign({}, node), {
29567        levelCoord,
29568        stackDepth,
29569        stackForward: 0
29570      });
29571      rects.push(rect);
29572      return rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1;
29573    });
29574    function processNodes(nodes, levelCoord, stackDepth) {
29575      let stackForward = 0;
29576      for (let node of nodes) {
29577        stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);
29578      }
29579      return stackForward;
29580    }
29581    processNodes(topLevelNodes, 0, 0);
29582    return rects;
29583  }
29584  function cacheable(keyFunc, workFunc) {
29585    const cache2 = {};
29586    return (...args) => {
29587      let key = keyFunc(...args);
29588      return key in cache2 ? cache2[key] : cache2[key] = workFunc(...args);
29589    };
29590  }
29591  function computeSegVCoords(segs, colDate, slatCoords = null, eventMinHeight = 0) {
29592    let vcoords = [];
29593    if (slatCoords) {
29594      for (let i4 = 0; i4 < segs.length; i4 += 1) {
29595        let seg = segs[i4];
29596        let spanStart = slatCoords.computeDateTop(seg.start, colDate);
29597        let spanEnd = Math.max(
29598          spanStart + (eventMinHeight || 0),
29599          slatCoords.computeDateTop(seg.end, colDate)
29600        );
29601        vcoords.push({
29602          start: Math.round(spanStart),
29603          end: Math.round(spanEnd)
29604        });
29605      }
29606    }
29607    return vcoords;
29608  }
29609  function computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack) {
29610    let segInputs = [];
29611    let dumbSegs = [];
29612    for (let i4 = 0; i4 < segs.length; i4 += 1) {
29613      let vcoords = segVCoords[i4];
29614      if (vcoords) {
29615        segInputs.push({
29616          index: i4,
29617          thickness: 1,
29618          span: vcoords
29619        });
29620      } else {
29621        dumbSegs.push(segs[i4]);
29622      }
29623    }
29624    let { segRects, hiddenGroups } = buildPositioning(segInputs, eventOrderStrict, eventMaxStack);
29625    let segPlacements = [];
29626    for (let segRect of segRects) {
29627      segPlacements.push({
29628        seg: segs[segRect.index],
29629        rect: segRect
29630      });
29631    }
29632    for (let dumbSeg of dumbSegs) {
29633      segPlacements.push({ seg: dumbSeg, rect: null });
29634    }
29635    return { segPlacements, hiddenGroups };
29636  }
29637  var DEFAULT_TIME_FORMAT = createFormatter({
29638    hour: "numeric",
29639    minute: "2-digit",
29640    meridiem: false
29641  });
29642  var TimeColEvent = class extends BaseComponent {
29643    render() {
29644      return y2(StandardEvent, Object.assign({}, this.props, { elClasses: [
29645        "fc-timegrid-event",
29646        "fc-v-event",
29647        this.props.isShort && "fc-timegrid-event-short"
29648      ], defaultTimeFormat: DEFAULT_TIME_FORMAT }));
29649    }
29650  };
29651  var TimeCol = class extends BaseComponent {
29652    constructor() {
29653      super(...arguments);
29654      this.sortEventSegs = memoize(sortEventSegs);
29655    }
29656    render() {
29657      let { props, context } = this;
29658      let { options } = context;
29659      let isSelectMirror = options.selectMirror;
29660      let mirrorSegs = props.eventDrag && props.eventDrag.segs || props.eventResize && props.eventResize.segs || isSelectMirror && props.dateSelectionSegs || [];
29661      let interactionAffectedInstances = props.eventDrag && props.eventDrag.affectedInstances || props.eventResize && props.eventResize.affectedInstances || {};
29662      let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);
29663      return y2(DayCellContainer, { elTag: "td", elRef: props.elRef, elClasses: [
29664        "fc-timegrid-col",
29665        ...props.extraClassNames || []
29666      ], elAttrs: Object.assign({ role: "gridcell" }, props.extraDataAttrs), date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraRenderProps: props.extraRenderProps }, (InnerContent) => y2(
29667        "div",
29668        { className: "fc-timegrid-col-frame" },
29669        y2(
29670          "div",
29671          { className: "fc-timegrid-col-bg" },
29672          this.renderFillSegs(props.businessHourSegs, "non-business"),
29673          this.renderFillSegs(props.bgEventSegs, "bg-event"),
29674          this.renderFillSegs(props.dateSelectionSegs, "highlight")
29675        ),
29676        y2("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),
29677        y2("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror), "mirror")),
29678        y2("div", { className: "fc-timegrid-now-indicator-container" }, this.renderNowIndicator(props.nowIndicatorSegs)),
29679        hasCustomDayCellContent(options) && y2(InnerContent, { elTag: "div", elClasses: ["fc-timegrid-col-misc"] })
29680      ));
29681    }
29682    renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {
29683      let { props } = this;
29684      if (props.forPrint) {
29685        return renderPlainFgSegs(sortedFgSegs, props);
29686      }
29687      return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey);
29688    }
29689    renderPositionedFgSegs(segs, segIsInvisible, isDragging, isResizing, isDateSelecting, forcedKey) {
29690      let { eventMaxStack, eventShortHeight, eventOrderStrict, eventMinHeight } = this.context.options;
29691      let { date, slatCoords, eventSelection, todayRange, nowDate } = this.props;
29692      let isMirror = isDragging || isResizing || isDateSelecting;
29693      let segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);
29694      let { segPlacements, hiddenGroups } = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack);
29695      return y2(
29696        _2,
29697        null,
29698        this.renderHiddenGroups(hiddenGroups, segs),
29699        segPlacements.map((segPlacement) => {
29700          let { seg, rect } = segPlacement;
29701          let instanceId = seg.eventRange.instance.instanceId;
29702          let isVisible2 = isMirror || Boolean(!segIsInvisible[instanceId] && rect);
29703          let vStyle = computeSegVStyle(rect && rect.span);
29704          let hStyle = !isMirror && rect ? this.computeSegHStyle(rect) : { left: 0, right: 0 };
29705          let isInset = Boolean(rect) && rect.stackForward > 0;
29706          let isShort = Boolean(rect) && rect.span.end - rect.span.start < eventShortHeight;
29707          return y2(
29708            "div",
29709            { className: "fc-timegrid-event-harness" + (isInset ? " fc-timegrid-event-harness-inset" : ""), key: forcedKey || instanceId, style: Object.assign(Object.assign({ visibility: isVisible2 ? "" : "hidden" }, vStyle), hStyle) },
29710            y2(TimeColEvent, Object.assign({ seg, isDragging, isResizing, isDateSelecting, isSelected: instanceId === eventSelection, isShort }, getSegMeta(seg, todayRange, nowDate)))
29711          );
29712        })
29713      );
29714    }
29715    renderHiddenGroups(hiddenGroups, segs) {
29716      let { extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize } = this.props;
29717      return y2(_2, null, hiddenGroups.map((hiddenGroup) => {
29718        let positionCss = computeSegVStyle(hiddenGroup.span);
29719        let hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);
29720        return y2(TimeColMoreLink, { key: buildIsoString(computeEarliestSegStart(hiddenSegs)), hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize });
29721      }));
29722    }
29723    renderFillSegs(segs, fillType) {
29724      let { props, context } = this;
29725      let segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight);
29726      let children = segVCoords.map((vcoords, i4) => {
29727        let seg = segs[i4];
29728        return y2("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-timegrid-bg-harness", style: computeSegVStyle(vcoords) }, fillType === "bg-event" ? y2(BgEvent, Object.assign({ seg }, getSegMeta(seg, props.todayRange, props.nowDate))) : renderFill(fillType));
29729      });
29730      return y2(_2, null, children);
29731    }
29732    renderNowIndicator(segs) {
29733      let { slatCoords, date } = this.props;
29734      if (!slatCoords) {
29735        return null;
29736      }
29737      return segs.map((seg, i4) => y2(
29738        NowIndicatorContainer,
29739        {
29740          key: i4,
29741          elClasses: ["fc-timegrid-now-indicator-line"],
29742          elStyle: {
29743            top: slatCoords.computeDateTop(seg.start, date)
29744          },
29745          isAxis: false,
29746          date
29747        }
29748      ));
29749    }
29750    computeSegHStyle(segHCoords) {
29751      let { isRtl, options } = this.context;
29752      let shouldOverlap = options.slotEventOverlap;
29753      let nearCoord = segHCoords.levelCoord;
29754      let farCoord = segHCoords.levelCoord + segHCoords.thickness;
29755      let left2;
29756      let right2;
29757      if (shouldOverlap) {
29758        farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);
29759      }
29760      if (isRtl) {
29761        left2 = 1 - farCoord;
29762        right2 = nearCoord;
29763      } else {
29764        left2 = nearCoord;
29765        right2 = 1 - farCoord;
29766      }
29767      let props = {
29768        zIndex: segHCoords.stackDepth + 1,
29769        left: left2 * 100 + "%",
29770        right: right2 * 100 + "%"
29771      };
29772      if (shouldOverlap && !segHCoords.stackForward) {
29773        props[isRtl ? "marginLeft" : "marginRight"] = 10 * 2;
29774      }
29775      return props;
29776    }
29777  };
29778  function renderPlainFgSegs(sortedFgSegs, { todayRange, nowDate, eventSelection, eventDrag, eventResize }) {
29779    let hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) || (eventResize ? eventResize.affectedInstances : null) || {};
29780    return y2(_2, null, sortedFgSegs.map((seg) => {
29781      let instanceId = seg.eventRange.instance.instanceId;
29782      return y2(
29783        "div",
29784        { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? "hidden" : "" } },
29785        y2(TimeColEvent, Object.assign({ seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, getSegMeta(seg, todayRange, nowDate)))
29786      );
29787    }));
29788  }
29789  function computeSegVStyle(segVCoords) {
29790    if (!segVCoords) {
29791      return { top: "", bottom: "" };
29792    }
29793    return {
29794      top: segVCoords.start,
29795      bottom: -segVCoords.end
29796    };
29797  }
29798  function compileSegsFromEntries(segEntries, allSegs) {
29799    return segEntries.map((segEntry) => allSegs[segEntry.index]);
29800  }
29801  var TimeColsContent = class extends BaseComponent {
29802    constructor() {
29803      super(...arguments);
29804      this.splitFgEventSegs = memoize(splitSegsByCol);
29805      this.splitBgEventSegs = memoize(splitSegsByCol);
29806      this.splitBusinessHourSegs = memoize(splitSegsByCol);
29807      this.splitNowIndicatorSegs = memoize(splitSegsByCol);
29808      this.splitDateSelectionSegs = memoize(splitSegsByCol);
29809      this.splitEventDrag = memoize(splitInteractionByCol);
29810      this.splitEventResize = memoize(splitInteractionByCol);
29811      this.rootElRef = d2();
29812      this.cellElRefs = new RefMap();
29813    }
29814    render() {
29815      let { props, context } = this;
29816      let nowIndicatorTop = context.options.nowIndicator && props.slatCoords && props.slatCoords.safeComputeTop(props.nowDate);
29817      let colCnt = props.cells.length;
29818      let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);
29819      let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);
29820      let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);
29821      let nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);
29822      let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);
29823      let eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);
29824      let eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);
29825      return y2(
29826        "div",
29827        { className: "fc-timegrid-cols", ref: this.rootElRef },
29828        y2(
29829          "table",
29830          { role: "presentation", style: {
29831            minWidth: props.tableMinWidth,
29832            width: props.clientWidth
29833          } },
29834          props.tableColGroupNode,
29835          y2(
29836            "tbody",
29837            { role: "presentation" },
29838            y2(
29839              "tr",
29840              { role: "row" },
29841              props.axis && y2(
29842                "td",
29843                { "aria-hidden": true, className: "fc-timegrid-col fc-timegrid-axis" },
29844                y2(
29845                  "div",
29846                  { className: "fc-timegrid-col-frame" },
29847                  y2("div", { className: "fc-timegrid-now-indicator-container" }, typeof nowIndicatorTop === "number" && y2(NowIndicatorContainer, { elClasses: ["fc-timegrid-now-indicator-arrow"], elStyle: { top: nowIndicatorTop }, isAxis: true, date: props.nowDate }))
29848                )
29849              ),
29850              props.cells.map((cell, i4) => y2(TimeCol, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i4], bgEventSegs: bgEventSegsByRow[i4], businessHourSegs: businessHourSegsByRow[i4], nowIndicatorSegs: nowIndicatorSegsByRow[i4], dateSelectionSegs: dateSelectionSegsByRow[i4], eventDrag: eventDragByRow[i4], eventResize: eventResizeByRow[i4], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint }))
29851            )
29852          )
29853        )
29854      );
29855    }
29856    componentDidMount() {
29857      this.updateCoords();
29858    }
29859    componentDidUpdate() {
29860      this.updateCoords();
29861    }
29862    updateCoords() {
29863      let { props } = this;
29864      if (props.onColCoords && props.clientWidth !== null) {
29865        props.onColCoords(new PositionCache(
29866          this.rootElRef.current,
29867          collectCellEls(this.cellElRefs.currentMap, props.cells),
29868          true,
29869          false
29870        ));
29871      }
29872    }
29873  };
29874  function collectCellEls(elMap, cells) {
29875    return cells.map((cell) => elMap[cell.key]);
29876  }
29877  var TimeCols = class extends DateComponent {
29878    constructor() {
29879      super(...arguments);
29880      this.processSlotOptions = memoize(processSlotOptions);
29881      this.state = {
29882        slatCoords: null
29883      };
29884      this.handleRootEl = (el) => {
29885        if (el) {
29886          this.context.registerInteractiveComponent(this, {
29887            el,
29888            isHitComboAllowed: this.props.isHitComboAllowed
29889          });
29890        } else {
29891          this.context.unregisterInteractiveComponent(this);
29892        }
29893      };
29894      this.handleScrollRequest = (request) => {
29895        let { onScrollTopRequest } = this.props;
29896        let { slatCoords } = this.state;
29897        if (onScrollTopRequest && slatCoords) {
29898          if (request.time) {
29899            let top2 = slatCoords.computeTimeTop(request.time);
29900            top2 = Math.ceil(top2);
29901            if (top2) {
29902              top2 += 1;
29903            }
29904            onScrollTopRequest(top2);
29905          }
29906          return true;
29907        }
29908        return false;
29909      };
29910      this.handleColCoords = (colCoords) => {
29911        this.colCoords = colCoords;
29912      };
29913      this.handleSlatCoords = (slatCoords) => {
29914        this.setState({ slatCoords });
29915        if (this.props.onSlatCoords) {
29916          this.props.onSlatCoords(slatCoords);
29917        }
29918      };
29919    }
29920    render() {
29921      let { props, state } = this;
29922      return y2(
29923        "div",
29924        { className: "fc-timegrid-body", ref: this.handleRootEl, style: {
29925          width: props.clientWidth,
29926          minWidth: props.tableMinWidth
29927        } },
29928        y2(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : "", tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null, onCoords: this.handleSlatCoords }),
29929        y2(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })
29930      );
29931    }
29932    componentDidMount() {
29933      this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
29934    }
29935    componentDidUpdate(prevProps) {
29936      this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);
29937    }
29938    componentWillUnmount() {
29939      this.scrollResponder.detach();
29940    }
29941    queryHit(positionLeft, positionTop) {
29942      let { dateEnv, options } = this.context;
29943      let { colCoords } = this;
29944      let { dateProfile } = this.props;
29945      let { slatCoords } = this.state;
29946      let { snapDuration, snapsPerSlot } = this.processSlotOptions(this.props.slotDuration, options.snapDuration);
29947      let colIndex = colCoords.leftToIndex(positionLeft);
29948      let slatIndex = slatCoords.positions.topToIndex(positionTop);
29949      if (colIndex != null && slatIndex != null) {
29950        let cell = this.props.cells[colIndex];
29951        let slatTop = slatCoords.positions.tops[slatIndex];
29952        let slatHeight = slatCoords.positions.getHeight(slatIndex);
29953        let partial = (positionTop - slatTop) / slatHeight;
29954        let localSnapIndex = Math.floor(partial * snapsPerSlot);
29955        let snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
29956        let dayDate = this.props.cells[colIndex].date;
29957        let time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));
29958        let start5 = dateEnv.add(dayDate, time);
29959        let end2 = dateEnv.add(start5, snapDuration);
29960        return {
29961          dateProfile,
29962          dateSpan: Object.assign({ range: { start: start5, end: end2 }, allDay: false }, cell.extraDateSpan),
29963          dayEl: colCoords.els[colIndex],
29964          rect: {
29965            left: colCoords.lefts[colIndex],
29966            right: colCoords.rights[colIndex],
29967            top: slatTop,
29968            bottom: slatTop + slatHeight
29969          },
29970          layer: 0
29971        };
29972      }
29973      return null;
29974    }
29975  };
29976  function processSlotOptions(slotDuration, snapDurationOverride) {
29977    let snapDuration = snapDurationOverride || slotDuration;
29978    let snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);
29979    if (snapsPerSlot === null) {
29980      snapDuration = slotDuration;
29981      snapsPerSlot = 1;
29982    }
29983    return { snapDuration, snapsPerSlot };
29984  }
29985  var DayTimeColsSlicer = class extends Slicer {
29986    sliceRange(range, dayRanges) {
29987      let segs = [];
29988      for (let col = 0; col < dayRanges.length; col += 1) {
29989        let segRange = intersectRanges(range, dayRanges[col]);
29990        if (segRange) {
29991          segs.push({
29992            start: segRange.start,
29993            end: segRange.end,
29994            isStart: segRange.start.valueOf() === range.start.valueOf(),
29995            isEnd: segRange.end.valueOf() === range.end.valueOf(),
29996            col
29997          });
29998        }
29999      }
30000      return segs;
30001    }
30002  };
30003  var DayTimeCols = class extends DateComponent {
30004    constructor() {
30005      super(...arguments);
30006      this.buildDayRanges = memoize(buildDayRanges);
30007      this.slicer = new DayTimeColsSlicer();
30008      this.timeColsRef = d2();
30009    }
30010    render() {
30011      let { props, context } = this;
30012      let { dateProfile, dayTableModel } = props;
30013      let { nowIndicator, nextDayThreshold } = context.options;
30014      let dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);
30015      return y2(NowTimer, { unit: nowIndicator ? "minute" : "day" }, (nowDate, todayRange) => y2(TimeCols, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate, nowIndicatorSegs: nowIndicator && this.slicer.sliceNowDate(nowDate, dateProfile, nextDayThreshold, context, dayRanges), todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords })));
30016    }
30017  };
30018  function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
30019    let ranges = [];
30020    for (let date of dayTableModel.headerDates) {
30021      ranges.push({
30022        start: dateEnv.add(date, dateProfile.slotMinTime),
30023        end: dateEnv.add(date, dateProfile.slotMaxTime)
30024      });
30025    }
30026    return ranges;
30027  }
30028  var STOCK_SUB_DURATIONS = [
30029    { hours: 1 },
30030    { minutes: 30 },
30031    { minutes: 15 },
30032    { seconds: 30 },
30033    { seconds: 15 }
30034  ];
30035  function buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {
30036    let dayStart = new Date(0);
30037    let slatTime = slotMinTime;
30038    let slatIterator = createDuration(0);
30039    let labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);
30040    let metas = [];
30041    while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {
30042      let date = dateEnv.add(dayStart, slatTime);
30043      let isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;
30044      metas.push({
30045        date,
30046        time: slatTime,
30047        key: date.toISOString(),
30048        isoTimeStr: formatIsoTimeString(date),
30049        isLabeled
30050      });
30051      slatTime = addDurations(slatTime, slotDuration);
30052      slatIterator = addDurations(slatIterator, slotDuration);
30053    }
30054    return metas;
30055  }
30056  function computeLabelInterval(slotDuration) {
30057    let i4;
30058    let labelInterval;
30059    let slotsPerLabel;
30060    for (i4 = STOCK_SUB_DURATIONS.length - 1; i4 >= 0; i4 -= 1) {
30061      labelInterval = createDuration(STOCK_SUB_DURATIONS[i4]);
30062      slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);
30063      if (slotsPerLabel !== null && slotsPerLabel > 1) {
30064        return labelInterval;
30065      }
30066    }
30067    return slotDuration;
30068  }
30069  var DayTimeColsView = class extends TimeColsView {
30070    constructor() {
30071      super(...arguments);
30072      this.buildTimeColsModel = memoize(buildTimeColsModel);
30073      this.buildSlatMetas = memoize(buildSlatMetas);
30074    }
30075    render() {
30076      let { options, dateEnv, dateProfileGenerator } = this.context;
30077      let { props } = this;
30078      let { dateProfile } = props;
30079      let dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);
30080      let splitProps = this.allDaySplitter.splitProps(props);
30081      let slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);
30082      let { dayMinWidth } = options;
30083      let hasAttachedAxis = !dayMinWidth;
30084      let hasDetachedAxis = dayMinWidth;
30085      let headerContent = options.dayHeaders && y2(DayHeader, { dates: dayTableModel.headerDates, dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null });
30086      let allDayContent = options.allDaySlot !== false && ((contentArg) => y2(DayTable, Object.assign({}, splitProps.allDay, { dateProfile, dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, this.getAllDayMaxEventProps())));
30087      let timeGridContent = (contentArg) => y2(DayTimeCols, Object.assign({}, splitProps.timed, { dayTableModel, dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: this.handleScrollTopRequest }));
30088      return hasDetachedAxis ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords) : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);
30089    }
30090  };
30091  function buildTimeColsModel(dateProfile, dateProfileGenerator) {
30092    let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
30093    return new DayTableModel(daySeries, false);
30094  }
30095  var css_248z3 = '.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-arrow,.fc .fc-timegrid-now-indicator-line{pointer-events:none}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}';
30096  injectStyles(css_248z3);
30097
30098  
vendor: 624 bytes, lines 30098-30125
30098// node_modules/@fullcalendar/timegrid/index.js
30099  var OPTION_REFINERS = {
30100    allDaySlot: Boolean
30101  };
30102  var index2 = createPlugin({
30103    name: "@fullcalendar/timegrid",
30104    initialView: "timeGridWeek",
30105    optionRefiners: OPTION_REFINERS,
30106    views: {
30107      timeGrid: {
30108        component: DayTimeColsView,
30109        usesMinMaxTime: true,
30110        allDaySlot: true,
30111        slotDuration: "00:30:00",
30112        slotEventOverlap: true
30113      },
30114      timeGridDay: {
30115        type: "timeGrid",
30116        duration: { days: 1 }
30117      },
30118      timeGridWeek: {
30119        type: "timeGrid",
30120        duration: { weeks: 1 }
30121      }
30122    }
30123  });
30124
30125  
vendor: 12,939 bytes, lines 30125-30392
30125// node_modules/@fullcalendar/list/internal.js
30126  var ListViewHeaderRow = class extends BaseComponent {
30127    constructor() {
30128      super(...arguments);
30129      this.state = {
30130        textId: getUniqueDomId()
30131      };
30132    }
30133    render() {
30134      let { theme, dateEnv, options, viewApi } = this.context;
30135      let { cellId, dayDate, todayRange } = this.props;
30136      let { textId } = this.state;
30137      let dayMeta = getDateMeta(dayDate, todayRange);
30138      let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : "";
30139      let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : "";
30140      let renderProps = Object.assign({
30141        date: dateEnv.toDate(dayDate),
30142        view: viewApi,
30143        textId,
30144        text,
30145        sideText,
30146        navLinkAttrs: buildNavLinkAttrs(this.context, dayDate),
30147        sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, "day", false)
30148      }, dayMeta);
30149      return y2(ContentContainer, { elTag: "tr", elClasses: [
30150        "fc-list-day",
30151        ...getDayClassNames(dayMeta, theme)
30152      ], elAttrs: {
30153        "data-date": formatDayString(dayDate)
30154      }, renderProps, generatorName: "dayHeaderContent", customGenerator: options.dayHeaderContent, defaultGenerator: renderInnerContent4, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => y2(
30155        "th",
30156        { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
30157        y2(InnerContent, { elTag: "div", elClasses: [
30158          "fc-list-day-cushion",
30159          theme.getClass("tableCellShaded")
30160        ] })
30161      ));
30162    }
30163  };
30164  function renderInnerContent4(props) {
30165    return y2(
30166      _2,
30167      null,
30168      props.text && y2("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text),
30169      props.sideText && y2("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText)
30170    );
30171  }
30172  var DEFAULT_TIME_FORMAT2 = createFormatter({
30173    hour: "numeric",
30174    minute: "2-digit",
30175    meridiem: "short"
30176  });
30177  var ListViewEventRow = class extends BaseComponent {
30178    render() {
30179      let { props, context } = this;
30180      let { options } = context;
30181      let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props;
30182      let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT2;
30183      return y2(EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
30184        "fc-list-event",
30185        seg.eventRange.def.url && "fc-event-forced-url"
30186      ], defaultGenerator: () => renderEventInnerContent(seg, context), seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => y2(
30187        _2,
30188        null,
30189        buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId),
30190        y2(
30191          "td",
30192          { "aria-hidden": true, className: "fc-list-event-graphic" },
30193          y2("span", { className: "fc-list-event-dot", style: {
30194            borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor
30195          } })
30196        ),
30197        y2(InnerContent, { elTag: "td", elClasses: ["fc-list-event-title"], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })
30198      ));
30199    }
30200  };
30201  function renderEventInnerContent(seg, context) {
30202    let interactiveAttrs = getSegAnchorAttrs(seg, context);
30203    return y2("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title);
30204  }
30205  function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {
30206    let { options } = context;
30207    if (options.displayEventTime !== false) {
30208      let eventDef = seg.eventRange.def;
30209      let eventInstance = seg.eventRange.instance;
30210      let doAllDay = false;
30211      let timeText;
30212      if (eventDef.allDay) {
30213        doAllDay = true;
30214      } else if (isMultiDayRange(seg.eventRange.range)) {
30215        if (seg.isStart) {
30216          timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
30217        } else if (seg.isEnd) {
30218          timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
30219        } else {
30220          doAllDay = true;
30221        }
30222      } else {
30223        timeText = buildSegTimeText(seg, timeFormat, context);
30224      }
30225      if (doAllDay) {
30226        let renderProps = {
30227          text: context.options.allDayText,
30228          view: context.viewApi
30229        };
30230        return y2(ContentContainer, { elTag: "td", elClasses: ["fc-list-event-time"], elAttrs: {
30231          headers: `${timeHeaderId} ${dateHeaderId}`
30232        }, renderProps, generatorName: "allDayContent", customGenerator: options.allDayContent, defaultGenerator: renderAllDayInner2, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount });
30233      }
30234      return y2("td", { className: "fc-list-event-time" }, timeText);
30235    }
30236    return null;
30237  }
30238  function renderAllDayInner2(renderProps) {
30239    return renderProps.text;
30240  }
30241  var ListView = class extends DateComponent {
30242    constructor() {
30243      super(...arguments);
30244      this.computeDateVars = memoize(computeDateVars);
30245      this.eventStoreToSegs = memoize(this._eventStoreToSegs);
30246      this.state = {
30247        timeHeaderId: getUniqueDomId(),
30248        eventHeaderId: getUniqueDomId(),
30249        dateHeaderIdRoot: getUniqueDomId()
30250      };
30251      this.setRootEl = (rootEl) => {
30252        if (rootEl) {
30253          this.context.registerInteractiveComponent(this, {
30254            el: rootEl
30255          });
30256        } else {
30257          this.context.unregisterInteractiveComponent(this);
30258        }
30259      };
30260    }
30261    render() {
30262      let { props, context } = this;
30263      let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
30264      let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
30265      return y2(
30266        ViewContainer,
30267        { elRef: this.setRootEl, elClasses: [
30268          "fc-list",
30269          context.theme.getClass("table"),
30270          context.options.stickyHeaderDates !== false ? "fc-list-sticky" : ""
30271        ], viewSpec: context.viewSpec },
30272        y2(Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? "visible" : "hidden", overflowY: props.isHeightAuto ? "visible" : "auto" }, eventSegs.length > 0 ? this.renderSegList(eventSegs, dayDates) : this.renderEmptyMessage())
30273      );
30274    }
30275    renderEmptyMessage() {
30276      let { options, viewApi } = this.context;
30277      let renderProps = {
30278        text: options.noEventsText,
30279        view: viewApi
30280      };
30281      return y2(ContentContainer, { elTag: "div", elClasses: ["fc-list-empty"], renderProps, generatorName: "noEventsContent", customGenerator: options.noEventsContent, defaultGenerator: renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => y2(InnerContent, { elTag: "div", elClasses: ["fc-list-empty-cushion"] }));
30282    }
30283    renderSegList(allSegs, dayDates) {
30284      let { theme, options } = this.context;
30285      let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
30286      let segsByDay = groupSegsByDay(allSegs);
30287      return y2(NowTimer, { unit: "day" }, (nowDate, todayRange) => {
30288        let innerNodes = [];
30289        for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
30290          let daySegs = segsByDay[dayIndex];
30291          if (daySegs) {
30292            let dayStr = formatDayString(dayDates[dayIndex]);
30293            let dateHeaderId = dateHeaderIdRoot + "-" + dayStr;
30294            innerNodes.push(y2(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange }));
30295            daySegs = sortEventSegs(daySegs, options.eventOrder);
30296            for (let seg of daySegs) {
30297              innerNodes.push(y2(ListViewEventRow, Object.assign({ key: dayStr + ":" + seg.eventRange.instance.instanceId, seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId, eventHeaderId, dateHeaderId }, getSegMeta(seg, todayRange, nowDate))));
30298            }
30299          }
30300        }
30301        return y2(
30302          "table",
30303          { className: "fc-list-table " + theme.getClass("table") },
30304          y2(
30305            "thead",
30306            null,
30307            y2(
30308              "tr",
30309              null,
30310              y2("th", { scope: "col", id: timeHeaderId }, options.timeHint),
30311              y2("th", { scope: "col", "aria-hidden": true }),
30312              y2("th", { scope: "col", id: eventHeaderId }, options.eventHint)
30313            )
30314          ),
30315          y2("tbody", null, innerNodes)
30316        );
30317      });
30318    }
30319    _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
30320      return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
30321    }
30322    eventRangesToSegs(eventRanges, dayRanges) {
30323      let segs = [];
30324      for (let eventRange of eventRanges) {
30325        segs.push(...this.eventRangeToSegs(eventRange, dayRanges));
30326      }
30327      return segs;
30328    }
30329    eventRangeToSegs(eventRange, dayRanges) {
30330      let { dateEnv } = this.context;
30331      let { nextDayThreshold } = this.context.options;
30332      let range = eventRange.range;
30333      let allDay = eventRange.def.allDay;
30334      let dayIndex;
30335      let segRange;
30336      let seg;
30337      let segs = [];
30338      for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
30339        segRange = intersectRanges(range, dayRanges[dayIndex]);
30340        if (segRange) {
30341          seg = {
30342            component: this,
30343            eventRange,
30344            start: segRange.start,
30345            end: segRange.end,
30346            isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
30347            isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
30348            dayIndex
30349          };
30350          segs.push(seg);
30351          if (!seg.isEnd && !allDay && dayIndex + 1 < dayRanges.length && range.end < dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
30352            seg.end = range.end;
30353            seg.isEnd = true;
30354            break;
30355          }
30356        }
30357      }
30358      return segs;
30359    }
30360  };
30361  function renderNoEventsInner(renderProps) {
30362    return renderProps.text;
30363  }
30364  function computeDateVars(dateProfile) {
30365    let dayStart = startOfDay(dateProfile.renderRange.start);
30366    let viewEnd = dateProfile.renderRange.end;
30367    let dayDates = [];
30368    let dayRanges = [];
30369    while (dayStart < viewEnd) {
30370      dayDates.push(dayStart);
30371      dayRanges.push({
30372        start: dayStart,
30373        end: addDays(dayStart, 1)
30374      });
30375      dayStart = addDays(dayStart, 1);
30376    }
30377    return { dayDates, dayRanges };
30378  }
30379  function groupSegsByDay(segs) {
30380    let segsByDay = [];
30381    let i4;
30382    let seg;
30383    for (i4 = 0; i4 < segs.length; i4 += 1) {
30384      seg = segs[i4];
30385      (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])).push(seg);
30386    }
30387    return segsByDay;
30388  }
30389  var css_248z4 = ':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}';
30390  injectStyles(css_248z4);
30391
30392  
vendor: 1,272 bytes, lines 30392-30437
30392// node_modules/@fullcalendar/list/index.js
30393  var OPTION_REFINERS2 = {
30394    listDayFormat: createFalsableFormatter,
30395    listDaySideFormat: createFalsableFormatter,
30396    noEventsClassNames: identity,
30397    noEventsContent: identity,
30398    noEventsDidMount: identity,
30399    noEventsWillUnmount: identity
30400  };
30401  function createFalsableFormatter(input) {
30402    return input === false ? null : createFormatter(input);
30403  }
30404  var index3 = createPlugin({
30405    name: "@fullcalendar/list",
30406    optionRefiners: OPTION_REFINERS2,
30407    views: {
30408      list: {
30409        component: ListView,
30410        buttonTextKey: "list",
30411        listDayFormat: { month: "long", day: "numeric", year: "numeric" }
30412      },
30413      listDay: {
30414        type: "list",
30415        duration: { days: 1 },
30416        listDayFormat: { weekday: "long" }
30417      },
30418      listWeek: {
30419        type: "list",
30420        duration: { weeks: 1 },
30421        listDayFormat: { weekday: "long" },
30422        listDaySideFormat: { month: "long", day: "numeric", year: "numeric" }
30423      },
30424      listMonth: {
30425        type: "list",
30426        duration: { month: 1 },
30427        listDaySideFormat: { weekday: "long" }
30428      },
30429      listYear: {
30430        type: "list",
30431        duration: { year: 1 },
30432        listDaySideFormat: { weekday: "long" }
30433      }
30434    }
30435  });
30436
30437  
30437// app/javascript/controllers/bookings_calendar_controller.js
30438  var bookings_calendar_controller_default = class extends Controller {
30439    connect() {
30440      let daily = new Calendar(this.element, {
30441        plugins: [index, index2, index3],
30442        initialView: "timeGridWeek",
30443        headerToolbar: {
30444          left: "prev",
30445          center: "title",
30446          right: "next"
30447        },
30448        eventClick: function(info) {
30449          if (info.event.url) {
30450            window.open(info.event.url);
30451            return false;
30452          }
30453        },
30454        events: this.eventsValue,
30455        businessHours: this.businessHoursValue
30456      });
30457      daily.render();
30458    }
30459  };
30460  __publicField(bookings_calendar_controller_default, "values", {
30461    businessHours: Array,
30462    events: Array
30463  });
30464
30465  
30465// app/javascript/controllers/bootstrap_modal_controller.js
30466  var bootstrap_modal_controller_default = class extends Controller {
30467    connect() {
30468      this.modal = new bootstrap.Modal(this.element, {
30469        keyboard: false
30470      });
30471      this.modal.show();
30472    }
30473    disconnect() {
30474      this.modal.dispose();
30475    }
30476  };
30477
30478  
30478// app/javascript/controllers/browser_location_controller.js
30479  var browser_location_controller_default = class extends Controller {
30480    connect() {
30481      if (navigator.geolocation) {
30482        navigator.geolocation.getCurrentPosition(
30483          this.handlePosition.bind(this),
30484          this.handleError.bind(this)
30485        );
30486      }
30487    }
30488    handlePosition(position) {
30489      const lat = position.coords.latitude;
30490      const lng = position.coords.longitude;
30491      document.cookie = `user_lat=${lat};path=/`;
30492      document.cookie = `user_lng=${lng};path=/`;
30493    }
30494    handleError(error2) {
30495      console.log("Geolocation error:", error2);
30496    }
30497  };
30498  __publicField(browser_location_controller_default, "targets", ["lat", "lng"]);
30499
30500  
30500// app/javascript/controllers/call_to_action_controller.js
30501  var call_to_action_controller_default = class extends Controller {
30502    navigate() {
30503      const selectedOption = this.dropdownTarget.options[this.dropdownTarget.selectedIndex];
30504      const url = selectedOption.value;
30505      window.open(url, "_blank").focus();
30506    }
30507  };
30508  __publicField(call_to_action_controller_default, "targets", ["dropdown", "button"]);
30509
30510  
30510// app/javascript/controllers/cat_grid_switch_controller.js
30511  var cat_grid_switch_controller_default = class extends Controller {
30512    connect() {
30513    }
30514    toggle(event2) {
30515      const isGrid = event2.currentTarget.classList.contains("gridview");
30516      this.element.classList.toggle("gridview", isGrid);
30517      this.switchTargets.forEach((switchEl) => {
30518        switchEl.querySelector(".gridview").classList.toggle("active", isGrid);
30519        switchEl.querySelector(".rowview").classList.toggle("active", !isGrid);
30520      });
30521    }
30522  };
30523  __publicField(cat_grid_switch_controller_default, "targets", ["switch"]);
30524
30525  
30525// app/javascript/controllers/charges_toggle_controller.js
30526  var charges_toggle_controller_default = class extends Controller {
30527    toggle() {
30528      this.sectionTargets.forEach((e4) => {
30529        e4.classList.toggle("hidden");
30530      });
30531    }
30532  };
30533  __publicField(charges_toggle_controller_default, "targets", ["section"]);
30534
30535  
30535// app/javascript/controllers/checkbox_controller.js
30536  var checkbox_controller_default = class extends Controller {
30537    connect() {
30538      let checkboxes = document.querySelectorAll("input[type=checkbox]");
30539      const checkSpan = '<span class="checkmark"></span>';
30540      checkboxes.forEach((box) => {
30541        const next = box.nextSibling;
30542        if (!(next && next.nodeType === 1 && next.classList.contains("checkmark"))) {
30543          box.insertAdjacentHTML("afterend", checkSpan);
30544        }
30545      });
30546    }
30547  };
30548
30549  
30549// app/javascript/controllers/checkbox_field_controller.js
30550  var checkbox_field_controller_default = class extends Controller {
30551    connect() {
30552      this.inputTextReplaceLoad();
30553      this.inputTextReplaceChange();
30554    }
30555    open() {
30556      this.modalTarget.classList.add("open");
30557    }
30558    close() {
30559      this.modalTarget.classList.remove("open");
30560    }
30561    inputTextReplaceLoad() {
30562      let i4 = 0;
30563      let checkboxes = this.element.querySelectorAll("input[type=checkbox]");
30564      checkboxes.forEach((box) => {
30565        let text = box.closest("label").innerText;
30566        if (box.checked) {
30567          i4++;
30568          if (i4 > 1) {
30569            this.labelTarget.innerText = "Multiple";
30570          } else if (i4 == 1) {
30571            this.labelTarget.innerText = text;
30572          }
30573        }
30574        ;
30575      });
30576    }
30577    inputTextReplaceChange() {
30578      let checkboxes = this.element.querySelectorAll("input[type=checkbox]");
30579      let i4 = 0;
30580      checkboxes.forEach((box) => {
30581        let text = box.closest("label").innerText;
30582        box.addEventListener("change", () => {
30583          if (box.checked) {
30584            i4++;
30585            if (i4 > 1) {
30586              this.labelTarget.innerText = "Multiple";
30587            } else if (i4 == 1) {
30588              this.labelTarget.innerText = text;
30589            }
30590          } else if (!box.checked) {
30591            if (i4 > 0) {
30592              i4--;
30593            }
30594            if (i4 > 1) {
30595              this.labelTarget.innerText = "Multiple";
30596            } else if (i4 <= 1) {
30597              let x5 = 0;
30598              checkboxes.forEach((box2) => {
30599                let text2 = box2.closest("label").innerText;
30600                if (box2.checked) {
30601                  x5++;
30602                  this.labelTarget.innerText = text2;
30603                }
30604              });
30605              if (x5 == 0) {
30606                this.labelTarget.innerText = "Any";
30607              }
30608            }
30609          }
30610        });
30611      });
30612    }
30613  };
30614  __publicField(checkbox_field_controller_default, "targets", ["label", "modal"]);
30615
30616  
30616// app/javascript/controllers/cms/bookings/booking_reason_toggle_controller.js
30617  var booking_reason_toggle_controller_default = class extends Controller {
30618    connect() {
30619      this.showHideOtherReasonInput();
30620    }
30621    showHideOtherReasonInput() {
30622      const selectedOption = this.reasonSelectTarget.options[this.reasonSelectTarget.selectedIndex];
30623      const reasonRequired = selectedOption.dataset.reasonRequired === "true";
30624      this.otherReasonInputTarget.required = reasonRequired;
30625      this.otherReasonInputTarget.parentElement.hidden = !reasonRequired;
30626    }
30627  };
30628  __publicField(booking_reason_toggle_controller_default, "targets", ["reasonSelect", "otherReasonInput", "manualConfirmationInput"]);
30629
30630  
30630// app/javascript/controllers/cms/ongoing_toggle_controller.js
30631  var ongoing_toggle_controller_default = class extends Controller {
30632    connect() {
30633    }
30634    toggle(event2) {
30635      if (this.ongoingTarget.checked) {
30636        this.endInputsTarget.classList.add("hidden");
30637      } else {
30638        this.endInputsTarget.classList.remove("hidden");
30639      }
30640    }
30641  };
30642  __publicField(ongoing_toggle_controller_default, "targets", ["ongoing", "endInputs"]);
30643
30644  
30644// app/javascript/controllers/cms_booking_add_date_controller.js
30645  var cms_booking_add_date_controller_default = class extends Controller {
30646    connect() {
30647      this.addDateBooleanTarget.value = "";
30648    }
30649    activate() {
30650      this.addDateBooleanTarget.value = "1";
30651    }
30652  };
30653  __publicField(cms_booking_add_date_controller_default, "targets", ["addDateBoolean"]);
30654
30655  
30655// app/javascript/controllers/cms_booking_form_controller.js
30656  var cms_booking_form_controller_default = class extends Controller {
30657    checkdate() {
30658      this.checkdateTarget.value = "true";
30659    }
30660    checkDateSubmit() {
30661      this.checkDateSubmitTarget.click();
30662    }
30663    update() {
30664      const dateParts = this.dateInputTarget.value.split("/");
30665      if (dateParts.length !== 3) {
30666        return;
30667      }
30668      const day = parseInt(dateParts[0], 10);
30669      const month = parseInt(dateParts[1], 10) - 1;
30670      const year = parseInt(dateParts[2], 10);
30671      var date = new Date(year, month, day);
30672      if (isNaN(date.getTime())) {
30673        date = null;
30674      }
30675      this.updateMonthlyInputLabel(date);
30676      this.updateYearlyInputLabel(date);
30677    }
30678    updateMonthlyInputLabel(date) {
30679      if (!date) {
30680        this.monthlyInputLabelTarget.innerHTML = "monthly";
30681        return;
30682      }
30683      const [weekdayIndex, ordinalNumber] = this.weekdayAndOrdinal(date);
30684      const weekday = date.toLocaleString("default", { weekday: "long" });
30685      this.monthlyInputLabelTarget.innerHTML = `Monthly on the ${ordinalNumber} ${weekday}`;
30686    }
30687    updateYearlyInputLabel(date) {
30688      if (!date) {
30689        this.yearlyInputLabelTarget.innerHTML = "Annually";
30690        return;
30691      }
30692      var month = date.toLocaleString("default", { month: "long" });
30693      var day = date.getDate();
30694      this.yearlyInputLabelTarget.innerHTML = `Annually on ${month} ${day}`;
30695    }
30696    ordinalInWords(ordinalNumber) {
30697      const suffixes = ["th", "st", "nd", "rd"];
30698      const suffixIndex = ordinalNumber % 100;
30699      return ordinalNumber + (suffixes[(suffixIndex - 20) % 10] || suffixes[suffixIndex] || suffixes[0]);
30700    }
30701    weekdayAndOrdinal(date) {
30702      const weekdayIndex = date.getDay();
30703      let count = 0;
30704      for (let i4 = 1; i4 <= date.getDate(); i4++) {
30705        const tempDate = new Date(date.getFullYear(), date.getMonth(), i4);
30706        if (tempDate.getDay() === weekdayIndex) {
30707          count++;
30708        }
30709      }
30710      const ordinalNumber = this.ordinalInWords(count);
30711      return [weekdayIndex, ordinalNumber];
30712    }
30713  };
30714  __publicField(cms_booking_form_controller_default, "targets", [
30715    "checkdate",
30716    "checkDateSubmit",
30717    "dateInput",
30718    "monthlyInputLabel",
30719    "yearlyInputLabel"
30720  ]);
30721
30722  
30722// app/javascript/controllers/cms_booking_repeat_controller.js
30723  var cms_booking_repeat_controller_default = class extends Controller {
30724    checkdate() {
30725      this.checkdateTarget.value = "true";
30726    }
30727    checkDateSubmit() {
30728      this.checkDateSubmitTarget.click();
30729    }
30730    connect() {
30731    }
30732    select(event2) {
30733      this.hideAll();
30734      let val = event2.srcElement.value;
30735      if (val == "none" || val == "") {
30736        return;
30737      } else {
30738        this.showCheckDate();
30739        this.showEndMethods();
30740        if (val == "specified_days") {
30741          this.showDays();
30742        } else if (val == "custom") {
30743          this.showRepeats();
30744          this.showDays();
30745        } else {
30746          return;
30747        }
30748      }
30749    }
30750    hideAll() {
30751      this.hideCheckDateDiv();
30752      this.hideDays();
30753      this.hideEndMethods();
30754      this.hideRepeats();
30755    }
30756    hideCheckDateDiv() {
30757      this.checkdatedivTarget.classList.add("hidden");
30758    }
30759    hideDays() {
30760      this.daysTarget.classList.add("hidden");
30761    }
30762    hideEndMethods() {
30763      this.endMethodsTarget.classList.add("hidden");
30764    }
30765    hideRepeats() {
30766      this.repeatsTarget.classList.add("hidden");
30767    }
30768    showCheckDate() {
30769      this.checkdatedivTarget.classList.remove("hidden");
30770    }
30771    showDays() {
30772      this.daysTarget.classList.remove("hidden");
30773    }
30774    showEndMethods() {
30775      this.endMethodsTarget.classList.remove("hidden");
30776    }
30777    showRepeats() {
30778      this.repeatsTarget.classList.remove("hidden");
30779    }
30780  };
30781  __publicField(cms_booking_repeat_controller_default, "targets", ["checkdate", "checkdatediv", "checkDateSubmit", "input", "days", "endMethods", "repeats", "occurs"]);
30782
30783  
30783// app/javascript/controllers/cms_booking_specified_repeat_switcher_controller.js
30784  var cms_booking_specified_repeat_switcher_controller_default = class extends Controller {
30785    connect() {
30786      this.toggle();
30787    }
30788    switchToRepeat() {
30789      this.specifiedTarget.classList.add("hidden");
30790      this.repeatTarget.classList.remove("hidden");
30791    }
30792    switchToSpecified() {
30793      this.repeatTarget.classList.add("hidden");
30794      this.specifiedTarget.classList.remove("hidden");
30795    }
30796    toggle() {
30797      if (this.repeatBookingsToggleTarget.checked) {
30798        this.switchToRepeat();
30799      } else if (this.specifiedBookingsToggleTarget.checked) {
30800        this.switchToSpecified();
30801      } else {
30802        this.specifiedTarget.classList.add("hidden");
30803        this.repeatTarget.classList.add("hidden");
30804      }
30805    }
30806  };
30807  __publicField(cms_booking_specified_repeat_switcher_controller_default, "targets", [
30808    "repeat",
30809    "repeatBookingsToggle",
30810    "specified",
30811    "specifiedBookingsToggle"
30812  ]);
30813
30814  
30814// app/javascript/controllers/cms_business_booking_switcher_controller.js
30815  var cms_business_booking_switcher_controller_default = class extends Controller {
30816    connect() {
30817    }
30818    switchToBusiness() {
30819      this.address1LabelTarget.innerHTML = '<abbr title="required">*</abbr>Company address line 1';
30820      this.address2LabelTarget.innerHTML = "Company address line 2";
30821      this.companyNameLabelTarget.classList.add("required");
30822      this.companyNameLabelTarget.classList.remove("optional");
30823      this.companyNameLabelTarget.innerHTML = '<abbr title="required">*</abbr>Company name';
30824      this.companyNameTarget.required = true;
30825      this.companyNameTarget.classList.add("required");
30826      this.companyNameTarget.classList.remove("optional");
30827      this.companyNameWrapperTarget.classList.remove("hidden");
30828      this.companyNameWrapperTarget.classList.add("required");
30829      this.companyNumberTarget.classList.remove("hidden");
30830      this.firstNameLabelTarget.innerHTML = '<abbr title="required">*</abbr>Contact first name';
30831      this.lastNameLabelTarget.innerHTML = '<abbr title="required">*</abbr>Contact last name';
30832      this.vatNumberTarget.classList.remove("hidden");
30833    }
30834    switchToPersonal() {
30835      this.address1LabelTarget.innerHTML = '<abbr title="required">*</abbr>Address line 1';
30836      this.address2LabelTarget.innerHTML = "Address line 2";
30837      this.companyNameLabelTarget.classList.remove("required");
30838      this.companyNameLabelTarget.classList.add("optional");
30839      this.companyNameLabelTarget.innerHTML = "Company name";
30840      this.companyNameTarget.required = false;
30841      this.companyNameTarget.classList.remove("required");
30842      this.companyNameTarget.classList.add("optional");
30843      this.companyNameWrapperTarget.classList.remove("required");
30844      this.companyNameWrapperTarget.classList.add("hidden");
30845      this.companyNumberTarget.classList.add("hidden");
30846      this.firstNameLabelTarget.innerHTML = '<abbr title="required">*</abbr>First name';
30847      this.lastNameLabelTarget.innerHTML = '<abbr title="required">*</abbr>Last name';
30848      this.vatNumberTarget.classList.add("hidden");
30849    }
30850    toggle() {
30851      if (this.businessRadioTarget.checked) {
30852        this.switchToPersonal();
30853      } else {
30854        this.switchToBusiness();
30855      }
30856    }
30857  };
30858  __publicField(cms_business_booking_switcher_controller_default, "targets", [
30859    "address1Label",
30860    "address2Label",
30861    "businessRadio",
30862    "companyName",
30863    "companyNameLabel",
30864    "companyNameWrapper",
30865    "companyNumber",
30866    "firstNameLabel",
30867    "lastNameLabel",
30868    "vatNumber"
30869  ]);
30870
30871  
30871// app/javascript/controllers/cms_item_groups_controller.js
30872  var import_moment = __toESM(require_moment());
30873  var import_pikaday2 = __toESM(require_pikaday());
30874  var cms_item_groups_controller_default = class extends Controller {
30875    connect() {
30876      this.pikaInit("timetables_item_group_start_date");
30877      this.pikaInit("timetables_item_group_end_date");
30878      (0, import_moment.default)().format();
30879      this.classScheduleSelectListener();
30880      this.endSelectListener();
30881    }
30882    pikaInit(fieldID) {
30883      const pika = new import_pikaday2.default({
30884        field: document.getElementById(fieldID),
30885        format: "DD MM YYYY",
30886        minDate: new Date(),
30887        toString(date) {
30888          const day = date.getDate();
30889          const month = date.getMonth() + 1;
30890          const year = date.getFullYear();
30891          return `${day}/${month}/${year}`;
30892        }
30893      });
30894      pika.getMoment();
30895    }
30896    classScheduleSelectListener() {
30897      const classSheduleSelect = document.querySelector("#timetables_item_group_repeat_type");
30898      let daysRadios = [...document.querySelectorAll(".item-group__days")];
30899      let repeatSelect = document.querySelector(".item-group__class-repeats");
30900      classSheduleSelect.addEventListener("change", () => {
30901        if (classSheduleSelect.value == "specified_days") {
30902          daysRadios.forEach((e4) => {
30903            this.show(e4);
30904          });
30905          this.hide(repeatSelect);
30906        } else if (classSheduleSelect.value == "none" || classSheduleSelect.value == "" || classSheduleSelect.value == "daily") {
30907          daysRadios.forEach((e4) => {
30908            this.hide(e4);
30909          });
30910          this.hide(repeatSelect);
30911        } else {
30912          daysRadios.forEach((e4) => {
30913            this.hide(e4);
30914          });
30915          this.show(repeatSelect);
30916        }
30917      });
30918    }
30919    endSelectListener() {
30920      let endSelect = document.querySelector("#timetables_item_group_end_method");
30921      let endDateField = document.querySelector(".item-group__end-date");
30922      let endSessions = document.querySelector(".item-group__end-sessions");
30923      endSelect.addEventListener("change", () => {
30924        if (endSelect.value == "end_count") {
30925          this.show(endSessions);
30926          this.hide(endDateField);
30927        } else if (endSelect.value == "none" || endSelect.value == "") {
30928          this.hide(endSessions);
30929          this.hide(endDateField);
30930        } else {
30931          this.hide(endSessions);
30932          this.show(endDateField);
30933        }
30934      });
30935    }
30936    hide(element) {
30937      element.classList.add("hidden");
30938      element.classList.remove("show");
30939    }
30940    show(element) {
30941      element.classList.add("show");
30942      element.classList.remove("hidden");
30943    }
30944  };
30945  __publicField(cms_item_groups_controller_default, "targets", []);
30946
30947  
30947// app/javascript/controllers/cms_location_role_controller.js
30948  var cms_location_role_controller_default = class extends Controller {
30949    connect() {
30950    }
30951    updateLocationIds(event2) {
30952      const selectedLocationType = this.locationTypeSelectTarget.value;
30953      const options = this.locationIdSelectTarget.querySelectorAll("option");
30954      options.forEach((option) => {
30955        option.classList.add("hidden");
30956        if (selectedLocationType === "Borough" && option.dataset.type === "Borough" || selectedLocationType === "Venue" && option.dataset.type === "Venue") {
30957          option.classList.remove("hidden");
30958        } else if (selectedLocationType === "" && option.label === " ") {
30959          option.classList.remove("hidden");
30960        }
30961        if (this.roleSelectTarget.selectedOptions[0].dataset.global === "true") {
30962          option.classList.add("hidden");
30963        }
30964      });
30965      if (this.roleSelectTarget.selectedOptions[0].dataset.global === "true") {
30966        this.locationIdSelectTarget.selectedIndex = -1;
30967      }
30968      if (this.locationTypeSelectTarget.value === "Borough" && this.locationIdSelectTarget.selectedOptions[0] && this.locationIdSelectTarget.selectedOptions[0].dataset.type !== "Borough") {
30969        this.locationIdSelectTarget.selectedIndex = -1;
30970      }
30971      if (this.locationTypeSelectTarget.value === "Venue" && this.locationIdSelectTarget.selectedOptions[0] && this.locationIdSelectTarget.selectedOptions[0].dataset.type !== "Venue") {
30972        this.locationIdSelectTarget.selectedIndex = -1;
30973      }
30974    }
30975    updateLocationType(event2) {
30976      const selectedRole = this.roleSelectTarget.selectedOptions[0];
30977      const options = this.locationTypeSelectTarget.querySelectorAll("option");
30978      options.forEach(
30979        (option) => {
30980          option.classList.add("hidden");
30981          if (selectedRole.dataset.global === "true") {
30982            this.locationTypeSelectTarget.selectedIndex = -1;
30983            if (option.label == " ") {
30984              option.classList.remove("hidden");
30985            }
30986          } else if (selectedRole.dataset.borough == "true" && option.dataset.type == "Borough" || selectedRole.dataset.venue == "true" && option.dataset.type == "Venue") {
30987            option.classList.remove("hidden");
30988          }
30989        }
30990      );
30991      this.updateLocationIds();
30992    }
30993  };
30994  __publicField(cms_location_role_controller_default, "targets", [
30995    "locationIdSelect",
30996    "locationTypeSelect",
30997    "roleSelect"
30998  ]);
30999
31000  
31000// app/javascript/controllers/cms_spinner_controller.js
31001  var cms_spinner_controller_default = class extends Controller {
31002    connect() {
31003      this.spinnerTarget.classList.add("hidden");
31004      this.clickListener = this.showSpinner.bind(this);
31005      this.element.addEventListener("click", this.clickListener);
31006    }
31007    disconnect() {
31008      this.element.removeEventListener("click", this.clickListener);
31009    }
31010    showSpinner(event2) {
31011      this.originalTarget.classList.add("hidden");
31012      this.spinnerTarget.classList.remove("hidden");
31013      const listItem = this.element.closest("li");
31014      if (listItem) {
31015        listItem.classList.add("disabled");
31016      }
31017    }
31018  };
31019  __publicField(cms_spinner_controller_default, "targets", ["original", "spinner"]);
31020
31021  
31021// app/javascript/controllers/cms_user_form_controller.js
31022  var cms_user_form_controller_default = class extends Controller {
31023    connect() {
31024    }
31025    updateHomeSites(event2) {
31026      let boroughId = this.boroughTarget.selectedOptions[0].value;
31027      fetch(`/library/api/boroughs/${boroughId}/prism_home_sites`).then((response) => {
31028        if (!response.ok) {
31029          throw new Error(`Network response was not ok (status: ${response.status})`);
31030        }
31031        return response.json();
31032      }).then((data) => {
31033        this.homeSiteTarget.innerHTML = "";
31034        data.forEach((location2) => {
31035          let option = document.createElement("option");
31036          option.value = location2.id;
31037          option.text = location2.prism_id;
31038          this.homeSiteTarget.appendChild(option);
31039        });
31040      }).catch((error2) => {
31041        console.error("Error fetching or parsing data:", error2);
31042      });
31043    }
31044  };
31045  __publicField(cms_user_form_controller_default, "targets", ["borough", "homeSite"]);
31046
31047  
31047// app/javascript/controllers/dura_pick_controller.js
31048  var dura_pick_controller_default = class extends Controller {
31049    connect() {
31050      const inputField = this.element.querySelector(".booking_duration");
31051      if (inputField) {
31052        inputField.addEventListener("click", () => {
31053          this.open();
31054        });
31055      }
31056      this.buttonHandler();
31057      this.inputTarget.addEventListener("change", () => {
31058        this.labelChange();
31059      });
31060    }
31061    buttonHandler() {
31062      const buttons = this.element.querySelectorAll(".duration_btn");
31063      buttons.forEach((button) => {
31064        button.addEventListener("click", () => {
31065          if (button.classList.contains("active")) {
31066            button.classList.remove("active");
31067          } else if (!button.classList.contains("unav")) {
31068            buttons.forEach((button2) => {
31069              button2.classList.remove("active");
31070            });
31071            button.classList.toggle("active");
31072          }
31073          this.labelChange();
31074        });
31075        const dataValue = button.getAttribute("data-value");
31076        const text = button.innerText;
31077        if (this.inputTarget.value == dataValue) {
31078          this.dummyTarget.innerText = text;
31079        }
31080      });
31081    }
31082    labelChange() {
31083      const selectedText = this.element.querySelector(".duration_btn.active").innerText;
31084      this.dummyTarget.innerText = selectedText;
31085    }
31086    open() {
31087      this.modalTarget.classList.add("open");
31088    }
31089    close() {
31090      this.modalTarget.classList.remove("open");
31091    }
31092    submit() {
31093      const selectedVal = this.element.querySelector(".duration_btn.active").getAttribute("data-value");
31094      this.inputTarget.value = selectedVal;
31095      this.modalTarget.classList.remove("open");
31096    }
31097  };
31098  __publicField(dura_pick_controller_default, "targets", ["modal", "input", "dummy"]);
31099
31100  
31100// app/javascript/controllers/duration_picker_controller.js
31101  var duration_picker_controller_default = class extends Controller {
31102    connect() {
31103    }
31104    close() {
31105      this.modalTarget.classList.remove("open");
31106    }
31107    open() {
31108      this.modalTarget.classList.add("open");
31109    }
31110    select(event2) {
31111      this.durationBtnTargets.forEach((button) => {
31112        button.classList.remove("active");
31113      });
31114      event2.currentTarget.classList.add("active");
31115      this.inputTarget.value = event2.currentTarget.dataset.value;
31116      this.dummyTarget.innerText = event2.currentTarget.innerText;
31117    }
31118  };
31119  __publicField(duration_picker_controller_default, "targets", ["modal", "input", "dummy", "durationBtn"]);
31120
31121  
31121// app/javascript/controllers/facet_clear_controller.js
31122  var facet_clear_controller_default = class extends Controller {
31123    clear() {
31124      this.element.querySelectorAll("input[type=radio]").forEach((radio) => {
31125        radio.checked = false;
31126      });
31127      this.element.closest("form").requestSubmit();
31128    }
31129  };
31130
31131  
31131// app/javascript/controllers/faqs_controller.js
31132  var faqs_controller_default = class extends Controller {
31133    connect() {
31134    }
31135    toggle() {
31136      this.spanTarget.classList.toggle("open");
31137      this.textTarget.classList.toggle("open");
31138    }
31139  };
31140  __publicField(faqs_controller_default, "targets", ["text", "span"]);
31141
31142  
31142// app/javascript/controllers/filter_expand_controller.js
31143  var filter_expand_controller_default = class extends Controller {
31144    toggle() {
31145      this.moreTarget.hidden = !this.moreTarget.hidden;
31146      this.toggleTarget.textContent = this.moreTarget.hidden ? "Show all" : "Show fewer";
31147    }
31148  };
31149  __publicField(filter_expand_controller_default, "targets", ["more", "toggle"]);
31150
31151  
31151// app/javascript/controllers/flash_notice_controller.js
31152  var flash_notice_controller_default = class extends Controller {
31153    connect() {
31154      if (this.hasFlashTarget) {
31155        setTimeout(() => {
31156          this.flashClose();
31157        }, 4e3);
31158      }
31159    }
31160    flashClose() {
31161      const flash = this.hasFlashTarget ? this.flashTarget : this.element;
31162      if (flash) {
31163        flash.style.opacity = "0";
31164        setTimeout(() => {
31165          flash.innerHTML = null;
31166        }, 1e3);
31167      }
31168    }
31169    close(event2) {
31170      event2.preventDefault();
31171      this.flashClose();
31172    }
31173  };
31174  __publicField(flash_notice_controller_default, "targets", ["flash"]);
31175
31176  
31176// app/javascript/controllers/headexpd_controller.js
31177  var headexpd_controller_default = class extends Controller {
31178    connect() {
31179    }
31180    expand() {
31181      this.headTarget.classList.toggle("open");
31182      document.querySelector("#primary-navigation").classList.toggle("open");
31183      this.btnTarget.classList.toggle("open");
31184    }
31185  };
31186  __publicField(headexpd_controller_default, "targets", ["head", "btn"]);
31187
31188  
31188// app/javascript/controllers/hello_controller.js
31189  var hello_controller_default = class extends Controller {
31190    connect() {
31191      this.element.textContent = "Hello World!";
31192    }
31193  };
31194
31195  
31195// app/javascript/controllers/hover_sync_controller.js
31196  var hover_sync_controller_default = class extends Controller {
31197    connect() {
31198      this.attachHoverListeners(this.itemTargets);
31199      this.observeDOM();
31200    }
31201    disconnect() {
31202      if (this.observer)
31203        this.observer.disconnect();
31204    }
31205    observeDOM() {
31206      this.observer = new MutationObserver((mutations) => {
31207        mutations.forEach((mutation) => {
31208          mutation.addedNodes.forEach((node) => {
31209            if (node.nodeType !== Node.ELEMENT_NODE)
31210              return;
31211            const candidates = node.matches?.("[data-hover-id]") ? [node] : node.querySelectorAll?.("[data-hover-id]") || [];
31212            this.attachHoverListeners(candidates);
31213          });
31214        });
31215      });
31216      this.observer.observe(this.element, {
31217        childList: true,
31218        subtree: true
31219      });
31220    }
31221    attachHoverListeners(elements) {
31222      elements.forEach((el) => {
31223        if (el.dataset.hoverBound)
31224          return;
31225        el.dataset.hoverBound = "true";
31226        el.addEventListener("mouseenter", this.hoverIn);
31227        el.addEventListener("mouseleave", this.hoverOut);
31228      });
31229    }
31230    hoverIn = (event2) => {
31231      const hoverId = event2.currentTarget.dataset.hoverId;
31232      this.toggleHighlight(hoverId, true);
31233    };
31234    hoverOut = (event2) => {
31235      const hoverId = event2.currentTarget.dataset.hoverId;
31236      this.toggleHighlight(hoverId, false);
31237    };
31238    toggleHighlight(hoverId, shouldHighlight) {
31239      document.querySelectorAll(`[data-hover-id="${hoverId}"]`).forEach((el) => {
31240        if (el.nodeName === "TR") {
31241          el.classList.toggle("table-info", shouldHighlight);
31242        }
31243        if (el.nodeName === "LI") {
31244          el.classList.toggle("list-group-item-info", shouldHighlight);
31245        }
31246      });
31247    }
31248  };
31249  __publicField(hover_sync_controller_default, "targets", ["item"]);
31250
31251  
31251// app/javascript/controllers/jump_to_page_controller.js
31252  var jump_to_page_controller_default = class extends Controller {
31253    navigate() {
31254      const selectedOption = this.dropdownTarget.options[this.dropdownTarget.selectedIndex];
31255      const url = selectedOption.value;
31256      window.open(url, "_self").focus();
31257    }
31258  };
31259  __publicField(jump_to_page_controller_default, "targets", ["dropdown", "button"]);
31260
31261  
31261// app/javascript/controllers/listmodal_controller.js
31262  var listmodal_controller_default = class extends Controller {
31263    connect() {
31264      const content = this.element.querySelector(".wishlist-modal__content");
31265      this.element.addEventListener("click", (e4) => {
31266        if (!content.contains(e4.target)) {
31267          this.element.classList.remove("open");
31268        }
31269      });
31270    }
31271  };
31272
31273  
31273// app/javascript/controllers/mob_sidebar_controller.js
31274  var mob_sidebar_controller_default = class extends Controller {
31275    connect() {
31276    }
31277    toggle() {
31278      this.element.classList.toggle("open");
31279    }
31280  };
31281
31282  
31282// app/javascript/controllers/mobile_burger_controller.js
31283  var mobile_burger_controller_default = class extends Controller {
31284    connect() {
31285      const nav = document.querySelector("nav.primary-navigation");
31286      this.element.addEventListener("click", () => {
31287        nav.classList.toggle("open");
31288      });
31289    }
31290  };
31291
31292  
31292// app/javascript/controllers/mobile_search_controller.js
31293  var mobile_search_controller_default = class extends Controller {
31294    connect() {
31295    }
31296    toggle() {
31297      const search = document.querySelector(".catalogue-header-search__form");
31298      search.classList.toggle("open");
31299    }
31300  };
31301
31302  
31302// app/javascript/controllers/nav_dropdown_controller.js
31303  var nav_dropdown_controller_default = class extends Controller {
31304    toggle(e4) {
31305      let menus = document.querySelectorAll(".header-nav-list__item.open");
31306      menus.forEach((menu) => {
31307        if (menu != this.element) {
31308          menu.classList.remove("open");
31309        }
31310      });
31311      this.element.classList.toggle("open");
31312    }
31313  };
31314
31315  
31315// app/javascript/controllers/opayo_payment_attempt_form_controller.js
31316  var opayo_payment_attempt_form_controller_default = class extends Controller {
31317    connect() {
31318      this.javaEnabledTarget.value = navigator.javaEnabled();
31319      this.languageTarget.value = navigator.language;
31320      this.colorDepthTarget.value = screen.colorDepth;
31321      this.screenHeightTarget.value = screen.height;
31322      this.screenWidthTarget.value = screen.width;
31323      this.timeZoneTarget.value = this.getTimezoneOffsetInMinutes();
31324    }
31325    getTimezoneOffsetInMinutes() {
31326      var date = new Date();
31327      var offsetInMinutes = date.getTimezoneOffset();
31328      return offsetInMinutes;
31329    }
31330    formatCardNumber() {
31331      var cardNumber = this.cardNumberTarget.value;
31332      cardNumber = cardNumber.replace(/[^0-9\s]/g, "");
31333      cardNumber = cardNumber.replace(/^\s+/, "");
31334      this.cardNumberTarget.value = cardNumber.replace(/\s/g, "").replace(/(\d{4})/g, "$1 ").trim();
31335    }
31336    submit(event2) {
31337      event2.preventDefault();
31338      const cardIdentifierTarget = this.cardIdentifierTarget;
31339      const formTarget = this.formTarget;
31340      const controller = this;
31341      sagepayOwnForm({
31342        merchantSessionKey: this.merchantSessionKeyTarget.value
31343      }).tokeniseCardDetails({
31344        cardDetails: {
31345          cardholderName: this.cardholderNameTarget.value,
31346          cardNumber: this.cardNumberTarget.value.replace(/\s/g, ""),
31347          expiryDate: this.expiryDateTarget.value,
31348          securityCode: this.securityCodeTarget.value
31349        },
31350        onTokenised: function(result) {
31351          if (result.success) {
31352            cardIdentifierTarget.value = result.cardIdentifier;
31353            formTarget.submit();
31354          } else {
31355            controller.updateErrorMessagesFromResult(result);
31356          }
31357        }
31358      });
31359    }
31360    updateErrorMessagesFromResult(json) {
31361      json.errors.forEach((error2) => {
31362        if (error2.message == "The card number length is invalid") {
31363          this.cardNumberErrorTarget.classList.remove("hidden");
31364          this.cardNumberErrorTarget.innerText = error2.message;
31365          this.cardNumberTarget.classList.add("error.message");
31366        } else if (error2.message == "The card number is invalid") {
31367          this.cardNumberErrorTarget.classList.remove("hidden");
31368          this.cardNumberErrorTarget.innerText = error2.message;
31369          this.cardNumberTarget.classList.add("error.message");
31370        } else if (error2.message == "The expiry date is invalid") {
31371          this.expiryDateErrorTarget.classList.remove("hidden");
31372          this.expiryDateErrorTarget.innerText = error2.message;
31373          this.expiryDateTarget.classList.add("error.message");
31374        } else if (error2.message == "The security code length is invalid") {
31375          this.securityCodeErrorTarget.classList.remove("hidden");
31376          this.securityCodeErrorTarget.innerText = error2.message;
31377          this.securityCodeTarget.classList.add("error.message");
31378        } else if (error2.message == "The security code is invalid") {
31379          this.securityCodeErrorTarget.classList.remove("hidden");
31380          this.securityCodeErrorTarget.innerText = error2.message;
31381          this.securityCodeTarget.classList.add("error.message");
31382        }
31383      });
31384    }
31385    updateSubmitButtonStatus() {
31386      const cardNumberError = !this.cardNumberErrorTarget.classList.contains("hidden");
31387      const expiryDateError = !this.expiryDateErrorTarget.classList.contains("hidden");
31388      const securityCodeError = !this.securityCodeErrorTarget.classList.contains("hidden");
31389      const cardholderNameBlank = this.cardholderNameTarget.value.length == 0;
31390      const cardNumberBlank = this.cardNumberTarget.value.length == 0;
31391      const expiryDateBlank = this.expiryDateTarget.value.length == 0;
31392      const securityCodeBlank = this.securityCodeTarget.value.length == 0;
31393      const disabledStatus = cardNumberError || expiryDateError || securityCodeError || cardholderNameBlank || cardNumberBlank || expiryDateBlank || securityCodeBlank;
31394      this.submitButtonTarget.disabled = disabledStatus;
31395      if (disabledStatus) {
31396        this.submitButtonTarget.classList.add("disabled");
31397      } else {
31398        this.submitButtonTarget.classList.remove("disabled");
31399      }
31400    }
31401    validateCardholderName() {
31402      const cardholderName = this.cardholderNameTarget.value;
31403      this.cardholderNameTarget.value = cardholderName.replace(/[^a-zA-Z0-9àáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð /\\&]{1,50}$/g, "");
31404      this.updateSubmitButtonStatus();
31405    }
31406    validateCardNumber() {
31407      this.formatCardNumber();
31408      const cardNumber = this.cardNumberTarget.value;
31409      if (cardNumber.length < 12 || cardNumber.length > 19 || (cardNumber.match(/\s/g) || []).length > 3) {
31410        this.cardNumberErrorTarget.classList.remove("hidden");
31411        this.cardNumberErrorTarget.innerText = "Please enter a valid card number";
31412        this.cardNumberTarget.classList.add("error");
31413      } else {
31414        this.cardNumberErrorTarget.classList.add("hidden");
31415        this.cardNumberErrorTarget.innerText = "";
31416        this.cardNumberTarget.classList.remove("error");
31417      }
31418      this.updateSubmitButtonStatus();
31419    }
31420    validateExpiryDate() {
31421      const expiryDate = this.expiryDateTarget.value;
31422      this.expiryDateTarget.value = expiryDate.replace(/[^0-9]/g, "");
31423      var month = parseInt(expiryDate.substring(0, 2));
31424      var year = parseInt(expiryDate.substring(2, 4));
31425      month -= 1;
31426      year += 2e3;
31427      if (month > 11) {
31428        this.expiryDateErrorTarget.classList.remove("hidden");
31429        this.expiryDateErrorTarget.innerText = "Please enter a valid expiry date";
31430        this.expiryDateTarget.classList.add("error");
31431        this.updateSubmitButtonStatus();
31432        return;
31433      }
31434      const expiry = new Date(year, month, 1);
31435      const now3 = new Date();
31436      if (expiry < now3) {
31437        this.expiryDateErrorTarget.classList.remove("hidden");
31438        this.expiryDateErrorTarget.innerText = "Please enter a valid expiry date";
31439        this.expiryDateTarget.classList.add("error");
31440      } else {
31441        this.expiryDateErrorTarget.classList.add("hidden");
31442        this.expiryDateErrorTarget.innerText = "";
31443        this.expiryDateTarget.classList.remove("error");
31444      }
31445      this.updateSubmitButtonStatus();
31446    }
31447    validateSecurityCode() {
31448      const securityCode = this.securityCodeTarget.value;
31449      this.securityCodeTarget.value = securityCode.replace(/[^0-9]/g, "");
31450      if (securityCode.length < 3 || securityCode.length > 4) {
31451        this.securityCodeErrorTarget.classList.remove("hidden");
31452        this.securityCodeErrorTarget.innerText = "Please enter a valid security code";
31453        this.securityCodeTarget.classList.add("error");
31454      } else {
31455        this.securityCodeErrorTarget.classList.add("hidden");
31456        this.securityCodeErrorTarget.innerText = "";
31457        this.securityCodeTarget.classList.remove("error");
31458      }
31459      this.updateSubmitButtonStatus();
31460    }
31461  };
31462  __publicField(opayo_payment_attempt_form_controller_default, "targets", ["cardholderName", "cardholderNameError", "cardIdentifier", "cardNumber", "cardNumberError", "colorDepth", "expiryDate", "expiryDateError", "form", "javaEnabled", "language", "merchantSessionKey", "securityCode", "securityCodeError", "screenHeight", "screenWidth", "submitButton", "timeZone"]);
31463
31464  
31464// app/javascript/controllers/opening_times_controller.js
31465  var opening_times_controller_default = class extends Controller {
31466    toggle() {
31467      this.element.classList.toggle("closed");
31468      this.buttonTarget.innerText = this.element.classList.contains("closed") ? "See all opening times and contact details" : "Hide all opening times and contact details";
31469    }
31470  };
31471  __publicField(opening_times_controller_default, "targets", ["button"]);
31472
31473  
31473// app/javascript/controllers/pikaday_init_controller.js
31474  var import_pikaday3 = __toESM(require_pikaday());
31475  var pikaday_init_controller_default = class extends Controller {
31476    connect() {
31477      this.element.autocomplete = "off";
31478      let mindate = null;
31479      if (this.mindateValue.trim() !== "") {
31480        const [day, month, year] = this.mindateValue.split("/");
31481        mindate = new Date(`${year}-${month}-${day}`);
31482      } else {
31483        mindate = new Date();
31484      }
31485      const picker = new import_pikaday3.default({
31486        field: this.element,
31487        format: "DD/MM/YYYY",
31488        minDate: mindate,
31489        maxDate: new Date(2100, 1, 1),
31490        firstDay: 1
31491      });
31492    }
31493  };
31494  __publicField(pikaday_init_controller_default, "values", {
31495    mindate: String
31496  });
31497
31498  
31498// app/javascript/controllers/progsteps_controller.js
31499  var progsteps_controller_default = class extends Controller {
31500    connect() {
31501      const tick = '<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><g id="xicons"><path id="Vector" d="M20 6.5L9 17.5L4 12.5" stroke="#1B365C" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></g></svg>';
31502      const dot = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><circle cx="6" cy="6" r="6" fill="#1B365C"/></svg>';
31503      const roundals = document.querySelectorAll(".signup-progress__roundal");
31504      roundals.forEach((roundal) => {
31505        let status = roundal.innerText.replace(/ /g, "");
31506        if (status == "checked") {
31507          roundal.classList.add("checked");
31508          roundal.innerHTML = tick;
31509        } else if (status == "current") {
31510          roundal.classList.add("current");
31511          roundal.innerHTML = dot;
31512        } else if (status == "future") {
31513          roundal.classList.add("future");
31514          roundal.innerHTML = dot;
31515        }
31516      });
31517    }
31518  };
31519
31520  
31520// app/javascript/controllers/recite_me_controller.js
31521  var recite_me_controller_default = class extends Controller {
31522    loadReciteMe() {
31523      loadService();
31524    }
31525  };
31526
31527  
31527// app/javascript/controllers/region_london_controller.js
31528  var region_london_controller_default = class extends Controller {
31529    connect() {
31530      this.london();
31531      this.textReplaceLoad();
31532      this.textReplaceChange();
31533    }
31534    london() {
31535      let ldnAll = this.element.querySelector(".london-all");
31536      let ldnSingles = this.element.querySelectorAll(".london-single");
31537      ldnAll.addEventListener("change", () => {
31538        if (ldnAll.checked == true) {
31539          ldnSingles.forEach((e4) => {
31540            e4.checked = true;
31541          });
31542        } else if (ldnAll.checked == false) {
31543          ldnSingles.forEach((e4) => {
31544            e4.checked = false;
31545          });
31546        }
31547      });
31548      ldnSingles.forEach((e4) => {
31549        e4.addEventListener("change", () => {
31550          const ldnChecked = [...ldnSingles].every((input) => input.checked == true);
31551          if (ldnChecked) {
31552            ldnAll.checked = true;
31553          } else if (!ldnChecked) {
31554            ldnAll.checked = false;
31555          }
31556        });
31557      });
31558    }
31559    textReplaceLoad() {
31560      let londonLabels = [...this.element.querySelectorAll("label:has(input[data-london=true])")];
31561      let otherLabels = [...this.element.querySelectorAll("label:has(input[data-london=false])")];
31562      let otherLabelsChecked = [];
31563      let londonLabelsChecked = [];
31564      otherLabels.forEach((e4) => {
31565        if (e4.querySelector("input").checked == true) {
31566          otherLabelsChecked.push(e4);
31567        }
31568      });
31569      londonLabels.forEach((e4) => {
31570        if (e4.querySelector("input").checked == true) {
31571          londonLabelsChecked.push(e4);
31572        }
31573      });
31574      const londonChecked = londonLabels.some((label) => label.querySelector("input").checked == true);
31575      const otherChecked = otherLabels.some((label) => label.querySelector("input").checked == true);
31576      if (londonChecked && otherChecked) {
31577        this.labelTarget.innerText = "Multiple";
31578      } else if (!londonChecked && otherChecked) {
31579        if (otherLabelsChecked.length == 1) {
31580          this.labelTarget.innerText = otherLabelsChecked[0].innerText;
31581        } else if (otherLabelsChecked.length > 1) {
31582          this.labelTarget.innerText = "Multiple";
31583        }
31584      } else if (londonChecked && !otherChecked) {
31585        if (londonLabelsChecked.length == 1) {
31586          this.labelTarget.innerText = londonLabelsChecked[0].innerText;
31587        } else if (londonLabelsChecked.length > 1) {
31588          this.labelTarget.innerText = "London";
31589        }
31590      } else if (!londonChecked && !otherChecked) {
31591        this.labelTarget.innerText = "Any";
31592      }
31593    }
31594    textReplaceChange() {
31595      let checkboxes = this.element.querySelectorAll("input[type=checkbox]");
31596      checkboxes.forEach((box) => {
31597        box.addEventListener("change", () => {
31598          this.textReplaceLoad();
31599        });
31600      });
31601    }
31602  };
31603  __publicField(region_london_controller_default, "targets", ["label"]);
31604
31605  
31605// app/javascript/controllers/result_avail_controller.js
31606  var result_avail_controller_default = class extends Controller {
31607    connect() {
31608      const container = this.modalTarget.querySelector(".availa-modal-container");
31609      document.addEventListener("click", (e4) => {
31610        if (!this.btnTarget.contains(e4.target) && !container.contains(e4.target)) {
31611          this.close();
31612        }
31613      });
31614    }
31615    toggle() {
31616      this.modalTarget.classList.toggle("open");
31617    }
31618    close() {
31619      this.modalTarget.classList.remove("open");
31620    }
31621  };
31622  __publicField(result_avail_controller_default, "targets", ["btn", "modal"]);
31623
31624  
vendor: 22,899 bytes, lines 31624-32241
31624// node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js
31625  var linkClickSelector = "a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]";
31626  var buttonClickSelector = {
31627    selector: "button[data-remote]:not([form]), button[data-confirm]:not([form])",
31628    exclude: "form button"
31629  };
31630  var inputChangeSelector = "select[data-remote], input[data-remote], textarea[data-remote]";
31631  var formSubmitSelector = "form:not([data-turbo=true])";
31632  var formInputClickSelector = "form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])";
31633  var formDisableSelector = "input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled";
31634  var formEnableSelector = "input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled";
31635  var fileInputSelector = "input[name][type=file]:not([disabled])";
31636  var linkDisableSelector = "a[data-disable-with], a[data-disable]";
31637  var buttonDisableSelector = "button[data-remote][data-disable-with], button[data-remote][data-disable]";
31638  var nonce = null;
31639  var loadCSPNonce = () => {
31640    const metaTag = document.querySelector("meta[name=csp-nonce]");
31641    return nonce = metaTag && metaTag.content;
31642  };
31643  var cspNonce = () => nonce || loadCSPNonce();
31644  var m4 = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;
31645  var matches = function(element, selector) {
31646    if (selector.exclude) {
31647      return m4.call(element, selector.selector) && !m4.call(element, selector.exclude);
31648    } else {
31649      return m4.call(element, selector);
31650    }
31651  };
31652  var EXPANDO = "_ujsData";
31653  var getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : void 0;
31654  var setData = function(element, key, value) {
31655    if (!element[EXPANDO]) {
31656      element[EXPANDO] = {};
31657    }
31658    return element[EXPANDO][key] = value;
31659  };
31660  var $4 = (selector) => Array.prototype.slice.call(document.querySelectorAll(selector));
31661  var isContentEditable = function(element) {
31662    var isEditable = false;
31663    do {
31664      if (element.isContentEditable) {
31665        isEditable = true;
31666        break;
31667      }
31668      element = element.parentElement;
31669    } while (element);
31670    return isEditable;
31671  };
31672  var csrfToken = () => {
31673    const meta = document.querySelector("meta[name=csrf-token]");
31674    return meta && meta.content;
31675  };
31676  var csrfParam = () => {
31677    const meta = document.querySelector("meta[name=csrf-param]");
31678    return meta && meta.content;
31679  };
31680  var CSRFProtection = (xhr) => {
31681    const token = csrfToken();
31682    if (token) {
31683      return xhr.setRequestHeader("X-CSRF-Token", token);
31684    }
31685  };
31686  var refreshCSRFTokens = () => {
31687    const token = csrfToken();
31688    const param = csrfParam();
31689    if (token && param) {
31690      return $4('form input[name="' + param + '"]').forEach((input) => input.value = token);
31691    }
31692  };
31693  var AcceptHeaders = {
31694    "*": "*/*",
31695    text: "text/plain",
31696    html: "text/html",
31697    xml: "application/xml, text/xml",
31698    json: "application/json, text/javascript",
31699    script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
31700  };
31701  var ajax = (options) => {
31702    options = prepareOptions(options);
31703    var xhr = createXHR(options, function() {
31704      const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader("Content-Type"));
31705      if (Math.floor(xhr.status / 100) === 2) {
31706        if (typeof options.success === "function") {
31707          options.success(response, xhr.statusText, xhr);
31708        }
31709      } else {
31710        if (typeof options.error === "function") {
31711          options.error(response, xhr.statusText, xhr);
31712        }
31713      }
31714      return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : void 0;
31715    });
31716    if (options.beforeSend && !options.beforeSend(xhr, options)) {
31717      return false;
31718    }
31719    if (xhr.readyState === XMLHttpRequest.OPENED) {
31720      return xhr.send(options.data);
31721    }
31722  };
31723  var prepareOptions = function(options) {
31724    options.url = options.url || location.href;
31725    options.type = options.type.toUpperCase();
31726    if (options.type === "GET" && options.data) {
31727      if (options.url.indexOf("?") < 0) {
31728        options.url += "?" + options.data;
31729      } else {
31730        options.url += "&" + options.data;
31731      }
31732    }
31733    if (!(options.dataType in AcceptHeaders)) {
31734      options.dataType = "*";
31735    }
31736    options.accept = AcceptHeaders[options.dataType];
31737    if (options.dataType !== "*") {
31738      options.accept += ", */*; q=0.01";
31739    }
31740    return options;
31741  };
31742  var createXHR = function(options, done) {
31743    const xhr = new XMLHttpRequest();
31744    xhr.open(options.type, options.url, true);
31745    xhr.setRequestHeader("Accept", options.accept);
31746    if (typeof options.data === "string") {
31747      xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
31748    }
31749    if (!options.crossDomain) {
31750      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
31751      CSRFProtection(xhr);
31752    }
31753    xhr.withCredentials = !!options.withCredentials;
31754    xhr.onreadystatechange = function() {
31755      if (xhr.readyState === XMLHttpRequest.DONE) {
31756        return done(xhr);
31757      }
31758    };
31759    return xhr;
31760  };
31761  var processResponse = function(response, type) {
31762    if (typeof response === "string" && typeof type === "string") {
31763      if (type.match(/\bjson\b/)) {
31764        try {
31765          response = JSON.parse(response);
31766        } catch (error2) {
31767        }
31768      } else if (type.match(/\b(?:java|ecma)script\b/)) {
31769        const script = document.createElement("script");
31770        script.setAttribute("nonce", cspNonce());
31771        script.text = response;
31772        document.head.appendChild(script).parentNode.removeChild(script);
31773      } else if (type.match(/\b(xml|html|svg)\b/)) {
31774        const parser = new DOMParser();
31775        type = type.replace(/;.+/, "");
31776        try {
31777          response = parser.parseFromString(response, type);
31778        } catch (error1) {
31779        }
31780      }
31781    }
31782    return response;
31783  };
31784  var href = (element) => element.href;
31785  var isCrossDomain = function(url) {
31786    const originAnchor = document.createElement("a");
31787    originAnchor.href = location.href;
31788    const urlAnchor = document.createElement("a");
31789    try {
31790      urlAnchor.href = url;
31791      return !((!urlAnchor.protocol || urlAnchor.protocol === ":") && !urlAnchor.host || originAnchor.protocol + "//" + originAnchor.host === urlAnchor.protocol + "//" + urlAnchor.host);
31792    } catch (e4) {
31793      return true;
31794    }
31795  };
31796  var preventDefault2;
31797  var { CustomEvent: CustomEvent2 } = window;
31798  if (typeof CustomEvent2 !== "function") {
31799    CustomEvent2 = function(event2, params) {
31800      const evt = document.createEvent("CustomEvent");
31801      evt.initCustomEvent(event2, params.bubbles, params.cancelable, params.detail);
31802      return evt;
31803    };
31804    CustomEvent2.prototype = window.Event.prototype;
31805    ({ preventDefault: preventDefault2 } = CustomEvent2.prototype);
31806    CustomEvent2.prototype.preventDefault = function() {
31807      const result = preventDefault2.call(this);
31808      if (this.cancelable && !this.defaultPrevented) {
31809        Object.defineProperty(this, "defaultPrevented", {
31810          get() {
31811            return true;
31812          }
31813        });
31814      }
31815      return result;
31816    };
31817  }
31818  var fire = (obj, name, data) => {
31819    const event2 = new CustomEvent2(name, {
31820      bubbles: true,
31821      cancelable: true,
31822      detail: data
31823    });
31824    obj.dispatchEvent(event2);
31825    return !event2.defaultPrevented;
31826  };
31827  var stopEverything = (e4) => {
31828    fire(e4.target, "ujs:everythingStopped");
31829    e4.preventDefault();
31830    e4.stopPropagation();
31831    e4.stopImmediatePropagation();
31832  };
31833  var delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, function(e4) {
31834    let { target } = e4;
31835    while (!!(target instanceof Element) && !matches(target, selector)) {
31836      target = target.parentNode;
31837    }
31838    if (target instanceof Element && handler.call(target, e4) === false) {
31839      e4.preventDefault();
31840      e4.stopPropagation();
31841    }
31842  });
31843  var toArray2 = (e4) => Array.prototype.slice.call(e4);
31844  var serializeElement = (element, additionalParam) => {
31845    let inputs = [element];
31846    if (matches(element, "form")) {
31847      inputs = toArray2(element.elements);
31848    }
31849    const params = [];
31850    inputs.forEach(function(input) {
31851      if (!input.name || input.disabled) {
31852        return;
31853      }
31854      if (matches(input, "fieldset[disabled] *")) {
31855        return;
31856      }
31857      if (matches(input, "select")) {
31858        toArray2(input.options).forEach(function(option) {
31859          if (option.selected) {
31860            params.push({
31861              name: input.name,
31862              value: option.value
31863            });
31864          }
31865        });
31866      } else if (input.checked || ["radio", "checkbox", "submit"].indexOf(input.type) === -1) {
31867        params.push({
31868          name: input.name,
31869          value: input.value
31870        });
31871      }
31872    });
31873    if (additionalParam) {
31874      params.push(additionalParam);
31875    }
31876    return params.map(function(param) {
31877      if (param.name) {
31878        return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;
31879      } else {
31880        return param;
31881      }
31882    }).join("&");
31883  };
31884  var formElements = (form, selector) => {
31885    if (matches(form, "form")) {
31886      return toArray2(form.elements).filter((el) => matches(el, selector));
31887    } else {
31888      return toArray2(form.querySelectorAll(selector));
31889    }
31890  };
31891  var handleConfirmWithRails = (rails) => function(e4) {
31892    if (!allowAction(this, rails)) {
31893      stopEverything(e4);
31894    }
31895  };
31896  var confirm2 = (message, element) => window.confirm(message);
31897  var allowAction = function(element, rails) {
31898    let callback;
31899    const message = element.getAttribute("data-confirm");
31900    if (!message) {
31901      return true;
31902    }
31903    let answer = false;
31904    if (fire(element, "confirm")) {
31905      try {
31906        answer = rails.confirm(message, element);
31907      } catch (error2) {
31908      }
31909      callback = fire(element, "confirm:complete", [answer]);
31910    }
31911    return answer && callback;
31912  };
31913  var handleDisabledElement = function(e4) {
31914    const element = this;
31915    if (element.disabled) {
31916      stopEverything(e4);
31917    }
31918  };
31919  var enableElement = (e4) => {
31920    let element;
31921    if (e4 instanceof Event) {
31922      if (isXhrRedirect(e4)) {
31923        return;
31924      }
31925      element = e4.target;
31926    } else {
31927      element = e4;
31928    }
31929    if (isContentEditable(element)) {
31930      return;
31931    }
31932    if (matches(element, linkDisableSelector)) {
31933      return enableLinkElement(element);
31934    } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {
31935      return enableFormElement(element);
31936    } else if (matches(element, formSubmitSelector)) {
31937      return enableFormElements(element);
31938    }
31939  };
31940  var disableElement = (e4) => {
31941    const element = e4 instanceof Event ? e4.target : e4;
31942    if (isContentEditable(element)) {
31943      return;
31944    }
31945    if (matches(element, linkDisableSelector)) {
31946      return disableLinkElement(element);
31947    } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {
31948      return disableFormElement(element);
31949    } else if (matches(element, formSubmitSelector)) {
31950      return disableFormElements(element);
31951    }
31952  };
31953  var disableLinkElement = function(element) {
31954    if (getData(element, "ujs:disabled")) {
31955      return;
31956    }
31957    const replacement = element.getAttribute("data-disable-with");
31958    if (replacement != null) {
31959      setData(element, "ujs:enable-with", element.innerHTML);
31960      element.innerHTML = replacement;
31961    }
31962    element.addEventListener("click", stopEverything);
31963    return setData(element, "ujs:disabled", true);
31964  };
31965  var enableLinkElement = function(element) {
31966    const originalText = getData(element, "ujs:enable-with");
31967    if (originalText != null) {
31968      element.innerHTML = originalText;
31969      setData(element, "ujs:enable-with", null);
31970    }
31971    element.removeEventListener("click", stopEverything);
31972    return setData(element, "ujs:disabled", null);
31973  };
31974  var disableFormElements = (form) => formElements(form, formDisableSelector).forEach(disableFormElement);
31975  var disableFormElement = function(element) {
31976    if (getData(element, "ujs:disabled")) {
31977      return;
31978    }
31979    const replacement = element.getAttribute("data-disable-with");
31980    if (replacement != null) {
31981      if (matches(element, "button")) {
31982        setData(element, "ujs:enable-with", element.innerHTML);
31983        element.innerHTML = replacement;
31984      } else {
31985        setData(element, "ujs:enable-with", element.value);
31986        element.value = replacement;
31987      }
31988    }
31989    element.disabled = true;
31990    return setData(element, "ujs:disabled", true);
31991  };
31992  var enableFormElements = (form) => formElements(form, formEnableSelector).forEach((element) => enableFormElement(element));
31993  var enableFormElement = function(element) {
31994    const originalText = getData(element, "ujs:enable-with");
31995    if (originalText != null) {
31996      if (matches(element, "button")) {
31997        element.innerHTML = originalText;
31998      } else {
31999        element.value = originalText;
32000      }
32001      setData(element, "ujs:enable-with", null);
32002    }
32003    element.disabled = false;
32004    return setData(element, "ujs:disabled", null);
32005  };
32006  var isXhrRedirect = function(event2) {
32007    const xhr = event2.detail ? event2.detail[0] : void 0;
32008    return xhr && xhr.getResponseHeader("X-Xhr-Redirect");
32009  };
32010  var handleMethodWithRails = (rails) => function(e4) {
32011    const link = this;
32012    const method = link.getAttribute("data-method");
32013    if (!method) {
32014      return;
32015    }
32016    if (isContentEditable(this)) {
32017      return;
32018    }
32019    const href2 = rails.href(link);
32020    const csrfToken$1 = csrfToken();
32021    const csrfParam$1 = csrfParam();
32022    const form = document.createElement("form");
32023    let formContent = `<input name='_method' value='${method}' type='hidden' />`;
32024    if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href2)) {
32025      formContent += `<input name='${csrfParam$1}' value='${csrfToken$1}' type='hidden' />`;
32026    }
32027    formContent += '<input type="submit" />';
32028    form.method = "post";
32029    form.action = href2;
32030    form.target = link.target;
32031    form.innerHTML = formContent;
32032    form.style.display = "none";
32033    document.body.appendChild(form);
32034    form.querySelector('[type="submit"]').click();
32035    stopEverything(e4);
32036  };
32037  var isRemote = function(element) {
32038    const value = element.getAttribute("data-remote");
32039    return value != null && value !== "false";
32040  };
32041  var handleRemoteWithRails = (rails) => function(e4) {
32042    let data, method, url;
32043    const element = this;
32044    if (!isRemote(element)) {
32045      return true;
32046    }
32047    if (!fire(element, "ajax:before")) {
32048      fire(element, "ajax:stopped");
32049      return false;
32050    }
32051    if (isContentEditable(element)) {
32052      fire(element, "ajax:stopped");
32053      return false;
32054    }
32055    const withCredentials = element.getAttribute("data-with-credentials");
32056    const dataType = element.getAttribute("data-type") || "script";
32057    if (matches(element, formSubmitSelector)) {
32058      const button = getData(element, "ujs:submit-button");
32059      method = getData(element, "ujs:submit-button-formmethod") || element.getAttribute("method") || "get";
32060      url = getData(element, "ujs:submit-button-formaction") || element.getAttribute("action") || location.href;
32061      if (method.toUpperCase() === "GET") {
32062        url = url.replace(/\?.*$/, "");
32063      }
32064      if (element.enctype === "multipart/form-data") {
32065        data = new FormData(element);
32066        if (button != null) {
32067          data.append(button.name, button.value);
32068        }
32069      } else {
32070        data = serializeElement(element, button);
32071      }
32072      setData(element, "ujs:submit-button", null);
32073      setData(element, "ujs:submit-button-formmethod", null);
32074      setData(element, "ujs:submit-button-formaction", null);
32075    } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {
32076      method = element.getAttribute("data-method");
32077      url = element.getAttribute("data-url");
32078      data = serializeElement(element, element.getAttribute("data-params"));
32079    } else {
32080      method = element.getAttribute("data-method");
32081      url = rails.href(element);
32082      data = element.getAttribute("data-params");
32083    }
32084    ajax({
32085      type: method || "GET",
32086      url,
32087      data,
32088      dataType,
32089      beforeSend(xhr, options) {
32090        if (fire(element, "ajax:beforeSend", [xhr, options])) {
32091          return fire(element, "ajax:send", [xhr]);
32092        } else {
32093          fire(element, "ajax:stopped");
32094          return false;
32095        }
32096      },
32097      success(...args) {
32098        return fire(element, "ajax:success", args);
32099      },
32100      error(...args) {
32101        return fire(element, "ajax:error", args);
32102      },
32103      complete(...args) {
32104        return fire(element, "ajax:complete", args);
32105      },
32106      crossDomain: isCrossDomain(url),
32107      withCredentials: withCredentials != null && withCredentials !== "false"
32108    });
32109    stopEverything(e4);
32110  };
32111  var formSubmitButtonClick = function(e4) {
32112    const button = this;
32113    const { form } = button;
32114    if (!form) {
32115      return;
32116    }
32117    if (button.name) {
32118      setData(form, "ujs:submit-button", {
32119        name: button.name,
32120        value: button.value
32121      });
32122    }
32123    setData(form, "ujs:formnovalidate-button", button.formNoValidate);
32124    setData(form, "ujs:submit-button-formaction", button.getAttribute("formaction"));
32125    return setData(form, "ujs:submit-button-formmethod", button.getAttribute("formmethod"));
32126  };
32127  var preventInsignificantClick = function(e4) {
32128    const link = this;
32129    const method = (link.getAttribute("data-method") || "GET").toUpperCase();
32130    const data = link.getAttribute("data-params");
32131    const metaClick = e4.metaKey || e4.ctrlKey;
32132    const insignificantMetaClick = metaClick && method === "GET" && !data;
32133    const nonPrimaryMouseClick = e4.button != null && e4.button !== 0;
32134    if (nonPrimaryMouseClick || insignificantMetaClick) {
32135      e4.stopImmediatePropagation();
32136    }
32137  };
32138  var Rails = {
32139    $: $4,
32140    ajax,
32141    buttonClickSelector,
32142    buttonDisableSelector,
32143    confirm: confirm2,
32144    cspNonce,
32145    csrfToken,
32146    csrfParam,
32147    CSRFProtection,
32148    delegate,
32149    disableElement,
32150    enableElement,
32151    fileInputSelector,
32152    fire,
32153    formElements,
32154    formEnableSelector,
32155    formDisableSelector,
32156    formInputClickSelector,
32157    formSubmitButtonClick,
32158    formSubmitSelector,
32159    getData,
32160    handleDisabledElement,
32161    href,
32162    inputChangeSelector,
32163    isCrossDomain,
32164    linkClickSelector,
32165    linkDisableSelector,
32166    loadCSPNonce,
32167    matches,
32168    preventInsignificantClick,
32169    refreshCSRFTokens,
32170    serializeElement,
32171    setData,
32172    stopEverything
32173  };
32174  var handleConfirm = handleConfirmWithRails(Rails);
32175  Rails.handleConfirm = handleConfirm;
32176  var handleMethod = handleMethodWithRails(Rails);
32177  Rails.handleMethod = handleMethod;
32178  var handleRemote = handleRemoteWithRails(Rails);
32179  Rails.handleRemote = handleRemote;
32180  var start3 = function() {
32181    if (window._rails_loaded) {
32182      throw new Error("rails-ujs has already been loaded!");
32183    }
32184    window.addEventListener("pageshow", function() {
32185      $4(formEnableSelector).forEach(function(el) {
32186        if (getData(el, "ujs:disabled")) {
32187          enableElement(el);
32188        }
32189      });
32190      $4(linkDisableSelector).forEach(function(el) {
32191        if (getData(el, "ujs:disabled")) {
32192          enableElement(el);
32193        }
32194      });
32195    });
32196    delegate(document, linkDisableSelector, "ajax:complete", enableElement);
32197    delegate(document, linkDisableSelector, "ajax:stopped", enableElement);
32198    delegate(document, buttonDisableSelector, "ajax:complete", enableElement);
32199    delegate(document, buttonDisableSelector, "ajax:stopped", enableElement);
32200    delegate(document, linkClickSelector, "click", preventInsignificantClick);
32201    delegate(document, linkClickSelector, "click", handleDisabledElement);
32202    delegate(document, linkClickSelector, "click", handleConfirm);
32203    delegate(document, linkClickSelector, "click", disableElement);
32204    delegate(document, linkClickSelector, "click", handleRemote);
32205    delegate(document, linkClickSelector, "click", handleMethod);
32206    delegate(document, buttonClickSelector, "click", preventInsignificantClick);
32207    delegate(document, buttonClickSelector, "click", handleDisabledElement);
32208    delegate(document, buttonClickSelector, "click", handleConfirm);
32209    delegate(document, buttonClickSelector, "click", disableElement);
32210    delegate(document, buttonClickSelector, "click", handleRemote);
32211    delegate(document, inputChangeSelector, "change", handleDisabledElement);
32212    delegate(document, inputChangeSelector, "change", handleConfirm);
32213    delegate(document, inputChangeSelector, "change", handleRemote);
32214    delegate(document, formSubmitSelector, "submit", handleDisabledElement);
32215    delegate(document, formSubmitSelector, "submit", handleConfirm);
32216    delegate(document, formSubmitSelector, "submit", handleRemote);
32217    delegate(document, formSubmitSelector, "submit", (e4) => setTimeout(() => disableElement(e4), 13));
32218    delegate(document, formSubmitSelector, "ajax:send", disableElement);
32219    delegate(document, formSubmitSelector, "ajax:complete", enableElement);
32220    delegate(document, formInputClickSelector, "click", preventInsignificantClick);
32221    delegate(document, formInputClickSelector, "click", handleDisabledElement);
32222    delegate(document, formInputClickSelector, "click", handleConfirm);
32223    delegate(document, formInputClickSelector, "click", formSubmitButtonClick);
32224    document.addEventListener("DOMContentLoaded", refreshCSRFTokens);
32225    document.addEventListener("DOMContentLoaded", loadCSPNonce);
32226    return window._rails_loaded = true;
32227  };
32228  Rails.start = start3;
32229  if (typeof jQuery !== "undefined" && jQuery && jQuery.ajax) {
32230    if (jQuery.rails) {
32231      throw new Error("If you load both jquery_ujs and rails-ujs, use rails-ujs only.");
32232    }
32233    jQuery.rails = Rails;
32234    jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {
32235      if (!options.crossDomain) {
32236        return CSRFProtection(xhr);
32237      }
32238    });
32239  }
32240
32241  
32241// app/javascript/controllers/rich_text_table_controller.js
32242  var lang = no.config.lang;
32243  var rich_text_table_controller_default = class extends Controller {
32244    connect() {
32245      no.config.lang.table = "Table";
32246      var tableButtonHTML = `<button type="button" class="trix-button trix-button--icon trix-button--icon-table" data-action="rich-text-table#attachTable" title="Attach Table" tabindex="-1">${lang.table}</button>`;
32247      var fileToolsElement = this.element.querySelector("[data-trix-button-group=block-tools]");
32248      fileToolsElement.insertAdjacentHTML("beforeend", tableButtonHTML);
32249    }
32250    attachTable(event2) {
32251      Rails.ajax({
32252        url: `/library/tables`,
32253        type: "post",
32254        success: this.insertTable.bind(this)
32255      });
32256    }
32257    insertTable(tableAttachment) {
32258      this.attachment = new no.Attachment(tableAttachment);
32259      this.element.querySelector("trix-editor").editor.insertAttachment(this.attachment);
32260      this.element.focus();
32261    }
32262  };
32263
32264  
32264// app/javascript/controllers/room_card_click_handler_controller.js
32265  var room_card_click_handler_controller_default = class extends Controller {
32266    buttonClick() {
32267      this.buttonTarget.click();
32268    }
32269  };
32270  __publicField(room_card_click_handler_controller_default, "targets", ["button"]);
32271
32272  
32272// app/javascript/controllers/search_filter_controller.js
32273  var search_filter_controller_default = class extends Controller {
32274    connect() {
32275      this.searchTarget.addEventListener("input", this.filter.bind(this));
32276      this.filter();
32277    }
32278    filter() {
32279      const searchTerm = this.searchTarget.value.toLowerCase();
32280      this.checkboxTargets.forEach((checkbox) => {
32281        const checkboxContainer = checkbox.closest(".checkbox");
32282        const label = checkboxContainer.querySelector("label").textContent.toLowerCase();
32283        if (label.includes(searchTerm) || searchTerm === "") {
32284          checkboxContainer.style.display = "";
32285        } else {
32286          checkboxContainer.style.display = "none";
32287        }
32288      });
32289    }
32290    clear(event2) {
32291      event2.preventDefault();
32292      this.searchTarget.value = "";
32293      this.filter();
32294    }
32295  };
32296  __publicField(search_filter_controller_default, "targets", ["search", "checkbox"]);
32297
32298  
32298// app/javascript/controllers/select_all_controller.js
32299  var select_all_controller_default = class extends Controller {
32300    connect() {
32301    }
32302    toggleAll() {
32303      const shouldCheck = !this.allChecked();
32304      this.checkboxTargets.forEach((checkbox) => {
32305        checkbox.checked = shouldCheck;
32306      });
32307      this.updateButtonText();
32308    }
32309    allChecked() {
32310      return this.checkboxTargets.every((checkbox) => checkbox.checked);
32311    }
32312    updateButtonText() {
32313      this.selectAllButtonTarget.textContent = this.allChecked() ? "Select None" : "Select All";
32314    }
32315  };
32316  __publicField(select_all_controller_default, "targets", ["checkbox", "selectAllButton"]);
32317
32318  
32318// app/javascript/controllers/select_button_disable_controller.js
32319  var select_button_disable_controller_default = class extends Controller {
32320    connect() {
32321      this.toggleTextBoxVisibility();
32322      this.toggleButton();
32323    }
32324    selectChanged() {
32325      this.toggleTextBoxVisibility();
32326      this.toggleButton();
32327    }
32328    toggleTextBoxVisibility() {
32329      if (!this.hasTextBoxWrapperTarget)
32330        return;
32331      const selectValue = this.selectTarget.value;
32332      if (selectValue === "other" || selectValue === "Other") {
32333        this.textBoxWrapperTarget.style.display = "";
32334      } else {
32335        this.textBoxWrapperTarget.style.display = "none";
32336      }
32337    }
32338    toggleButton() {
32339      const selectValue = this.selectTarget.value;
32340      let disabled = !selectValue || selectValue === "0";
32341      if (selectValue === "other" || selectValue === "Other") {
32342        const textBoxValue = this.hasTextBoxTarget ? this.textBoxTarget.value.trim() : "";
32343        disabled = textBoxValue === "";
32344      }
32345      if (disabled) {
32346        this.disableButton();
32347      } else {
32348        this.enableButton();
32349      }
32350    }
32351    enableButton() {
32352      this.buttonTarget.classList.remove("btn-disabled");
32353      this.buttonTarget.disabled = false;
32354    }
32355    disableButton() {
32356      if (!this.buttonTarget.classList.contains("btn-disabled")) {
32357        this.buttonTarget.classList.add("btn-disabled");
32358      }
32359      this.buttonTarget.disabled = true;
32360    }
32361  };
32362  __publicField(select_button_disable_controller_default, "targets", ["select", "button", "textBox", "textBoxWrapper"]);
32363
32364  
vendor: 1,411 bytes, lines 32364-32407
32364// node_modules/@popperjs/core/lib/index.js
32365  var lib_exports = {};
32366  __export(lib_exports, {
32367    afterMain: () => afterMain,
32368    afterRead: () => afterRead,
32369    afterWrite: () => afterWrite,
32370    applyStyles: () => applyStyles_default,
32371    arrow: () => arrow_default,
32372    auto: () => auto,
32373    basePlacements: () => basePlacements,
32374    beforeMain: () => beforeMain,
32375    beforeRead: () => beforeRead,
32376    beforeWrite: () => beforeWrite,
32377    bottom: () => bottom,
32378    clippingParents: () => clippingParents,
32379    computeStyles: () => computeStyles_default,
32380    createPopper: () => createPopper3,
32381    createPopperBase: () => createPopper,
32382    createPopperLite: () => createPopper2,
32383    detectOverflow: () => detectOverflow,
32384    end: () => end,
32385    eventListeners: () => eventListeners_default,
32386    flip: () => flip_default,
32387    hide: () => hide_default,
32388    left: () => left,
32389    main: () => main,
32390    modifierPhases: () => modifierPhases,
32391    offset: () => offset_default,
32392    placements: () => placements,
32393    popper: () => popper,
32394    popperGenerator: () => popperGenerator,
32395    popperOffsets: () => popperOffsets_default,
32396    preventOverflow: () => preventOverflow_default,
32397    read: () => read,
32398    reference: () => reference,
32399    right: () => right,
32400    start: () => start4,
32401    top: () => top,
32402    variationPlacements: () => variationPlacements,
32403    viewport: () => viewport,
32404    write: () => write
32405  });
32406
32407  
vendor: 1,129 bytes, lines 32407-32437
32407// node_modules/@popperjs/core/lib/enums.js
32408  var top = "top";
32409  var bottom = "bottom";
32410  var right = "right";
32411  var left = "left";
32412  var auto = "auto";
32413  var basePlacements = [top, bottom, right, left];
32414  var start4 = "start";
32415  var end = "end";
32416  var clippingParents = "clippingParents";
32417  var viewport = "viewport";
32418  var popper = "popper";
32419  var reference = "reference";
32420  var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
32421    return acc.concat([placement + "-" + start4, placement + "-" + end]);
32422  }, []);
32423  var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
32424    return acc.concat([placement, placement + "-" + start4, placement + "-" + end]);
32425  }, []);
32426  var beforeRead = "beforeRead";
32427  var read = "read";
32428  var afterRead = "afterRead";
32429  var beforeMain = "beforeMain";
32430  var main = "main";
32431  var afterMain = "afterMain";
32432  var beforeWrite = "beforeWrite";
32433  var write = "write";
32434  var afterWrite = "afterWrite";
32435  var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];
32436
32437  
vendor: 169 bytes, lines 32437-32442
32437// node_modules/@popperjs/core/lib/dom-utils/getNodeName.js
32438  function getNodeName(element) {
32439    return element ? (element.nodeName || "").toLowerCase() : null;
32440  }
32441
32442  
vendor: 338 bytes, lines 32442-32454
32442// node_modules/@popperjs/core/lib/dom-utils/getWindow.js
32443  function getWindow(node) {
32444    if (node == null) {
32445      return window;
32446    }
32447    if (node.toString() !== "[object Window]") {
32448      var ownerDocument = node.ownerDocument;
32449      return ownerDocument ? ownerDocument.defaultView || window : window;
32450    }
32451    return node;
32452  }
32453
32454  
vendor: 589 bytes, lines 32454-32471
32454// node_modules/@popperjs/core/lib/dom-utils/instanceOf.js
32455  function isElement(node) {
32456    var OwnElement = getWindow(node).Element;
32457    return node instanceof OwnElement || node instanceof Element;
32458  }
32459  function isHTMLElement(node) {
32460    var OwnElement = getWindow(node).HTMLElement;
32461    return node instanceof OwnElement || node instanceof HTMLElement;
32462  }
32463  function isShadowRoot(node) {
32464    if (typeof ShadowRoot === "undefined") {
32465      return false;
32466    }
32467    var OwnElement = getWindow(node).ShadowRoot;
32468    return node instanceof OwnElement || node instanceof ShadowRoot;
32469  }
32470
32471  
vendor: 2,121 bytes, lines 32471-32539
32471// node_modules/@popperjs/core/lib/modifiers/applyStyles.js
32472  function applyStyles(_ref) {
32473    var state = _ref.state;
32474    Object.keys(state.elements).forEach(function(name) {
32475      var style = state.styles[name] || {};
32476      var attributes = state.attributes[name] || {};
32477      var element = state.elements[name];
32478      if (!isHTMLElement(element) || !getNodeName(element)) {
32479        return;
32480      }
32481      Object.assign(element.style, style);
32482      Object.keys(attributes).forEach(function(name2) {
32483        var value = attributes[name2];
32484        if (value === false) {
32485          element.removeAttribute(name2);
32486        } else {
32487          element.setAttribute(name2, value === true ? "" : value);
32488        }
32489      });
32490    });
32491  }
32492  function effect(_ref2) {
32493    var state = _ref2.state;
32494    var initialStyles = {
32495      popper: {
32496        position: state.options.strategy,
32497        left: "0",
32498        top: "0",
32499        margin: "0"
32500      },
32501      arrow: {
32502        position: "absolute"
32503      },
32504      reference: {}
32505    };
32506    Object.assign(state.elements.popper.style, initialStyles.popper);
32507    state.styles = initialStyles;
32508    if (state.elements.arrow) {
32509      Object.assign(state.elements.arrow.style, initialStyles.arrow);
32510    }
32511    return function() {
32512      Object.keys(state.elements).forEach(function(name) {
32513        var element = state.elements[name];
32514        var attributes = state.attributes[name] || {};
32515        var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]);
32516        var style = styleProperties.reduce(function(style2, property) {
32517          style2[property] = "";
32518          return style2;
32519        }, {});
32520        if (!isHTMLElement(element) || !getNodeName(element)) {
32521          return;
32522        }
32523        Object.assign(element.style, style);
32524        Object.keys(attributes).forEach(function(attribute) {
32525          element.removeAttribute(attribute);
32526        });
32527      });
32528    };
32529  }
32530  var applyStyles_default = {
32531    name: "applyStyles",
32532    enabled: true,
32533    phase: "write",
32534    fn: applyStyles,
32535    effect,
32536    requires: ["computeStyles"]
32537  };
32538
32539  
vendor: 145 bytes, lines 32539-32544
32539// node_modules/@popperjs/core/lib/utils/getBasePlacement.js
32540  function getBasePlacement(placement) {
32541    return placement.split("-")[0];
32542  }
32543
32544  
vendor: 122 bytes, lines 32544-32549
32544// node_modules/@popperjs/core/lib/utils/math.js
32545  var max = Math.max;
32546  var min = Math.min;
32547  var round = Math.round;
32548
32549  
vendor: 359 bytes, lines 32549-32560
32549// node_modules/@popperjs/core/lib/utils/userAgent.js
32550  function getUAString() {
32551    var uaData = navigator.userAgentData;
32552    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
32553      return uaData.brands.map(function(item) {
32554        return item.brand + "/" + item.version;
32555      }).join(" ");
32556    }
32557    return navigator.userAgent;
32558  }
32559
32560  
vendor: 170 bytes, lines 32560-32565
32560// node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js
32561  function isLayoutViewport() {
32562    return !/^((?!chrome|android).)*safari/i.test(getUAString());
32563  }
32564
32565  
vendor: 1,278 bytes, lines 32565-32598
32565// node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js
32566  function getBoundingClientRect(element, includeScale, isFixedStrategy) {
32567    if (includeScale === void 0) {
32568      includeScale = false;
32569    }
32570    if (isFixedStrategy === void 0) {
32571      isFixedStrategy = false;
32572    }
32573    var clientRect = element.getBoundingClientRect();
32574    var scaleX = 1;
32575    var scaleY = 1;
32576    if (includeScale && isHTMLElement(element)) {
32577      scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;
32578      scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;
32579    }
32580    var _ref = isElement(element) ? getWindow(element) : window, visualViewport = _ref.visualViewport;
32581    var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;
32582    var x5 = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;
32583    var y4 = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;
32584    var width = clientRect.width / scaleX;
32585    var height = clientRect.height / scaleY;
32586    return {
32587      width,
32588      height,
32589      top: y4,
32590      right: x5 + width,
32591      bottom: y4 + height,
32592      left: x5,
32593      x: x5,
32594      y: y4
32595    };
32596  }
32597
32598  
vendor: 519 bytes, lines 32598-32617
32598// node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js
32599  function getLayoutRect(element) {
32600    var clientRect = getBoundingClientRect(element);
32601    var width = element.offsetWidth;
32602    var height = element.offsetHeight;
32603    if (Math.abs(clientRect.width - width) <= 1) {
32604      width = clientRect.width;
32605    }
32606    if (Math.abs(clientRect.height - height) <= 1) {
32607      height = clientRect.height;
32608    }
32609    return {
32610      x: element.offsetLeft,
32611      y: element.offsetTop,
32612      width,
32613      height
32614    };
32615  }
32616
32617  
vendor: 474 bytes, lines 32617-32634
32617// node_modules/@popperjs/core/lib/dom-utils/contains.js
32618  function contains(parent, child) {
32619    var rootNode = child.getRootNode && child.getRootNode();
32620    if (parent.contains(child)) {
32621      return true;
32622    } else if (rootNode && isShadowRoot(rootNode)) {
32623      var next = child;
32624      do {
32625        if (next && parent.isSameNode(next)) {
32626          return true;
32627        }
32628        next = next.parentNode || next.host;
32629      } while (next);
32630    }
32631    return false;
32632  }
32633
32634  
vendor: 169 bytes, lines 32634-32639
32634// node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js
32635  function getComputedStyle2(element) {
32636    return getWindow(element).getComputedStyle(element);
32637  }
32638
32639  
vendor: 176 bytes, lines 32639-32644
32639// node_modules/@popperjs/core/lib/dom-utils/isTableElement.js
32640  function isTableElement(element) {
32641    return ["table", "td", "th"].indexOf(getNodeName(element)) >= 0;
32642  }
32643
32644  
vendor: 228 bytes, lines 32644-32649
32644// node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js
32645  function getDocumentElement(element) {
32646    return ((isElement(element) ? element.ownerDocument : element.document) || window.document).documentElement;
32647  }
32648
32649  
vendor: 311 bytes, lines 32649-32657
32649// node_modules/@popperjs/core/lib/dom-utils/getParentNode.js
32650  function getParentNode(element) {
32651    if (getNodeName(element) === "html") {
32652      return element;
32653    }
32654    return element.assignedSlot || element.parentNode || (isShadowRoot(element) ? element.host : null) || getDocumentElement(element);
32655  }
32656
32657  
vendor: 1,791 bytes, lines 32657-32699
32657// node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js
32658  function getTrueOffsetParent(element) {
32659    if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") {
32660      return null;
32661    }
32662    return element.offsetParent;
32663  }
32664  function getContainingBlock(element) {
32665    var isFirefox = /firefox/i.test(getUAString());
32666    var isIE = /Trident/i.test(getUAString());
32667    if (isIE && isHTMLElement(element)) {
32668      var elementCss = getComputedStyle2(element);
32669      if (elementCss.position === "fixed") {
32670        return null;
32671      }
32672    }
32673    var currentNode = getParentNode(element);
32674    if (isShadowRoot(currentNode)) {
32675      currentNode = currentNode.host;
32676    }
32677    while (isHTMLElement(currentNode) && ["html", "body"].indexOf(getNodeName(currentNode)) < 0) {
32678      var css = getComputedStyle2(currentNode);
32679      if (css.transform !== "none" || css.perspective !== "none" || css.contain === "paint" || ["transform", "perspective"].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === "filter" || isFirefox && css.filter && css.filter !== "none") {
32680        return currentNode;
32681      } else {
32682        currentNode = currentNode.parentNode;
32683      }
32684    }
32685    return null;
32686  }
32687  function getOffsetParent(element) {
32688    var window2 = getWindow(element);
32689    var offsetParent = getTrueOffsetParent(element);
32690    while (offsetParent && isTableElement(offsetParent) && getComputedStyle2(offsetParent).position === "static") {
32691      offsetParent = getTrueOffsetParent(offsetParent);
32692    }
32693    if (offsetParent && (getNodeName(offsetParent) === "html" || getNodeName(offsetParent) === "body" && getComputedStyle2(offsetParent).position === "static")) {
32694      return window2;
32695    }
32696    return offsetParent || getContainingBlock(element) || window2;
32697  }
32698
32699  
vendor: 191 bytes, lines 32699-32704
32699// node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js
32700  function getMainAxisFromPlacement(placement) {
32701    return ["top", "bottom"].indexOf(placement) >= 0 ? "x" : "y";
32702  }
32703
32704  
vendor: 262 bytes, lines 32704-32713
32704// node_modules/@popperjs/core/lib/utils/within.js
32705  function within(min2, value, max2) {
32706    return max(min2, min(value, max2));
32707  }
32708  function withinMaxClamp(min2, value, max2) {
32709    var v4 = within(min2, value, max2);
32710    return v4 > max2 ? max2 : v4;
32711  }
32712
32713  
vendor: 185 bytes, lines 32713-32723
32713// node_modules/@popperjs/core/lib/utils/getFreshSideObject.js
32714  function getFreshSideObject() {
32715    return {
32716      top: 0,
32717      right: 0,
32718      bottom: 0,
32719      left: 0
32720    };
32721  }
32722
32723  
vendor: 184 bytes, lines 32723-32728
32723// node_modules/@popperjs/core/lib/utils/mergePaddingObject.js
32724  function mergePaddingObject(paddingObject) {
32725    return Object.assign({}, getFreshSideObject(), paddingObject);
32726  }
32727
32728  
vendor: 219 bytes, lines 32728-32736
32728// node_modules/@popperjs/core/lib/utils/expandToHashMap.js
32729  function expandToHashMap(value, keys) {
32730    return keys.reduce(function(hashMap, key) {
32731      hashMap[key] = value;
32732      return hashMap;
32733    }, {});
32734  }
32735
32736  
vendor: 2,756 bytes, lines 32736-32798
32736// node_modules/@popperjs/core/lib/modifiers/arrow.js
32737  var toPaddingObject = function toPaddingObject2(padding, state) {
32738    padding = typeof padding === "function" ? padding(Object.assign({}, state.rects, {
32739      placement: state.placement
32740    })) : padding;
32741    return mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
32742  };
32743  function arrow(_ref) {
32744    var _state$modifiersData$;
32745    var state = _ref.state, name = _ref.name, options = _ref.options;
32746    var arrowElement = state.elements.arrow;
32747    var popperOffsets2 = state.modifiersData.popperOffsets;
32748    var basePlacement = getBasePlacement(state.placement);
32749    var axis = getMainAxisFromPlacement(basePlacement);
32750    var isVertical = [left, right].indexOf(basePlacement) >= 0;
32751    var len = isVertical ? "height" : "width";
32752    if (!arrowElement || !popperOffsets2) {
32753      return;
32754    }
32755    var paddingObject = toPaddingObject(options.padding, state);
32756    var arrowRect = getLayoutRect(arrowElement);
32757    var minProp = axis === "y" ? top : left;
32758    var maxProp = axis === "y" ? bottom : right;
32759    var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets2[axis] - state.rects.popper[len];
32760    var startDiff = popperOffsets2[axis] - state.rects.reference[axis];
32761    var arrowOffsetParent = getOffsetParent(arrowElement);
32762    var clientSize = arrowOffsetParent ? axis === "y" ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;
32763    var centerToReference = endDiff / 2 - startDiff / 2;
32764    var min2 = paddingObject[minProp];
32765    var max2 = clientSize - arrowRect[len] - paddingObject[maxProp];
32766    var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;
32767    var offset2 = within(min2, center, max2);
32768    var axisProp = axis;
32769    state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset2, _state$modifiersData$.centerOffset = offset2 - center, _state$modifiersData$);
32770  }
32771  function effect2(_ref2) {
32772    var state = _ref2.state, options = _ref2.options;
32773    var _options$element = options.element, arrowElement = _options$element === void 0 ? "[data-popper-arrow]" : _options$element;
32774    if (arrowElement == null) {
32775      return;
32776    }
32777    if (typeof arrowElement === "string") {
32778      arrowElement = state.elements.popper.querySelector(arrowElement);
32779      if (!arrowElement) {
32780        return;
32781      }
32782    }
32783    if (!contains(state.elements.popper, arrowElement)) {
32784      return;
32785    }
32786    state.elements.arrow = arrowElement;
32787  }
32788  var arrow_default = {
32789    name: "arrow",
32790    enabled: true,
32791    phase: "main",
32792    fn: arrow,
32793    effect: effect2,
32794    requires: ["popperOffsets"],
32795    requiresIfExists: ["preventOverflow"]
32796  };
32797
32798  
vendor: 137 bytes, lines 32798-32803
32798// node_modules/@popperjs/core/lib/utils/getVariation.js
32799  function getVariation(placement) {
32800    return placement.split("-")[1];
32801  }
32802
32803  
vendor: 4,868 bytes, lines 32803-32918
32803// node_modules/@popperjs/core/lib/modifiers/computeStyles.js
32804  var unsetSides = {
32805    top: "auto",
32806    right: "auto",
32807    bottom: "auto",
32808    left: "auto"
32809  };
32810  function roundOffsetsByDPR(_ref, win) {
32811    var x5 = _ref.x, y4 = _ref.y;
32812    var dpr = win.devicePixelRatio || 1;
32813    return {
32814      x: round(x5 * dpr) / dpr || 0,
32815      y: round(y4 * dpr) / dpr || 0
32816    };
32817  }
32818  function mapToStyles(_ref2) {
32819    var _Object$assign2;
32820    var popper2 = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, adaptive = _ref2.adaptive, roundOffsets = _ref2.roundOffsets, isFixed = _ref2.isFixed;
32821    var _offsets$x = offsets.x, x5 = _offsets$x === void 0 ? 0 : _offsets$x, _offsets$y = offsets.y, y4 = _offsets$y === void 0 ? 0 : _offsets$y;
32822    var _ref3 = typeof roundOffsets === "function" ? roundOffsets({
32823      x: x5,
32824      y: y4
32825    }) : {
32826      x: x5,
32827      y: y4
32828    };
32829    x5 = _ref3.x;
32830    y4 = _ref3.y;
32831    var hasX = offsets.hasOwnProperty("x");
32832    var hasY = offsets.hasOwnProperty("y");
32833    var sideX = left;
32834    var sideY = top;
32835    var win = window;
32836    if (adaptive) {
32837      var offsetParent = getOffsetParent(popper2);
32838      var heightProp = "clientHeight";
32839      var widthProp = "clientWidth";
32840      if (offsetParent === getWindow(popper2)) {
32841        offsetParent = getDocumentElement(popper2);
32842        if (getComputedStyle2(offsetParent).position !== "static" && position === "absolute") {
32843          heightProp = "scrollHeight";
32844          widthProp = "scrollWidth";
32845        }
32846      }
32847      offsetParent = offsetParent;
32848      if (placement === top || (placement === left || placement === right) && variation === end) {
32849        sideY = bottom;
32850        var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : offsetParent[heightProp];
32851        y4 -= offsetY - popperRect.height;
32852        y4 *= gpuAcceleration ? 1 : -1;
32853      }
32854      if (placement === left || (placement === top || placement === bottom) && variation === end) {
32855        sideX = right;
32856        var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : offsetParent[widthProp];
32857        x5 -= offsetX - popperRect.width;
32858        x5 *= gpuAcceleration ? 1 : -1;
32859      }
32860    }
32861    var commonStyles = Object.assign({
32862      position
32863    }, adaptive && unsetSides);
32864    var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
32865      x: x5,
32866      y: y4
32867    }, getWindow(popper2)) : {
32868      x: x5,
32869      y: y4
32870    };
32871    x5 = _ref4.x;
32872    y4 = _ref4.y;
32873    if (gpuAcceleration) {
32874      var _Object$assign;
32875      return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? "0" : "", _Object$assign[sideX] = hasX ? "0" : "", _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x5 + "px, " + y4 + "px)" : "translate3d(" + x5 + "px, " + y4 + "px, 0)", _Object$assign));
32876    }
32877    return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y4 + "px" : "", _Object$assign2[sideX] = hasX ? x5 + "px" : "", _Object$assign2.transform = "", _Object$assign2));
32878  }
32879  function computeStyles(_ref5) {
32880    var state = _ref5.state, options = _ref5.options;
32881    var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
32882    var commonStyles = {
32883      placement: getBasePlacement(state.placement),
32884      variation: getVariation(state.placement),
32885      popper: state.elements.popper,
32886      popperRect: state.rects.popper,
32887      gpuAcceleration,
32888      isFixed: state.options.strategy === "fixed"
32889    };
32890    if (state.modifiersData.popperOffsets != null) {
32891      state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {
32892        offsets: state.modifiersData.popperOffsets,
32893        position: state.options.strategy,
32894        adaptive,
32895        roundOffsets
32896      })));
32897    }
32898    if (state.modifiersData.arrow != null) {
32899      state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {
32900        offsets: state.modifiersData.arrow,
32901        position: "absolute",
32902        adaptive: false,
32903        roundOffsets
32904      })));
32905    }
32906    state.attributes.popper = Object.assign({}, state.attributes.popper, {
32907      "data-popper-placement": state.placement
32908    });
32909  }
32910  var computeStyles_default = {
32911    name: "computeStyles",
32912    enabled: true,
32913    phase: "beforeWrite",
32914    fn: computeStyles,
32915    data: {}
32916  };
32917
32918  
vendor: 1,294 bytes, lines 32918-32956
32918// node_modules/@popperjs/core/lib/modifiers/eventListeners.js
32919  var passive = {
32920    passive: true
32921  };
32922  function effect3(_ref) {
32923    var state = _ref.state, instance = _ref.instance, options = _ref.options;
32924    var _options$scroll = options.scroll, scroll = _options$scroll === void 0 ? true : _options$scroll, _options$resize = options.resize, resize = _options$resize === void 0 ? true : _options$resize;
32925    var window2 = getWindow(state.elements.popper);
32926    var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);
32927    if (scroll) {
32928      scrollParents.forEach(function(scrollParent) {
32929        scrollParent.addEventListener("scroll", instance.update, passive);
32930      });
32931    }
32932    if (resize) {
32933      window2.addEventListener("resize", instance.update, passive);
32934    }
32935    return function() {
32936      if (scroll) {
32937        scrollParents.forEach(function(scrollParent) {
32938          scrollParent.removeEventListener("scroll", instance.update, passive);
32939        });
32940      }
32941      if (resize) {
32942        window2.removeEventListener("resize", instance.update, passive);
32943      }
32944    };
32945  }
32946  var eventListeners_default = {
32947    name: "eventListeners",
32948    enabled: true,
32949    phase: "write",
32950    fn: function fn2() {
32951    },
32952    effect: effect3,
32953    data: {}
32954  };
32955
32956  
vendor: 323 bytes, lines 32956-32969
32956// node_modules/@popperjs/core/lib/utils/getOppositePlacement.js
32957  var hash = {
32958    left: "right",
32959    right: "left",
32960    bottom: "top",
32961    top: "bottom"
32962  };
32963  function getOppositePlacement(placement) {
32964    return placement.replace(/left|right|bottom|top/g, function(matched) {
32965      return hash[matched];
32966    });
32967  }
32968
32969  
vendor: 291 bytes, lines 32969-32980
32969// node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js
32970  var hash2 = {
32971    start: "end",
32972    end: "start"
32973  };
32974  function getOppositeVariationPlacement(placement) {
32975    return placement.replace(/start|end/g, function(matched) {
32976      return hash2[matched];
32977    });
32978  }
32979
32980  
vendor: 266 bytes, lines 32980-32991
32980// node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js
32981  function getWindowScroll(node) {
32982    var win = getWindow(node);
32983    var scrollLeft = win.pageXOffset;
32984    var scrollTop = win.pageYOffset;
32985    return {
32986      scrollLeft,
32987      scrollTop
32988    };
32989  }
32990
32991  
vendor: 223 bytes, lines 32991-32996
32991// node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js
32992  function getWindowScrollBarX(element) {
32993    return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;
32994  }
32995
32996  
vendor: 758 bytes, lines 32996-33022
32996// node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js
32997  function getViewportRect(element, strategy) {
32998    var win = getWindow(element);
32999    var html = getDocumentElement(element);
33000    var visualViewport = win.visualViewport;
33001    var width = html.clientWidth;
33002    var height = html.clientHeight;
33003    var x5 = 0;
33004    var y4 = 0;
33005    if (visualViewport) {
33006      width = visualViewport.width;
33007      height = visualViewport.height;
33008      var layoutViewport = isLayoutViewport();
33009      if (layoutViewport || !layoutViewport && strategy === "fixed") {
33010        x5 = visualViewport.offsetLeft;
33011        y4 = visualViewport.offsetTop;
33012      }
33013    }
33014    return {
33015      width,
33016      height,
33017      x: x5 + getWindowScrollBarX(element),
33018      y: y4
33019    };
33020  }
33021
33022  
vendor: 890 bytes, lines 33022-33043
33022// node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js
33023  function getDocumentRect(element) {
33024    var _element$ownerDocumen;
33025    var html = getDocumentElement(element);
33026    var winScroll = getWindowScroll(element);
33027    var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;
33028    var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);
33029    var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);
33030    var x5 = -winScroll.scrollLeft + getWindowScrollBarX(element);
33031    var y4 = -winScroll.scrollTop;
33032    if (getComputedStyle2(body || html).direction === "rtl") {
33033      x5 += max(html.clientWidth, body ? body.clientWidth : 0) - width;
33034    }
33035    return {
33036      width,
33037      height,
33038      x: x5,
33039      y: y4
33040    };
33041  }
33042
33043  
vendor: 364 bytes, lines 33043-33049
33043// node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js
33044  function isScrollParent(element) {
33045    var _getComputedStyle = getComputedStyle2(element), overflow = _getComputedStyle.overflow, overflowX = _getComputedStyle.overflowX, overflowY = _getComputedStyle.overflowY;
33046    return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);
33047  }
33048
33049  
vendor: 352 bytes, lines 33049-33060
33049// node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js
33050  function getScrollParent(node) {
33051    if (["html", "body", "#document"].indexOf(getNodeName(node)) >= 0) {
33052      return node.ownerDocument.body;
33053    }
33054    if (isHTMLElement(node) && isScrollParent(node)) {
33055      return node;
33056    }
33057    return getScrollParent(getParentNode(node));
33058  }
33059
33060  
vendor: 689 bytes, lines 33060-33074
33060// node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js
33061  function listScrollParents(element, list) {
33062    var _element$ownerDocumen;
33063    if (list === void 0) {
33064      list = [];
33065    }
33066    var scrollParent = getScrollParent(element);
33067    var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);
33068    var win = getWindow(scrollParent);
33069    var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;
33070    var updatedList = list.concat(target);
33071    return isBody ? updatedList : updatedList.concat(listScrollParents(getParentNode(target)));
33072  }
33073
33074  
vendor: 257 bytes, lines 33074-33084
33074// node_modules/@popperjs/core/lib/utils/rectToClientRect.js
33075  function rectToClientRect(rect) {
33076    return Object.assign({}, rect, {
33077      left: rect.x,
33078      top: rect.y,
33079      right: rect.x + rect.width,
33080      bottom: rect.y + rect.height
33081    });
33082  }
33083
33084  
vendor: 2,468 bytes, lines 33084-33130
33084// node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js
33085  function getInnerBoundingClientRect(element, strategy) {
33086    var rect = getBoundingClientRect(element, false, strategy === "fixed");
33087    rect.top = rect.top + element.clientTop;
33088    rect.left = rect.left + element.clientLeft;
33089    rect.bottom = rect.top + element.clientHeight;
33090    rect.right = rect.left + element.clientWidth;
33091    rect.width = element.clientWidth;
33092    rect.height = element.clientHeight;
33093    rect.x = rect.left;
33094    rect.y = rect.top;
33095    return rect;
33096  }
33097  function getClientRectFromMixedType(element, clippingParent, strategy) {
33098    return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));
33099  }
33100  function getClippingParents2(element) {
33101    var clippingParents2 = listScrollParents(getParentNode(element));
33102    var canEscapeClipping = ["absolute", "fixed"].indexOf(getComputedStyle2(element).position) >= 0;
33103    var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;
33104    if (!isElement(clipperElement)) {
33105      return [];
33106    }
33107    return clippingParents2.filter(function(clippingParent) {
33108      return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== "body";
33109    });
33110  }
33111  function getClippingRect(element, boundary, rootBoundary, strategy) {
33112    var mainClippingParents = boundary === "clippingParents" ? getClippingParents2(element) : [].concat(boundary);
33113    var clippingParents2 = [].concat(mainClippingParents, [rootBoundary]);
33114    var firstClippingParent = clippingParents2[0];
33115    var clippingRect = clippingParents2.reduce(function(accRect, clippingParent) {
33116      var rect = getClientRectFromMixedType(element, clippingParent, strategy);
33117      accRect.top = max(rect.top, accRect.top);
33118      accRect.right = min(rect.right, accRect.right);
33119      accRect.bottom = min(rect.bottom, accRect.bottom);
33120      accRect.left = max(rect.left, accRect.left);
33121      return accRect;
33122    }, getClientRectFromMixedType(element, firstClippingParent, strategy));
33123    clippingRect.width = clippingRect.right - clippingRect.left;
33124    clippingRect.height = clippingRect.bottom - clippingRect.top;
33125    clippingRect.x = clippingRect.left;
33126    clippingRect.y = clippingRect.top;
33127    return clippingRect;
33128  }
33129
33130  
vendor: 1,647 bytes, lines 33130-33185
33130// node_modules/@popperjs/core/lib/utils/computeOffsets.js
33131  function computeOffsets(_ref) {
33132    var reference2 = _ref.reference, element = _ref.element, placement = _ref.placement;
33133    var basePlacement = placement ? getBasePlacement(placement) : null;
33134    var variation = placement ? getVariation(placement) : null;
33135    var commonX = reference2.x + reference2.width / 2 - element.width / 2;
33136    var commonY = reference2.y + reference2.height / 2 - element.height / 2;
33137    var offsets;
33138    switch (basePlacement) {
33139      case top:
33140        offsets = {
33141          x: commonX,
33142          y: reference2.y - element.height
33143        };
33144        break;
33145      case bottom:
33146        offsets = {
33147          x: commonX,
33148          y: reference2.y + reference2.height
33149        };
33150        break;
33151      case right:
33152        offsets = {
33153          x: reference2.x + reference2.width,
33154          y: commonY
33155        };
33156        break;
33157      case left:
33158        offsets = {
33159          x: reference2.x - element.width,
33160          y: commonY
33161        };
33162        break;
33163      default:
33164        offsets = {
33165          x: reference2.x,
33166          y: reference2.y
33167        };
33168    }
33169    var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
33170    if (mainAxis != null) {
33171      var len = mainAxis === "y" ? "height" : "width";
33172      switch (variation) {
33173        case start4:
33174          offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
33175          break;
33176        case end:
33177          offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
33178          break;
33179        default:
33180      }
33181    }
33182    return offsets;
33183  }
33184
33185  
vendor: 2,766 bytes, lines 33185-33223
33185// node_modules/@popperjs/core/lib/utils/detectOverflow.js
33186  function detectOverflow(state, options) {
33187    if (options === void 0) {
33188      options = {};
33189    }
33190    var _options = options, _options$placement = _options.placement, placement = _options$placement === void 0 ? state.placement : _options$placement, _options$strategy = _options.strategy, strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, _options$boundary = _options.boundary, boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, _options$rootBoundary = _options.rootBoundary, rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, _options$elementConte = _options.elementContext, elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, _options$altBoundary = _options.altBoundary, altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, _options$padding = _options.padding, padding = _options$padding === void 0 ? 0 : _options$padding;
33191    var paddingObject = mergePaddingObject(typeof padding !== "number" ? padding : expandToHashMap(padding, basePlacements));
33192    var altContext = elementContext === popper ? reference : popper;
33193    var popperRect = state.rects.popper;
33194    var element = state.elements[altBoundary ? altContext : elementContext];
33195    var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);
33196    var referenceClientRect = getBoundingClientRect(state.elements.reference);
33197    var popperOffsets2 = computeOffsets({
33198      reference: referenceClientRect,
33199      element: popperRect,
33200      strategy: "absolute",
33201      placement
33202    });
33203    var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets2));
33204    var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect;
33205    var overflowOffsets = {
33206      top: clippingClientRect.top - elementClientRect.top + paddingObject.top,
33207      bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,
33208      left: clippingClientRect.left - elementClientRect.left + paddingObject.left,
33209      right: elementClientRect.right - clippingClientRect.right + paddingObject.right
33210    };
33211    var offsetData = state.modifiersData.offset;
33212    if (elementContext === popper && offsetData) {
33213      var offset2 = offsetData[placement];
33214      Object.keys(overflowOffsets).forEach(function(key) {
33215        var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;
33216        var axis = [top, bottom].indexOf(key) >= 0 ? "y" : "x";
33217        overflowOffsets[key] += offset2[axis] * multiply;
33218      });
33219    }
33220    return overflowOffsets;
33221  }
33222
33223  
vendor: 1,387 bytes, lines 33223-33253
33223// node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js
33224  function computeAutoPlacement(state, options) {
33225    if (options === void 0) {
33226      options = {};
33227    }
33228    var _options = options, placement = _options.placement, boundary = _options.boundary, rootBoundary = _options.rootBoundary, padding = _options.padding, flipVariations = _options.flipVariations, _options$allowedAutoP = _options.allowedAutoPlacements, allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP;
33229    var variation = getVariation(placement);
33230    var placements2 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function(placement2) {
33231      return getVariation(placement2) === variation;
33232    }) : basePlacements;
33233    var allowedPlacements = placements2.filter(function(placement2) {
33234      return allowedAutoPlacements.indexOf(placement2) >= 0;
33235    });
33236    if (allowedPlacements.length === 0) {
33237      allowedPlacements = placements2;
33238    }
33239    var overflows = allowedPlacements.reduce(function(acc, placement2) {
33240      acc[placement2] = detectOverflow(state, {
33241        placement: placement2,
33242        boundary,
33243        rootBoundary,
33244        padding
33245      })[getBasePlacement(placement2)];
33246      return acc;
33247    }, {});
33248    return Object.keys(overflows).sort(function(a4, b4) {
33249      return overflows[a4] - overflows[b4];
33250    });
33251  }
33252
33253  
vendor: 4,365 bytes, lines 33253-33359
33253// node_modules/@popperjs/core/lib/modifiers/flip.js
33254  function getExpandedFallbackPlacements(placement) {
33255    if (getBasePlacement(placement) === auto) {
33256      return [];
33257    }
33258    var oppositePlacement = getOppositePlacement(placement);
33259    return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];
33260  }
33261  function flip(_ref) {
33262    var state = _ref.state, options = _ref.options, name = _ref.name;
33263    if (state.modifiersData[name]._skip) {
33264      return;
33265    }
33266    var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, specifiedFallbackPlacements = options.fallbackPlacements, padding = options.padding, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, _options$flipVariatio = options.flipVariations, flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, allowedAutoPlacements = options.allowedAutoPlacements;
33267    var preferredPlacement = state.options.placement;
33268    var basePlacement = getBasePlacement(preferredPlacement);
33269    var isBasePlacement = basePlacement === preferredPlacement;
33270    var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));
33271    var placements2 = [preferredPlacement].concat(fallbackPlacements).reduce(function(acc, placement2) {
33272      return acc.concat(getBasePlacement(placement2) === auto ? computeAutoPlacement(state, {
33273        placement: placement2,
33274        boundary,
33275        rootBoundary,
33276        padding,
33277        flipVariations,
33278        allowedAutoPlacements
33279      }) : placement2);
33280    }, []);
33281    var referenceRect = state.rects.reference;
33282    var popperRect = state.rects.popper;
33283    var checksMap = /* @__PURE__ */ new Map();
33284    var makeFallbackChecks = true;
33285    var firstFittingPlacement = placements2[0];
33286    for (var i4 = 0; i4 < placements2.length; i4++) {
33287      var placement = placements2[i4];
33288      var _basePlacement = getBasePlacement(placement);
33289      var isStartVariation = getVariation(placement) === start4;
33290      var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
33291      var len = isVertical ? "width" : "height";
33292      var overflow = detectOverflow(state, {
33293        placement,
33294        boundary,
33295        rootBoundary,
33296        altBoundary,
33297        padding
33298      });
33299      var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;
33300      if (referenceRect[len] > popperRect[len]) {
33301        mainVariationSide = getOppositePlacement(mainVariationSide);
33302      }
33303      var altVariationSide = getOppositePlacement(mainVariationSide);
33304      var checks = [];
33305      if (checkMainAxis) {
33306        checks.push(overflow[_basePlacement] <= 0);
33307      }
33308      if (checkAltAxis) {
33309        checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);
33310      }
33311      if (checks.every(function(check) {
33312        return check;
33313      })) {
33314        firstFittingPlacement = placement;
33315        makeFallbackChecks = false;
33316        break;
33317      }
33318      checksMap.set(placement, checks);
33319    }
33320    if (makeFallbackChecks) {
33321      var numberOfChecks = flipVariations ? 3 : 1;
33322      var _loop = function _loop2(_i3) {
33323        var fittingPlacement = placements2.find(function(placement2) {
33324          var checks2 = checksMap.get(placement2);
33325          if (checks2) {
33326            return checks2.slice(0, _i3).every(function(check) {
33327              return check;
33328            });
33329          }
33330        });
33331        if (fittingPlacement) {
33332          firstFittingPlacement = fittingPlacement;
33333          return "break";
33334        }
33335      };
33336      for (var _i2 = numberOfChecks; _i2 > 0; _i2--) {
33337        var _ret = _loop(_i2);
33338        if (_ret === "break")
33339          break;
33340      }
33341    }
33342    if (state.placement !== firstFittingPlacement) {
33343      state.modifiersData[name]._skip = true;
33344      state.placement = firstFittingPlacement;
33345      state.reset = true;
33346    }
33347  }
33348  var flip_default = {
33349    name: "flip",
33350    enabled: true,
33351    phase: "main",
33352    fn: flip,
33353    requiresIfExists: ["offset"],
33354    data: {
33355      _skip: false
33356    }
33357  };
33358
33359  
vendor: 1,856 bytes, lines 33359-33413
33359// node_modules/@popperjs/core/lib/modifiers/hide.js
33360  function getSideOffsets(overflow, rect, preventedOffsets) {
33361    if (preventedOffsets === void 0) {
33362      preventedOffsets = {
33363        x: 0,
33364        y: 0
33365      };
33366    }
33367    return {
33368      top: overflow.top - rect.height - preventedOffsets.y,
33369      right: overflow.right - rect.width + preventedOffsets.x,
33370      bottom: overflow.bottom - rect.height + preventedOffsets.y,
33371      left: overflow.left - rect.width - preventedOffsets.x
33372    };
33373  }
33374  function isAnySideFullyClipped(overflow) {
33375    return [top, right, bottom, left].some(function(side) {
33376      return overflow[side] >= 0;
33377    });
33378  }
33379  function hide(_ref) {
33380    var state = _ref.state, name = _ref.name;
33381    var referenceRect = state.rects.reference;
33382    var popperRect = state.rects.popper;
33383    var preventedOffsets = state.modifiersData.preventOverflow;
33384    var referenceOverflow = detectOverflow(state, {
33385      elementContext: "reference"
33386    });
33387    var popperAltOverflow = detectOverflow(state, {
33388      altBoundary: true
33389    });
33390    var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);
33391    var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);
33392    var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);
33393    var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);
33394    state.modifiersData[name] = {
33395      referenceClippingOffsets,
33396      popperEscapeOffsets,
33397      isReferenceHidden,
33398      hasPopperEscaped
33399    };
33400    state.attributes.popper = Object.assign({}, state.attributes.popper, {
33401      "data-popper-reference-hidden": isReferenceHidden,
33402      "data-popper-escaped": hasPopperEscaped
33403    });
33404  }
33405  var hide_default = {
33406    name: "hide",
33407    enabled: true,
33408    phase: "main",
33409    requiresIfExists: ["preventOverflow"],
33410    fn: hide
33411  };
33412
33413  
vendor: 1,466 bytes, lines 33413-33452
33413// node_modules/@popperjs/core/lib/modifiers/offset.js
33414  function distanceAndSkiddingToXY(placement, rects, offset2) {
33415    var basePlacement = getBasePlacement(placement);
33416    var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;
33417    var _ref = typeof offset2 === "function" ? offset2(Object.assign({}, rects, {
33418      placement
33419    })) : offset2, skidding = _ref[0], distance = _ref[1];
33420    skidding = skidding || 0;
33421    distance = (distance || 0) * invertDistance;
33422    return [left, right].indexOf(basePlacement) >= 0 ? {
33423      x: distance,
33424      y: skidding
33425    } : {
33426      x: skidding,
33427      y: distance
33428    };
33429  }
33430  function offset(_ref2) {
33431    var state = _ref2.state, options = _ref2.options, name = _ref2.name;
33432    var _options$offset = options.offset, offset2 = _options$offset === void 0 ? [0, 0] : _options$offset;
33433    var data = placements.reduce(function(acc, placement) {
33434      acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset2);
33435      return acc;
33436    }, {});
33437    var _data$state$placement = data[state.placement], x5 = _data$state$placement.x, y4 = _data$state$placement.y;
33438    if (state.modifiersData.popperOffsets != null) {
33439      state.modifiersData.popperOffsets.x += x5;
33440      state.modifiersData.popperOffsets.y += y4;
33441    }
33442    state.modifiersData[name] = data;
33443  }
33444  var offset_default = {
33445    name: "offset",
33446    enabled: true,
33447    phase: "main",
33448    requires: ["popperOffsets"],
33449    fn: offset
33450  };
33451
33452  
vendor: 479 bytes, lines 33452-33470
33452// node_modules/@popperjs/core/lib/modifiers/popperOffsets.js
33453  function popperOffsets(_ref) {
33454    var state = _ref.state, name = _ref.name;
33455    state.modifiersData[name] = computeOffsets({
33456      reference: state.rects.reference,
33457      element: state.rects.popper,
33458      strategy: "absolute",
33459      placement: state.placement
33460    });
33461  }
33462  var popperOffsets_default = {
33463    name: "popperOffsets",
33464    enabled: true,
33465    phase: "read",
33466    fn: popperOffsets,
33467    data: {}
33468  };
33469
33470  
vendor: 129 bytes, lines 33470-33475
33470// node_modules/@popperjs/core/lib/utils/getAltAxis.js
33471  function getAltAxis(axis) {
33472    return axis === "x" ? "y" : "x";
33473  }
33474
33475  
vendor: 5,550 bytes, lines 33475-33568
33475// node_modules/@popperjs/core/lib/modifiers/preventOverflow.js
33476  function preventOverflow(_ref) {
33477    var state = _ref.state, options = _ref.options, name = _ref.name;
33478    var _options$mainAxis = options.mainAxis, checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, _options$altAxis = options.altAxis, checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, boundary = options.boundary, rootBoundary = options.rootBoundary, altBoundary = options.altBoundary, padding = options.padding, _options$tether = options.tether, tether = _options$tether === void 0 ? true : _options$tether, _options$tetherOffset = options.tetherOffset, tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;
33479    var overflow = detectOverflow(state, {
33480      boundary,
33481      rootBoundary,
33482      padding,
33483      altBoundary
33484    });
33485    var basePlacement = getBasePlacement(state.placement);
33486    var variation = getVariation(state.placement);
33487    var isBasePlacement = !variation;
33488    var mainAxis = getMainAxisFromPlacement(basePlacement);
33489    var altAxis = getAltAxis(mainAxis);
33490    var popperOffsets2 = state.modifiersData.popperOffsets;
33491    var referenceRect = state.rects.reference;
33492    var popperRect = state.rects.popper;
33493    var tetherOffsetValue = typeof tetherOffset === "function" ? tetherOffset(Object.assign({}, state.rects, {
33494      placement: state.placement
33495    })) : tetherOffset;
33496    var normalizedTetherOffsetValue = typeof tetherOffsetValue === "number" ? {
33497      mainAxis: tetherOffsetValue,
33498      altAxis: tetherOffsetValue
33499    } : Object.assign({
33500      mainAxis: 0,
33501      altAxis: 0
33502    }, tetherOffsetValue);
33503    var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;
33504    var data = {
33505      x: 0,
33506      y: 0
33507    };
33508    if (!popperOffsets2) {
33509      return;
33510    }
33511    if (checkMainAxis) {
33512      var _offsetModifierState$;
33513      var mainSide = mainAxis === "y" ? top : left;
33514      var altSide = mainAxis === "y" ? bottom : right;
33515      var len = mainAxis === "y" ? "height" : "width";
33516      var offset2 = popperOffsets2[mainAxis];
33517      var min2 = offset2 + overflow[mainSide];
33518      var max2 = offset2 - overflow[altSide];
33519      var additive = tether ? -popperRect[len] / 2 : 0;
33520      var minLen = variation === start4 ? referenceRect[len] : popperRect[len];
33521      var maxLen = variation === start4 ? -popperRect[len] : -referenceRect[len];
33522      var arrowElement = state.elements.arrow;
33523      var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
33524        width: 0,
33525        height: 0
33526      };
33527      var arrowPaddingObject = state.modifiersData["arrow#persistent"] ? state.modifiersData["arrow#persistent"].padding : getFreshSideObject();
33528      var arrowPaddingMin = arrowPaddingObject[mainSide];
33529      var arrowPaddingMax = arrowPaddingObject[altSide];
33530      var arrowLen = within(0, referenceRect[len], arrowRect[len]);
33531      var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;
33532      var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;
33533      var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);
33534      var clientOffset = arrowOffsetParent ? mainAxis === "y" ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;
33535      var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;
33536      var tetherMin = offset2 + minOffset - offsetModifierValue - clientOffset;
33537      var tetherMax = offset2 + maxOffset - offsetModifierValue;
33538      var preventedOffset = within(tether ? min(min2, tetherMin) : min2, offset2, tether ? max(max2, tetherMax) : max2);
33539      popperOffsets2[mainAxis] = preventedOffset;
33540      data[mainAxis] = preventedOffset - offset2;
33541    }
33542    if (checkAltAxis) {
33543      var _offsetModifierState$2;
33544      var _mainSide = mainAxis === "x" ? top : left;
33545      var _altSide = mainAxis === "x" ? bottom : right;
33546      var _offset = popperOffsets2[altAxis];
33547      var _len = altAxis === "y" ? "height" : "width";
33548      var _min = _offset + overflow[_mainSide];
33549      var _max = _offset - overflow[_altSide];
33550      var isOriginSide = [top, left].indexOf(basePlacement) !== -1;
33551      var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;
33552      var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;
33553      var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;
33554      var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);
33555      popperOffsets2[altAxis] = _preventedOffset;
33556      data[altAxis] = _preventedOffset - _offset;
33557    }
33558    state.modifiersData[name] = data;
33559  }
33560  var preventOverflow_default = {
33561    name: "preventOverflow",
33562    enabled: true,
33563    phase: "main",
33564    fn: preventOverflow,
33565    requiresIfExists: ["offset"]
33566  };
33567
33568  
vendor: 212 bytes, lines 33568-33576
33568// node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js
33569  function getHTMLElementScroll(element) {
33570    return {
33571      scrollLeft: element.scrollLeft,
33572      scrollTop: element.scrollTop
33573    };
33574  }
33575
33576  
vendor: 258 bytes, lines 33576-33585
33576// node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js
33577  function getNodeScroll(node) {
33578    if (node === getWindow(node) || !isHTMLElement(node)) {
33579      return getWindowScroll(node);
33580    } else {
33581      return getHTMLElementScroll(node);
33582    }
33583  }
33584
33585  
vendor: 1,582 bytes, lines 33585-33628
33585// node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js
33586  function isElementScaled(element) {
33587    var rect = element.getBoundingClientRect();
33588    var scaleX = round(rect.width) / element.offsetWidth || 1;
33589    var scaleY = round(rect.height) / element.offsetHeight || 1;
33590    return scaleX !== 1 || scaleY !== 1;
33591  }
33592  function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {
33593    if (isFixed === void 0) {
33594      isFixed = false;
33595    }
33596    var isOffsetParentAnElement = isHTMLElement(offsetParent);
33597    var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);
33598    var documentElement = getDocumentElement(offsetParent);
33599    var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);
33600    var scroll = {
33601      scrollLeft: 0,
33602      scrollTop: 0
33603    };
33604    var offsets = {
33605      x: 0,
33606      y: 0
33607    };
33608    if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
33609      if (getNodeName(offsetParent) !== "body" || isScrollParent(documentElement)) {
33610        scroll = getNodeScroll(offsetParent);
33611      }
33612      if (isHTMLElement(offsetParent)) {
33613        offsets = getBoundingClientRect(offsetParent, true);
33614        offsets.x += offsetParent.clientLeft;
33615        offsets.y += offsetParent.clientTop;
33616      } else if (documentElement) {
33617        offsets.x = getWindowScrollBarX(documentElement);
33618      }
33619    }
33620    return {
33621      x: rect.left + scroll.scrollLeft - offsets.x,
33622      y: rect.top + scroll.scrollTop - offsets.y,
33623      width: rect.width,
33624      height: rect.height
33625    };
33626  }
33627
33628  
vendor: 1,109 bytes, lines 33628-33665
33628// node_modules/@popperjs/core/lib/utils/orderModifiers.js
33629  function order(modifiers) {
33630    var map = /* @__PURE__ */ new Map();
33631    var visited = /* @__PURE__ */ new Set();
33632    var result = [];
33633    modifiers.forEach(function(modifier) {
33634      map.set(modifier.name, modifier);
33635    });
33636    function sort(modifier) {
33637      visited.add(modifier.name);
33638      var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);
33639      requires.forEach(function(dep) {
33640        if (!visited.has(dep)) {
33641          var depModifier = map.get(dep);
33642          if (depModifier) {
33643            sort(depModifier);
33644          }
33645        }
33646      });
33647      result.push(modifier);
33648    }
33649    modifiers.forEach(function(modifier) {
33650      if (!visited.has(modifier.name)) {
33651        sort(modifier);
33652      }
33653    });
33654    return result;
33655  }
33656  function orderModifiers(modifiers) {
33657    var orderedModifiers = order(modifiers);
33658    return modifierPhases.reduce(function(acc, phase) {
33659      return acc.concat(orderedModifiers.filter(function(modifier) {
33660        return modifier.phase === phase;
33661      }));
33662    }, []);
33663  }
33664
33665  
vendor: 367 bytes, lines 33665-33681
33665// node_modules/@popperjs/core/lib/utils/debounce.js
33666  function debounce(fn3) {
33667    var pending;
33668    return function() {
33669      if (!pending) {
33670        pending = new Promise(function(resolve) {
33671          Promise.resolve().then(function() {
33672            pending = void 0;
33673            resolve(fn3());
33674          });
33675        });
33676      }
33677      return pending;
33678    };
33679  }
33680
33681  
vendor: 557 bytes, lines 33681-33696
33681// node_modules/@popperjs/core/lib/utils/mergeByName.js
33682  function mergeByName(modifiers) {
33683    var merged = modifiers.reduce(function(merged2, current) {
33684      var existing = merged2[current.name];
33685      merged2[current.name] = existing ? Object.assign({}, existing, current, {
33686        options: Object.assign({}, existing.options, current.options),
33687        data: Object.assign({}, existing.data, current.data)
33688      }) : current;
33689      return merged2;
33690    }, {});
33691    return Object.keys(merged).map(function(key) {
33692      return merged[key];
33693    });
33694  }
33695
33696  
vendor: 5,247 bytes, lines 33696-33830
33696// node_modules/@popperjs/core/lib/createPopper.js
33697  var DEFAULT_OPTIONS = {
33698    placement: "bottom",
33699    modifiers: [],
33700    strategy: "absolute"
33701  };
33702  function areValidElements() {
33703    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
33704      args[_key] = arguments[_key];
33705    }
33706    return !args.some(function(element) {
33707      return !(element && typeof element.getBoundingClientRect === "function");
33708    });
33709  }
33710  function popperGenerator(generatorOptions) {
33711    if (generatorOptions === void 0) {
33712      generatorOptions = {};
33713    }
33714    var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers3 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions2 = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
33715    return function createPopper4(reference2, popper2, options) {
33716      if (options === void 0) {
33717        options = defaultOptions2;
33718      }
33719      var state = {
33720        placement: "bottom",
33721        orderedModifiers: [],
33722        options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions2),
33723        modifiersData: {},
33724        elements: {
33725          reference: reference2,
33726          popper: popper2
33727        },
33728        attributes: {},
33729        styles: {}
33730      };
33731      var effectCleanupFns = [];
33732      var isDestroyed = false;
33733      var instance = {
33734        state,
33735        setOptions: function setOptions(setOptionsAction) {
33736          var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
33737          cleanupModifierEffects();
33738          state.options = Object.assign({}, defaultOptions2, state.options, options2);
33739          state.scrollParents = {
33740            reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
33741            popper: listScrollParents(popper2)
33742          };
33743          var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers3, state.options.modifiers)));
33744          state.orderedModifiers = orderedModifiers.filter(function(m5) {
33745            return m5.enabled;
33746          });
33747          runModifierEffects();
33748          return instance.update();
33749        },
33750        forceUpdate: function forceUpdate() {
33751          if (isDestroyed) {
33752            return;
33753          }
33754          var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
33755          if (!areValidElements(reference3, popper3)) {
33756            return;
33757          }
33758          state.rects = {
33759            reference: getCompositeRect(reference3, getOffsetParent(popper3), state.options.strategy === "fixed"),
33760            popper: getLayoutRect(popper3)
33761          };
33762          state.reset = false;
33763          state.placement = state.options.placement;
33764          state.orderedModifiers.forEach(function(modifier) {
33765            return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
33766          });
33767          for (var index4 = 0; index4 < state.orderedModifiers.length; index4++) {
33768            if (state.reset === true) {
33769              state.reset = false;
33770              index4 = -1;
33771              continue;
33772            }
33773            var _state$orderedModifie = state.orderedModifiers[index4], fn3 = _state$orderedModifie.fn, _state$orderedModifie2 = _state$orderedModifie.options, _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, name = _state$orderedModifie.name;
33774            if (typeof fn3 === "function") {
33775              state = fn3({
33776                state,
33777                options: _options,
33778                name,
33779                instance
33780              }) || state;
33781            }
33782          }
33783        },
33784        update: debounce(function() {
33785          return new Promise(function(resolve) {
33786            instance.forceUpdate();
33787            resolve(state);
33788          });
33789        }),
33790        destroy: function destroy2() {
33791          cleanupModifierEffects();
33792          isDestroyed = true;
33793        }
33794      };
33795      if (!areValidElements(reference2, popper2)) {
33796        return instance;
33797      }
33798      instance.setOptions(options).then(function(state2) {
33799        if (!isDestroyed && options.onFirstUpdate) {
33800          options.onFirstUpdate(state2);
33801        }
33802      });
33803      function runModifierEffects() {
33804        state.orderedModifiers.forEach(function(_ref) {
33805          var name = _ref.name, _ref$options = _ref.options, options2 = _ref$options === void 0 ? {} : _ref$options, effect4 = _ref.effect;
33806          if (typeof effect4 === "function") {
33807            var cleanupFn = effect4({
33808              state,
33809              name,
33810              instance,
33811              options: options2
33812            });
33813            var noopFn = function noopFn2() {
33814            };
33815            effectCleanupFns.push(cleanupFn || noopFn);
33816          }
33817        });
33818      }
33819      function cleanupModifierEffects() {
33820        effectCleanupFns.forEach(function(fn3) {
33821          return fn3();
33822        });
33823        effectCleanupFns = [];
33824      }
33825      return instance;
33826    };
33827  }
33828  var createPopper = /* @__PURE__ */ popperGenerator();
33829
33830  
vendor: 254 bytes, lines 33830-33836
33830// node_modules/@popperjs/core/lib/popper-lite.js
33831  var defaultModifiers = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default];
33832  var createPopper2 = /* @__PURE__ */ popperGenerator({
33833    defaultModifiers
33834  });
33835
33836  
vendor: 353 bytes, lines 33836-33842
33836// node_modules/@popperjs/core/lib/popper.js
33837  var defaultModifiers2 = [eventListeners_default, popperOffsets_default, computeStyles_default, applyStyles_default, offset_default, flip_default, preventOverflow_default, arrow_default, hide_default];
33838  var createPopper3 = /* @__PURE__ */ popperGenerator({
33839    defaultModifiers: defaultModifiers2
33840  });
33841
33842  
33842// app/javascript/controllers/select_colour_controller.js
33843  var select_colour_controller_default = class extends Controller {
33844    connect() {
33845      let select = this.element.querySelector("select");
33846      select.addEventListener("change", () => {
33847        select.classList.remove("placeholder");
33848      });
33849    }
33850  };
33851
33852  
33852// app/javascript/controllers/sidebar_toggle_controller.js
33853  var sidebar_toggle_controller_default = class extends Controller {
33854    toggle() {
33855      if (window.innerWidth <= 1024) {
33856        this.sidebarTarget.classList.toggle("is-open");
33857      } else {
33858        this.sidebarTarget.classList.toggle("is-collapsed");
33859        this.element.classList.toggle("sidebar-collapsed");
33860      }
33861    }
33862  };
33863  __publicField(sidebar_toggle_controller_default, "targets", ["sidebar"]);
33864
33865  
33865// app/javascript/controllers/simple_open_controller.js
33866  var simple_open_controller_default = class extends Controller {
33867    toggle() {
33868      this.targetTarget.classList.toggle("open");
33869    }
33870  };
33871  __publicField(simple_open_controller_default, "targets", ["target"]);
33872
33873  
33873// app/javascript/controllers/space_attd_val_controller.js
33874  var space_attd_val_controller_default = class extends Controller {
33875    connect() {
33876      const input = this.element.querySelector("#booking_attendee_count");
33877      const incr = this.element.querySelector(".attendees__incr");
33878      const decr = this.element.querySelector(".attendees__decr");
33879      let i4 = this.capacityValue;
33880      let maxCapacity = Number(this.element.dataset.maxCapacity);
33881      input.addEventListener("change", () => {
33882        i4 = input.value;
33883      });
33884      incr.addEventListener("click", () => {
33885        if (i4 < maxCapacity || !i4 || !maxCapacity) {
33886          i4++;
33887          input.value = i4;
33888          input.dispatchEvent(new Event("input", { bubbles: true }));
33889        }
33890      });
33891      decr.addEventListener("click", () => {
33892        if (i4 >= 2) {
33893          i4--;
33894          input.value = i4;
33895          input.dispatchEvent(new Event("input", { bubbles: true }));
33896        }
33897      });
33898    }
33899  };
33900  __publicField(space_attd_val_controller_default, "values", { capacity: Number });
33901
33902  
33902// app/javascript/controllers/spaces_blocks_controller.js
33903  var spaces_blocks_controller_default = class extends Controller {
33904    connect() {
33905      let mouseDown = false;
33906      let startX, scrollLeft;
33907      const slider = this.element;
33908      const startDragging = (e4) => {
33909        mouseDown = true;
33910        startX = e4.pageX - slider.offsetLeft;
33911        scrollLeft = slider.scrollLeft;
33912        this.element.style.cursor = "grabbing";
33913      };
33914      const stopDragging = (e4) => {
33915        mouseDown = false;
33916        this.element.style.cursor = "grab";
33917      };
33918      const move = (e4) => {
33919        e4.preventDefault();
33920        if (!mouseDown) {
33921          return;
33922        }
33923        const x5 = e4.pageX - slider.offsetLeft;
33924        const scroll = x5 - startX;
33925        slider.scrollLeft = scrollLeft - scroll;
33926      };
33927      slider.addEventListener("mousemove", move, false);
33928      slider.addEventListener("mousedown", startDragging, false);
33929      slider.addEventListener("mouseup", stopDragging, false);
33930      slider.addEventListener("mouseleave", stopDragging, false);
33931    }
33932  };
33933
33934  
33934// app/javascript/controllers/spaces_boro_id_controller.js
33935  var spaces_boro_id_controller_default = class extends Controller {
33936    connect() {
33937      const regionInputs = this.regionTarget.querySelectorAll("input[type=checkbox]");
33938      const locationInputs = this.locationTarget.querySelectorAll("input[type=checkbox]");
33939      const locationCheckboxes = this.locationTarget.querySelectorAll("span.checkbox");
33940      const regionChecked = [...regionInputs].some((region) => region.checked == true);
33941      regionInputs.forEach((region) => {
33942        region.addEventListener("change", () => {
33943          this.hide(regionInputs, locationInputs, locationCheckboxes);
33944          locationInputs.forEach((location2) => {
33945            location2.checked = false;
33946          });
33947        });
33948      });
33949      if (regionChecked) {
33950        this.hide(regionInputs, locationInputs, locationCheckboxes);
33951      }
33952    }
33953    hide(regionInputs, locationInputs, locationCheckboxes) {
33954      let showArr = [];
33955      locationCheckboxes.forEach((span) => {
33956        span.classList.add("hidden");
33957      });
33958      regionInputs.forEach((region) => {
33959        if (region.checked) {
33960          locationInputs.forEach((loc) => {
33961            if (region.dataset.boroughId == loc.dataset.boroughId) {
33962              if (!showArr.includes(loc)) {
33963                showArr.push(loc);
33964              }
33965            }
33966          });
33967        }
33968      });
33969      showArr.forEach((entry) => {
33970        locationCheckboxes.forEach((span) => {
33971          if (span.contains(entry)) {
33972            span.classList.remove("hidden");
33973          }
33974        });
33975      });
33976    }
33977  };
33978  __publicField(spaces_boro_id_controller_default, "targets", ["region", "location"]);
33979
33980  
33980// app/javascript/controllers/spaces_date_pika_controller.js
33981  var import_pikaday4 = __toESM(require_pikaday());
33982  var import_moment2 = __toESM(require_moment());
33983  var spaces_date_pika_controller_default = class extends Controller {
33984    connect() {
33985      const disabledDates = this.inputTarget.dataset.disabled.split(",");
33986      const activitiesPicker = new import_pikaday4.default({
33987        field: this.inputTarget,
33988        bound: false,
33989        minDate: new Date(),
33990        keyboardInput: false,
33991        firstDay: 1,
33992        format: "DD/MM/YYYY",
33993        container: document.getElementById("spaces-calendar")
33994      });
33995    }
33996    open() {
33997      this.modalTarget.classList.add("open");
33998    }
33999    close() {
34000      this.modalTarget.classList.remove("open");
34001    }
34002  };
34003  __publicField(spaces_date_pika_controller_default, "targets", ["input", "modal"]);
34004
34005  
34005// app/javascript/controllers/spaces_finder_redirect_controller.js
34006  var spaces_finder_redirect_controller_default = class extends Controller {
34007    connect() {
34008    }
34009    submit() {
34010      this.element.method = "GET";
34011      this.element.setAttribute("data-turbo", "false");
34012    }
34013  };
34014
34015  
34015// app/javascript/controllers/spaces_load_more_controller.js
34016  var spaces_load_more_controller_default = class extends Controller {
34017    connect() {
34018    }
34019    open(e4) {
34020      e4.preventDefault();
34021      const i4 = this.btnTarget.dataset.pageNumber;
34022      const spacePages = document.querySelectorAll(".spaces-search-results");
34023      spacePages.forEach((page) => {
34024        let pageID = page.dataset.spacePage;
34025        if (i4 == pageID) {
34026          page.classList.add("open");
34027        }
34028      });
34029      e4.target.style.display = "none";
34030    }
34031  };
34032  __publicField(spaces_load_more_controller_default, "targets", ["btn"]);
34033
34034  
34034// app/javascript/controllers/spaces_section_toggle_controller.js
34035  var spaces_section_toggle_controller_default = class extends Controller {
34036    connect() {
34037    }
34038    open() {
34039      this.bodyTarget.classList.add("open");
34040      this.headerTarget.classList.add("closed");
34041    }
34042    close() {
34043      this.bodyTarget.classList.remove("open");
34044      this.headerTarget.classList.remove("closed");
34045    }
34046  };
34047  __publicField(spaces_section_toggle_controller_default, "targets", ["header", "body", "input"]);
34048
34049  
34049// app/javascript/controllers/spaces_start_time_controller.js
34050  var spaces_start_time_controller_default = class extends Controller {
34051    connect() {
34052      this.hideOptions();
34053      const buttons = this.element.querySelectorAll(".start-time_btn");
34054      buttons.forEach((button) => {
34055        button.addEventListener("click", () => {
34056          if (button.classList.contains("active")) {
34057            button.classList.remove("active");
34058          } else if (!button.classList.contains("unav")) {
34059            buttons.forEach((button2) => {
34060              button2.classList.remove("active");
34061            });
34062            button.classList.toggle("active");
34063          }
34064          this.sendTime();
34065        });
34066      });
34067      let inputFields = this.element.querySelectorAll("div.input");
34068      inputFields.forEach((e4) => {
34069        e4.addEventListener("click", () => {
34070          this.open();
34071        });
34072      });
34073      let startMinuteField = document.querySelector("#spaces_finder_start_minute");
34074      if (startMinuteField) {
34075        if (startMinuteField.value == "") {
34076          startMinuteField.value = 0;
34077        }
34078      }
34079    }
34080    open() {
34081      this.modalTarget.classList.add("open");
34082    }
34083    close() {
34084      this.modalTarget.classList.remove("open");
34085    }
34086    hideOptions() {
34087      const options = this.element.querySelectorAll("option");
34088      options.forEach((option) => {
34089        option.classList.add("hidden");
34090      });
34091    }
34092    sendTime() {
34093      let hourSelect;
34094      let minuteSelect;
34095      let spacesFinder = document.querySelector("#spaces_finder_start_hour");
34096      let spaceSingle = document.querySelector("#booking_start_time_hours");
34097      if (spacesFinder) {
34098        hourSelect = document.querySelector("#spaces_finder_start_hour");
34099        minuteSelect = document.querySelector("#spaces_finder_start_minute");
34100      } else if (spaceSingle) {
34101        hourSelect = document.querySelector("#booking_start_time_hours");
34102        minuteSelect = document.querySelector("#booking_start_time_minutes");
34103      }
34104      let selected = this.btnscontTarget.querySelector(".active").innerText.trim();
34105      let timeArray = selected.split(":");
34106      let hour = timeArray[0];
34107      let minute = timeArray[1];
34108      hourSelect.value = hour;
34109      if (spacesFinder) {
34110        if (minute == "00") {
34111          minuteSelect.value = 0;
34112        } else {
34113          minuteSelect.value = minute;
34114        }
34115      } else if (spaceSingle) {
34116        if (minute == "00") {
34117          minuteSelect.value = "00";
34118        } else {
34119          minuteSelect.value = minute;
34120        }
34121      }
34122    }
34123  };
34124  __publicField(spaces_start_time_controller_default, "targets", ["modal", "btnscont"]);
34125
34126  
34126// app/javascript/controllers/system_alerts_controller.js
34127  var system_alerts_controller_default = class extends Controller {
34128    connect() {
34129    }
34130    createAlert(style, message) {
34131      const alertDiv = document.createElement("div");
34132      alertDiv.setAttribute("class", `alert alert-${style} fixed-alert`);
34133      alertDiv.setAttribute("role", `alert`);
34134      const alertText = document.createTextNode(message);
34135      const dismissButton = document.createElement("button");
34136      dismissButton.setAttribute("aria-label", "Close");
34137      dismissButton.setAttribute("class", "btn-close");
34138      dismissButton.setAttribute("data-bs-dismiss", "alert");
34139      dismissButton.setAttribute("type", "button");
34140      dismissButton.innerHTML = `
34141      <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
34142        <path fill-rule="evenodd" clip-rule="evenodd" d="M2.79289 2.79289C3.18342 2.40237 3.81658 2.40237 4.20711 2.79289L12 10.5858L19.7929 2.79289C20.1834 2.40237 20.8166 2.40237 21.2071 2.79289C21.5976 3.18342 21.5976 3.81658 21.2071 4.20711L13.4142 12L21.2071 19.7929C21.5976 20.1834 21.5976 20.8166 21.2071 21.2071C20.8166 21.5976 20.1834 21.5976 19.7929 21.2071L12 13.4142L4.20711 21.2071C3.81658 21.5976 3.18342 21.5976 2.79289 21.2071C2.40237 20.8166 2.40237 20.1834 2.79289 19.7929L10.5858 12L2.79289 4.20711C2.40237 3.81658 2.40237 3.18342 2.79289 2.79289Z" fill="white"/>
34143      </svg>
34144    `;
34145      alertDiv.appendChild(alertText);
34146      alertDiv.appendChild(dismissButton);
34147      this.containerTarget.appendChild(alertDiv);
34148    }
34149  };
34150  __publicField(system_alerts_controller_default, "targets", ["container"]);
34151
34152  
34152// app/javascript/controllers/table_editor_controller.js
34153  var MAX_PARENT_SEARCH_DEPTH = 5;
34154  var table_editor_controller_default = class extends Controller {
34155    addRow(event2) {
34156      Rails.ajax({
34157        url: `/library/tables/${this.getID()}`,
34158        data: "method=addRow",
34159        type: "patch",
34160        success: this.attachTable.bind(this)
34161      });
34162    }
34163    addColumn(event2) {
34164      Rails.ajax({
34165        url: `/library/tables/${this.getID()}`,
34166        data: "method=addColumn",
34167        type: "patch",
34168        success: this.attachTable.bind(this)
34169      });
34170    }
34171    updateCell(event2) {
34172      Rails.ajax({
34173        url: `/library/tables/${this.getID()}`,
34174        data: `method=updateCell&cell=${encodeURIComponent(event2.target.dataset.key)}&value=${encodeURIComponent(event2.target.value)}`,
34175        type: "patch"
34176      });
34177    }
34178    getID() {
34179      return this.data.get("id");
34180    }
34181    attachTable(tableAttachment) {
34182      let attachment = new no.Attachment(tableAttachment);
34183      var parent = this.element.parentNode;
34184      var editorNode = null;
34185      for (let i4 = 0; i4 < MAX_PARENT_SEARCH_DEPTH; i4++) {
34186        editorNode = parent.querySelector("trix-editor");
34187        if (editorNode != null) {
34188          i4 = MAX_PARENT_SEARCH_DEPTH;
34189        } else {
34190          parent = parent.parentNode;
34191        }
34192      }
34193      editorNode.editor.insertAttachment(attachment);
34194    }
34195  };
34196
34197  
34197// app/javascript/controllers/table_refresh_controller.js
34198  var table_refresh_controller_default = class extends Controller {
34199    connect() {
34200      const targetTableId = this.element.dataset.targetTable;
34201      const frame = document.getElementById(targetTableId);
34202      if (frame) {
34203        frame.reload();
34204      }
34205    }
34206  };
34207
34208  
34208// app/javascript/controllers/turbo_modal_controller.js
34209  var turbo_modal_controller_default = class extends Controller {
34210    connect() {
34211    }
34212    initialize() {
34213      this.element.setAttribute("data-action", "click->turbo-modal#click");
34214    }
34215    click(e4) {
34216      e4.preventDefault();
34217      this.url = this.element.getAttribute("href");
34218      fetch(this.url, {
34219        headers: {
34220          Accept: "text/vnd.turbo-stream.html"
34221        }
34222      }).then((r4) => r4.text()).then((html) => Turbo.renderStreamMessage(html));
34223    }
34224  };
34225
34226  
34226// app/javascript/controllers/turbo_rescue_controller.js
34227  var turbo_rescue_controller_default = class extends Controller {
34228    connect() {
34229      this.handleServerError = this.handleServerError.bind(this);
34230      this.handleBeforeFetchResponse = this.handleBeforeFetchResponse.bind(this);
34231      document.addEventListener("turbo:frame-missing", this.handleServerError);
34232      document.addEventListener("turbo:before-fetch-response", this.handleBeforeFetchResponse);
34233    }
34234    disconnect() {
34235      document.removeEventListener("turbo:frame-missing", this.handleServerError);
34236      document.removeEventListener("turbo:before-fetch-response", this.handleBeforeFetchResponse);
34237    }
34238    handleServerError(event2) {
34239      event2.preventDefault();
34240      const systemAlertsElement = document.querySelector('[data-controller~="system-alerts"]');
34241      if (systemAlertsElement) {
34242        const systemAlertsController = this.application.getControllerForElementAndIdentifier(systemAlertsElement, "system-alerts");
34243        if (systemAlertsController) {
34244          systemAlertsController.createAlert("danger", "A system error occurred. Please try again or contact support if the issue persists.");
34245        }
34246      }
34247    }
34248    handleBeforeFetchResponse(event2) {
34249      const response = event2.detail.fetchResponse.response;
34250      if (response.status === 500) {
34251        this.handleServerError(event2);
34252      }
34253    }
34254  };
34255
34256  
34256// app/javascript/controllers/work_tabs_controller.js
34257  var work_tabs_controller_default = class extends Controller {
34258    show({ params: { panel } }) {
34259      this.tabTargets.forEach((tab) => {
34260        tab.classList.toggle("active", tab.dataset.workTabsPanelParam === panel);
34261      });
34262      this.panelTargets.forEach((element) => {
34263        element.classList.toggle("hidden", element.dataset.workTabsPanel !== panel);
34264      });
34265    }
34266  };
34267  __publicField(work_tabs_controller_default, "targets", ["panel", "tab"]);
34268
34269  
34269// app/javascript/controllers/works_formats_controller.js
34270  var works_formats_controller_default = class extends Controller {
34271    connect() {
34272    }
34273    toggle() {
34274      const svg = this.buttonTarget.querySelector("svg");
34275      svg.classList.toggle("spin");
34276      this.editionsTarget.classList.toggle("closed");
34277    }
34278  };
34279  __publicField(works_formats_controller_default, "targets", ["button", "editions"]);
34280
34281  
34281// app/javascript/controllers/year_range_controller.js
34282  var year_range_controller_default = class extends Controller {
34283    connect() {
34284      this.updateFill();
34285      this.updatePositions();
34286    }
34287    update(event2) {
34288      let minVal = parseInt(this.minRangeTarget.value);
34289      let maxVal = parseInt(this.maxRangeTarget.value);
34290      if (minVal > maxVal) {
34291        if (event2.target === this.minRangeTarget) {
34292          this.minRangeTarget.value = maxVal;
34293          minVal = maxVal;
34294        } else {
34295          this.maxRangeTarget.value = minVal;
34296          maxVal = minVal;
34297        }
34298      }
34299      this.minDisplayTarget.value = minVal;
34300      this.maxDisplayTarget.value = maxVal;
34301      this.updateFill();
34302      this.updatePositions();
34303    }
34304    updateFromInput() {
34305      let minVal = parseInt(this.minDisplayTarget.value) || this.minValue;
34306      let maxVal = parseInt(this.maxDisplayTarget.value) || this.maxValue;
34307      minVal = Math.max(this.minValue, Math.min(minVal, maxVal));
34308      maxVal = Math.min(this.maxValue, Math.max(maxVal, minVal));
34309      this.minRangeTarget.value = minVal;
34310      this.maxRangeTarget.value = maxVal;
34311      this.minDisplayTarget.value = minVal;
34312      this.maxDisplayTarget.value = maxVal;
34313      this.updateFill();
34314      this.updatePositions();
34315    }
34316    updateFill() {
34317      const min2 = parseInt(this.minRangeTarget.value);
34318      const max2 = parseInt(this.maxRangeTarget.value);
34319      const total = this.maxValue - this.minValue;
34320      const leftPercent = (min2 - this.minValue) / total * 100;
34321      const widthPercent = (max2 - min2) / total * 100;
34322      this.fillTarget.style.left = leftPercent + "%";
34323      this.fillTarget.style.width = widthPercent + "%";
34324    }
34325    updatePositions() {
34326      const trackWidth = this.minRangeTarget.offsetWidth;
34327      if (!trackWidth)
34328        return;
34329      const thumbRadius = 8;
34330      const travelWidth = trackWidth - thumbRadius * 2;
34331      const total = this.maxValue - this.minValue;
34332      const minVal = parseInt(this.minRangeTarget.value);
34333      const maxVal = parseInt(this.maxRangeTarget.value);
34334      const minPx = thumbRadius + (minVal - this.minValue) / total * travelWidth;
34335      const maxPx = thumbRadius + (maxVal - this.minValue) / total * travelWidth;
34336      this.minDisplayTarget.style.left = minPx + "px";
34337      this.maxDisplayTarget.style.left = maxPx + "px";
34338    }
34339  };
34340  __publicField(year_range_controller_default, "targets", ["minRange", "maxRange", "minDisplay", "maxDisplay", "fill"]);
34341  __publicField(year_range_controller_default, "values", { min: Number, max: Number });
34342
34343  
34343// app/javascript/controllers/index.js
34344  application.register("action-text-character-limiter", action_text_character_limiter_controller_default);
34345  application.register("activities-pika", activities_pika_controller_default);
34346  application.register("adv-search", adv_search_controller_default);
34347  application.register("aft-occ", aft_occ_controller_default);
34348  application.register("alerts", alerts_controller_default);
34349  application.register("alerts-toggle", alerts_toggle_controller_default);
34350  application.register("amount-amend", amount_amend_controller_default);
34351  application.register("asset-grid", asset_grid_controller_default);
34352  application.register("attd-val", attd_val_controller_default);
34353  application.register("auto-submit", auto_submit_controller_default);
34354  application.register("availability-all-day-toggle", availability_all_day_toggle_controller_default);
34355  application.register("banner-img", banner_img_controller_default);
34356  application.register("billing-address-form", billing_address_form_controller_default);
34357  application.register("blocked-delete", blocked_delete_controller_default);
34358  application.register("booking-button-enabler", booking_button_enabler_controller_default);
34359  application.register("borough-reload", borough_reload_controller_default);
34360  application.register("booking-form", booking_form_controller_default);
34361  application.register("booking-form-section", booking_form_section_controller_default);
34362  application.register("booking-form-submit-button", booking_form_submit_button_controller_default);
34363  application.register("booking-form-time-and-duration-button-enabler", booking_form_time_and_duration_button_enabler_controller_default);
34364  application.register("booking-summary", booking_summary_controller_default);
34365  application.register("booking-type-reason", booking_type_reason_controller_default);
34366  application.register("bookings-calendar", bookings_calendar_controller_default);
34367  application.register("bootstrap-modal", bootstrap_modal_controller_default);
34368  application.register("browser-location", browser_location_controller_default);
34369  application.register("call-to-action", call_to_action_controller_default);
34370  application.register("cat-grid-switch", cat_grid_switch_controller_default);
34371  application.register("charges-toggle", charges_toggle_controller_default);
34372  application.register("checkbox", checkbox_controller_default);
34373  application.register("checkbox-field", checkbox_field_controller_default);
34374  application.register("cms--bookings--booking-reason-toggle", booking_reason_toggle_controller_default);
34375  application.register("cms--ongoing-toggle", ongoing_toggle_controller_default);
34376  application.register("cms-booking-add-date", cms_booking_add_date_controller_default);
34377  application.register("cms-booking-form", cms_booking_form_controller_default);
34378  application.register("cms-booking-repeat", cms_booking_repeat_controller_default);
34379  application.register("cms-booking-specified-repeat-switcher", cms_booking_specified_repeat_switcher_controller_default);
34380  application.register("cms-business-booking-switcher", cms_business_booking_switcher_controller_default);
34381  application.register("cms-item-groups", cms_item_groups_controller_default);
34382  application.register("cms-location-role", cms_location_role_controller_default);
34383  application.register("cms-spinner", cms_spinner_controller_default);
34384  application.register("cms-user-form", cms_user_form_controller_default);
34385  application.register("dura-pick", dura_pick_controller_default);
34386  application.register("duration-picker", duration_picker_controller_default);
34387  application.register("facet-clear", facet_clear_controller_default);
34388  application.register("faqs", faqs_controller_default);
34389  application.register("filter-expand", filter_expand_controller_default);
34390  application.register("flash-notice", flash_notice_controller_default);
34391  application.register("headexpd", headexpd_controller_default);
34392  application.register("hello", hello_controller_default);
34393  application.register("hover-sync", hover_sync_controller_default);
34394  application.register("jump-to-page", jump_to_page_controller_default);
34395  application.register("listmodal", listmodal_controller_default);
34396  application.register("mob-sidebar", mob_sidebar_controller_default);
34397  application.register("mobile-burger", mobile_burger_controller_default);
34398  application.register("mobile-search", mobile_search_controller_default);
34399  application.register("nav-dropdown", nav_dropdown_controller_default);
34400  application.register("opayo-payment-attempt-form", opayo_payment_attempt_form_controller_default);
34401  application.register("opening-times", opening_times_controller_default);
34402  application.register("pikaday-init", pikaday_init_controller_default);
34403  application.register("progsteps", progsteps_controller_default);
34404  application.register("recite-me", recite_me_controller_default);
34405  application.register("region-london", region_london_controller_default);
34406  application.register("result-avail", result_avail_controller_default);
34407  application.register("rich-text-table", rich_text_table_controller_default);
34408  application.register("room-card-click-handler", room_card_click_handler_controller_default);
34409  application.register("search-filter", search_filter_controller_default);
34410  application.register("select-all", select_all_controller_default);
34411  application.register("select-button-disable", select_button_disable_controller_default);
34412  application.register("select-colour", select_colour_controller_default);
34413  application.register("sidebar-toggle", sidebar_toggle_controller_default);
34414  application.register("simple-open", simple_open_controller_default);
34415  application.register("space-attd-val", space_attd_val_controller_default);
34416  application.register("spaces-blocks", spaces_blocks_controller_default);
34417  application.register("spaces-boro-id", spaces_boro_id_controller_default);
34418  application.register("spaces-date-pika", spaces_date_pika_controller_default);
34419  application.register("spaces-finder-redirect", spaces_finder_redirect_controller_default);
34420  application.register("spaces-load-more", spaces_load_more_controller_default);
34421  application.register("spaces-section-toggle", spaces_section_toggle_controller_default);
34422  application.register("spaces-start-time", spaces_start_time_controller_default);
34423  application.register("system-alerts", system_alerts_controller_default);
34424  application.register("table-editor", table_editor_controller_default);
34425  application.register("table-refresh", table_refresh_controller_default);
34426  application.register("turbo-modal", turbo_modal_controller_default);
34427  application.register("turbo-rescue", turbo_rescue_controller_default);
34428  application.register("work-tabs", work_tabs_controller_default);
34429  application.register("works-formats", works_formats_controller_default);
34430  application.register("year-range", year_range_controller_default);
34431
34432  
34432// app/javascript/modules/index.js
34433  var import_mutation_events = __toESM(require_mutation_events_min());
34434
34435  
vendor: 2,873 bytes, lines 34435-34585
34435// node_modules/swiper/shared/ssr-window.esm.mjs
34436  function isObject(obj) {
34437    return obj !== null && typeof obj === "object" && "constructor" in obj && obj.constructor === Object;
34438  }
34439  function extend3(target, src) {
34440    if (target === void 0) {
34441      target = {};
34442    }
34443    if (src === void 0) {
34444      src = {};
34445    }
34446    Object.keys(src).forEach((key) => {
34447      if (typeof target[key] === "undefined")
34448        target[key] = src[key];
34449      else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {
34450        extend3(target[key], src[key]);
34451      }
34452    });
34453  }
34454  var ssrDocument = {
34455    body: {},
34456    addEventListener() {
34457    },
34458    removeEventListener() {
34459    },
34460    activeElement: {
34461      blur() {
34462      },
34463      nodeName: ""
34464    },
34465    querySelector() {
34466      return null;
34467    },
34468    querySelectorAll() {
34469      return [];
34470    },
34471    getElementById() {
34472      return null;
34473    },
34474    createEvent() {
34475      return {
34476        initEvent() {
34477        }
34478      };
34479    },
34480    createElement() {
34481      return {
34482        children: [],
34483        childNodes: [],
34484        style: {},
34485        setAttribute() {
34486        },
34487        getElementsByTagName() {
34488          return [];
34489        }
34490      };
34491    },
34492    createElementNS() {
34493      return {};
34494    },
34495    importNode() {
34496      return null;
34497    },
34498    location: {
34499      hash: "",
34500      host: "",
34501      hostname: "",
34502      href: "",
34503      origin: "",
34504      pathname: "",
34505      protocol: "",
34506      search: ""
34507    }
34508  };
34509  function getDocument() {
34510    const doc = typeof document !== "undefined" ? document : {};
34511    extend3(doc, ssrDocument);
34512    return doc;
34513  }
34514  var ssrWindow = {
34515    document: ssrDocument,
34516    navigator: {
34517      userAgent: ""
34518    },
34519    location: {
34520      hash: "",
34521      host: "",
34522      hostname: "",
34523      href: "",
34524      origin: "",
34525      pathname: "",
34526      protocol: "",
34527      search: ""
34528    },
34529    history: {
34530      replaceState() {
34531      },
34532      pushState() {
34533      },
34534      go() {
34535      },
34536      back() {
34537      }
34538    },
34539    CustomEvent: function CustomEvent3() {
34540      return this;
34541    },
34542    addEventListener() {
34543    },
34544    removeEventListener() {
34545    },
34546    getComputedStyle() {
34547      return {
34548        getPropertyValue() {
34549          return "";
34550        }
34551      };
34552    },
34553    Image() {
34554    },
34555    Date() {
34556    },
34557    screen: {},
34558    setTimeout() {
34559    },
34560    clearTimeout() {
34561    },
34562    matchMedia() {
34563      return {};
34564    },
34565    requestAnimationFrame(callback) {
34566      if (typeof setTimeout === "undefined") {
34567        callback();
34568        return null;
34569      }
34570      return setTimeout(callback, 0);
34571    },
34572    cancelAnimationFrame(id2) {
34573      if (typeof setTimeout === "undefined") {
34574        return;
34575      }
34576      clearTimeout(id2);
34577    }
34578  };
34579  function getWindow2() {
34580    const win = typeof window !== "undefined" ? window : {};
34581    extend3(win, ssrWindow);
34582    return win;
34583  }
34584
34585  
vendor: 8,107 bytes, lines 34585-34830
34585// node_modules/swiper/shared/utils.mjs
34586  function deleteProps(obj) {
34587    const object = obj;
34588    Object.keys(object).forEach((key) => {
34589      try {
34590        object[key] = null;
34591      } catch (e4) {
34592      }
34593      try {
34594        delete object[key];
34595      } catch (e4) {
34596      }
34597    });
34598  }
34599  function nextTick(callback, delay) {
34600    if (delay === void 0) {
34601      delay = 0;
34602    }
34603    return setTimeout(callback, delay);
34604  }
34605  function now2() {
34606    return Date.now();
34607  }
34608  function getComputedStyle3(el) {
34609    const window2 = getWindow2();
34610    let style;
34611    if (window2.getComputedStyle) {
34612      style = window2.getComputedStyle(el, null);
34613    }
34614    if (!style && el.currentStyle) {
34615      style = el.currentStyle;
34616    }
34617    if (!style) {
34618      style = el.style;
34619    }
34620    return style;
34621  }
34622  function getTranslate(el, axis) {
34623    if (axis === void 0) {
34624      axis = "x";
34625    }
34626    const window2 = getWindow2();
34627    let matrix;
34628    let curTransform;
34629    let transformMatrix;
34630    const curStyle = getComputedStyle3(el);
34631    if (window2.WebKitCSSMatrix) {
34632      curTransform = curStyle.transform || curStyle.webkitTransform;
34633      if (curTransform.split(",").length > 6) {
34634        curTransform = curTransform.split(", ").map((a4) => a4.replace(",", ".")).join(", ");
34635      }
34636      transformMatrix = new window2.WebKitCSSMatrix(curTransform === "none" ? "" : curTransform);
34637    } else {
34638      transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue("transform").replace("translate(", "matrix(1, 0, 0, 1,");
34639      matrix = transformMatrix.toString().split(",");
34640    }
34641    if (axis === "x") {
34642      if (window2.WebKitCSSMatrix)
34643        curTransform = transformMatrix.m41;
34644      else if (matrix.length === 16)
34645        curTransform = parseFloat(matrix[12]);
34646      else
34647        curTransform = parseFloat(matrix[4]);
34648    }
34649    if (axis === "y") {
34650      if (window2.WebKitCSSMatrix)
34651        curTransform = transformMatrix.m42;
34652      else if (matrix.length === 16)
34653        curTransform = parseFloat(matrix[13]);
34654      else
34655        curTransform = parseFloat(matrix[5]);
34656    }
34657    return curTransform || 0;
34658  }
34659  function isObject2(o3) {
34660    return typeof o3 === "object" && o3 !== null && o3.constructor && Object.prototype.toString.call(o3).slice(8, -1) === "Object";
34661  }
34662  function isNode(node) {
34663    if (typeof window !== "undefined" && typeof window.HTMLElement !== "undefined") {
34664      return node instanceof HTMLElement;
34665    }
34666    return node && (node.nodeType === 1 || node.nodeType === 11);
34667  }
34668  function extend4() {
34669    const to2 = Object(arguments.length <= 0 ? void 0 : arguments[0]);
34670    const noExtend = ["__proto__", "constructor", "prototype"];
34671    for (let i4 = 1; i4 < arguments.length; i4 += 1) {
34672      const nextSource = i4 < 0 || arguments.length <= i4 ? void 0 : arguments[i4];
34673      if (nextSource !== void 0 && nextSource !== null && !isNode(nextSource)) {
34674        const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);
34675        for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
34676          const nextKey = keysArray[nextIndex];
34677          const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
34678          if (desc !== void 0 && desc.enumerable) {
34679            if (isObject2(to2[nextKey]) && isObject2(nextSource[nextKey])) {
34680              if (nextSource[nextKey].__swiper__) {
34681                to2[nextKey] = nextSource[nextKey];
34682              } else {
34683                extend4(to2[nextKey], nextSource[nextKey]);
34684              }
34685            } else if (!isObject2(to2[nextKey]) && isObject2(nextSource[nextKey])) {
34686              to2[nextKey] = {};
34687              if (nextSource[nextKey].__swiper__) {
34688                to2[nextKey] = nextSource[nextKey];
34689              } else {
34690                extend4(to2[nextKey], nextSource[nextKey]);
34691              }
34692            } else {
34693              to2[nextKey] = nextSource[nextKey];
34694            }
34695          }
34696        }
34697      }
34698    }
34699    return to2;
34700  }
34701  function setCSSProperty(el, varName, varValue) {
34702    el.style.setProperty(varName, varValue);
34703  }
34704  function animateCSSModeScroll(_ref) {
34705    let {
34706      swiper,
34707      targetPosition,
34708      side
34709    } = _ref;
34710    const window2 = getWindow2();
34711    const startPosition = -swiper.translate;
34712    let startTime = null;
34713    let time;
34714    const duration = swiper.params.speed;
34715    swiper.wrapperEl.style.scrollSnapType = "none";
34716    window2.cancelAnimationFrame(swiper.cssModeFrameID);
34717    const dir = targetPosition > startPosition ? "next" : "prev";
34718    const isOutOfBound = (current, target) => {
34719      return dir === "next" && current >= target || dir === "prev" && current <= target;
34720    };
34721    const animate = () => {
34722      time = new Date().getTime();
34723      if (startTime === null) {
34724        startTime = time;
34725      }
34726      const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
34727      const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
34728      let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
34729      if (isOutOfBound(currentPosition, targetPosition)) {
34730        currentPosition = targetPosition;
34731      }
34732      swiper.wrapperEl.scrollTo({
34733        [side]: currentPosition
34734      });
34735      if (isOutOfBound(currentPosition, targetPosition)) {
34736        swiper.wrapperEl.style.overflow = "hidden";
34737        swiper.wrapperEl.style.scrollSnapType = "";
34738        setTimeout(() => {
34739          swiper.wrapperEl.style.overflow = "";
34740          swiper.wrapperEl.scrollTo({
34741            [side]: currentPosition
34742          });
34743        });
34744        window2.cancelAnimationFrame(swiper.cssModeFrameID);
34745        return;
34746      }
34747      swiper.cssModeFrameID = window2.requestAnimationFrame(animate);
34748    };
34749    animate();
34750  }
34751  function elementChildren(element, selector) {
34752    if (selector === void 0) {
34753      selector = "";
34754    }
34755    return [...element.children].filter((el) => el.matches(selector));
34756  }
34757  function createElement(tag, classes2) {
34758    if (classes2 === void 0) {
34759      classes2 = [];
34760    }
34761    const el = document.createElement(tag);
34762    el.classList.add(...Array.isArray(classes2) ? classes2 : [classes2]);
34763    return el;
34764  }
34765  function elementPrevAll(el, selector) {
34766    const prevEls = [];
34767    while (el.previousElementSibling) {
34768      const prev = el.previousElementSibling;
34769      if (selector) {
34770        if (prev.matches(selector))
34771          prevEls.push(prev);
34772      } else
34773        prevEls.push(prev);
34774      el = prev;
34775    }
34776    return prevEls;
34777  }
34778  function elementNextAll(el, selector) {
34779    const nextEls = [];
34780    while (el.nextElementSibling) {
34781      const next = el.nextElementSibling;
34782      if (selector) {
34783        if (next.matches(selector))
34784          nextEls.push(next);
34785      } else
34786        nextEls.push(next);
34787      el = next;
34788    }
34789    return nextEls;
34790  }
34791  function elementStyle(el, prop) {
34792    const window2 = getWindow2();
34793    return window2.getComputedStyle(el, null).getPropertyValue(prop);
34794  }
34795  function elementIndex(el) {
34796    let child = el;
34797    let i4;
34798    if (child) {
34799      i4 = 0;
34800      while ((child = child.previousSibling) !== null) {
34801        if (child.nodeType === 1)
34802          i4 += 1;
34803      }
34804      return i4;
34805    }
34806    return void 0;
34807  }
34808  function elementParents(el, selector) {
34809    const parents = [];
34810    let parent = el.parentElement;
34811    while (parent) {
34812      if (selector) {
34813        if (parent.matches(selector))
34814          parents.push(parent);
34815      } else {
34816        parents.push(parent);
34817      }
34818      parent = parent.parentElement;
34819    }
34820    return parents;
34821  }
34822  function elementOuterSize(el, size, includeMargins) {
34823    const window2 = getWindow2();
34824    if (includeMargins) {
34825      return el[size === "width" ? "offsetWidth" : "offsetHeight"] + parseFloat(window2.getComputedStyle(el, null).getPropertyValue(size === "width" ? "margin-right" : "margin-top")) + parseFloat(window2.getComputedStyle(el, null).getPropertyValue(size === "width" ? "margin-left" : "margin-bottom"));
34826    }
34827    return el.offsetWidth;
34828  }
34829
34830  
vendor: 121,162 bytes, lines 34830-38342
34830// node_modules/swiper/shared/swiper-core.mjs
34831  var support;
34832  function calcSupport() {
34833    const window2 = getWindow2();
34834    const document2 = getDocument();
34835    return {
34836      smoothScroll: document2.documentElement && document2.documentElement.style && "scrollBehavior" in document2.documentElement.style,
34837      touch: !!("ontouchstart" in window2 || window2.DocumentTouch && document2 instanceof window2.DocumentTouch)
34838    };
34839  }
34840  function getSupport() {
34841    if (!support) {
34842      support = calcSupport();
34843    }
34844    return support;
34845  }
34846  var deviceCached;
34847  function calcDevice(_temp) {
34848    let {
34849      userAgent
34850    } = _temp === void 0 ? {} : _temp;
34851    const support2 = getSupport();
34852    const window2 = getWindow2();
34853    const platform = window2.navigator.platform;
34854    const ua = userAgent || window2.navigator.userAgent;
34855    const device = {
34856      ios: false,
34857      android: false
34858    };
34859    const screenWidth = window2.screen.width;
34860    const screenHeight = window2.screen.height;
34861    const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
34862    let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
34863    const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
34864    const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
34865    const windows = platform === "Win32";
34866    let macos = platform === "MacIntel";
34867    const iPadScreens = ["1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810"];
34868    if (!ipad && macos && support2.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
34869      ipad = ua.match(/(Version)\/([\d.]+)/);
34870      if (!ipad)
34871        ipad = [0, 1, "13_0_0"];
34872      macos = false;
34873    }
34874    if (android && !windows) {
34875      device.os = "android";
34876      device.android = true;
34877    }
34878    if (ipad || iphone || ipod) {
34879      device.os = "ios";
34880      device.ios = true;
34881    }
34882    return device;
34883  }
34884  function getDevice(overrides) {
34885    if (overrides === void 0) {
34886      overrides = {};
34887    }
34888    if (!deviceCached) {
34889      deviceCached = calcDevice(overrides);
34890    }
34891    return deviceCached;
34892  }
34893  var browser;
34894  function calcBrowser() {
34895    const window2 = getWindow2();
34896    let needPerspectiveFix = false;
34897    function isSafari() {
34898      const ua = window2.navigator.userAgent.toLowerCase();
34899      return ua.indexOf("safari") >= 0 && ua.indexOf("chrome") < 0 && ua.indexOf("android") < 0;
34900    }
34901    if (isSafari()) {
34902      const ua = String(window2.navigator.userAgent);
34903      if (ua.includes("Version/")) {
34904        const [major, minor] = ua.split("Version/")[1].split(" ")[0].split(".").map((num) => Number(num));
34905        needPerspectiveFix = major < 16 || major === 16 && minor < 2;
34906      }
34907    }
34908    return {
34909      isSafari: needPerspectiveFix || isSafari(),
34910      needPerspectiveFix,
34911      isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window2.navigator.userAgent)
34912    };
34913  }
34914  function getBrowser() {
34915    if (!browser) {
34916      browser = calcBrowser();
34917    }
34918    return browser;
34919  }
34920  function Resize(_ref) {
34921    let {
34922      swiper,
34923      on: on2,
34924      emit
34925    } = _ref;
34926    const window2 = getWindow2();
34927    let observer = null;
34928    let animationFrame = null;
34929    const resizeHandler = () => {
34930      if (!swiper || swiper.destroyed || !swiper.initialized)
34931        return;
34932      emit("beforeResize");
34933      emit("resize");
34934    };
34935    const createObserver = () => {
34936      if (!swiper || swiper.destroyed || !swiper.initialized)
34937        return;
34938      observer = new ResizeObserver((entries) => {
34939        animationFrame = window2.requestAnimationFrame(() => {
34940          const {
34941            width,
34942            height
34943          } = swiper;
34944          let newWidth = width;
34945          let newHeight = height;
34946          entries.forEach((_ref2) => {
34947            let {
34948              contentBoxSize,
34949              contentRect,
34950              target
34951            } = _ref2;
34952            if (target && target !== swiper.el)
34953              return;
34954            newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
34955            newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
34956          });
34957          if (newWidth !== width || newHeight !== height) {
34958            resizeHandler();
34959          }
34960        });
34961      });
34962      observer.observe(swiper.el);
34963    };
34964    const removeObserver = () => {
34965      if (animationFrame) {
34966        window2.cancelAnimationFrame(animationFrame);
34967      }
34968      if (observer && observer.unobserve && swiper.el) {
34969        observer.unobserve(swiper.el);
34970        observer = null;
34971      }
34972    };
34973    const orientationChangeHandler = () => {
34974      if (!swiper || swiper.destroyed || !swiper.initialized)
34975        return;
34976      emit("orientationchange");
34977    };
34978    on2("init", () => {
34979      if (swiper.params.resizeObserver && typeof window2.ResizeObserver !== "undefined") {
34980        createObserver();
34981        return;
34982      }
34983      window2.addEventListener("resize", resizeHandler);
34984      window2.addEventListener("orientationchange", orientationChangeHandler);
34985    });
34986    on2("destroy", () => {
34987      removeObserver();
34988      window2.removeEventListener("resize", resizeHandler);
34989      window2.removeEventListener("orientationchange", orientationChangeHandler);
34990    });
34991  }
34992  function Observer(_ref) {
34993    let {
34994      swiper,
34995      extendParams,
34996      on: on2,
34997      emit
34998    } = _ref;
34999    const observers = [];
35000    const window2 = getWindow2();
35001    const attach = function(target, options) {
35002      if (options === void 0) {
35003        options = {};
35004      }
35005      const ObserverFunc = window2.MutationObserver || window2.WebkitMutationObserver;
35006      const observer = new ObserverFunc((mutations) => {
35007        if (swiper.__preventObserver__)
35008          return;
35009        if (mutations.length === 1) {
35010          emit("observerUpdate", mutations[0]);
35011          return;
35012        }
35013        const observerUpdate = function observerUpdate2() {
35014          emit("observerUpdate", mutations[0]);
35015        };
35016        if (window2.requestAnimationFrame) {
35017          window2.requestAnimationFrame(observerUpdate);
35018        } else {
35019          window2.setTimeout(observerUpdate, 0);
35020        }
35021      });
35022      observer.observe(target, {
35023        attributes: typeof options.attributes === "undefined" ? true : options.attributes,
35024        childList: typeof options.childList === "undefined" ? true : options.childList,
35025        characterData: typeof options.characterData === "undefined" ? true : options.characterData
35026      });
35027      observers.push(observer);
35028    };
35029    const init = () => {
35030      if (!swiper.params.observer)
35031        return;
35032      if (swiper.params.observeParents) {
35033        const containerParents = elementParents(swiper.hostEl);
35034        for (let i4 = 0; i4 < containerParents.length; i4 += 1) {
35035          attach(containerParents[i4]);
35036        }
35037      }
35038      attach(swiper.hostEl, {
35039        childList: swiper.params.observeSlideChildren
35040      });
35041      attach(swiper.wrapperEl, {
35042        attributes: false
35043      });
35044    };
35045    const destroy2 = () => {
35046      observers.forEach((observer) => {
35047        observer.disconnect();
35048      });
35049      observers.splice(0, observers.length);
35050    };
35051    extendParams({
35052      observer: false,
35053      observeParents: false,
35054      observeSlideChildren: false
35055    });
35056    on2("init", init);
35057    on2("destroy", destroy2);
35058  }
35059  var eventsEmitter = {
35060    on(events2, handler, priority) {
35061      const self = this;
35062      if (!self.eventsListeners || self.destroyed)
35063        return self;
35064      if (typeof handler !== "function")
35065        return self;
35066      const method = priority ? "unshift" : "push";
35067      events2.split(" ").forEach((event2) => {
35068        if (!self.eventsListeners[event2])
35069          self.eventsListeners[event2] = [];
35070        self.eventsListeners[event2][method](handler);
35071      });
35072      return self;
35073    },
35074    once(events2, handler, priority) {
35075      const self = this;
35076      if (!self.eventsListeners || self.destroyed)
35077        return self;
35078      if (typeof handler !== "function")
35079        return self;
35080      function onceHandler() {
35081        self.off(events2, onceHandler);
35082        if (onceHandler.__emitterProxy) {
35083          delete onceHandler.__emitterProxy;
35084        }
35085        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
35086          args[_key] = arguments[_key];
35087        }
35088        handler.apply(self, args);
35089      }
35090      onceHandler.__emitterProxy = handler;
35091      return self.on(events2, onceHandler, priority);
35092    },
35093    onAny(handler, priority) {
35094      const self = this;
35095      if (!self.eventsListeners || self.destroyed)
35096        return self;
35097      if (typeof handler !== "function")
35098        return self;
35099      const method = priority ? "unshift" : "push";
35100      if (self.eventsAnyListeners.indexOf(handler) < 0) {
35101        self.eventsAnyListeners[method](handler);
35102      }
35103      return self;
35104    },
35105    offAny(handler) {
35106      const self = this;
35107      if (!self.eventsListeners || self.destroyed)
35108        return self;
35109      if (!self.eventsAnyListeners)
35110        return self;
35111      const index4 = self.eventsAnyListeners.indexOf(handler);
35112      if (index4 >= 0) {
35113        self.eventsAnyListeners.splice(index4, 1);
35114      }
35115      return self;
35116    },
35117    off(events2, handler) {
35118      const self = this;
35119      if (!self.eventsListeners || self.destroyed)
35120        return self;
35121      if (!self.eventsListeners)
35122        return self;
35123      events2.split(" ").forEach((event2) => {
35124        if (typeof handler === "undefined") {
35125          self.eventsListeners[event2] = [];
35126        } else if (self.eventsListeners[event2]) {
35127          self.eventsListeners[event2].forEach((eventHandler, index4) => {
35128            if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
35129              self.eventsListeners[event2].splice(index4, 1);
35130            }
35131          });
35132        }
35133      });
35134      return self;
35135    },
35136    emit() {
35137      const self = this;
35138      if (!self.eventsListeners || self.destroyed)
35139        return self;
35140      if (!self.eventsListeners)
35141        return self;
35142      let events2;
35143      let data;
35144      let context;
35145      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
35146        args[_key2] = arguments[_key2];
35147      }
35148      if (typeof args[0] === "string" || Array.isArray(args[0])) {
35149        events2 = args[0];
35150        data = args.slice(1, args.length);
35151        context = self;
35152      } else {
35153        events2 = args[0].events;
35154        data = args[0].data;
35155        context = args[0].context || self;
35156      }
35157      data.unshift(context);
35158      const eventsArray = Array.isArray(events2) ? events2 : events2.split(" ");
35159      eventsArray.forEach((event2) => {
35160        if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
35161          self.eventsAnyListeners.forEach((eventHandler) => {
35162            eventHandler.apply(context, [event2, ...data]);
35163          });
35164        }
35165        if (self.eventsListeners && self.eventsListeners[event2]) {
35166          self.eventsListeners[event2].forEach((eventHandler) => {
35167            eventHandler.apply(context, data);
35168          });
35169        }
35170      });
35171      return self;
35172    }
35173  };
35174  function updateSize() {
35175    const swiper = this;
35176    let width;
35177    let height;
35178    const el = swiper.el;
35179    if (typeof swiper.params.width !== "undefined" && swiper.params.width !== null) {
35180      width = swiper.params.width;
35181    } else {
35182      width = el.clientWidth;
35183    }
35184    if (typeof swiper.params.height !== "undefined" && swiper.params.height !== null) {
35185      height = swiper.params.height;
35186    } else {
35187      height = el.clientHeight;
35188    }
35189    if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
35190      return;
35191    }
35192    width = width - parseInt(elementStyle(el, "padding-left") || 0, 10) - parseInt(elementStyle(el, "padding-right") || 0, 10);
35193    height = height - parseInt(elementStyle(el, "padding-top") || 0, 10) - parseInt(elementStyle(el, "padding-bottom") || 0, 10);
35194    if (Number.isNaN(width))
35195      width = 0;
35196    if (Number.isNaN(height))
35197      height = 0;
35198    Object.assign(swiper, {
35199      width,
35200      height,
35201      size: swiper.isHorizontal() ? width : height
35202    });
35203  }
35204  function updateSlides() {
35205    const swiper = this;
35206    function getDirectionLabel(property) {
35207      if (swiper.isHorizontal()) {
35208        return property;
35209      }
35210      return {
35211        "width": "height",
35212        "margin-top": "margin-left",
35213        "margin-bottom ": "margin-right",
35214        "margin-left": "margin-top",
35215        "margin-right": "margin-bottom",
35216        "padding-left": "padding-top",
35217        "padding-right": "padding-bottom",
35218        "marginRight": "marginBottom"
35219      }[property];
35220    }
35221    function getDirectionPropertyValue(node, label) {
35222      return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);
35223    }
35224    const params = swiper.params;
35225    const {
35226      wrapperEl,
35227      slidesEl,
35228      size: swiperSize,
35229      rtlTranslate: rtl,
35230      wrongRTL
35231    } = swiper;
35232    const isVirtual = swiper.virtual && params.virtual.enabled;
35233    const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
35234    const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
35235    const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
35236    let snapGrid = [];
35237    const slidesGrid = [];
35238    const slidesSizesGrid = [];
35239    let offsetBefore = params.slidesOffsetBefore;
35240    if (typeof offsetBefore === "function") {
35241      offsetBefore = params.slidesOffsetBefore.call(swiper);
35242    }
35243    let offsetAfter = params.slidesOffsetAfter;
35244    if (typeof offsetAfter === "function") {
35245      offsetAfter = params.slidesOffsetAfter.call(swiper);
35246    }
35247    const previousSnapGridLength = swiper.snapGrid.length;
35248    const previousSlidesGridLength = swiper.slidesGrid.length;
35249    let spaceBetween = params.spaceBetween;
35250    let slidePosition = -offsetBefore;
35251    let prevSlideSize = 0;
35252    let index4 = 0;
35253    if (typeof swiperSize === "undefined") {
35254      return;
35255    }
35256    if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
35257      spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiperSize;
35258    } else if (typeof spaceBetween === "string") {
35259      spaceBetween = parseFloat(spaceBetween);
35260    }
35261    swiper.virtualSize = -spaceBetween;
35262    slides.forEach((slideEl) => {
35263      if (rtl) {
35264        slideEl.style.marginLeft = "";
35265      } else {
35266        slideEl.style.marginRight = "";
35267      }
35268      slideEl.style.marginBottom = "";
35269      slideEl.style.marginTop = "";
35270    });
35271    if (params.centeredSlides && params.cssMode) {
35272      setCSSProperty(wrapperEl, "--swiper-centered-offset-before", "");
35273      setCSSProperty(wrapperEl, "--swiper-centered-offset-after", "");
35274    }
35275    const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
35276    if (gridEnabled) {
35277      swiper.grid.initSlides(slidesLength);
35278    }
35279    let slideSize;
35280    const shouldResetSlideSize = params.slidesPerView === "auto" && params.breakpoints && Object.keys(params.breakpoints).filter((key) => {
35281      return typeof params.breakpoints[key].slidesPerView !== "undefined";
35282    }).length > 0;
35283    for (let i4 = 0; i4 < slidesLength; i4 += 1) {
35284      slideSize = 0;
35285      let slide2;
35286      if (slides[i4])
35287        slide2 = slides[i4];
35288      if (gridEnabled) {
35289        swiper.grid.updateSlide(i4, slide2, slidesLength, getDirectionLabel);
35290      }
35291      if (slides[i4] && elementStyle(slide2, "display") === "none")
35292        continue;
35293      if (params.slidesPerView === "auto") {
35294        if (shouldResetSlideSize) {
35295          slides[i4].style[getDirectionLabel("width")] = ``;
35296        }
35297        const slideStyles = getComputedStyle(slide2);
35298        const currentTransform = slide2.style.transform;
35299        const currentWebKitTransform = slide2.style.webkitTransform;
35300        if (currentTransform) {
35301          slide2.style.transform = "none";
35302        }
35303        if (currentWebKitTransform) {
35304          slide2.style.webkitTransform = "none";
35305        }
35306        if (params.roundLengths) {
35307          slideSize = swiper.isHorizontal() ? elementOuterSize(slide2, "width", true) : elementOuterSize(slide2, "height", true);
35308        } else {
35309          const width = getDirectionPropertyValue(slideStyles, "width");
35310          const paddingLeft = getDirectionPropertyValue(slideStyles, "padding-left");
35311          const paddingRight = getDirectionPropertyValue(slideStyles, "padding-right");
35312          const marginLeft = getDirectionPropertyValue(slideStyles, "margin-left");
35313          const marginRight = getDirectionPropertyValue(slideStyles, "margin-right");
35314          const boxSizing = slideStyles.getPropertyValue("box-sizing");
35315          if (boxSizing && boxSizing === "border-box") {
35316            slideSize = width + marginLeft + marginRight;
35317          } else {
35318            const {
35319              clientWidth,
35320              offsetWidth
35321            } = slide2;
35322            slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
35323          }
35324        }
35325        if (currentTransform) {
35326          slide2.style.transform = currentTransform;
35327        }
35328        if (currentWebKitTransform) {
35329          slide2.style.webkitTransform = currentWebKitTransform;
35330        }
35331        if (params.roundLengths)
35332          slideSize = Math.floor(slideSize);
35333      } else {
35334        slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
35335        if (params.roundLengths)
35336          slideSize = Math.floor(slideSize);
35337        if (slides[i4]) {
35338          slides[i4].style[getDirectionLabel("width")] = `${slideSize}px`;
35339        }
35340      }
35341      if (slides[i4]) {
35342        slides[i4].swiperSlideSize = slideSize;
35343      }
35344      slidesSizesGrid.push(slideSize);
35345      if (params.centeredSlides) {
35346        slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
35347        if (prevSlideSize === 0 && i4 !== 0)
35348          slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
35349        if (i4 === 0)
35350          slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
35351        if (Math.abs(slidePosition) < 1 / 1e3)
35352          slidePosition = 0;
35353        if (params.roundLengths)
35354          slidePosition = Math.floor(slidePosition);
35355        if (index4 % params.slidesPerGroup === 0)
35356          snapGrid.push(slidePosition);
35357        slidesGrid.push(slidePosition);
35358      } else {
35359        if (params.roundLengths)
35360          slidePosition = Math.floor(slidePosition);
35361        if ((index4 - Math.min(swiper.params.slidesPerGroupSkip, index4)) % swiper.params.slidesPerGroup === 0)
35362          snapGrid.push(slidePosition);
35363        slidesGrid.push(slidePosition);
35364        slidePosition = slidePosition + slideSize + spaceBetween;
35365      }
35366      swiper.virtualSize += slideSize + spaceBetween;
35367      prevSlideSize = slideSize;
35368      index4 += 1;
35369    }
35370    swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
35371    if (rtl && wrongRTL && (params.effect === "slide" || params.effect === "coverflow")) {
35372      wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
35373    }
35374    if (params.setWrapperSize) {
35375      wrapperEl.style[getDirectionLabel("width")] = `${swiper.virtualSize + spaceBetween}px`;
35376    }
35377    if (gridEnabled) {
35378      swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);
35379    }
35380    if (!params.centeredSlides) {
35381      const newSlidesGrid = [];
35382      for (let i4 = 0; i4 < snapGrid.length; i4 += 1) {
35383        let slidesGridItem = snapGrid[i4];
35384        if (params.roundLengths)
35385          slidesGridItem = Math.floor(slidesGridItem);
35386        if (snapGrid[i4] <= swiper.virtualSize - swiperSize) {
35387          newSlidesGrid.push(slidesGridItem);
35388        }
35389      }
35390      snapGrid = newSlidesGrid;
35391      if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
35392        snapGrid.push(swiper.virtualSize - swiperSize);
35393      }
35394    }
35395    if (isVirtual && params.loop) {
35396      const size = slidesSizesGrid[0] + spaceBetween;
35397      if (params.slidesPerGroup > 1) {
35398        const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
35399        const groupSize = size * params.slidesPerGroup;
35400        for (let i4 = 0; i4 < groups; i4 += 1) {
35401          snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
35402        }
35403      }
35404      for (let i4 = 0; i4 < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i4 += 1) {
35405        if (params.slidesPerGroup === 1) {
35406          snapGrid.push(snapGrid[snapGrid.length - 1] + size);
35407        }
35408        slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
35409        swiper.virtualSize += size;
35410      }
35411    }
35412    if (snapGrid.length === 0)
35413      snapGrid = [0];
35414    if (spaceBetween !== 0) {
35415      const key = swiper.isHorizontal() && rtl ? "marginLeft" : getDirectionLabel("marginRight");
35416      slides.filter((_4, slideIndex) => {
35417        if (!params.cssMode || params.loop)
35418          return true;
35419        if (slideIndex === slides.length - 1) {
35420          return false;
35421        }
35422        return true;
35423      }).forEach((slideEl) => {
35424        slideEl.style[key] = `${spaceBetween}px`;
35425      });
35426    }
35427    if (params.centeredSlides && params.centeredSlidesBounds) {
35428      let allSlidesSize = 0;
35429      slidesSizesGrid.forEach((slideSizeValue) => {
35430        allSlidesSize += slideSizeValue + (spaceBetween || 0);
35431      });
35432      allSlidesSize -= spaceBetween;
35433      const maxSnap = allSlidesSize - swiperSize;
35434      snapGrid = snapGrid.map((snap) => {
35435        if (snap <= 0)
35436          return -offsetBefore;
35437        if (snap > maxSnap)
35438          return maxSnap + offsetAfter;
35439        return snap;
35440      });
35441    }
35442    if (params.centerInsufficientSlides) {
35443      let allSlidesSize = 0;
35444      slidesSizesGrid.forEach((slideSizeValue) => {
35445        allSlidesSize += slideSizeValue + (spaceBetween || 0);
35446      });
35447      allSlidesSize -= spaceBetween;
35448      if (allSlidesSize < swiperSize) {
35449        const allSlidesOffset = (swiperSize - allSlidesSize) / 2;
35450        snapGrid.forEach((snap, snapIndex) => {
35451          snapGrid[snapIndex] = snap - allSlidesOffset;
35452        });
35453        slidesGrid.forEach((snap, snapIndex) => {
35454          slidesGrid[snapIndex] = snap + allSlidesOffset;
35455        });
35456      }
35457    }
35458    Object.assign(swiper, {
35459      slides,
35460      snapGrid,
35461      slidesGrid,
35462      slidesSizesGrid
35463    });
35464    if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
35465      setCSSProperty(wrapperEl, "--swiper-centered-offset-before", `${-snapGrid[0]}px`);
35466      setCSSProperty(wrapperEl, "--swiper-centered-offset-after", `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
35467      const addToSnapGrid = -swiper.snapGrid[0];
35468      const addToSlidesGrid = -swiper.slidesGrid[0];
35469      swiper.snapGrid = swiper.snapGrid.map((v4) => v4 + addToSnapGrid);
35470      swiper.slidesGrid = swiper.slidesGrid.map((v4) => v4 + addToSlidesGrid);
35471    }
35472    if (slidesLength !== previousSlidesLength) {
35473      swiper.emit("slidesLengthChange");
35474    }
35475    if (snapGrid.length !== previousSnapGridLength) {
35476      if (swiper.params.watchOverflow)
35477        swiper.checkOverflow();
35478      swiper.emit("snapGridLengthChange");
35479    }
35480    if (slidesGrid.length !== previousSlidesGridLength) {
35481      swiper.emit("slidesGridLengthChange");
35482    }
35483    if (params.watchSlidesProgress) {
35484      swiper.updateSlidesOffset();
35485    }
35486    if (!isVirtual && !params.cssMode && (params.effect === "slide" || params.effect === "fade")) {
35487      const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
35488      const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
35489      if (slidesLength <= params.maxBackfaceHiddenSlides) {
35490        if (!hasClassBackfaceClassAdded)
35491          swiper.el.classList.add(backFaceHiddenClass);
35492      } else if (hasClassBackfaceClassAdded) {
35493        swiper.el.classList.remove(backFaceHiddenClass);
35494      }
35495    }
35496  }
35497  function updateAutoHeight(speed) {
35498    const swiper = this;
35499    const activeSlides = [];
35500    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
35501    let newHeight = 0;
35502    let i4;
35503    if (typeof speed === "number") {
35504      swiper.setTransition(speed);
35505    } else if (speed === true) {
35506      swiper.setTransition(swiper.params.speed);
35507    }
35508    const getSlideByIndex = (index4) => {
35509      if (isVirtual) {
35510        return swiper.slides[swiper.getSlideIndexByData(index4)];
35511      }
35512      return swiper.slides[index4];
35513    };
35514    if (swiper.params.slidesPerView !== "auto" && swiper.params.slidesPerView > 1) {
35515      if (swiper.params.centeredSlides) {
35516        (swiper.visibleSlides || []).forEach((slide2) => {
35517          activeSlides.push(slide2);
35518        });
35519      } else {
35520        for (i4 = 0; i4 < Math.ceil(swiper.params.slidesPerView); i4 += 1) {
35521          const index4 = swiper.activeIndex + i4;
35522          if (index4 > swiper.slides.length && !isVirtual)
35523            break;
35524          activeSlides.push(getSlideByIndex(index4));
35525        }
35526      }
35527    } else {
35528      activeSlides.push(getSlideByIndex(swiper.activeIndex));
35529    }
35530    for (i4 = 0; i4 < activeSlides.length; i4 += 1) {
35531      if (typeof activeSlides[i4] !== "undefined") {
35532        const height = activeSlides[i4].offsetHeight;
35533        newHeight = height > newHeight ? height : newHeight;
35534      }
35535    }
35536    if (newHeight || newHeight === 0)
35537      swiper.wrapperEl.style.height = `${newHeight}px`;
35538  }
35539  function updateSlidesOffset() {
35540    const swiper = this;
35541    const slides = swiper.slides;
35542    const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
35543    for (let i4 = 0; i4 < slides.length; i4 += 1) {
35544      slides[i4].swiperSlideOffset = (swiper.isHorizontal() ? slides[i4].offsetLeft : slides[i4].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
35545    }
35546  }
35547  function updateSlidesProgress(translate2) {
35548    if (translate2 === void 0) {
35549      translate2 = this && this.translate || 0;
35550    }
35551    const swiper = this;
35552    const params = swiper.params;
35553    const {
35554      slides,
35555      rtlTranslate: rtl,
35556      snapGrid
35557    } = swiper;
35558    if (slides.length === 0)
35559      return;
35560    if (typeof slides[0].swiperSlideOffset === "undefined")
35561      swiper.updateSlidesOffset();
35562    let offsetCenter = -translate2;
35563    if (rtl)
35564      offsetCenter = translate2;
35565    slides.forEach((slideEl) => {
35566      slideEl.classList.remove(params.slideVisibleClass);
35567    });
35568    swiper.visibleSlidesIndexes = [];
35569    swiper.visibleSlides = [];
35570    let spaceBetween = params.spaceBetween;
35571    if (typeof spaceBetween === "string" && spaceBetween.indexOf("%") >= 0) {
35572      spaceBetween = parseFloat(spaceBetween.replace("%", "")) / 100 * swiper.size;
35573    } else if (typeof spaceBetween === "string") {
35574      spaceBetween = parseFloat(spaceBetween);
35575    }
35576    for (let i4 = 0; i4 < slides.length; i4 += 1) {
35577      const slide2 = slides[i4];
35578      let slideOffset = slide2.swiperSlideOffset;
35579      if (params.cssMode && params.centeredSlides) {
35580        slideOffset -= slides[0].swiperSlideOffset;
35581      }
35582      const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide2.swiperSlideSize + spaceBetween);
35583      const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide2.swiperSlideSize + spaceBetween);
35584      const slideBefore = -(offsetCenter - slideOffset);
35585      const slideAfter = slideBefore + swiper.slidesSizesGrid[i4];
35586      const isVisible2 = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
35587      if (isVisible2) {
35588        swiper.visibleSlides.push(slide2);
35589        swiper.visibleSlidesIndexes.push(i4);
35590        slides[i4].classList.add(params.slideVisibleClass);
35591      }
35592      slide2.progress = rtl ? -slideProgress : slideProgress;
35593      slide2.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
35594    }
35595  }
35596  function updateProgress(translate2) {
35597    const swiper = this;
35598    if (typeof translate2 === "undefined") {
35599      const multiplier = swiper.rtlTranslate ? -1 : 1;
35600      translate2 = swiper && swiper.translate && swiper.translate * multiplier || 0;
35601    }
35602    const params = swiper.params;
35603    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
35604    let {
35605      progress,
35606      isBeginning,
35607      isEnd,
35608      progressLoop
35609    } = swiper;
35610    const wasBeginning = isBeginning;
35611    const wasEnd = isEnd;
35612    if (translatesDiff === 0) {
35613      progress = 0;
35614      isBeginning = true;
35615      isEnd = true;
35616    } else {
35617      progress = (translate2 - swiper.minTranslate()) / translatesDiff;
35618      const isBeginningRounded = Math.abs(translate2 - swiper.minTranslate()) < 1;
35619      const isEndRounded = Math.abs(translate2 - swiper.maxTranslate()) < 1;
35620      isBeginning = isBeginningRounded || progress <= 0;
35621      isEnd = isEndRounded || progress >= 1;
35622      if (isBeginningRounded)
35623        progress = 0;
35624      if (isEndRounded)
35625        progress = 1;
35626    }
35627    if (params.loop) {
35628      const firstSlideIndex = swiper.getSlideIndexByData(0);
35629      const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
35630      const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
35631      const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
35632      const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
35633      const translateAbs = Math.abs(translate2);
35634      if (translateAbs >= firstSlideTranslate) {
35635        progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
35636      } else {
35637        progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
35638      }
35639      if (progressLoop > 1)
35640        progressLoop -= 1;
35641    }
35642    Object.assign(swiper, {
35643      progress,
35644      progressLoop,
35645      isBeginning,
35646      isEnd
35647    });
35648    if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight)
35649      swiper.updateSlidesProgress(translate2);
35650    if (isBeginning && !wasBeginning) {
35651      swiper.emit("reachBeginning toEdge");
35652    }
35653    if (isEnd && !wasEnd) {
35654      swiper.emit("reachEnd toEdge");
35655    }
35656    if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
35657      swiper.emit("fromEdge");
35658    }
35659    swiper.emit("progress", progress);
35660  }
35661  function updateSlidesClasses() {
35662    const swiper = this;
35663    const {
35664      slides,
35665      params,
35666      slidesEl,
35667      activeIndex
35668    } = swiper;
35669    const isVirtual = swiper.virtual && params.virtual.enabled;
35670    const getFilteredSlide = (selector) => {
35671      return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
35672    };
35673    slides.forEach((slideEl) => {
35674      slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
35675    });
35676    let activeSlide;
35677    if (isVirtual) {
35678      if (params.loop) {
35679        let slideIndex = activeIndex - swiper.virtual.slidesBefore;
35680        if (slideIndex < 0)
35681          slideIndex = swiper.virtual.slides.length + slideIndex;
35682        if (slideIndex >= swiper.virtual.slides.length)
35683          slideIndex -= swiper.virtual.slides.length;
35684        activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
35685      } else {
35686        activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
35687      }
35688    } else {
35689      activeSlide = slides[activeIndex];
35690    }
35691    if (activeSlide) {
35692      activeSlide.classList.add(params.slideActiveClass);
35693      let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
35694      if (params.loop && !nextSlide) {
35695        nextSlide = slides[0];
35696      }
35697      if (nextSlide) {
35698        nextSlide.classList.add(params.slideNextClass);
35699      }
35700      let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
35701      if (params.loop && !prevSlide === 0) {
35702        prevSlide = slides[slides.length - 1];
35703      }
35704      if (prevSlide) {
35705        prevSlide.classList.add(params.slidePrevClass);
35706      }
35707    }
35708    swiper.emitSlidesClasses();
35709  }
35710  var processLazyPreloader = (swiper, imageEl) => {
35711    if (!swiper || swiper.destroyed || !swiper.params)
35712      return;
35713    const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
35714    const slideEl = imageEl.closest(slideSelector());
35715    if (slideEl) {
35716      let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
35717      if (!lazyEl && swiper.isElement) {
35718        if (slideEl.shadowRoot) {
35719          lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
35720        } else {
35721          requestAnimationFrame(() => {
35722            if (slideEl.shadowRoot) {
35723              lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
35724              if (lazyEl)
35725                lazyEl.remove();
35726            }
35727          });
35728        }
35729      }
35730      if (lazyEl)
35731        lazyEl.remove();
35732    }
35733  };
35734  var unlazy = (swiper, index4) => {
35735    if (!swiper.slides[index4])
35736      return;
35737    const imageEl = swiper.slides[index4].querySelector('[loading="lazy"]');
35738    if (imageEl)
35739      imageEl.removeAttribute("loading");
35740  };
35741  var preload = (swiper) => {
35742    if (!swiper || swiper.destroyed || !swiper.params)
35743      return;
35744    let amount = swiper.params.lazyPreloadPrevNext;
35745    const len = swiper.slides.length;
35746    if (!len || !amount || amount < 0)
35747      return;
35748    amount = Math.min(amount, len);
35749    const slidesPerView = swiper.params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
35750    const activeIndex = swiper.activeIndex;
35751    if (swiper.params.grid && swiper.params.grid.rows > 1) {
35752      const activeColumn = activeIndex;
35753      const preloadColumns = [activeColumn - amount];
35754      preloadColumns.push(...Array.from({
35755        length: amount
35756      }).map((_4, i4) => {
35757        return activeColumn + slidesPerView + i4;
35758      }));
35759      swiper.slides.forEach((slideEl, i4) => {
35760        if (preloadColumns.includes(slideEl.column))
35761          unlazy(swiper, i4);
35762      });
35763      return;
35764    }
35765    const slideIndexLastInView = activeIndex + slidesPerView - 1;
35766    if (swiper.params.rewind || swiper.params.loop) {
35767      for (let i4 = activeIndex - amount; i4 <= slideIndexLastInView + amount; i4 += 1) {
35768        const realIndex = (i4 % len + len) % len;
35769        if (realIndex < activeIndex || realIndex > slideIndexLastInView)
35770          unlazy(swiper, realIndex);
35771      }
35772    } else {
35773      for (let i4 = Math.max(activeIndex - amount, 0); i4 <= Math.min(slideIndexLastInView + amount, len - 1); i4 += 1) {
35774        if (i4 !== activeIndex && (i4 > slideIndexLastInView || i4 < activeIndex)) {
35775          unlazy(swiper, i4);
35776        }
35777      }
35778    }
35779  };
35780  function getActiveIndexByTranslate(swiper) {
35781    const {
35782      slidesGrid,
35783      params
35784    } = swiper;
35785    const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
35786    let activeIndex;
35787    for (let i4 = 0; i4 < slidesGrid.length; i4 += 1) {
35788      if (typeof slidesGrid[i4 + 1] !== "undefined") {
35789        if (translate2 >= slidesGrid[i4] && translate2 < slidesGrid[i4 + 1] - (slidesGrid[i4 + 1] - slidesGrid[i4]) / 2) {
35790          activeIndex = i4;
35791        } else if (translate2 >= slidesGrid[i4] && translate2 < slidesGrid[i4 + 1]) {
35792          activeIndex = i4 + 1;
35793        }
35794      } else if (translate2 >= slidesGrid[i4]) {
35795        activeIndex = i4;
35796      }
35797    }
35798    if (params.normalizeSlideIndex) {
35799      if (activeIndex < 0 || typeof activeIndex === "undefined")
35800        activeIndex = 0;
35801    }
35802    return activeIndex;
35803  }
35804  function updateActiveIndex(newActiveIndex) {
35805    const swiper = this;
35806    const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
35807    const {
35808      snapGrid,
35809      params,
35810      activeIndex: previousIndex,
35811      realIndex: previousRealIndex,
35812      snapIndex: previousSnapIndex
35813    } = swiper;
35814    let activeIndex = newActiveIndex;
35815    let snapIndex;
35816    const getVirtualRealIndex = (aIndex) => {
35817      let realIndex2 = aIndex - swiper.virtual.slidesBefore;
35818      if (realIndex2 < 0) {
35819        realIndex2 = swiper.virtual.slides.length + realIndex2;
35820      }
35821      if (realIndex2 >= swiper.virtual.slides.length) {
35822        realIndex2 -= swiper.virtual.slides.length;
35823      }
35824      return realIndex2;
35825    };
35826    if (typeof activeIndex === "undefined") {
35827      activeIndex = getActiveIndexByTranslate(swiper);
35828    }
35829    if (snapGrid.indexOf(translate2) >= 0) {
35830      snapIndex = snapGrid.indexOf(translate2);
35831    } else {
35832      const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
35833      snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
35834    }
35835    if (snapIndex >= snapGrid.length)
35836      snapIndex = snapGrid.length - 1;
35837    if (activeIndex === previousIndex) {
35838      if (snapIndex !== previousSnapIndex) {
35839        swiper.snapIndex = snapIndex;
35840        swiper.emit("snapIndexChange");
35841      }
35842      if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
35843        swiper.realIndex = getVirtualRealIndex(activeIndex);
35844      }
35845      return;
35846    }
35847    let realIndex;
35848    if (swiper.virtual && params.virtual.enabled && params.loop) {
35849      realIndex = getVirtualRealIndex(activeIndex);
35850    } else if (swiper.slides[activeIndex]) {
35851      realIndex = parseInt(swiper.slides[activeIndex].getAttribute("data-swiper-slide-index") || activeIndex, 10);
35852    } else {
35853      realIndex = activeIndex;
35854    }
35855    Object.assign(swiper, {
35856      previousSnapIndex,
35857      snapIndex,
35858      previousRealIndex,
35859      realIndex,
35860      previousIndex,
35861      activeIndex
35862    });
35863    if (swiper.initialized) {
35864      preload(swiper);
35865    }
35866    swiper.emit("activeIndexChange");
35867    swiper.emit("snapIndexChange");
35868    if (swiper.initialized || swiper.params.runCallbacksOnInit) {
35869      if (previousRealIndex !== realIndex) {
35870        swiper.emit("realIndexChange");
35871      }
35872      swiper.emit("slideChange");
35873    }
35874  }
35875  function updateClickedSlide(el, path) {
35876    const swiper = this;
35877    const params = swiper.params;
35878    let slide2 = el.closest(`.${params.slideClass}, swiper-slide`);
35879    if (!slide2 && swiper.isElement && path && path.length > 1 && path.includes(el)) {
35880      [...path.slice(path.indexOf(el) + 1, path.length)].forEach((pathEl) => {
35881        if (!slide2 && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
35882          slide2 = pathEl;
35883        }
35884      });
35885    }
35886    let slideFound = false;
35887    let slideIndex;
35888    if (slide2) {
35889      for (let i4 = 0; i4 < swiper.slides.length; i4 += 1) {
35890        if (swiper.slides[i4] === slide2) {
35891          slideFound = true;
35892          slideIndex = i4;
35893          break;
35894        }
35895      }
35896    }
35897    if (slide2 && slideFound) {
35898      swiper.clickedSlide = slide2;
35899      if (swiper.virtual && swiper.params.virtual.enabled) {
35900        swiper.clickedIndex = parseInt(slide2.getAttribute("data-swiper-slide-index"), 10);
35901      } else {
35902        swiper.clickedIndex = slideIndex;
35903      }
35904    } else {
35905      swiper.clickedSlide = void 0;
35906      swiper.clickedIndex = void 0;
35907      return;
35908    }
35909    if (params.slideToClickedSlide && swiper.clickedIndex !== void 0 && swiper.clickedIndex !== swiper.activeIndex) {
35910      swiper.slideToClickedSlide();
35911    }
35912  }
35913  var update = {
35914    updateSize,
35915    updateSlides,
35916    updateAutoHeight,
35917    updateSlidesOffset,
35918    updateSlidesProgress,
35919    updateProgress,
35920    updateSlidesClasses,
35921    updateActiveIndex,
35922    updateClickedSlide
35923  };
35924  function getSwiperTranslate(axis) {
35925    if (axis === void 0) {
35926      axis = this.isHorizontal() ? "x" : "y";
35927    }
35928    const swiper = this;
35929    const {
35930      params,
35931      rtlTranslate: rtl,
35932      translate: translate2,
35933      wrapperEl
35934    } = swiper;
35935    if (params.virtualTranslate) {
35936      return rtl ? -translate2 : translate2;
35937    }
35938    if (params.cssMode) {
35939      return translate2;
35940    }
35941    let currentTranslate = getTranslate(wrapperEl, axis);
35942    currentTranslate += swiper.cssOverflowAdjustment();
35943    if (rtl)
35944      currentTranslate = -currentTranslate;
35945    return currentTranslate || 0;
35946  }
35947  function setTranslate(translate2, byController) {
35948    const swiper = this;
35949    const {
35950      rtlTranslate: rtl,
35951      params,
35952      wrapperEl,
35953      progress
35954    } = swiper;
35955    let x5 = 0;
35956    let y4 = 0;
35957    const z4 = 0;
35958    if (swiper.isHorizontal()) {
35959      x5 = rtl ? -translate2 : translate2;
35960    } else {
35961      y4 = translate2;
35962    }
35963    if (params.roundLengths) {
35964      x5 = Math.floor(x5);
35965      y4 = Math.floor(y4);
35966    }
35967    swiper.previousTranslate = swiper.translate;
35968    swiper.translate = swiper.isHorizontal() ? x5 : y4;
35969    if (params.cssMode) {
35970      wrapperEl[swiper.isHorizontal() ? "scrollLeft" : "scrollTop"] = swiper.isHorizontal() ? -x5 : -y4;
35971    } else if (!params.virtualTranslate) {
35972      if (swiper.isHorizontal()) {
35973        x5 -= swiper.cssOverflowAdjustment();
35974      } else {
35975        y4 -= swiper.cssOverflowAdjustment();
35976      }
35977      wrapperEl.style.transform = `translate3d(${x5}px, ${y4}px, ${z4}px)`;
35978    }
35979    let newProgress;
35980    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
35981    if (translatesDiff === 0) {
35982      newProgress = 0;
35983    } else {
35984      newProgress = (translate2 - swiper.minTranslate()) / translatesDiff;
35985    }
35986    if (newProgress !== progress) {
35987      swiper.updateProgress(translate2);
35988    }
35989    swiper.emit("setTranslate", swiper.translate, byController);
35990  }
35991  function minTranslate() {
35992    return -this.snapGrid[0];
35993  }
35994  function maxTranslate() {
35995    return -this.snapGrid[this.snapGrid.length - 1];
35996  }
35997  function translateTo(translate2, speed, runCallbacks, translateBounds, internal) {
35998    if (translate2 === void 0) {
35999      translate2 = 0;
36000    }
36001    if (speed === void 0) {
36002      speed = this.params.speed;
36003    }
36004    if (runCallbacks === void 0) {
36005      runCallbacks = true;
36006    }
36007    if (translateBounds === void 0) {
36008      translateBounds = true;
36009    }
36010    const swiper = this;
36011    const {
36012      params,
36013      wrapperEl
36014    } = swiper;
36015    if (swiper.animating && params.preventInteractionOnTransition) {
36016      return false;
36017    }
36018    const minTranslate2 = swiper.minTranslate();
36019    const maxTranslate2 = swiper.maxTranslate();
36020    let newTranslate;
36021    if (translateBounds && translate2 > minTranslate2)
36022      newTranslate = minTranslate2;
36023    else if (translateBounds && translate2 < maxTranslate2)
36024      newTranslate = maxTranslate2;
36025    else
36026      newTranslate = translate2;
36027    swiper.updateProgress(newTranslate);
36028    if (params.cssMode) {
36029      const isH = swiper.isHorizontal();
36030      if (speed === 0) {
36031        wrapperEl[isH ? "scrollLeft" : "scrollTop"] = -newTranslate;
36032      } else {
36033        if (!swiper.support.smoothScroll) {
36034          animateCSSModeScroll({
36035            swiper,
36036            targetPosition: -newTranslate,
36037            side: isH ? "left" : "top"
36038          });
36039          return true;
36040        }
36041        wrapperEl.scrollTo({
36042          [isH ? "left" : "top"]: -newTranslate,
36043          behavior: "smooth"
36044        });
36045      }
36046      return true;
36047    }
36048    if (speed === 0) {
36049      swiper.setTransition(0);
36050      swiper.setTranslate(newTranslate);
36051      if (runCallbacks) {
36052        swiper.emit("beforeTransitionStart", speed, internal);
36053        swiper.emit("transitionEnd");
36054      }
36055    } else {
36056      swiper.setTransition(speed);
36057      swiper.setTranslate(newTranslate);
36058      if (runCallbacks) {
36059        swiper.emit("beforeTransitionStart", speed, internal);
36060        swiper.emit("transitionStart");
36061      }
36062      if (!swiper.animating) {
36063        swiper.animating = true;
36064        if (!swiper.onTranslateToWrapperTransitionEnd) {
36065          swiper.onTranslateToWrapperTransitionEnd = function transitionEnd2(e4) {
36066            if (!swiper || swiper.destroyed)
36067              return;
36068            if (e4.target !== this)
36069              return;
36070            swiper.wrapperEl.removeEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
36071            swiper.onTranslateToWrapperTransitionEnd = null;
36072            delete swiper.onTranslateToWrapperTransitionEnd;
36073            if (runCallbacks) {
36074              swiper.emit("transitionEnd");
36075            }
36076          };
36077        }
36078        swiper.wrapperEl.addEventListener("transitionend", swiper.onTranslateToWrapperTransitionEnd);
36079      }
36080    }
36081    return true;
36082  }
36083  var translate = {
36084    getTranslate: getSwiperTranslate,
36085    setTranslate,
36086    minTranslate,
36087    maxTranslate,
36088    translateTo
36089  };
36090  function setTransition(duration, byController) {
36091    const swiper = this;
36092    if (!swiper.params.cssMode) {
36093      swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
36094      swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : "";
36095    }
36096    swiper.emit("setTransition", duration, byController);
36097  }
36098  function transitionEmit(_ref) {
36099    let {
36100      swiper,
36101      runCallbacks,
36102      direction,
36103      step
36104    } = _ref;
36105    const {
36106      activeIndex,
36107      previousIndex
36108    } = swiper;
36109    let dir = direction;
36110    if (!dir) {
36111      if (activeIndex > previousIndex)
36112        dir = "next";
36113      else if (activeIndex < previousIndex)
36114        dir = "prev";
36115      else
36116        dir = "reset";
36117    }
36118    swiper.emit(`transition${step}`);
36119    if (runCallbacks && activeIndex !== previousIndex) {
36120      if (dir === "reset") {
36121        swiper.emit(`slideResetTransition${step}`);
36122        return;
36123      }
36124      swiper.emit(`slideChangeTransition${step}`);
36125      if (dir === "next") {
36126        swiper.emit(`slideNextTransition${step}`);
36127      } else {
36128        swiper.emit(`slidePrevTransition${step}`);
36129      }
36130    }
36131  }
36132  function transitionStart(runCallbacks, direction) {
36133    if (runCallbacks === void 0) {
36134      runCallbacks = true;
36135    }
36136    const swiper = this;
36137    const {
36138      params
36139    } = swiper;
36140    if (params.cssMode)
36141      return;
36142    if (params.autoHeight) {
36143      swiper.updateAutoHeight();
36144    }
36145    transitionEmit({
36146      swiper,
36147      runCallbacks,
36148      direction,
36149      step: "Start"
36150    });
36151  }
36152  function transitionEnd(runCallbacks, direction) {
36153    if (runCallbacks === void 0) {
36154      runCallbacks = true;
36155    }
36156    const swiper = this;
36157    const {
36158      params
36159    } = swiper;
36160    swiper.animating = false;
36161    if (params.cssMode)
36162      return;
36163    swiper.setTransition(0);
36164    transitionEmit({
36165      swiper,
36166      runCallbacks,
36167      direction,
36168      step: "End"
36169    });
36170  }
36171  var transition = {
36172    setTransition,
36173    transitionStart,
36174    transitionEnd
36175  };
36176  function slideTo(index4, speed, runCallbacks, internal, initial) {
36177    if (index4 === void 0) {
36178      index4 = 0;
36179    }
36180    if (speed === void 0) {
36181      speed = this.params.speed;
36182    }
36183    if (runCallbacks === void 0) {
36184      runCallbacks = true;
36185    }
36186    if (typeof index4 === "string") {
36187      index4 = parseInt(index4, 10);
36188    }
36189    const swiper = this;
36190    let slideIndex = index4;
36191    if (slideIndex < 0)
36192      slideIndex = 0;
36193    const {
36194      params,
36195      snapGrid,
36196      slidesGrid,
36197      previousIndex,
36198      activeIndex,
36199      rtlTranslate: rtl,
36200      wrapperEl,
36201      enabled
36202    } = swiper;
36203    if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {
36204      return false;
36205    }
36206    const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
36207    let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
36208    if (snapIndex >= snapGrid.length)
36209      snapIndex = snapGrid.length - 1;
36210    const translate2 = -snapGrid[snapIndex];
36211    if (params.normalizeSlideIndex) {
36212      for (let i4 = 0; i4 < slidesGrid.length; i4 += 1) {
36213        const normalizedTranslate = -Math.floor(translate2 * 100);
36214        const normalizedGrid = Math.floor(slidesGrid[i4] * 100);
36215        const normalizedGridNext = Math.floor(slidesGrid[i4 + 1] * 100);
36216        if (typeof slidesGrid[i4 + 1] !== "undefined") {
36217          if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
36218            slideIndex = i4;
36219          } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
36220            slideIndex = i4 + 1;
36221          }
36222        } else if (normalizedTranslate >= normalizedGrid) {
36223          slideIndex = i4;
36224        }
36225      }
36226    }
36227    if (swiper.initialized && slideIndex !== activeIndex) {
36228      if (!swiper.allowSlideNext && (rtl ? translate2 > swiper.translate && translate2 > swiper.minTranslate() : translate2 < swiper.translate && translate2 < swiper.minTranslate())) {
36229        return false;
36230      }
36231      if (!swiper.allowSlidePrev && translate2 > swiper.translate && translate2 > swiper.maxTranslate()) {
36232        if ((activeIndex || 0) !== slideIndex) {
36233          return false;
36234        }
36235      }
36236    }
36237    if (slideIndex !== (previousIndex || 0) && runCallbacks) {
36238      swiper.emit("beforeSlideChangeStart");
36239    }
36240    swiper.updateProgress(translate2);
36241    let direction;
36242    if (slideIndex > activeIndex)
36243      direction = "next";
36244    else if (slideIndex < activeIndex)
36245      direction = "prev";
36246    else
36247      direction = "reset";
36248    if (rtl && -translate2 === swiper.translate || !rtl && translate2 === swiper.translate) {
36249      swiper.updateActiveIndex(slideIndex);
36250      if (params.autoHeight) {
36251        swiper.updateAutoHeight();
36252      }
36253      swiper.updateSlidesClasses();
36254      if (params.effect !== "slide") {
36255        swiper.setTranslate(translate2);
36256      }
36257      if (direction !== "reset") {
36258        swiper.transitionStart(runCallbacks, direction);
36259        swiper.transitionEnd(runCallbacks, direction);
36260      }
36261      return false;
36262    }
36263    if (params.cssMode) {
36264      const isH = swiper.isHorizontal();
36265      const t5 = rtl ? translate2 : -translate2;
36266      if (speed === 0) {
36267        const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
36268        if (isVirtual) {
36269          swiper.wrapperEl.style.scrollSnapType = "none";
36270          swiper._immediateVirtual = true;
36271        }
36272        if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
36273          swiper._cssModeVirtualInitialSet = true;
36274          requestAnimationFrame(() => {
36275            wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t5;
36276          });
36277        } else {
36278          wrapperEl[isH ? "scrollLeft" : "scrollTop"] = t5;
36279        }
36280        if (isVirtual) {
36281          requestAnimationFrame(() => {
36282            swiper.wrapperEl.style.scrollSnapType = "";
36283            swiper._immediateVirtual = false;
36284          });
36285        }
36286      } else {
36287        if (!swiper.support.smoothScroll) {
36288          animateCSSModeScroll({
36289            swiper,
36290            targetPosition: t5,
36291            side: isH ? "left" : "top"
36292          });
36293          return true;
36294        }
36295        wrapperEl.scrollTo({
36296          [isH ? "left" : "top"]: t5,
36297          behavior: "smooth"
36298        });
36299      }
36300      return true;
36301    }
36302    swiper.setTransition(speed);
36303    swiper.setTranslate(translate2);
36304    swiper.updateActiveIndex(slideIndex);
36305    swiper.updateSlidesClasses();
36306    swiper.emit("beforeTransitionStart", speed, internal);
36307    swiper.transitionStart(runCallbacks, direction);
36308    if (speed === 0) {
36309      swiper.transitionEnd(runCallbacks, direction);
36310    } else if (!swiper.animating) {
36311      swiper.animating = true;
36312      if (!swiper.onSlideToWrapperTransitionEnd) {
36313        swiper.onSlideToWrapperTransitionEnd = function transitionEnd2(e4) {
36314          if (!swiper || swiper.destroyed)
36315            return;
36316          if (e4.target !== this)
36317            return;
36318          swiper.wrapperEl.removeEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
36319          swiper.onSlideToWrapperTransitionEnd = null;
36320          delete swiper.onSlideToWrapperTransitionEnd;
36321          swiper.transitionEnd(runCallbacks, direction);
36322        };
36323      }
36324      swiper.wrapperEl.addEventListener("transitionend", swiper.onSlideToWrapperTransitionEnd);
36325    }
36326    return true;
36327  }
36328  function slideToLoop(index4, speed, runCallbacks, internal) {
36329    if (index4 === void 0) {
36330      index4 = 0;
36331    }
36332    if (speed === void 0) {
36333      speed = this.params.speed;
36334    }
36335    if (runCallbacks === void 0) {
36336      runCallbacks = true;
36337    }
36338    if (typeof index4 === "string") {
36339      const indexAsNumber = parseInt(index4, 10);
36340      index4 = indexAsNumber;
36341    }
36342    const swiper = this;
36343    let newIndex = index4;
36344    if (swiper.params.loop) {
36345      if (swiper.virtual && swiper.params.virtual.enabled) {
36346        newIndex = newIndex + swiper.virtual.slidesBefore;
36347      } else {
36348        newIndex = swiper.getSlideIndexByData(newIndex);
36349      }
36350    }
36351    return swiper.slideTo(newIndex, speed, runCallbacks, internal);
36352  }
36353  function slideNext(speed, runCallbacks, internal) {
36354    if (speed === void 0) {
36355      speed = this.params.speed;
36356    }
36357    if (runCallbacks === void 0) {
36358      runCallbacks = true;
36359    }
36360    const swiper = this;
36361    const {
36362      enabled,
36363      params,
36364      animating
36365    } = swiper;
36366    if (!enabled)
36367      return swiper;
36368    let perGroup = params.slidesPerGroup;
36369    if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
36370      perGroup = Math.max(swiper.slidesPerViewDynamic("current", true), 1);
36371    }
36372    const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
36373    const isVirtual = swiper.virtual && params.virtual.enabled;
36374    if (params.loop) {
36375      if (animating && !isVirtual && params.loopPreventsSliding)
36376        return false;
36377      swiper.loopFix({
36378        direction: "next"
36379      });
36380      swiper._clientLeft = swiper.wrapperEl.clientLeft;
36381      if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
36382        requestAnimationFrame(() => {
36383          swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
36384        });
36385        return true;
36386      }
36387    }
36388    if (params.rewind && swiper.isEnd) {
36389      return swiper.slideTo(0, speed, runCallbacks, internal);
36390    }
36391    return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
36392  }
36393  function slidePrev(speed, runCallbacks, internal) {
36394    if (speed === void 0) {
36395      speed = this.params.speed;
36396    }
36397    if (runCallbacks === void 0) {
36398      runCallbacks = true;
36399    }
36400    const swiper = this;
36401    const {
36402      params,
36403      snapGrid,
36404      slidesGrid,
36405      rtlTranslate,
36406      enabled,
36407      animating
36408    } = swiper;
36409    if (!enabled)
36410      return swiper;
36411    const isVirtual = swiper.virtual && params.virtual.enabled;
36412    if (params.loop) {
36413      if (animating && !isVirtual && params.loopPreventsSliding)
36414        return false;
36415      swiper.loopFix({
36416        direction: "prev"
36417      });
36418      swiper._clientLeft = swiper.wrapperEl.clientLeft;
36419    }
36420    const translate2 = rtlTranslate ? swiper.translate : -swiper.translate;
36421    function normalize(val) {
36422      if (val < 0)
36423        return -Math.floor(Math.abs(val));
36424      return Math.floor(val);
36425    }
36426    const normalizedTranslate = normalize(translate2);
36427    const normalizedSnapGrid = snapGrid.map((val) => normalize(val));
36428    let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
36429    if (typeof prevSnap === "undefined" && params.cssMode) {
36430      let prevSnapIndex;
36431      snapGrid.forEach((snap, snapIndex) => {
36432        if (normalizedTranslate >= snap) {
36433          prevSnapIndex = snapIndex;
36434        }
36435      });
36436      if (typeof prevSnapIndex !== "undefined") {
36437        prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
36438      }
36439    }
36440    let prevIndex = 0;
36441    if (typeof prevSnap !== "undefined") {
36442      prevIndex = slidesGrid.indexOf(prevSnap);
36443      if (prevIndex < 0)
36444        prevIndex = swiper.activeIndex - 1;
36445      if (params.slidesPerView === "auto" && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
36446        prevIndex = prevIndex - swiper.slidesPerViewDynamic("previous", true) + 1;
36447        prevIndex = Math.max(prevIndex, 0);
36448      }
36449    }
36450    if (params.rewind && swiper.isBeginning) {
36451      const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
36452      return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
36453    } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
36454      requestAnimationFrame(() => {
36455        swiper.slideTo(prevIndex, speed, runCallbacks, internal);
36456      });
36457      return true;
36458    }
36459    return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
36460  }
36461  function slideReset(speed, runCallbacks, internal) {
36462    if (speed === void 0) {
36463      speed = this.params.speed;
36464    }
36465    if (runCallbacks === void 0) {
36466      runCallbacks = true;
36467    }
36468    const swiper = this;
36469    return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
36470  }
36471  function slideToClosest(speed, runCallbacks, internal, threshold) {
36472    if (speed === void 0) {
36473      speed = this.params.speed;
36474    }
36475    if (runCallbacks === void 0) {
36476      runCallbacks = true;
36477    }
36478    if (threshold === void 0) {
36479      threshold = 0.5;
36480    }
36481    const swiper = this;
36482    let index4 = swiper.activeIndex;
36483    const skip = Math.min(swiper.params.slidesPerGroupSkip, index4);
36484    const snapIndex = skip + Math.floor((index4 - skip) / swiper.params.slidesPerGroup);
36485    const translate2 = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
36486    if (translate2 >= swiper.snapGrid[snapIndex]) {
36487      const currentSnap = swiper.snapGrid[snapIndex];
36488      const nextSnap = swiper.snapGrid[snapIndex + 1];
36489      if (translate2 - currentSnap > (nextSnap - currentSnap) * threshold) {
36490        index4 += swiper.params.slidesPerGroup;
36491      }
36492    } else {
36493      const prevSnap = swiper.snapGrid[snapIndex - 1];
36494      const currentSnap = swiper.snapGrid[snapIndex];
36495      if (translate2 - prevSnap <= (currentSnap - prevSnap) * threshold) {
36496        index4 -= swiper.params.slidesPerGroup;
36497      }
36498    }
36499    index4 = Math.max(index4, 0);
36500    index4 = Math.min(index4, swiper.slidesGrid.length - 1);
36501    return swiper.slideTo(index4, speed, runCallbacks, internal);
36502  }
36503  function slideToClickedSlide() {
36504    const swiper = this;
36505    const {
36506      params,
36507      slidesEl
36508    } = swiper;
36509    const slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : params.slidesPerView;
36510    let slideToIndex = swiper.clickedIndex;
36511    let realIndex;
36512    const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
36513    if (params.loop) {
36514      if (swiper.animating)
36515        return;
36516      realIndex = parseInt(swiper.clickedSlide.getAttribute("data-swiper-slide-index"), 10);
36517      if (params.centeredSlides) {
36518        if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
36519          swiper.loopFix();
36520          slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
36521          nextTick(() => {
36522            swiper.slideTo(slideToIndex);
36523          });
36524        } else {
36525          swiper.slideTo(slideToIndex);
36526        }
36527      } else if (slideToIndex > swiper.slides.length - slidesPerView) {
36528        swiper.loopFix();
36529        slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
36530        nextTick(() => {
36531          swiper.slideTo(slideToIndex);
36532        });
36533      } else {
36534        swiper.slideTo(slideToIndex);
36535      }
36536    } else {
36537      swiper.slideTo(slideToIndex);
36538    }
36539  }
36540  var slide = {
36541    slideTo,
36542    slideToLoop,
36543    slideNext,
36544    slidePrev,
36545    slideReset,
36546    slideToClosest,
36547    slideToClickedSlide
36548  };
36549  function loopCreate(slideRealIndex) {
36550    const swiper = this;
36551    const {
36552      params,
36553      slidesEl
36554    } = swiper;
36555    if (!params.loop || swiper.virtual && swiper.params.virtual.enabled)
36556      return;
36557    const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
36558    slides.forEach((el, index4) => {
36559      el.setAttribute("data-swiper-slide-index", index4);
36560    });
36561    swiper.loopFix({
36562      slideRealIndex,
36563      direction: params.centeredSlides ? void 0 : "next"
36564    });
36565  }
36566  function loopFix(_temp) {
36567    let {
36568      slideRealIndex,
36569      slideTo: slideTo2 = true,
36570      direction,
36571      setTranslate: setTranslate2,
36572      activeSlideIndex,
36573      byController,
36574      byMousewheel
36575    } = _temp === void 0 ? {} : _temp;
36576    const swiper = this;
36577    if (!swiper.params.loop)
36578      return;
36579    swiper.emit("beforeLoopFix");
36580    const {
36581      slides,
36582      allowSlidePrev,
36583      allowSlideNext,
36584      slidesEl,
36585      params
36586    } = swiper;
36587    swiper.allowSlidePrev = true;
36588    swiper.allowSlideNext = true;
36589    if (swiper.virtual && params.virtual.enabled) {
36590      if (slideTo2) {
36591        if (!params.centeredSlides && swiper.snapIndex === 0) {
36592          swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
36593        } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
36594          swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
36595        } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
36596          swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
36597        }
36598      }
36599      swiper.allowSlidePrev = allowSlidePrev;
36600      swiper.allowSlideNext = allowSlideNext;
36601      swiper.emit("loopFix");
36602      return;
36603    }
36604    const slidesPerView = params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));
36605    let loopedSlides = params.loopedSlides || slidesPerView;
36606    if (loopedSlides % params.slidesPerGroup !== 0) {
36607      loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;
36608    }
36609    swiper.loopedSlides = loopedSlides;
36610    const prependSlidesIndexes = [];
36611    const appendSlidesIndexes = [];
36612    let activeIndex = swiper.activeIndex;
36613    if (typeof activeSlideIndex === "undefined") {
36614      activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter((el) => el.classList.contains(params.slideActiveClass))[0]);
36615    } else {
36616      activeIndex = activeSlideIndex;
36617    }
36618    const isNext = direction === "next" || !direction;
36619    const isPrev = direction === "prev" || !direction;
36620    let slidesPrepended = 0;
36621    let slidesAppended = 0;
36622    if (activeSlideIndex < loopedSlides) {
36623      slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);
36624      for (let i4 = 0; i4 < loopedSlides - activeSlideIndex; i4 += 1) {
36625        const index4 = i4 - Math.floor(i4 / slides.length) * slides.length;
36626        prependSlidesIndexes.push(slides.length - index4 - 1);
36627      }
36628    } else if (activeSlideIndex > swiper.slides.length - loopedSlides * 2) {
36629      slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);
36630      for (let i4 = 0; i4 < slidesAppended; i4 += 1) {
36631        const index4 = i4 - Math.floor(i4 / slides.length) * slides.length;
36632        appendSlidesIndexes.push(index4);
36633      }
36634    }
36635    if (isPrev) {
36636      prependSlidesIndexes.forEach((index4) => {
36637        swiper.slides[index4].swiperLoopMoveDOM = true;
36638        slidesEl.prepend(swiper.slides[index4]);
36639        swiper.slides[index4].swiperLoopMoveDOM = false;
36640      });
36641    }
36642    if (isNext) {
36643      appendSlidesIndexes.forEach((index4) => {
36644        swiper.slides[index4].swiperLoopMoveDOM = true;
36645        slidesEl.append(swiper.slides[index4]);
36646        swiper.slides[index4].swiperLoopMoveDOM = false;
36647      });
36648    }
36649    swiper.recalcSlides();
36650    if (params.slidesPerView === "auto") {
36651      swiper.updateSlides();
36652    }
36653    if (params.watchSlidesProgress) {
36654      swiper.updateSlidesOffset();
36655    }
36656    if (slideTo2) {
36657      if (prependSlidesIndexes.length > 0 && isPrev) {
36658        if (typeof slideRealIndex === "undefined") {
36659          const currentSlideTranslate = swiper.slidesGrid[activeIndex];
36660          const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
36661          const diff = newSlideTranslate - currentSlideTranslate;
36662          if (byMousewheel) {
36663            swiper.setTranslate(swiper.translate - diff);
36664          } else {
36665            swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);
36666            if (setTranslate2) {
36667              swiper.touches[swiper.isHorizontal() ? "startX" : "startY"] += diff;
36668              swiper.touchEventsData.currentTranslate = swiper.translate;
36669            }
36670          }
36671        } else {
36672          if (setTranslate2) {
36673            swiper.slideToLoop(slideRealIndex, 0, false, true);
36674            swiper.touchEventsData.currentTranslate = swiper.translate;
36675          }
36676        }
36677      } else if (appendSlidesIndexes.length > 0 && isNext) {
36678        if (typeof slideRealIndex === "undefined") {
36679          const currentSlideTranslate = swiper.slidesGrid[activeIndex];
36680          const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
36681          const diff = newSlideTranslate - currentSlideTranslate;
36682          if (byMousewheel) {
36683            swiper.setTranslate(swiper.translate - diff);
36684          } else {
36685            swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
36686            if (setTranslate2) {
36687              swiper.touches[swiper.isHorizontal() ? "startX" : "startY"] += diff;
36688              swiper.touchEventsData.currentTranslate = swiper.translate;
36689            }
36690          }
36691        } else {
36692          swiper.slideToLoop(slideRealIndex, 0, false, true);
36693        }
36694      }
36695    }
36696    swiper.allowSlidePrev = allowSlidePrev;
36697    swiper.allowSlideNext = allowSlideNext;
36698    if (swiper.controller && swiper.controller.control && !byController) {
36699      const loopParams = {
36700        slideRealIndex,
36701        direction,
36702        setTranslate: setTranslate2,
36703        activeSlideIndex,
36704        byController: true
36705      };
36706      if (Array.isArray(swiper.controller.control)) {
36707        swiper.controller.control.forEach((c4) => {
36708          if (!c4.destroyed && c4.params.loop)
36709            c4.loopFix({
36710              ...loopParams,
36711              slideTo: c4.params.slidesPerView === params.slidesPerView ? slideTo2 : false
36712            });
36713        });
36714      } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
36715        swiper.controller.control.loopFix({
36716          ...loopParams,
36717          slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo2 : false
36718        });
36719      }
36720    }
36721    swiper.emit("loopFix");
36722  }
36723  function loopDestroy() {
36724    const swiper = this;
36725    const {
36726      params,
36727      slidesEl
36728    } = swiper;
36729    if (!params.loop || swiper.virtual && swiper.params.virtual.enabled)
36730      return;
36731    swiper.recalcSlides();
36732    const newSlidesOrder = [];
36733    swiper.slides.forEach((slideEl) => {
36734      const index4 = typeof slideEl.swiperSlideIndex === "undefined" ? slideEl.getAttribute("data-swiper-slide-index") * 1 : slideEl.swiperSlideIndex;
36735      newSlidesOrder[index4] = slideEl;
36736    });
36737    swiper.slides.forEach((slideEl) => {
36738      slideEl.removeAttribute("data-swiper-slide-index");
36739    });
36740    newSlidesOrder.forEach((slideEl) => {
36741      slidesEl.append(slideEl);
36742    });
36743    swiper.recalcSlides();
36744    swiper.slideTo(swiper.realIndex, 0);
36745  }
36746  var loop = {
36747    loopCreate,
36748    loopFix,
36749    loopDestroy
36750  };
36751  function setGrabCursor(moving) {
36752    const swiper = this;
36753    if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode)
36754      return;
36755    const el = swiper.params.touchEventsTarget === "container" ? swiper.el : swiper.wrapperEl;
36756    if (swiper.isElement) {
36757      swiper.__preventObserver__ = true;
36758    }
36759    el.style.cursor = "move";
36760    el.style.cursor = moving ? "grabbing" : "grab";
36761    if (swiper.isElement) {
36762      requestAnimationFrame(() => {
36763        swiper.__preventObserver__ = false;
36764      });
36765    }
36766  }
36767  function unsetGrabCursor() {
36768    const swiper = this;
36769    if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
36770      return;
36771    }
36772    if (swiper.isElement) {
36773      swiper.__preventObserver__ = true;
36774    }
36775    swiper[swiper.params.touchEventsTarget === "container" ? "el" : "wrapperEl"].style.cursor = "";
36776    if (swiper.isElement) {
36777      requestAnimationFrame(() => {
36778        swiper.__preventObserver__ = false;
36779      });
36780    }
36781  }
36782  var grabCursor = {
36783    setGrabCursor,
36784    unsetGrabCursor
36785  };
36786  function closestElement(selector, base) {
36787    if (base === void 0) {
36788      base = this;
36789    }
36790    function __closestFrom(el) {
36791      if (!el || el === getDocument() || el === getWindow2())
36792        return null;
36793      if (el.assignedSlot)
36794        el = el.assignedSlot;
36795      const found = el.closest(selector);
36796      if (!found && !el.getRootNode) {
36797        return null;
36798      }
36799      return found || __closestFrom(el.getRootNode().host);
36800    }
36801    return __closestFrom(base);
36802  }
36803  function onTouchStart(event2) {
36804    const swiper = this;
36805    const document2 = getDocument();
36806    const window2 = getWindow2();
36807    const data = swiper.touchEventsData;
36808    data.evCache.push(event2);
36809    const {
36810      params,
36811      touches,
36812      enabled
36813    } = swiper;
36814    if (!enabled)
36815      return;
36816    if (!params.simulateTouch && event2.pointerType === "mouse")
36817      return;
36818    if (swiper.animating && params.preventInteractionOnTransition) {
36819      return;
36820    }
36821    if (!swiper.animating && params.cssMode && params.loop) {
36822      swiper.loopFix();
36823    }
36824    let e4 = event2;
36825    if (e4.originalEvent)
36826      e4 = e4.originalEvent;
36827    let targetEl = e4.target;
36828    if (params.touchEventsTarget === "wrapper") {
36829      if (!swiper.wrapperEl.contains(targetEl))
36830        return;
36831    }
36832    if ("which" in e4 && e4.which === 3)
36833      return;
36834    if ("button" in e4 && e4.button > 0)
36835      return;
36836    if (data.isTouched && data.isMoved)
36837      return;
36838    const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== "";
36839    const eventPath = event2.composedPath ? event2.composedPath() : event2.path;
36840    if (swipingClassHasValue && e4.target && e4.target.shadowRoot && eventPath) {
36841      targetEl = eventPath[0];
36842    }
36843    const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
36844    const isTargetShadow = !!(e4.target && e4.target.shadowRoot);
36845    if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
36846      swiper.allowClick = true;
36847      return;
36848    }
36849    if (params.swipeHandler) {
36850      if (!targetEl.closest(params.swipeHandler))
36851        return;
36852    }
36853    touches.currentX = e4.pageX;
36854    touches.currentY = e4.pageY;
36855    const startX = touches.currentX;
36856    const startY = touches.currentY;
36857    const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
36858    const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
36859    if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window2.innerWidth - edgeSwipeThreshold)) {
36860      if (edgeSwipeDetection === "prevent") {
36861        event2.preventDefault();
36862      } else {
36863        return;
36864      }
36865    }
36866    Object.assign(data, {
36867      isTouched: true,
36868      isMoved: false,
36869      allowTouchCallbacks: true,
36870      isScrolling: void 0,
36871      startMoving: void 0
36872    });
36873    touches.startX = startX;
36874    touches.startY = startY;
36875    data.touchStartTime = now2();
36876    swiper.allowClick = true;
36877    swiper.updateSize();
36878    swiper.swipeDirection = void 0;
36879    if (params.threshold > 0)
36880      data.allowThresholdMove = false;
36881    let preventDefault3 = true;
36882    if (targetEl.matches(data.focusableElements)) {
36883      preventDefault3 = false;
36884      if (targetEl.nodeName === "SELECT") {
36885        data.isTouched = false;
36886      }
36887    }
36888    if (document2.activeElement && document2.activeElement.matches(data.focusableElements) && document2.activeElement !== targetEl) {
36889      document2.activeElement.blur();
36890    }
36891    const shouldPreventDefault = preventDefault3 && swiper.allowTouchMove && params.touchStartPreventDefault;
36892    if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
36893      e4.preventDefault();
36894    }
36895    if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
36896      swiper.freeMode.onTouchStart();
36897    }
36898    swiper.emit("touchStart", e4);
36899  }
36900  function onTouchMove(event2) {
36901    const document2 = getDocument();
36902    const swiper = this;
36903    const data = swiper.touchEventsData;
36904    const {
36905      params,
36906      touches,
36907      rtlTranslate: rtl,
36908      enabled
36909    } = swiper;
36910    if (!enabled)
36911      return;
36912    if (!params.simulateTouch && event2.pointerType === "mouse")
36913      return;
36914    let e4 = event2;
36915    if (e4.originalEvent)
36916      e4 = e4.originalEvent;
36917    if (!data.isTouched) {
36918      if (data.startMoving && data.isScrolling) {
36919        swiper.emit("touchMoveOpposite", e4);
36920      }
36921      return;
36922    }
36923    const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === e4.pointerId);
36924    if (pointerIndex >= 0)
36925      data.evCache[pointerIndex] = e4;
36926    const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e4;
36927    const pageX = targetTouch.pageX;
36928    const pageY = targetTouch.pageY;
36929    if (e4.preventedByNestedSwiper) {
36930      touches.startX = pageX;
36931      touches.startY = pageY;
36932      return;
36933    }
36934    if (!swiper.allowTouchMove) {
36935      if (!e4.target.matches(data.focusableElements)) {
36936        swiper.allowClick = false;
36937      }
36938      if (data.isTouched) {
36939        Object.assign(touches, {
36940          startX: pageX,
36941          startY: pageY,
36942          prevX: swiper.touches.currentX,
36943          prevY: swiper.touches.currentY,
36944          currentX: pageX,
36945          currentY: pageY
36946        });
36947        data.touchStartTime = now2();
36948      }
36949      return;
36950    }
36951    if (params.touchReleaseOnEdges && !params.loop) {
36952      if (swiper.isVertical()) {
36953        if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
36954          data.isTouched = false;
36955          data.isMoved = false;
36956          return;
36957        }
36958      } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
36959        return;
36960      }
36961    }
36962    if (document2.activeElement) {
36963      if (e4.target === document2.activeElement && e4.target.matches(data.focusableElements)) {
36964        data.isMoved = true;
36965        swiper.allowClick = false;
36966        return;
36967      }
36968    }
36969    if (data.allowTouchCallbacks) {
36970      swiper.emit("touchMove", e4);
36971    }
36972    if (e4.targetTouches && e4.targetTouches.length > 1)
36973      return;
36974    touches.currentX = pageX;
36975    touches.currentY = pageY;
36976    const diffX = touches.currentX - touches.startX;
36977    const diffY = touches.currentY - touches.startY;
36978    if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)
36979      return;
36980    if (typeof data.isScrolling === "undefined") {
36981      let touchAngle;
36982      if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
36983        data.isScrolling = false;
36984      } else {
36985        if (diffX * diffX + diffY * diffY >= 25) {
36986          touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
36987          data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
36988        }
36989      }
36990    }
36991    if (data.isScrolling) {
36992      swiper.emit("touchMoveOpposite", e4);
36993    }
36994    if (typeof data.startMoving === "undefined") {
36995      if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
36996        data.startMoving = true;
36997      }
36998    }
36999    if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {
37000      data.isTouched = false;
37001      return;
37002    }
37003    if (!data.startMoving) {
37004      return;
37005    }
37006    swiper.allowClick = false;
37007    if (!params.cssMode && e4.cancelable) {
37008      e4.preventDefault();
37009    }
37010    if (params.touchMoveStopPropagation && !params.nested) {
37011      e4.stopPropagation();
37012    }
37013    let diff = swiper.isHorizontal() ? diffX : diffY;
37014    let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
37015    if (params.oneWayMovement) {
37016      diff = Math.abs(diff) * (rtl ? 1 : -1);
37017      touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
37018    }
37019    touches.diff = diff;
37020    diff *= params.touchRatio;
37021    if (rtl) {
37022      diff = -diff;
37023      touchesDiff = -touchesDiff;
37024    }
37025    const prevTouchesDirection = swiper.touchesDirection;
37026    swiper.swipeDirection = diff > 0 ? "prev" : "next";
37027    swiper.touchesDirection = touchesDiff > 0 ? "prev" : "next";
37028    const isLoop = swiper.params.loop && !params.cssMode;
37029    const allowLoopFix = swiper.swipeDirection === "next" && swiper.allowSlideNext || swiper.swipeDirection === "prev" && swiper.allowSlidePrev;
37030    if (!data.isMoved) {
37031      if (isLoop && allowLoopFix) {
37032        swiper.loopFix({
37033          direction: swiper.swipeDirection
37034        });
37035      }
37036      data.startTranslate = swiper.getTranslate();
37037      swiper.setTransition(0);
37038      if (swiper.animating) {
37039        const evt = new window.CustomEvent("transitionend", {
37040          bubbles: true,
37041          cancelable: true
37042        });
37043        swiper.wrapperEl.dispatchEvent(evt);
37044      }
37045      data.allowMomentumBounce = false;
37046      if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
37047        swiper.setGrabCursor(true);
37048      }
37049      swiper.emit("sliderFirstMove", e4);
37050    }
37051    let loopFixed;
37052    if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
37053      swiper.loopFix({
37054        direction: swiper.swipeDirection,
37055        setTranslate: true
37056      });
37057      loopFixed = true;
37058    }
37059    swiper.emit("sliderMove", e4);
37060    data.isMoved = true;
37061    data.currentTranslate = diff + data.startTranslate;
37062    let disableParentSwiper = true;
37063    let resistanceRatio = params.resistanceRatio;
37064    if (params.touchReleaseOnEdges) {
37065      resistanceRatio = 0;
37066    }
37067    if (diff > 0) {
37068      if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {
37069        swiper.loopFix({
37070          direction: "prev",
37071          setTranslate: true,
37072          activeSlideIndex: 0
37073        });
37074      }
37075      if (data.currentTranslate > swiper.minTranslate()) {
37076        disableParentSwiper = false;
37077        if (params.resistance) {
37078          data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
37079        }
37080      }
37081    } else if (diff < 0) {
37082      if (isLoop && allowLoopFix && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {
37083        swiper.loopFix({
37084          direction: "next",
37085          setTranslate: true,
37086          activeSlideIndex: swiper.slides.length - (params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
37087        });
37088      }
37089      if (data.currentTranslate < swiper.maxTranslate()) {
37090        disableParentSwiper = false;
37091        if (params.resistance) {
37092          data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
37093        }
37094      }
37095    }
37096    if (disableParentSwiper) {
37097      e4.preventedByNestedSwiper = true;
37098    }
37099    if (!swiper.allowSlideNext && swiper.swipeDirection === "next" && data.currentTranslate < data.startTranslate) {
37100      data.currentTranslate = data.startTranslate;
37101    }
37102    if (!swiper.allowSlidePrev && swiper.swipeDirection === "prev" && data.currentTranslate > data.startTranslate) {
37103      data.currentTranslate = data.startTranslate;
37104    }
37105    if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
37106      data.currentTranslate = data.startTranslate;
37107    }
37108    if (params.threshold > 0) {
37109      if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
37110        if (!data.allowThresholdMove) {
37111          data.allowThresholdMove = true;
37112          touches.startX = touches.currentX;
37113          touches.startY = touches.currentY;
37114          data.currentTranslate = data.startTranslate;
37115          touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
37116          return;
37117        }
37118      } else {
37119        data.currentTranslate = data.startTranslate;
37120        return;
37121      }
37122    }
37123    if (!params.followFinger || params.cssMode)
37124      return;
37125    if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
37126      swiper.updateActiveIndex();
37127      swiper.updateSlidesClasses();
37128    }
37129    if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
37130      swiper.freeMode.onTouchMove();
37131    }
37132    swiper.updateProgress(data.currentTranslate);
37133    swiper.setTranslate(data.currentTranslate);
37134  }
37135  function onTouchEnd(event2) {
37136    const swiper = this;
37137    const data = swiper.touchEventsData;
37138    const pointerIndex = data.evCache.findIndex((cachedEv) => cachedEv.pointerId === event2.pointerId);
37139    if (pointerIndex >= 0) {
37140      data.evCache.splice(pointerIndex, 1);
37141    }
37142    if (["pointercancel", "pointerout", "pointerleave", "contextmenu"].includes(event2.type)) {
37143      const proceed = ["pointercancel", "contextmenu"].includes(event2.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
37144      if (!proceed) {
37145        return;
37146      }
37147    }
37148    const {
37149      params,
37150      touches,
37151      rtlTranslate: rtl,
37152      slidesGrid,
37153      enabled
37154    } = swiper;
37155    if (!enabled)
37156      return;
37157    if (!params.simulateTouch && event2.pointerType === "mouse")
37158      return;
37159    let e4 = event2;
37160    if (e4.originalEvent)
37161      e4 = e4.originalEvent;
37162    if (data.allowTouchCallbacks) {
37163      swiper.emit("touchEnd", e4);
37164    }
37165    data.allowTouchCallbacks = false;
37166    if (!data.isTouched) {
37167      if (data.isMoved && params.grabCursor) {
37168        swiper.setGrabCursor(false);
37169      }
37170      data.isMoved = false;
37171      data.startMoving = false;
37172      return;
37173    }
37174    if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
37175      swiper.setGrabCursor(false);
37176    }
37177    const touchEndTime = now2();
37178    const timeDiff = touchEndTime - data.touchStartTime;
37179    if (swiper.allowClick) {
37180      const pathTree = e4.path || e4.composedPath && e4.composedPath();
37181      swiper.updateClickedSlide(pathTree && pathTree[0] || e4.target, pathTree);
37182      swiper.emit("tap click", e4);
37183      if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
37184        swiper.emit("doubleTap doubleClick", e4);
37185      }
37186    }
37187    data.lastClickTime = now2();
37188    nextTick(() => {
37189      if (!swiper.destroyed)
37190        swiper.allowClick = true;
37191    });
37192    if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
37193      data.isTouched = false;
37194      data.isMoved = false;
37195      data.startMoving = false;
37196      return;
37197    }
37198    data.isTouched = false;
37199    data.isMoved = false;
37200    data.startMoving = false;
37201    let currentPos;
37202    if (params.followFinger) {
37203      currentPos = rtl ? swiper.translate : -swiper.translate;
37204    } else {
37205      currentPos = -data.currentTranslate;
37206    }
37207    if (params.cssMode) {
37208      return;
37209    }
37210    if (params.freeMode && params.freeMode.enabled) {
37211      swiper.freeMode.onTouchEnd({
37212        currentPos
37213      });
37214      return;
37215    }
37216    let stopIndex = 0;
37217    let groupSize = swiper.slidesSizesGrid[0];
37218    for (let i4 = 0; i4 < slidesGrid.length; i4 += i4 < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
37219      const increment2 = i4 < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
37220      if (typeof slidesGrid[i4 + increment2] !== "undefined") {
37221        if (currentPos >= slidesGrid[i4] && currentPos < slidesGrid[i4 + increment2]) {
37222          stopIndex = i4;
37223          groupSize = slidesGrid[i4 + increment2] - slidesGrid[i4];
37224        }
37225      } else if (currentPos >= slidesGrid[i4]) {
37226        stopIndex = i4;
37227        groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
37228      }
37229    }
37230    let rewindFirstIndex = null;
37231    let rewindLastIndex = null;
37232    if (params.rewind) {
37233      if (swiper.isBeginning) {
37234        rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
37235      } else if (swiper.isEnd) {
37236        rewindFirstIndex = 0;
37237      }
37238    }
37239    const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
37240    const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
37241    if (timeDiff > params.longSwipesMs) {
37242      if (!params.longSwipes) {
37243        swiper.slideTo(swiper.activeIndex);
37244        return;
37245      }
37246      if (swiper.swipeDirection === "next") {
37247        if (ratio >= params.longSwipesRatio)
37248          swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);
37249        else
37250          swiper.slideTo(stopIndex);
37251      }
37252      if (swiper.swipeDirection === "prev") {
37253        if (ratio > 1 - params.longSwipesRatio) {
37254          swiper.slideTo(stopIndex + increment);
37255        } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
37256          swiper.slideTo(rewindLastIndex);
37257        } else {
37258          swiper.slideTo(stopIndex);
37259        }
37260      }
37261    } else {
37262      if (!params.shortSwipes) {
37263        swiper.slideTo(swiper.activeIndex);
37264        return;
37265      }
37266      const isNavButtonTarget = swiper.navigation && (e4.target === swiper.navigation.nextEl || e4.target === swiper.navigation.prevEl);
37267      if (!isNavButtonTarget) {
37268        if (swiper.swipeDirection === "next") {
37269          swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
37270        }
37271        if (swiper.swipeDirection === "prev") {
37272          swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
37273        }
37274      } else if (e4.target === swiper.navigation.nextEl) {
37275        swiper.slideTo(stopIndex + increment);
37276      } else {
37277        swiper.slideTo(stopIndex);
37278      }
37279    }
37280  }
37281  function onResize() {
37282    const swiper = this;
37283    const {
37284      params,
37285      el
37286    } = swiper;
37287    if (el && el.offsetWidth === 0)
37288      return;
37289    if (params.breakpoints) {
37290      swiper.setBreakpoint();
37291    }
37292    const {
37293      allowSlideNext,
37294      allowSlidePrev,
37295      snapGrid
37296    } = swiper;
37297    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
37298    swiper.allowSlideNext = true;
37299    swiper.allowSlidePrev = true;
37300    swiper.updateSize();
37301    swiper.updateSlides();
37302    swiper.updateSlidesClasses();
37303    const isVirtualLoop = isVirtual && params.loop;
37304    if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
37305      swiper.slideTo(swiper.slides.length - 1, 0, false, true);
37306    } else {
37307      if (swiper.params.loop && !isVirtual) {
37308        swiper.slideToLoop(swiper.realIndex, 0, false, true);
37309      } else {
37310        swiper.slideTo(swiper.activeIndex, 0, false, true);
37311      }
37312    }
37313    if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
37314      clearTimeout(swiper.autoplay.resizeTimeout);
37315      swiper.autoplay.resizeTimeout = setTimeout(() => {
37316        if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
37317          swiper.autoplay.resume();
37318        }
37319      }, 500);
37320    }
37321    swiper.allowSlidePrev = allowSlidePrev;
37322    swiper.allowSlideNext = allowSlideNext;
37323    if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
37324      swiper.checkOverflow();
37325    }
37326  }
37327  function onClick(e4) {
37328    const swiper = this;
37329    if (!swiper.enabled)
37330      return;
37331    if (!swiper.allowClick) {
37332      if (swiper.params.preventClicks)
37333        e4.preventDefault();
37334      if (swiper.params.preventClicksPropagation && swiper.animating) {
37335        e4.stopPropagation();
37336        e4.stopImmediatePropagation();
37337      }
37338    }
37339  }
37340  function onScroll() {
37341    const swiper = this;
37342    const {
37343      wrapperEl,
37344      rtlTranslate,
37345      enabled
37346    } = swiper;
37347    if (!enabled)
37348      return;
37349    swiper.previousTranslate = swiper.translate;
37350    if (swiper.isHorizontal()) {
37351      swiper.translate = -wrapperEl.scrollLeft;
37352    } else {
37353      swiper.translate = -wrapperEl.scrollTop;
37354    }
37355    if (swiper.translate === 0)
37356      swiper.translate = 0;
37357    swiper.updateActiveIndex();
37358    swiper.updateSlidesClasses();
37359    let newProgress;
37360    const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
37361    if (translatesDiff === 0) {
37362      newProgress = 0;
37363    } else {
37364      newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
37365    }
37366    if (newProgress !== swiper.progress) {
37367      swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
37368    }
37369    swiper.emit("setTranslate", swiper.translate, false);
37370  }
37371  function onLoad(e4) {
37372    const swiper = this;
37373    processLazyPreloader(swiper, e4.target);
37374    if (swiper.params.cssMode || swiper.params.slidesPerView !== "auto" && !swiper.params.autoHeight) {
37375      return;
37376    }
37377    swiper.update();
37378  }
37379  var dummyEventAttached = false;
37380  function dummyEventListener() {
37381  }
37382  var events = (swiper, method) => {
37383    const document2 = getDocument();
37384    const {
37385      params,
37386      el,
37387      wrapperEl,
37388      device
37389    } = swiper;
37390    const capture = !!params.nested;
37391    const domMethod = method === "on" ? "addEventListener" : "removeEventListener";
37392    const swiperMethod = method;
37393    el[domMethod]("pointerdown", swiper.onTouchStart, {
37394      passive: false
37395    });
37396    document2[domMethod]("pointermove", swiper.onTouchMove, {
37397      passive: false,
37398      capture
37399    });
37400    document2[domMethod]("pointerup", swiper.onTouchEnd, {
37401      passive: true
37402    });
37403    document2[domMethod]("pointercancel", swiper.onTouchEnd, {
37404      passive: true
37405    });
37406    document2[domMethod]("pointerout", swiper.onTouchEnd, {
37407      passive: true
37408    });
37409    document2[domMethod]("pointerleave", swiper.onTouchEnd, {
37410      passive: true
37411    });
37412    document2[domMethod]("contextmenu", swiper.onTouchEnd, {
37413      passive: true
37414    });
37415    if (params.preventClicks || params.preventClicksPropagation) {
37416      el[domMethod]("click", swiper.onClick, true);
37417    }
37418    if (params.cssMode) {
37419      wrapperEl[domMethod]("scroll", swiper.onScroll);
37420    }
37421    if (params.updateOnWindowResize) {
37422      swiper[swiperMethod](device.ios || device.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", onResize, true);
37423    } else {
37424      swiper[swiperMethod]("observerUpdate", onResize, true);
37425    }
37426    el[domMethod]("load", swiper.onLoad, {
37427      capture: true
37428    });
37429  };
37430  function attachEvents() {
37431    const swiper = this;
37432    const document2 = getDocument();
37433    const {
37434      params
37435    } = swiper;
37436    swiper.onTouchStart = onTouchStart.bind(swiper);
37437    swiper.onTouchMove = onTouchMove.bind(swiper);
37438    swiper.onTouchEnd = onTouchEnd.bind(swiper);
37439    if (params.cssMode) {
37440      swiper.onScroll = onScroll.bind(swiper);
37441    }
37442    swiper.onClick = onClick.bind(swiper);
37443    swiper.onLoad = onLoad.bind(swiper);
37444    if (!dummyEventAttached) {
37445      document2.addEventListener("touchstart", dummyEventListener);
37446      dummyEventAttached = true;
37447    }
37448    events(swiper, "on");
37449  }
37450  function detachEvents() {
37451    const swiper = this;
37452    events(swiper, "off");
37453  }
37454  var events$1 = {
37455    attachEvents,
37456    detachEvents
37457  };
37458  var isGridEnabled = (swiper, params) => {
37459    return swiper.grid && params.grid && params.grid.rows > 1;
37460  };
37461  function setBreakpoint() {
37462    const swiper = this;
37463    const {
37464      realIndex,
37465      initialized,
37466      params,
37467      el
37468    } = swiper;
37469    const breakpoints2 = params.breakpoints;
37470    if (!breakpoints2 || breakpoints2 && Object.keys(breakpoints2).length === 0)
37471      return;
37472    const breakpoint = swiper.getBreakpoint(breakpoints2, swiper.params.breakpointsBase, swiper.el);
37473    if (!breakpoint || swiper.currentBreakpoint === breakpoint)
37474      return;
37475    const breakpointOnlyParams = breakpoint in breakpoints2 ? breakpoints2[breakpoint] : void 0;
37476    const breakpointParams = breakpointOnlyParams || swiper.originalParams;
37477    const wasMultiRow = isGridEnabled(swiper, params);
37478    const isMultiRow = isGridEnabled(swiper, breakpointParams);
37479    const wasEnabled = params.enabled;
37480    if (wasMultiRow && !isMultiRow) {
37481      el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
37482      swiper.emitContainerClasses();
37483    } else if (!wasMultiRow && isMultiRow) {
37484      el.classList.add(`${params.containerModifierClass}grid`);
37485      if (breakpointParams.grid.fill && breakpointParams.grid.fill === "column" || !breakpointParams.grid.fill && params.grid.fill === "column") {
37486        el.classList.add(`${params.containerModifierClass}grid-column`);
37487      }
37488      swiper.emitContainerClasses();
37489    }
37490    ["navigation", "pagination", "scrollbar"].forEach((prop) => {
37491      if (typeof breakpointParams[prop] === "undefined")
37492        return;
37493      const wasModuleEnabled = params[prop] && params[prop].enabled;
37494      const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
37495      if (wasModuleEnabled && !isModuleEnabled) {
37496        swiper[prop].disable();
37497      }
37498      if (!wasModuleEnabled && isModuleEnabled) {
37499        swiper[prop].enable();
37500      }
37501    });
37502    const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
37503    const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
37504    const wasLoop = params.loop;
37505    if (directionChanged && initialized) {
37506      swiper.changeDirection();
37507    }
37508    extend4(swiper.params, breakpointParams);
37509    const isEnabled = swiper.params.enabled;
37510    const hasLoop = swiper.params.loop;
37511    Object.assign(swiper, {
37512      allowTouchMove: swiper.params.allowTouchMove,
37513      allowSlideNext: swiper.params.allowSlideNext,
37514      allowSlidePrev: swiper.params.allowSlidePrev
37515    });
37516    if (wasEnabled && !isEnabled) {
37517      swiper.disable();
37518    } else if (!wasEnabled && isEnabled) {
37519      swiper.enable();
37520    }
37521    swiper.currentBreakpoint = breakpoint;
37522    swiper.emit("_beforeBreakpoint", breakpointParams);
37523    if (initialized) {
37524      if (needsReLoop) {
37525        swiper.loopDestroy();
37526        swiper.loopCreate(realIndex);
37527        swiper.updateSlides();
37528      } else if (!wasLoop && hasLoop) {
37529        swiper.loopCreate(realIndex);
37530        swiper.updateSlides();
37531      } else if (wasLoop && !hasLoop) {
37532        swiper.loopDestroy();
37533      }
37534    }
37535    swiper.emit("breakpoint", breakpointParams);
37536  }
37537  function getBreakpoint(breakpoints2, base, containerEl) {
37538    if (base === void 0) {
37539      base = "window";
37540    }
37541    if (!breakpoints2 || base === "container" && !containerEl)
37542      return void 0;
37543    let breakpoint = false;
37544    const window2 = getWindow2();
37545    const currentHeight = base === "window" ? window2.innerHeight : containerEl.clientHeight;
37546    const points = Object.keys(breakpoints2).map((point) => {
37547      if (typeof point === "string" && point.indexOf("@") === 0) {
37548        const minRatio = parseFloat(point.substr(1));
37549        const value = currentHeight * minRatio;
37550        return {
37551          value,
37552          point
37553        };
37554      }
37555      return {
37556        value: point,
37557        point
37558      };
37559    });
37560    points.sort((a4, b4) => parseInt(a4.value, 10) - parseInt(b4.value, 10));
37561    for (let i4 = 0; i4 < points.length; i4 += 1) {
37562      const {
37563        point,
37564        value
37565      } = points[i4];
37566      if (base === "window") {
37567        if (window2.matchMedia(`(min-width: ${value}px)`).matches) {
37568          breakpoint = point;
37569        }
37570      } else if (value <= containerEl.clientWidth) {
37571        breakpoint = point;
37572      }
37573    }
37574    return breakpoint || "max";
37575  }
37576  var breakpoints = {
37577    setBreakpoint,
37578    getBreakpoint
37579  };
37580  function prepareClasses(entries, prefix) {
37581    const resultClasses = [];
37582    entries.forEach((item) => {
37583      if (typeof item === "object") {
37584        Object.keys(item).forEach((classNames) => {
37585          if (item[classNames]) {
37586            resultClasses.push(prefix + classNames);
37587          }
37588        });
37589      } else if (typeof item === "string") {
37590        resultClasses.push(prefix + item);
37591      }
37592    });
37593    return resultClasses;
37594  }
37595  function addClasses() {
37596    const swiper = this;
37597    const {
37598      classNames,
37599      params,
37600      rtl,
37601      el,
37602      device
37603    } = swiper;
37604    const suffixes = prepareClasses(["initialized", params.direction, {
37605      "free-mode": swiper.params.freeMode && params.freeMode.enabled
37606    }, {
37607      "autoheight": params.autoHeight
37608    }, {
37609      "rtl": rtl
37610    }, {
37611      "grid": params.grid && params.grid.rows > 1
37612    }, {
37613      "grid-column": params.grid && params.grid.rows > 1 && params.grid.fill === "column"
37614    }, {
37615      "android": device.android
37616    }, {
37617      "ios": device.ios
37618    }, {
37619      "css-mode": params.cssMode
37620    }, {
37621      "centered": params.cssMode && params.centeredSlides
37622    }, {
37623      "watch-progress": params.watchSlidesProgress
37624    }], params.containerModifierClass);
37625    classNames.push(...suffixes);
37626    el.classList.add(...classNames);
37627    swiper.emitContainerClasses();
37628  }
37629  function removeClasses() {
37630    const swiper = this;
37631    const {
37632      el,
37633      classNames
37634    } = swiper;
37635    el.classList.remove(...classNames);
37636    swiper.emitContainerClasses();
37637  }
37638  var classes = {
37639    addClasses,
37640    removeClasses
37641  };
37642  function checkOverflow() {
37643    const swiper = this;
37644    const {
37645      isLocked: wasLocked,
37646      params
37647    } = swiper;
37648    const {
37649      slidesOffsetBefore
37650    } = params;
37651    if (slidesOffsetBefore) {
37652      const lastSlideIndex = swiper.slides.length - 1;
37653      const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
37654      swiper.isLocked = swiper.size > lastSlideRightEdge;
37655    } else {
37656      swiper.isLocked = swiper.snapGrid.length === 1;
37657    }
37658    if (params.allowSlideNext === true) {
37659      swiper.allowSlideNext = !swiper.isLocked;
37660    }
37661    if (params.allowSlidePrev === true) {
37662      swiper.allowSlidePrev = !swiper.isLocked;
37663    }
37664    if (wasLocked && wasLocked !== swiper.isLocked) {
37665      swiper.isEnd = false;
37666    }
37667    if (wasLocked !== swiper.isLocked) {
37668      swiper.emit(swiper.isLocked ? "lock" : "unlock");
37669    }
37670  }
37671  var checkOverflow$1 = {
37672    checkOverflow
37673  };
37674  var defaults = {
37675    init: true,
37676    direction: "horizontal",
37677    oneWayMovement: false,
37678    touchEventsTarget: "wrapper",
37679    initialSlide: 0,
37680    speed: 300,
37681    cssMode: false,
37682    updateOnWindowResize: true,
37683    resizeObserver: true,
37684    nested: false,
37685    createElements: false,
37686    enabled: true,
37687    focusableElements: "input, select, option, textarea, button, video, label",
37688    width: null,
37689    height: null,
37690    preventInteractionOnTransition: false,
37691    userAgent: null,
37692    url: null,
37693    edgeSwipeDetection: false,
37694    edgeSwipeThreshold: 20,
37695    autoHeight: false,
37696    setWrapperSize: false,
37697    virtualTranslate: false,
37698    effect: "slide",
37699    breakpoints: void 0,
37700    breakpointsBase: "window",
37701    spaceBetween: 0,
37702    slidesPerView: 1,
37703    slidesPerGroup: 1,
37704    slidesPerGroupSkip: 0,
37705    slidesPerGroupAuto: false,
37706    centeredSlides: false,
37707    centeredSlidesBounds: false,
37708    slidesOffsetBefore: 0,
37709    slidesOffsetAfter: 0,
37710    normalizeSlideIndex: true,
37711    centerInsufficientSlides: false,
37712    watchOverflow: true,
37713    roundLengths: false,
37714    touchRatio: 1,
37715    touchAngle: 45,
37716    simulateTouch: true,
37717    shortSwipes: true,
37718    longSwipes: true,
37719    longSwipesRatio: 0.5,
37720    longSwipesMs: 300,
37721    followFinger: true,
37722    allowTouchMove: true,
37723    threshold: 5,
37724    touchMoveStopPropagation: false,
37725    touchStartPreventDefault: true,
37726    touchStartForcePreventDefault: false,
37727    touchReleaseOnEdges: false,
37728    uniqueNavElements: true,
37729    resistance: true,
37730    resistanceRatio: 0.85,
37731    watchSlidesProgress: false,
37732    grabCursor: false,
37733    preventClicks: true,
37734    preventClicksPropagation: true,
37735    slideToClickedSlide: false,
37736    loop: false,
37737    loopedSlides: null,
37738    loopPreventsSliding: true,
37739    rewind: false,
37740    allowSlidePrev: true,
37741    allowSlideNext: true,
37742    swipeHandler: null,
37743    noSwiping: true,
37744    noSwipingClass: "swiper-no-swiping",
37745    noSwipingSelector: null,
37746    passiveListeners: true,
37747    maxBackfaceHiddenSlides: 10,
37748    containerModifierClass: "swiper-",
37749    slideClass: "swiper-slide",
37750    slideActiveClass: "swiper-slide-active",
37751    slideVisibleClass: "swiper-slide-visible",
37752    slideNextClass: "swiper-slide-next",
37753    slidePrevClass: "swiper-slide-prev",
37754    wrapperClass: "swiper-wrapper",
37755    lazyPreloaderClass: "swiper-lazy-preloader",
37756    lazyPreloadPrevNext: 0,
37757    runCallbacksOnInit: true,
37758    _emitClasses: false
37759  };
37760  function moduleExtendParams(params, allModulesParams) {
37761    return function extendParams(obj) {
37762      if (obj === void 0) {
37763        obj = {};
37764      }
37765      const moduleParamName = Object.keys(obj)[0];
37766      const moduleParams = obj[moduleParamName];
37767      if (typeof moduleParams !== "object" || moduleParams === null) {
37768        extend4(allModulesParams, obj);
37769        return;
37770      }
37771      if (params[moduleParamName] === true) {
37772        params[moduleParamName] = {
37773          enabled: true
37774        };
37775      }
37776      if (moduleParamName === "navigation" && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
37777        params[moduleParamName].auto = true;
37778      }
37779      if (["pagination", "scrollbar"].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
37780        params[moduleParamName].auto = true;
37781      }
37782      if (!(moduleParamName in params && "enabled" in moduleParams)) {
37783        extend4(allModulesParams, obj);
37784        return;
37785      }
37786      if (typeof params[moduleParamName] === "object" && !("enabled" in params[moduleParamName])) {
37787        params[moduleParamName].enabled = true;
37788      }
37789      if (!params[moduleParamName])
37790        params[moduleParamName] = {
37791          enabled: false
37792        };
37793      extend4(allModulesParams, obj);
37794    };
37795  }
37796  var prototypes = {
37797    eventsEmitter,
37798    update,
37799    translate,
37800    transition,
37801    slide,
37802    loop,
37803    grabCursor,
37804    events: events$1,
37805    breakpoints,
37806    checkOverflow: checkOverflow$1,
37807    classes
37808  };
37809  var extendedDefaults = {};
37810  var Swiper = class {
37811    constructor() {
37812      let el;
37813      let params;
37814      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
37815        args[_key] = arguments[_key];
37816      }
37817      if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === "Object") {
37818        params = args[0];
37819      } else {
37820        [el, params] = args;
37821      }
37822      if (!params)
37823        params = {};
37824      params = extend4({}, params);
37825      if (el && !params.el)
37826        params.el = el;
37827      const document2 = getDocument();
37828      if (params.el && typeof params.el === "string" && document2.querySelectorAll(params.el).length > 1) {
37829        const swipers = [];
37830        document2.querySelectorAll(params.el).forEach((containerEl) => {
37831          const newParams = extend4({}, params, {
37832            el: containerEl
37833          });
37834          swipers.push(new Swiper(newParams));
37835        });
37836        return swipers;
37837      }
37838      const swiper = this;
37839      swiper.__swiper__ = true;
37840      swiper.support = getSupport();
37841      swiper.device = getDevice({
37842        userAgent: params.userAgent
37843      });
37844      swiper.browser = getBrowser();
37845      swiper.eventsListeners = {};
37846      swiper.eventsAnyListeners = [];
37847      swiper.modules = [...swiper.__modules__];
37848      if (params.modules && Array.isArray(params.modules)) {
37849        swiper.modules.push(...params.modules);
37850      }
37851      const allModulesParams = {};
37852      swiper.modules.forEach((mod) => {
37853        mod({
37854          params,
37855          swiper,
37856          extendParams: moduleExtendParams(params, allModulesParams),
37857          on: swiper.on.bind(swiper),
37858          once: swiper.once.bind(swiper),
37859          off: swiper.off.bind(swiper),
37860          emit: swiper.emit.bind(swiper)
37861        });
37862      });
37863      const swiperParams = extend4({}, defaults, allModulesParams);
37864      swiper.params = extend4({}, swiperParams, extendedDefaults, params);
37865      swiper.originalParams = extend4({}, swiper.params);
37866      swiper.passedParams = extend4({}, params);
37867      if (swiper.params && swiper.params.on) {
37868        Object.keys(swiper.params.on).forEach((eventName) => {
37869          swiper.on(eventName, swiper.params.on[eventName]);
37870        });
37871      }
37872      if (swiper.params && swiper.params.onAny) {
37873        swiper.onAny(swiper.params.onAny);
37874      }
37875      Object.assign(swiper, {
37876        enabled: swiper.params.enabled,
37877        el,
37878        classNames: [],
37879        slides: [],
37880        slidesGrid: [],
37881        snapGrid: [],
37882        slidesSizesGrid: [],
37883        isHorizontal() {
37884          return swiper.params.direction === "horizontal";
37885        },
37886        isVertical() {
37887          return swiper.params.direction === "vertical";
37888        },
37889        activeIndex: 0,
37890        realIndex: 0,
37891        isBeginning: true,
37892        isEnd: false,
37893        translate: 0,
37894        previousTranslate: 0,
37895        progress: 0,
37896        velocity: 0,
37897        animating: false,
37898        cssOverflowAdjustment() {
37899          return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
37900        },
37901        allowSlideNext: swiper.params.allowSlideNext,
37902        allowSlidePrev: swiper.params.allowSlidePrev,
37903        touchEventsData: {
37904          isTouched: void 0,
37905          isMoved: void 0,
37906          allowTouchCallbacks: void 0,
37907          touchStartTime: void 0,
37908          isScrolling: void 0,
37909          currentTranslate: void 0,
37910          startTranslate: void 0,
37911          allowThresholdMove: void 0,
37912          focusableElements: swiper.params.focusableElements,
37913          lastClickTime: 0,
37914          clickTimeout: void 0,
37915          velocities: [],
37916          allowMomentumBounce: void 0,
37917          startMoving: void 0,
37918          evCache: []
37919        },
37920        allowClick: true,
37921        allowTouchMove: swiper.params.allowTouchMove,
37922        touches: {
37923          startX: 0,
37924          startY: 0,
37925          currentX: 0,
37926          currentY: 0,
37927          diff: 0
37928        },
37929        imagesToLoad: [],
37930        imagesLoaded: 0
37931      });
37932      swiper.emit("_swiper");
37933      if (swiper.params.init) {
37934        swiper.init();
37935      }
37936      return swiper;
37937    }
37938    getSlideIndex(slideEl) {
37939      const {
37940        slidesEl,
37941        params
37942      } = this;
37943      const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
37944      const firstSlideIndex = elementIndex(slides[0]);
37945      return elementIndex(slideEl) - firstSlideIndex;
37946    }
37947    getSlideIndexByData(index4) {
37948      return this.getSlideIndex(this.slides.filter((slideEl) => slideEl.getAttribute("data-swiper-slide-index") * 1 === index4)[0]);
37949    }
37950    recalcSlides() {
37951      const swiper = this;
37952      const {
37953        slidesEl,
37954        params
37955      } = swiper;
37956      swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
37957    }
37958    enable() {
37959      const swiper = this;
37960      if (swiper.enabled)
37961        return;
37962      swiper.enabled = true;
37963      if (swiper.params.grabCursor) {
37964        swiper.setGrabCursor();
37965      }
37966      swiper.emit("enable");
37967    }
37968    disable() {
37969      const swiper = this;
37970      if (!swiper.enabled)
37971        return;
37972      swiper.enabled = false;
37973      if (swiper.params.grabCursor) {
37974        swiper.unsetGrabCursor();
37975      }
37976      swiper.emit("disable");
37977    }
37978    setProgress(progress, speed) {
37979      const swiper = this;
37980      progress = Math.min(Math.max(progress, 0), 1);
37981      const min2 = swiper.minTranslate();
37982      const max2 = swiper.maxTranslate();
37983      const current = (max2 - min2) * progress + min2;
37984      swiper.translateTo(current, typeof speed === "undefined" ? 0 : speed);
37985      swiper.updateActiveIndex();
37986      swiper.updateSlidesClasses();
37987    }
37988    emitContainerClasses() {
37989      const swiper = this;
37990      if (!swiper.params._emitClasses || !swiper.el)
37991        return;
37992      const cls = swiper.el.className.split(" ").filter((className) => {
37993        return className.indexOf("swiper") === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
37994      });
37995      swiper.emit("_containerClasses", cls.join(" "));
37996    }
37997    getSlideClasses(slideEl) {
37998      const swiper = this;
37999      if (swiper.destroyed)
38000        return "";
38001      return slideEl.className.split(" ").filter((className) => {
38002        return className.indexOf("swiper-slide") === 0 || className.indexOf(swiper.params.slideClass) === 0;
38003      }).join(" ");
38004    }
38005    emitSlidesClasses() {
38006      const swiper = this;
38007      if (!swiper.params._emitClasses || !swiper.el)
38008        return;
38009      const updates = [];
38010      swiper.slides.forEach((slideEl) => {
38011        const classNames = swiper.getSlideClasses(slideEl);
38012        updates.push({
38013          slideEl,
38014          classNames
38015        });
38016        swiper.emit("_slideClass", slideEl, classNames);
38017      });
38018      swiper.emit("_slideClasses", updates);
38019    }
38020    slidesPerViewDynamic(view, exact) {
38021      if (view === void 0) {
38022        view = "current";
38023      }
38024      if (exact === void 0) {
38025        exact = false;
38026      }
38027      const swiper = this;
38028      const {
38029        params,
38030        slides,
38031        slidesGrid,
38032        slidesSizesGrid,
38033        size: swiperSize,
38034        activeIndex
38035      } = swiper;
38036      let spv = 1;
38037      if (typeof params.slidesPerView === "number")
38038        return params.slidesPerView;
38039      if (params.centeredSlides) {
38040        let slideSize = slides[activeIndex] ? slides[activeIndex].swiperSlideSize : 0;
38041        let breakLoop;
38042        for (let i4 = activeIndex + 1; i4 < slides.length; i4 += 1) {
38043          if (slides[i4] && !breakLoop) {
38044            slideSize += slides[i4].swiperSlideSize;
38045            spv += 1;
38046            if (slideSize > swiperSize)
38047              breakLoop = true;
38048          }
38049        }
38050        for (let i4 = activeIndex - 1; i4 >= 0; i4 -= 1) {
38051          if (slides[i4] && !breakLoop) {
38052            slideSize += slides[i4].swiperSlideSize;
38053            spv += 1;
38054            if (slideSize > swiperSize)
38055              breakLoop = true;
38056          }
38057        }
38058      } else {
38059        if (view === "current") {
38060          for (let i4 = activeIndex + 1; i4 < slides.length; i4 += 1) {
38061            const slideInView = exact ? slidesGrid[i4] + slidesSizesGrid[i4] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i4] - slidesGrid[activeIndex] < swiperSize;
38062            if (slideInView) {
38063              spv += 1;
38064            }
38065          }
38066        } else {
38067          for (let i4 = activeIndex - 1; i4 >= 0; i4 -= 1) {
38068            const slideInView = slidesGrid[activeIndex] - slidesGrid[i4] < swiperSize;
38069            if (slideInView) {
38070              spv += 1;
38071            }
38072          }
38073        }
38074      }
38075      return spv;
38076    }
38077    update() {
38078      const swiper = this;
38079      if (!swiper || swiper.destroyed)
38080        return;
38081      const {
38082        snapGrid,
38083        params
38084      } = swiper;
38085      if (params.breakpoints) {
38086        swiper.setBreakpoint();
38087      }
38088      [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach((imageEl) => {
38089        if (imageEl.complete) {
38090          processLazyPreloader(swiper, imageEl);
38091        }
38092      });
38093      swiper.updateSize();
38094      swiper.updateSlides();
38095      swiper.updateProgress();
38096      swiper.updateSlidesClasses();
38097      function setTranslate2() {
38098        const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
38099        const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
38100        swiper.setTranslate(newTranslate);
38101        swiper.updateActiveIndex();
38102        swiper.updateSlidesClasses();
38103      }
38104      let translated;
38105      if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
38106        setTranslate2();
38107        if (params.autoHeight) {
38108          swiper.updateAutoHeight();
38109        }
38110      } else {
38111        if ((params.slidesPerView === "auto" || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
38112          const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
38113          translated = swiper.slideTo(slides.length - 1, 0, false, true);
38114        } else {
38115          translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
38116        }
38117        if (!translated) {
38118          setTranslate2();
38119        }
38120      }
38121      if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
38122        swiper.checkOverflow();
38123      }
38124      swiper.emit("update");
38125    }
38126    changeDirection(newDirection, needUpdate) {
38127      if (needUpdate === void 0) {
38128        needUpdate = true;
38129      }
38130      const swiper = this;
38131      const currentDirection = swiper.params.direction;
38132      if (!newDirection) {
38133        newDirection = currentDirection === "horizontal" ? "vertical" : "horizontal";
38134      }
38135      if (newDirection === currentDirection || newDirection !== "horizontal" && newDirection !== "vertical") {
38136        return swiper;
38137      }
38138      swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
38139      swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
38140      swiper.emitContainerClasses();
38141      swiper.params.direction = newDirection;
38142      swiper.slides.forEach((slideEl) => {
38143        if (newDirection === "vertical") {
38144          slideEl.style.width = "";
38145        } else {
38146          slideEl.style.height = "";
38147        }
38148      });
38149      swiper.emit("changeDirection");
38150      if (needUpdate)
38151        swiper.update();
38152      return swiper;
38153    }
38154    changeLanguageDirection(direction) {
38155      const swiper = this;
38156      if (swiper.rtl && direction === "rtl" || !swiper.rtl && direction === "ltr")
38157        return;
38158      swiper.rtl = direction === "rtl";
38159      swiper.rtlTranslate = swiper.params.direction === "horizontal" && swiper.rtl;
38160      if (swiper.rtl) {
38161        swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
38162        swiper.el.dir = "rtl";
38163      } else {
38164        swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
38165        swiper.el.dir = "ltr";
38166      }
38167      swiper.update();
38168    }
38169    mount(element) {
38170      const swiper = this;
38171      if (swiper.mounted)
38172        return true;
38173      let el = element || swiper.params.el;
38174      if (typeof el === "string") {
38175        el = document.querySelector(el);
38176      }
38177      if (!el) {
38178        return false;
38179      }
38180      el.swiper = swiper;
38181      if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === "SWIPER-CONTAINER") {
38182        swiper.isElement = true;
38183      }
38184      const getWrapperSelector = () => {
38185        return `.${(swiper.params.wrapperClass || "").trim().split(" ").join(".")}`;
38186      };
38187      const getWrapper = () => {
38188        if (el && el.shadowRoot && el.shadowRoot.querySelector) {
38189          const res = el.shadowRoot.querySelector(getWrapperSelector());
38190          return res;
38191        }
38192        return elementChildren(el, getWrapperSelector())[0];
38193      };
38194      let wrapperEl = getWrapper();
38195      if (!wrapperEl && swiper.params.createElements) {
38196        wrapperEl = createElement("div", swiper.params.wrapperClass);
38197        el.append(wrapperEl);
38198        elementChildren(el, `.${swiper.params.slideClass}`).forEach((slideEl) => {
38199          wrapperEl.append(slideEl);
38200        });
38201      }
38202      Object.assign(swiper, {
38203        el,
38204        wrapperEl,
38205        slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
38206        hostEl: swiper.isElement ? el.parentNode.host : el,
38207        mounted: true,
38208        rtl: el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl",
38209        rtlTranslate: swiper.params.direction === "horizontal" && (el.dir.toLowerCase() === "rtl" || elementStyle(el, "direction") === "rtl"),
38210        wrongRTL: elementStyle(wrapperEl, "display") === "-webkit-box"
38211      });
38212      return true;
38213    }
38214    init(el) {
38215      const swiper = this;
38216      if (swiper.initialized)
38217        return swiper;
38218      const mounted = swiper.mount(el);
38219      if (mounted === false)
38220        return swiper;
38221      swiper.emit("beforeInit");
38222      if (swiper.params.breakpoints) {
38223        swiper.setBreakpoint();
38224      }
38225      swiper.addClasses();
38226      swiper.updateSize();
38227      swiper.updateSlides();
38228      if (swiper.params.watchOverflow) {
38229        swiper.checkOverflow();
38230      }
38231      if (swiper.params.grabCursor && swiper.enabled) {
38232        swiper.setGrabCursor();
38233      }
38234      if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
38235        swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
38236      } else {
38237        swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
38238      }
38239      if (swiper.params.loop) {
38240        swiper.loopCreate();
38241      }
38242      swiper.attachEvents();
38243      const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
38244      if (swiper.isElement) {
38245        lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
38246      }
38247      lazyElements.forEach((imageEl) => {
38248        if (imageEl.complete) {
38249          processLazyPreloader(swiper, imageEl);
38250        } else {
38251          imageEl.addEventListener("load", (e4) => {
38252            processLazyPreloader(swiper, e4.target);
38253          });
38254        }
38255      });
38256      preload(swiper);
38257      swiper.initialized = true;
38258      preload(swiper);
38259      swiper.emit("init");
38260      swiper.emit("afterInit");
38261      return swiper;
38262    }
38263    destroy(deleteInstance, cleanStyles) {
38264      if (deleteInstance === void 0) {
38265        deleteInstance = true;
38266      }
38267      if (cleanStyles === void 0) {
38268        cleanStyles = true;
38269      }
38270      const swiper = this;
38271      const {
38272        params,
38273        el,
38274        wrapperEl,
38275        slides
38276      } = swiper;
38277      if (typeof swiper.params === "undefined" || swiper.destroyed) {
38278        return null;
38279      }
38280      swiper.emit("beforeDestroy");
38281      swiper.initialized = false;
38282      swiper.detachEvents();
38283      if (params.loop) {
38284        swiper.loopDestroy();
38285      }
38286      if (cleanStyles) {
38287        swiper.removeClasses();
38288        el.removeAttribute("style");
38289        wrapperEl.removeAttribute("style");
38290        if (slides && slides.length) {
38291          slides.forEach((slideEl) => {
38292            slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
38293            slideEl.removeAttribute("style");
38294            slideEl.removeAttribute("data-swiper-slide-index");
38295          });
38296        }
38297      }
38298      swiper.emit("destroy");
38299      Object.keys(swiper.eventsListeners).forEach((eventName) => {
38300        swiper.off(eventName);
38301      });
38302      if (deleteInstance !== false) {
38303        swiper.el.swiper = null;
38304        deleteProps(swiper);
38305      }
38306      swiper.destroyed = true;
38307      return null;
38308    }
38309    static extendDefaults(newDefaults) {
38310      extend4(extendedDefaults, newDefaults);
38311    }
38312    static get extendedDefaults() {
38313      return extendedDefaults;
38314    }
38315    static get defaults() {
38316      return defaults;
38317    }
38318    static installModule(mod) {
38319      if (!Swiper.prototype.__modules__)
38320        Swiper.prototype.__modules__ = [];
38321      const modules = Swiper.prototype.__modules__;
38322      if (typeof mod === "function" && modules.indexOf(mod) < 0) {
38323        modules.push(mod);
38324      }
38325    }
38326    static use(module) {
38327      if (Array.isArray(module)) {
38328        module.forEach((m5) => Swiper.installModule(m5));
38329        return Swiper;
38330      }
38331      Swiper.installModule(module);
38332      return Swiper;
38333    }
38334  };
38335  Object.keys(prototypes).forEach((prototypeGroup) => {
38336    Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {
38337      Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
38338    });
38339  });
38340  Swiper.use([Resize, Observer]);
38341
38342  
vendor: 679 bytes, lines 38342-38361
38342// node_modules/swiper/shared/create-element-if-not-defined.mjs
38343  function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
38344    if (swiper.params.createElements) {
38345      Object.keys(checkProps).forEach((key) => {
38346        if (!params[key] && params.auto === true) {
38347          let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];
38348          if (!element) {
38349            element = createElement("div", checkProps[key]);
38350            element.className = checkProps[key];
38351            swiper.el.append(element);
38352          }
38353          params[key] = element;
38354          originalParams[key] = element;
38355        }
38356      });
38357    }
38358    return params;
38359  }
38360
38361  
vendor: 6,244 bytes, lines 38361-38555
38361// node_modules/swiper/modules/navigation.mjs
38362  function Navigation(_ref) {
38363    let {
38364      swiper,
38365      extendParams,
38366      on: on2,
38367      emit
38368    } = _ref;
38369    extendParams({
38370      navigation: {
38371        nextEl: null,
38372        prevEl: null,
38373        hideOnClick: false,
38374        disabledClass: "swiper-button-disabled",
38375        hiddenClass: "swiper-button-hidden",
38376        lockClass: "swiper-button-lock",
38377        navigationDisabledClass: "swiper-navigation-disabled"
38378      }
38379    });
38380    swiper.navigation = {
38381      nextEl: null,
38382      prevEl: null
38383    };
38384    const makeElementsArray = (el) => (Array.isArray(el) ? el : [el]).filter((e4) => !!e4);
38385    function getEl(el) {
38386      let res;
38387      if (el && typeof el === "string" && swiper.isElement) {
38388        res = swiper.el.querySelector(el);
38389        if (res)
38390          return res;
38391      }
38392      if (el) {
38393        if (typeof el === "string")
38394          res = [...document.querySelectorAll(el)];
38395        if (swiper.params.uniqueNavElements && typeof el === "string" && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {
38396          res = swiper.el.querySelector(el);
38397        }
38398      }
38399      if (el && !res)
38400        return el;
38401      return res;
38402    }
38403    function toggleEl(el, disabled) {
38404      const params = swiper.params.navigation;
38405      el = makeElementsArray(el);
38406      el.forEach((subEl) => {
38407        if (subEl) {
38408          subEl.classList[disabled ? "add" : "remove"](...params.disabledClass.split(" "));
38409          if (subEl.tagName === "BUTTON")
38410            subEl.disabled = disabled;
38411          if (swiper.params.watchOverflow && swiper.enabled) {
38412            subEl.classList[swiper.isLocked ? "add" : "remove"](params.lockClass);
38413          }
38414        }
38415      });
38416    }
38417    function update2() {
38418      const {
38419        nextEl,
38420        prevEl
38421      } = swiper.navigation;
38422      if (swiper.params.loop) {
38423        toggleEl(prevEl, false);
38424        toggleEl(nextEl, false);
38425        return;
38426      }
38427      toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);
38428      toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);
38429    }
38430    function onPrevClick(e4) {
38431      e4.preventDefault();
38432      if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind)
38433        return;
38434      swiper.slidePrev();
38435      emit("navigationPrev");
38436    }
38437    function onNextClick(e4) {
38438      e4.preventDefault();
38439      if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind)
38440        return;
38441      swiper.slideNext();
38442      emit("navigationNext");
38443    }
38444    function init() {
38445      const params = swiper.params.navigation;
38446      swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {
38447        nextEl: "swiper-button-next",
38448        prevEl: "swiper-button-prev"
38449      });
38450      if (!(params.nextEl || params.prevEl))
38451        return;
38452      let nextEl = getEl(params.nextEl);
38453      let prevEl = getEl(params.prevEl);
38454      Object.assign(swiper.navigation, {
38455        nextEl,
38456        prevEl
38457      });
38458      nextEl = makeElementsArray(nextEl);
38459      prevEl = makeElementsArray(prevEl);
38460      const initButton = (el, dir) => {
38461        if (el) {
38462          el.addEventListener("click", dir === "next" ? onNextClick : onPrevClick);
38463        }
38464        if (!swiper.enabled && el) {
38465          el.classList.add(...params.lockClass.split(" "));
38466        }
38467      };
38468      nextEl.forEach((el) => initButton(el, "next"));
38469      prevEl.forEach((el) => initButton(el, "prev"));
38470    }
38471    function destroy2() {
38472      let {
38473        nextEl,
38474        prevEl
38475      } = swiper.navigation;
38476      nextEl = makeElementsArray(nextEl);
38477      prevEl = makeElementsArray(prevEl);
38478      const destroyButton = (el, dir) => {
38479        el.removeEventListener("click", dir === "next" ? onNextClick : onPrevClick);
38480        el.classList.remove(...swiper.params.navigation.disabledClass.split(" "));
38481      };
38482      nextEl.forEach((el) => destroyButton(el, "next"));
38483      prevEl.forEach((el) => destroyButton(el, "prev"));
38484    }
38485    on2("init", () => {
38486      if (swiper.params.navigation.enabled === false) {
38487        disable2();
38488      } else {
38489        init();
38490        update2();
38491      }
38492    });
38493    on2("toEdge fromEdge lock unlock", () => {
38494      update2();
38495    });
38496    on2("destroy", () => {
38497      destroy2();
38498    });
38499    on2("enable disable", () => {
38500      let {
38501        nextEl,
38502        prevEl
38503      } = swiper.navigation;
38504      nextEl = makeElementsArray(nextEl);
38505      prevEl = makeElementsArray(prevEl);
38506      if (swiper.enabled) {
38507        update2();
38508        return;
38509      }
38510      [...nextEl, ...prevEl].filter((el) => !!el).forEach((el) => el.classList.add(swiper.params.navigation.lockClass));
38511    });
38512    on2("click", (_s, e4) => {
38513      let {
38514        nextEl,
38515        prevEl
38516      } = swiper.navigation;
38517      nextEl = makeElementsArray(nextEl);
38518      prevEl = makeElementsArray(prevEl);
38519      const targetEl = e4.target;
38520      if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {
38521        if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl)))
38522          return;
38523        let isHidden;
38524        if (nextEl.length) {
38525          isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);
38526        } else if (prevEl.length) {
38527          isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);
38528        }
38529        if (isHidden === true) {
38530          emit("navigationShow");
38531        } else {
38532          emit("navigationHide");
38533        }
38534        [...nextEl, ...prevEl].filter((el) => !!el).forEach((el) => el.classList.toggle(swiper.params.navigation.hiddenClass));
38535      }
38536    });
38537    const enable2 = () => {
38538      swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(" "));
38539      init();
38540      update2();
38541    };
38542    const disable2 = () => {
38543      swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(" "));
38544      destroy2();
38545    };
38546    Object.assign(swiper.navigation, {
38547      enable: enable2,
38548      disable: disable2,
38549      update: update2,
38550      init,
38551      destroy: destroy2
38552    });
38553  }
38554
38555  
vendor: 245 bytes, lines 38555-38563
38555// node_modules/swiper/shared/classes-to-selector.mjs
38556  function classesToSelector(classes2) {
38557    if (classes2 === void 0) {
38558      classes2 = "";
38559    }
38560    return `.${classes2.trim().replace(/([\.:!+\/])/g, "\\$1").replace(/ /g, ".")}`;
38561  }
38562
38563  
vendor: 18,523 bytes, lines 38563-39032
38563// node_modules/swiper/modules/pagination.mjs
38564  function Pagination(_ref) {
38565    let {
38566      swiper,
38567      extendParams,
38568      on: on2,
38569      emit
38570    } = _ref;
38571    const pfx = "swiper-pagination";
38572    extendParams({
38573      pagination: {
38574        el: null,
38575        bulletElement: "span",
38576        clickable: false,
38577        hideOnClick: false,
38578        renderBullet: null,
38579        renderProgressbar: null,
38580        renderFraction: null,
38581        renderCustom: null,
38582        progressbarOpposite: false,
38583        type: "bullets",
38584        dynamicBullets: false,
38585        dynamicMainBullets: 1,
38586        formatFractionCurrent: (number) => number,
38587        formatFractionTotal: (number) => number,
38588        bulletClass: `${pfx}-bullet`,
38589        bulletActiveClass: `${pfx}-bullet-active`,
38590        modifierClass: `${pfx}-`,
38591        currentClass: `${pfx}-current`,
38592        totalClass: `${pfx}-total`,
38593        hiddenClass: `${pfx}-hidden`,
38594        progressbarFillClass: `${pfx}-progressbar-fill`,
38595        progressbarOppositeClass: `${pfx}-progressbar-opposite`,
38596        clickableClass: `${pfx}-clickable`,
38597        lockClass: `${pfx}-lock`,
38598        horizontalClass: `${pfx}-horizontal`,
38599        verticalClass: `${pfx}-vertical`,
38600        paginationDisabledClass: `${pfx}-disabled`
38601      }
38602    });
38603    swiper.pagination = {
38604      el: null,
38605      bullets: []
38606    };
38607    let bulletSize;
38608    let dynamicBulletIndex = 0;
38609    const makeElementsArray = (el) => (Array.isArray(el) ? el : [el]).filter((e4) => !!e4);
38610    function isPaginationDisabled() {
38611      return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;
38612    }
38613    function setSideBullets(bulletEl, position) {
38614      const {
38615        bulletActiveClass
38616      } = swiper.params.pagination;
38617      if (!bulletEl)
38618        return;
38619      bulletEl = bulletEl[`${position === "prev" ? "previous" : "next"}ElementSibling`];
38620      if (bulletEl) {
38621        bulletEl.classList.add(`${bulletActiveClass}-${position}`);
38622        bulletEl = bulletEl[`${position === "prev" ? "previous" : "next"}ElementSibling`];
38623        if (bulletEl) {
38624          bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);
38625        }
38626      }
38627    }
38628    function onBulletClick(e4) {
38629      const bulletEl = e4.target.closest(classesToSelector(swiper.params.pagination.bulletClass));
38630      if (!bulletEl) {
38631        return;
38632      }
38633      e4.preventDefault();
38634      const index4 = elementIndex(bulletEl) * swiper.params.slidesPerGroup;
38635      if (swiper.params.loop) {
38636        if (swiper.realIndex === index4)
38637          return;
38638        const realIndex = swiper.realIndex;
38639        const newSlideIndex = swiper.getSlideIndexByData(index4);
38640        const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);
38641        const loopFix2 = (dir) => {
38642          const indexBeforeLoopFix = swiper.activeIndex;
38643          swiper.loopFix({
38644            direction: dir,
38645            activeSlideIndex: newSlideIndex,
38646            slideTo: false
38647          });
38648          const indexAfterFix = swiper.activeIndex;
38649          if (indexBeforeLoopFix === indexAfterFix) {
38650            swiper.slideToLoop(realIndex, 0, false, true);
38651          }
38652        };
38653        if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {
38654          loopFix2(newSlideIndex > currentSlideIndex ? "next" : "prev");
38655        } else if (swiper.params.centeredSlides) {
38656          const slidesPerView = swiper.params.slidesPerView === "auto" ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
38657          if (newSlideIndex < Math.floor(slidesPerView / 2)) {
38658            loopFix2("prev");
38659          }
38660        }
38661        swiper.slideToLoop(index4);
38662      } else {
38663        swiper.slideTo(index4);
38664      }
38665    }
38666    function update2() {
38667      const rtl = swiper.rtl;
38668      const params = swiper.params.pagination;
38669      if (isPaginationDisabled())
38670        return;
38671      let el = swiper.pagination.el;
38672      el = makeElementsArray(el);
38673      let current;
38674      let previousIndex;
38675      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
38676      const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
38677      if (swiper.params.loop) {
38678        previousIndex = swiper.previousRealIndex || 0;
38679        current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;
38680      } else if (typeof swiper.snapIndex !== "undefined") {
38681        current = swiper.snapIndex;
38682        previousIndex = swiper.previousSnapIndex;
38683      } else {
38684        previousIndex = swiper.previousIndex || 0;
38685        current = swiper.activeIndex || 0;
38686      }
38687      if (params.type === "bullets" && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
38688        const bullets = swiper.pagination.bullets;
38689        let firstIndex;
38690        let lastIndex;
38691        let midIndex;
38692        if (params.dynamicBullets) {
38693          bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? "width" : "height", true);
38694          el.forEach((subEl) => {
38695            subEl.style[swiper.isHorizontal() ? "width" : "height"] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;
38696          });
38697          if (params.dynamicMainBullets > 1 && previousIndex !== void 0) {
38698            dynamicBulletIndex += current - (previousIndex || 0);
38699            if (dynamicBulletIndex > params.dynamicMainBullets - 1) {
38700              dynamicBulletIndex = params.dynamicMainBullets - 1;
38701            } else if (dynamicBulletIndex < 0) {
38702              dynamicBulletIndex = 0;
38703            }
38704          }
38705          firstIndex = Math.max(current - dynamicBulletIndex, 0);
38706          lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
38707          midIndex = (lastIndex + firstIndex) / 2;
38708        }
38709        bullets.forEach((bulletEl) => {
38710          const classesToRemove = [...["", "-next", "-next-next", "-prev", "-prev-prev", "-main"].map((suffix) => `${params.bulletActiveClass}${suffix}`)].map((s4) => typeof s4 === "string" && s4.includes(" ") ? s4.split(" ") : s4).flat();
38711          bulletEl.classList.remove(...classesToRemove);
38712        });
38713        if (el.length > 1) {
38714          bullets.forEach((bullet) => {
38715            const bulletIndex = elementIndex(bullet);
38716            if (bulletIndex === current) {
38717              bullet.classList.add(...params.bulletActiveClass.split(" "));
38718            } else if (swiper.isElement) {
38719              bullet.setAttribute("part", "bullet");
38720            }
38721            if (params.dynamicBullets) {
38722              if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
38723                bullet.classList.add(...`${params.bulletActiveClass}-main`.split(" "));
38724              }
38725              if (bulletIndex === firstIndex) {
38726                setSideBullets(bullet, "prev");
38727              }
38728              if (bulletIndex === lastIndex) {
38729                setSideBullets(bullet, "next");
38730              }
38731            }
38732          });
38733        } else {
38734          const bullet = bullets[current];
38735          if (bullet) {
38736            bullet.classList.add(...params.bulletActiveClass.split(" "));
38737          }
38738          if (swiper.isElement) {
38739            bullets.forEach((bulletEl, bulletIndex) => {
38740              bulletEl.setAttribute("part", bulletIndex === current ? "bullet-active" : "bullet");
38741            });
38742          }
38743          if (params.dynamicBullets) {
38744            const firstDisplayedBullet = bullets[firstIndex];
38745            const lastDisplayedBullet = bullets[lastIndex];
38746            for (let i4 = firstIndex; i4 <= lastIndex; i4 += 1) {
38747              if (bullets[i4]) {
38748                bullets[i4].classList.add(...`${params.bulletActiveClass}-main`.split(" "));
38749              }
38750            }
38751            setSideBullets(firstDisplayedBullet, "prev");
38752            setSideBullets(lastDisplayedBullet, "next");
38753          }
38754        }
38755        if (params.dynamicBullets) {
38756          const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
38757          const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;
38758          const offsetProp = rtl ? "right" : "left";
38759          bullets.forEach((bullet) => {
38760            bullet.style[swiper.isHorizontal() ? offsetProp : "top"] = `${bulletsOffset}px`;
38761          });
38762        }
38763      }
38764      el.forEach((subEl, subElIndex) => {
38765        if (params.type === "fraction") {
38766          subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach((fractionEl) => {
38767            fractionEl.textContent = params.formatFractionCurrent(current + 1);
38768          });
38769          subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach((totalEl) => {
38770            totalEl.textContent = params.formatFractionTotal(total);
38771          });
38772        }
38773        if (params.type === "progressbar") {
38774          let progressbarDirection;
38775          if (params.progressbarOpposite) {
38776            progressbarDirection = swiper.isHorizontal() ? "vertical" : "horizontal";
38777          } else {
38778            progressbarDirection = swiper.isHorizontal() ? "horizontal" : "vertical";
38779          }
38780          const scale = (current + 1) / total;
38781          let scaleX = 1;
38782          let scaleY = 1;
38783          if (progressbarDirection === "horizontal") {
38784            scaleX = scale;
38785          } else {
38786            scaleY = scale;
38787          }
38788          subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach((progressEl) => {
38789            progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;
38790            progressEl.style.transitionDuration = `${swiper.params.speed}ms`;
38791          });
38792        }
38793        if (params.type === "custom" && params.renderCustom) {
38794          subEl.innerHTML = params.renderCustom(swiper, current + 1, total);
38795          if (subElIndex === 0)
38796            emit("paginationRender", subEl);
38797        } else {
38798          if (subElIndex === 0)
38799            emit("paginationRender", subEl);
38800          emit("paginationUpdate", subEl);
38801        }
38802        if (swiper.params.watchOverflow && swiper.enabled) {
38803          subEl.classList[swiper.isLocked ? "add" : "remove"](params.lockClass);
38804        }
38805      });
38806    }
38807    function render() {
38808      const params = swiper.params.pagination;
38809      if (isPaginationDisabled())
38810        return;
38811      const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
38812      let el = swiper.pagination.el;
38813      el = makeElementsArray(el);
38814      let paginationHTML = "";
38815      if (params.type === "bullets") {
38816        let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
38817        if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {
38818          numberOfBullets = slidesLength;
38819        }
38820        for (let i4 = 0; i4 < numberOfBullets; i4 += 1) {
38821          if (params.renderBullet) {
38822            paginationHTML += params.renderBullet.call(swiper, i4, params.bulletClass);
38823          } else {
38824            paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part="bullet"' : ""} class="${params.bulletClass}"></${params.bulletElement}>`;
38825          }
38826        }
38827      }
38828      if (params.type === "fraction") {
38829        if (params.renderFraction) {
38830          paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
38831        } else {
38832          paginationHTML = `<span class="${params.currentClass}"></span> / <span class="${params.totalClass}"></span>`;
38833        }
38834      }
38835      if (params.type === "progressbar") {
38836        if (params.renderProgressbar) {
38837          paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
38838        } else {
38839          paginationHTML = `<span class="${params.progressbarFillClass}"></span>`;
38840        }
38841      }
38842      swiper.pagination.bullets = [];
38843      el.forEach((subEl) => {
38844        if (params.type !== "custom") {
38845          subEl.innerHTML = paginationHTML || "";
38846        }
38847        if (params.type === "bullets") {
38848          swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));
38849        }
38850      });
38851      if (params.type !== "custom") {
38852        emit("paginationRender", el[0]);
38853      }
38854    }
38855    function init() {
38856      swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {
38857        el: "swiper-pagination"
38858      });
38859      const params = swiper.params.pagination;
38860      if (!params.el)
38861        return;
38862      let el;
38863      if (typeof params.el === "string" && swiper.isElement) {
38864        el = swiper.el.querySelector(params.el);
38865      }
38866      if (!el && typeof params.el === "string") {
38867        el = [...document.querySelectorAll(params.el)];
38868      }
38869      if (!el) {
38870        el = params.el;
38871      }
38872      if (!el || el.length === 0)
38873        return;
38874      if (swiper.params.uniqueNavElements && typeof params.el === "string" && Array.isArray(el) && el.length > 1) {
38875        el = [...swiper.el.querySelectorAll(params.el)];
38876        if (el.length > 1) {
38877          el = el.filter((subEl) => {
38878            if (elementParents(subEl, ".swiper")[0] !== swiper.el)
38879              return false;
38880            return true;
38881          })[0];
38882        }
38883      }
38884      if (Array.isArray(el) && el.length === 1)
38885        el = el[0];
38886      Object.assign(swiper.pagination, {
38887        el
38888      });
38889      el = makeElementsArray(el);
38890      el.forEach((subEl) => {
38891        if (params.type === "bullets" && params.clickable) {
38892          subEl.classList.add(...(params.clickableClass || "").split(" "));
38893        }
38894        subEl.classList.add(params.modifierClass + params.type);
38895        subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
38896        if (params.type === "bullets" && params.dynamicBullets) {
38897          subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);
38898          dynamicBulletIndex = 0;
38899          if (params.dynamicMainBullets < 1) {
38900            params.dynamicMainBullets = 1;
38901          }
38902        }
38903        if (params.type === "progressbar" && params.progressbarOpposite) {
38904          subEl.classList.add(params.progressbarOppositeClass);
38905        }
38906        if (params.clickable) {
38907          subEl.addEventListener("click", onBulletClick);
38908        }
38909        if (!swiper.enabled) {
38910          subEl.classList.add(params.lockClass);
38911        }
38912      });
38913    }
38914    function destroy2() {
38915      const params = swiper.params.pagination;
38916      if (isPaginationDisabled())
38917        return;
38918      let el = swiper.pagination.el;
38919      if (el) {
38920        el = makeElementsArray(el);
38921        el.forEach((subEl) => {
38922          subEl.classList.remove(params.hiddenClass);
38923          subEl.classList.remove(params.modifierClass + params.type);
38924          subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
38925          if (params.clickable) {
38926            subEl.classList.remove(...(params.clickableClass || "").split(" "));
38927            subEl.removeEventListener("click", onBulletClick);
38928          }
38929        });
38930      }
38931      if (swiper.pagination.bullets)
38932        swiper.pagination.bullets.forEach((subEl) => subEl.classList.remove(...params.bulletActiveClass.split(" ")));
38933    }
38934    on2("changeDirection", () => {
38935      if (!swiper.pagination || !swiper.pagination.el)
38936        return;
38937      const params = swiper.params.pagination;
38938      let {
38939        el
38940      } = swiper.pagination;
38941      el = makeElementsArray(el);
38942      el.forEach((subEl) => {
38943        subEl.classList.remove(params.horizontalClass, params.verticalClass);
38944        subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);
38945      });
38946    });
38947    on2("init", () => {
38948      if (swiper.params.pagination.enabled === false) {
38949        disable2();
38950      } else {
38951        init();
38952        render();
38953        update2();
38954      }
38955    });
38956    on2("activeIndexChange", () => {
38957      if (typeof swiper.snapIndex === "undefined") {
38958        update2();
38959      }
38960    });
38961    on2("snapIndexChange", () => {
38962      update2();
38963    });
38964    on2("snapGridLengthChange", () => {
38965      render();
38966      update2();
38967    });
38968    on2("destroy", () => {
38969      destroy2();
38970    });
38971    on2("enable disable", () => {
38972      let {
38973        el
38974      } = swiper.pagination;
38975      if (el) {
38976        el = makeElementsArray(el);
38977        el.forEach((subEl) => subEl.classList[swiper.enabled ? "remove" : "add"](swiper.params.pagination.lockClass));
38978      }
38979    });
38980    on2("lock unlock", () => {
38981      update2();
38982    });
38983    on2("click", (_s, e4) => {
38984      const targetEl = e4.target;
38985      const el = makeElementsArray(swiper.pagination.el);
38986      if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {
38987        if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl))
38988          return;
38989        const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);
38990        if (isHidden === true) {
38991          emit("paginationShow");
38992        } else {
38993          emit("paginationHide");
38994        }
38995        el.forEach((subEl) => subEl.classList.toggle(swiper.params.pagination.hiddenClass));
38996      }
38997    });
38998    const enable2 = () => {
38999      swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);
39000      let {
39001        el
39002      } = swiper.pagination;
39003      if (el) {
39004        el = makeElementsArray(el);
39005        el.forEach((subEl) => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));
39006      }
39007      init();
39008      render();
39009      update2();
39010    };
39011    const disable2 = () => {
39012      swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);
39013      let {
39014        el
39015      } = swiper.pagination;
39016      if (el) {
39017        el = makeElementsArray(el);
39018        el.forEach((subEl) => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));
39019      }
39020      destroy2();
39021    };
39022    Object.assign(swiper.pagination, {
39023      enable: enable2,
39024      disable: disable2,
39025      render,
39026      update: update2,
39027      init,
39028      destroy: destroy2
39029    });
39030  }
39031
39032  
39032// app/javascript/modules/swiper_init/index.js
39033  var swiper_init_default = () => {
39034    const swiperHeroHalf = new Swiper(".swiper-hero-half", {
39035      modules: [Pagination],
39036      direction: "horizontal",
39037      loop: true,
39038      slidesPerView: 1,
39039      slidesPerGroup: 1,
39040      spaceBetween: 0,
39041      pagination: {
39042        el: ".swiper-pagination-hero-half",
39043        clickable: true,
39044        renderBullet: function() {
39045          return '<span class="swiper-pagination-bullet"></span>';
39046        }
39047      }
39048    });
39049    const swiperHeroFull = new Swiper(".swiper-hero-full", {
39050      modules: [Pagination],
39051      direction: "horizontal",
39052      loop: true,
39053      slidesPerView: 1,
39054      slidesPerGroup: 1,
39055      spaceBetween: 0,
39056      pagination: {
39057        el: ".swiper-pagination-hero-full",
39058        clickable: true,
39059        renderBullet: function() {
39060          return '<span class="swiper-pagination-bullet"></span>';
39061        }
39062      }
39063    });
39064    const swiperSpotlight = new Swiper(".spotlight__slider", {
39065      modules: [Pagination],
39066      direction: "horizontal",
39067      slidesPerView: "auto",
39068      slidesPerGroup: 1,
39069      spaceBetween: 24,
39070      pagination: {
39071        el: ".swiper-pagination-spotlight",
39072        clickable: true,
39073        renderBullet: function() {
39074          return '<span class="swiper-pagination-bullet"></span>';
39075        }
39076      }
39077    });
39078    const swiperTestimonials = new Swiper(".testimonials__slider", {
39079      modules: [Navigation, Pagination],
39080      direction: "horizontal",
39081      slidesPerView: "auto",
39082      slidesPerGroup: 1,
39083      spaceBetween: 32,
39084      pagination: {
39085        el: ".testimonials__pagination",
39086        clickable: true,
39087        renderBullet: function() {
39088          return '<span class="swiper-pagination-bullet"></span>';
39089        }
39090      },
39091      navigation: {
39092        nextEl: ".testimonial-button-next",
39093        prevEl: ".testimonial-button-prev"
39094      }
39095    });
39096    const swiperNewArrivals = new Swiper(".new-arrivals-carousel", {
39097      direction: "horizontal",
39098      slidesPerView: "auto",
39099      slidesPerGroup: 1,
39100      spaceBetween: 24
39101    });
39102    const swiperLifeAt = new Swiper(".life-at-swiper", {
39103      modules: [Pagination],
39104      direction: "horizontal",
39105      loop: false,
39106      slidesPerView: 1,
39107      slidesPerGroup: 1,
39108      spaceBetween: 24,
39109      centerInsufficientSlides: true,
39110      centeredSlides: true,
39111      wrapperClass: "life-at-swiper-wrapper",
39112      pagination: {
39113        el: ".life-at-swiper-pagination",
39114        clickable: true,
39115        renderBullet: function() {
39116          return '<span class="swiper-pagination-bullet"></span>';
39117        }
39118      },
39119      breakpoints: {
39120        1024: {
39121          slidesPerView: 3,
39122          slidesPerGroup: 1,
39123          spaceBetween: 24,
39124          centerInsufficientSlides: false,
39125          centeredSlides: false
39126        }
39127      }
39128    });
39129    const swiperCatalogueList = new Swiper(".item-list-cards__carousel", {
39130      direction: "horizontal",
39131      loop: false,
39132      slidesPerView: "auto",
39133      slidesPerGroup: 1,
39134      spaceBetween: 16,
39135      centerInsufficientSlides: true,
39136      wrapperClass: "item-list-cards__wrapper"
39137    });
39138    let imgLeftContainers = document.querySelectorAll(".image-left-grey-bg__img");
39139    imgLeftContainers.forEach((cont) => {
39140      const imgLeftSwiper = new Swiper(cont, {
39141        modules: [Pagination],
39142        direction: "horizontal",
39143        loop: false,
39144        slidesPerView: 1,
39145        slidesPerGroup: 1,
39146        spaceBetween: 16,
39147        centerInsufficientSlides: true,
39148        wrapperClass: "image-left-swiper-wrapper",
39149        pagination: {
39150          el: ".image-left-swiper-pagination",
39151          clickable: true,
39152          renderBullet: function() {
39153            return '<span class="swiper-pagination-bullet"></span>';
39154          }
39155        }
39156      });
39157    });
39158    const swiperSpaces = new Swiper(".space-info__images", {
39159      modules: [Navigation, Pagination],
39160      direction: "horizontal",
39161      slidesPerView: "auto",
39162      slidesPerGroup: 1,
39163      spaceBetween: 32,
39164      pagination: {
39165        el: ".space-info__images__pagination",
39166        clickable: true,
39167        renderBullet: function() {
39168          return '<span class="swiper-pagination-bullet"></span>';
39169        }
39170      },
39171      navigation: {
39172        nextEl: ".space-info__images__button-next",
39173        prevEl: ".space-info__images__button-prev"
39174      }
39175    });
39176    if (window.innerWidth <= 1024) {
39177      setTimeout(() => {
39178        let discoverSwiper = document.querySelectorAll(".discover-services__swiper");
39179        discoverSwiper.forEach((el) => {
39180          const swiperDiscover = new Swiper(el, {
39181            modules: [Pagination],
39182            direction: "horizontal",
39183            loop: false,
39184            slidesPerView: 1,
39185            slidesPerGroup: 1,
39186            spaceBetween: 24,
39187            centeredSlides: true,
39188            wrapperClass: "discover-services__swiper-wrapper",
39189            pagination: {
39190              el: ".discover-services__swiper-pagination",
39191              clickable: true,
39192              renderBullet: function() {
39193                return '<span class="swiper-pagination-bullet"></span>';
39194              }
39195            }
39196          });
39197        });
39198      }, 1e3);
39199      const swiperThirdWidth = new Swiper(".masonry-swiper", {
39200        modules: [Pagination],
39201        direction: "horizontal",
39202        loop: false,
39203        slidesPerView: 1,
39204        slidesPerGroup: 1,
39205        spaceBetween: 32,
39206        centeredSlides: true,
39207        wrapperClass: "masonry-swiper-wrapper",
39208        pagination: {
39209          el: ".masonry-swiper-pagination",
39210          clickable: true,
39211          renderBullet: function() {
39212            return '<span class="swiper-pagination-bullet"></span>';
39213          }
39214        }
39215      });
39216      if (document.querySelector(".masonry-swiper")) {
39217        const imgs = document.querySelector(".masonry-swiper-wrapper").querySelectorAll("img");
39218        imgs.forEach((img) => {
39219          img.classList.add("swiper-slide");
39220        });
39221      }
39222      const swiperImageRightTextLeft = new Swiper(".img-right-text-left__swiper", {
39223        modules: [Pagination],
39224        direction: "horizontal",
39225        loop: false,
39226        slidesPerView: 1.2,
39227        slidesPerGroup: 1,
39228        spaceBetween: 24,
39229        wrapperClass: "img-right-text-left__swiper-wrapper",
39230        pagination: {
39231          el: ".img-right-text-left__pagination",
39232          clickable: true,
39233          renderBullet: function() {
39234            return '<span class="swiper-pagination-bullet"></span>';
39235          }
39236        }
39237      });
39238    }
39239  };
39240
39241  
39241// app/javascript/modules/index.js
39242  (() => {
39243    document.addEventListener("turbo:load", () => {
39244      swiper_init_default();
39245    });
39246  })();
39247
39248  
vendor: 123,186 bytes, lines 39248-42830
39248// node_modules/bootstrap/dist/js/bootstrap.esm.js
39249  var bootstrap_esm_exports = {};
39250  __export(bootstrap_esm_exports, {
39251    Alert: () => Alert,
39252    Button: () => Button,
39253    Carousel: () => Carousel,
39254    Collapse: () => Collapse,
39255    Dropdown: () => Dropdown,
39256    Modal: () => Modal,
39257    Offcanvas: () => Offcanvas,
39258    Popover: () => Popover2,
39259    ScrollSpy: () => ScrollSpy,
39260    Tab: () => Tab,
39261    Toast: () => Toast,
39262    Tooltip: () => Tooltip
39263  });
39264  var elementMap = /* @__PURE__ */ new Map();
39265  var Data = {
39266    set(element, key, instance) {
39267      if (!elementMap.has(element)) {
39268        elementMap.set(element, /* @__PURE__ */ new Map());
39269      }
39270      const instanceMap = elementMap.get(element);
39271      if (!instanceMap.has(key) && instanceMap.size !== 0) {
39272        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
39273        return;
39274      }
39275      instanceMap.set(key, instance);
39276    },
39277    get(element, key) {
39278      if (elementMap.has(element)) {
39279        return elementMap.get(element).get(key) || null;
39280      }
39281      return null;
39282    },
39283    remove(element, key) {
39284      if (!elementMap.has(element)) {
39285        return;
39286      }
39287      const instanceMap = elementMap.get(element);
39288      instanceMap.delete(key);
39289      if (instanceMap.size === 0) {
39290        elementMap.delete(element);
39291      }
39292    }
39293  };
39294  var MAX_UID = 1e6;
39295  var MILLISECONDS_MULTIPLIER = 1e3;
39296  var TRANSITION_END = "transitionend";
39297  var parseSelector = (selector) => {
39298    if (selector && window.CSS && window.CSS.escape) {
39299      selector = selector.replace(/#([^\s"#']+)/g, (match, id2) => `#${CSS.escape(id2)}`);
39300    }
39301    return selector;
39302  };
39303  var toType = (object) => {
39304    if (object === null || object === void 0) {
39305      return `${object}`;
39306    }
39307    return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
39308  };
39309  var getUID = (prefix) => {
39310    do {
39311      prefix += Math.floor(Math.random() * MAX_UID);
39312    } while (document.getElementById(prefix));
39313    return prefix;
39314  };
39315  var getTransitionDurationFromElement = (element) => {
39316    if (!element) {
39317      return 0;
39318    }
39319    let {
39320      transitionDuration,
39321      transitionDelay
39322    } = window.getComputedStyle(element);
39323    const floatTransitionDuration = Number.parseFloat(transitionDuration);
39324    const floatTransitionDelay = Number.parseFloat(transitionDelay);
39325    if (!floatTransitionDuration && !floatTransitionDelay) {
39326      return 0;
39327    }
39328    transitionDuration = transitionDuration.split(",")[0];
39329    transitionDelay = transitionDelay.split(",")[0];
39330    return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
39331  };
39332  var triggerTransitionEnd = (element) => {
39333    element.dispatchEvent(new Event(TRANSITION_END));
39334  };
39335  var isElement2 = (object) => {
39336    if (!object || typeof object !== "object") {
39337      return false;
39338    }
39339    if (typeof object.jquery !== "undefined") {
39340      object = object[0];
39341    }
39342    return typeof object.nodeType !== "undefined";
39343  };
39344  var getElement = (object) => {
39345    if (isElement2(object)) {
39346      return object.jquery ? object[0] : object;
39347    }
39348    if (typeof object === "string" && object.length > 0) {
39349      return document.querySelector(parseSelector(object));
39350    }
39351    return null;
39352  };
39353  var isVisible = (element) => {
39354    if (!isElement2(element) || element.getClientRects().length === 0) {
39355      return false;
39356    }
39357    const elementIsVisible = getComputedStyle(element).getPropertyValue("visibility") === "visible";
39358    const closedDetails = element.closest("details:not([open])");
39359    if (!closedDetails) {
39360      return elementIsVisible;
39361    }
39362    if (closedDetails !== element) {
39363      const summary = element.closest("summary");
39364      if (summary && summary.parentNode !== closedDetails) {
39365        return false;
39366      }
39367      if (summary === null) {
39368        return false;
39369      }
39370    }
39371    return elementIsVisible;
39372  };
39373  var isDisabled = (element) => {
39374    if (!element || element.nodeType !== Node.ELEMENT_NODE) {
39375      return true;
39376    }
39377    if (element.classList.contains("disabled")) {
39378      return true;
39379    }
39380    if (typeof element.disabled !== "undefined") {
39381      return element.disabled;
39382    }
39383    return element.hasAttribute("disabled") && element.getAttribute("disabled") !== "false";
39384  };
39385  var findShadowRoot = (element) => {
39386    if (!document.documentElement.attachShadow) {
39387      return null;
39388    }
39389    if (typeof element.getRootNode === "function") {
39390      const root = element.getRootNode();
39391      return root instanceof ShadowRoot ? root : null;
39392    }
39393    if (element instanceof ShadowRoot) {
39394      return element;
39395    }
39396    if (!element.parentNode) {
39397      return null;
39398    }
39399    return findShadowRoot(element.parentNode);
39400  };
39401  var noop = () => {
39402  };
39403  var reflow = (element) => {
39404    element.offsetHeight;
39405  };
39406  var getjQuery = () => {
39407    if (window.jQuery && !document.body.hasAttribute("data-bs-no-jquery")) {
39408      return window.jQuery;
39409    }
39410    return null;
39411  };
39412  var DOMContentLoadedCallbacks = [];
39413  var onDOMContentLoaded = (callback) => {
39414    if (document.readyState === "loading") {
39415      if (!DOMContentLoadedCallbacks.length) {
39416        document.addEventListener("DOMContentLoaded", () => {
39417          for (const callback2 of DOMContentLoadedCallbacks) {
39418            callback2();
39419          }
39420        });
39421      }
39422      DOMContentLoadedCallbacks.push(callback);
39423    } else {
39424      callback();
39425    }
39426  };
39427  var isRTL = () => document.documentElement.dir === "rtl";
39428  var defineJQueryPlugin = (plugin) => {
39429    onDOMContentLoaded(() => {
39430      const $5 = getjQuery();
39431      if ($5) {
39432        const name = plugin.NAME;
39433        const JQUERY_NO_CONFLICT = $5.fn[name];
39434        $5.fn[name] = plugin.jQueryInterface;
39435        $5.fn[name].Constructor = plugin;
39436        $5.fn[name].noConflict = () => {
39437          $5.fn[name] = JQUERY_NO_CONFLICT;
39438          return plugin.jQueryInterface;
39439        };
39440      }
39441    });
39442  };
39443  var execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
39444    return typeof possibleCallback === "function" ? possibleCallback(...args) : defaultValue;
39445  };
39446  var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
39447    if (!waitForTransition) {
39448      execute(callback);
39449      return;
39450    }
39451    const durationPadding = 5;
39452    const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
39453    let called = false;
39454    const handler = ({
39455      target
39456    }) => {
39457      if (target !== transitionElement) {
39458        return;
39459      }
39460      called = true;
39461      transitionElement.removeEventListener(TRANSITION_END, handler);
39462      execute(callback);
39463    };
39464    transitionElement.addEventListener(TRANSITION_END, handler);
39465    setTimeout(() => {
39466      if (!called) {
39467        triggerTransitionEnd(transitionElement);
39468      }
39469    }, emulatedDuration);
39470  };
39471  var getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
39472    const listLength = list.length;
39473    let index4 = list.indexOf(activeElement);
39474    if (index4 === -1) {
39475      return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
39476    }
39477    index4 += shouldGetNext ? 1 : -1;
39478    if (isCycleAllowed) {
39479      index4 = (index4 + listLength) % listLength;
39480    }
39481    return list[Math.max(0, Math.min(index4, listLength - 1))];
39482  };
39483  var namespaceRegex = /[^.]*(?=\..*)\.|.*/;
39484  var stripNameRegex = /\..*/;
39485  var stripUidRegex = /::\d+$/;
39486  var eventRegistry = {};
39487  var uidEvent = 1;
39488  var customEvents = {
39489    mouseenter: "mouseover",
39490    mouseleave: "mouseout"
39491  };
39492  var nativeEvents = /* @__PURE__ */ new Set(["click", "dblclick", "mouseup", "mousedown", "contextmenu", "mousewheel", "DOMMouseScroll", "mouseover", "mouseout", "mousemove", "selectstart", "selectend", "keydown", "keypress", "keyup", "orientationchange", "touchstart", "touchmove", "touchend", "touchcancel", "pointerdown", "pointermove", "pointerup", "pointerleave", "pointercancel", "gesturestart", "gesturechange", "gestureend", "focus", "blur", "change", "reset", "select", "submit", "focusin", "focusout", "load", "unload", "beforeunload", "resize", "move", "DOMContentLoaded", "readystatechange", "error", "abort", "scroll"]);
39493  function makeEventUid(element, uid) {
39494    return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
39495  }
39496  function getElementEvents(element) {
39497    const uid = makeEventUid(element);
39498    element.uidEvent = uid;
39499    eventRegistry[uid] = eventRegistry[uid] || {};
39500    return eventRegistry[uid];
39501  }
39502  function bootstrapHandler(element, fn3) {
39503    return function handler(event2) {
39504      hydrateObj(event2, {
39505        delegateTarget: element
39506      });
39507      if (handler.oneOff) {
39508        EventHandler.off(element, event2.type, fn3);
39509      }
39510      return fn3.apply(element, [event2]);
39511    };
39512  }
39513  function bootstrapDelegationHandler(element, selector, fn3) {
39514    return function handler(event2) {
39515      const domElements = element.querySelectorAll(selector);
39516      for (let {
39517        target
39518      } = event2; target && target !== this; target = target.parentNode) {
39519        for (const domElement of domElements) {
39520          if (domElement !== target) {
39521            continue;
39522          }
39523          hydrateObj(event2, {
39524            delegateTarget: target
39525          });
39526          if (handler.oneOff) {
39527            EventHandler.off(element, event2.type, selector, fn3);
39528          }
39529          return fn3.apply(target, [event2]);
39530        }
39531      }
39532    };
39533  }
39534  function findHandler(events2, callable, delegationSelector = null) {
39535    return Object.values(events2).find((event2) => event2.callable === callable && event2.delegationSelector === delegationSelector);
39536  }
39537  function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
39538    const isDelegated = typeof handler === "string";
39539    const callable = isDelegated ? delegationFunction : handler || delegationFunction;
39540    let typeEvent = getTypeEvent(originalTypeEvent);
39541    if (!nativeEvents.has(typeEvent)) {
39542      typeEvent = originalTypeEvent;
39543    }
39544    return [isDelegated, callable, typeEvent];
39545  }
39546  function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
39547    if (typeof originalTypeEvent !== "string" || !element) {
39548      return;
39549    }
39550    let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
39551    if (originalTypeEvent in customEvents) {
39552      const wrapFunction = (fn4) => {
39553        return function(event2) {
39554          if (!event2.relatedTarget || event2.relatedTarget !== event2.delegateTarget && !event2.delegateTarget.contains(event2.relatedTarget)) {
39555            return fn4.call(this, event2);
39556          }
39557        };
39558      };
39559      callable = wrapFunction(callable);
39560    }
39561    const events2 = getElementEvents(element);
39562    const handlers = events2[typeEvent] || (events2[typeEvent] = {});
39563    const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
39564    if (previousFunction) {
39565      previousFunction.oneOff = previousFunction.oneOff && oneOff;
39566      return;
39567    }
39568    const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ""));
39569    const fn3 = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
39570    fn3.delegationSelector = isDelegated ? handler : null;
39571    fn3.callable = callable;
39572    fn3.oneOff = oneOff;
39573    fn3.uidEvent = uid;
39574    handlers[uid] = fn3;
39575    element.addEventListener(typeEvent, fn3, isDelegated);
39576  }
39577  function removeHandler(element, events2, typeEvent, handler, delegationSelector) {
39578    const fn3 = findHandler(events2[typeEvent], handler, delegationSelector);
39579    if (!fn3) {
39580      return;
39581    }
39582    element.removeEventListener(typeEvent, fn3, Boolean(delegationSelector));
39583    delete events2[typeEvent][fn3.uidEvent];
39584  }
39585  function removeNamespacedHandlers(element, events2, typeEvent, namespace) {
39586    const storeElementEvent = events2[typeEvent] || {};
39587    for (const [handlerKey, event2] of Object.entries(storeElementEvent)) {
39588      if (handlerKey.includes(namespace)) {
39589        removeHandler(element, events2, typeEvent, event2.callable, event2.delegationSelector);
39590      }
39591    }
39592  }
39593  function getTypeEvent(event2) {
39594    event2 = event2.replace(stripNameRegex, "");
39595    return customEvents[event2] || event2;
39596  }
39597  var EventHandler = {
39598    on(element, event2, handler, delegationFunction) {
39599      addHandler(element, event2, handler, delegationFunction, false);
39600    },
39601    one(element, event2, handler, delegationFunction) {
39602      addHandler(element, event2, handler, delegationFunction, true);
39603    },
39604    off(element, originalTypeEvent, handler, delegationFunction) {
39605      if (typeof originalTypeEvent !== "string" || !element) {
39606        return;
39607      }
39608      const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
39609      const inNamespace = typeEvent !== originalTypeEvent;
39610      const events2 = getElementEvents(element);
39611      const storeElementEvent = events2[typeEvent] || {};
39612      const isNamespace = originalTypeEvent.startsWith(".");
39613      if (typeof callable !== "undefined") {
39614        if (!Object.keys(storeElementEvent).length) {
39615          return;
39616        }
39617        removeHandler(element, events2, typeEvent, callable, isDelegated ? handler : null);
39618        return;
39619      }
39620      if (isNamespace) {
39621        for (const elementEvent of Object.keys(events2)) {
39622          removeNamespacedHandlers(element, events2, elementEvent, originalTypeEvent.slice(1));
39623        }
39624      }
39625      for (const [keyHandlers, event2] of Object.entries(storeElementEvent)) {
39626        const handlerKey = keyHandlers.replace(stripUidRegex, "");
39627        if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
39628          removeHandler(element, events2, typeEvent, event2.callable, event2.delegationSelector);
39629        }
39630      }
39631    },
39632    trigger(element, event2, args) {
39633      if (typeof event2 !== "string" || !element) {
39634        return null;
39635      }
39636      const $5 = getjQuery();
39637      const typeEvent = getTypeEvent(event2);
39638      const inNamespace = event2 !== typeEvent;
39639      let jQueryEvent = null;
39640      let bubbles = true;
39641      let nativeDispatch = true;
39642      let defaultPrevented = false;
39643      if (inNamespace && $5) {
39644        jQueryEvent = $5.Event(event2, args);
39645        $5(element).trigger(jQueryEvent);
39646        bubbles = !jQueryEvent.isPropagationStopped();
39647        nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
39648        defaultPrevented = jQueryEvent.isDefaultPrevented();
39649      }
39650      const evt = hydrateObj(new Event(event2, {
39651        bubbles,
39652        cancelable: true
39653      }), args);
39654      if (defaultPrevented) {
39655        evt.preventDefault();
39656      }
39657      if (nativeDispatch) {
39658        element.dispatchEvent(evt);
39659      }
39660      if (evt.defaultPrevented && jQueryEvent) {
39661        jQueryEvent.preventDefault();
39662      }
39663      return evt;
39664    }
39665  };
39666  function hydrateObj(obj, meta = {}) {
39667    for (const [key, value] of Object.entries(meta)) {
39668      try {
39669        obj[key] = value;
39670      } catch (_unused) {
39671        Object.defineProperty(obj, key, {
39672          configurable: true,
39673          get() {
39674            return value;
39675          }
39676        });
39677      }
39678    }
39679    return obj;
39680  }
39681  function normalizeData(value) {
39682    if (value === "true") {
39683      return true;
39684    }
39685    if (value === "false") {
39686      return false;
39687    }
39688    if (value === Number(value).toString()) {
39689      return Number(value);
39690    }
39691    if (value === "" || value === "null") {
39692      return null;
39693    }
39694    if (typeof value !== "string") {
39695      return value;
39696    }
39697    try {
39698      return JSON.parse(decodeURIComponent(value));
39699    } catch (_unused) {
39700      return value;
39701    }
39702  }
39703  function normalizeDataKey(key) {
39704    return key.replace(/[A-Z]/g, (chr) => `-${chr.toLowerCase()}`);
39705  }
39706  var Manipulator = {
39707    setDataAttribute(element, key, value) {
39708      element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
39709    },
39710    removeDataAttribute(element, key) {
39711      element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
39712    },
39713    getDataAttributes(element) {
39714      if (!element) {
39715        return {};
39716      }
39717      const attributes = {};
39718      const bsKeys = Object.keys(element.dataset).filter((key) => key.startsWith("bs") && !key.startsWith("bsConfig"));
39719      for (const key of bsKeys) {
39720        let pureKey = key.replace(/^bs/, "");
39721        pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
39722        attributes[pureKey] = normalizeData(element.dataset[key]);
39723      }
39724      return attributes;
39725    },
39726    getDataAttribute(element, key) {
39727      return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
39728    }
39729  };
39730  var Config = class {
39731    static get Default() {
39732      return {};
39733    }
39734    static get DefaultType() {
39735      return {};
39736    }
39737    static get NAME() {
39738      throw new Error('You have to implement the static method "NAME", for each component!');
39739    }
39740    _getConfig(config2) {
39741      config2 = this._mergeConfigObj(config2);
39742      config2 = this._configAfterMerge(config2);
39743      this._typeCheckConfig(config2);
39744      return config2;
39745    }
39746    _configAfterMerge(config2) {
39747      return config2;
39748    }
39749    _mergeConfigObj(config2, element) {
39750      const jsonConfig = isElement2(element) ? Manipulator.getDataAttribute(element, "config") : {};
39751      return {
39752        ...this.constructor.Default,
39753        ...typeof jsonConfig === "object" ? jsonConfig : {},
39754        ...isElement2(element) ? Manipulator.getDataAttributes(element) : {},
39755        ...typeof config2 === "object" ? config2 : {}
39756      };
39757    }
39758    _typeCheckConfig(config2, configTypes = this.constructor.DefaultType) {
39759      for (const [property, expectedTypes] of Object.entries(configTypes)) {
39760        const value = config2[property];
39761        const valueType = isElement2(value) ? "element" : toType(value);
39762        if (!new RegExp(expectedTypes).test(valueType)) {
39763          throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
39764        }
39765      }
39766    }
39767  };
39768  var VERSION = "5.3.3";
39769  var BaseComponent2 = class extends Config {
39770    constructor(element, config2) {
39771      super();
39772      element = getElement(element);
39773      if (!element) {
39774        return;
39775      }
39776      this._element = element;
39777      this._config = this._getConfig(config2);
39778      Data.set(this._element, this.constructor.DATA_KEY, this);
39779    }
39780    dispose() {
39781      Data.remove(this._element, this.constructor.DATA_KEY);
39782      EventHandler.off(this._element, this.constructor.EVENT_KEY);
39783      for (const propertyName of Object.getOwnPropertyNames(this)) {
39784        this[propertyName] = null;
39785      }
39786    }
39787    _queueCallback(callback, element, isAnimated = true) {
39788      executeAfterTransition(callback, element, isAnimated);
39789    }
39790    _getConfig(config2) {
39791      config2 = this._mergeConfigObj(config2, this._element);
39792      config2 = this._configAfterMerge(config2);
39793      this._typeCheckConfig(config2);
39794      return config2;
39795    }
39796    static getInstance(element) {
39797      return Data.get(getElement(element), this.DATA_KEY);
39798    }
39799    static getOrCreateInstance(element, config2 = {}) {
39800      return this.getInstance(element) || new this(element, typeof config2 === "object" ? config2 : null);
39801    }
39802    static get VERSION() {
39803      return VERSION;
39804    }
39805    static get DATA_KEY() {
39806      return `bs.${this.NAME}`;
39807    }
39808    static get EVENT_KEY() {
39809      return `.${this.DATA_KEY}`;
39810    }
39811    static eventName(name) {
39812      return `${name}${this.EVENT_KEY}`;
39813    }
39814  };
39815  var getSelector = (element) => {
39816    let selector = element.getAttribute("data-bs-target");
39817    if (!selector || selector === "#") {
39818      let hrefAttribute = element.getAttribute("href");
39819      if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) {
39820        return null;
39821      }
39822      if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) {
39823        hrefAttribute = `#${hrefAttribute.split("#")[1]}`;
39824      }
39825      selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null;
39826    }
39827    return selector ? selector.split(",").map((sel) => parseSelector(sel)).join(",") : null;
39828  };
39829  var SelectorEngine = {
39830    find(selector, element = document.documentElement) {
39831      return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
39832    },
39833    findOne(selector, element = document.documentElement) {
39834      return Element.prototype.querySelector.call(element, selector);
39835    },
39836    children(element, selector) {
39837      return [].concat(...element.children).filter((child) => child.matches(selector));
39838    },
39839    parents(element, selector) {
39840      const parents = [];
39841      let ancestor = element.parentNode.closest(selector);
39842      while (ancestor) {
39843        parents.push(ancestor);
39844        ancestor = ancestor.parentNode.closest(selector);
39845      }
39846      return parents;
39847    },
39848    prev(element, selector) {
39849      let previous = element.previousElementSibling;
39850      while (previous) {
39851        if (previous.matches(selector)) {
39852          return [previous];
39853        }
39854        previous = previous.previousElementSibling;
39855      }
39856      return [];
39857    },
39858    next(element, selector) {
39859      let next = element.nextElementSibling;
39860      while (next) {
39861        if (next.matches(selector)) {
39862          return [next];
39863        }
39864        next = next.nextElementSibling;
39865      }
39866      return [];
39867    },
39868    focusableChildren(element) {
39869      const focusables = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((selector) => `${selector}:not([tabindex^="-"])`).join(",");
39870      return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));
39871    },
39872    getSelectorFromElement(element) {
39873      const selector = getSelector(element);
39874      if (selector) {
39875        return SelectorEngine.findOne(selector) ? selector : null;
39876      }
39877      return null;
39878    },
39879    getElementFromSelector(element) {
39880      const selector = getSelector(element);
39881      return selector ? SelectorEngine.findOne(selector) : null;
39882    },
39883    getMultipleElementsFromSelector(element) {
39884      const selector = getSelector(element);
39885      return selector ? SelectorEngine.find(selector) : [];
39886    }
39887  };
39888  var enableDismissTrigger = (component, method = "hide") => {
39889    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
39890    const name = component.NAME;
39891    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event2) {
39892      if (["A", "AREA"].includes(this.tagName)) {
39893        event2.preventDefault();
39894      }
39895      if (isDisabled(this)) {
39896        return;
39897      }
39898      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
39899      const instance = component.getOrCreateInstance(target);
39900      instance[method]();
39901    });
39902  };
39903  var NAME$f = "alert";
39904  var DATA_KEY$a = "bs.alert";
39905  var EVENT_KEY$b = `.${DATA_KEY$a}`;
39906  var EVENT_CLOSE = `close${EVENT_KEY$b}`;
39907  var EVENT_CLOSED = `closed${EVENT_KEY$b}`;
39908  var CLASS_NAME_FADE$5 = "fade";
39909  var CLASS_NAME_SHOW$8 = "show";
39910  var Alert = class extends BaseComponent2 {
39911    static get NAME() {
39912      return NAME$f;
39913    }
39914    close() {
39915      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
39916      if (closeEvent.defaultPrevented) {
39917        return;
39918      }
39919      this._element.classList.remove(CLASS_NAME_SHOW$8);
39920      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
39921      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
39922    }
39923    _destroyElement() {
39924      this._element.remove();
39925      EventHandler.trigger(this._element, EVENT_CLOSED);
39926      this.dispose();
39927    }
39928    static jQueryInterface(config2) {
39929      return this.each(function() {
39930        const data = Alert.getOrCreateInstance(this);
39931        if (typeof config2 !== "string") {
39932          return;
39933        }
39934        if (data[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") {
39935          throw new TypeError(`No method named "${config2}"`);
39936        }
39937        data[config2](this);
39938      });
39939    }
39940  };
39941  enableDismissTrigger(Alert, "close");
39942  defineJQueryPlugin(Alert);
39943  var NAME$e = "button";
39944  var DATA_KEY$9 = "bs.button";
39945  var EVENT_KEY$a = `.${DATA_KEY$9}`;
39946  var DATA_API_KEY$6 = ".data-api";
39947  var CLASS_NAME_ACTIVE$3 = "active";
39948  var SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
39949  var EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
39950  var Button = class extends BaseComponent2 {
39951    static get NAME() {
39952      return NAME$e;
39953    }
39954    toggle() {
39955      this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
39956    }
39957    static jQueryInterface(config2) {
39958      return this.each(function() {
39959        const data = Button.getOrCreateInstance(this);
39960        if (config2 === "toggle") {
39961          data[config2]();
39962        }
39963      });
39964    }
39965  };
39966  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, (event2) => {
39967    event2.preventDefault();
39968    const button = event2.target.closest(SELECTOR_DATA_TOGGLE$5);
39969    const data = Button.getOrCreateInstance(button);
39970    data.toggle();
39971  });
39972  defineJQueryPlugin(Button);
39973  var NAME$d = "swipe";
39974  var EVENT_KEY$9 = ".bs.swipe";
39975  var EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
39976  var EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;
39977  var EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;
39978  var EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;
39979  var EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;
39980  var POINTER_TYPE_TOUCH = "touch";
39981  var POINTER_TYPE_PEN = "pen";
39982  var CLASS_NAME_POINTER_EVENT = "pointer-event";
39983  var SWIPE_THRESHOLD = 40;
39984  var Default$c = {
39985    endCallback: null,
39986    leftCallback: null,
39987    rightCallback: null
39988  };
39989  var DefaultType$c = {
39990    endCallback: "(function|null)",
39991    leftCallback: "(function|null)",
39992    rightCallback: "(function|null)"
39993  };
39994  var Swipe = class extends Config {
39995    constructor(element, config2) {
39996      super();
39997      this._element = element;
39998      if (!element || !Swipe.isSupported()) {
39999        return;
40000      }
40001      this._config = this._getConfig(config2);
40002      this._deltaX = 0;
40003      this._supportPointerEvents = Boolean(window.PointerEvent);
40004      this._initEvents();
40005    }
40006    static get Default() {
40007      return Default$c;
40008    }
40009    static get DefaultType() {
40010      return DefaultType$c;
40011    }
40012    static get NAME() {
40013      return NAME$d;
40014    }
40015    dispose() {
40016      EventHandler.off(this._element, EVENT_KEY$9);
40017    }
40018    _start(event2) {
40019      if (!this._supportPointerEvents) {
40020        this._deltaX = event2.touches[0].clientX;
40021        return;
40022      }
40023      if (this._eventIsPointerPenTouch(event2)) {
40024        this._deltaX = event2.clientX;
40025      }
40026    }
40027    _end(event2) {
40028      if (this._eventIsPointerPenTouch(event2)) {
40029        this._deltaX = event2.clientX - this._deltaX;
40030      }
40031      this._handleSwipe();
40032      execute(this._config.endCallback);
40033    }
40034    _move(event2) {
40035      this._deltaX = event2.touches && event2.touches.length > 1 ? 0 : event2.touches[0].clientX - this._deltaX;
40036    }
40037    _handleSwipe() {
40038      const absDeltaX = Math.abs(this._deltaX);
40039      if (absDeltaX <= SWIPE_THRESHOLD) {
40040        return;
40041      }
40042      const direction = absDeltaX / this._deltaX;
40043      this._deltaX = 0;
40044      if (!direction) {
40045        return;
40046      }
40047      execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
40048    }
40049    _initEvents() {
40050      if (this._supportPointerEvents) {
40051        EventHandler.on(this._element, EVENT_POINTERDOWN, (event2) => this._start(event2));
40052        EventHandler.on(this._element, EVENT_POINTERUP, (event2) => this._end(event2));
40053        this._element.classList.add(CLASS_NAME_POINTER_EVENT);
40054      } else {
40055        EventHandler.on(this._element, EVENT_TOUCHSTART, (event2) => this._start(event2));
40056        EventHandler.on(this._element, EVENT_TOUCHMOVE, (event2) => this._move(event2));
40057        EventHandler.on(this._element, EVENT_TOUCHEND, (event2) => this._end(event2));
40058      }
40059    }
40060    _eventIsPointerPenTouch(event2) {
40061      return this._supportPointerEvents && (event2.pointerType === POINTER_TYPE_PEN || event2.pointerType === POINTER_TYPE_TOUCH);
40062    }
40063    static isSupported() {
40064      return "ontouchstart" in document.documentElement || navigator.maxTouchPoints > 0;
40065    }
40066  };
40067  var NAME$c = "carousel";
40068  var DATA_KEY$8 = "bs.carousel";
40069  var EVENT_KEY$8 = `.${DATA_KEY$8}`;
40070  var DATA_API_KEY$5 = ".data-api";
40071  var ARROW_LEFT_KEY$1 = "ArrowLeft";
40072  var ARROW_RIGHT_KEY$1 = "ArrowRight";
40073  var TOUCHEVENT_COMPAT_WAIT = 500;
40074  var ORDER_NEXT = "next";
40075  var ORDER_PREV = "prev";
40076  var DIRECTION_LEFT = "left";
40077  var DIRECTION_RIGHT = "right";
40078  var EVENT_SLIDE = `slide${EVENT_KEY$8}`;
40079  var EVENT_SLID = `slid${EVENT_KEY$8}`;
40080  var EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;
40081  var EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;
40082  var EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;
40083  var EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;
40084  var EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;
40085  var EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;
40086  var CLASS_NAME_CAROUSEL = "carousel";
40087  var CLASS_NAME_ACTIVE$2 = "active";
40088  var CLASS_NAME_SLIDE = "slide";
40089  var CLASS_NAME_END = "carousel-item-end";
40090  var CLASS_NAME_START = "carousel-item-start";
40091  var CLASS_NAME_NEXT = "carousel-item-next";
40092  var CLASS_NAME_PREV = "carousel-item-prev";
40093  var SELECTOR_ACTIVE = ".active";
40094  var SELECTOR_ITEM = ".carousel-item";
40095  var SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;
40096  var SELECTOR_ITEM_IMG = ".carousel-item img";
40097  var SELECTOR_INDICATORS = ".carousel-indicators";
40098  var SELECTOR_DATA_SLIDE = "[data-bs-slide], [data-bs-slide-to]";
40099  var SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]';
40100  var KEY_TO_DIRECTION = {
40101    [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,
40102    [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT
40103  };
40104  var Default$b = {
40105    interval: 5e3,
40106    keyboard: true,
40107    pause: "hover",
40108    ride: false,
40109    touch: true,
40110    wrap: true
40111  };
40112  var DefaultType$b = {
40113    interval: "(number|boolean)",
40114    keyboard: "boolean",
40115    pause: "(string|boolean)",
40116    ride: "(boolean|string)",
40117    touch: "boolean",
40118    wrap: "boolean"
40119  };
40120  var Carousel = class extends BaseComponent2 {
40121    constructor(element, config2) {
40122      super(element, config2);
40123      this._interval = null;
40124      this._activeElement = null;
40125      this._isSliding = false;
40126      this.touchTimeout = null;
40127      this._swipeHelper = null;
40128      this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
40129      this._addEventListeners();
40130      if (this._config.ride === CLASS_NAME_CAROUSEL) {
40131        this.cycle();
40132      }
40133    }
40134    static get Default() {
40135      return Default$b;
40136    }
40137    static get DefaultType() {
40138      return DefaultType$b;
40139    }
40140    static get NAME() {
40141      return NAME$c;
40142    }
40143    next() {
40144      this._slide(ORDER_NEXT);
40145    }
40146    nextWhenVisible() {
40147      if (!document.hidden && isVisible(this._element)) {
40148        this.next();
40149      }
40150    }
40151    prev() {
40152      this._slide(ORDER_PREV);
40153    }
40154    pause() {
40155      if (this._isSliding) {
40156        triggerTransitionEnd(this._element);
40157      }
40158      this._clearInterval();
40159    }
40160    cycle() {
40161      this._clearInterval();
40162      this._updateInterval();
40163      this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
40164    }
40165    _maybeEnableCycle() {
40166      if (!this._config.ride) {
40167        return;
40168      }
40169      if (this._isSliding) {
40170        EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
40171        return;
40172      }
40173      this.cycle();
40174    }
40175    to(index4) {
40176      const items = this._getItems();
40177      if (index4 > items.length - 1 || index4 < 0) {
40178        return;
40179      }
40180      if (this._isSliding) {
40181        EventHandler.one(this._element, EVENT_SLID, () => this.to(index4));
40182        return;
40183      }
40184      const activeIndex = this._getItemIndex(this._getActive());
40185      if (activeIndex === index4) {
40186        return;
40187      }
40188      const order2 = index4 > activeIndex ? ORDER_NEXT : ORDER_PREV;
40189      this._slide(order2, items[index4]);
40190    }
40191    dispose() {
40192      if (this._swipeHelper) {
40193        this._swipeHelper.dispose();
40194      }
40195      super.dispose();
40196    }
40197    _configAfterMerge(config2) {
40198      config2.defaultInterval = config2.interval;
40199      return config2;
40200    }
40201    _addEventListeners() {
40202      if (this._config.keyboard) {
40203        EventHandler.on(this._element, EVENT_KEYDOWN$1, (event2) => this._keydown(event2));
40204      }
40205      if (this._config.pause === "hover") {
40206        EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
40207        EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
40208      }
40209      if (this._config.touch && Swipe.isSupported()) {
40210        this._addTouchEventListeners();
40211      }
40212    }
40213    _addTouchEventListeners() {
40214      for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
40215        EventHandler.on(img, EVENT_DRAG_START, (event2) => event2.preventDefault());
40216      }
40217      const endCallBack = () => {
40218        if (this._config.pause !== "hover") {
40219          return;
40220        }
40221        this.pause();
40222        if (this.touchTimeout) {
40223          clearTimeout(this.touchTimeout);
40224        }
40225        this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
40226      };
40227      const swipeConfig = {
40228        leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
40229        rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
40230        endCallback: endCallBack
40231      };
40232      this._swipeHelper = new Swipe(this._element, swipeConfig);
40233    }
40234    _keydown(event2) {
40235      if (/input|textarea/i.test(event2.target.tagName)) {
40236        return;
40237      }
40238      const direction = KEY_TO_DIRECTION[event2.key];
40239      if (direction) {
40240        event2.preventDefault();
40241        this._slide(this._directionToOrder(direction));
40242      }
40243    }
40244    _getItemIndex(element) {
40245      return this._getItems().indexOf(element);
40246    }
40247    _setActiveIndicatorElement(index4) {
40248      if (!this._indicatorsElement) {
40249        return;
40250      }
40251      const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
40252      activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
40253      activeIndicator.removeAttribute("aria-current");
40254      const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index4}"]`, this._indicatorsElement);
40255      if (newActiveIndicator) {
40256        newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
40257        newActiveIndicator.setAttribute("aria-current", "true");
40258      }
40259    }
40260    _updateInterval() {
40261      const element = this._activeElement || this._getActive();
40262      if (!element) {
40263        return;
40264      }
40265      const elementInterval = Number.parseInt(element.getAttribute("data-bs-interval"), 10);
40266      this._config.interval = elementInterval || this._config.defaultInterval;
40267    }
40268    _slide(order2, element = null) {
40269      if (this._isSliding) {
40270        return;
40271      }
40272      const activeElement = this._getActive();
40273      const isNext = order2 === ORDER_NEXT;
40274      const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
40275      if (nextElement === activeElement) {
40276        return;
40277      }
40278      const nextElementIndex = this._getItemIndex(nextElement);
40279      const triggerEvent = (eventName) => {
40280        return EventHandler.trigger(this._element, eventName, {
40281          relatedTarget: nextElement,
40282          direction: this._orderToDirection(order2),
40283          from: this._getItemIndex(activeElement),
40284          to: nextElementIndex
40285        });
40286      };
40287      const slideEvent = triggerEvent(EVENT_SLIDE);
40288      if (slideEvent.defaultPrevented) {
40289        return;
40290      }
40291      if (!activeElement || !nextElement) {
40292        return;
40293      }
40294      const isCycling = Boolean(this._interval);
40295      this.pause();
40296      this._isSliding = true;
40297      this._setActiveIndicatorElement(nextElementIndex);
40298      this._activeElement = nextElement;
40299      const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
40300      const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
40301      nextElement.classList.add(orderClassName);
40302      reflow(nextElement);
40303      activeElement.classList.add(directionalClassName);
40304      nextElement.classList.add(directionalClassName);
40305      const completeCallBack = () => {
40306        nextElement.classList.remove(directionalClassName, orderClassName);
40307        nextElement.classList.add(CLASS_NAME_ACTIVE$2);
40308        activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);
40309        this._isSliding = false;
40310        triggerEvent(EVENT_SLID);
40311      };
40312      this._queueCallback(completeCallBack, activeElement, this._isAnimated());
40313      if (isCycling) {
40314        this.cycle();
40315      }
40316    }
40317    _isAnimated() {
40318      return this._element.classList.contains(CLASS_NAME_SLIDE);
40319    }
40320    _getActive() {
40321      return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
40322    }
40323    _getItems() {
40324      return SelectorEngine.find(SELECTOR_ITEM, this._element);
40325    }
40326    _clearInterval() {
40327      if (this._interval) {
40328        clearInterval(this._interval);
40329        this._interval = null;
40330      }
40331    }
40332    _directionToOrder(direction) {
40333      if (isRTL()) {
40334        return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
40335      }
40336      return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
40337    }
40338    _orderToDirection(order2) {
40339      if (isRTL()) {
40340        return order2 === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
40341      }
40342      return order2 === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
40343    }
40344    static jQueryInterface(config2) {
40345      return this.each(function() {
40346        const data = Carousel.getOrCreateInstance(this, config2);
40347        if (typeof config2 === "number") {
40348          data.to(config2);
40349          return;
40350        }
40351        if (typeof config2 === "string") {
40352          if (data[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") {
40353            throw new TypeError(`No method named "${config2}"`);
40354          }
40355          data[config2]();
40356        }
40357      });
40358    }
40359  };
40360  EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function(event2) {
40361    const target = SelectorEngine.getElementFromSelector(this);
40362    if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
40363      return;
40364    }
40365    event2.preventDefault();
40366    const carousel = Carousel.getOrCreateInstance(target);
40367    const slideIndex = this.getAttribute("data-bs-slide-to");
40368    if (slideIndex) {
40369      carousel.to(slideIndex);
40370      carousel._maybeEnableCycle();
40371      return;
40372    }
40373    if (Manipulator.getDataAttribute(this, "slide") === "next") {
40374      carousel.next();
40375      carousel._maybeEnableCycle();
40376      return;
40377    }
40378    carousel.prev();
40379    carousel._maybeEnableCycle();
40380  });
40381  EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
40382    const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
40383    for (const carousel of carousels) {
40384      Carousel.getOrCreateInstance(carousel);
40385    }
40386  });
40387  defineJQueryPlugin(Carousel);
40388  var NAME$b = "collapse";
40389  var DATA_KEY$7 = "bs.collapse";
40390  var EVENT_KEY$7 = `.${DATA_KEY$7}`;
40391  var DATA_API_KEY$4 = ".data-api";
40392  var EVENT_SHOW$6 = `show${EVENT_KEY$7}`;
40393  var EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;
40394  var EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;
40395  var EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;
40396  var EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;
40397  var CLASS_NAME_SHOW$7 = "show";
40398  var CLASS_NAME_COLLAPSE = "collapse";
40399  var CLASS_NAME_COLLAPSING = "collapsing";
40400  var CLASS_NAME_COLLAPSED = "collapsed";
40401  var CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;
40402  var CLASS_NAME_HORIZONTAL = "collapse-horizontal";
40403  var WIDTH = "width";
40404  var HEIGHT = "height";
40405  var SELECTOR_ACTIVES = ".collapse.show, .collapse.collapsing";
40406  var SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]';
40407  var Default$a = {
40408    parent: null,
40409    toggle: true
40410  };
40411  var DefaultType$a = {
40412    parent: "(null|element)",
40413    toggle: "boolean"
40414  };
40415  var Collapse = class extends BaseComponent2 {
40416    constructor(element, config2) {
40417      super(element, config2);
40418      this._isTransitioning = false;
40419      this._triggerArray = [];
40420      const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
40421      for (const elem of toggleList) {
40422        const selector = SelectorEngine.getSelectorFromElement(elem);
40423        const filterElement = SelectorEngine.find(selector).filter((foundElement) => foundElement === this._element);
40424        if (selector !== null && filterElement.length) {
40425          this._triggerArray.push(elem);
40426        }
40427      }
40428      this._initializeChildren();
40429      if (!this._config.parent) {
40430        this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
40431      }
40432      if (this._config.toggle) {
40433        this.toggle();
40434      }
40435    }
40436    static get Default() {
40437      return Default$a;
40438    }
40439    static get DefaultType() {
40440      return DefaultType$a;
40441    }
40442    static get NAME() {
40443      return NAME$b;
40444    }
40445    toggle() {
40446      if (this._isShown()) {
40447        this.hide();
40448      } else {
40449        this.show();
40450      }
40451    }
40452    show() {
40453      if (this._isTransitioning || this._isShown()) {
40454        return;
40455      }
40456      let activeChildren = [];
40457      if (this._config.parent) {
40458        activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((element) => element !== this._element).map((element) => Collapse.getOrCreateInstance(element, {
40459          toggle: false
40460        }));
40461      }
40462      if (activeChildren.length && activeChildren[0]._isTransitioning) {
40463        return;
40464      }
40465      const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
40466      if (startEvent.defaultPrevented) {
40467        return;
40468      }
40469      for (const activeInstance of activeChildren) {
40470        activeInstance.hide();
40471      }
40472      const dimension = this._getDimension();
40473      this._element.classList.remove(CLASS_NAME_COLLAPSE);
40474      this._element.classList.add(CLASS_NAME_COLLAPSING);
40475      this._element.style[dimension] = 0;
40476      this._addAriaAndCollapsedClass(this._triggerArray, true);
40477      this._isTransitioning = true;
40478      const complete = () => {
40479        this._isTransitioning = false;
40480        this._element.classList.remove(CLASS_NAME_COLLAPSING);
40481        this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
40482        this._element.style[dimension] = "";
40483        EventHandler.trigger(this._element, EVENT_SHOWN$6);
40484      };
40485      const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
40486      const scrollSize = `scroll${capitalizedDimension}`;
40487      this._queueCallback(complete, this._element, true);
40488      this._element.style[dimension] = `${this._element[scrollSize]}px`;
40489    }
40490    hide() {
40491      if (this._isTransitioning || !this._isShown()) {
40492        return;
40493      }
40494      const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
40495      if (startEvent.defaultPrevented) {
40496        return;
40497      }
40498      const dimension = this._getDimension();
40499      this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
40500      reflow(this._element);
40501      this._element.classList.add(CLASS_NAME_COLLAPSING);
40502      this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
40503      for (const trigger of this._triggerArray) {
40504        const element = SelectorEngine.getElementFromSelector(trigger);
40505        if (element && !this._isShown(element)) {
40506          this._addAriaAndCollapsedClass([trigger], false);
40507        }
40508      }
40509      this._isTransitioning = true;
40510      const complete = () => {
40511        this._isTransitioning = false;
40512        this._element.classList.remove(CLASS_NAME_COLLAPSING);
40513        this._element.classList.add(CLASS_NAME_COLLAPSE);
40514        EventHandler.trigger(this._element, EVENT_HIDDEN$6);
40515      };
40516      this._element.style[dimension] = "";
40517      this._queueCallback(complete, this._element, true);
40518    }
40519    _isShown(element = this._element) {
40520      return element.classList.contains(CLASS_NAME_SHOW$7);
40521    }
40522    _configAfterMerge(config2) {
40523      config2.toggle = Boolean(config2.toggle);
40524      config2.parent = getElement(config2.parent);
40525      return config2;
40526    }
40527    _getDimension() {
40528      return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
40529    }
40530    _initializeChildren() {
40531      if (!this._config.parent) {
40532        return;
40533      }
40534      const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
40535      for (const element of children) {
40536        const selected = SelectorEngine.getElementFromSelector(element);
40537        if (selected) {
40538          this._addAriaAndCollapsedClass([element], this._isShown(selected));
40539        }
40540      }
40541    }
40542    _getFirstLevelChildren(selector) {
40543      const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
40544      return SelectorEngine.find(selector, this._config.parent).filter((element) => !children.includes(element));
40545    }
40546    _addAriaAndCollapsedClass(triggerArray, isOpen) {
40547      if (!triggerArray.length) {
40548        return;
40549      }
40550      for (const element of triggerArray) {
40551        element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
40552        element.setAttribute("aria-expanded", isOpen);
40553      }
40554    }
40555    static jQueryInterface(config2) {
40556      const _config = {};
40557      if (typeof config2 === "string" && /show|hide/.test(config2)) {
40558        _config.toggle = false;
40559      }
40560      return this.each(function() {
40561        const data = Collapse.getOrCreateInstance(this, _config);
40562        if (typeof config2 === "string") {
40563          if (typeof data[config2] === "undefined") {
40564            throw new TypeError(`No method named "${config2}"`);
40565          }
40566          data[config2]();
40567        }
40568      });
40569    }
40570  };
40571  EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function(event2) {
40572    if (event2.target.tagName === "A" || event2.delegateTarget && event2.delegateTarget.tagName === "A") {
40573      event2.preventDefault();
40574    }
40575    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
40576      Collapse.getOrCreateInstance(element, {
40577        toggle: false
40578      }).toggle();
40579    }
40580  });
40581  defineJQueryPlugin(Collapse);
40582  var NAME$a = "dropdown";
40583  var DATA_KEY$6 = "bs.dropdown";
40584  var EVENT_KEY$6 = `.${DATA_KEY$6}`;
40585  var DATA_API_KEY$3 = ".data-api";
40586  var ESCAPE_KEY$2 = "Escape";
40587  var TAB_KEY$1 = "Tab";
40588  var ARROW_UP_KEY$1 = "ArrowUp";
40589  var ARROW_DOWN_KEY$1 = "ArrowDown";
40590  var RIGHT_MOUSE_BUTTON = 2;
40591  var EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;
40592  var EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;
40593  var EVENT_SHOW$5 = `show${EVENT_KEY$6}`;
40594  var EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;
40595  var EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;
40596  var EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;
40597  var EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;
40598  var CLASS_NAME_SHOW$6 = "show";
40599  var CLASS_NAME_DROPUP = "dropup";
40600  var CLASS_NAME_DROPEND = "dropend";
40601  var CLASS_NAME_DROPSTART = "dropstart";
40602  var CLASS_NAME_DROPUP_CENTER = "dropup-center";
40603  var CLASS_NAME_DROPDOWN_CENTER = "dropdown-center";
40604  var SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)';
40605  var SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;
40606  var SELECTOR_MENU = ".dropdown-menu";
40607  var SELECTOR_NAVBAR = ".navbar";
40608  var SELECTOR_NAVBAR_NAV = ".navbar-nav";
40609  var SELECTOR_VISIBLE_ITEMS = ".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)";
40610  var PLACEMENT_TOP = isRTL() ? "top-end" : "top-start";
40611  var PLACEMENT_TOPEND = isRTL() ? "top-start" : "top-end";
40612  var PLACEMENT_BOTTOM = isRTL() ? "bottom-end" : "bottom-start";
40613  var PLACEMENT_BOTTOMEND = isRTL() ? "bottom-start" : "bottom-end";
40614  var PLACEMENT_RIGHT = isRTL() ? "left-start" : "right-start";
40615  var PLACEMENT_LEFT = isRTL() ? "right-start" : "left-start";
40616  var PLACEMENT_TOPCENTER = "top";
40617  var PLACEMENT_BOTTOMCENTER = "bottom";
40618  var Default$9 = {
40619    autoClose: true,
40620    boundary: "clippingParents",
40621    display: "dynamic",
40622    offset: [0, 2],
40623    popperConfig: null,
40624    reference: "toggle"
40625  };
40626  var DefaultType$9 = {
40627    autoClose: "(boolean|string)",
40628    boundary: "(string|element)",
40629    display: "string",
40630    offset: "(array|string|function)",
40631    popperConfig: "(null|object|function)",
40632    reference: "(string|element|object)"
40633  };
40634  var Dropdown = class extends BaseComponent2 {
40635    constructor(element, config2) {
40636      super(element, config2);
40637      this._popper = null;
40638      this._parent = this._element.parentNode;
40639      this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
40640      this._inNavbar = this._detectNavbar();
40641    }
40642    static get Default() {
40643      return Default$9;
40644    }
40645    static get DefaultType() {
40646      return DefaultType$9;
40647    }
40648    static get NAME() {
40649      return NAME$a;
40650    }
40651    toggle() {
40652      return this._isShown() ? this.hide() : this.show();
40653    }
40654    show() {
40655      if (isDisabled(this._element) || this._isShown()) {
40656        return;
40657      }
40658      const relatedTarget = {
40659        relatedTarget: this._element
40660      };
40661      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
40662      if (showEvent.defaultPrevented) {
40663        return;
40664      }
40665      this._createPopper();
40666      if ("ontouchstart" in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
40667        for (const element of [].concat(...document.body.children)) {
40668          EventHandler.on(element, "mouseover", noop);
40669        }
40670      }
40671      this._element.focus();
40672      this._element.setAttribute("aria-expanded", true);
40673      this._menu.classList.add(CLASS_NAME_SHOW$6);
40674      this._element.classList.add(CLASS_NAME_SHOW$6);
40675      EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
40676    }
40677    hide() {
40678      if (isDisabled(this._element) || !this._isShown()) {
40679        return;
40680      }
40681      const relatedTarget = {
40682        relatedTarget: this._element
40683      };
40684      this._completeHide(relatedTarget);
40685    }
40686    dispose() {
40687      if (this._popper) {
40688        this._popper.destroy();
40689      }
40690      super.dispose();
40691    }
40692    update() {
40693      this._inNavbar = this._detectNavbar();
40694      if (this._popper) {
40695        this._popper.update();
40696      }
40697    }
40698    _completeHide(relatedTarget) {
40699      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
40700      if (hideEvent.defaultPrevented) {
40701        return;
40702      }
40703      if ("ontouchstart" in document.documentElement) {
40704        for (const element of [].concat(...document.body.children)) {
40705          EventHandler.off(element, "mouseover", noop);
40706        }
40707      }
40708      if (this._popper) {
40709        this._popper.destroy();
40710      }
40711      this._menu.classList.remove(CLASS_NAME_SHOW$6);
40712      this._element.classList.remove(CLASS_NAME_SHOW$6);
40713      this._element.setAttribute("aria-expanded", "false");
40714      Manipulator.removeDataAttribute(this._menu, "popper");
40715      EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
40716    }
40717    _getConfig(config2) {
40718      config2 = super._getConfig(config2);
40719      if (typeof config2.reference === "object" && !isElement2(config2.reference) && typeof config2.reference.getBoundingClientRect !== "function") {
40720        throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
40721      }
40722      return config2;
40723    }
40724    _createPopper() {
40725      if (typeof lib_exports === "undefined") {
40726        throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");
40727      }
40728      let referenceElement = this._element;
40729      if (this._config.reference === "parent") {
40730        referenceElement = this._parent;
40731      } else if (isElement2(this._config.reference)) {
40732        referenceElement = getElement(this._config.reference);
40733      } else if (typeof this._config.reference === "object") {
40734        referenceElement = this._config.reference;
40735      }
40736      const popperConfig = this._getPopperConfig();
40737      this._popper = createPopper3(referenceElement, this._menu, popperConfig);
40738    }
40739    _isShown() {
40740      return this._menu.classList.contains(CLASS_NAME_SHOW$6);
40741    }
40742    _getPlacement() {
40743      const parentDropdown = this._parent;
40744      if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
40745        return PLACEMENT_RIGHT;
40746      }
40747      if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
40748        return PLACEMENT_LEFT;
40749      }
40750      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
40751        return PLACEMENT_TOPCENTER;
40752      }
40753      if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
40754        return PLACEMENT_BOTTOMCENTER;
40755      }
40756      const isEnd = getComputedStyle(this._menu).getPropertyValue("--bs-position").trim() === "end";
40757      if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
40758        return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
40759      }
40760      return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
40761    }
40762    _detectNavbar() {
40763      return this._element.closest(SELECTOR_NAVBAR) !== null;
40764    }
40765    _getOffset() {
40766      const {
40767        offset: offset2
40768      } = this._config;
40769      if (typeof offset2 === "string") {
40770        return offset2.split(",").map((value) => Number.parseInt(value, 10));
40771      }
40772      if (typeof offset2 === "function") {
40773        return (popperData) => offset2(popperData, this._element);
40774      }
40775      return offset2;
40776    }
40777    _getPopperConfig() {
40778      const defaultBsPopperConfig = {
40779        placement: this._getPlacement(),
40780        modifiers: [{
40781          name: "preventOverflow",
40782          options: {
40783            boundary: this._config.boundary
40784          }
40785        }, {
40786          name: "offset",
40787          options: {
40788            offset: this._getOffset()
40789          }
40790        }]
40791      };
40792      if (this._inNavbar || this._config.display === "static") {
40793        Manipulator.setDataAttribute(this._menu, "popper", "static");
40794        defaultBsPopperConfig.modifiers = [{
40795          name: "applyStyles",
40796          enabled: false
40797        }];
40798      }
40799      return {
40800        ...defaultBsPopperConfig,
40801        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
40802      };
40803    }
40804    _selectMenuItem({
40805      key,
40806      target
40807    }) {
40808      const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter((element) => isVisible(element));
40809      if (!items.length) {
40810        return;
40811      }
40812      getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
40813    }
40814    static jQueryInterface(config2) {
40815      return this.each(function() {
40816        const data = Dropdown.getOrCreateInstance(this, config2);
40817        if (typeof config2 !== "string") {
40818          return;
40819        }
40820        if (typeof data[config2] === "undefined") {
40821          throw new TypeError(`No method named "${config2}"`);
40822        }
40823        data[config2]();
40824      });
40825    }
40826    static clearMenus(event2) {
40827      if (event2.button === RIGHT_MOUSE_BUTTON || event2.type === "keyup" && event2.key !== TAB_KEY$1) {
40828        return;
40829      }
40830      const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
40831      for (const toggle of openToggles) {
40832        const context = Dropdown.getInstance(toggle);
40833        if (!context || context._config.autoClose === false) {
40834          continue;
40835        }
40836        const composedPath = event2.composedPath();
40837        const isMenuTarget = composedPath.includes(context._menu);
40838        if (composedPath.includes(context._element) || context._config.autoClose === "inside" && !isMenuTarget || context._config.autoClose === "outside" && isMenuTarget) {
40839          continue;
40840        }
40841        if (context._menu.contains(event2.target) && (event2.type === "keyup" && event2.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event2.target.tagName))) {
40842          continue;
40843        }
40844        const relatedTarget = {
40845          relatedTarget: context._element
40846        };
40847        if (event2.type === "click") {
40848          relatedTarget.clickEvent = event2;
40849        }
40850        context._completeHide(relatedTarget);
40851      }
40852    }
40853    static dataApiKeydownHandler(event2) {
40854      const isInput = /input|textarea/i.test(event2.target.tagName);
40855      const isEscapeEvent = event2.key === ESCAPE_KEY$2;
40856      const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event2.key);
40857      if (!isUpOrDownEvent && !isEscapeEvent) {
40858        return;
40859      }
40860      if (isInput && !isEscapeEvent) {
40861        return;
40862      }
40863      event2.preventDefault();
40864      const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event2.delegateTarget.parentNode);
40865      const instance = Dropdown.getOrCreateInstance(getToggleButton);
40866      if (isUpOrDownEvent) {
40867        event2.stopPropagation();
40868        instance.show();
40869        instance._selectMenuItem(event2);
40870        return;
40871      }
40872      if (instance._isShown()) {
40873        event2.stopPropagation();
40874        instance.hide();
40875        getToggleButton.focus();
40876      }
40877    }
40878  };
40879  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
40880  EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
40881  EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
40882  EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
40883  EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function(event2) {
40884    event2.preventDefault();
40885    Dropdown.getOrCreateInstance(this).toggle();
40886  });
40887  defineJQueryPlugin(Dropdown);
40888  var NAME$9 = "backdrop";
40889  var CLASS_NAME_FADE$4 = "fade";
40890  var CLASS_NAME_SHOW$5 = "show";
40891  var EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;
40892  var Default$8 = {
40893    className: "modal-backdrop",
40894    clickCallback: null,
40895    isAnimated: false,
40896    isVisible: true,
40897    rootElement: "body"
40898  };
40899  var DefaultType$8 = {
40900    className: "string",
40901    clickCallback: "(function|null)",
40902    isAnimated: "boolean",
40903    isVisible: "boolean",
40904    rootElement: "(element|string)"
40905  };
40906  var Backdrop = class extends Config {
40907    constructor(config2) {
40908      super();
40909      this._config = this._getConfig(config2);
40910      this._isAppended = false;
40911      this._element = null;
40912    }
40913    static get Default() {
40914      return Default$8;
40915    }
40916    static get DefaultType() {
40917      return DefaultType$8;
40918    }
40919    static get NAME() {
40920      return NAME$9;
40921    }
40922    show(callback) {
40923      if (!this._config.isVisible) {
40924        execute(callback);
40925        return;
40926      }
40927      this._append();
40928      const element = this._getElement();
40929      if (this._config.isAnimated) {
40930        reflow(element);
40931      }
40932      element.classList.add(CLASS_NAME_SHOW$5);
40933      this._emulateAnimation(() => {
40934        execute(callback);
40935      });
40936    }
40937    hide(callback) {
40938      if (!this._config.isVisible) {
40939        execute(callback);
40940        return;
40941      }
40942      this._getElement().classList.remove(CLASS_NAME_SHOW$5);
40943      this._emulateAnimation(() => {
40944        this.dispose();
40945        execute(callback);
40946      });
40947    }
40948    dispose() {
40949      if (!this._isAppended) {
40950        return;
40951      }
40952      EventHandler.off(this._element, EVENT_MOUSEDOWN);
40953      this._element.remove();
40954      this._isAppended = false;
40955    }
40956    _getElement() {
40957      if (!this._element) {
40958        const backdrop = document.createElement("div");
40959        backdrop.className = this._config.className;
40960        if (this._config.isAnimated) {
40961          backdrop.classList.add(CLASS_NAME_FADE$4);
40962        }
40963        this._element = backdrop;
40964      }
40965      return this._element;
40966    }
40967    _configAfterMerge(config2) {
40968      config2.rootElement = getElement(config2.rootElement);
40969      return config2;
40970    }
40971    _append() {
40972      if (this._isAppended) {
40973        return;
40974      }
40975      const element = this._getElement();
40976      this._config.rootElement.append(element);
40977      EventHandler.on(element, EVENT_MOUSEDOWN, () => {
40978        execute(this._config.clickCallback);
40979      });
40980      this._isAppended = true;
40981    }
40982    _emulateAnimation(callback) {
40983      executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
40984    }
40985  };
40986  var NAME$8 = "focustrap";
40987  var DATA_KEY$5 = "bs.focustrap";
40988  var EVENT_KEY$5 = `.${DATA_KEY$5}`;
40989  var EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;
40990  var EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;
40991  var TAB_KEY = "Tab";
40992  var TAB_NAV_FORWARD = "forward";
40993  var TAB_NAV_BACKWARD = "backward";
40994  var Default$7 = {
40995    autofocus: true,
40996    trapElement: null
40997  };
40998  var DefaultType$7 = {
40999    autofocus: "boolean",
41000    trapElement: "element"
41001  };
41002  var FocusTrap = class extends Config {
41003    constructor(config2) {
41004      super();
41005      this._config = this._getConfig(config2);
41006      this._isActive = false;
41007      this._lastTabNavDirection = null;
41008    }
41009    static get Default() {
41010      return Default$7;
41011    }
41012    static get DefaultType() {
41013      return DefaultType$7;
41014    }
41015    static get NAME() {
41016      return NAME$8;
41017    }
41018    activate() {
41019      if (this._isActive) {
41020        return;
41021      }
41022      if (this._config.autofocus) {
41023        this._config.trapElement.focus();
41024      }
41025      EventHandler.off(document, EVENT_KEY$5);
41026      EventHandler.on(document, EVENT_FOCUSIN$2, (event2) => this._handleFocusin(event2));
41027      EventHandler.on(document, EVENT_KEYDOWN_TAB, (event2) => this._handleKeydown(event2));
41028      this._isActive = true;
41029    }
41030    deactivate() {
41031      if (!this._isActive) {
41032        return;
41033      }
41034      this._isActive = false;
41035      EventHandler.off(document, EVENT_KEY$5);
41036    }
41037    _handleFocusin(event2) {
41038      const {
41039        trapElement
41040      } = this._config;
41041      if (event2.target === document || event2.target === trapElement || trapElement.contains(event2.target)) {
41042        return;
41043      }
41044      const elements = SelectorEngine.focusableChildren(trapElement);
41045      if (elements.length === 0) {
41046        trapElement.focus();
41047      } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
41048        elements[elements.length - 1].focus();
41049      } else {
41050        elements[0].focus();
41051      }
41052    }
41053    _handleKeydown(event2) {
41054      if (event2.key !== TAB_KEY) {
41055        return;
41056      }
41057      this._lastTabNavDirection = event2.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
41058    }
41059  };
41060  var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
41061  var SELECTOR_STICKY_CONTENT = ".sticky-top";
41062  var PROPERTY_PADDING = "padding-right";
41063  var PROPERTY_MARGIN = "margin-right";
41064  var ScrollBarHelper = class {
41065    constructor() {
41066      this._element = document.body;
41067    }
41068    getWidth() {
41069      const documentWidth = document.documentElement.clientWidth;
41070      return Math.abs(window.innerWidth - documentWidth);
41071    }
41072    hide() {
41073      const width = this.getWidth();
41074      this._disableOverFlow();
41075      this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
41076      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
41077      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width);
41078    }
41079    reset() {
41080      this._resetElementAttributes(this._element, "overflow");
41081      this._resetElementAttributes(this._element, PROPERTY_PADDING);
41082      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
41083      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
41084    }
41085    isOverflowing() {
41086      return this.getWidth() > 0;
41087    }
41088    _disableOverFlow() {
41089      this._saveInitialAttribute(this._element, "overflow");
41090      this._element.style.overflow = "hidden";
41091    }
41092    _setElementAttributes(selector, styleProperty, callback) {
41093      const scrollbarWidth = this.getWidth();
41094      const manipulationCallBack = (element) => {
41095        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
41096          return;
41097        }
41098        this._saveInitialAttribute(element, styleProperty);
41099        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
41100        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
41101      };
41102      this._applyManipulationCallback(selector, manipulationCallBack);
41103    }
41104    _saveInitialAttribute(element, styleProperty) {
41105      const actualValue = element.style.getPropertyValue(styleProperty);
41106      if (actualValue) {
41107        Manipulator.setDataAttribute(element, styleProperty, actualValue);
41108      }
41109    }
41110    _resetElementAttributes(selector, styleProperty) {
41111      const manipulationCallBack = (element) => {
41112        const value = Manipulator.getDataAttribute(element, styleProperty);
41113        if (value === null) {
41114          element.style.removeProperty(styleProperty);
41115          return;
41116        }
41117        Manipulator.removeDataAttribute(element, styleProperty);
41118        element.style.setProperty(styleProperty, value);
41119      };
41120      this._applyManipulationCallback(selector, manipulationCallBack);
41121    }
41122    _applyManipulationCallback(selector, callBack) {
41123      if (isElement2(selector)) {
41124        callBack(selector);
41125        return;
41126      }
41127      for (const sel of SelectorEngine.find(selector, this._element)) {
41128        callBack(sel);
41129      }
41130    }
41131  };
41132  var NAME$7 = "modal";
41133  var DATA_KEY$4 = "bs.modal";
41134  var EVENT_KEY$4 = `.${DATA_KEY$4}`;
41135  var DATA_API_KEY$2 = ".data-api";
41136  var ESCAPE_KEY$1 = "Escape";
41137  var EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;
41138  var EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;
41139  var EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;
41140  var EVENT_SHOW$4 = `show${EVENT_KEY$4}`;
41141  var EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;
41142  var EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;
41143  var EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;
41144  var EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;
41145  var EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;
41146  var EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;
41147  var CLASS_NAME_OPEN = "modal-open";
41148  var CLASS_NAME_FADE$3 = "fade";
41149  var CLASS_NAME_SHOW$4 = "show";
41150  var CLASS_NAME_STATIC = "modal-static";
41151  var OPEN_SELECTOR$1 = ".modal.show";
41152  var SELECTOR_DIALOG = ".modal-dialog";
41153  var SELECTOR_MODAL_BODY = ".modal-body";
41154  var SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]';
41155  var Default$6 = {
41156    backdrop: true,
41157    focus: true,
41158    keyboard: true
41159  };
41160  var DefaultType$6 = {
41161    backdrop: "(boolean|string)",
41162    focus: "boolean",
41163    keyboard: "boolean"
41164  };
41165  var Modal = class extends BaseComponent2 {
41166    constructor(element, config2) {
41167      super(element, config2);
41168      this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
41169      this._backdrop = this._initializeBackDrop();
41170      this._focustrap = this._initializeFocusTrap();
41171      this._isShown = false;
41172      this._isTransitioning = false;
41173      this._scrollBar = new ScrollBarHelper();
41174      this._addEventListeners();
41175    }
41176    static get Default() {
41177      return Default$6;
41178    }
41179    static get DefaultType() {
41180      return DefaultType$6;
41181    }
41182    static get NAME() {
41183      return NAME$7;
41184    }
41185    toggle(relatedTarget) {
41186      return this._isShown ? this.hide() : this.show(relatedTarget);
41187    }
41188    show(relatedTarget) {
41189      if (this._isShown || this._isTransitioning) {
41190        return;
41191      }
41192      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
41193        relatedTarget
41194      });
41195      if (showEvent.defaultPrevented) {
41196        return;
41197      }
41198      this._isShown = true;
41199      this._isTransitioning = true;
41200      this._scrollBar.hide();
41201      document.body.classList.add(CLASS_NAME_OPEN);
41202      this._adjustDialog();
41203      this._backdrop.show(() => this._showElement(relatedTarget));
41204    }
41205    hide() {
41206      if (!this._isShown || this._isTransitioning) {
41207        return;
41208      }
41209      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
41210      if (hideEvent.defaultPrevented) {
41211        return;
41212      }
41213      this._isShown = false;
41214      this._isTransitioning = true;
41215      this._focustrap.deactivate();
41216      this._element.classList.remove(CLASS_NAME_SHOW$4);
41217      this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
41218    }
41219    dispose() {
41220      EventHandler.off(window, EVENT_KEY$4);
41221      EventHandler.off(this._dialog, EVENT_KEY$4);
41222      this._backdrop.dispose();
41223      this._focustrap.deactivate();
41224      super.dispose();
41225    }
41226    handleUpdate() {
41227      this._adjustDialog();
41228    }
41229    _initializeBackDrop() {
41230      return new Backdrop({
41231        isVisible: Boolean(this._config.backdrop),
41232        isAnimated: this._isAnimated()
41233      });
41234    }
41235    _initializeFocusTrap() {
41236      return new FocusTrap({
41237        trapElement: this._element
41238      });
41239    }
41240    _showElement(relatedTarget) {
41241      if (!document.body.contains(this._element)) {
41242        document.body.append(this._element);
41243      }
41244      this._element.style.display = "block";
41245      this._element.removeAttribute("aria-hidden");
41246      this._element.setAttribute("aria-modal", true);
41247      this._element.setAttribute("role", "dialog");
41248      this._element.scrollTop = 0;
41249      const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
41250      if (modalBody) {
41251        modalBody.scrollTop = 0;
41252      }
41253      reflow(this._element);
41254      this._element.classList.add(CLASS_NAME_SHOW$4);
41255      const transitionComplete = () => {
41256        if (this._config.focus) {
41257          this._focustrap.activate();
41258        }
41259        this._isTransitioning = false;
41260        EventHandler.trigger(this._element, EVENT_SHOWN$4, {
41261          relatedTarget
41262        });
41263      };
41264      this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
41265    }
41266    _addEventListeners() {
41267      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, (event2) => {
41268        if (event2.key !== ESCAPE_KEY$1) {
41269          return;
41270        }
41271        if (this._config.keyboard) {
41272          this.hide();
41273          return;
41274        }
41275        this._triggerBackdropTransition();
41276      });
41277      EventHandler.on(window, EVENT_RESIZE$1, () => {
41278        if (this._isShown && !this._isTransitioning) {
41279          this._adjustDialog();
41280        }
41281      });
41282      EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, (event2) => {
41283        EventHandler.one(this._element, EVENT_CLICK_DISMISS, (event22) => {
41284          if (this._element !== event2.target || this._element !== event22.target) {
41285            return;
41286          }
41287          if (this._config.backdrop === "static") {
41288            this._triggerBackdropTransition();
41289            return;
41290          }
41291          if (this._config.backdrop) {
41292            this.hide();
41293          }
41294        });
41295      });
41296    }
41297    _hideModal() {
41298      this._element.style.display = "none";
41299      this._element.setAttribute("aria-hidden", true);
41300      this._element.removeAttribute("aria-modal");
41301      this._element.removeAttribute("role");
41302      this._isTransitioning = false;
41303      this._backdrop.hide(() => {
41304        document.body.classList.remove(CLASS_NAME_OPEN);
41305        this._resetAdjustments();
41306        this._scrollBar.reset();
41307        EventHandler.trigger(this._element, EVENT_HIDDEN$4);
41308      });
41309    }
41310    _isAnimated() {
41311      return this._element.classList.contains(CLASS_NAME_FADE$3);
41312    }
41313    _triggerBackdropTransition() {
41314      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
41315      if (hideEvent.defaultPrevented) {
41316        return;
41317      }
41318      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
41319      const initialOverflowY = this._element.style.overflowY;
41320      if (initialOverflowY === "hidden" || this._element.classList.contains(CLASS_NAME_STATIC)) {
41321        return;
41322      }
41323      if (!isModalOverflowing) {
41324        this._element.style.overflowY = "hidden";
41325      }
41326      this._element.classList.add(CLASS_NAME_STATIC);
41327      this._queueCallback(() => {
41328        this._element.classList.remove(CLASS_NAME_STATIC);
41329        this._queueCallback(() => {
41330          this._element.style.overflowY = initialOverflowY;
41331        }, this._dialog);
41332      }, this._dialog);
41333      this._element.focus();
41334    }
41335    _adjustDialog() {
41336      const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
41337      const scrollbarWidth = this._scrollBar.getWidth();
41338      const isBodyOverflowing = scrollbarWidth > 0;
41339      if (isBodyOverflowing && !isModalOverflowing) {
41340        const property = isRTL() ? "paddingLeft" : "paddingRight";
41341        this._element.style[property] = `${scrollbarWidth}px`;
41342      }
41343      if (!isBodyOverflowing && isModalOverflowing) {
41344        const property = isRTL() ? "paddingRight" : "paddingLeft";
41345        this._element.style[property] = `${scrollbarWidth}px`;
41346      }
41347    }
41348    _resetAdjustments() {
41349      this._element.style.paddingLeft = "";
41350      this._element.style.paddingRight = "";
41351    }
41352    static jQueryInterface(config2, relatedTarget) {
41353      return this.each(function() {
41354        const data = Modal.getOrCreateInstance(this, config2);
41355        if (typeof config2 !== "string") {
41356          return;
41357        }
41358        if (typeof data[config2] === "undefined") {
41359          throw new TypeError(`No method named "${config2}"`);
41360        }
41361        data[config2](relatedTarget);
41362      });
41363    }
41364  };
41365  EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function(event2) {
41366    const target = SelectorEngine.getElementFromSelector(this);
41367    if (["A", "AREA"].includes(this.tagName)) {
41368      event2.preventDefault();
41369    }
41370    EventHandler.one(target, EVENT_SHOW$4, (showEvent) => {
41371      if (showEvent.defaultPrevented) {
41372        return;
41373      }
41374      EventHandler.one(target, EVENT_HIDDEN$4, () => {
41375        if (isVisible(this)) {
41376          this.focus();
41377        }
41378      });
41379    });
41380    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
41381    if (alreadyOpen) {
41382      Modal.getInstance(alreadyOpen).hide();
41383    }
41384    const data = Modal.getOrCreateInstance(target);
41385    data.toggle(this);
41386  });
41387  enableDismissTrigger(Modal);
41388  defineJQueryPlugin(Modal);
41389  var NAME$6 = "offcanvas";
41390  var DATA_KEY$3 = "bs.offcanvas";
41391  var EVENT_KEY$3 = `.${DATA_KEY$3}`;
41392  var DATA_API_KEY$1 = ".data-api";
41393  var EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;
41394  var ESCAPE_KEY = "Escape";
41395  var CLASS_NAME_SHOW$3 = "show";
41396  var CLASS_NAME_SHOWING$1 = "showing";
41397  var CLASS_NAME_HIDING = "hiding";
41398  var CLASS_NAME_BACKDROP = "offcanvas-backdrop";
41399  var OPEN_SELECTOR = ".offcanvas.show";
41400  var EVENT_SHOW$3 = `show${EVENT_KEY$3}`;
41401  var EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;
41402  var EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;
41403  var EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;
41404  var EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;
41405  var EVENT_RESIZE = `resize${EVENT_KEY$3}`;
41406  var EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;
41407  var EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;
41408  var SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]';
41409  var Default$5 = {
41410    backdrop: true,
41411    keyboard: true,
41412    scroll: false
41413  };
41414  var DefaultType$5 = {
41415    backdrop: "(boolean|string)",
41416    keyboard: "boolean",
41417    scroll: "boolean"
41418  };
41419  var Offcanvas = class extends BaseComponent2 {
41420    constructor(element, config2) {
41421      super(element, config2);
41422      this._isShown = false;
41423      this._backdrop = this._initializeBackDrop();
41424      this._focustrap = this._initializeFocusTrap();
41425      this._addEventListeners();
41426    }
41427    static get Default() {
41428      return Default$5;
41429    }
41430    static get DefaultType() {
41431      return DefaultType$5;
41432    }
41433    static get NAME() {
41434      return NAME$6;
41435    }
41436    toggle(relatedTarget) {
41437      return this._isShown ? this.hide() : this.show(relatedTarget);
41438    }
41439    show(relatedTarget) {
41440      if (this._isShown) {
41441        return;
41442      }
41443      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
41444        relatedTarget
41445      });
41446      if (showEvent.defaultPrevented) {
41447        return;
41448      }
41449      this._isShown = true;
41450      this._backdrop.show();
41451      if (!this._config.scroll) {
41452        new ScrollBarHelper().hide();
41453      }
41454      this._element.setAttribute("aria-modal", true);
41455      this._element.setAttribute("role", "dialog");
41456      this._element.classList.add(CLASS_NAME_SHOWING$1);
41457      const completeCallBack = () => {
41458        if (!this._config.scroll || this._config.backdrop) {
41459          this._focustrap.activate();
41460        }
41461        this._element.classList.add(CLASS_NAME_SHOW$3);
41462        this._element.classList.remove(CLASS_NAME_SHOWING$1);
41463        EventHandler.trigger(this._element, EVENT_SHOWN$3, {
41464          relatedTarget
41465        });
41466      };
41467      this._queueCallback(completeCallBack, this._element, true);
41468    }
41469    hide() {
41470      if (!this._isShown) {
41471        return;
41472      }
41473      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
41474      if (hideEvent.defaultPrevented) {
41475        return;
41476      }
41477      this._focustrap.deactivate();
41478      this._element.blur();
41479      this._isShown = false;
41480      this._element.classList.add(CLASS_NAME_HIDING);
41481      this._backdrop.hide();
41482      const completeCallback = () => {
41483        this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
41484        this._element.removeAttribute("aria-modal");
41485        this._element.removeAttribute("role");
41486        if (!this._config.scroll) {
41487          new ScrollBarHelper().reset();
41488        }
41489        EventHandler.trigger(this._element, EVENT_HIDDEN$3);
41490      };
41491      this._queueCallback(completeCallback, this._element, true);
41492    }
41493    dispose() {
41494      this._backdrop.dispose();
41495      this._focustrap.deactivate();
41496      super.dispose();
41497    }
41498    _initializeBackDrop() {
41499      const clickCallback = () => {
41500        if (this._config.backdrop === "static") {
41501          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
41502          return;
41503        }
41504        this.hide();
41505      };
41506      const isVisible2 = Boolean(this._config.backdrop);
41507      return new Backdrop({
41508        className: CLASS_NAME_BACKDROP,
41509        isVisible: isVisible2,
41510        isAnimated: true,
41511        rootElement: this._element.parentNode,
41512        clickCallback: isVisible2 ? clickCallback : null
41513      });
41514    }
41515    _initializeFocusTrap() {
41516      return new FocusTrap({
41517        trapElement: this._element
41518      });
41519    }
41520    _addEventListeners() {
41521      EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, (event2) => {
41522        if (event2.key !== ESCAPE_KEY) {
41523          return;
41524        }
41525        if (this._config.keyboard) {
41526          this.hide();
41527          return;
41528        }
41529        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
41530      });
41531    }
41532    static jQueryInterface(config2) {
41533      return this.each(function() {
41534        const data = Offcanvas.getOrCreateInstance(this, config2);
41535        if (typeof config2 !== "string") {
41536          return;
41537        }
41538        if (data[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") {
41539          throw new TypeError(`No method named "${config2}"`);
41540        }
41541        data[config2](this);
41542      });
41543    }
41544  };
41545  EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function(event2) {
41546    const target = SelectorEngine.getElementFromSelector(this);
41547    if (["A", "AREA"].includes(this.tagName)) {
41548      event2.preventDefault();
41549    }
41550    if (isDisabled(this)) {
41551      return;
41552    }
41553    EventHandler.one(target, EVENT_HIDDEN$3, () => {
41554      if (isVisible(this)) {
41555        this.focus();
41556      }
41557    });
41558    const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
41559    if (alreadyOpen && alreadyOpen !== target) {
41560      Offcanvas.getInstance(alreadyOpen).hide();
41561    }
41562    const data = Offcanvas.getOrCreateInstance(target);
41563    data.toggle(this);
41564  });
41565  EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {
41566    for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
41567      Offcanvas.getOrCreateInstance(selector).show();
41568    }
41569  });
41570  EventHandler.on(window, EVENT_RESIZE, () => {
41571    for (const element of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]")) {
41572      if (getComputedStyle(element).position !== "fixed") {
41573        Offcanvas.getOrCreateInstance(element).hide();
41574      }
41575    }
41576  });
41577  enableDismissTrigger(Offcanvas);
41578  defineJQueryPlugin(Offcanvas);
41579  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
41580  var DefaultAllowlist = {
41581    "*": ["class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN],
41582    a: ["target", "href", "title", "rel"],
41583    area: [],
41584    b: [],
41585    br: [],
41586    col: [],
41587    code: [],
41588    dd: [],
41589    div: [],
41590    dl: [],
41591    dt: [],
41592    em: [],
41593    hr: [],
41594    h1: [],
41595    h2: [],
41596    h3: [],
41597    h4: [],
41598    h5: [],
41599    h6: [],
41600    i: [],
41601    img: ["src", "srcset", "alt", "title", "width", "height"],
41602    li: [],
41603    ol: [],
41604    p: [],
41605    pre: [],
41606    s: [],
41607    small: [],
41608    span: [],
41609    sub: [],
41610    sup: [],
41611    strong: [],
41612    u: [],
41613    ul: []
41614  };
41615  var uriAttributes = /* @__PURE__ */ new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]);
41616  var SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
41617  var allowedAttribute = (attribute, allowedAttributeList) => {
41618    const attributeName = attribute.nodeName.toLowerCase();
41619    if (allowedAttributeList.includes(attributeName)) {
41620      if (uriAttributes.has(attributeName)) {
41621        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
41622      }
41623      return true;
41624    }
41625    return allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp).some((regex) => regex.test(attributeName));
41626  };
41627  function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
41628    if (!unsafeHtml.length) {
41629      return unsafeHtml;
41630    }
41631    if (sanitizeFunction && typeof sanitizeFunction === "function") {
41632      return sanitizeFunction(unsafeHtml);
41633    }
41634    const domParser = new window.DOMParser();
41635    const createdDocument = domParser.parseFromString(unsafeHtml, "text/html");
41636    const elements = [].concat(...createdDocument.body.querySelectorAll("*"));
41637    for (const element of elements) {
41638      const elementName = element.nodeName.toLowerCase();
41639      if (!Object.keys(allowList).includes(elementName)) {
41640        element.remove();
41641        continue;
41642      }
41643      const attributeList = [].concat(...element.attributes);
41644      const allowedAttributes = [].concat(allowList["*"] || [], allowList[elementName] || []);
41645      for (const attribute of attributeList) {
41646        if (!allowedAttribute(attribute, allowedAttributes)) {
41647          element.removeAttribute(attribute.nodeName);
41648        }
41649      }
41650    }
41651    return createdDocument.body.innerHTML;
41652  }
41653  var NAME$5 = "TemplateFactory";
41654  var Default$4 = {
41655    allowList: DefaultAllowlist,
41656    content: {},
41657    extraClass: "",
41658    html: false,
41659    sanitize: true,
41660    sanitizeFn: null,
41661    template: "<div></div>"
41662  };
41663  var DefaultType$4 = {
41664    allowList: "object",
41665    content: "object",
41666    extraClass: "(string|function)",
41667    html: "boolean",
41668    sanitize: "boolean",
41669    sanitizeFn: "(null|function)",
41670    template: "string"
41671  };
41672  var DefaultContentType = {
41673    entry: "(string|element|function|null)",
41674    selector: "(string|element)"
41675  };
41676  var TemplateFactory = class extends Config {
41677    constructor(config2) {
41678      super();
41679      this._config = this._getConfig(config2);
41680    }
41681    static get Default() {
41682      return Default$4;
41683    }
41684    static get DefaultType() {
41685      return DefaultType$4;
41686    }
41687    static get NAME() {
41688      return NAME$5;
41689    }
41690    getContent() {
41691      return Object.values(this._config.content).map((config2) => this._resolvePossibleFunction(config2)).filter(Boolean);
41692    }
41693    hasContent() {
41694      return this.getContent().length > 0;
41695    }
41696    changeContent(content) {
41697      this._checkContent(content);
41698      this._config.content = {
41699        ...this._config.content,
41700        ...content
41701      };
41702      return this;
41703    }
41704    toHtml() {
41705      const templateWrapper = document.createElement("div");
41706      templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
41707      for (const [selector, text] of Object.entries(this._config.content)) {
41708        this._setContent(templateWrapper, text, selector);
41709      }
41710      const template = templateWrapper.children[0];
41711      const extraClass = this._resolvePossibleFunction(this._config.extraClass);
41712      if (extraClass) {
41713        template.classList.add(...extraClass.split(" "));
41714      }
41715      return template;
41716    }
41717    _typeCheckConfig(config2) {
41718      super._typeCheckConfig(config2);
41719      this._checkContent(config2.content);
41720    }
41721    _checkContent(arg) {
41722      for (const [selector, content] of Object.entries(arg)) {
41723        super._typeCheckConfig({
41724          selector,
41725          entry: content
41726        }, DefaultContentType);
41727      }
41728    }
41729    _setContent(template, content, selector) {
41730      const templateElement = SelectorEngine.findOne(selector, template);
41731      if (!templateElement) {
41732        return;
41733      }
41734      content = this._resolvePossibleFunction(content);
41735      if (!content) {
41736        templateElement.remove();
41737        return;
41738      }
41739      if (isElement2(content)) {
41740        this._putElementInTemplate(getElement(content), templateElement);
41741        return;
41742      }
41743      if (this._config.html) {
41744        templateElement.innerHTML = this._maybeSanitize(content);
41745        return;
41746      }
41747      templateElement.textContent = content;
41748    }
41749    _maybeSanitize(arg) {
41750      return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
41751    }
41752    _resolvePossibleFunction(arg) {
41753      return execute(arg, [this]);
41754    }
41755    _putElementInTemplate(element, templateElement) {
41756      if (this._config.html) {
41757        templateElement.innerHTML = "";
41758        templateElement.append(element);
41759        return;
41760      }
41761      templateElement.textContent = element.textContent;
41762    }
41763  };
41764  var NAME$4 = "tooltip";
41765  var DISALLOWED_ATTRIBUTES = /* @__PURE__ */ new Set(["sanitize", "allowList", "sanitizeFn"]);
41766  var CLASS_NAME_FADE$2 = "fade";
41767  var CLASS_NAME_MODAL = "modal";
41768  var CLASS_NAME_SHOW$2 = "show";
41769  var SELECTOR_TOOLTIP_INNER = ".tooltip-inner";
41770  var SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;
41771  var EVENT_MODAL_HIDE = "hide.bs.modal";
41772  var TRIGGER_HOVER = "hover";
41773  var TRIGGER_FOCUS = "focus";
41774  var TRIGGER_CLICK = "click";
41775  var TRIGGER_MANUAL = "manual";
41776  var EVENT_HIDE$2 = "hide";
41777  var EVENT_HIDDEN$2 = "hidden";
41778  var EVENT_SHOW$2 = "show";
41779  var EVENT_SHOWN$2 = "shown";
41780  var EVENT_INSERTED = "inserted";
41781  var EVENT_CLICK$1 = "click";
41782  var EVENT_FOCUSIN$1 = "focusin";
41783  var EVENT_FOCUSOUT$1 = "focusout";
41784  var EVENT_MOUSEENTER = "mouseenter";
41785  var EVENT_MOUSELEAVE = "mouseleave";
41786  var AttachmentMap = {
41787    AUTO: "auto",
41788    TOP: "top",
41789    RIGHT: isRTL() ? "left" : "right",
41790    BOTTOM: "bottom",
41791    LEFT: isRTL() ? "right" : "left"
41792  };
41793  var Default$3 = {
41794    allowList: DefaultAllowlist,
41795    animation: true,
41796    boundary: "clippingParents",
41797    container: false,
41798    customClass: "",
41799    delay: 0,
41800    fallbackPlacements: ["top", "right", "bottom", "left"],
41801    html: false,
41802    offset: [0, 6],
41803    placement: "top",
41804    popperConfig: null,
41805    sanitize: true,
41806    sanitizeFn: null,
41807    selector: false,
41808    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
41809    title: "",
41810    trigger: "hover focus"
41811  };
41812  var DefaultType$3 = {
41813    allowList: "object",
41814    animation: "boolean",
41815    boundary: "(string|element)",
41816    container: "(string|element|boolean)",
41817    customClass: "(string|function)",
41818    delay: "(number|object)",
41819    fallbackPlacements: "array",
41820    html: "boolean",
41821    offset: "(array|string|function)",
41822    placement: "(string|function)",
41823    popperConfig: "(null|object|function)",
41824    sanitize: "boolean",
41825    sanitizeFn: "(null|function)",
41826    selector: "(string|boolean)",
41827    template: "string",
41828    title: "(string|element|function)",
41829    trigger: "string"
41830  };
41831  var Tooltip = class extends BaseComponent2 {
41832    constructor(element, config2) {
41833      if (typeof lib_exports === "undefined") {
41834        throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");
41835      }
41836      super(element, config2);
41837      this._isEnabled = true;
41838      this._timeout = 0;
41839      this._isHovered = null;
41840      this._activeTrigger = {};
41841      this._popper = null;
41842      this._templateFactory = null;
41843      this._newContent = null;
41844      this.tip = null;
41845      this._setListeners();
41846      if (!this._config.selector) {
41847        this._fixTitle();
41848      }
41849    }
41850    static get Default() {
41851      return Default$3;
41852    }
41853    static get DefaultType() {
41854      return DefaultType$3;
41855    }
41856    static get NAME() {
41857      return NAME$4;
41858    }
41859    enable() {
41860      this._isEnabled = true;
41861    }
41862    disable() {
41863      this._isEnabled = false;
41864    }
41865    toggleEnabled() {
41866      this._isEnabled = !this._isEnabled;
41867    }
41868    toggle() {
41869      if (!this._isEnabled) {
41870        return;
41871      }
41872      this._activeTrigger.click = !this._activeTrigger.click;
41873      if (this._isShown()) {
41874        this._leave();
41875        return;
41876      }
41877      this._enter();
41878    }
41879    dispose() {
41880      clearTimeout(this._timeout);
41881      EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
41882      if (this._element.getAttribute("data-bs-original-title")) {
41883        this._element.setAttribute("title", this._element.getAttribute("data-bs-original-title"));
41884      }
41885      this._disposePopper();
41886      super.dispose();
41887    }
41888    show() {
41889      if (this._element.style.display === "none") {
41890        throw new Error("Please use show on visible elements");
41891      }
41892      if (!(this._isWithContent() && this._isEnabled)) {
41893        return;
41894      }
41895      const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
41896      const shadowRoot = findShadowRoot(this._element);
41897      const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
41898      if (showEvent.defaultPrevented || !isInTheDom) {
41899        return;
41900      }
41901      this._disposePopper();
41902      const tip = this._getTipElement();
41903      this._element.setAttribute("aria-describedby", tip.getAttribute("id"));
41904      const {
41905        container
41906      } = this._config;
41907      if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
41908        container.append(tip);
41909        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
41910      }
41911      this._popper = this._createPopper(tip);
41912      tip.classList.add(CLASS_NAME_SHOW$2);
41913      if ("ontouchstart" in document.documentElement) {
41914        for (const element of [].concat(...document.body.children)) {
41915          EventHandler.on(element, "mouseover", noop);
41916        }
41917      }
41918      const complete = () => {
41919        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
41920        if (this._isHovered === false) {
41921          this._leave();
41922        }
41923        this._isHovered = false;
41924      };
41925      this._queueCallback(complete, this.tip, this._isAnimated());
41926    }
41927    hide() {
41928      if (!this._isShown()) {
41929        return;
41930      }
41931      const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
41932      if (hideEvent.defaultPrevented) {
41933        return;
41934      }
41935      const tip = this._getTipElement();
41936      tip.classList.remove(CLASS_NAME_SHOW$2);
41937      if ("ontouchstart" in document.documentElement) {
41938        for (const element of [].concat(...document.body.children)) {
41939          EventHandler.off(element, "mouseover", noop);
41940        }
41941      }
41942      this._activeTrigger[TRIGGER_CLICK] = false;
41943      this._activeTrigger[TRIGGER_FOCUS] = false;
41944      this._activeTrigger[TRIGGER_HOVER] = false;
41945      this._isHovered = null;
41946      const complete = () => {
41947        if (this._isWithActiveTrigger()) {
41948          return;
41949        }
41950        if (!this._isHovered) {
41951          this._disposePopper();
41952        }
41953        this._element.removeAttribute("aria-describedby");
41954        EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
41955      };
41956      this._queueCallback(complete, this.tip, this._isAnimated());
41957    }
41958    update() {
41959      if (this._popper) {
41960        this._popper.update();
41961      }
41962    }
41963    _isWithContent() {
41964      return Boolean(this._getTitle());
41965    }
41966    _getTipElement() {
41967      if (!this.tip) {
41968        this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
41969      }
41970      return this.tip;
41971    }
41972    _createTipElement(content) {
41973      const tip = this._getTemplateFactory(content).toHtml();
41974      if (!tip) {
41975        return null;
41976      }
41977      tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
41978      tip.classList.add(`bs-${this.constructor.NAME}-auto`);
41979      const tipId = getUID(this.constructor.NAME).toString();
41980      tip.setAttribute("id", tipId);
41981      if (this._isAnimated()) {
41982        tip.classList.add(CLASS_NAME_FADE$2);
41983      }
41984      return tip;
41985    }
41986    setContent(content) {
41987      this._newContent = content;
41988      if (this._isShown()) {
41989        this._disposePopper();
41990        this.show();
41991      }
41992    }
41993    _getTemplateFactory(content) {
41994      if (this._templateFactory) {
41995        this._templateFactory.changeContent(content);
41996      } else {
41997        this._templateFactory = new TemplateFactory({
41998          ...this._config,
41999          content,
42000          extraClass: this._resolvePossibleFunction(this._config.customClass)
42001        });
42002      }
42003      return this._templateFactory;
42004    }
42005    _getContentForTemplate() {
42006      return {
42007        [SELECTOR_TOOLTIP_INNER]: this._getTitle()
42008      };
42009    }
42010    _getTitle() {
42011      return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute("data-bs-original-title");
42012    }
42013    _initializeOnDelegatedTarget(event2) {
42014      return this.constructor.getOrCreateInstance(event2.delegateTarget, this._getDelegateConfig());
42015    }
42016    _isAnimated() {
42017      return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
42018    }
42019    _isShown() {
42020      return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
42021    }
42022    _createPopper(tip) {
42023      const placement = execute(this._config.placement, [this, tip, this._element]);
42024      const attachment = AttachmentMap[placement.toUpperCase()];
42025      return createPopper3(this._element, tip, this._getPopperConfig(attachment));
42026    }
42027    _getOffset() {
42028      const {
42029        offset: offset2
42030      } = this._config;
42031      if (typeof offset2 === "string") {
42032        return offset2.split(",").map((value) => Number.parseInt(value, 10));
42033      }
42034      if (typeof offset2 === "function") {
42035        return (popperData) => offset2(popperData, this._element);
42036      }
42037      return offset2;
42038    }
42039    _resolvePossibleFunction(arg) {
42040      return execute(arg, [this._element]);
42041    }
42042    _getPopperConfig(attachment) {
42043      const defaultBsPopperConfig = {
42044        placement: attachment,
42045        modifiers: [{
42046          name: "flip",
42047          options: {
42048            fallbackPlacements: this._config.fallbackPlacements
42049          }
42050        }, {
42051          name: "offset",
42052          options: {
42053            offset: this._getOffset()
42054          }
42055        }, {
42056          name: "preventOverflow",
42057          options: {
42058            boundary: this._config.boundary
42059          }
42060        }, {
42061          name: "arrow",
42062          options: {
42063            element: `.${this.constructor.NAME}-arrow`
42064          }
42065        }, {
42066          name: "preSetPlacement",
42067          enabled: true,
42068          phase: "beforeMain",
42069          fn: (data) => {
42070            this._getTipElement().setAttribute("data-popper-placement", data.state.placement);
42071          }
42072        }]
42073      };
42074      return {
42075        ...defaultBsPopperConfig,
42076        ...execute(this._config.popperConfig, [defaultBsPopperConfig])
42077      };
42078    }
42079    _setListeners() {
42080      const triggers = this._config.trigger.split(" ");
42081      for (const trigger of triggers) {
42082        if (trigger === "click") {
42083          EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, (event2) => {
42084            const context = this._initializeOnDelegatedTarget(event2);
42085            context.toggle();
42086          });
42087        } else if (trigger !== TRIGGER_MANUAL) {
42088          const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);
42089          const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
42090          EventHandler.on(this._element, eventIn, this._config.selector, (event2) => {
42091            const context = this._initializeOnDelegatedTarget(event2);
42092            context._activeTrigger[event2.type === "focusin" ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
42093            context._enter();
42094          });
42095          EventHandler.on(this._element, eventOut, this._config.selector, (event2) => {
42096            const context = this._initializeOnDelegatedTarget(event2);
42097            context._activeTrigger[event2.type === "focusout" ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event2.relatedTarget);
42098            context._leave();
42099          });
42100        }
42101      }
42102      this._hideModalHandler = () => {
42103        if (this._element) {
42104          this.hide();
42105        }
42106      };
42107      EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
42108    }
42109    _fixTitle() {
42110      const title = this._element.getAttribute("title");
42111      if (!title) {
42112        return;
42113      }
42114      if (!this._element.getAttribute("aria-label") && !this._element.textContent.trim()) {
42115        this._element.setAttribute("aria-label", title);
42116      }
42117      this._element.setAttribute("data-bs-original-title", title);
42118      this._element.removeAttribute("title");
42119    }
42120    _enter() {
42121      if (this._isShown() || this._isHovered) {
42122        this._isHovered = true;
42123        return;
42124      }
42125      this._isHovered = true;
42126      this._setTimeout(() => {
42127        if (this._isHovered) {
42128          this.show();
42129        }
42130      }, this._config.delay.show);
42131    }
42132    _leave() {
42133      if (this._isWithActiveTrigger()) {
42134        return;
42135      }
42136      this._isHovered = false;
42137      this._setTimeout(() => {
42138        if (!this._isHovered) {
42139          this.hide();
42140        }
42141      }, this._config.delay.hide);
42142    }
42143    _setTimeout(handler, timeout) {
42144      clearTimeout(this._timeout);
42145      this._timeout = setTimeout(handler, timeout);
42146    }
42147    _isWithActiveTrigger() {
42148      return Object.values(this._activeTrigger).includes(true);
42149    }
42150    _getConfig(config2) {
42151      const dataAttributes = Manipulator.getDataAttributes(this._element);
42152      for (const dataAttribute of Object.keys(dataAttributes)) {
42153        if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
42154          delete dataAttributes[dataAttribute];
42155        }
42156      }
42157      config2 = {
42158        ...dataAttributes,
42159        ...typeof config2 === "object" && config2 ? config2 : {}
42160      };
42161      config2 = this._mergeConfigObj(config2);
42162      config2 = this._configAfterMerge(config2);
42163      this._typeCheckConfig(config2);
42164      return config2;
42165    }
42166    _configAfterMerge(config2) {
42167      config2.container = config2.container === false ? document.body : getElement(config2.container);
42168      if (typeof config2.delay === "number") {
42169        config2.delay = {
42170          show: config2.delay,
42171          hide: config2.delay
42172        };
42173      }
42174      if (typeof config2.title === "number") {
42175        config2.title = config2.title.toString();
42176      }
42177      if (typeof config2.content === "number") {
42178        config2.content = config2.content.toString();
42179      }
42180      return config2;
42181    }
42182    _getDelegateConfig() {
42183      const config2 = {};
42184      for (const [key, value] of Object.entries(this._config)) {
42185        if (this.constructor.Default[key] !== value) {
42186          config2[key] = value;
42187        }
42188      }
42189      config2.selector = false;
42190      config2.trigger = "manual";
42191      return config2;
42192    }
42193    _disposePopper() {
42194      if (this._popper) {
42195        this._popper.destroy();
42196        this._popper = null;
42197      }
42198      if (this.tip) {
42199        this.tip.remove();
42200        this.tip = null;
42201      }
42202    }
42203    static jQueryInterface(config2) {
42204      return this.each(function() {
42205        const data = Tooltip.getOrCreateInstance(this, config2);
42206        if (typeof config2 !== "string") {
42207          return;
42208        }
42209        if (typeof data[config2] === "undefined") {
42210          throw new TypeError(`No method named "${config2}"`);
42211        }
42212        data[config2]();
42213      });
42214    }
42215  };
42216  defineJQueryPlugin(Tooltip);
42217  var NAME$3 = "popover";
42218  var SELECTOR_TITLE = ".popover-header";
42219  var SELECTOR_CONTENT = ".popover-body";
42220  var Default$2 = {
42221    ...Tooltip.Default,
42222    content: "",
42223    offset: [0, 8],
42224    placement: "right",
42225    template: '<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',
42226    trigger: "click"
42227  };
42228  var DefaultType$2 = {
42229    ...Tooltip.DefaultType,
42230    content: "(null|string|element|function)"
42231  };
42232  var Popover2 = class extends Tooltip {
42233    static get Default() {
42234      return Default$2;
42235    }
42236    static get DefaultType() {
42237      return DefaultType$2;
42238    }
42239    static get NAME() {
42240      return NAME$3;
42241    }
42242    _isWithContent() {
42243      return this._getTitle() || this._getContent();
42244    }
42245    _getContentForTemplate() {
42246      return {
42247        [SELECTOR_TITLE]: this._getTitle(),
42248        [SELECTOR_CONTENT]: this._getContent()
42249      };
42250    }
42251    _getContent() {
42252      return this._resolvePossibleFunction(this._config.content);
42253    }
42254    static jQueryInterface(config2) {
42255      return this.each(function() {
42256        const data = Popover2.getOrCreateInstance(this, config2);
42257        if (typeof config2 !== "string") {
42258          return;
42259        }
42260        if (typeof data[config2] === "undefined") {
42261          throw new TypeError(`No method named "${config2}"`);
42262        }
42263        data[config2]();
42264      });
42265    }
42266  };
42267  defineJQueryPlugin(Popover2);
42268  var NAME$2 = "scrollspy";
42269  var DATA_KEY$2 = "bs.scrollspy";
42270  var EVENT_KEY$2 = `.${DATA_KEY$2}`;
42271  var DATA_API_KEY = ".data-api";
42272  var EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;
42273  var EVENT_CLICK = `click${EVENT_KEY$2}`;
42274  var EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;
42275  var CLASS_NAME_DROPDOWN_ITEM = "dropdown-item";
42276  var CLASS_NAME_ACTIVE$1 = "active";
42277  var SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]';
42278  var SELECTOR_TARGET_LINKS = "[href]";
42279  var SELECTOR_NAV_LIST_GROUP = ".nav, .list-group";
42280  var SELECTOR_NAV_LINKS = ".nav-link";
42281  var SELECTOR_NAV_ITEMS = ".nav-item";
42282  var SELECTOR_LIST_ITEMS = ".list-group-item";
42283  var SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;
42284  var SELECTOR_DROPDOWN = ".dropdown";
42285  var SELECTOR_DROPDOWN_TOGGLE$1 = ".dropdown-toggle";
42286  var Default$1 = {
42287    offset: null,
42288    rootMargin: "0px 0px -25%",
42289    smoothScroll: false,
42290    target: null,
42291    threshold: [0.1, 0.5, 1]
42292  };
42293  var DefaultType$1 = {
42294    offset: "(number|null)",
42295    rootMargin: "string",
42296    smoothScroll: "boolean",
42297    target: "element",
42298    threshold: "array"
42299  };
42300  var ScrollSpy = class extends BaseComponent2 {
42301    constructor(element, config2) {
42302      super(element, config2);
42303      this._targetLinks = /* @__PURE__ */ new Map();
42304      this._observableSections = /* @__PURE__ */ new Map();
42305      this._rootElement = getComputedStyle(this._element).overflowY === "visible" ? null : this._element;
42306      this._activeTarget = null;
42307      this._observer = null;
42308      this._previousScrollData = {
42309        visibleEntryTop: 0,
42310        parentScrollTop: 0
42311      };
42312      this.refresh();
42313    }
42314    static get Default() {
42315      return Default$1;
42316    }
42317    static get DefaultType() {
42318      return DefaultType$1;
42319    }
42320    static get NAME() {
42321      return NAME$2;
42322    }
42323    refresh() {
42324      this._initializeTargetsAndObservables();
42325      this._maybeEnableSmoothScroll();
42326      if (this._observer) {
42327        this._observer.disconnect();
42328      } else {
42329        this._observer = this._getNewObserver();
42330      }
42331      for (const section of this._observableSections.values()) {
42332        this._observer.observe(section);
42333      }
42334    }
42335    dispose() {
42336      this._observer.disconnect();
42337      super.dispose();
42338    }
42339    _configAfterMerge(config2) {
42340      config2.target = getElement(config2.target) || document.body;
42341      config2.rootMargin = config2.offset ? `${config2.offset}px 0px -30%` : config2.rootMargin;
42342      if (typeof config2.threshold === "string") {
42343        config2.threshold = config2.threshold.split(",").map((value) => Number.parseFloat(value));
42344      }
42345      return config2;
42346    }
42347    _maybeEnableSmoothScroll() {
42348      if (!this._config.smoothScroll) {
42349        return;
42350      }
42351      EventHandler.off(this._config.target, EVENT_CLICK);
42352      EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, (event2) => {
42353        const observableSection = this._observableSections.get(event2.target.hash);
42354        if (observableSection) {
42355          event2.preventDefault();
42356          const root = this._rootElement || window;
42357          const height = observableSection.offsetTop - this._element.offsetTop;
42358          if (root.scrollTo) {
42359            root.scrollTo({
42360              top: height,
42361              behavior: "smooth"
42362            });
42363            return;
42364          }
42365          root.scrollTop = height;
42366        }
42367      });
42368    }
42369    _getNewObserver() {
42370      const options = {
42371        root: this._rootElement,
42372        threshold: this._config.threshold,
42373        rootMargin: this._config.rootMargin
42374      };
42375      return new IntersectionObserver((entries) => this._observerCallback(entries), options);
42376    }
42377    _observerCallback(entries) {
42378      const targetElement = (entry) => this._targetLinks.get(`#${entry.target.id}`);
42379      const activate = (entry) => {
42380        this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
42381        this._process(targetElement(entry));
42382      };
42383      const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
42384      const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
42385      this._previousScrollData.parentScrollTop = parentScrollTop;
42386      for (const entry of entries) {
42387        if (!entry.isIntersecting) {
42388          this._activeTarget = null;
42389          this._clearActiveClass(targetElement(entry));
42390          continue;
42391        }
42392        const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
42393        if (userScrollsDown && entryIsLowerThanPrevious) {
42394          activate(entry);
42395          if (!parentScrollTop) {
42396            return;
42397          }
42398          continue;
42399        }
42400        if (!userScrollsDown && !entryIsLowerThanPrevious) {
42401          activate(entry);
42402        }
42403      }
42404    }
42405    _initializeTargetsAndObservables() {
42406      this._targetLinks = /* @__PURE__ */ new Map();
42407      this._observableSections = /* @__PURE__ */ new Map();
42408      const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
42409      for (const anchor of targetLinks) {
42410        if (!anchor.hash || isDisabled(anchor)) {
42411          continue;
42412        }
42413        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
42414        if (isVisible(observableSection)) {
42415          this._targetLinks.set(decodeURI(anchor.hash), anchor);
42416          this._observableSections.set(anchor.hash, observableSection);
42417        }
42418      }
42419    }
42420    _process(target) {
42421      if (this._activeTarget === target) {
42422        return;
42423      }
42424      this._clearActiveClass(this._config.target);
42425      this._activeTarget = target;
42426      target.classList.add(CLASS_NAME_ACTIVE$1);
42427      this._activateParents(target);
42428      EventHandler.trigger(this._element, EVENT_ACTIVATE, {
42429        relatedTarget: target
42430      });
42431    }
42432    _activateParents(target) {
42433      if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
42434        SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
42435        return;
42436      }
42437      for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
42438        for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
42439          item.classList.add(CLASS_NAME_ACTIVE$1);
42440        }
42441      }
42442    }
42443    _clearActiveClass(parent) {
42444      parent.classList.remove(CLASS_NAME_ACTIVE$1);
42445      const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
42446      for (const node of activeNodes) {
42447        node.classList.remove(CLASS_NAME_ACTIVE$1);
42448      }
42449    }
42450    static jQueryInterface(config2) {
42451      return this.each(function() {
42452        const data = ScrollSpy.getOrCreateInstance(this, config2);
42453        if (typeof config2 !== "string") {
42454          return;
42455        }
42456        if (data[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") {
42457          throw new TypeError(`No method named "${config2}"`);
42458        }
42459        data[config2]();
42460      });
42461    }
42462  };
42463  EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
42464    for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
42465      ScrollSpy.getOrCreateInstance(spy);
42466    }
42467  });
42468  defineJQueryPlugin(ScrollSpy);
42469  var NAME$1 = "tab";
42470  var DATA_KEY$1 = "bs.tab";
42471  var EVENT_KEY$1 = `.${DATA_KEY$1}`;
42472  var EVENT_HIDE$1 = `hide${EVENT_KEY$1}`;
42473  var EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`;
42474  var EVENT_SHOW$1 = `show${EVENT_KEY$1}`;
42475  var EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`;
42476  var EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`;
42477  var EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`;
42478  var EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`;
42479  var ARROW_LEFT_KEY = "ArrowLeft";
42480  var ARROW_RIGHT_KEY = "ArrowRight";
42481  var ARROW_UP_KEY = "ArrowUp";
42482  var ARROW_DOWN_KEY = "ArrowDown";
42483  var HOME_KEY = "Home";
42484  var END_KEY = "End";
42485  var CLASS_NAME_ACTIVE = "active";
42486  var CLASS_NAME_FADE$1 = "fade";
42487  var CLASS_NAME_SHOW$1 = "show";
42488  var CLASS_DROPDOWN = "dropdown";
42489  var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
42490  var SELECTOR_DROPDOWN_MENU = ".dropdown-menu";
42491  var NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
42492  var SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
42493  var SELECTOR_OUTER = ".nav-item, .list-group-item";
42494  var SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
42495  var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]';
42496  var SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
42497  var SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
42498  var Tab = class extends BaseComponent2 {
42499    constructor(element) {
42500      super(element);
42501      this._parent = this._element.closest(SELECTOR_TAB_PANEL);
42502      if (!this._parent) {
42503        return;
42504      }
42505      this._setInitialAttributes(this._parent, this._getChildren());
42506      EventHandler.on(this._element, EVENT_KEYDOWN, (event2) => this._keydown(event2));
42507    }
42508    static get NAME() {
42509      return NAME$1;
42510    }
42511    show() {
42512      const innerElem = this._element;
42513      if (this._elemIsActive(innerElem)) {
42514        return;
42515      }
42516      const active = this._getActiveElem();
42517      const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
42518        relatedTarget: innerElem
42519      }) : null;
42520      const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
42521        relatedTarget: active
42522      });
42523      if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
42524        return;
42525      }
42526      this._deactivate(active, innerElem);
42527      this._activate(innerElem, active);
42528    }
42529    _activate(element, relatedElem) {
42530      if (!element) {
42531        return;
42532      }
42533      element.classList.add(CLASS_NAME_ACTIVE);
42534      this._activate(SelectorEngine.getElementFromSelector(element));
42535      const complete = () => {
42536        if (element.getAttribute("role") !== "tab") {
42537          element.classList.add(CLASS_NAME_SHOW$1);
42538          return;
42539        }
42540        element.removeAttribute("tabindex");
42541        element.setAttribute("aria-selected", true);
42542        this._toggleDropDown(element, true);
42543        EventHandler.trigger(element, EVENT_SHOWN$1, {
42544          relatedTarget: relatedElem
42545        });
42546      };
42547      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
42548    }
42549    _deactivate(element, relatedElem) {
42550      if (!element) {
42551        return;
42552      }
42553      element.classList.remove(CLASS_NAME_ACTIVE);
42554      element.blur();
42555      this._deactivate(SelectorEngine.getElementFromSelector(element));
42556      const complete = () => {
42557        if (element.getAttribute("role") !== "tab") {
42558          element.classList.remove(CLASS_NAME_SHOW$1);
42559          return;
42560        }
42561        element.setAttribute("aria-selected", false);
42562        element.setAttribute("tabindex", "-1");
42563        this._toggleDropDown(element, false);
42564        EventHandler.trigger(element, EVENT_HIDDEN$1, {
42565          relatedTarget: relatedElem
42566        });
42567      };
42568      this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
42569    }
42570    _keydown(event2) {
42571      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event2.key)) {
42572        return;
42573      }
42574      event2.stopPropagation();
42575      event2.preventDefault();
42576      const children = this._getChildren().filter((element) => !isDisabled(element));
42577      let nextActiveElement;
42578      if ([HOME_KEY, END_KEY].includes(event2.key)) {
42579        nextActiveElement = children[event2.key === HOME_KEY ? 0 : children.length - 1];
42580      } else {
42581        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event2.key);
42582        nextActiveElement = getNextActiveElement(children, event2.target, isNext, true);
42583      }
42584      if (nextActiveElement) {
42585        nextActiveElement.focus({
42586          preventScroll: true
42587        });
42588        Tab.getOrCreateInstance(nextActiveElement).show();
42589      }
42590    }
42591    _getChildren() {
42592      return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
42593    }
42594    _getActiveElem() {
42595      return this._getChildren().find((child) => this._elemIsActive(child)) || null;
42596    }
42597    _setInitialAttributes(parent, children) {
42598      this._setAttributeIfNotExists(parent, "role", "tablist");
42599      for (const child of children) {
42600        this._setInitialAttributesOnChild(child);
42601      }
42602    }
42603    _setInitialAttributesOnChild(child) {
42604      child = this._getInnerElement(child);
42605      const isActive = this._elemIsActive(child);
42606      const outerElem = this._getOuterElement(child);
42607      child.setAttribute("aria-selected", isActive);
42608      if (outerElem !== child) {
42609        this._setAttributeIfNotExists(outerElem, "role", "presentation");
42610      }
42611      if (!isActive) {
42612        child.setAttribute("tabindex", "-1");
42613      }
42614      this._setAttributeIfNotExists(child, "role", "tab");
42615      this._setInitialAttributesOnTargetPanel(child);
42616    }
42617    _setInitialAttributesOnTargetPanel(child) {
42618      const target = SelectorEngine.getElementFromSelector(child);
42619      if (!target) {
42620        return;
42621      }
42622      this._setAttributeIfNotExists(target, "role", "tabpanel");
42623      if (child.id) {
42624        this._setAttributeIfNotExists(target, "aria-labelledby", `${child.id}`);
42625      }
42626    }
42627    _toggleDropDown(element, open) {
42628      const outerElem = this._getOuterElement(element);
42629      if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
42630        return;
42631      }
42632      const toggle = (selector, className) => {
42633        const element2 = SelectorEngine.findOne(selector, outerElem);
42634        if (element2) {
42635          element2.classList.toggle(className, open);
42636        }
42637      };
42638      toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
42639      toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
42640      outerElem.setAttribute("aria-expanded", open);
42641    }
42642    _setAttributeIfNotExists(element, attribute, value) {
42643      if (!element.hasAttribute(attribute)) {
42644        element.setAttribute(attribute, value);
42645      }
42646    }
42647    _elemIsActive(elem) {
42648      return elem.classList.contains(CLASS_NAME_ACTIVE);
42649    }
42650    _getInnerElement(elem) {
42651      return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
42652    }
42653    _getOuterElement(elem) {
42654      return elem.closest(SELECTOR_OUTER) || elem;
42655    }
42656    static jQueryInterface(config2) {
42657      return this.each(function() {
42658        const data = Tab.getOrCreateInstance(this);
42659        if (typeof config2 !== "string") {
42660          return;
42661        }
42662        if (data[config2] === void 0 || config2.startsWith("_") || config2 === "constructor") {
42663          throw new TypeError(`No method named "${config2}"`);
42664        }
42665        data[config2]();
42666      });
42667    }
42668  };
42669  EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function(event2) {
42670    if (["A", "AREA"].includes(this.tagName)) {
42671      event2.preventDefault();
42672    }
42673    if (isDisabled(this)) {
42674      return;
42675    }
42676    Tab.getOrCreateInstance(this).show();
42677  });
42678  EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
42679    for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
42680      Tab.getOrCreateInstance(element);
42681    }
42682  });
42683  defineJQueryPlugin(Tab);
42684  var NAME = "toast";
42685  var DATA_KEY = "bs.toast";
42686  var EVENT_KEY = `.${DATA_KEY}`;
42687  var EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`;
42688  var EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`;
42689  var EVENT_FOCUSIN = `focusin${EVENT_KEY}`;
42690  var EVENT_FOCUSOUT = `focusout${EVENT_KEY}`;
42691  var EVENT_HIDE = `hide${EVENT_KEY}`;
42692  var EVENT_HIDDEN = `hidden${EVENT_KEY}`;
42693  var EVENT_SHOW = `show${EVENT_KEY}`;
42694  var EVENT_SHOWN = `shown${EVENT_KEY}`;
42695  var CLASS_NAME_FADE = "fade";
42696  var CLASS_NAME_HIDE = "hide";
42697  var CLASS_NAME_SHOW = "show";
42698  var CLASS_NAME_SHOWING = "showing";
42699  var DefaultType = {
42700    animation: "boolean",
42701    autohide: "boolean",
42702    delay: "number"
42703  };
42704  var Default = {
42705    animation: true,
42706    autohide: true,
42707    delay: 5e3
42708  };
42709  var Toast = class extends BaseComponent2 {
42710    constructor(element, config2) {
42711      super(element, config2);
42712      this._timeout = null;
42713      this._hasMouseInteraction = false;
42714      this._hasKeyboardInteraction = false;
42715      this._setListeners();
42716    }
42717    static get Default() {
42718      return Default;
42719    }
42720    static get DefaultType() {
42721      return DefaultType;
42722    }
42723    static get NAME() {
42724      return NAME;
42725    }
42726    show() {
42727      const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
42728      if (showEvent.defaultPrevented) {
42729        return;
42730      }
42731      this._clearTimeout();
42732      if (this._config.animation) {
42733        this._element.classList.add(CLASS_NAME_FADE);
42734      }
42735      const complete = () => {
42736        this._element.classList.remove(CLASS_NAME_SHOWING);
42737        EventHandler.trigger(this._element, EVENT_SHOWN);
42738        this._maybeScheduleHide();
42739      };
42740      this._element.classList.remove(CLASS_NAME_HIDE);
42741      reflow(this._element);
42742      this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
42743      this._queueCallback(complete, this._element, this._config.animation);
42744    }
42745    hide() {
42746      if (!this.isShown()) {
42747        return;
42748      }
42749      const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
42750      if (hideEvent.defaultPrevented) {
42751        return;
42752      }
42753      const complete = () => {
42754        this._element.classList.add(CLASS_NAME_HIDE);
42755        this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
42756        EventHandler.trigger(this._element, EVENT_HIDDEN);
42757      };
42758      this._element.classList.add(CLASS_NAME_SHOWING);
42759      this._queueCallback(complete, this._element, this._config.animation);
42760    }
42761    dispose() {
42762      this._clearTimeout();
42763      if (this.isShown()) {
42764        this._element.classList.remove(CLASS_NAME_SHOW);
42765      }
42766      super.dispose();
42767    }
42768    isShown() {
42769      return this._element.classList.contains(CLASS_NAME_SHOW);
42770    }
42771    _maybeScheduleHide() {
42772      if (!this._config.autohide) {
42773        return;
42774      }
42775      if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
42776        return;
42777      }
42778      this._timeout = setTimeout(() => {
42779        this.hide();
42780      }, this._config.delay);
42781    }
42782    _onInteraction(event2, isInteracting) {
42783      switch (event2.type) {
42784        case "mouseover":
42785        case "mouseout": {
42786          this._hasMouseInteraction = isInteracting;
42787          break;
42788        }
42789        case "focusin":
42790        case "focusout": {
42791          this._hasKeyboardInteraction = isInteracting;
42792          break;
42793        }
42794      }
42795      if (isInteracting) {
42796        this._clearTimeout();
42797        return;
42798      }
42799      const nextElement = event2.relatedTarget;
42800      if (this._element === nextElement || this._element.contains(nextElement)) {
42801        return;
42802      }
42803      this._maybeScheduleHide();
42804    }
42805    _setListeners() {
42806      EventHandler.on(this._element, EVENT_MOUSEOVER, (event2) => this._onInteraction(event2, true));
42807      EventHandler.on(this._element, EVENT_MOUSEOUT, (event2) => this._onInteraction(event2, false));
42808      EventHandler.on(this._element, EVENT_FOCUSIN, (event2) => this._onInteraction(event2, true));
42809      EventHandler.on(this._element, EVENT_FOCUSOUT, (event2) => this._onInteraction(event2, false));
42810    }
42811    _clearTimeout() {
42812      clearTimeout(this._timeout);
42813      this._timeout = null;
42814    }
42815    static jQueryInterface(config2) {
42816      return this.each(function() {
42817        const data = Toast.getOrCreateInstance(this, config2);
42818        if (typeof config2 === "string") {
42819          if (typeof data[config2] === "undefined") {
42820            throw new TypeError(`No method named "${config2}"`);
42821          }
42822          data[config2](this);
42823        }
42824      });
42825    }
42826  };
42827  enableDismissTrigger(Toast);
42828  defineJQueryPlugin(Toast);
42829
42830  
42830// app/javascript/application.js
42831  window.bootstrap = bootstrap_esm_exports;
42832  if (navigator.serviceWorker) {
42833    navigator.serviceWorker.register("/service-worker.js", { scope: "./" }).then(function(registration) {
42834      console.log("[Companion]", "Service worker registered!");
42835      console.log(registration);
42836    });
42837  }
42838  (() => {
42839    document.querySelectorAll("a").forEach((link) => {
42840      link.hostname !== location.hostname && link.setAttribute("target", "_blank");
42841    });
42842  })();
42843})();
42844/*!
42845  * Bootstrap v5.3.3 (https://getbootstrap.com/)
42846  * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
42847  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
42848  */
42849/*!
42850 * Pikaday
42851 *
42852 * Copyright © 2014 David Bushell | BSD & MIT license | https://github.com/Pikaday/Pikaday
42853 */
42854/*! @license DOMPurify 3.2.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.3/LICENSE */
42855//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
42856//! license : MIT
42857//! moment.js
42858//! momentjs.com
42859//! version : 2.30.1
42860//# sourceMappingURL=/library/assets/application-e9c5cb83.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.