{ "version": 3, "sources": ["../../../node_modules/@rails/actioncable/src/adapters.js", "../../../node_modules/@rails/actioncable/src/logger.js", "../../../node_modules/@rails/actioncable/src/connection_monitor.js", "../../../node_modules/@rails/actioncable/src/internal.js", "../../../node_modules/@rails/actioncable/src/connection.js", "../../../node_modules/@rails/actioncable/src/subscription.js", "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js", "../../../node_modules/@rails/actioncable/src/subscriptions.js", "../../../node_modules/@rails/actioncable/src/consumer.js", "../../../node_modules/@rails/actioncable/src/index.js", "../../../node_modules/@popperjs/core/lib/index.js", "../../../node_modules/@popperjs/core/lib/enums.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js", "../../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js", "../../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/math.js", "../../../node_modules/@popperjs/core/lib/utils/userAgent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/contains.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js", "../../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js", "../../../node_modules/@popperjs/core/lib/utils/within.js", "../../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js", "../../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js", "../../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js", "../../../node_modules/@popperjs/core/lib/modifiers/arrow.js", "../../../node_modules/@popperjs/core/lib/utils/getVariation.js", "../../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js", "../../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js", "../../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js", "../../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js", "../../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js", "../../../node_modules/@popperjs/core/lib/utils/computeOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/detectOverflow.js", "../../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js", "../../../node_modules/@popperjs/core/lib/modifiers/flip.js", "../../../node_modules/@popperjs/core/lib/modifiers/hide.js", "../../../node_modules/@popperjs/core/lib/modifiers/offset.js", "../../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js", "../../../node_modules/@popperjs/core/lib/utils/getAltAxis.js", "../../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js", "../../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js", "../../../node_modules/@popperjs/core/lib/utils/orderModifiers.js", "../../../node_modules/@popperjs/core/lib/utils/debounce.js", "../../../node_modules/@popperjs/core/lib/utils/mergeByName.js", "../../../node_modules/@popperjs/core/lib/createPopper.js", "../../../node_modules/@popperjs/core/lib/popper-lite.js", "../../../node_modules/@popperjs/core/lib/popper.js", "../../../node_modules/bootstrap/js/src/dom/data.js", "../../../node_modules/bootstrap/js/src/util/index.js", "../../../node_modules/bootstrap/js/src/dom/event-handler.js", "../../../node_modules/bootstrap/js/src/dom/manipulator.js", "../../../node_modules/bootstrap/js/src/util/config.js", "../../../node_modules/bootstrap/js/src/base-component.js", "../../../node_modules/bootstrap/js/src/dom/selector-engine.js", "../../../node_modules/bootstrap/js/src/util/component-functions.js", "../../../node_modules/bootstrap/js/src/alert.js", "../../../node_modules/bootstrap/js/src/button.js", "../../../node_modules/bootstrap/js/src/util/swipe.js", "../../../node_modules/bootstrap/js/src/carousel.js", "../../../node_modules/bootstrap/js/src/collapse.js", "../../../node_modules/bootstrap/js/src/dropdown.js", "../../../node_modules/bootstrap/js/src/util/backdrop.js", "../../../node_modules/bootstrap/js/src/util/focustrap.js", "../../../node_modules/bootstrap/js/src/util/scrollbar.js", "../../../node_modules/bootstrap/js/src/modal.js", "../../../node_modules/bootstrap/js/src/offcanvas.js", "../../../node_modules/bootstrap/js/src/util/sanitizer.js", "../../../node_modules/bootstrap/js/src/util/template-factory.js", "../../../node_modules/bootstrap/js/src/tooltip.js", "../../../node_modules/bootstrap/js/src/popover.js", "../../../node_modules/bootstrap/js/src/scrollspy.js", "../../../node_modules/bootstrap/js/src/tab.js", "../../../node_modules/bootstrap/js/src/toast.js", "../../../node_modules/@hotwired/stimulus/dist/stimulus.js", "../../javascript/controllers/application.js", "../../javascript/controllers/admin/discount_codes_controller.js", "../../javascript/controllers/anchor_link_controller.js", "../../javascript/controllers/case_consideration_controller.js", "../../javascript/controllers/check_visibility_controller.js", "../../../node_modules/simple-datatables/src/helpers.ts", "../../../node_modules/simple-datatables/node_modules/diff-dom/dist/module.js", "../../../node_modules/simple-datatables/src/virtual_dom.ts", "../../../node_modules/simple-datatables/node_modules/dayjs/dayjs.min.js", "../../../node_modules/simple-datatables/node_modules/dayjs/plugin/customParseFormat.js", "../../../node_modules/simple-datatables/src/date.ts", "../../../node_modules/simple-datatables/src/read_data.ts", "../../../node_modules/simple-datatables/src/rows.ts", "../../../node_modules/simple-datatables/src/columns.ts", "../../../node_modules/simple-datatables/src/column_settings.ts", "../../../node_modules/simple-datatables/src/templates.ts", "../../../node_modules/simple-datatables/src/config.ts", "../../../node_modules/simple-datatables/src/virtual_pager_dom.ts", "../../../node_modules/simple-datatables/src/datatable.ts", "../../../node_modules/simple-datatables/src/convert/csv.ts", "../../../node_modules/simple-datatables/src/convert/json.ts", "../../../node_modules/simple-datatables/src/export/csv.ts", "../../../node_modules/simple-datatables/src/export/json.ts", "../../../node_modules/simple-datatables/src/export/sql.ts", "../../../node_modules/simple-datatables/src/export/txt.ts", "../../../node_modules/simple-datatables/src/editing/config.ts", "../../../node_modules/simple-datatables/src/editing/editor.ts", "../../../node_modules/simple-datatables/src/editing/helpers.ts", "../../../node_modules/simple-datatables/src/column_filter/config.ts", "../../../node_modules/simple-datatables/src/column_filter/column_filter.ts", "../../javascript/controllers/data_table_controller.js", "../../javascript/controllers/form_state_controller.js", "../../javascript/controllers/form_submit_controller.js", "../../javascript/controllers/gallery_controller.js", "../../javascript/controllers/gallery_update_controller.js", "../../javascript/controllers/logo_selection_controller.js", "../../../node_modules/sortablejs/modular/sortable.esm.js", "../../javascript/controllers/manage_gallery_controller.js", "../../javascript/controllers/parent_click_controller.js", "../../javascript/controllers/personalization_warning_controller.js", "../../javascript/controllers/position_picker_controller.js", "../../javascript/controllers/resizable_rectangle_controller.js", "../../javascript/controllers/search_controller.js", "../../javascript/controllers/show_modal_controller.js", "../../javascript/controllers/show_shipping_controller.js", "../../javascript/controllers/sortable_form_controller.js", "../../../node_modules/@square/web-sdk/dist/index.js", "../../javascript/controllers/square_payments_controller.js", "../../javascript/controllers/subtotal_controller.js", "../../javascript/controllers/toggle_checkout_controller.js", "../../javascript/controllers/toggle_personalization_controller.js", "../../javascript/controllers/tooltip_controller.js", "../../javascript/controllers/upcase_fields_controller.js", "../../javascript/controllers/index.js", "../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js", "../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js"], "sourcesContent": ["export default {\n logger: typeof console !== \"undefined\" ? console : undefined,\n WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n", "import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n// ActionCable.logger.enabled = true\n//\n// Example:\n//\n// import * as ActionCable from '@rails/actioncable'\n//\n// ActionCable.logger.enabled = true\n// ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n log(...messages) {\n if (this.enabled) {\n messages.push(Date.now())\n adapters.logger.log(\"[ActionCable]\", ...messages)\n }\n },\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n constructor(connection) {\n this.visibilityDidChange = this.visibilityDidChange.bind(this)\n this.connection = connection\n this.reconnectAttempts = 0\n }\n\n start() {\n if (!this.isRunning()) {\n this.startedAt = now()\n delete this.stoppedAt\n this.startPolling()\n addEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n }\n }\n\n stop() {\n if (this.isRunning()) {\n this.stoppedAt = now()\n this.stopPolling()\n removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n logger.log(\"ConnectionMonitor stopped\")\n }\n }\n\n isRunning() {\n return this.startedAt && !this.stoppedAt\n }\n\n recordPing() {\n this.pingedAt = now()\n }\n\n recordConnect() {\n this.reconnectAttempts = 0\n this.recordPing()\n delete this.disconnectedAt\n logger.log(\"ConnectionMonitor recorded connect\")\n }\n\n recordDisconnect() {\n this.disconnectedAt = now()\n logger.log(\"ConnectionMonitor recorded disconnect\")\n }\n\n // Private\n\n startPolling() {\n this.stopPolling()\n this.poll()\n }\n\n stopPolling() {\n clearTimeout(this.pollTimeout)\n }\n\n poll() {\n this.pollTimeout = setTimeout(() => {\n this.reconnectIfStale()\n this.poll()\n }\n , this.getPollInterval())\n }\n\n getPollInterval() {\n const { staleThreshold, reconnectionBackoffRate } = this.constructor\n const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n const jitter = jitterMax * Math.random()\n return staleThreshold * 1000 * backoff * (1 + jitter)\n }\n\n reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n this.reconnectAttempts++\n if (this.disconnectedRecently()) {\n logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n } else {\n logger.log(\"ConnectionMonitor reopening\")\n this.connection.reopen()\n }\n }\n }\n\n get refreshedAt() {\n return this.pingedAt ? this.pingedAt : this.startedAt\n }\n\n connectionIsStale() {\n return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n }\n\n disconnectedRecently() {\n return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n }\n\n visibilityDidChange() {\n if (document.visibilityState === \"visible\") {\n setTimeout(() => {\n if (this.connectionIsStale() || !this.connection.isOpen()) {\n logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n this.connection.reopen()\n }\n }\n , 200)\n }\n }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n", "export default {\n \"message_types\": {\n \"welcome\": \"welcome\",\n \"disconnect\": \"disconnect\",\n \"ping\": \"ping\",\n \"confirmation\": \"confirm_subscription\",\n \"rejection\": \"reject_subscription\"\n },\n \"disconnect_reasons\": {\n \"unauthorized\": \"unauthorized\",\n \"invalid_request\": \"invalid_request\",\n \"server_restart\": \"server_restart\",\n \"remote\": \"remote\"\n },\n \"default_mount_path\": \"/cable\",\n \"protocols\": [\n \"actioncable-v1-json\",\n \"actioncable-unsupported\"\n ]\n}\n", "import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n constructor(consumer) {\n this.open = this.open.bind(this)\n this.consumer = consumer\n this.subscriptions = this.consumer.subscriptions\n this.monitor = new ConnectionMonitor(this)\n this.disconnected = true\n }\n\n send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data))\n return true\n } else {\n return false\n }\n }\n\n open() {\n if (this.isActive()) {\n logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n return false\n } else {\n const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n if (this.webSocket) { this.uninstallEventHandlers() }\n this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n this.installEventHandlers()\n this.monitor.start()\n return true\n }\n }\n\n close({allowReconnect} = {allowReconnect: true}) {\n if (!allowReconnect) { this.monitor.stop() }\n // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n if (this.isOpen()) {\n return this.webSocket.close()\n }\n }\n\n reopen() {\n logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n if (this.isActive()) {\n try {\n return this.close()\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error)\n }\n finally {\n logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n setTimeout(this.open, this.constructor.reopenDelay)\n }\n } else {\n return this.open()\n }\n }\n\n getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol\n }\n }\n\n isOpen() {\n return this.isState(\"open\")\n }\n\n isActive() {\n return this.isState(\"open\", \"connecting\")\n }\n\n triedToReconnect() {\n return this.monitor.reconnectAttempts > 0\n }\n\n // Private\n\n isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n }\n\n isState(...states) {\n return indexOf.call(states, this.getState()) >= 0\n }\n\n getState() {\n if (this.webSocket) {\n for (let state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase()\n }\n }\n }\n return null\n }\n\n installEventHandlers() {\n for (let eventName in this.events) {\n const handler = this.events[eventName].bind(this)\n this.webSocket[`on${eventName}`] = handler\n }\n }\n\n uninstallEventHandlers() {\n for (let eventName in this.events) {\n this.webSocket[`on${eventName}`] = function() {}\n }\n }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n message(event) {\n if (!this.isProtocolSupported()) { return }\n const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n switch (type) {\n case message_types.welcome:\n if (this.triedToReconnect()) {\n this.reconnectAttempted = true\n }\n this.monitor.recordConnect()\n return this.subscriptions.reload()\n case message_types.disconnect:\n logger.log(`Disconnecting. Reason: ${reason}`)\n return this.close({allowReconnect: reconnect})\n case message_types.ping:\n return this.monitor.recordPing()\n case message_types.confirmation:\n this.subscriptions.confirmSubscription(identifier)\n if (this.reconnectAttempted) {\n this.reconnectAttempted = false\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n } else {\n return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n }\n case message_types.rejection:\n return this.subscriptions.reject(identifier)\n default:\n return this.subscriptions.notify(identifier, \"received\", message)\n }\n },\n\n open() {\n logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n this.disconnected = false\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n return this.close({allowReconnect: false})\n }\n },\n\n close(event) {\n logger.log(\"WebSocket onclose event\")\n if (this.disconnected) { return }\n this.disconnected = true\n this.monitor.recordDisconnect()\n return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n },\n\n error() {\n logger.log(\"WebSocket onerror event\")\n }\n}\n\nexport default Connection\n", "// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n// connected() {\n// // Called once the subscription has been successfully completed\n// },\n//\n// disconnected({ willAttemptReconnect: boolean }) {\n// // Called when the client has disconnected with the server.\n// // The object will have an `willAttemptReconnect` property which\n// // says whether the client has the intention of attempting\n// // to reconnect.\n// },\n//\n// appear() {\n// this.perform('appear', {appearing_on: this.appearingOn()})\n// },\n//\n// away() {\n// this.perform('away')\n// },\n//\n// appearingOn() {\n// $('main').data('appearing-on')\n// }\n// })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n// class AppearanceChannel < ApplicationActionCable::Channel\n// def subscribed\n// current_user.appear\n// end\n//\n// def unsubscribed\n// current_user.disappear\n// end\n//\n// def appear(data)\n// current_user.appear on: data['appearing_on']\n// end\n//\n// def away\n// current_user.away\n// end\n// end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n if (properties != null) {\n for (let key in properties) {\n const value = properties[key]\n object[key] = value\n }\n }\n return object\n}\n\nexport default class Subscription {\n constructor(consumer, params = {}, mixin) {\n this.consumer = consumer\n this.identifier = JSON.stringify(params)\n extend(this, mixin)\n }\n\n // Perform a channel action with the optional data passed as an attribute\n perform(action, data = {}) {\n data.action = action\n return this.send(data)\n }\n\n send(data) {\n return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n }\n\n unsubscribe() {\n return this.consumer.subscriptions.remove(this)\n }\n}\n", "import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n constructor(subscriptions) {\n this.subscriptions = subscriptions\n this.pendingSubscriptions = []\n }\n\n guarantee(subscription) {\n if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n this.pendingSubscriptions.push(subscription) \n }\n else {\n logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n }\n this.startGuaranteeing()\n }\n\n forget(subscription) {\n logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n }\n\n startGuaranteeing() {\n this.stopGuaranteeing()\n this.retrySubscribing()\n }\n \n stopGuaranteeing() {\n clearTimeout(this.retryTimeout)\n }\n\n retrySubscribing() {\n this.retryTimeout = setTimeout(() => {\n if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n this.pendingSubscriptions.map((subscription) => {\n logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n this.subscriptions.subscribe(subscription)\n })\n }\n }\n , 500)\n }\n}\n\nexport default SubscriptionGuarantor", "import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n constructor(consumer) {\n this.consumer = consumer\n this.guarantor = new SubscriptionGuarantor(this)\n this.subscriptions = []\n }\n\n create(channelName, mixin) {\n const channel = channelName\n const params = typeof channel === \"object\" ? channel : {channel}\n const subscription = new Subscription(this.consumer, params, mixin)\n return this.add(subscription)\n }\n\n // Private\n\n add(subscription) {\n this.subscriptions.push(subscription)\n this.consumer.ensureActiveConnection()\n this.notify(subscription, \"initialized\")\n this.subscribe(subscription)\n return subscription\n }\n\n remove(subscription) {\n this.forget(subscription)\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\")\n }\n return subscription\n }\n\n reject(identifier) {\n return this.findAll(identifier).map((subscription) => {\n this.forget(subscription)\n this.notify(subscription, \"rejected\")\n return subscription\n })\n }\n\n forget(subscription) {\n this.guarantor.forget(subscription)\n this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n return subscription\n }\n\n findAll(identifier) {\n return this.subscriptions.filter((s) => s.identifier === identifier)\n }\n\n reload() {\n return this.subscriptions.map((subscription) =>\n this.subscribe(subscription))\n }\n\n notifyAll(callbackName, ...args) {\n return this.subscriptions.map((subscription) =>\n this.notify(subscription, callbackName, ...args))\n }\n\n notify(subscription, callbackName, ...args) {\n let subscriptions\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription)\n } else {\n subscriptions = [subscription]\n }\n\n return subscriptions.map((subscription) =>\n (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n }\n\n subscribe(subscription) {\n if (this.sendCommand(subscription, \"subscribe\")) {\n this.guarantor.guarantee(subscription)\n }\n }\n\n confirmSubscription(identifier) {\n logger.log(`Subscription confirmed ${identifier}`)\n this.findAll(identifier).map((subscription) =>\n this.guarantor.forget(subscription))\n }\n\n sendCommand(subscription, command) {\n const {identifier} = subscription\n return this.consumer.send({command, identifier})\n }\n}\n", "import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n// App = {}\n// App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n// App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n// App.cable.disconnect()\n//\n// and to restart the connection:\n//\n// App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n constructor(url) {\n this._url = url\n this.subscriptions = new Subscriptions(this)\n this.connection = new Connection(this)\n this.subprotocols = []\n }\n\n get url() {\n return createWebSocketURL(this._url)\n }\n\n send(data) {\n return this.connection.send(data)\n }\n\n connect() {\n return this.connection.open()\n }\n\n disconnect() {\n return this.connection.close({allowReconnect: false})\n }\n\n ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open()\n }\n }\n\n addSubProtocol(subprotocol) {\n this.subprotocols = [...this.subprotocols, subprotocol]\n }\n}\n\nexport function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url()\n }\n\n if (url && !/^wss?:/i.test(url)) {\n const a = document.createElement(\"a\")\n a.href = url\n // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n a.href = a.href\n a.protocol = a.protocol.replace(\"http\", \"ws\")\n return a.href\n } else {\n return url\n }\n}\n", "import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n Connection,\n ConnectionMonitor,\n Consumer,\n INTERNAL,\n Subscription,\n Subscriptions,\n SubscriptionGuarantor,\n adapters,\n createWebSocketURL,\n logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n return new Consumer(url)\n}\n\nexport function getConfig(name) {\n const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n if (element) {\n return element.getAttribute(\"content\")\n }\n}\n", "export * from \"./enums.js\";\nexport * from \"./modifiers/index.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { popperGenerator, detectOverflow, createPopper as createPopperBase } from \"./createPopper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper } from \"./popper.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\";", "export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];", "export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}", "export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}", "import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };", "import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};", "import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}", "export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;", "export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}", "import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}", "import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}", "import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}", "import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}", "import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}", "import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}", "import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}", "import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n 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') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}", "export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}", "import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}", "export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}", "import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}", "export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};", "export default function getVariation(placement) {\n return placement.split('-')[1];\n}", "import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};", "import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};", "var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}", "var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}", "import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}", "import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}", "import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}", "import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}", "import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}", "import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}", "export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}", "import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}", "import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}", "import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}", "import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}", "import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases \u2013 research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};", "import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};", "import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};", "import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};", "export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}", "import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};", "export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}", "import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}", "import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}", "import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}", "export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}", "export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}", "import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update \u2013 it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update \u2013 it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };", "import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null\n }\n\n return selector\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst HOME_KEY = 'Home'\nconst END_KEY = 'End'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // TODO: could only be `tab` in v6\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst 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\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // TODO: should throw exception in v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n\n const children = this._getChildren().filter(element => !isDisabled(element))\n let nextActiveElement\n\n if ([HOME_KEY, END_KEY].includes(event.key)) {\n nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]\n } else {\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n nextActiveElement = getNextActiveElement(children, event.target, isNext, true)\n }\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n", "/**\n * --------------------------------------------------------------------------\n * Bootstrap toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin, reflow } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n 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((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n 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}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Application } from \"@hotwired/stimulus\"\n\nconst application = Application.start()\n\n// Configure Stimulus development experience\napplication.debug = false\nwindow.Stimulus = application\n\nexport { application }\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"admin--discount-codes\"\nexport default class extends Controller {\n static targets = [ \"selected\", \"percentage\", \"fixed\" ]\n\n connect() {\n this.toggleDisplay()\n }\n\n toggleDisplay() {\n const showPercentage = this.selectedTarget.value == \"percentage\";\n this.toggleTargets(this.percentageTargets, showPercentage);\n this.toggleTargets(this.fixedTargets, !showPercentage);\n }\n\n toggleTargets(targets, show) {\n targets.forEach(target => {\n target.hidden = !show;\n });\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n\n// This controller can be removed once https://github.com/hotwired/turbo/issues/598 is fixed\n// Connects to data-controller=\"anchor-link\"\nexport default class extends Controller {\n static targets = [\"destination\"];\n\n jump(event) {\n this.destinationTargets.find((target) => target.id === event.params.id).scrollIntoView();\n event.preventDefault();\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"case-consideration\"\nexport default class extends Controller {\n static targets = [ \"toggle\", \"input\" ]\n\n connect() {\n this.updateTargets();\n }\n\n toggle() {\n this.toggleTarget.classList.toggle(\"active\");\n this.updateTargets();\n }\n\n updateTargets() {\n if(this.toggleTarget.classList.contains(\"active\")) {\n this.inputTarget.classList.add(\"text-uppercase\");\n } else {\n this.inputTarget.classList.remove(\"text-uppercase\");\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"check-visibility\"\nexport default class extends Controller {\n static targets = [\"controlElement\", \"watchedElement\"];\n\n connect() {\n this.waitForPageLoad();\n }\n\n waitForPageLoad() {\n window.onload = () => {\n this.checkElementVisibility();\n };\n }\n\n checkElementVisibility() {\n // Show the control button only if the watched element is not visible\n this.controlElementTarget.hidden = this.isElementVisible(this.watchedElementTarget);\n }\n\n isElementVisible(elem) {\n const rect = elem.getBoundingClientRect();\n const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);\n return !(rect.bottom < 0 || rect.top - viewHeight >= 0);\n }\n}\n", "import {\n cellDataType,\n cellType,\n columnSettingsType,\n inputCellType,\n nodeType,\n textNodeType\n} from \"./types\"\n\n/**\n * Check is item is object\n */\nexport const isObject = (val: (string | number | boolean | object | null | undefined )) => Object.prototype.toString.call(val) === \"[object Object]\"\n\n/**\n * Check for valid JSON string\n */\nexport const isJson = (str: string) => {\n let t = !1\n try {\n t = JSON.parse(str)\n } catch (e) {\n return !1\n }\n return !(null === t || (!Array.isArray(t) && !isObject(t))) && t\n}\n\n/**\n * Create DOM element node\n */\nexport const createElement = (nodeName: string, attrs?: { [key: string]: string}) => {\n const dom = document.createElement(nodeName)\n if (attrs && \"object\" == typeof attrs) {\n for (const attr in attrs) {\n if (\"html\" === attr) {\n dom.innerHTML = attrs[attr]\n } else {\n dom.setAttribute(attr, attrs[attr])\n }\n }\n }\n return dom\n}\n\nexport const objToText = (obj: nodeType) => {\n if ([\"#text\", \"#comment\"].includes(obj.nodeName)) {\n return (obj as textNodeType).data\n }\n if (obj.childNodes) {\n return obj.childNodes.map((childNode: nodeType) => objToText(childNode)).join(\"\")\n }\n return \"\"\n}\n\nexport const cellToText = (obj: inputCellType | cellDataType | null | undefined): string => {\n if (obj === null || obj === undefined) {\n return \"\"\n } else if (obj.hasOwnProperty(\"text\") || obj.hasOwnProperty(\"data\")) {\n const cell = obj as cellType\n return cell.text ?? cellToText(cell.data)\n } else if (obj.hasOwnProperty(\"nodeName\")) {\n return objToText(obj as nodeType)\n }\n return String(obj)\n}\n\n\nexport const escapeText = function(text: string) {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n}\n\n\nexport const visibleToColumnIndex = function(visibleIndex: number, columns: columnSettingsType[]) {\n let counter = 0\n let columnIndex = 0\n while (counter < (visibleIndex+1)) {\n const columnSettings = columns[columnIndex]\n if (!columnSettings.hidden) {\n counter += 1\n }\n columnIndex += 1\n }\n return columnIndex-1\n}\n\nexport const columnToVisibleIndex = function(columnIndex: number, columns: columnSettingsType[]) {\n let visibleIndex = columnIndex\n let counter = 0\n while (counter < columnIndex) {\n const columnSettings = columns[counter]\n if (columnSettings.hidden) {\n visibleIndex -= 1\n }\n counter++\n }\n return visibleIndex\n}\n\n/**\n * Converts a [NamedNodeMap](https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap) into a normal object.\n *\n * @param map The `NamedNodeMap` to convert\n */\nexport const namedNodeMapToObject = function(map: NamedNodeMap) {\n const obj = {}\n if (map) {\n for (const attr of map) {\n obj[attr.name] = attr.value\n }\n }\n return obj\n}\n\n/**\n * Convert class names to a CSS selector. Multiple classes should be separated by spaces.\n * Examples:\n * - \"my-class\" -> \".my-class\"\n * - \"my-class second-class\" -> \".my-class.second-class\"\n *\n * @param classNames The class names to convert. Can contain multiple classes separated by spaces.\n */\nexport const classNamesToSelector = (classNames: string) => {\n if (!classNames) {\n return null\n }\n return classNames.trim().split(\" \").map(className => `.${className}`).join(\"\")\n}\n\n/**\n * Check if the element contains all the classes. Multiple classes should be separated by spaces.\n *\n * @param element The element that will be checked\n * @param classes The classes that must be present in the element. Can contain multiple classes separated by spaces.\n */\nexport const containsClass = (element: Element, classes: string) => {\n const hasMissingClass = classes?.split(\" \").some(className => !element.classList.contains(className))\n return !hasMissingClass\n}\n\n/**\n * Join two strings with spaces. Null values are ignored.\n * Examples:\n * - joinWithSpaces(\"a\", \"b\") -> \"a b\"\n * - joinWithSpaces(\"a\", null) -> \"a\"\n * - joinWithSpaces(null, \"b\") -> \"b\"\n * - joinWithSpaces(\"a\", \"b c\") -> \"a b c\"\n *\n * @param first The first string to join\n * @param second The second string to join\n */\nexport const joinWithSpaces = (first: string | null | undefined, second: string | null | undefined) => {\n if (first) {\n if (second) {\n return `${first} ${second}`\n }\n return first\n } else if (second) {\n return second\n }\n return \"\"\n}\n", "var Diff = /** @class */ (function () {\n function Diff(options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n Object.entries(options).forEach(function (_a) {\n var key = _a[0], value = _a[1];\n return (_this[key] = value);\n });\n }\n Diff.prototype.toString = function () {\n return JSON.stringify(this);\n };\n Diff.prototype.setValue = function (aKey, aValue) {\n this[aKey] = aValue;\n return this;\n };\n return Diff;\n}());\nfunction checkElementType(element) {\n var arguments$1 = arguments;\n\n var elementTypeNames = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n elementTypeNames[_i - 1] = arguments$1[_i];\n }\n if (typeof element === \"undefined\" || element === null) {\n return false;\n }\n return elementTypeNames.some(function (elementTypeName) {\n var _a, _b;\n // We need to check if the specified type is defined\n // because otherwise instanceof throws an exception.\n return typeof ((_b = (_a = element === null || element === void 0 ? void 0 : element.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b[elementTypeName]) ===\n \"function\" &&\n element instanceof\n element.ownerDocument.defaultView[elementTypeName];\n });\n}\n\nfunction objToNode(objNode, insideSvg, options) {\n var node;\n if (objNode.nodeName === \"#text\") {\n node = options.document.createTextNode(objNode.data);\n }\n else if (objNode.nodeName === \"#comment\") {\n node = options.document.createComment(objNode.data);\n }\n else {\n if (insideSvg) {\n node = options.document.createElementNS(\"http://www.w3.org/2000/svg\", objNode.nodeName);\n }\n else if (objNode.nodeName.toLowerCase() === \"svg\") {\n node = options.document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n insideSvg = true;\n }\n else {\n node = options.document.createElement(objNode.nodeName);\n }\n if (objNode.attributes) {\n Object.entries(objNode.attributes).forEach(function (_a) {\n var key = _a[0], value = _a[1];\n return node.setAttribute(key, value);\n });\n }\n if (objNode.childNodes) {\n node = node;\n objNode.childNodes.forEach(function (childNode) {\n return node.appendChild(objToNode(childNode, insideSvg, options));\n });\n }\n if (options.valueDiffing) {\n if (objNode.value &&\n checkElementType(node, \"HTMLButtonElement\", \"HTMLDataElement\", \"HTMLInputElement\", \"HTMLLIElement\", \"HTMLMeterElement\", \"HTMLOptionElement\", \"HTMLProgressElement\", \"HTMLParamElement\")) {\n node.value = objNode.value;\n }\n if (objNode.checked && checkElementType(node, \"HTMLInputElement\")) {\n node.checked = objNode.checked;\n }\n if (objNode.selected &&\n checkElementType(node, \"HTMLOptionElement\")) {\n node.selected = objNode.selected;\n }\n }\n }\n return node;\n}\n\n// ===== Apply a diff =====\nvar getFromRoute = function (node, route) {\n route = route.slice();\n while (route.length > 0) {\n var c = route.splice(0, 1)[0];\n node = node.childNodes[c];\n }\n return node;\n};\nfunction applyDiff(tree, diff, options) {\n var action = diff[options._const.action];\n var route = diff[options._const.route];\n var node;\n if (![options._const.addElement, options._const.addTextElement].includes(action)) {\n // For adding nodes, we calculate the route later on. It's different because it includes the position of the newly added item.\n node = getFromRoute(tree, route);\n }\n var newNode;\n var reference;\n var nodeArray;\n // pre-diff hook\n var info = {\n diff: diff,\n node: node,\n };\n if (options.preDiffApply(info)) {\n return true;\n }\n switch (action) {\n case options._const.addAttribute:\n if (!node || !checkElementType(node, \"Element\")) {\n return false;\n }\n node.setAttribute(diff[options._const.name], diff[options._const.value]);\n break;\n case options._const.modifyAttribute:\n if (!node || !checkElementType(node, \"Element\")) {\n return false;\n }\n node.setAttribute(diff[options._const.name], diff[options._const.newValue]);\n if (checkElementType(node, \"HTMLInputElement\") &&\n diff[options._const.name] === \"value\") {\n node.value = diff[options._const.newValue];\n }\n break;\n case options._const.removeAttribute:\n if (!node || !checkElementType(node, \"Element\")) {\n return false;\n }\n node.removeAttribute(diff[options._const.name]);\n break;\n case options._const.modifyTextElement:\n if (!node || !checkElementType(node, \"Text\")) {\n return false;\n }\n options.textDiff(node, node.data, diff[options._const.oldValue], diff[options._const.newValue]);\n if (checkElementType(node.parentNode, \"HTMLTextAreaElement\")) {\n node.parentNode.value = diff[options._const.newValue];\n }\n break;\n case options._const.modifyValue:\n if (!node || typeof node.value === \"undefined\") {\n return false;\n }\n node.value = diff[options._const.newValue];\n break;\n case options._const.modifyComment:\n if (!node || !checkElementType(node, \"Comment\")) {\n return false;\n }\n options.textDiff(node, node.data, diff[options._const.oldValue], diff[options._const.newValue]);\n break;\n case options._const.modifyChecked:\n if (!node || typeof node.checked === \"undefined\") {\n return false;\n }\n node.checked = diff[options._const.newValue];\n break;\n case options._const.modifySelected:\n if (!node || typeof node.selected === \"undefined\") {\n return false;\n }\n node.selected = diff[options._const.newValue];\n break;\n case options._const.replaceElement: {\n var insideSvg = diff[options._const.newValue].nodeName.toLowerCase() === \"svg\" ||\n node.parentNode.namespaceURI === \"http://www.w3.org/2000/svg\";\n node.parentNode.replaceChild(objToNode(diff[options._const.newValue], insideSvg, options), node);\n break;\n }\n case options._const.relocateGroup:\n nodeArray = Array.apply(void 0, new Array(diff[options._const.groupLength])).map(function () {\n return node.removeChild(node.childNodes[diff[options._const.from]]);\n });\n nodeArray.forEach(function (childNode, index) {\n if (index === 0) {\n reference =\n node.childNodes[diff[options._const.to]];\n }\n node.insertBefore(childNode, reference || null);\n });\n break;\n case options._const.removeElement:\n node.parentNode.removeChild(node);\n break;\n case options._const.addElement: {\n var parentRoute = route.slice();\n var c = parentRoute.splice(parentRoute.length - 1, 1)[0];\n node = getFromRoute(tree, parentRoute);\n if (!checkElementType(node, \"Element\")) {\n return false;\n }\n node.insertBefore(objToNode(diff[options._const.element], node.namespaceURI === \"http://www.w3.org/2000/svg\", options), node.childNodes[c] || null);\n break;\n }\n case options._const.removeTextElement: {\n if (!node || node.nodeType !== 3) {\n return false;\n }\n var parentNode = node.parentNode;\n parentNode.removeChild(node);\n if (checkElementType(parentNode, \"HTMLTextAreaElement\")) {\n parentNode.value = \"\";\n }\n break;\n }\n case options._const.addTextElement: {\n var parentRoute = route.slice();\n var c = parentRoute.splice(parentRoute.length - 1, 1)[0];\n newNode = options.document.createTextNode(diff[options._const.value]);\n node = getFromRoute(tree, parentRoute);\n if (!node.childNodes) {\n return false;\n }\n node.insertBefore(newNode, node.childNodes[c] || null);\n if (checkElementType(node.parentNode, \"HTMLTextAreaElement\")) {\n node.parentNode.value = diff[options._const.value];\n }\n break;\n }\n default:\n console.log(\"unknown action\");\n }\n // if a new node was created, we might be interested in its\n // post diff hook\n options.postDiffApply({\n diff: info.diff,\n node: info.node,\n newNode: newNode,\n });\n return true;\n}\nfunction applyDOM(tree, diffs, options) {\n return diffs.every(function (diff) {\n return applyDiff(tree, diff, options);\n });\n}\n\n// ===== Undo a diff =====\nfunction swap(obj, p1, p2) {\n var tmp = obj[p1];\n obj[p1] = obj[p2];\n obj[p2] = tmp;\n}\nfunction undoDiff(tree, diff, options) {\n switch (diff[options._const.action]) {\n case options._const.addAttribute:\n diff[options._const.action] = options._const.removeAttribute;\n applyDiff(tree, diff, options);\n break;\n case options._const.modifyAttribute:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.removeAttribute:\n diff[options._const.action] = options._const.addAttribute;\n applyDiff(tree, diff, options);\n break;\n case options._const.modifyTextElement:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.modifyValue:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.modifyComment:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.modifyChecked:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.modifySelected:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.replaceElement:\n swap(diff, options._const.oldValue, options._const.newValue);\n applyDiff(tree, diff, options);\n break;\n case options._const.relocateGroup:\n swap(diff, options._const.from, options._const.to);\n applyDiff(tree, diff, options);\n break;\n case options._const.removeElement:\n diff[options._const.action] = options._const.addElement;\n applyDiff(tree, diff, options);\n break;\n case options._const.addElement:\n diff[options._const.action] = options._const.removeElement;\n applyDiff(tree, diff, options);\n break;\n case options._const.removeTextElement:\n diff[options._const.action] = options._const.addTextElement;\n applyDiff(tree, diff, options);\n break;\n case options._const.addTextElement:\n diff[options._const.action] = options._const.removeTextElement;\n applyDiff(tree, diff, options);\n break;\n default:\n console.log(\"unknown action\");\n }\n}\nfunction undoDOM(tree, diffs, options) {\n diffs = diffs.slice();\n diffs.reverse();\n diffs.forEach(function (diff) {\n undoDiff(tree, diff, options);\n });\n}\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\n var arguments$1 = arguments;\n\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments$1[i];\r\n for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) { t[p] = s[p]; } }\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar elementDescriptors = function (el) {\n var output = [];\n output.push(el.nodeName);\n if (el.nodeName !== \"#text\" && el.nodeName !== \"#comment\") {\n el = el;\n if (el.attributes) {\n if (el.attributes[\"class\"]) {\n output.push(\"\".concat(el.nodeName, \".\").concat(el.attributes[\"class\"].replace(/ /g, \".\")));\n }\n if (el.attributes.id) {\n output.push(\"\".concat(el.nodeName, \"#\").concat(el.attributes.id));\n }\n }\n }\n return output;\n};\nvar findUniqueDescriptors = function (li) {\n var uniqueDescriptors = {};\n var duplicateDescriptors = {};\n li.forEach(function (node) {\n elementDescriptors(node).forEach(function (descriptor) {\n var inUnique = descriptor in uniqueDescriptors;\n var inDupes = descriptor in duplicateDescriptors;\n if (!inUnique && !inDupes) {\n uniqueDescriptors[descriptor] = true;\n }\n else if (inUnique) {\n delete uniqueDescriptors[descriptor];\n duplicateDescriptors[descriptor] = true;\n }\n });\n });\n return uniqueDescriptors;\n};\nvar uniqueInBoth = function (l1, l2) {\n var l1Unique = findUniqueDescriptors(l1);\n var l2Unique = findUniqueDescriptors(l2);\n var inBoth = {};\n Object.keys(l1Unique).forEach(function (key) {\n if (l2Unique[key]) {\n inBoth[key] = true;\n }\n });\n return inBoth;\n};\nvar removeDone = function (tree) {\n delete tree.outerDone;\n delete tree.innerDone;\n delete tree.valueDone;\n if (tree.childNodes) {\n return tree.childNodes.every(removeDone);\n }\n else {\n return true;\n }\n};\nvar cleanNode = function (diffNode) {\n if (Object.prototype.hasOwnProperty.call(diffNode, \"data\")) {\n var textNode = {\n nodeName: diffNode.nodeName === \"#text\" ? \"#text\" : \"#comment\",\n data: diffNode.data,\n };\n return textNode;\n }\n else {\n var elementNode = {\n nodeName: diffNode.nodeName,\n };\n diffNode = diffNode;\n if (Object.prototype.hasOwnProperty.call(diffNode, \"attributes\")) {\n elementNode.attributes = __assign({}, diffNode.attributes);\n }\n if (Object.prototype.hasOwnProperty.call(diffNode, \"checked\")) {\n elementNode.checked = diffNode.checked;\n }\n if (Object.prototype.hasOwnProperty.call(diffNode, \"value\")) {\n elementNode.value = diffNode.value;\n }\n if (Object.prototype.hasOwnProperty.call(diffNode, \"selected\")) {\n elementNode.selected = diffNode.selected;\n }\n if (Object.prototype.hasOwnProperty.call(diffNode, \"childNodes\")) {\n elementNode.childNodes = diffNode.childNodes.map(function (diffChildNode) {\n return cleanNode(diffChildNode);\n });\n }\n return elementNode;\n }\n};\nvar isEqual = function (e1, e2) {\n if (![\"nodeName\", \"value\", \"checked\", \"selected\", \"data\"].every(function (element) {\n if (e1[element] !== e2[element]) {\n return false;\n }\n return true;\n })) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(e1, \"data\")) {\n // Comment or Text\n return true;\n }\n e1 = e1;\n e2 = e2;\n if (Boolean(e1.attributes) !== Boolean(e2.attributes)) {\n return false;\n }\n if (Boolean(e1.childNodes) !== Boolean(e2.childNodes)) {\n return false;\n }\n if (e1.attributes) {\n var e1Attributes = Object.keys(e1.attributes);\n var e2Attributes = Object.keys(e2.attributes);\n if (e1Attributes.length !== e2Attributes.length) {\n return false;\n }\n if (!e1Attributes.every(function (attribute) {\n if (e1.attributes[attribute] !==\n e2.attributes[attribute]) {\n return false;\n }\n return true;\n })) {\n return false;\n }\n }\n if (e1.childNodes) {\n if (e1.childNodes.length !== e2.childNodes.length) {\n return false;\n }\n if (!e1.childNodes.every(function (childNode, index) {\n return isEqual(childNode, e2.childNodes[index]);\n })) {\n return false;\n }\n }\n return true;\n};\nvar roughlyEqual = function (e1, e2, uniqueDescriptors, sameSiblings, preventRecursion) {\n if (preventRecursion === void 0) { preventRecursion = false; }\n if (!e1 || !e2) {\n return false;\n }\n if (e1.nodeName !== e2.nodeName) {\n return false;\n }\n if ([\"#text\", \"#comment\"].includes(e1.nodeName)) {\n // Note that we initially don't care what the text content of a node is,\n // the mere fact that it's the same tag and \"has text\" means it's roughly\n // equal, and then we can find out the true text difference later.\n return preventRecursion\n ? true\n : e1.data === e2.data;\n }\n e1 = e1;\n e2 = e2;\n if (e1.nodeName in uniqueDescriptors) {\n return true;\n }\n if (e1.attributes && e2.attributes) {\n if (e1.attributes.id) {\n if (e1.attributes.id !== e2.attributes.id) {\n return false;\n }\n else {\n var idDescriptor = \"\".concat(e1.nodeName, \"#\").concat(e1.attributes.id);\n if (idDescriptor in uniqueDescriptors) {\n return true;\n }\n }\n }\n if (e1.attributes[\"class\"] &&\n e1.attributes[\"class\"] === e2.attributes[\"class\"]) {\n var classDescriptor = \"\".concat(e1.nodeName, \".\").concat(e1.attributes[\"class\"].replace(/ /g, \".\"));\n if (classDescriptor in uniqueDescriptors) {\n return true;\n }\n }\n }\n if (sameSiblings) {\n return true;\n }\n var nodeList1 = e1.childNodes ? e1.childNodes.slice().reverse() : [];\n var nodeList2 = e2.childNodes ? e2.childNodes.slice().reverse() : [];\n if (nodeList1.length !== nodeList2.length) {\n return false;\n }\n if (preventRecursion) {\n return nodeList1.every(function (element, index) {\n return element.nodeName === nodeList2[index].nodeName;\n });\n }\n else {\n // note: we only allow one level of recursion at any depth. If 'preventRecursion'\n // was not set, we must explicitly force it to true for child iterations.\n var childUniqueDescriptors_1 = uniqueInBoth(nodeList1, nodeList2);\n return nodeList1.every(function (element, index) {\n return roughlyEqual(element, nodeList2[index], childUniqueDescriptors_1, true, true);\n });\n }\n};\n/**\n * based on https://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#JavaScript\n */\nvar findCommonSubsets = function (c1, c2, marked1, marked2) {\n var lcsSize = 0;\n var index = [];\n var c1Length = c1.length;\n var c2Length = c2.length;\n var // set up the matching table\n matches = Array.apply(void 0, new Array(c1Length + 1)).map(function () { return []; });\n var uniqueDescriptors = uniqueInBoth(c1, c2);\n var // If all of the elements are the same tag, id and class, then we can\n // consider them roughly the same even if they have a different number of\n // children. This will reduce removing and re-adding similar elements.\n subsetsSame = c1Length === c2Length;\n if (subsetsSame) {\n c1.some(function (element, i) {\n var c1Desc = elementDescriptors(element);\n var c2Desc = elementDescriptors(c2[i]);\n if (c1Desc.length !== c2Desc.length) {\n subsetsSame = false;\n return true;\n }\n c1Desc.some(function (description, i) {\n if (description !== c2Desc[i]) {\n subsetsSame = false;\n return true;\n }\n });\n if (!subsetsSame) {\n return true;\n }\n });\n }\n // fill the matches with distance values\n for (var c1Index = 0; c1Index < c1Length; c1Index++) {\n var c1Element = c1[c1Index];\n for (var c2Index = 0; c2Index < c2Length; c2Index++) {\n var c2Element = c2[c2Index];\n if (!marked1[c1Index] &&\n !marked2[c2Index] &&\n roughlyEqual(c1Element, c2Element, uniqueDescriptors, subsetsSame)) {\n matches[c1Index + 1][c2Index + 1] = matches[c1Index][c2Index]\n ? matches[c1Index][c2Index] + 1\n : 1;\n if (matches[c1Index + 1][c2Index + 1] >= lcsSize) {\n lcsSize = matches[c1Index + 1][c2Index + 1];\n index = [c1Index + 1, c2Index + 1];\n }\n }\n else {\n matches[c1Index + 1][c2Index + 1] = 0;\n }\n }\n }\n if (lcsSize === 0) {\n return false;\n }\n return {\n oldValue: index[0] - lcsSize,\n newValue: index[1] - lcsSize,\n length: lcsSize,\n };\n};\nvar makeBooleanArray = function (n, v) {\n return Array.apply(void 0, new Array(n)).map(function () { return v; });\n};\n/**\n * Generate arrays that indicate which node belongs to which subset,\n * or whether it's actually an orphan node, existing in only one\n * of the two trees, rather than somewhere in both.\n *\n * So if t1 = <img><canvas><br>, t2 = <canvas><br><img>.\n * The longest subset is \"<canvas><br>\" (length 2), so it will group 0.\n * The second longest is \"<img>\" (length 1), so it will be group 1.\n * gaps1 will therefore be [1,0,0] and gaps2 [0,0,1].\n *\n * If an element is not part of any group, it will stay being 'true', which\n * is the initial value. For example:\n * t1 = <img><p></p><br><canvas>, t2 = <b></b><br><canvas><img>\n *\n * The \"<p></p>\" and \"<b></b>\" do only show up in one of the two and will\n * therefore be marked by \"true\". The remaining parts are parts of the\n * groups 0 and 1:\n * gaps1 = [1, true, 0, 0], gaps2 = [true, 0, 0, 1]\n *\n */\nvar getGapInformation = function (t1, t2, stable) {\n var gaps1 = t1.childNodes\n ? makeBooleanArray(t1.childNodes.length, true)\n : [];\n var gaps2 = t2.childNodes\n ? makeBooleanArray(t2.childNodes.length, true)\n : [];\n var group = 0;\n // give elements from the same subset the same group number\n stable.forEach(function (subset) {\n var endOld = subset.oldValue + subset.length;\n var endNew = subset.newValue + subset.length;\n for (var j = subset.oldValue; j < endOld; j += 1) {\n gaps1[j] = group;\n }\n for (var j = subset.newValue; j < endNew; j += 1) {\n gaps2[j] = group;\n }\n group += 1;\n });\n return {\n gaps1: gaps1,\n gaps2: gaps2,\n };\n};\n/**\n * Find all matching subsets, based on immediate child differences only.\n */\nvar markBoth = function (marked1, marked2, subset, i) {\n marked1[subset.oldValue + i] = true;\n marked2[subset.newValue + i] = true;\n};\nvar markSubTrees = function (oldTree, newTree) {\n // note: the child lists are views, and so update as we update old/newTree\n var oldChildren = oldTree.childNodes ? oldTree.childNodes : [];\n var newChildren = newTree.childNodes ? newTree.childNodes : [];\n var marked1 = makeBooleanArray(oldChildren.length, false);\n var marked2 = makeBooleanArray(newChildren.length, false);\n var subsets = [];\n var returnIndex = function () {\n return arguments[1];\n };\n var foundAllSubsets = false;\n var _loop_1 = function () {\n var subset = findCommonSubsets(oldChildren, newChildren, marked1, marked2);\n if (subset) {\n subsets.push(subset);\n var subsetArray = Array.apply(void 0, new Array(subset.length)).map(returnIndex);\n subsetArray.forEach(function (item) {\n return markBoth(marked1, marked2, subset, item);\n });\n }\n else {\n foundAllSubsets = true;\n }\n };\n while (!foundAllSubsets) {\n _loop_1();\n }\n oldTree.subsets = subsets;\n oldTree.subsetsAge = 100;\n return subsets;\n};\nvar DiffTracker = /** @class */ (function () {\n function DiffTracker() {\n this.list = [];\n }\n DiffTracker.prototype.add = function (diffs) {\n var _a;\n (_a = this.list).push.apply(_a, diffs);\n };\n DiffTracker.prototype.forEach = function (fn) {\n this.list.forEach(function (li) { return fn(li); });\n };\n return DiffTracker;\n}());\n\n// ===== Apply a virtual diff =====\nfunction getFromVirtualRoute(tree, route) {\n var node = tree;\n var parentNode;\n var nodeIndex;\n route = route.slice();\n while (route.length > 0) {\n nodeIndex = route.splice(0, 1)[0];\n parentNode = node;\n node = node.childNodes ? node.childNodes[nodeIndex] : undefined;\n }\n return {\n node: node,\n parentNode: parentNode,\n nodeIndex: nodeIndex,\n };\n}\nfunction applyVirtualDiff(tree, diff, options) {\n var _a;\n var node, parentNode, nodeIndex;\n if (![options._const.addElement, options._const.addTextElement].includes(diff[options._const.action])) {\n // For adding nodes, we calculate the route later on. It's different because it includes the position of the newly added item.\n var routeInfo = getFromVirtualRoute(tree, diff[options._const.route]);\n node = routeInfo.node;\n parentNode = routeInfo.parentNode;\n nodeIndex = routeInfo.nodeIndex;\n }\n var newSubsets = [];\n // pre-diff hook\n var info = {\n diff: diff,\n node: node,\n };\n if (options.preVirtualDiffApply(info)) {\n return true;\n }\n var newNode;\n var nodeArray;\n var route;\n switch (diff[options._const.action]) {\n case options._const.addAttribute:\n if (!node.attributes) {\n node.attributes = {};\n }\n node.attributes[diff[options._const.name]] =\n diff[options._const.value];\n if (diff[options._const.name] === \"checked\") {\n node.checked = true;\n }\n else if (diff[options._const.name] === \"selected\") {\n node.selected = true;\n }\n else if (node.nodeName === \"INPUT\" &&\n diff[options._const.name] === \"value\") {\n node.value = diff[options._const.value];\n }\n break;\n case options._const.modifyAttribute:\n node.attributes[diff[options._const.name]] =\n diff[options._const.newValue];\n break;\n case options._const.removeAttribute:\n delete node.attributes[diff[options._const.name]];\n if (Object.keys(node.attributes).length === 0) {\n delete node.attributes;\n }\n if (diff[options._const.name] === \"checked\") {\n node.checked = false;\n }\n else if (diff[options._const.name] === \"selected\") {\n delete node.selected;\n }\n else if (node.nodeName === \"INPUT\" &&\n diff[options._const.name] === \"value\") {\n delete node.value;\n }\n break;\n case options._const.modifyTextElement:\n node.data = diff[options._const.newValue];\n if (parentNode.nodeName === \"TEXTAREA\") {\n parentNode.value = diff[options._const.newValue];\n }\n break;\n case options._const.modifyValue:\n node.value = diff[options._const.newValue];\n break;\n case options._const.modifyComment:\n node.data = diff[options._const.newValue];\n break;\n case options._const.modifyChecked:\n node.checked = diff[options._const.newValue];\n break;\n case options._const.modifySelected:\n node.selected = diff[options._const.newValue];\n break;\n case options._const.replaceElement:\n newNode = cleanNode(diff[options._const.newValue]);\n parentNode.childNodes[nodeIndex] = newNode;\n break;\n case options._const.relocateGroup:\n nodeArray = node.childNodes\n .splice(diff[options._const.from], diff[options._const.groupLength])\n .reverse();\n nodeArray.forEach(function (movedNode) {\n return node.childNodes.splice(diff[options._const.to], 0, movedNode);\n });\n if (node.subsets) {\n node.subsets.forEach(function (map) {\n if (diff[options._const.from] < diff[options._const.to] &&\n map.oldValue <= diff[options._const.to] &&\n map.oldValue > diff[options._const.from]) {\n map.oldValue -= diff[options._const.groupLength];\n var splitLength = map.oldValue + map.length - diff[options._const.to];\n if (splitLength > 0) {\n // new insertion splits map.\n newSubsets.push({\n oldValue: diff[options._const.to] +\n diff[options._const.groupLength],\n newValue: map.newValue + map.length - splitLength,\n length: splitLength,\n });\n map.length -= splitLength;\n }\n }\n else if (diff[options._const.from] > diff[options._const.to] &&\n map.oldValue > diff[options._const.to] &&\n map.oldValue < diff[options._const.from]) {\n map.oldValue += diff[options._const.groupLength];\n var splitLength = map.oldValue + map.length - diff[options._const.to];\n if (splitLength > 0) {\n // new insertion splits map.\n newSubsets.push({\n oldValue: diff[options._const.to] +\n diff[options._const.groupLength],\n newValue: map.newValue + map.length - splitLength,\n length: splitLength,\n });\n map.length -= splitLength;\n }\n }\n else if (map.oldValue === diff[options._const.from]) {\n map.oldValue = diff[options._const.to];\n }\n });\n }\n break;\n case options._const.removeElement:\n parentNode.childNodes.splice(nodeIndex, 1);\n if (parentNode.subsets) {\n parentNode.subsets.forEach(function (map) {\n if (map.oldValue > nodeIndex) {\n map.oldValue -= 1;\n }\n else if (map.oldValue === nodeIndex) {\n map.delete = true;\n }\n else if (map.oldValue < nodeIndex &&\n map.oldValue + map.length > nodeIndex) {\n if (map.oldValue + map.length - 1 === nodeIndex) {\n map.length--;\n }\n else {\n newSubsets.push({\n newValue: map.newValue + nodeIndex - map.oldValue,\n oldValue: nodeIndex,\n length: map.length - nodeIndex + map.oldValue - 1,\n });\n map.length = nodeIndex - map.oldValue;\n }\n }\n });\n }\n node = parentNode;\n break;\n case options._const.addElement: {\n route = diff[options._const.route].slice();\n var c_1 = route.splice(route.length - 1, 1)[0];\n node = (_a = getFromVirtualRoute(tree, route)) === null || _a === void 0 ? void 0 : _a.node;\n newNode = cleanNode(diff[options._const.element]);\n if (!node.childNodes) {\n node.childNodes = [];\n }\n if (c_1 >= node.childNodes.length) {\n node.childNodes.push(newNode);\n }\n else {\n node.childNodes.splice(c_1, 0, newNode);\n }\n if (node.subsets) {\n node.subsets.forEach(function (map) {\n if (map.oldValue >= c_1) {\n map.oldValue += 1;\n }\n else if (map.oldValue < c_1 &&\n map.oldValue + map.length > c_1) {\n var splitLength = map.oldValue + map.length - c_1;\n newSubsets.push({\n newValue: map.newValue + map.length - splitLength,\n oldValue: c_1 + 1,\n length: splitLength,\n });\n map.length -= splitLength;\n }\n });\n }\n break;\n }\n case options._const.removeTextElement:\n parentNode.childNodes.splice(nodeIndex, 1);\n if (parentNode.nodeName === \"TEXTAREA\") {\n delete parentNode.value;\n }\n if (parentNode.subsets) {\n parentNode.subsets.forEach(function (map) {\n if (map.oldValue > nodeIndex) {\n map.oldValue -= 1;\n }\n else if (map.oldValue === nodeIndex) {\n map.delete = true;\n }\n else if (map.oldValue < nodeIndex &&\n map.oldValue + map.length > nodeIndex) {\n if (map.oldValue + map.length - 1 === nodeIndex) {\n map.length--;\n }\n else {\n newSubsets.push({\n newValue: map.newValue + nodeIndex - map.oldValue,\n oldValue: nodeIndex,\n length: map.length - nodeIndex + map.oldValue - 1,\n });\n map.length = nodeIndex - map.oldValue;\n }\n }\n });\n }\n node = parentNode;\n break;\n case options._const.addTextElement: {\n route = diff[options._const.route].slice();\n var c_2 = route.splice(route.length - 1, 1)[0];\n newNode = {\n nodeName: \"#text\",\n data: diff[options._const.value],\n };\n node = getFromVirtualRoute(tree, route).node;\n if (!node.childNodes) {\n node.childNodes = [];\n }\n if (c_2 >= node.childNodes.length) {\n node.childNodes.push(newNode);\n }\n else {\n node.childNodes.splice(c_2, 0, newNode);\n }\n if (node.nodeName === \"TEXTAREA\") {\n node.value = diff[options._const.newValue];\n }\n if (node.subsets) {\n node.subsets.forEach(function (map) {\n if (map.oldValue >= c_2) {\n map.oldValue += 1;\n }\n if (map.oldValue < c_2 && map.oldValue + map.length > c_2) {\n var splitLength = map.oldValue + map.length - c_2;\n newSubsets.push({\n newValue: map.newValue + map.length - splitLength,\n oldValue: c_2 + 1,\n length: splitLength,\n });\n map.length -= splitLength;\n }\n });\n }\n break;\n }\n default:\n console.log(\"unknown action\");\n }\n if (node.subsets) {\n node.subsets = node.subsets.filter(function (map) { return !map.delete && map.oldValue !== map.newValue; });\n if (newSubsets.length) {\n node.subsets = node.subsets.concat(newSubsets);\n }\n }\n options.postVirtualDiffApply({\n node: info.node,\n diff: info.diff,\n newNode: newNode,\n });\n return;\n}\nfunction applyVirtual(tree, diffs, options) {\n diffs.forEach(function (diff) {\n applyVirtualDiff(tree, diff, options);\n });\n return true;\n}\n\nfunction nodeToObj(aNode, options) {\n if (options === void 0) { options = { valueDiffing: true }; }\n var objNode = {\n nodeName: aNode.nodeName,\n };\n if (checkElementType(aNode, \"Text\", \"Comment\")) {\n objNode.data = aNode.data;\n }\n else {\n if (aNode.attributes && aNode.attributes.length > 0) {\n objNode.attributes = {};\n var nodeArray = Array.prototype.slice.call(aNode.attributes);\n nodeArray.forEach(function (attribute) {\n return (objNode.attributes[attribute.name] = attribute.value);\n });\n }\n if (aNode.childNodes && aNode.childNodes.length > 0) {\n objNode.childNodes = [];\n var nodeArray = Array.prototype.slice.call(aNode.childNodes);\n nodeArray.forEach(function (childNode) {\n return objNode.childNodes.push(nodeToObj(childNode, options));\n });\n }\n if (options.valueDiffing) {\n if (checkElementType(aNode, \"HTMLTextAreaElement\")) {\n objNode.value = aNode.value;\n }\n if (checkElementType(aNode, \"HTMLInputElement\") &&\n [\"radio\", \"checkbox\"].includes(aNode.type.toLowerCase()) &&\n aNode.checked !== undefined) {\n objNode.checked = aNode.checked;\n }\n else if (checkElementType(aNode, \"HTMLButtonElement\", \"HTMLDataElement\", \"HTMLInputElement\", \"HTMLLIElement\", \"HTMLMeterElement\", \"HTMLOptionElement\", \"HTMLProgressElement\", \"HTMLParamElement\")) {\n objNode.value = aNode.value;\n }\n if (checkElementType(aNode, \"HTMLOptionElement\")) {\n objNode.selected = aNode.selected;\n }\n }\n }\n return objNode;\n}\n\n// from html-parse-stringify (MIT)\nvar tagRE = /<\\s*\\/*[a-zA-Z:_][a-zA-Z0-9:_\\-.]*\\s*(?:\"[^\"]*\"['\"]*|'[^']*'['\"]*|[^'\"/>])*\\/*\\s*>|<!--(?:.|\\n|\\r)*?-->/g;\nvar attrRE = /\\s([^'\"/\\s><]+?)[\\s/>]|([^\\s=]+)=\\s?(\".*?\"|'.*?')/g;\nfunction unescape(string) {\n return string\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/&/g, \"&\");\n}\n// create optimized lookup object for\n// void elements as listed here:\n// https://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\nvar lookup = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n menuItem: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n};\nvar parseTag = function (tag, caseSensitive) {\n var res = {\n nodeName: \"\",\n attributes: {},\n };\n var voidElement = false;\n var type = \"tag\";\n var tagMatch = tag.match(/<\\/?([^\\s]+?)[/\\s>]/);\n if (tagMatch) {\n res.nodeName =\n caseSensitive || tagMatch[1] === \"svg\"\n ? tagMatch[1]\n : tagMatch[1].toUpperCase();\n if (lookup[tagMatch[1]] || tag.charAt(tag.length - 2) === \"/\") {\n voidElement = true;\n }\n // handle comment tag\n if (res.nodeName.startsWith(\"!--\")) {\n var endIndex = tag.indexOf(\"-->\");\n return {\n type: \"comment\",\n node: {\n nodeName: \"#comment\",\n data: endIndex !== -1 ? tag.slice(4, endIndex) : \"\",\n },\n voidElement: voidElement,\n };\n }\n }\n var reg = new RegExp(attrRE);\n var result = null;\n var done = false;\n while (!done) {\n result = reg.exec(tag);\n if (result === null) {\n done = true;\n }\n else if (result[0].trim()) {\n if (result[1]) {\n var attr = result[1].trim();\n var arr = [attr, \"\"];\n if (attr.indexOf(\"=\") > -1)\n { arr = attr.split(\"=\"); }\n res.attributes[arr[0]] = arr[1];\n reg.lastIndex--;\n }\n else if (result[2])\n { res.attributes[result[2]] = result[3]\n .trim()\n .substring(1, result[3].length - 1); }\n }\n }\n return {\n type: type,\n node: res,\n voidElement: voidElement,\n };\n};\nvar stringToObj = function (html, options) {\n if (options === void 0) { options = {\n valueDiffing: true,\n caseSensitive: false,\n }; }\n var result = [];\n var current;\n var level = -1;\n var arr = [];\n var inComponent = false, insideSvg = false;\n // handle text at top level\n if (html.indexOf(\"<\") !== 0) {\n var end = html.indexOf(\"<\");\n result.push({\n nodeName: \"#text\",\n data: end === -1 ? html : html.substring(0, end),\n });\n }\n html.replace(tagRE, function (tag, index) {\n var isOpen = tag.charAt(1) !== \"/\";\n var isComment = tag.startsWith(\"<!--\");\n var start = index + tag.length;\n var nextChar = html.charAt(start);\n if (isComment) {\n var comment = parseTag(tag, options.caseSensitive).node;\n // if we're at root, push new base node\n if (level < 0) {\n result.push(comment);\n return \"\";\n }\n var parent_1 = arr[level];\n if (parent_1 && comment.nodeName) {\n if (!parent_1.node.childNodes) {\n parent_1.node.childNodes = [];\n }\n parent_1.node.childNodes.push(comment);\n }\n return \"\";\n }\n if (isOpen) {\n current = parseTag(tag, options.caseSensitive || insideSvg);\n if (current.node.nodeName === \"svg\") {\n insideSvg = true;\n }\n level++;\n if (!current.voidElement &&\n !inComponent &&\n nextChar &&\n nextChar !== \"<\") {\n if (!current.node.childNodes) {\n current.node.childNodes = [];\n }\n var data = unescape(html.slice(start, html.indexOf(\"<\", start)));\n current.node.childNodes.push({\n nodeName: \"#text\",\n data: data,\n });\n if (options.valueDiffing &&\n current.node.nodeName === \"TEXTAREA\") {\n current.node.value = data;\n }\n }\n // if we're at root, push new base node\n if (level === 0 && current.node.nodeName) {\n result.push(current.node);\n }\n var parent_2 = arr[level - 1];\n if (parent_2 && current.node.nodeName) {\n if (!parent_2.node.childNodes) {\n parent_2.node.childNodes = [];\n }\n parent_2.node.childNodes.push(current.node);\n }\n arr[level] = current;\n }\n if (!isOpen || current.voidElement) {\n if (level > -1 &&\n (current.voidElement ||\n (options.caseSensitive &&\n current.node.nodeName === tag.slice(2, -1)) ||\n (!options.caseSensitive &&\n current.node.nodeName.toUpperCase() ===\n tag.slice(2, -1).toUpperCase()))) {\n level--;\n // move current up a level to match the end tag\n if (level > -1) {\n if (current.node.nodeName === \"svg\") {\n insideSvg = false;\n }\n current = arr[level];\n }\n }\n if (nextChar !== \"<\" && nextChar) {\n // trailing text node\n // if we're at the root, push a base text node. otherwise add as\n // a child to the current node.\n var childNodes = level === -1 ? result : arr[level].node.childNodes || [];\n // calculate correct end of the data slice in case there's\n // no tag after the text node.\n var end = html.indexOf(\"<\", start);\n var data = unescape(html.slice(start, end === -1 ? undefined : end));\n childNodes.push({\n nodeName: \"#text\",\n data: data,\n });\n }\n }\n return \"\";\n });\n return result[0];\n};\n\n// ===== Create a diff =====\nvar DiffFinder = /** @class */ (function () {\n function DiffFinder(t1Node, t2Node, options) {\n this.options = options;\n this.t1 = (typeof Element !== \"undefined\" &&\n checkElementType(t1Node, \"Element\")\n ? nodeToObj(t1Node, this.options)\n : typeof t1Node === \"string\"\n ? stringToObj(t1Node, this.options)\n : JSON.parse(JSON.stringify(t1Node)));\n this.t2 = (typeof Element !== \"undefined\" &&\n checkElementType(t2Node, \"Element\")\n ? nodeToObj(t2Node, this.options)\n : typeof t2Node === \"string\"\n ? stringToObj(t2Node, this.options)\n : JSON.parse(JSON.stringify(t2Node)));\n this.diffcount = 0;\n this.foundAll = false;\n if (this.debug) {\n this.t1Orig =\n typeof Element !== \"undefined\" &&\n checkElementType(t1Node, \"Element\")\n ? nodeToObj(t1Node, this.options)\n : typeof t1Node === \"string\"\n ? stringToObj(t1Node, this.options)\n : JSON.parse(JSON.stringify(t1Node));\n this.t2Orig =\n typeof Element !== \"undefined\" &&\n checkElementType(t2Node, \"Element\")\n ? nodeToObj(t2Node, this.options)\n : typeof t2Node === \"string\"\n ? stringToObj(t2Node, this.options)\n : JSON.parse(JSON.stringify(t2Node));\n }\n this.tracker = new DiffTracker();\n }\n DiffFinder.prototype.init = function () {\n return this.findDiffs(this.t1, this.t2);\n };\n DiffFinder.prototype.findDiffs = function (t1, t2) {\n var diffs;\n do {\n if (this.options.debug) {\n this.diffcount += 1;\n if (this.diffcount > this.options.diffcap) {\n throw new Error(\"surpassed diffcap:\".concat(JSON.stringify(this.t1Orig), \" -> \").concat(JSON.stringify(this.t2Orig)));\n }\n }\n diffs = this.findNextDiff(t1, t2, []);\n if (diffs.length === 0) {\n // Last check if the elements really are the same now.\n // If not, remove all info about being done and start over.\n // Sometimes a node can be marked as done, but the creation of subsequent diffs means that it has to be changed again.\n if (!isEqual(t1, t2)) {\n if (this.foundAll) {\n console.error(\"Could not find remaining diffs!\");\n }\n else {\n this.foundAll = true;\n removeDone(t1);\n diffs = this.findNextDiff(t1, t2, []);\n }\n }\n }\n if (diffs.length > 0) {\n this.foundAll = false;\n this.tracker.add(diffs);\n applyVirtual(t1, diffs, this.options);\n }\n } while (diffs.length > 0);\n return this.tracker.list;\n };\n DiffFinder.prototype.findNextDiff = function (t1, t2, route) {\n var diffs;\n var fdiffs;\n if (this.options.maxDepth && route.length > this.options.maxDepth) {\n return [];\n }\n // outer differences?\n if (!t1.outerDone) {\n diffs = this.findOuterDiff(t1, t2, route);\n if (this.options.filterOuterDiff) {\n fdiffs = this.options.filterOuterDiff(t1, t2, diffs);\n if (fdiffs)\n { diffs = fdiffs; }\n }\n if (diffs.length > 0) {\n t1.outerDone = true;\n return diffs;\n }\n else {\n t1.outerDone = true;\n }\n }\n if (Object.prototype.hasOwnProperty.call(t1, \"data\")) {\n // Comment or Text\n return [];\n }\n t1 = t1;\n t2 = t2;\n // inner differences?\n if (!t1.innerDone) {\n diffs = this.findInnerDiff(t1, t2, route);\n if (diffs.length > 0) {\n return diffs;\n }\n else {\n t1.innerDone = true;\n }\n }\n if (this.options.valueDiffing && !t1.valueDone) {\n // value differences?\n diffs = this.findValueDiff(t1, t2, route);\n if (diffs.length > 0) {\n t1.valueDone = true;\n return diffs;\n }\n else {\n t1.valueDone = true;\n }\n }\n // no differences\n return [];\n };\n DiffFinder.prototype.findOuterDiff = function (t1, t2, route) {\n var diffs = [];\n var attr;\n var attr1;\n var attr2;\n var attrLength;\n var pos;\n var i;\n if (t1.nodeName !== t2.nodeName) {\n if (!route.length) {\n throw new Error(\"Top level nodes have to be of the same kind.\");\n }\n return [\n new Diff()\n .setValue(this.options._const.action, this.options._const.replaceElement)\n .setValue(this.options._const.oldValue, cleanNode(t1))\n .setValue(this.options._const.newValue, cleanNode(t2))\n .setValue(this.options._const.route, route) ];\n }\n if (route.length &&\n this.options.diffcap <\n Math.abs((t1.childNodes || []).length - (t2.childNodes || []).length)) {\n return [\n new Diff()\n .setValue(this.options._const.action, this.options._const.replaceElement)\n .setValue(this.options._const.oldValue, cleanNode(t1))\n .setValue(this.options._const.newValue, cleanNode(t2))\n .setValue(this.options._const.route, route) ];\n }\n if (Object.prototype.hasOwnProperty.call(t1, \"data\") &&\n t1.data !== t2.data) {\n // Comment or text node.\n if (t1.nodeName === \"#text\") {\n return [\n new Diff()\n .setValue(this.options._const.action, this.options._const.modifyTextElement)\n .setValue(this.options._const.route, route)\n .setValue(this.options._const.oldValue, t1.data)\n .setValue(this.options._const.newValue, t2.data) ];\n }\n else {\n return [\n new Diff()\n .setValue(this.options._const.action, this.options._const.modifyComment)\n .setValue(this.options._const.route, route)\n .setValue(this.options._const.oldValue, t1.data)\n .setValue(this.options._const.newValue, t2.data) ];\n }\n }\n t1 = t1;\n t2 = t2;\n attr1 = t1.attributes ? Object.keys(t1.attributes).sort() : [];\n attr2 = t2.attributes ? Object.keys(t2.attributes).sort() : [];\n attrLength = attr1.length;\n for (i = 0; i < attrLength; i++) {\n attr = attr1[i];\n pos = attr2.indexOf(attr);\n if (pos === -1) {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeAttribute)\n .setValue(this.options._const.route, route)\n .setValue(this.options._const.name, attr)\n .setValue(this.options._const.value, t1.attributes[attr]));\n }\n else {\n attr2.splice(pos, 1);\n if (t1.attributes[attr] !== t2.attributes[attr]) {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.modifyAttribute)\n .setValue(this.options._const.route, route)\n .setValue(this.options._const.name, attr)\n .setValue(this.options._const.oldValue, t1.attributes[attr])\n .setValue(this.options._const.newValue, t2.attributes[attr]));\n }\n }\n }\n attrLength = attr2.length;\n for (i = 0; i < attrLength; i++) {\n attr = attr2[i];\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.addAttribute)\n .setValue(this.options._const.route, route)\n .setValue(this.options._const.name, attr)\n .setValue(this.options._const.value, t2.attributes[attr]));\n }\n return diffs;\n };\n DiffFinder.prototype.findInnerDiff = function (t1, t2, route) {\n var t1ChildNodes = t1.childNodes ? t1.childNodes.slice() : [];\n var t2ChildNodes = t2.childNodes ? t2.childNodes.slice() : [];\n var last = Math.max(t1ChildNodes.length, t2ChildNodes.length);\n var childNodesLengthDifference = Math.abs(t1ChildNodes.length - t2ChildNodes.length);\n var diffs = [];\n var index = 0;\n if (!this.options.maxChildCount || last < this.options.maxChildCount) {\n var cachedSubtrees = Boolean(t1.subsets && t1.subsetsAge--);\n var subtrees = cachedSubtrees\n ? t1.subsets\n : t1.childNodes && t2.childNodes\n ? markSubTrees(t1, t2)\n : [];\n if (subtrees.length > 0) {\n /* One or more groups have been identified among the childnodes of t1\n * and t2.\n */\n diffs = this.attemptGroupRelocation(t1, t2, subtrees, route, cachedSubtrees);\n if (diffs.length > 0) {\n return diffs;\n }\n }\n }\n /* 0 or 1 groups of similar child nodes have been found\n * for t1 and t2. 1 If there is 1, it could be a sign that the\n * contents are the same. When the number of groups is below 2,\n * t1 and t2 are made to have the same length and each of the\n * pairs of child nodes are diffed.\n */\n for (var i = 0; i < last; i += 1) {\n var e1 = t1ChildNodes[i];\n var e2 = t2ChildNodes[i];\n if (childNodesLengthDifference) {\n /* t1 and t2 have different amounts of childNodes. Add\n * and remove as necessary to obtain the same length */\n if (e1 && !e2) {\n if (e1.nodeName === \"#text\") {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeTextElement)\n .setValue(this.options._const.route, route.concat(index))\n .setValue(this.options._const.value, e1.data));\n index -= 1;\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeElement)\n .setValue(this.options._const.route, route.concat(index))\n .setValue(this.options._const.element, cleanNode(e1)));\n index -= 1;\n }\n }\n else if (e2 && !e1) {\n if (e2.nodeName === \"#text\") {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.addTextElement)\n .setValue(this.options._const.route, route.concat(index))\n .setValue(this.options._const.value, e2.data));\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.addElement)\n .setValue(this.options._const.route, route.concat(index))\n .setValue(this.options._const.element, cleanNode(e2)));\n }\n }\n }\n /* We are now guaranteed that childNodes e1 and e2 exist,\n * and that they can be diffed.\n */\n /* Diffs in child nodes should not affect the parent node,\n * so we let these diffs be submitted together with other\n * diffs.\n */\n if (e1 && e2) {\n if (!this.options.maxChildCount ||\n last < this.options.maxChildCount) {\n diffs = diffs.concat(this.findNextDiff(e1, e2, route.concat(index)));\n }\n else if (!isEqual(e1, e2)) {\n if (t1ChildNodes.length > t2ChildNodes.length) {\n if (e1.nodeName === \"#text\") {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeTextElement)\n .setValue(this.options._const.route, route.concat(index))\n .setValue(this.options._const.value, e1.data));\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeElement)\n .setValue(this.options._const.element, cleanNode(e1))\n .setValue(this.options._const.route, route.concat(index)));\n }\n t1ChildNodes.splice(i, 1);\n i -= 1;\n index -= 1;\n childNodesLengthDifference -= 1;\n }\n else if (t1ChildNodes.length < t2ChildNodes.length) {\n diffs = diffs.concat([\n new Diff()\n .setValue(this.options._const.action, this.options._const.addElement)\n .setValue(this.options._const.element, cleanNode(e2))\n .setValue(this.options._const.route, route.concat(index)) ]);\n t1ChildNodes.splice(i, 0, cleanNode(e2));\n childNodesLengthDifference -= 1;\n }\n else {\n diffs = diffs.concat([\n new Diff()\n .setValue(this.options._const.action, this.options._const.replaceElement)\n .setValue(this.options._const.oldValue, cleanNode(e1))\n .setValue(this.options._const.newValue, cleanNode(e2))\n .setValue(this.options._const.route, route.concat(index)) ]);\n }\n }\n }\n index += 1;\n }\n t1.innerDone = true;\n return diffs;\n };\n DiffFinder.prototype.attemptGroupRelocation = function (t1, t2, subtrees, route, cachedSubtrees) {\n /* Either t1.childNodes and t2.childNodes have the same length, or\n * there are at least two groups of similar elements can be found.\n * attempts are made at equalizing t1 with t2. First all initial\n * elements with no group affiliation (gaps=true) are removed (if\n * only in t1) or added (if only in t2). Then the creation of a group\n * relocation diff is attempted.\n */\n var gapInformation = getGapInformation(t1, t2, subtrees);\n var gaps1 = gapInformation.gaps1;\n var gaps2 = gapInformation.gaps2;\n var t1ChildNodes = t1.childNodes.slice();\n var t2ChildNodes = t2.childNodes.slice();\n var shortest = Math.min(gaps1.length, gaps2.length);\n var destinationDifferent;\n var toGroup;\n var group;\n var node;\n var similarNode;\n var diffs = [];\n for (var index2 = 0, index1 = 0; index2 < shortest; index1 += 1, index2 += 1) {\n if (cachedSubtrees &&\n (gaps1[index2] === true || gaps2[index2] === true)) ;\n else if (gaps1[index1] === true) {\n node = t1ChildNodes[index1];\n if (node.nodeName === \"#text\") {\n if (t2ChildNodes[index2].nodeName === \"#text\") {\n if (node.data !==\n t2ChildNodes[index2].data) {\n // Check whether a text node with the same value follows later on.\n var testI = index1;\n while (t1ChildNodes.length > testI + 1 &&\n t1ChildNodes[testI + 1].nodeName === \"#text\") {\n testI += 1;\n if (t2ChildNodes[index2]\n .data ===\n t1ChildNodes[testI]\n .data) {\n similarNode = true;\n break;\n }\n }\n if (!similarNode) {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const\n .modifyTextElement)\n .setValue(this.options._const.route, route.concat(index1))\n .setValue(this.options._const.oldValue, node.data)\n .setValue(this.options._const.newValue, t2ChildNodes[index2].data));\n }\n }\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeTextElement)\n .setValue(this.options._const.route, route.concat(index1))\n .setValue(this.options._const.value, node.data));\n gaps1.splice(index1, 1);\n t1ChildNodes.splice(index1, 1);\n shortest = Math.min(gaps1.length, gaps2.length);\n index1 -= 1;\n index2 -= 1;\n }\n }\n else if (gaps2[index2] === true) {\n // both gaps1[index1] and gaps2[index2] are true.\n // We replace one element with another.\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.replaceElement)\n .setValue(this.options._const.oldValue, cleanNode(node))\n .setValue(this.options._const.newValue, cleanNode(t2ChildNodes[index2]))\n .setValue(this.options._const.route, route.concat(index1)));\n // t1ChildNodes at position index1 is not up-to-date, but that does not matter as\n // index1 will increase +1\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.removeElement)\n .setValue(this.options._const.route, route.concat(index1))\n .setValue(this.options._const.element, cleanNode(node)));\n gaps1.splice(index1, 1);\n t1ChildNodes.splice(index1, 1);\n shortest = Math.min(gaps1.length, gaps2.length);\n index1 -= 1;\n index2 -= 1;\n }\n }\n else if (gaps2[index2] === true) {\n node = t2ChildNodes[index2];\n if (node.nodeName === \"#text\") {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.addTextElement)\n .setValue(this.options._const.route, route.concat(index1))\n .setValue(this.options._const.value, node.data));\n gaps1.splice(index1, 0, true);\n t1ChildNodes.splice(index1, 0, {\n nodeName: \"#text\",\n data: node.data,\n });\n shortest = Math.min(gaps1.length, gaps2.length);\n //index1 += 1\n }\n else {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.addElement)\n .setValue(this.options._const.route, route.concat(index1))\n .setValue(this.options._const.element, cleanNode(node)));\n gaps1.splice(index1, 0, true);\n t1ChildNodes.splice(index1, 0, cleanNode(node));\n shortest = Math.min(gaps1.length, gaps2.length);\n //index1 += 1\n }\n }\n else if (gaps1[index1] !== gaps2[index2]) {\n if (diffs.length > 0) {\n return diffs;\n }\n // group relocation\n group = subtrees[gaps1[index1]];\n toGroup = Math.min(group.newValue, t1ChildNodes.length - group.length);\n if (toGroup !== group.oldValue) {\n // Check whether destination nodes are different than originating ones.\n destinationDifferent = false;\n for (var j = 0; j < group.length; j += 1) {\n if (!roughlyEqual(t1ChildNodes[toGroup + j], t1ChildNodes[group.oldValue + j], {}, false, true)) {\n destinationDifferent = true;\n }\n }\n if (destinationDifferent) {\n return [\n new Diff()\n .setValue(this.options._const.action, this.options._const.relocateGroup)\n .setValue(this.options._const.groupLength, group.length)\n .setValue(this.options._const.from, group.oldValue)\n .setValue(this.options._const.to, toGroup)\n .setValue(this.options._const.route, route) ];\n }\n }\n }\n }\n return diffs;\n };\n DiffFinder.prototype.findValueDiff = function (t1, t2, route) {\n // Differences of value. Only useful if the value/selection/checked value\n // differs from what is represented in the DOM. For example in the case\n // of filled out forms, etc.\n var diffs = [];\n if (t1.selected !== t2.selected) {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.modifySelected)\n .setValue(this.options._const.oldValue, t1.selected)\n .setValue(this.options._const.newValue, t2.selected)\n .setValue(this.options._const.route, route));\n }\n if ((t1.value || t2.value) &&\n t1.value !== t2.value &&\n t1.nodeName !== \"OPTION\") {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.modifyValue)\n .setValue(this.options._const.oldValue, t1.value || \"\")\n .setValue(this.options._const.newValue, t2.value || \"\")\n .setValue(this.options._const.route, route));\n }\n if (t1.checked !== t2.checked) {\n diffs.push(new Diff()\n .setValue(this.options._const.action, this.options._const.modifyChecked)\n .setValue(this.options._const.oldValue, t1.checked)\n .setValue(this.options._const.newValue, t2.checked)\n .setValue(this.options._const.route, route));\n }\n return diffs;\n };\n return DiffFinder;\n}());\n\nvar DEFAULT_OPTIONS = {\n debug: false,\n diffcap: 10,\n maxDepth: false,\n maxChildCount: 50,\n valueDiffing: true,\n // syntax: textDiff: function (node, currentValue, expectedValue, newValue)\n textDiff: function (node, currentValue, expectedValue, newValue) {\n node.data = newValue;\n return;\n },\n // empty functions were benchmarked as running faster than both\n // `f && f()` and `if (f) { f(); }`\n preVirtualDiffApply: function () { },\n postVirtualDiffApply: function () { },\n preDiffApply: function () { },\n postDiffApply: function () { },\n filterOuterDiff: null,\n compress: false,\n _const: false,\n document: typeof window !== \"undefined\" && window.document\n ? window.document\n : false,\n components: [], // list of components used for converting from string\n};\nvar DiffDOM = /** @class */ (function () {\n function DiffDOM(options) {\n if (options === void 0) { options = {}; }\n // IE11 doesn't have Object.assign and buble doesn't translate object spreaders\n // by default, so this is the safest way of doing it currently.\n Object.entries(DEFAULT_OPTIONS).forEach(function (_a) {\n var key = _a[0], value = _a[1];\n if (!Object.prototype.hasOwnProperty.call(options, key)) {\n options[key] = value;\n }\n });\n if (!options._const) {\n var varNames = [\n \"addAttribute\",\n \"modifyAttribute\",\n \"removeAttribute\",\n \"modifyTextElement\",\n \"relocateGroup\",\n \"removeElement\",\n \"addElement\",\n \"removeTextElement\",\n \"addTextElement\",\n \"replaceElement\",\n \"modifyValue\",\n \"modifyChecked\",\n \"modifySelected\",\n \"modifyComment\",\n \"action\",\n \"route\",\n \"oldValue\",\n \"newValue\",\n \"element\",\n \"group\",\n \"groupLength\",\n \"from\",\n \"to\",\n \"name\",\n \"value\",\n \"data\",\n \"attributes\",\n \"nodeName\",\n \"childNodes\",\n \"checked\",\n \"selected\" ];\n var constNames_1 = {};\n if (options.compress) {\n varNames.forEach(function (varName, index) { return (constNames_1[varName] = index); });\n }\n else {\n varNames.forEach(function (varName) { return (constNames_1[varName] = varName); });\n }\n options._const = constNames_1;\n }\n this.options = options;\n }\n DiffDOM.prototype.apply = function (tree, diffs) {\n return applyDOM(tree, diffs, this.options);\n };\n DiffDOM.prototype.undo = function (tree, diffs) {\n return undoDOM(tree, diffs, this.options);\n };\n DiffDOM.prototype.diff = function (t1Node, t2Node) {\n var finder = new DiffFinder(t1Node, t2Node, this.options);\n return finder.init();\n };\n return DiffDOM;\n}());\n\n/**\n * Use TraceLogger to figure out function calls inside\n * JS objects by wrapping an object with a TraceLogger\n * instance.\n *\n * Pretty-prints the call trace (using unicode box code)\n * when tracelogger.toString() is called.\n */\n/**\n * Wrap an object by calling new TraceLogger(obj)\n *\n * If you're familiar with Python decorators, this\n * does roughly the same thing, adding pre/post\n * call hook logging calls so that you can see\n * what's going on.\n */\nvar TraceLogger = /** @class */ (function () {\n function TraceLogger(obj) {\n var _this = this;\n if (obj === void 0) { obj = {}; }\n this.pad = \"│ \";\n this.padding = \"\";\n this.tick = 1;\n this.messages = [];\n var wrapkey = function (obj, key) {\n // trace this function\n var oldfn = obj[key];\n obj[key] = function () {\n var arguments$1 = arguments;\n\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments$1[_i];\n }\n _this.fin(key, Array.prototype.slice.call(args));\n var result = oldfn.apply(obj, args);\n _this.fout(key, result);\n return result;\n };\n };\n // can't use Object.keys for prototype walking\n for (var key in obj) {\n if (typeof obj[key] === \"function\") {\n wrapkey(obj, key);\n }\n }\n this.log(\"┌ TRACELOG START\");\n }\n // called when entering a function\n TraceLogger.prototype.fin = function (fn, args) {\n this.padding += this.pad;\n this.log(\"\\u251C\\u2500> entering \".concat(fn), args);\n };\n // called when exiting a function\n TraceLogger.prototype.fout = function (fn, result) {\n this.log(\"│<──┘ generated return value\", result);\n this.padding = this.padding.substring(0, this.padding.length - this.pad.length);\n };\n // log message formatting\n TraceLogger.prototype.format = function (s, tick) {\n var nf = function (t) {\n var tStr = \"\".concat(t);\n while (tStr.length < 4) {\n tStr = \"0\".concat(t);\n }\n return tStr;\n };\n return \"\".concat(nf(tick), \"> \").concat(this.padding).concat(s);\n };\n // log a trace message\n TraceLogger.prototype.log = function () {\n var arguments$1 = arguments;\n\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments$1[_i];\n }\n var stringCollapse = function (v) {\n if (!v) {\n return \"<falsey>\";\n }\n if (typeof v === \"string\") {\n return v;\n }\n if (checkElementType(v, \"HTMLElement\")) {\n return v.outerHTML || \"<empty>\";\n }\n if (v instanceof Array) {\n return \"[\".concat(v.map(stringCollapse).join(\",\"), \"]\");\n }\n return v.toString() || v.valueOf() || \"<unknown>\";\n };\n var s = args.map(stringCollapse).join(\", \");\n this.messages.push(this.format(s, this.tick++));\n };\n // turn the log into a structured string with\n // unicode box codes to make it a sensible trace.\n TraceLogger.prototype.toString = function () {\n var cap = \"× \";\n var terminator = \"└───\";\n while (terminator.length <= this.padding.length + this.pad.length) {\n terminator += cap;\n }\n var _ = this.padding;\n this.padding = \"\";\n terminator = this.format(terminator, this.tick);\n this.padding = _;\n return \"\".concat(this.messages.join(\"\\n\"), \"\\n\").concat(terminator);\n };\n return TraceLogger;\n}());\n\nexport { DiffDOM, TraceLogger, nodeToObj, stringToObj };\n//# sourceMappingURL=module.js.map\n", "import {stringToObj} from \"diff-dom\"\n\nimport {cellType, columnsStateType, columnSettingsType, DataTableOptions, headerCellType, elementNodeType, textNodeType, renderOptions, rowType} from \"./types\"\nimport {cellToText, joinWithSpaces} from \"./helpers\"\n\n\nexport const headingsToVirtualHeaderRowDOM = (\n headings,\n columnSettings,\n columnsState: columnsStateType,\n {\n classes,\n format,\n hiddenHeader,\n sortable,\n scrollY,\n type\n }: DataTableOptions,\n {\n noColumnWidths,\n unhideHeader\n }: renderOptions\n) => ({\n nodeName: \"TR\",\n\n childNodes: headings.map(\n (heading: headerCellType, index: number) : elementNodeType | void => {\n const column = columnSettings[index] || ({\n type,\n format,\n sortable: true,\n searchable: true\n } as columnSettingsType)\n if (column.hidden) {\n return\n }\n const attributes : { [key: string]: string } = heading.attributes ? {...heading.attributes} : {}\n if (column.sortable && sortable && (!scrollY.length || unhideHeader)) {\n if (column.filter) {\n attributes[\"data-filterable\"] = \"true\"\n } else {\n attributes[\"data-sortable\"] = \"true\"\n }\n }\n\n if (column.headerClass) {\n attributes.class = joinWithSpaces(attributes.class, column.headerClass)\n }\n if (columnsState.sort && columnsState.sort.column === index) {\n const directionClass = columnsState.sort.dir === \"asc\" ? classes.ascending : classes.descending\n attributes.class = joinWithSpaces(attributes.class, directionClass)\n attributes[\"aria-sort\"] = columnsState.sort.dir === \"asc\" ? \"ascending\" : \"descending\"\n } else if (columnsState.filters[index]) {\n attributes.class = joinWithSpaces(attributes.class, classes.filterActive)\n }\n\n if (columnsState.widths[index] && !noColumnWidths) {\n const style = `width: ${columnsState.widths[index]}%;`\n attributes.style = joinWithSpaces(attributes.style, style)\n }\n if (scrollY.length && !unhideHeader) {\n const style = \"padding-bottom: 0;padding-top: 0;border: 0;\"\n attributes.style = joinWithSpaces(attributes.style, style)\n }\n\n const headerNodes : elementNodeType[] = heading.type === \"html\" ?\n heading.data as elementNodeType[] :\n [\n {\n nodeName: \"#text\",\n data: heading.text ?? String(heading.data)\n }\n ] as textNodeType[]\n return {\n nodeName: \"TH\",\n attributes,\n childNodes:\n ((hiddenHeader || scrollY.length) && !unhideHeader) ?\n [\n {\n nodeName: \"#text\",\n data: \"\"\n }\n ] :\n !column.sortable || !sortable ?\n headerNodes :\n [\n {\n nodeName: \"BUTTON\",\n attributes: {\n class: column.filter ? classes.filter : classes.sorter\n },\n childNodes: headerNodes\n }\n ]\n }\n }\n ).filter((column: (elementNodeType | void)) => column)\n})\n\nexport const dataToVirtualDOM = (tableAttributes: { [key: string]: string}, headings: headerCellType[], rows: rowType[], columnSettings: columnSettingsType[], columnsState: columnsStateType, rowCursor: (number | false), {\n classes,\n hiddenHeader,\n header,\n footer,\n format,\n sortable,\n scrollY,\n type,\n rowRender,\n tabIndex\n}: DataTableOptions, {\n noColumnWidths,\n unhideHeader,\n renderHeader\n}: renderOptions, footers: elementNodeType[], captions: elementNodeType[]) => {\n const table: elementNodeType = {\n nodeName: \"TABLE\",\n attributes: {...tableAttributes},\n childNodes: [\n {\n nodeName: \"TBODY\",\n childNodes: rows.map(\n ({row, index}) => {\n const tr: elementNodeType = {\n nodeName: \"TR\",\n attributes: {\n ...row.attributes,\n ...{\n \"data-index\": String(index)\n }\n },\n childNodes: row.cells.map(\n (cell: cellType, cIndex: number) => {\n const column = columnSettings[cIndex] || ({\n type,\n format,\n sortable: true,\n searchable: true\n } as columnSettingsType)\n if (column.hidden) {\n return\n }\n const td: elementNodeType = {\n nodeName: \"TD\",\n attributes: cell.attributes ? {...cell.attributes} : {},\n childNodes: column.type === \"html\" ?\n cell.data :\n [\n {\n nodeName: \"#text\",\n data: cellToText(cell)\n }\n ]\n } as elementNodeType\n if (!header && !footer && columnsState.widths[cIndex] && !noColumnWidths) {\n td.attributes.style = joinWithSpaces(td.attributes.style, `width: ${columnsState.widths[cIndex]}%;`)\n }\n if (column.cellClass) {\n td.attributes.class = joinWithSpaces(td.attributes.class, column.cellClass)\n }\n if (column.render) {\n const renderedCell : (string | elementNodeType | void) = column.render(cell.data, td, index, cIndex)\n if (renderedCell) {\n if (typeof renderedCell === \"string\") {\n // Convenience method to make it work similarly to what it did up to version 5.\n const node = stringToObj(`<td>${renderedCell}</td>`)\n\n if (node.childNodes.length !== 1 || ![\"#text\", \"#comment\"].includes(node.childNodes[0].nodeName)) {\n td.childNodes = node.childNodes\n } else {\n (td.childNodes[0] as textNodeType).data = renderedCell\n }\n\n } else {\n return renderedCell\n }\n }\n\n }\n return td\n }\n ).filter((column: (elementNodeType | void)) => column)\n }\n if (index === rowCursor) {\n tr.attributes.class = joinWithSpaces(tr.attributes.class, classes.cursor)\n }\n if (rowRender) {\n const renderedRow : (elementNodeType | void) = rowRender(row, tr, index)\n if (renderedRow) {\n if (typeof renderedRow === \"string\") {\n // Convenience method to make it work similarly to what it did up to version 5.\n const node = stringToObj(`<tr>${renderedRow}</tr>`)\n if (node.childNodes && (node.childNodes.length !== 1 || ![\"#text\", \"#comment\"].includes(node.childNodes[0].nodeName))) {\n tr.childNodes = node.childNodes\n } else {\n (tr.childNodes[0] as textNodeType).data = renderedRow\n }\n\n } else {\n return renderedRow\n }\n }\n }\n return tr\n }\n )\n } as elementNodeType\n ]\n }\n\n table.attributes.class = joinWithSpaces(table.attributes.class, classes.table)\n\n if (header || footer || renderHeader) {\n const headerRow: elementNodeType = headingsToVirtualHeaderRowDOM(headings, columnSettings, columnsState, {classes,\n hiddenHeader,\n sortable,\n scrollY}, {noColumnWidths,\n unhideHeader})\n\n if (header || renderHeader) {\n const thead: elementNodeType = {\n nodeName: \"THEAD\",\n childNodes: [headerRow]\n }\n if ((scrollY.length || hiddenHeader) && !unhideHeader) {\n thead.attributes = {\n style: \"height: 0px;\"\n }\n }\n table.childNodes.unshift(thead)\n }\n if (footer) {\n const footerRow = header ? structuredClone(headerRow) : headerRow\n const tfoot: elementNodeType = {\n nodeName: \"TFOOT\",\n childNodes: [footerRow]\n }\n if ((scrollY.length || hiddenHeader) && !unhideHeader) {\n tfoot.attributes = {style: \"height: 0px;\"}\n }\n table.childNodes.push(tfoot)\n }\n }\n\n footers.forEach(foot => table.childNodes.push(foot))\n captions.forEach(caption => table.childNodes.push(caption))\n\n if (tabIndex !== false) {\n table.attributes.tabindex = String(tabIndex)\n }\n\n return table\n}\n", "!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));", "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_customParseFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},t=/(\\[[^[]*\\])|([-_:/.,()\\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\\d\\d/,r=/\\d\\d?/,i=/\\d*[^-_:/,()\\s\\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\\d\\d:?(\\d\\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if(\"Z\"===e)return 0;var t=e.match(/([+-]|\\d\\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:\"+\"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?\"pm\":\"PM\");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\\d{3}/,function(e){this.milliseconds=+e}],s:[r,a(\"seconds\")],ss:[r,a(\"seconds\")],m:[r,a(\"minutes\")],mm:[r,a(\"minutes\")],H:[r,a(\"hours\")],h:[r,a(\"hours\")],HH:[r,a(\"hours\")],hh:[r,a(\"hours\")],D:[r,a(\"day\")],DD:[n,a(\"day\")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\\[|\\]/g,\"\")===e&&(this.day=r)}],M:[r,a(\"month\")],MM:[n,a(\"month\")],MMM:[i,function(e){var t=h(\"months\"),n=(h(\"monthsShort\")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h(\"months\").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\\d+/,a(\"year\")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\\d{4}/,a(\"year\")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\\[|\\]$/g,\"\")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if(\"string\"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,\"\")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if(\"string\"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if([\"x\",\"X\"].indexOf(t)>-1)return new Date((\"X\"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date(\"\")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date(\"\")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(\"\"))}else i.call(this,e)}}}));", "import dayjs from \"dayjs\"\nimport customParseFormat from \"dayjs/plugin/customParseFormat\"\n\ndayjs.extend(customParseFormat)\n\n/**\n * Use dayjs to parse cell contents for sorting\n */\nexport const parseDate = (content: string, format: string) => {\n let date: number | string\n\n // Converting to YYYYMMDD ensures we can accurately sort the column numerically\n\n if (format) {\n switch (format) {\n case \"ISO_8601\":\n // ISO8601 is already lexiographically sorted, so we can just sort it as a string.\n date = content\n break\n case \"RFC_2822\":\n date = dayjs(content.slice(5), \"DD MMM YYYY HH:mm:ss ZZ\").unix()\n break\n case \"MYSQL\":\n date = dayjs(content, \"YYYY-MM-DD hh:mm:ss\").unix()\n break\n case \"UNIX\":\n date = dayjs(content).unix()\n break\n // User defined format using the data-format attribute or columns[n].format option\n default:\n date = dayjs(content, format, true).valueOf()\n break\n }\n }\n return date\n}\n", "import {nodeToObj, stringToObj} from \"diff-dom\"\nimport {parseDate} from \"./date\"\nimport {namedNodeMapToObject, objToText} from \"./helpers\"\nimport {\n cellType,\n columnSettingsType,\n DataOption,\n dataRowType,\n headerCellType,\n inputCellType,\n inputHeaderCellType,\n inputRowType,\n nodeType\n} from \"./types\"\n\nexport const readDataCell = (cell: inputCellType, columnSettings : columnSettingsType) : cellType => {\n if (cell?.constructor === Object && Object.prototype.hasOwnProperty.call(cell, \"data\") && !Object.keys(cell).find(key => !([\"text\", \"order\", \"data\", \"attributes\"].includes(key)))) {\n return (cell as cellType)\n }\n const cellData : cellType = {\n data: cell\n }\n switch (columnSettings.type) {\n case \"string\":\n if (!(typeof cell === \"string\")) {\n cellData.text = String(cellData.data)\n cellData.order = cellData.text\n }\n break\n case \"date\":\n if (columnSettings.format) {\n cellData.order = parseDate(String(cellData.data), columnSettings.format)\n }\n break\n case \"number\":\n cellData.text = String(cellData.data as number)\n cellData.data = parseInt(cellData.data as string, 10)\n break\n case \"html\": {\n const node = Array.isArray(cellData.data) ?\n {nodeName: \"TD\",\n childNodes: (cellData.data as nodeType[])} : // If it is an array, we assume it is an array of nodeType\n stringToObj(`<td>${String(cellData.data)}</td>`)\n cellData.data = node.childNodes || []\n const text = objToText(node)\n cellData.text = text\n cellData.order = text\n break\n }\n case \"boolean\":\n if (typeof cellData.data === \"string\") {\n cellData.data = cellData.data.toLowerCase().trim()\n }\n cellData.data = ![\"false\", false, null, undefined, 0].includes(cellData.data as (string | number | boolean | null | undefined))\n cellData.order = cellData.data ? 1 : 0\n cellData.text = String(cellData.data)\n break\n case \"other\":\n cellData.text = \"\"\n cellData.order = 0\n break\n default:\n cellData.text = JSON.stringify(cellData.data)\n break\n }\n\n return cellData\n}\n\nconst readDOMDataCell = (cell: HTMLElement, columnSettings : columnSettingsType) : cellType => {\n let cellData : cellType\n switch (columnSettings.type) {\n case \"string\":\n cellData = {\n data: cell.innerText\n }\n break\n case \"date\": {\n const data = cell.innerText\n cellData = {\n data,\n order: parseDate(data, columnSettings.format)\n }\n break\n }\n case \"number\":\n cellData = {\n data: parseInt(cell.innerText, 10),\n text: cell.innerText\n }\n break\n case \"boolean\": {\n const data = ![\"false\", \"0\", \"null\", \"undefined\"].includes(cell.innerText.toLowerCase().trim())\n cellData = {\n data,\n text: data ? \"1\" : \"0\",\n order: data ? 1 : 0\n }\n break\n }\n default: { // \"html\", \"other\"\n const node = nodeToObj(cell, {valueDiffing: false})\n cellData = {\n data: node.childNodes || [],\n text: cell.innerText,\n order: cell.innerText\n }\n break\n }\n }\n\n // Save cell attributes to reference when rendering\n cellData.attributes = namedNodeMapToObject(cell.attributes)\n\n return cellData\n}\n\n\nexport const readHeaderCell = (cell: inputHeaderCellType) : headerCellType => {\n if (\n cell instanceof Object &&\n cell.constructor === Object &&\n cell.hasOwnProperty(\"data\") &&\n (typeof cell.text === \"string\" || typeof cell.data === \"string\")\n ) {\n return cell\n }\n const cellData : headerCellType = {\n data: cell\n }\n if (typeof cell === \"string\") {\n if (cell.length) {\n const node = stringToObj(`<th>${cell}</th>`)\n if (node.childNodes && (node.childNodes.length !== 1 || node.childNodes[0].nodeName !== \"#text\")) {\n cellData.data = node.childNodes\n cellData.type = \"html\"\n const text = objToText(node)\n cellData.text = text\n }\n }\n\n } else if ([null, undefined].includes(cell)) {\n cellData.text = \"\"\n } else {\n cellData.text = JSON.stringify(cell)\n }\n return cellData\n}\n\nexport const readDOMHeaderCell = (cell: HTMLElement) : headerCellType => {\n const node = nodeToObj(cell, {valueDiffing: false})\n let cellData: headerCellType\n if (node.childNodes && (node.childNodes.length !== 1 || node.childNodes[0].nodeName !== \"#text\")) {\n cellData = {\n data: node.childNodes,\n type: \"html\",\n text: objToText(node)\n }\n } else {\n cellData = {\n data: cell.innerText,\n type: \"string\"\n }\n }\n\n // Save header cell attributes to reference when rendering\n cellData.attributes = node.attributes\n\n return cellData\n\n}\n\nexport const readTableData = (dataOption: DataOption, dom: (HTMLTableElement | undefined)=undefined, columnSettings, defaultType, defaultFormat) => {\n\n const data = {\n data: [] as dataRowType[],\n headings: [] as headerCellType[]\n }\n if (dataOption.headings) {\n data.headings = dataOption.headings.map((heading: inputHeaderCellType) => readHeaderCell(heading))\n } else if (dom?.tHead) {\n data.headings = Array.from(dom.tHead.querySelectorAll(\"th\")).map((th, index) => {\n const heading = readDOMHeaderCell(th)\n if (!columnSettings[index]) {\n columnSettings[index] = {\n type: defaultType,\n format: defaultFormat,\n searchable: true,\n sortable: true\n }\n }\n const settings = columnSettings[index]\n if (th.dataset.sortable?.trim().toLowerCase() === \"false\" || th.dataset.sort?.trim().toLowerCase() === \"false\") {\n settings.sortable = false\n }\n if (th.dataset.searchable?.trim().toLowerCase() === \"false\") {\n settings.searchable = false\n }\n if (th.dataset.hidden?.trim().toLowerCase() === \"true\" || th.getAttribute(\"hidden\")?.trim().toLowerCase() === \"true\") {\n settings.hidden = true\n }\n if ([\"number\", \"string\", \"html\", \"date\", \"boolean\", \"other\"].includes(th.dataset.type)) {\n settings.type = th.dataset.type\n if (settings.type === \"date\" && th.dataset.format) {\n settings.format = th.dataset.format\n }\n }\n return heading\n })\n } else if (dataOption.data?.length) {\n const firstRow = dataOption.data[0]\n const firstRowCells = Array.isArray(firstRow) ? firstRow : firstRow.cells\n data.headings = firstRowCells.map((_cell: inputCellType) => readHeaderCell(\"\"))\n } else if (dom?.tBodies.length) {\n data.headings = Array.from(dom.tBodies[0].rows[0].cells).map((_cell: HTMLElement) => readHeaderCell(\"\"))\n }\n for (let i=0; i<data.headings.length; i++) {\n // Make sure that there are settings for all columns\n if (!columnSettings[i]) {\n columnSettings[i] = {\n type: defaultType,\n format: defaultFormat,\n sortable: true,\n searchable: true\n }\n }\n }\n if (dataOption.data) {\n data.data = dataOption.data.map((row: inputRowType | inputCellType[]) => {\n let attributes: { [key: string]: string }\n let cells: inputCellType[]\n if (Array.isArray(row)) {\n attributes = {}\n cells = row\n } else {\n attributes = row.attributes\n cells = row.cells\n }\n return {\n attributes,\n cells: cells.map((cell: inputCellType, index: number) => readDataCell(cell, columnSettings[index]))\n } as dataRowType\n })\n } else if (dom?.tBodies?.length) {\n data.data = Array.from(dom.tBodies[0].rows).map(\n row => ({\n attributes: namedNodeMapToObject(row.attributes),\n cells: Array.from(row.cells).map(\n (cell, index) => {\n const cellData = cell.dataset.content ?\n readDataCell(cell.dataset.content, columnSettings[index]) :\n readDOMDataCell(cell, columnSettings[index])\n if (cell.dataset.order) {\n cellData.order = isNaN(parseFloat(cell.dataset.order)) ? cell.dataset.order : parseFloat(cell.dataset.order)\n }\n return cellData\n\n }\n )\n } as dataRowType)\n )\n }\n\n if (data.data.length && data.data[0].cells.length !== data.headings.length) {\n throw new Error(\n \"Data heading length mismatch.\"\n )\n }\n return data\n}\n", "import {readDataCell} from \"./read_data\"\nimport {DataTable} from \"./datatable\"\nimport {cellType, dataRowType, inputCellType} from \"./types\"\nimport {cellToText, classNamesToSelector} from \"./helpers\"\n\n/**\n * Rows API\n */\nexport class Rows {\n cursor: (false | number)\n\n dt: DataTable\n\n constructor(dt: DataTable) {\n this.dt = dt\n\n this.cursor = false\n }\n\n setCursor(index: (false | number) = false) {\n if (index === this.cursor) {\n return\n }\n const oldCursor = this.cursor\n this.cursor = index\n this.dt._renderTable()\n if (index !== false && this.dt.options.scrollY) {\n const cursorSelector = classNamesToSelector(this.dt.options.classes.cursor)\n const cursorDOM = this.dt.dom.querySelector(`tr${cursorSelector}`)\n if (cursorDOM) {\n cursorDOM.scrollIntoView({block: \"nearest\"})\n }\n }\n this.dt.emit(\"datatable.cursormove\", this.cursor, oldCursor)\n }\n\n /**\n * Add new row\n */\n add(data: cellType[]) {\n if (!Array.isArray(data) || data.length < 1) {\n return\n }\n\n const row: dataRowType = {\n cells: data.map((cell: cellType, index: number) => {\n const columnSettings = this.dt.columns.settings[index]\n return readDataCell(cell, columnSettings)\n })\n }\n this.dt.data.data.push(row)\n this.dt.hasRows = true\n this.dt.update(true)\n }\n\n /**\n * Remove row(s)\n */\n remove(select: number | number[]) {\n if (Array.isArray(select)) {\n this.dt.data.data = this.dt.data.data.filter((_row: dataRowType, index: number) => !select.includes(index))\n // We may have emptied the table\n if ( !this.dt.data.data.length ) {\n this.dt.hasRows = false\n }\n this.dt.update(true)\n } else {\n return this.remove([select])\n }\n }\n\n\n /**\n * Find index of row by searching for a value in a column\n */\n findRowIndex(columnIndex: number, value: string | boolean | number) {\n // returns row index of first case-insensitive string match\n // inside the td innerText at specific column index\n return this.dt.data.data.findIndex(\n (row: dataRowType) => {\n const cell = row.cells[columnIndex]\n const cellText = cellToText(cell)\n return cellText.toLowerCase().includes(String(value).toLowerCase())\n }\n )\n }\n\n /**\n * Find index, row, and column data by searching for a value in a column\n */\n findRow(columnIndex: number, value: string | boolean | number) {\n // get the row index\n const index = this.findRowIndex(columnIndex, value)\n // exit if not found\n if (index < 0) {\n return {\n index: -1,\n row: null,\n cols: []\n }\n }\n // get the row from data\n const row = this.dt.data.data[index]\n // return innerHTML of each td\n const cols = row.cells.map((cell: cellType) => cell.data)\n // return everything\n return {\n index,\n row,\n cols\n }\n }\n\n /**\n * Update a row with new data\n */\n updateRow(select: number, data: inputCellType[]) {\n const row: dataRowType = {\n cells: data.map((cell: inputCellType, index: number) => {\n const columnSettings = this.dt.columns.settings[index]\n return readDataCell(cell, columnSettings)\n })\n }\n this.dt.data.data.splice(select, 1, row)\n this.dt.update(true)\n }\n}\n", "import {readDataCell, readHeaderCell} from \"./read_data\"\nimport {DataTable} from \"./datatable\"\nimport {\n cellType,\n columnSettingsType,\n columnsStateType,\n dataRowType,\n elementNodeType,\n headerCellType,\n inputCellType,\n inputHeaderCellType\n} from \"./types\"\nimport {readColumnSettings} from \"./column_settings\"\nimport {cellToText} from \"./helpers\"\n\n\nexport class Columns {\n dt: DataTable\n\n settings: columnSettingsType[]\n\n _state: columnsStateType\n\n constructor(dt: DataTable) {\n this.dt = dt\n this.init()\n }\n\n init() {\n [this.settings, this._state] = readColumnSettings(this.dt.options.columns, this.dt.options.type, this.dt.options.format)\n }\n\n get(column: number) {\n if (column < 0 || column >= this.size()) {\n return null\n }\n return {...this.settings[column]}\n }\n\n size() {\n return this.settings.length\n }\n\n /**\n * Swap two columns\n */\n swap(columns: [number, number]) {\n if (columns.length === 2) {\n // Get the current column indexes\n const cols = this.dt.data.headings.map((_node: headerCellType, index: number) => index)\n\n const x = columns[0]\n const y = columns[1]\n const b = cols[y]\n cols[y] = cols[x]\n cols[x] = b\n\n return this.order(cols)\n }\n }\n\n /**\n * Reorder the columns\n */\n order(columns: number[]) {\n\n this.dt.data.headings = columns.map((index: number) => this.dt.data.headings[index])\n this.dt.data.data.forEach(\n (row: dataRowType) => (row.cells = columns.map((index: number) => row.cells[index]))\n )\n this.settings = columns.map(\n (index: number) => this.settings[index]\n )\n\n // Update\n this.dt.update()\n }\n\n /**\n * Hide columns\n */\n hide(columns: number[]) {\n if (!columns.length) {\n return\n }\n columns.forEach((index: number) => {\n if (!this.settings[index]) {\n this.settings[index] = {\n type: \"string\"\n }\n }\n const column = this.settings[index]\n column.hidden = true\n })\n\n this.dt.update()\n }\n\n /**\n * Show columns\n */\n show(columns: number[]) {\n if (!columns.length) {\n return\n }\n columns.forEach((index: number) => {\n if (!this.settings[index]) {\n this.settings[index] = {\n type: \"string\",\n sortable: true\n }\n }\n const column = this.settings[index]\n delete column.hidden\n })\n\n this.dt.update()\n }\n\n /**\n * Check column(s) visibility\n */\n visible(columns: number | number[] | undefined) {\n\n if (columns === undefined) {\n columns = [...Array(this.dt.data.headings.length).keys()]\n }\n if (Array.isArray(columns)) {\n return columns.map(index => !this.settings[index]?.hidden)\n }\n return !this.settings[columns]?.hidden\n\n }\n\n /**\n * Add a new column\n */\n add(data: {data: inputCellType[], heading: inputHeaderCellType} & columnSettingsType) {\n const newColumnSelector = this.dt.data.headings.length\n this.dt.data.headings = this.dt.data.headings.concat([readHeaderCell(data.heading)])\n this.dt.data.data.forEach((row: dataRowType, index: number) => {\n row.cells = row.cells.concat([readDataCell(data.data[index], data)])\n })\n this.settings[newColumnSelector] = {\n type: data.type || \"string\",\n sortable: true,\n searchable: true\n }\n if (data.type || data.format || data.sortable || data.render || data.filter) {\n const column = this.settings[newColumnSelector]\n\n if (data.render) {\n column.render = data.render\n }\n\n if (data.format) {\n column.format = data.format\n }\n\n if (data.cellClass) {\n column.cellClass = data.cellClass\n }\n\n if (data.headerClass) {\n column.headerClass = data.headerClass\n }\n\n if (data.locale) {\n column.locale = data.locale\n }\n\n if (data.sortable === false) {\n column.sortable = false\n } else {\n if (data.numeric) {\n column.numeric = data.numeric\n }\n if (data.caseFirst) {\n column.caseFirst = data.caseFirst\n }\n }\n\n if (data.searchable === false) {\n column.searchable = false\n } else {\n if (data.sensitivity) {\n column.sensitivity = data.sensitivity\n }\n }\n\n if (column.searchable || column.sortable) {\n if (data.ignorePunctuation) {\n column.ignorePunctuation = data.ignorePunctuation\n }\n }\n\n if (data.hidden) {\n column.hidden = true\n }\n\n if (data.filter) {\n column.filter = data.filter\n }\n\n if (data.sortSequence) {\n column.sortSequence = data.sortSequence\n }\n }\n this.dt.update(true)\n }\n\n /**\n * Remove column(s)\n */\n remove(columns: number[]) {\n if (Array.isArray(columns)) {\n this.dt.data.headings = this.dt.data.headings.filter((_heading: headerCellType, index: number) => !columns.includes(index))\n this.dt.data.data.forEach(\n (row: dataRowType) => (row.cells = row.cells.filter((_cell: cellType, index: number) => !columns.includes(index)))\n )\n this.dt.update(true)\n } else {\n return this.remove([columns])\n }\n }\n\n /**\n * Filter by column\n */\n filter(column: number, init = false) {\n\n if (!this.settings[column]?.filter?.length) {\n // There is no filter to apply.\n return\n }\n\n const currentFilter = this._state.filters[column]\n let newFilterState\n if (currentFilter) {\n let returnNext = false\n newFilterState = this.settings[column].filter.find((filter: (string | number | boolean | elementNodeType[] | object | ((arg: (string | number | boolean | elementNodeType[] | object)) => boolean))) => {\n if (returnNext) {\n return true\n }\n if (filter === currentFilter) {\n returnNext = true\n }\n return false\n })\n } else {\n const filter = this.settings[column].filter\n newFilterState = filter ? filter[0] : undefined\n }\n\n if (newFilterState) {\n this._state.filters[column] = newFilterState\n } else if (currentFilter) {\n this._state.filters[column] = undefined\n }\n this.dt._currentPage = 1\n this.dt.update()\n\n if (!init) {\n this.dt.emit(\"datatable.filter\", column, newFilterState)\n }\n }\n\n /**\n * Sort by column\n */\n sort(index: number, dir: (\"asc\" | \"desc\" | undefined) = undefined, init = false) {\n const column = this.settings[index]\n\n if (!init) {\n this.dt.emit(\"datatable.sorting\", index, dir)\n }\n\n if (!dir) {\n const currentDir = this._state.sort && this._state.sort.column === index ? this._state.sort?.dir : false\n const sortSequence = column?.sortSequence || [\"asc\", \"desc\"]\n if (!currentDir) {\n dir = sortSequence.length ? sortSequence[0] : \"asc\"\n } else {\n const currentDirIndex = sortSequence.indexOf(currentDir)\n if (currentDirIndex === -1) {\n dir = sortSequence[0] || \"asc\"\n } else if (currentDirIndex === sortSequence.length -1) {\n dir = sortSequence[0]\n } else {\n dir = sortSequence[currentDirIndex + 1]\n }\n }\n\n }\n\n const collator = [\"string\", \"html\"].includes(column.type) ?\n new Intl.Collator(column.locale || this.dt.options.locale, {\n usage: \"sort\",\n numeric: column.numeric || this.dt.options.numeric,\n caseFirst: column.caseFirst || this.dt.options.caseFirst,\n ignorePunctuation: column.ignorePunctuation|| this.dt.options.ignorePunctuation\n }) :\n false\n\n this.dt.data.data.sort((row1: dataRowType, row2: dataRowType) => {\n const cell1 = row1.cells[index]\n const cell2 = row2.cells[index]\n let order1 = cell1.order ?? cellToText(cell1)\n let order2 = cell2.order ?? cellToText(cell2)\n if (dir === \"desc\") {\n const temp = order1\n order1 = order2\n order2 = temp\n }\n if (collator) {\n return collator.compare(String(order1), String(order2))\n }\n if (order1 < order2) {\n return -1\n } else if (order1 > order2) {\n return 1\n }\n return 0\n })\n\n this._state.sort = {column: index,\n dir}\n if (this.dt._searchQueries.length) {\n this.dt.multiSearch(this.dt._searchQueries)\n this.dt.emit(\"datatable.sort\", index, dir)\n } else if (!init) {\n this.dt._currentPage = 1\n this.dt.update()\n this.dt.emit(\"datatable.sort\", index, dir)\n }\n }\n\n /**\n * Measure the actual width of cell content by rendering the entire table with all contents.\n * Note: Destroys current DOM and therefore requires subsequent dt.update()\n */\n _measureWidths() {\n const activeHeadings = this.dt.data.headings.filter((heading: headerCellType, index: number) => !this.settings[index]?.hidden)\n if ((this.dt.options.scrollY.length || this.dt.options.fixedColumns) && activeHeadings?.length) {\n\n this._state.widths = []\n const renderOptions: {noPaging?: true, noColumnWidths?: true, unhideHeader?: true, renderHeader?: true} = {\n noPaging: true\n }\n // If we have headings we need only set the widths on them\n // otherwise we need a temp header and the widths need applying to all cells\n if (this.dt.options.header || this.dt.options.footer) {\n\n if (this.dt.options.scrollY.length) {\n renderOptions.unhideHeader = true\n }\n if (this.dt.headerDOM) {\n // Remove headerDOM for accurate measurements\n this.dt.headerDOM.parentElement.removeChild(this.dt.headerDOM)\n }\n\n // Reset widths\n renderOptions.noColumnWidths = true\n this.dt._renderTable(renderOptions)\n\n const activeDOMHeadings : HTMLTableCellElement[] = Array.from(this.dt.dom.querySelector(\"thead, tfoot\")?.firstElementChild?.querySelectorAll(\"th\") || [])\n let domCounter = 0\n const absoluteColumnWidths = this.dt.data.headings.map((_heading: headerCellType, index: number) => {\n if (this.settings[index]?.hidden) {\n return 0\n }\n const width = activeDOMHeadings[domCounter].offsetWidth\n domCounter += 1\n return width\n\n })\n const totalOffsetWidth = absoluteColumnWidths.reduce(\n (total, cellWidth) => total + cellWidth,\n 0\n )\n this._state.widths = absoluteColumnWidths.map(cellWidth => cellWidth / totalOffsetWidth * 100)\n\n } else {\n renderOptions.renderHeader = true\n this.dt._renderTable(renderOptions)\n\n const activeDOMHeadings: HTMLTableCellElement[] = Array.from(this.dt.dom.querySelector(\"thead, tfoot\")?.firstElementChild?.querySelectorAll(\"th\") || [])\n let domCounter = 0\n const absoluteColumnWidths = this.dt.data.headings.map((_heading: headerCellType, index: number) => {\n if (this.settings[index]?.hidden) {\n return 0\n }\n const width = activeDOMHeadings[domCounter].offsetWidth\n domCounter += 1\n return width\n\n })\n const totalOffsetWidth = absoluteColumnWidths.reduce(\n (total, cellWidth) => total + cellWidth,\n 0\n )\n this._state.widths = absoluteColumnWidths.map(cellWidth => cellWidth / totalOffsetWidth * 100)\n }\n // render table without options for measurements\n this.dt._renderTable()\n }\n }\n}\n", "import {\n columnsStateType,\n filterStateType,\n columnSettingsType\n} from \"./types\"\n\nexport const readColumnSettings = (columnOptions = [], defaultType, defaultFormat) : [columnSettingsType[], columnsStateType] => {\n\n let columns: (columnSettingsType | undefined)[] = []\n let sort: (false | {column: number, dir: \"asc\" | \"desc\"}) = false\n const filters: (filterStateType | undefined )[] = []\n\n // Check for the columns option\n\n columnOptions.forEach(data => {\n\n // convert single column selection to array\n const columnSelectors = Array.isArray(data.select) ? data.select : [data.select]\n\n columnSelectors.forEach((selector: number) => {\n if (columns[selector]) {\n if (data.type) {\n columns[selector].type = data.type\n }\n } else {\n columns[selector] = {\n type: data.type || defaultType,\n sortable: true,\n searchable: true\n }\n }\n const column = columns[selector]\n\n\n if (data.render) {\n column.render = data.render\n }\n\n if (data.format) {\n column.format = data.format\n } else if (data.type === \"date\") {\n column.format = defaultFormat\n }\n\n if (data.cellClass) {\n column.cellClass = data.cellClass\n }\n\n if (data.headerClass) {\n column.headerClass = data.headerClass\n }\n\n if (data.locale) {\n column.locale = data.locale\n }\n\n if (data.sortable === false) {\n column.sortable = false\n } else {\n if (data.numeric) {\n column.numeric = data.numeric\n }\n if (data.caseFirst) {\n column.caseFirst = data.caseFirst\n }\n }\n\n if (data.searchable === false) {\n column.searchable = false\n } else {\n if (data.sensitivity) {\n column.sensitivity = data.sensitivity\n }\n }\n\n if (column.searchable || column.sortable) {\n if (typeof data.ignorePunctuation !== \"undefined\") {\n column.ignorePunctuation = data.ignorePunctuation\n }\n }\n\n if (data.hidden) {\n column.hidden = true\n }\n\n if (data.filter) {\n column.filter = data.filter\n }\n\n if (data.sortSequence) {\n column.sortSequence = data.sortSequence\n }\n\n if (data.sort) {\n if (data.filter) {\n filters[selector] = data.sort\n } else {\n // We only allow one. The last one will overwrite all other options\n sort = {column: selector,\n dir: data.sort}\n }\n }\n\n if (typeof data.searchItemSeparator !== \"undefined\") {\n column.searchItemSeparator = data.searchItemSeparator\n }\n\n })\n\n\n })\n\n columns = columns.map(column => column ?\n column :\n {type: defaultType,\n format: defaultType === \"date\" ? defaultFormat : undefined,\n sortable: true,\n searchable: true})\n\n const widths = [] // Width are determined later on by measuring on screen.\n\n return [\n columns, {filters,\n sort,\n widths}\n ]\n\n}\n", "// Template for custom layouts\nexport const layoutTemplate = (options, dom) => `<div class='${options.classes.top}'>\n ${\n options.paging && options.perPageSelect ?\n `<div class='${options.classes.dropdown}'>\n <label>\n <select class='${options.classes.selector}'></select> ${options.labels.perPage}\n </label>\n </div>` :\n \"\"\n}\n ${\n options.searchable ?\n `<div class='${options.classes.search}'>\n <input class='${options.classes.input}' placeholder='${options.labels.placeholder}' type='search' title='${options.labels.searchTitle}'${dom.id ? ` aria-controls=\"${dom.id}\"` : \"\"}>\n </div>` :\n \"\"\n}\n</div>\n<div class='${options.classes.container}'${options.scrollY.length ? ` style='height: ${options.scrollY}; overflow-Y: auto;'` : \"\"}></div>\n<div class='${options.classes.bottom}'>\n ${\n options.paging ?\n `<div class='${options.classes.info}'></div>` :\n \"\"\n}\n <nav class='${options.classes.pagination}'></nav>\n</div>`\n", "import {DataTableConfiguration} from \"./types\"\nimport {layoutTemplate} from \"./templates\"\n/**\n * Default configuration\n */\nexport const defaultConfig: DataTableConfiguration = {\n // for sorting\n sortable: true,\n locale: \"en\",\n numeric: true,\n caseFirst: \"false\",\n\n // for searching\n searchable: true,\n sensitivity: \"base\",\n ignorePunctuation: true,\n destroyable: true,\n searchItemSeparator: \"\", // If specified, splits the content of cells up using this separator before performing search.\n searchQuerySeparator: \" \",\n searchAnd: false,\n\n // data\n data: {},\n type: \"html\", // Default data type for columns.\n format: \"YYYY-MM-DD\",\n columns: [],\n\n // Pagination\n paging: true,\n perPage: 10,\n perPageSelect: [5, 10, 15, 20, 25],\n nextPrev: true,\n firstLast: false,\n prevText: \"‹\",\n nextText: \"›\",\n firstText: \"«\",\n lastText: \"»\",\n ellipsisText: \"…\",\n truncatePager: true,\n pagerDelta: 2,\n\n scrollY: \"\",\n\n fixedColumns: true,\n fixedHeight: false,\n\n footer: false,\n header: true,\n hiddenHeader: false,\n caption: undefined,\n\n rowNavigation: false,\n tabIndex: false,\n\n // for overriding rendering\n pagerRender: false,\n rowRender: false,\n tableRender: false,\n diffDomOptions: {\n valueDiffing: false\n },\n\n // Customise the display text\n labels: {\n placeholder: \"Search...\", // The search input placeholder\n searchTitle: \"Search within table\", // The search input title\n perPage: \"entries per page\", // per-page dropdown label\n pageTitle: \"Page {page}\", // page label used in Aria-label\n noRows: \"No entries found\", // Message shown when there are no records to show\n noResults: \"No results match your search query\", // Message shown when there are no search results\n info: \"Showing {start} to {end} of {rows} entries\" //\n },\n\n // Customise the layout\n template: layoutTemplate,\n\n // Customize the class names used by datatable for different parts\n classes: {\n active: \"datatable-active\",\n ascending: \"datatable-ascending\",\n bottom: \"datatable-bottom\",\n container: \"datatable-container\",\n cursor: \"datatable-cursor\",\n descending: \"datatable-descending\",\n disabled: \"datatable-disabled\",\n dropdown: \"datatable-dropdown\",\n ellipsis: \"datatable-ellipsis\",\n filter: \"datatable-filter\",\n filterActive: \"datatable-filter-active\",\n empty: \"datatable-empty\",\n headercontainer: \"datatable-headercontainer\",\n hidden: \"datatable-hidden\",\n info: \"datatable-info\",\n input: \"datatable-input\",\n loading: \"datatable-loading\",\n pagination: \"datatable-pagination\",\n paginationList: \"datatable-pagination-list\",\n paginationListItem: \"datatable-pagination-list-item\",\n paginationListItemLink: \"datatable-pagination-list-item-link\",\n search: \"datatable-search\",\n selector: \"datatable-selector\",\n sorter: \"datatable-sorter\",\n table: \"datatable-table\",\n top: \"datatable-top\",\n wrapper: \"datatable-wrapper\"\n }\n}\n", "import {DataTableConfiguration, elementNodeType} from \"./types\"\n\n/**\n * Pager truncation algorithm\n */\nconst truncate = (paginationListItems: elementNodeType[], currentPage: number, pagesLength: number, options: DataTableConfiguration) : elementNodeType[] => {\n const pagerDelta = options.pagerDelta\n const classes = options.classes\n const ellipsisText = options.ellipsisText\n\n const doublePagerDelta = 2 * pagerDelta\n let previousPage = currentPage - pagerDelta\n let nextPage = currentPage + pagerDelta\n\n if (currentPage < 4 - pagerDelta + doublePagerDelta) {\n nextPage = 3 + doublePagerDelta\n } else if (currentPage > pagesLength - (3 - pagerDelta + doublePagerDelta)) {\n previousPage = pagesLength - (2 + doublePagerDelta)\n }\n const paginationListItemsToModify: elementNodeType[] = []\n for (let k = 1; k <= pagesLength; k++) {\n if (1 == k || k == pagesLength || (k >= previousPage && k <= nextPage)) {\n const li = paginationListItems[k - 1]\n paginationListItemsToModify.push(li)\n }\n }\n let previousLi: elementNodeType\n const modifiedLis: elementNodeType[] = []\n paginationListItemsToModify.forEach(li => {\n const pageNumber = parseInt((li.childNodes[0] as elementNodeType).attributes[\"data-page\"], 10)\n if (previousLi) {\n const previousPageNumber = parseInt((previousLi.childNodes[0] as elementNodeType).attributes[\"data-page\"], 10)\n if (pageNumber - previousPageNumber == 2) {\n modifiedLis.push(paginationListItems[previousPageNumber])\n } else if (pageNumber - previousPageNumber != 1) {\n const newLi: elementNodeType = {\n nodeName: \"LI\",\n attributes: {\n class: `${classes.paginationListItem} ${classes.ellipsis} ${classes.disabled}`\n },\n childNodes: [\n {\n nodeName: \"BUTTON\",\n attributes: {\n class: classes.paginationListItemLink\n },\n childNodes: [\n {\n nodeName: \"#text\",\n data: ellipsisText\n }\n ]\n }\n ]\n }\n modifiedLis.push(newLi)\n }\n }\n modifiedLis.push(li)\n previousLi = li\n })\n\n return modifiedLis\n}\n\n\nconst paginationListItem = (page: number, label: string, options: DataTableConfiguration, state: {active?: boolean, hidden?: boolean} = {}) : elementNodeType => ({\n nodeName: \"LI\",\n attributes: {\n class:\n (state.active && !state.hidden) ?\n `${options.classes.paginationListItem} ${options.classes.active}` :\n state.hidden ?\n `${options.classes.paginationListItem} ${options.classes.hidden} ${options.classes.disabled}` :\n options.classes.paginationListItem\n },\n childNodes: [\n {\n nodeName: \"BUTTON\",\n attributes: {\n \"data-page\": String(page),\n class: options.classes.paginationListItemLink,\n \"aria-label\": options.labels.pageTitle.replace(\"{page}\", String(page))\n },\n childNodes: [\n {\n nodeName: \"#text\",\n data: label\n }\n ]\n }\n ]\n})\n\nexport const createVirtualPagerDOM = (onFirstPage: boolean, onLastPage: boolean, currentPage: number, totalPages: number, options) => {\n\n let pagerListItems : elementNodeType[] = []\n\n // first button\n if (options.firstLast) {\n pagerListItems.push(paginationListItem(1, options.firstText, options))\n }\n\n // prev button\n if (options.nextPrev) {\n const prev = onFirstPage ? 1 : currentPage - 1\n pagerListItems.push(paginationListItem(prev, options.prevText, options, {hidden: onFirstPage}))\n }\n\n let pages = [...Array(totalPages).keys()].map(index => paginationListItem(index+1, String(index+1), options, {active: (index === (currentPage-1))}))\n\n if (options.truncatePager) {\n // truncate the paginationListItems\n pages = truncate(\n pages,\n currentPage,\n totalPages,\n options\n )\n\n }\n\n // append the paginationListItems\n pagerListItems = pagerListItems.concat(pages)\n\n // next button\n if (options.nextPrev) {\n const next = onLastPage ? totalPages : currentPage + 1\n pagerListItems.push(paginationListItem(next, options.nextText, options, {hidden: onLastPage}))\n }\n\n // last button\n if (options.firstLast) {\n pagerListItems.push(paginationListItem(totalPages, options.lastText, options))\n }\n\n const pager : elementNodeType = {\n nodeName: \"UL\",\n attributes: {\n class: options.classes.paginationList\n },\n childNodes: pages.length > 1 ? pagerListItems : [] // Don't show single page\n }\n\n return pager\n\n}\n", "import {\n cellToText,\n classNamesToSelector,\n containsClass,\n createElement,\n isObject,\n joinWithSpaces,\n visibleToColumnIndex\n} from \"./helpers\"\nimport {\n cellType,\n DataTableConfiguration,\n DataTableOptions,\n dataRowType,\n filterStateType,\n headerCellType,\n inputCellType,\n inputRowType,\n elementNodeType,\n renderOptions,\n rowType,\n TableDataType\n} from \"./types\"\nimport {DiffDOM, nodeToObj} from \"diff-dom\"\n\nimport {dataToVirtualDOM, headingsToVirtualHeaderRowDOM} from \"./virtual_dom\"\nimport {readTableData, readDataCell, readHeaderCell} from \"./read_data\"\nimport {Rows} from \"./rows\"\nimport {Columns} from \"./columns\"\nimport {defaultConfig} from \"./config\"\nimport {createVirtualPagerDOM} from \"./virtual_pager_dom\"\n\n\nexport class DataTable {\n\n columns: Columns\n\n containerDOM: HTMLDivElement\n\n _currentPage: number\n\n data: TableDataType\n\n _dd: DiffDOM\n\n dom: HTMLTableElement\n\n _events: { [key: string]: ((...args) => void)[]}\n\n hasHeadings: boolean\n\n hasRows: boolean\n\n headerDOM: HTMLDivElement\n\n _initialInnerHTML: string\n\n initialized: boolean\n\n _label: HTMLElement\n\n lastPage: number\n\n _listeners: { [key: string]: () => void}\n\n onFirstPage: boolean\n\n onLastPage: boolean\n\n options: DataTableConfiguration\n\n _pagerDOMs: HTMLElement[]\n\n _virtualPagerDOM: elementNodeType\n\n pages: rowType[][]\n\n _rect: {width: number, height: number}\n\n rows: Rows\n\n _searchData: number[]\n\n _searchQueries: {terms: string[], columns: (number[] | undefined)}[]\n\n _tableAttributes: {[key: string]: string}\n\n _tableFooters: elementNodeType[]\n\n _tableCaptions: elementNodeType[]\n\n totalPages: number\n\n _virtualDOM: elementNodeType\n\n _virtualHeaderDOM: elementNodeType\n\n wrapperDOM: HTMLElement\n\n constructor(table: HTMLTableElement | string, options: DataTableOptions = {}) {\n\n const dom = typeof table === \"string\" ?\n document.querySelector(table) :\n table\n\n if (dom instanceof HTMLTableElement) {\n this.dom = dom\n } else {\n this.dom = document.createElement(\"table\")\n dom.appendChild(this.dom)\n }\n\n const diffDomOptions = {\n ...defaultConfig.diffDomOptions,\n ...options.diffDomOptions\n }\n\n const labels = {\n ...defaultConfig.labels,\n ...options.labels\n }\n\n const classes = {\n ...defaultConfig.classes,\n ...options.classes\n }\n\n // user options\n this.options = {\n ...defaultConfig,\n ...options,\n diffDomOptions,\n labels,\n classes\n }\n\n this._initialInnerHTML = this.options.destroyable ? this.dom.innerHTML : \"\" // preserve in case of later destruction\n\n if (this.options.tabIndex) {\n this.dom.tabIndex = this.options.tabIndex\n } else if (this.options.rowNavigation && this.dom.tabIndex === -1) {\n this.dom.tabIndex = 0\n }\n\n this._listeners = {\n onResize: () => this._onResize()\n }\n\n this._dd = new DiffDOM(this.options.diffDomOptions || {})\n\n this.initialized = false\n this._events = {}\n\n this._currentPage = 0\n this.onFirstPage = true\n this.hasHeadings = false\n this.hasRows = false\n this._searchQueries = []\n\n this.init()\n }\n\n /**\n * Initialize the instance\n */\n init() {\n if (this.initialized || containsClass(this.dom, this.options.classes.table)) {\n return false\n }\n\n this._virtualDOM = nodeToObj(this.dom, this.options.diffDomOptions || {})\n\n this._tableAttributes = {...this._virtualDOM.attributes}\n this._tableFooters = this._virtualDOM.childNodes?.filter(node => node.nodeName === \"TFOOT\") ?? []\n this._tableCaptions = this._virtualDOM.childNodes?.filter(node => node.nodeName === \"CAPTION\") ?? []\n if (this.options.caption !== undefined) {\n this._tableCaptions.push({\n nodeName: \"CAPTION\",\n childNodes: [\n {\n nodeName: \"#text\",\n data: this.options.caption\n }\n ]\n })\n }\n\n this.rows = new Rows(this)\n this.columns = new Columns(this)\n\n this.data = readTableData(this.options.data, this.dom, this.columns.settings, this.options.type, this.options.format)\n\n this._render()\n\n setTimeout(() => {\n this.emit(\"datatable.init\")\n this.initialized = true\n }, 10)\n }\n\n\n /**\n * Render the instance\n */\n _render() {\n\n // Build\n this.wrapperDOM = createElement(\"div\", {\n class: `${this.options.classes.wrapper} ${this.options.classes.loading}`\n })\n\n this.wrapperDOM.innerHTML = this.options.template(this.options, this.dom)\n\n const selectorClassSelector = classNamesToSelector(this.options.classes.selector)\n const selector = this.wrapperDOM.querySelector(`select${selectorClassSelector}`)\n\n // Per Page Select\n if (selector && this.options.paging && this.options.perPageSelect) {\n\n // Create the options\n this.options.perPageSelect.forEach((choice: number | [string, number]) => {\n const [lab, val] = Array.isArray(choice) ? [choice[0], choice[1]] : [String(choice), choice]\n const selected = val === this.options.perPage\n const option = new Option(lab, String(val), selected, selected)\n selector.appendChild(option)\n })\n\n } else if (selector) {\n selector.parentElement.removeChild(selector)\n }\n\n const containerSelector = classNamesToSelector(this.options.classes.container)\n this.containerDOM = this.wrapperDOM.querySelector(containerSelector)\n\n this._pagerDOMs = []\n const paginationSelector = classNamesToSelector(this.options.classes.pagination)\n Array.from(this.wrapperDOM.querySelectorAll(paginationSelector)).forEach(el => {\n if (!(el instanceof HTMLElement)) {\n return\n }\n // We remove the inner part of the pager containers to ensure they are all the same.\n el.innerHTML = `<ul class=\"${this.options.classes.paginationList}\"></ul>`\n this._pagerDOMs.push(el.firstElementChild as HTMLElement)\n })\n\n this._virtualPagerDOM = {\n nodeName: \"UL\",\n attributes: {\n class: this.options.classes.paginationList\n }\n }\n\n\n const infoSelector = classNamesToSelector(this.options.classes.info)\n this._label = this.wrapperDOM.querySelector(infoSelector)\n\n // Insert in to DOM tree\n this.dom.parentElement.replaceChild(this.wrapperDOM, this.dom)\n this.containerDOM.appendChild(this.dom)\n\n // Store the table dimensions\n this._rect = this.dom.getBoundingClientRect()\n\n // Fix height\n this._fixHeight()\n\n // Class names\n if (!this.options.header) {\n this.wrapperDOM.classList.add(\"no-header\")\n }\n\n if (!this.options.footer) {\n this.wrapperDOM.classList.add(\"no-footer\")\n }\n\n if (this.options.sortable) {\n this.wrapperDOM.classList.add(\"sortable\")\n }\n\n if (this.options.searchable) {\n this.wrapperDOM.classList.add(\"searchable\")\n }\n\n if (this.options.fixedHeight) {\n this.wrapperDOM.classList.add(\"fixed-height\")\n }\n\n if (this.options.fixedColumns) {\n this.wrapperDOM.classList.add(\"fixed-columns\")\n }\n\n this._bindEvents()\n\n if (this.columns._state.sort) {\n this.columns.sort(this.columns._state.sort.column, this.columns._state.sort.dir, true)\n }\n\n this.update(true)\n }\n\n _renderTable(renderOptions: renderOptions = {}) {\n let rows: rowType[]\n const isPaged = (this.options.paging || this._searchQueries.length || this.columns._state.filters.length) && this._currentPage && this.pages.length && !renderOptions.noPaging\n if (isPaged) {\n rows = this.pages[this._currentPage - 1]\n } else {\n rows = this.data.data.map((row, index) => ({\n row,\n index\n }))\n }\n\n let newVirtualDOM = dataToVirtualDOM(\n this._tableAttributes,\n this.data.headings,\n rows,\n this.columns.settings,\n this.columns._state,\n this.rows.cursor,\n this.options,\n renderOptions,\n this._tableFooters,\n this._tableCaptions\n )\n\n if (this.options.tableRender) {\n const renderedTableVirtualDOM : (elementNodeType | void) = this.options.tableRender(this.data, newVirtualDOM, \"main\")\n if (renderedTableVirtualDOM) {\n newVirtualDOM = renderedTableVirtualDOM\n }\n }\n const diff = this._dd.diff(this._virtualDOM, newVirtualDOM)\n this._dd.apply(this.dom, diff)\n this._virtualDOM = newVirtualDOM\n }\n\n /**\n * Render the page\n * @return {Void}\n */\n _renderPage(lastRowCursor=false) {\n if (this.hasRows && this.totalPages) {\n if (this._currentPage > this.totalPages) {\n this._currentPage = 1\n }\n\n // Use a fragment to limit touching the DOM\n this._renderTable()\n\n this.onFirstPage = this._currentPage === 1\n this.onLastPage = this._currentPage === this.lastPage\n } else {\n this.setMessage(this.options.labels.noRows)\n }\n\n // Update the info\n let current = 0\n\n let f = 0\n let t = 0\n let items\n\n if (this.totalPages) {\n current = this._currentPage - 1\n f = current * this.options.perPage\n t = f + this.pages[current].length\n f = f + 1\n items = this._searchQueries.length ? this._searchData.length : this.data.data.length\n }\n\n if (this._label && this.options.labels.info.length) {\n // CUSTOM LABELS\n const string = this.options.labels.info\n .replace(\"{start}\", String(f))\n .replace(\"{end}\", String(t))\n .replace(\"{page}\", String(this._currentPage))\n .replace(\"{pages}\", String(this.totalPages))\n .replace(\"{rows}\", String(items))\n\n this._label.innerHTML = items ? string : \"\"\n }\n\n if (this._currentPage == 1) {\n this._fixHeight()\n }\n\n if (this.options.rowNavigation && this._currentPage) {\n if (!this.rows.cursor || !this.pages[this._currentPage-1].find(\n row => row.index === this.rows.cursor)\n ) {\n const rows = this.pages[this._currentPage-1]\n if (rows.length) {\n if (lastRowCursor) {\n this.rows.setCursor(rows[rows.length-1].index)\n } else {\n this.rows.setCursor(rows[0].index)\n }\n }\n }\n }\n }\n\n /** Render the pager(s)\n *\n */\n _renderPagers() {\n if (!this.options.paging) {\n return\n }\n let newPagerVirtualDOM = createVirtualPagerDOM(this.onFirstPage, this.onLastPage, this._currentPage, this.totalPages, this.options)\n\n if (this.options.pagerRender) {\n const renderedPagerVirtualDOM : (elementNodeType | void) = this.options.pagerRender([this.onFirstPage, this.onLastPage, this._currentPage, this.totalPages], newPagerVirtualDOM)\n if (renderedPagerVirtualDOM) {\n newPagerVirtualDOM = renderedPagerVirtualDOM\n }\n }\n\n const diffs = this._dd.diff(this._virtualPagerDOM, newPagerVirtualDOM)\n // We may have more than one pager\n this._pagerDOMs.forEach((pagerDOM: HTMLElement) => {\n this._dd.apply(pagerDOM, diffs)\n })\n\n this._virtualPagerDOM = newPagerVirtualDOM\n }\n\n // Render header that is not in the same table element as the remainder\n // of the table. Used for tables with scrollY.\n _renderSeparateHeader() {\n const container = this.dom.parentElement\n if (!this.headerDOM) {\n this.headerDOM = document.createElement(\"div\")\n this._virtualHeaderDOM = {\n nodeName: \"DIV\"\n }\n\n }\n container.parentElement.insertBefore(this.headerDOM, container)\n let tableVirtualDOM : elementNodeType = {\n nodeName: \"TABLE\",\n attributes: this._tableAttributes,\n childNodes: [\n {\n nodeName: \"THEAD\",\n childNodes: [\n headingsToVirtualHeaderRowDOM(\n this.data.headings, this.columns.settings, this.columns._state, this.options, {unhideHeader: true})\n ]\n\n }\n\n ]\n }\n tableVirtualDOM.attributes.class = joinWithSpaces(tableVirtualDOM.attributes.class, this.options.classes.table)\n if (this.options.tableRender) {\n const renderedTableVirtualDOM : (elementNodeType | void) = this.options.tableRender(this.data, tableVirtualDOM, \"header\")\n if (renderedTableVirtualDOM) {\n tableVirtualDOM = renderedTableVirtualDOM\n }\n }\n\n const newVirtualHeaderDOM = {\n nodeName: \"DIV\",\n attributes: {\n class: this.options.classes.headercontainer\n },\n childNodes: [tableVirtualDOM]\n }\n\n const diff = this._dd.diff(this._virtualHeaderDOM, newVirtualHeaderDOM)\n this._dd.apply(this.headerDOM, diff)\n this._virtualHeaderDOM = newVirtualHeaderDOM\n\n // Compensate for scrollbars\n const paddingRight = this.headerDOM.firstElementChild.clientWidth - this.dom.clientWidth\n if (paddingRight) {\n const paddedVirtualHeaderDOM = structuredClone(this._virtualHeaderDOM)\n paddedVirtualHeaderDOM.attributes.style = `padding-right: ${paddingRight}px;`\n const diff = this._dd.diff(this._virtualHeaderDOM, paddedVirtualHeaderDOM)\n this._dd.apply(this.headerDOM, diff)\n this._virtualHeaderDOM = paddedVirtualHeaderDOM\n }\n\n if (container.scrollHeight > container.clientHeight) {\n // scrollbars on one page means scrollbars on all pages.\n container.style.overflowY = \"scroll\"\n }\n }\n\n /**\n * Bind event listeners\n * @return {[type]} [description]\n */\n _bindEvents() {\n // Per page selector\n if (this.options.perPageSelect) {\n const selectorClassSelector = classNamesToSelector(this.options.classes.selector)\n const selector = this.wrapperDOM.querySelector(selectorClassSelector)\n if (selector && selector instanceof HTMLSelectElement) {\n // Change per page\n selector.addEventListener(\"change\", () => {\n this.options.perPage = parseInt(selector.value, 10)\n this.update()\n\n this._fixHeight()\n\n this.emit(\"datatable.perpage\", this.options.perPage)\n }, false)\n }\n }\n\n // Search input\n if (this.options.searchable) {\n this.wrapperDOM.addEventListener(\"input\", (event: InputEvent) => {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const target = event.target\n if (!(target instanceof HTMLInputElement) || !target.matches(inputSelector)) {\n return\n }\n event.preventDefault()\n\n const searches: { terms: string[], columns: (number[] | undefined) }[] = []\n const searchFields: HTMLInputElement[] = Array.from(this.wrapperDOM.querySelectorAll(inputSelector))\n searchFields.filter(\n el => el.value.length\n ).forEach(\n el => {\n const andSearch = el.dataset.and || this.options.searchAnd\n const querySeparator = el.dataset.querySeparator || this.options.searchQuerySeparator\n const terms = querySeparator ? el.value.split(this.options.searchQuerySeparator) : [el.value]\n if (andSearch) {\n terms.forEach(term => {\n if (el.dataset.columns) {\n searches.push({\n terms: [term],\n columns: (JSON.parse(el.dataset.columns) as number[])\n })\n } else {\n searches.push({terms: [term],\n columns: undefined})\n }\n })\n } else {\n if (el.dataset.columns) {\n searches.push({\n terms,\n columns: (JSON.parse(el.dataset.columns) as number[])\n })\n } else {\n searches.push({terms,\n columns: undefined})\n }\n }\n\n }\n )\n if (searches.length === 1 && searches[0].terms.length === 1) {\n const search = searches[0]\n this.search(search.terms[0], search.columns)\n } else {\n this.multiSearch(searches)\n }\n })\n }\n\n // Pager(s) / sorting\n this.wrapperDOM.addEventListener(\"click\", (event: Event) => {\n const target = event.target as Element\n const hyperlink = target.closest(\"a, button\")\n if (!hyperlink) {\n return\n }\n\n if (hyperlink.hasAttribute(\"data-page\")) {\n this.page(parseInt(hyperlink.getAttribute(\"data-page\"), 10))\n event.preventDefault()\n } else if (containsClass(hyperlink, this.options.classes.sorter)) {\n const visibleIndex = Array.from(hyperlink.parentElement.parentElement.children).indexOf(hyperlink.parentElement)\n const columnIndex = visibleToColumnIndex(visibleIndex, this.columns.settings)\n this.columns.sort(columnIndex)\n event.preventDefault()\n } else if (containsClass(hyperlink, this.options.classes.filter)) {\n const visibleIndex = Array.from(hyperlink.parentElement.parentElement.children).indexOf(hyperlink.parentElement)\n const columnIndex = visibleToColumnIndex(visibleIndex, this.columns.settings)\n this.columns.filter(columnIndex)\n event.preventDefault()\n }\n }, false)\n\n if (this.options.rowNavigation) {\n this.dom.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n if (event.key === \"ArrowUp\") {\n event.preventDefault()\n event.stopPropagation()\n let lastRow: rowType\n this.pages[this._currentPage-1].find((row: rowType) => {\n if (row.index===this.rows.cursor) {\n return true\n }\n lastRow = row\n return false\n })\n if (lastRow) {\n this.rows.setCursor(lastRow.index)\n } else if (!this.onFirstPage) {\n this.page(this._currentPage-1, true)\n }\n } else if (event.key === \"ArrowDown\") {\n event.preventDefault()\n event.stopPropagation()\n let foundRow: boolean\n const nextRow = this.pages[this._currentPage-1].find((row: rowType) => {\n if (foundRow) {\n return true\n }\n if (row.index===this.rows.cursor) {\n foundRow = true\n }\n return false\n })\n if (nextRow) {\n this.rows.setCursor(nextRow.index)\n } else if (!this.onLastPage) {\n this.page(this._currentPage+1)\n }\n } else if ([\"Enter\", \" \"].includes(event.key)) {\n this.emit(\"datatable.selectrow\", this.rows.cursor, event)\n }\n })\n this.dom.addEventListener(\"mousedown\", (event: Event) => {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n if (this.dom.matches(\":focus\")) {\n const row = Array.from(this.dom.querySelectorAll(\"tbody > tr\")).find(row => row.contains(target))\n if (row && row instanceof HTMLElement) {\n this.emit(\"datatable.selectrow\", parseInt(row.dataset.index, 10), event)\n }\n }\n\n })\n } else {\n this.dom.addEventListener(\"mousedown\", (event: Event) => {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n const row = Array.from(this.dom.querySelectorAll(\"tbody > tr\")).find(row => row.contains(target))\n if (row && row instanceof HTMLElement) {\n this.emit(\"datatable.selectrow\", parseInt(row.dataset.index, 10), event)\n }\n })\n }\n\n window.addEventListener(\"resize\", this._listeners.onResize)\n }\n\n /**\n * execute on resize\n */\n _onResize() {\n this._rect = this.containerDOM.getBoundingClientRect()\n if (!this._rect.width) {\n // No longer shown, likely no longer part of DOM. Give up.\n return\n }\n this.update(true)\n }\n\n /**\n * Destroy the instance\n * @return {void}\n */\n destroy() {\n if (!this.options.destroyable) {\n return\n }\n this.dom.innerHTML = this._initialInnerHTML\n\n // Remove the className\n this.options.classes.table?.split(\" \").forEach(className => this.wrapperDOM.classList.remove(className))\n\n // Remove the containers\n if (this.wrapperDOM.parentElement) {\n this.wrapperDOM.parentElement.replaceChild(this.dom, this.wrapperDOM)\n }\n\n this.initialized = false\n\n window.removeEventListener(\"resize\", this._listeners.onResize)\n }\n\n /**\n * Update the instance\n * @return {Void}\n */\n update(measureWidths = false) {\n if (measureWidths) {\n this.columns._measureWidths()\n this.hasRows = Boolean(this.data.data.length)\n this.hasHeadings = Boolean(this.data.headings.length)\n }\n this.options.classes.empty?.split(\" \").forEach(className => this.wrapperDOM.classList.remove(className))\n\n this._paginate()\n this._renderPage()\n\n this._renderPagers()\n\n if (this.options.scrollY.length) {\n this._renderSeparateHeader()\n }\n\n this.emit(\"datatable.update\")\n }\n\n _paginate() {\n let rows: rowType[] = this.data.data.map((row, index) => ({\n row,\n index\n }))\n\n if (this._searchQueries.length) {\n rows = []\n\n this._searchData.forEach((index: number) => rows.push({index,\n row: this.data.data[index]}))\n }\n\n if (this.columns._state.filters.length) {\n this.columns._state.filters.forEach(\n (filterState: (filterStateType | undefined), column: number) => {\n if (!filterState) {\n return\n }\n rows = rows.filter(\n (row: {index: number, row: dataRowType}) => {\n const cell = row.row.cells[column]\n return typeof filterState === \"function\" ? filterState(cell.data) : cellToText(cell) === filterState\n }\n )\n }\n )\n }\n\n if (this.options.paging && this.options.perPage > 0) {\n // Check for hidden columns\n this.pages = rows\n .map((_row, i: number) => i % this.options.perPage === 0 ? rows.slice(i, i + this.options.perPage) : null)\n .filter((page: {row: dataRowType, index: number}[]) => page)\n } else {\n this.pages = [rows]\n }\n\n this.totalPages = this.lastPage = this.pages.length\n\n if (!this._currentPage) {\n this._currentPage = 1\n }\n return this.totalPages\n }\n\n /**\n * Fix the container height\n */\n _fixHeight() {\n if (this.options.fixedHeight) {\n this.containerDOM.style.height = null\n this._rect = this.containerDOM.getBoundingClientRect()\n this.containerDOM.style.height = `${this._rect.height}px`\n }\n }\n\n /**\n * Perform a simple search of the data set\n */\n search(term: string, columns: (number[] | undefined ) = undefined) {\n\n if (!term.length) {\n this._currentPage = 1\n this._searchQueries = []\n this._searchData = []\n this.update()\n this.emit(\"datatable.search\", \"\", [])\n this.wrapperDOM.classList.remove(\"search-results\")\n return false\n }\n\n this.multiSearch([\n {terms: [term],\n columns: columns ? columns : undefined}\n ])\n\n this.emit(\"datatable.search\", term, this._searchData)\n\n }\n\n /**\n * Perform a search of the data set seraching for up to multiple strings in various columns\n */\n multiSearch(rawQueries : {terms: string[], columns: (number[] | undefined)}[]) {\n if (!this.hasRows) return false\n\n this._currentPage = 1\n this._searchData = []\n // Remove empty queries\n const queries = rawQueries.map(query => ({\n columns: query.columns,\n terms: query.terms.map(term => term.trim()).filter(term => term)\n })).filter(query => query.terms.length\n )\n\n this._searchQueries = queries\n\n if (!queries.length) {\n this.update()\n this.emit(\"datatable.multisearch\", queries, this._searchData)\n this.wrapperDOM.classList.remove(\"search-results\")\n return false\n }\n const queryWords = queries.map(query => this.columns.settings.map(\n (column, index) => {\n if (column.hidden || !column.searchable || (query.columns && !query.columns.includes(index))) {\n return false\n }\n let columnQueries = query.terms\n const sensitivity = column.sensitivity || this.options.sensitivity\n if ([\"base\", \"accent\"].includes(sensitivity)) {\n columnQueries = columnQueries.map(query => query.toLowerCase())\n }\n if ([\"base\", \"case\"].includes(sensitivity)) {\n columnQueries = columnQueries.map(query => query.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\"))\n }\n const ignorePunctuation = column.ignorePunctuation ?? this.options.ignorePunctuation\n if (ignorePunctuation) {\n columnQueries = columnQueries.map(query => query.replace(/[.,/#!$%^&*;:{}=-_`~()]/g, \"\"))\n }\n return columnQueries\n }\n ))\n this.data.data.forEach((row: dataRowType, idx: number) => {\n const searchRow = row.cells.map((cell, i) => {\n let content = cellToText(cell).trim()\n const column = this.columns.settings[i]\n if (content.length) {\n const sensitivity = column.sensitivity || this.options.sensitivity\n if ([\"base\", \"accent\"].includes(sensitivity)) {\n content = content.toLowerCase()\n }\n if ([\"base\", \"case\"].includes(sensitivity)) {\n content = content.normalize(\"NFD\").replace(/\\p{Diacritic}/gu, \"\")\n }\n const ignorePunctuation = column.ignorePunctuation ?? this.options.ignorePunctuation\n if (ignorePunctuation) {\n content = content.replace(/[.,/#!$%^&*;:{}=-_`~()]/g, \"\")\n }\n }\n const searchItemSeparator = column.searchItemSeparator || this.options.searchItemSeparator\n return searchItemSeparator ? content.split(searchItemSeparator) : [content]\n })\n if (\n queryWords.every(\n queries => queries.find(\n (query, index) => query ?\n query.find(queryWord => searchRow[index].find(searchItem => searchItem.includes(queryWord))) :\n false\n )\n )\n ) {\n this._searchData.push(idx)\n }\n\n })\n\n this.wrapperDOM.classList.add(\"search-results\")\n if (this._searchData.length) {\n this.update()\n } else {\n this.wrapperDOM.classList.remove(\"search-results\")\n\n this.setMessage(this.options.labels.noResults)\n }\n\n this.emit(\"datatable.multisearch\", queries, this._searchData)\n }\n\n /**\n * Change page\n */\n page(page: number, lastRowCursor = false) {\n // We don't want to load the current page again.\n if (page === this._currentPage) {\n return false\n }\n\n if (!isNaN(page)) {\n this._currentPage = page\n }\n\n if (page > this.pages.length || page < 0) {\n return false\n }\n\n this._renderPage(lastRowCursor)\n this._renderPagers()\n\n this.emit(\"datatable.page\", page)\n }\n\n /**\n * Add new row data\n */\n insert(data: (\n {headings?: string[], data?: (inputRowType | inputCellType[])[]} | { [key: string]: inputCellType}[])) {\n let rows: dataRowType[] = []\n if (Array.isArray(data)) {\n const headings = this.data.headings.map((heading: headerCellType) => heading.text ?? String(heading.data))\n data.forEach((row, rIndex) => {\n const r: cellType[] = []\n Object.entries(row).forEach(([heading, cell]) => {\n\n const index = headings.indexOf(heading)\n\n if (index > -1) {\n r[index] = readDataCell(cell as inputCellType, this.columns.settings[index])\n } else if (!this.hasHeadings && !this.hasRows && rIndex === 0) {\n r[headings.length] = readDataCell(cell as inputCellType, this.columns.settings[headings.length])\n headings.push(heading)\n this.data.headings.push(readHeaderCell(heading))\n }\n })\n rows.push({\n cells: r\n })\n })\n } else if (isObject(data)) {\n if (data.headings && !this.hasHeadings && !this.hasRows) {\n this.data = readTableData(data, undefined, this.columns.settings, this.options.type, this.options.format)\n } else if (data.data && Array.isArray(data.data)) {\n rows = data.data.map(row => {\n let attributes: { [key: string]: string }\n let cells: inputCellType[]\n if (Array.isArray(row)) {\n attributes = {}\n cells = row\n } else {\n attributes = row.attributes\n cells = row.cells\n }\n return {\n attributes,\n cells: cells.map((cell, index) => readDataCell(cell as inputCellType, this.columns.settings[index]))\n } as dataRowType\n })\n }\n }\n if (rows.length) {\n rows.forEach((row: dataRowType) => this.data.data.push(row))\n }\n this.hasHeadings = Boolean(this.data.headings.length)\n\n if (this.columns._state.sort) {\n this.columns.sort(this.columns._state.sort.column, this.columns._state.sort.dir, true)\n }\n\n this.update(true)\n }\n\n /**\n * Refresh the instance\n */\n refresh() {\n if (this.options.searchable) {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const inputs: HTMLInputElement[] = Array.from(this.wrapperDOM.querySelectorAll(inputSelector))\n inputs.forEach(el => (el.value = \"\"))\n this._searchQueries = []\n }\n this._currentPage = 1\n this.onFirstPage = true\n this.update(true)\n\n this.emit(\"datatable.refresh\")\n }\n\n /**\n * Print the table\n */\n print() {\n const tableDOM = createElement(\"table\")\n const tableVirtualDOM = {nodeName: \"TABLE\"}\n let newTableVirtualDOM = dataToVirtualDOM(\n this._tableAttributes,\n this.data.headings,\n this.data.data.map((row, index) => ({\n row,\n index\n })),\n this.columns.settings,\n this.columns._state,\n false, // No row cursor\n this.options,\n {\n noColumnWidths: true,\n unhideHeader: true\n },\n this._tableFooters,\n this._tableCaptions\n )\n\n if (this.options.tableRender) {\n const renderedTableVirtualDOM : (elementNodeType | void) = this.options.tableRender(this.data, newTableVirtualDOM, \"print\")\n if (renderedTableVirtualDOM) {\n newTableVirtualDOM = renderedTableVirtualDOM\n }\n }\n\n const diff = this._dd.diff(tableVirtualDOM, newTableVirtualDOM)\n this._dd.apply(tableDOM, diff)\n\n // Open new window\n const w = window.open()\n\n // Append the table to the body\n w.document.body.appendChild(tableDOM)\n\n // Print\n w.print()\n }\n\n /**\n * Show a message in the table\n */\n setMessage(message: string) {\n const activeHeadings = this.data.headings.filter((heading: headerCellType, index: number) => !this.columns.settings[index]?.hidden)\n const colspan = activeHeadings.length || 1\n\n this.options.classes.empty?.split(\" \").forEach(className => this.wrapperDOM.classList.add(className))\n\n if (this._label) {\n this._label.innerHTML = \"\"\n }\n this.totalPages = 0\n this._renderPagers()\n\n let newVirtualDOM : elementNodeType = {\n nodeName: \"TABLE\",\n attributes: this._tableAttributes,\n childNodes: [\n {\n nodeName: \"THEAD\",\n childNodes: [\n headingsToVirtualHeaderRowDOM(\n this.data.headings, this.columns.settings, this.columns._state, this.options, {})\n ]\n },\n {\n nodeName: \"TBODY\",\n childNodes: [\n {\n nodeName: \"TR\",\n childNodes: [\n {\n nodeName: \"TD\",\n attributes: {\n class: this.options.classes.empty,\n colspan: String(colspan)\n },\n childNodes: [\n {\n nodeName: \"#text\",\n data: message\n }\n ]\n }\n ]\n }\n ]\n }\n\n ]\n }\n\n this._tableFooters.forEach(footer => newVirtualDOM.childNodes.push(footer))\n this._tableCaptions.forEach(caption => newVirtualDOM.childNodes.push(caption))\n\n newVirtualDOM.attributes.class = joinWithSpaces(newVirtualDOM.attributes.class, this.options.classes.table)\n\n if (this.options.tableRender) {\n const renderedTableVirtualDOM : (elementNodeType | void) = this.options.tableRender(this.data, newVirtualDOM, \"message\")\n if (renderedTableVirtualDOM) {\n newVirtualDOM = renderedTableVirtualDOM\n }\n }\n\n const diff = this._dd.diff(this._virtualDOM, newVirtualDOM)\n this._dd.apply(this.dom, diff)\n this._virtualDOM = newVirtualDOM\n\n }\n\n /**\n * Add custom event listener\n */\n on(event: string, callback: () => void) {\n this._events[event] = this._events[event] || []\n this._events[event].push(callback)\n }\n\n /**\n * Remove custom event listener\n */\n off(event: string, callback: () => void) {\n if (event in this._events === false) return\n this._events[event].splice(this._events[event].indexOf(callback), 1)\n }\n\n /**\n * Fire custom event\n */\n emit(event: string, ...args) {\n if (event in this._events === false) return\n for (let i = 0; i < this._events[event].length; i++) {\n this._events[event][i](...args)\n }\n }\n}\n", "import {\n isObject\n} from \"../helpers\"\n\ninterface csvConvertUserOptions {\n lineDelimiter?: string,\n columnDelimiter?: string\n removeDoubleQuotes?: boolean\n data: string,\n headings?: string[],\n}\n\n\n/**\n * Convert CSV data to fit the format used in the table.\n */\nexport const convertCSV = function(userOptions : csvConvertUserOptions) {\n let obj\n const defaults = {\n lineDelimiter: \"\\n\",\n columnDelimiter: \",\",\n removeDoubleQuotes: false\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n\n if (options.data.length) {\n // Import CSV\n obj = {\n data: []\n }\n\n // Split the string into rows\n const rows : string[] = options.data.split(options.lineDelimiter)\n\n if (rows.length) {\n\n if (options.headings) {\n obj.headings = rows[0].split(options.columnDelimiter)\n if (options.removeDoubleQuotes) {\n obj.headings = obj.headings.map((e: string) => e.trim().replace(/(^\"|\"$)/g, \"\"))\n }\n rows.shift()\n }\n\n rows.forEach((row: string, i: number) => {\n obj.data[i] = []\n\n // Split the rows into values\n const values = row.split(options.columnDelimiter)\n\n if (values.length) {\n values.forEach((value: string) => {\n if (options.removeDoubleQuotes) {\n value = value.trim().replace(/(^\"|\"$)/g, \"\")\n }\n obj.data[i].push(value)\n })\n }\n })\n }\n\n if (obj) {\n return obj\n }\n }\n\n return false\n}\n", "import {\n isJson,\n isObject\n} from \"../helpers\"\n\ninterface jsonConvertUserOptions {\n lineDelimiter?: string,\n columnDelimiter?: string\n removeDoubleQuotes?: boolean\n data: string,\n headings?: string[],\n}\n\n/**\n * Convert JSON data to fit the format used in the table.\n */\nexport const convertJSON = function(userOptions : jsonConvertUserOptions) {\n let obj\n const defaults = {\n data: \"\"\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n\n if (options.data.length || isObject(options.data)) {\n // Import JSON\n const json = isJson(options.data) ? JSON.parse(options.data) : false\n\n // Valid JSON string\n if (json) {\n obj = {\n headings: [],\n data: []\n }\n\n json.forEach((data: { [key: string]: string | number | boolean | null | undefined}, i: number) => {\n obj.data[i] = []\n Object.entries(data).forEach(([column, value]) => {\n if (!obj.headings.includes(column)) {\n obj.headings.push(column)\n }\n obj.data[i].push(value)\n })\n })\n } else {\n console.warn(\"That's not valid JSON!\")\n }\n\n if (obj) {\n return obj\n }\n }\n\n return false\n}\n", "import {\n cellToText,\n isObject\n} from \"../helpers\"\nimport {DataTable} from \"../datatable\"\nimport {\n cellDataType,\n cellType,\n dataRowType,\n headerCellType\n} from \"../types\"\n\n/**\n * Export table to CSV\n */\n\ninterface csvUserOptions {\n download?: boolean,\n skipColumn?: number[],\n lineDelimiter?: string,\n columnDelimiter?: string,\n selection?: number | number[],\n filename?: string,\n}\n\n\nexport const exportCSV = function(dt: DataTable, userOptions: csvUserOptions = {}) {\n if (!dt.hasHeadings && !dt.hasRows) return false\n\n const defaults = {\n download: true,\n skipColumn: [],\n lineDelimiter: \"\\n\",\n columnDelimiter: \",\"\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n const columnShown = (index: number) => !options.skipColumn.includes(index) && !dt.columns.settings[index]?.hidden\n const headers = dt.data.headings.filter((_heading: headerCellType, index: number) => columnShown(index)).map((header: headerCellType) => header.text ?? header.data)\n\n // Selection or whole table\n let selectedRows: dataRowType[]\n if (options.selection) {\n // Page number\n if (Array.isArray(options.selection)) {\n // Array of page numbers\n selectedRows = []\n for (let i = 0; i < options.selection.length; i++) {\n selectedRows = selectedRows.concat(dt.pages[options.selection[i] - 1].map(row => row.row))\n }\n\n } else {\n selectedRows = dt.pages[options.selection - 1].map(row => row.row)\n }\n } else {\n selectedRows = dt.data.data\n }\n\n let rows : cellDataType[][] = []\n // Include headings\n rows[0] = headers\n rows = rows.concat(selectedRows.map((row: dataRowType) => {\n const shownCells = row.cells.filter((_cell: cellType, index: number) => columnShown(index))\n return shownCells.map((cell: cellType) => cellToText(cell))\n }))\n\n // Only proceed if we have data\n if (rows.length) {\n let str = \"\"\n rows.forEach(row => {\n row.forEach((cell: cellDataType) => {\n if (typeof cell === \"string\") {\n cell = cell.trim()\n cell = cell.replace(/\\s{2,}/g, \" \")\n cell = cell.replace(/\\n/g, \" \")\n cell = cell.replace(/\"/g, \"\\\"\\\"\")\n //have to manually encode \"#\" as encodeURI leaves it as is.\n cell = cell.replace(/#/g, \"%23\")\n if (cell.includes(\",\")) {\n cell = `\"${cell}\"`\n }\n }\n str += cell + options.columnDelimiter\n })\n // Remove trailing column delimiter\n str = str.trim().substring(0, str.length - 1)\n\n // Apply line delimiter\n str += options.lineDelimiter\n })\n\n // Remove trailing line delimiter\n str = str.trim().substring(0, str.length - 1)\n\n // Download\n if (options.download) {\n // Create a link to trigger the download\n const link = document.createElement(\"a\")\n link.href = encodeURI(`data:text/csv;charset=utf-8,${str}`)\n link.download = `${options.filename || \"datatable_export\"}.csv`\n\n // Append the link\n document.body.appendChild(link)\n\n // Trigger the download\n link.click()\n\n // Remove the link\n document.body.removeChild(link)\n }\n\n return str\n }\n\n return false\n}\n", "import {\n cellToText,\n isObject\n} from \"../helpers\"\nimport {DataTable} from \"../datatable\"\nimport {\n cellDataType,\n cellType,\n dataRowType,\n headerCellType\n} from \"../types\"\n/**\n * Export table to JSON\n */\n\n interface jsonUserOptions {\n download?: boolean,\n skipColumn?: number[],\n replacer?: null | ((key, value) => string) | (string | number)[],\n space?: number,\n selection?: number | number[],\n filename?: string,\n }\n\n\nexport const exportJSON = function(dt: DataTable, userOptions: jsonUserOptions = {}) {\n if (!dt.hasHeadings && !dt.hasRows) return false\n\n\n const defaults = {\n download: true,\n skipColumn: [],\n replacer: null,\n space: 4\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n\n const columnShown = (index: number) => !options.skipColumn.includes(index) && !dt.columns.settings[index]?.hidden\n\n // Selection or whole table\n let selectedRows: dataRowType[]\n if (options.selection) {\n // Page number\n if (Array.isArray(options.selection)) {\n // Array of page numbers\n selectedRows = []\n for (let i = 0; i < options.selection.length; i++) {\n selectedRows = selectedRows.concat(dt.pages[options.selection[i] - 1].map(row => row.row))\n }\n } else {\n selectedRows = dt.pages[options.selection - 1].map(row => row.row)\n }\n } else {\n selectedRows = dt.data.data\n }\n\n const rows: cellDataType[][] = selectedRows.map((row: dataRowType) => {\n const shownCells = row.cells.filter((_cell: cellType, index: number) => columnShown(index))\n return shownCells.map((cell: cellType) => cellToText(cell))\n })\n\n const headers = dt.data.headings.filter((_heading: headerCellType, index: number) => columnShown(index)).map((header: headerCellType) => header.text ?? String(header.data))\n\n // Only proceed if we have data\n if (rows.length) {\n const arr: (void | { [key: string]: cellDataType})[] = []\n rows.forEach((row: cellDataType[], x: number) => {\n arr[x] = arr[x] || {}\n row.forEach((cell: cellDataType, i: number) => {\n arr[x][headers[i]] = cell\n })\n })\n\n // Convert the array of objects to JSON string\n const str = JSON.stringify(arr, options.replacer, options.space)\n\n // Download\n if (options.download) {\n // Create a link to trigger the download\n\n const blob = new Blob(\n [str],\n {\n type: \"data:application/json;charset=utf-8\"\n }\n )\n const url = URL.createObjectURL(blob)\n\n\n const link = document.createElement(\"a\")\n link.href = url\n link.download = `${options.filename || \"datatable_export\"}.json`\n\n // Append the link\n document.body.appendChild(link)\n\n // Trigger the download\n link.click()\n\n // Remove the link\n document.body.removeChild(link)\n URL.revokeObjectURL(url)\n }\n\n return str\n }\n\n return false\n}\n", "import {\n cellToText,\n isObject\n} from \"../helpers\"\nimport {DataTable} from \"../datatable\"\nimport {\n cellDataType,\n cellType,\n dataRowType,\n headerCellType\n} from \"../types\"\n/**\n * Export table to SQL\n */\n\n interface sqlUserOptions {\n download?: boolean,\n skipColumn?: number[],\n tableName?: string,\n selection?: number | number[],\n filename?: string,\n }\n\nexport const exportSQL = function(dt: DataTable, userOptions : sqlUserOptions = {}) {\n if (!dt.hasHeadings && !dt.hasRows) return false\n\n const defaults = {\n download: true,\n skipColumn: [],\n tableName: \"myTable\"\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n const columnShown = (index: number) => !options.skipColumn.includes(index) && !dt.columns.settings[index]?.hidden\n\n // Selection or whole table\n let selectedRows: dataRowType[] = []\n if (options.selection) {\n // Page number\n if (Array.isArray(options.selection)) {\n // Array of page numbers\n for (let i = 0; i < options.selection.length; i++) {\n selectedRows = selectedRows.concat(dt.pages[options.selection[i] - 1].map(row => row.row))\n }\n\n } else {\n selectedRows = dt.pages[options.selection - 1].map(row => row.row)\n }\n } else {\n selectedRows = dt.data.data\n }\n\n const rows: cellDataType[][] = selectedRows.map((row: dataRowType) => {\n const shownCells = row.cells.filter((_cell: cellType, index: number) => columnShown(index))\n return shownCells.map((cell: cellType) => cellToText(cell))\n })\n\n const headers = dt.data.headings.filter((_heading: headerCellType, index: number) => columnShown(index)).map((header: headerCellType) => header.text ?? String(header.data))\n // Only proceed if we have data\n if (rows.length) {\n // Begin INSERT statement\n let str = `INSERT INTO \\`${options.tableName}\\` (`\n\n // Convert table headings to column names\n headers.forEach((header: string) => {\n str += `\\`${header}\\`,`\n })\n\n // Remove trailing comma\n str = str.trim().substring(0, str.length - 1)\n\n // Begin VALUES\n str += \") VALUES \"\n\n // Iterate rows and convert cell data to column values\n\n rows.forEach((row: cellDataType[]) => {\n str += \"(\"\n row.forEach((cell: cellDataType) => {\n if (typeof cell === \"string\") {\n str += `\"${cell}\",`\n } else {\n str += `${cell},`\n }\n })\n // Remove trailing comma\n str = str.trim().substring(0, str.length - 1)\n\n // end VALUES\n str += \"),\"\n\n })\n\n // Remove trailing comma\n str = str.trim().substring(0, str.length - 1)\n\n // Add trailing colon\n str += \";\"\n\n if (options.download) {\n str = `data:application/sql;charset=utf-8,${str}`\n }\n\n // Download\n if (options.download) {\n // Create a link to trigger the download\n const link = document.createElement(\"a\")\n link.href = encodeURI(str)\n link.download = `${options.filename || \"datatable_export\"}.sql`\n\n // Append the link\n document.body.appendChild(link)\n\n // Trigger the download\n link.click()\n\n // Remove the link\n document.body.removeChild(link)\n }\n\n return str\n }\n\n return false\n}\n", "import {\n cellToText,\n isObject\n} from \"../helpers\"\nimport {DataTable} from \"../datatable\"\nimport {\n cellDataType,\n cellType,\n dataRowType,\n headerCellType\n} from \"../types\"\n/**\n * Export table to TXT\n */\n interface txtUserOptions {\n download?: boolean,\n skipColumn?: number[],\n lineDelimiter?: string,\n columnDelimiter?: string,\n selection?: number | number[],\n filename?: string,\n }\n\n\nexport const exportTXT = function(dt: DataTable, userOptions : txtUserOptions = {}) {\n if (!dt.hasHeadings && !dt.hasRows) return false\n\n const defaults = {\n download: true,\n skipColumn: [],\n lineDelimiter: \"\\n\",\n columnDelimiter: \",\"\n }\n\n // Check for the options object\n if (!isObject(userOptions)) {\n return false\n }\n\n const options = {\n ...defaults,\n ...userOptions\n }\n\n const columnShown = (index: number) => !options.skipColumn.includes(index) && !dt.columns.settings[index]?.hidden\n\n const headers = dt.data.headings.filter((_heading: headerCellType, index: number) => columnShown(index)).map((header: headerCellType) => header.text ?? header.data)\n\n // Selection or whole table\n let selectedRows: dataRowType[]\n if (options.selection) {\n // Page number\n if (Array.isArray(options.selection)) {\n // Array of page numbers\n selectedRows = []\n for (let i = 0; i < options.selection.length; i++) {\n selectedRows = selectedRows.concat(dt.pages[options.selection[i] - 1].map(row => row.row))\n }\n } else {\n selectedRows = dt.pages[options.selection - 1].map(row => row.row)\n }\n } else {\n selectedRows = dt.data.data\n }\n\n let rows : cellDataType[][] = []\n // Include headings\n rows[0] = headers\n rows = rows.concat(selectedRows.map((row: dataRowType) => {\n const shownCells = row.cells.filter((_cell: cellType, index: number) => columnShown(index))\n return shownCells.map((cell: cellType) => cellToText(cell))\n }))\n\n // Only proceed if we have data\n if (rows.length) {\n let str = \"\"\n\n rows.forEach(row => {\n row.forEach((cell: cellDataType) => {\n if (typeof cell === \"string\") {\n cell = cell.trim()\n cell = cell.replace(/\\s{2,}/g, \" \")\n cell = cell.replace(/\\n/g, \" \")\n cell = cell.replace(/\"/g, \"\\\"\\\"\")\n //have to manually encode \"#\" as encodeURI leaves it as is.\n cell = cell.replace(/#/g, \"%23\")\n if (cell.includes(\",\")) {\n cell = `\"${cell}\"`\n }\n }\n str += cell + options.columnDelimiter\n })\n // Remove trailing column delimiter\n str = str.trim().substring(0, str.length - 1)\n\n // Apply line delimiter\n str += options.lineDelimiter\n\n })\n\n // Remove trailing line delimiter\n str = str.trim().substring(0, str.length - 1)\n\n if (options.download) {\n str = `data:text/csv;charset=utf-8,${str}`\n }\n // Download\n if (options.download) {\n // Create a link to trigger the download\n const link = document.createElement(\"a\")\n link.href = encodeURI(str)\n link.download = `${options.filename || \"datatable_export\"}.txt`\n\n // Append the link\n document.body.appendChild(link)\n\n // Trigger the download\n link.click()\n\n // Remove the link\n document.body.removeChild(link)\n }\n\n return str\n }\n\n return false\n}\n", "/**\n* Default config\n* @type {Object}\n*/\nimport {Editor} from \"./editor\"\n\nexport const defaultConfig = {\n classes: {\n row: \"datatable-editor-row\",\n form: \"datatable-editor-form\",\n item: \"datatable-editor-item\",\n menu: \"datatable-editor-menu\",\n save: \"datatable-editor-save\",\n block: \"datatable-editor-block\",\n cancel: \"datatable-editor-cancel\",\n close: \"datatable-editor-close\",\n inner: \"datatable-editor-inner\",\n input: \"datatable-editor-input\",\n label: \"datatable-editor-label\",\n modal: \"datatable-editor-modal\",\n action: \"datatable-editor-action\",\n header: \"datatable-editor-header\",\n wrapper: \"datatable-editor-wrapper\",\n editable: \"datatable-editor-editable\",\n container: \"datatable-editor-container\",\n separator: \"datatable-editor-separator\"\n },\n\n labels: {\n closeX: \"x\",\n editCell: \"Edit Cell\",\n editRow: \"Edit Row\",\n removeRow: \"Remove Row\",\n reallyRemove: \"Are you sure?\",\n reallyCancel: \"Do you really want to cancel?\",\n save: \"Save\",\n cancel: \"Cancel\"\n },\n\n cancelModal: editor => confirm(editor.options.labels.reallyCancel),\n\n // edit inline instead of using a modal lay-over for editing content\n inline: true,\n\n // include hidden columns in the editor\n hiddenColumns: false,\n\n // enable the context menu\n contextMenu: true,\n\n // event to start editing\n clickEvent: \"dblclick\",\n\n // indexes of columns not to be edited\n excludeColumns: [],\n\n // set the context menu items\n menuItems: [\n {\n text: (editor: Editor) => editor.options.labels.editCell,\n action: (editor: Editor, _event: Event) => {\n if (!(editor.event.target instanceof Element)) {\n return\n }\n const cell = editor.event.target.closest(\"td\")\n return editor.editCell(cell)\n }\n },\n {\n text: (editor: Editor) => editor.options.labels.editRow,\n action: (editor: Editor, _event: Event) => {\n if (!(editor.event.target instanceof Element)) {\n return\n }\n const row = editor.event.target.closest(\"tr\")\n return editor.editRow(row)\n }\n },\n {\n separator: true\n },\n {\n text: (editor: Editor) => editor.options.labels.removeRow,\n action: (editor: Editor, _event: Event) => {\n if (!(editor.event.target instanceof Element)) {\n return\n }\n if (confirm(editor.options.labels.reallyRemove)) {\n const row = editor.event.target.closest(\"tr\")\n editor.removeRow(row)\n }\n }\n }\n ]\n}\n", "import {\n classNamesToSelector,\n cellToText,\n columnToVisibleIndex,\n createElement,\n escapeText,\n visibleToColumnIndex\n} from \"../helpers\"\nimport {\n cellType,\n rowRenderType,\n elementNodeType\n} from \"../types\"\nimport {DataTable} from \"../datatable\"\nimport {parseDate} from \"../date\"\n\nimport {\n defaultConfig\n} from \"./config\"\nimport {\n debounce\n} from \"./helpers\"\nimport {menuItemType, dataType, EditorOptions} from \"./types\"\n\n\n/**\n * Main lib\n * @param {Object} dataTable Target dataTable\n * @param {Object} options User config\n */\nexport class Editor {\n menuOpen: boolean\n\n containerDOM: HTMLElement\n\n data: dataType\n\n disabled: boolean\n\n dt: DataTable\n\n editing: boolean\n\n editingCell: boolean\n\n editingRow: boolean\n\n event: Event\n\n events: { [key: string]: () => void}\n\n initialized: boolean\n\n limits: {x: number, y: number}\n\n menuDOM: HTMLElement\n\n modalDOM: HTMLElement | false\n\n options: EditorOptions\n\n originalRowRender: rowRenderType | false\n\n rect: {width: number, height: number}\n\n wrapperDOM: HTMLElement\n\n constructor(dataTable: DataTable, options = {}) {\n this.dt = dataTable\n this.options = {\n ...defaultConfig,\n ...options\n }\n }\n\n /**\n * Init instance\n * @return {Void}\n */\n init() {\n if (this.initialized) {\n return\n }\n this.options.classes.editable?.split(\" \").forEach(className => this.dt.wrapperDOM.classList.add(className))\n if (this.options.inline) {\n this.originalRowRender = this.dt.options.rowRender\n this.dt.options.rowRender = (row, tr, index) => {\n let newTr = this.rowRender(row, tr, index)\n if (this.originalRowRender) {\n newTr = this.originalRowRender(row, newTr, index)\n }\n return newTr\n }\n }\n if (this.options.contextMenu) {\n this.containerDOM = createElement(\"div\", {\n id: this.options.classes.container\n })\n this.wrapperDOM = createElement(\"div\", {\n class: this.options.classes.wrapper\n })\n this.menuDOM = createElement(\"ul\", {\n class: this.options.classes.menu\n })\n if (this.options.menuItems && this.options.menuItems.length) {\n this.options.menuItems.forEach((item: menuItemType) => {\n const li = createElement(\"li\", {\n class: item.separator ? this.options.classes.separator : this.options.classes.item\n })\n if (!item.separator) {\n const a = createElement(\"a\", {\n class: this.options.classes.action,\n href: item.url || \"#\",\n html: typeof item.text === \"function\" ? item.text(this) : item.text\n })\n li.appendChild(a)\n if (item.action && typeof item.action === \"function\") {\n a.addEventListener(\"click\", (event: Event) => {\n event.preventDefault()\n item.action(this, event)\n })\n }\n }\n this.menuDOM.appendChild(li)\n })\n }\n this.wrapperDOM.appendChild(this.menuDOM)\n this.containerDOM.appendChild(this.wrapperDOM)\n this.updateMenu()\n }\n this.data = {}\n this.menuOpen = false\n this.editing = false\n this.editingRow = false\n this.editingCell = false\n this.bindEvents()\n setTimeout(() => {\n this.initialized = true\n this.dt.emit(\"editable.init\")\n }, 10)\n }\n\n /**\n * Bind events to DOM\n * @return {Void}\n */\n bindEvents() {\n this.events = {\n keydown: this.keydown.bind(this),\n click: this.click.bind(this)\n }\n // listen for click / double-click\n this.dt.dom.addEventListener(this.options.clickEvent, this.events.click)\n // listen for right-click\n document.addEventListener(\"keydown\", this.events.keydown)\n\n if (this.options.contextMenu) {\n this.events.context = this.context.bind(this)\n this.events.updateMenu = this.updateMenu.bind(this)\n this.events.dismissMenu = this.dismissMenu.bind(this)\n this.events.reset = debounce(() => this.events.updateMenu(), 50)\n\n // listen for right-click\n this.dt.dom.addEventListener(\"contextmenu\", this.events.context)\n // listen for click everywhere except the menu\n document.addEventListener(\"click\", this.events.dismissMenu)\n // Reset contextmenu on browser window changes\n window.addEventListener(\"resize\", this.events.reset)\n window.addEventListener(\"scroll\", this.events.reset)\n }\n }\n\n /**\n * contextmenu listener\n * @param {Object} event Event\n * @return {Void}\n */\n context(event: MouseEvent) {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n this.event = event\n\n const cell = target.closest(\"tbody td\")\n if (!this.disabled && cell) {\n event.preventDefault()\n // get the mouse position\n let x = event.pageX\n let y = event.pageY\n // check if we're near the right edge of window\n if (x > this.limits.x) {\n x -= this.rect.width\n }\n // check if we're near the bottom edge of window\n if (y > this.limits.y) {\n y -= this.rect.height\n }\n this.wrapperDOM.style.top = `${y}px`\n this.wrapperDOM.style.left = `${x}px`\n this.openMenu()\n this.updateMenu()\n }\n }\n\n /**\n * dblclick listener\n * @param {Object} event Event\n * @return {Void}\n */\n click(event: MouseEvent) {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n if (this.editing && this.data && this.editingCell) {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const input = this.modalDOM ?\n (this.modalDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement) :\n (this.dt.wrapperDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement)\n this.saveCell(input.value)\n } else if (!this.editing) {\n const cell = target.closest(\"tbody td\") as HTMLTableCellElement\n if (cell) {\n this.editCell(cell)\n event.preventDefault()\n }\n }\n }\n\n /**\n * keydown listener\n * @param {Object} event Event\n * @return {Void}\n */\n keydown(event: KeyboardEvent) {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n if (this.modalDOM) {\n if (event.key === \"Escape\") { // close button\n if (this.options.cancelModal(this)) {\n this.closeModal()\n }\n } else if (event.key === \"Enter\") { // save button\n // Save\n if (this.editingCell) {\n const input = (this.modalDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement)\n this.saveCell(input.value)\n } else {\n const values = (Array.from(this.modalDOM.querySelectorAll(`input${inputSelector}[type=text]`)) as HTMLInputElement[]).map(input => input.value.trim())\n this.saveRow(values, this.data.row)\n }\n }\n } else if (this.editing && this.data) {\n if (event.key === \"Enter\") {\n // Enter key saves\n if (this.editingCell) {\n const input = (this.dt.wrapperDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement)\n this.saveCell(input.value)\n } else if (this.editingRow) {\n const values = (Array.from(this.dt.wrapperDOM.querySelectorAll(`input${inputSelector}[type=text]`)) as HTMLInputElement[]).map(input => input.value.trim())\n this.saveRow(values, this.data.row)\n }\n } else if (event.key === \"Escape\") {\n // Escape key reverts\n if (this.editingCell) {\n this.saveCell(this.data.content)\n } else if (this.editingRow) {\n this.saveRow(null, this.data.row)\n }\n }\n }\n }\n\n /**\n * Edit cell\n * @param {Object} td The HTMLTableCellElement\n * @return {Void}\n */\n editCell(td: HTMLTableCellElement) {\n const columnIndex = visibleToColumnIndex(td.cellIndex, this.dt.columns.settings)\n if (this.options.excludeColumns.includes(columnIndex)) {\n this.closeMenu()\n return\n }\n const rowIndex = parseInt(td.parentElement.dataset.index, 10)\n const row = this.dt.data.data[rowIndex]\n const cell = row.cells[columnIndex]\n\n this.data = {\n cell,\n rowIndex,\n columnIndex,\n content: cellToText(cell)\n }\n this.editing = true\n this.editingCell = true\n if (this.options.inline) {\n this.dt.update()\n } else {\n this.editCellModal()\n }\n this.closeMenu()\n }\n\n editCellModal() {\n const cell = this.data.cell\n const columnIndex = this.data.columnIndex\n const label = this.dt.data.headings[columnIndex].text || String(this.dt.data.headings[columnIndex].data)\n const template = [\n `<div class='${this.options.classes.inner}'>`,\n `<div class='${this.options.classes.header}'>`,\n `<h4>${this.options.labels.editCell}</h4>`,\n `<button class='${this.options.classes.close}' type='button' data-editor-cancel>${this.options.labels.closeX}</button>`,\n \" </div>\",\n `<div class='${this.options.classes.block}'>`,\n `<form class='${this.options.classes.form}'>`,\n `<div class='${this.options.classes.row}'>`,\n `<label class='${this.options.classes.label}'>${escapeText(label)}</label>`,\n `<input class='${this.options.classes.input}' value='${escapeText(cellToText(cell))}' type='text'>`,\n \"</div>\",\n `<div class='${this.options.classes.row}'>`,\n `<button class='${this.options.classes.cancel}' type='button' data-editor-cancel>${this.options.labels.cancel}</button>`,\n `<button class='${this.options.classes.save}' type='button' data-editor-save>${this.options.labels.save}</button>`,\n \"</div>\",\n \"</form>\",\n \"</div>\",\n \"</div>\"\n ].join(\"\")\n const modalDOM = createElement(\"div\", {\n class: this.options.classes.modal,\n html: template\n })\n this.modalDOM = modalDOM\n this.openModal()\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const input = (modalDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement)\n input.focus()\n input.selectionStart = input.selectionEnd = input.value.length\n // Close / save\n modalDOM.addEventListener(\"click\", (event: Event) => {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n if (target.hasAttribute(\"data-editor-cancel\")) { // cancel button\n event.preventDefault()\n if (this.options.cancelModal(this)) {\n this.closeModal()\n }\n } else if (target.hasAttribute(\"data-editor-save\")) { // save button\n event.preventDefault()\n // Save\n this.saveCell(input.value)\n }\n })\n }\n\n /**\n * Save edited cell\n * @param {Object} row The HTMLTableCellElement\n * @param {String} value Cell content\n * @return {Void}\n */\n saveCell(value: string) {\n const oldData = this.data.content\n // Get the type of that column\n const type = this.dt.columns.settings[this.data.columnIndex].type || this.dt.options.type\n const stringValue = value.trim()\n let cell\n if (type === \"number\") {\n cell = {data: parseFloat(stringValue)}\n } else if (type === \"boolean\") {\n if ([\"\", \"false\", \"0\"].includes(stringValue)) {\n cell = {data: false,\n text: \"false\",\n order: 0}\n } else {\n cell = {data: true,\n text: \"true\",\n order: 1}\n }\n } else if (type === \"html\") {\n cell = {data: [\n {nodeName: \"#text\",\n data: value}\n ],\n text: value,\n order: value}\n } else if (type === \"string\") {\n cell = {data: value}\n } else if (type === \"date\") {\n const format = this.dt.columns.settings[this.data.columnIndex].format || this.dt.options.format\n cell = {data: value,\n order: parseDate(String(value), format)}\n } else {\n cell = {data: value}\n }\n // Set the cell content\n const row = this.dt.data.data[this.data.rowIndex]\n row.cells[this.data.columnIndex] = cell\n this.closeModal()\n const rowIndex = this.data.rowIndex\n const columnIndex = this.data.columnIndex\n this.data = {}\n this.dt.update(true)\n this.editing = false\n this.editingCell = false\n this.dt.emit(\"editable.save.cell\", value, oldData, rowIndex, columnIndex)\n }\n\n /**\n * Edit row\n * @param {Object} row The HTMLTableRowElement\n * @return {Void}\n */\n editRow(tr: HTMLElement) {\n if (!tr || tr.nodeName !== \"TR\" || this.editing) return\n const rowIndex = parseInt(tr.dataset.index, 10)\n const row = this.dt.data.data[rowIndex]\n this.data = {\n row: row.cells,\n rowIndex\n }\n this.editing = true\n this.editingRow = true\n if (this.options.inline) {\n this.dt.update()\n } else {\n this.editRowModal()\n }\n this.closeMenu()\n }\n\n editRowModal() {\n const row = this.data.row\n\n const template = [\n `<div class='${this.options.classes.inner}'>`,\n `<div class='${this.options.classes.header}'>`,\n `<h4>${this.options.labels.editRow}</h4>`,\n `<button class='${this.options.classes.close}' type='button' data-editor-cancel>${this.options.labels.closeX}</button>`,\n \" </div>\",\n `<div class='${this.options.classes.block}'>`,\n `<form class='${this.options.classes.form}'>`,\n `<div class='${this.options.classes.row}'>`,\n `<button class='${this.options.classes.cancel}' type='button' data-editor-cancel>${this.options.labels.cancel}</button>`,\n `<button class='${this.options.classes.save}' type='button' data-editor-save>${this.options.labels.save}</button>`,\n \"</div>\",\n \"</form>\",\n \"</div>\",\n \"</div>\"\n ].join(\"\")\n const modalDOM = createElement(\"div\", {\n class: this.options.classes.modal,\n html: template\n })\n const inner = modalDOM.firstElementChild\n if (!inner) {\n return\n }\n const form = inner.lastElementChild?.firstElementChild\n if (!form) {\n return\n }\n // Add the inputs for each cell\n row.forEach((cell: cellType, i: number) => {\n const columnSettings = this.dt.columns.settings[i]\n if ((!columnSettings.hidden || (columnSettings.hidden && this.options.hiddenColumns)) && !this.options.excludeColumns.includes(i)) {\n const label = this.dt.data.headings[i].text || String(this.dt.data.headings[i].data)\n form.insertBefore(createElement(\"div\", {\n class: this.options.classes.row,\n html: [\n `<div class='${this.options.classes.row}'>`,\n `<label class='${this.options.classes.label}'>${escapeText(label)}</label>`,\n `<input class='${this.options.classes.input}' value='${escapeText(cellToText(cell))}' type='text'>`,\n \"</div>\"\n ].join(\"\")\n }), form.lastElementChild)\n }\n })\n this.modalDOM = modalDOM\n this.openModal()\n // Grab the inputs\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const inputs = Array.from(form.querySelectorAll(`input${inputSelector}[type=text]`)) as HTMLInputElement[]\n\n // Close / save\n modalDOM.addEventListener(\"click\", (event: MouseEvent) => {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n if (target.hasAttribute(\"data-editor-cancel\")) { // cancel button\n if (this.options.cancelModal(this)) {\n this.closeModal()\n }\n } else if (target.hasAttribute(\"data-editor-save\")) { // save button\n // Save\n const values = inputs.map((input: HTMLInputElement) => input.value.trim())\n this.saveRow(values, this.data.row)\n }\n })\n }\n\n /**\n * Save edited row\n * @param {Object} row The HTMLTableRowElement\n * @param {Array} data Cell data\n * @return {Void}\n */\n saveRow(data: string[], row: cellType[]) {\n // Store the old data for the emitter\n const oldData = row.map((cell: cellType) => cellToText(cell))\n const updatedRow = this.dt.data.data[this.data.rowIndex]\n\n if (data) {\n let valueCounter = 0\n updatedRow.cells = row.map((oldItem, colIndex) => {\n if (this.options.excludeColumns.includes(colIndex) || this.dt.columns.settings[colIndex].hidden) {\n return oldItem\n }\n const type = this.dt.columns.settings[colIndex].type || this.dt.options.type\n const value = data[valueCounter++]\n let cell\n if (type === \"number\") {\n cell = {data: parseFloat(value)}\n } else if (type === \"boolean\") {\n if ([\"\", \"false\", \"0\"].includes(value)) {\n cell = {data: false,\n text: \"false\",\n order: 0}\n } else {\n cell = {data: true,\n text: \"true\",\n order: 1}\n }\n } else if (type === \"html\") {\n cell = {\n data: [\n {nodeName: \"#text\",\n data: value}\n ],\n text: value,\n order: value\n }\n } else if (type === \"string\") {\n cell = {data: value}\n } else if (type === \"date\") {\n const format = this.dt.columns.settings[colIndex].format || this.dt.options.format\n cell = {data: value,\n order: parseDate(String(value), format)}\n } else {\n cell = {data: value}\n }\n return cell\n\n })\n }\n\n const newData = updatedRow.cells.map(cell => cellToText(cell))\n\n this.data = {}\n this.dt.update(true)\n this.closeModal()\n this.editing = false\n this.dt.emit(\"editable.save.row\", newData, oldData, row)\n }\n\n /**\n * Open the row editor modal\n * @return {Void}\n */\n openModal() {\n if (this.modalDOM) {\n document.body.appendChild(this.modalDOM)\n }\n }\n\n /**\n * Close the row editor modal\n * @return {Void}\n */\n closeModal() {\n if (this.editing && this.modalDOM) {\n document.body.removeChild(this.modalDOM)\n this.modalDOM = this.editing = this.editingRow = this.editingCell = false\n }\n }\n\n /**\n * Remove a row\n * @param {Object} tr The HTMLTableRowElement\n * @return {Void}\n */\n removeRow(tr: HTMLElement) {\n if (!tr || tr.nodeName !== \"TR\" || this.editing) return\n const index = parseInt(tr.dataset.index, 10)\n this.dt.rows.remove(index)\n this.closeMenu()\n }\n\n /**\n * Update context menu position\n * @return {Void}\n */\n updateMenu() {\n const scrollX = window.scrollX || window.pageXOffset\n const scrollY = window.scrollY || window.pageYOffset\n this.rect = this.wrapperDOM.getBoundingClientRect()\n this.limits = {\n x: window.innerWidth + scrollX - this.rect.width,\n y: window.innerHeight + scrollY - this.rect.height\n }\n }\n\n /**\n * Dismiss the context menu\n * @param {Object} event Event\n * @return {Void}\n */\n dismissMenu(event: Event) {\n const target = event.target\n if (!(target instanceof Element) || this.wrapperDOM.contains(target)) {\n return\n }\n let valid = true\n if (this.editing) {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n valid = !(target.matches(`input${inputSelector}[type=text]`))\n }\n if (valid) {\n this.closeMenu()\n }\n }\n\n /**\n * Open the context menu\n * @return {Void}\n */\n openMenu() {\n if (this.editing && this.data && this.editingCell) {\n const inputSelector = classNamesToSelector(this.options.classes.input)\n const input = this.modalDOM ?\n (this.modalDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement) :\n (this.dt.wrapperDOM.querySelector(`input${inputSelector}[type=text]`) as HTMLInputElement)\n\n this.saveCell(input.value)\n }\n document.body.appendChild(this.containerDOM)\n this.menuOpen = true\n this.dt.emit(\"editable.context.open\")\n }\n\n /**\n * Close the context menu\n * @return {Void}\n */\n closeMenu() {\n if (this.menuOpen) {\n this.menuOpen = false\n document.body.removeChild(this.containerDOM)\n this.dt.emit(\"editable.context.close\")\n }\n }\n\n /**\n * Destroy the instance\n * @return {Void}\n */\n destroy() {\n this.dt.dom.removeEventListener(this.options.clickEvent, this.events.click)\n this.dt.dom.removeEventListener(\"contextmenu\", this.events.context)\n document.removeEventListener(\"click\", this.events.dismissMenu)\n document.removeEventListener(\"keydown\", this.events.keydown)\n window.removeEventListener(\"resize\", this.events.reset)\n window.removeEventListener(\"scroll\", this.events.reset)\n if (document.body.contains(this.containerDOM)) {\n document.body.removeChild(this.containerDOM)\n }\n if (this.options.inline) {\n this.dt.options.rowRender = this.originalRowRender\n }\n this.initialized = false\n }\n\n rowRender(row, tr, index) {\n if (!this.data || this.data.rowIndex !== index) {\n return tr\n }\n\n if (this.editingCell) {\n // cell editing\n const cell = tr.childNodes[columnToVisibleIndex(this.data.columnIndex, this.dt.columns.settings)]\n cell.childNodes = [\n {\n nodeName: \"INPUT\",\n attributes: {\n type: \"text\",\n value: this.data.content,\n class: this.options.classes.input\n }\n }\n ]\n } else {\n // row editing\n\n // Add the inputs for each cell\n tr.childNodes.forEach((cell: elementNodeType, i: number) => {\n const index = visibleToColumnIndex(i, this.dt.columns.settings)\n const dataCell = row[index]\n if (!this.options.excludeColumns.includes(index)) {\n const cell = tr.childNodes[i]\n cell.childNodes = [\n {\n nodeName: \"INPUT\",\n attributes: {\n type: \"text\",\n value: escapeText(dataCell.text || String(dataCell.data) || \"\"),\n class: this.options.classes.input\n }\n }\n ]\n }\n })\n\n }\n return tr\n\n }\n}\n\nexport const makeEditable = function(dataTable: DataTable, options = {}) {\n const editor = new Editor(dataTable, options)\n if (dataTable.initialized) {\n editor.init()\n } else {\n dataTable.on(\"datatable.init\", () => editor.init())\n }\n\n return editor\n}\n", "// Source: https://www.freecodecamp.org/news/javascript-debounce-example/\n\nexport const debounce = function(func: () => void, timeout = 300) {\n let timer: number\n return (..._args: any[]) => {\n clearTimeout(timer)\n timer = window.setTimeout(() => func(), timeout)\n }\n}\n", "/**\n* Default config\n* @type {Object}\n*/\n//import {ColumnFilter} from \"./column_filter\"\n\nexport const defaultConfig = {\n classes: {\n button: \"datatable-column-filter-button\",\n menu: \"datatable-column-filter-menu\",\n container: \"datatable-column-filter-container\",\n wrapper: \"datatable-column-filter-wrapper\"\n },\n labels: {\n button: \"Filter columns within the table\" // The filter button title\n },\n hiddenColumns: []\n}\n", "import {DataTable} from \"../datatable\"\nimport {classNamesToSelector, createElement} from \"../helpers\"\n\nimport {\n defaultConfig\n} from \"./config\"\n\nimport {ColumnFilterOptions} from \"./types\"\n\nclass ColumnFilter {\n\n addedButtonDOM: boolean\n\n menuOpen: boolean\n\n buttonDOM: HTMLElement\n\n dt: DataTable\n\n events: { [key: string]: () => void}\n\n initialized: boolean\n\n options: ColumnFilterOptions\n\n menuDOM: HTMLElement\n\n containerDOM: HTMLElement\n\n wrapperDOM: HTMLElement\n\n limits: {x: number, y: number}\n\n rect: {width: number, height: number}\n\n event: Event\n\n constructor(dataTable: DataTable, options = {}) {\n this.dt = dataTable\n this.options = {\n ...defaultConfig,\n ...options\n }\n }\n\n init() {\n\n if (this.initialized) {\n return\n }\n\n const buttonSelector = classNamesToSelector(this.options.classes.button)\n let buttonDOM : (HTMLElement | null) = this.dt.wrapperDOM.querySelector(buttonSelector)\n if (!buttonDOM) {\n buttonDOM = createElement(\n \"button\",\n {\n class: this.options.classes.button,\n html: \"▦\"\n }\n )\n // filter button not part of template (could be default template. We add it to search.)\n const searchSelector = classNamesToSelector(this.dt.options.classes.search)\n const searchWrapper = this.dt.wrapperDOM.querySelector(searchSelector)\n if (searchWrapper) {\n searchWrapper.appendChild(buttonDOM)\n } else {\n this.dt.wrapperDOM.appendChild(buttonDOM)\n }\n this.addedButtonDOM = true\n }\n this.buttonDOM = buttonDOM\n\n\n this.containerDOM = createElement(\"div\", {\n id: this.options.classes.container\n })\n this.wrapperDOM = createElement(\"div\", {\n class: this.options.classes.wrapper\n })\n this.menuDOM = createElement(\"ul\", {\n class: this.options.classes.menu,\n html: this.dt.data.headings.map(\n (heading, index) => {\n const settings = this.dt.columns.settings[index]\n if (this.options.hiddenColumns.includes(index)) {\n return \"\"\n }\n return `<li data-column=\"${index}\">\n <input type=\"checkbox\" value=\"${heading.text || heading.data}\" ${settings.hidden ? \"\" : \"checked=''\"}>\n <label>\n ${heading.text || heading.data}\n </label>\n </li>`\n }\n ).join(\"\")\n })\n this.wrapperDOM.appendChild(this.menuDOM)\n this.containerDOM.appendChild(this.wrapperDOM)\n this._measureSpace()\n\n this._bind()\n\n this.initialized = true\n\n }\n\n dismiss() {\n if (this.addedButtonDOM && this.buttonDOM.parentElement) {\n this.buttonDOM.parentElement.removeChild(this.buttonDOM)\n }\n document.removeEventListener(\"click\", this.events.click)\n }\n\n _bind() {\n this.events = {\n click: this._click.bind(this)\n }\n document.addEventListener(\"click\", this.events.click)\n }\n\n _openMenu() {\n document.body.appendChild(this.containerDOM)\n this._measureSpace()\n this.menuOpen = true\n this.dt.emit(\"columnFilter.menu.open\")\n }\n\n _closeMenu() {\n if (this.menuOpen) {\n this.menuOpen = false\n document.body.removeChild(this.containerDOM)\n this.dt.emit(\"columnFilter.menu.close\")\n }\n }\n\n _measureSpace() {\n const scrollX = window.scrollX || window.pageXOffset\n const scrollY = window.scrollY || window.pageYOffset\n this.rect = this.wrapperDOM.getBoundingClientRect()\n this.limits = {\n x: window.innerWidth + scrollX - this.rect.width,\n y: window.innerHeight + scrollY - this.rect.height\n }\n }\n\n _click(event: MouseEvent) {\n const target = event.target\n if (!(target instanceof Element)) {\n return\n }\n this.event = event\n\n if (this.buttonDOM.contains(target)) {\n event.preventDefault()\n if (this.menuOpen) {\n this._closeMenu()\n return\n }\n this._openMenu()\n // get the mouse position\n let x = event.pageX\n let y = event.pageY\n // check if we're near the right edge of window\n if (x > this.limits.x) {\n x -= this.rect.width\n }\n // check if we're near the bottom edge of window\n if (y > this.limits.y) {\n y -= this.rect.height\n }\n this.wrapperDOM.style.top = `${y}px`\n this.wrapperDOM.style.left = `${x}px`\n } else if (this.menuDOM.contains(target)) {\n const menuSelector = classNamesToSelector(this.options.classes.menu)\n const li = target.closest(`${menuSelector} > li`) as HTMLElement\n if (!li) {\n return\n }\n const checkbox = li.querySelector(\"input[type=checkbox]\") as HTMLInputElement\n if (!checkbox.contains(target)) {\n checkbox.checked = !checkbox.checked\n }\n const column = Number(li.dataset.column)\n if (checkbox.checked) {\n this.dt.columns.show([column])\n } else {\n this.dt.columns.hide([column])\n }\n } else if (this.menuOpen) {\n this._closeMenu()\n }\n }\n\n}\n\n\nexport const addColumnFilter = function(dataTable: DataTable, options = {}) {\n const columnFilter = new ColumnFilter(dataTable, options)\n if (dataTable.initialized) {\n columnFilter.init()\n } else {\n dataTable.on(\"datatable.init\", () => columnFilter.init())\n }\n\n return columnFilter\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport {DataTable} from \"simple-datatables\";\n\n// Connects to data-controller=\"data-table\"\nexport default class extends Controller {\n connect() {\n this.dataTable = new DataTable(this.element, {\n paging: false,\n searchable: false,\n classes: {\n search: \"w-100\",\n input: \"form-control\"\n }\n });\n }\n}\n", "import {Controller} from \"@hotwired/stimulus\";\n\n// Connects to data-controller=\"form-state\"\nexport default class extends Controller {\n static values = {groupId: String}\n static targets = [\"input\", \"radio\", \"select\", \"checkbox\", \"toggle\"]\n\n connect() {\n this.restoreState();\n }\n\n getStoredData() {\n const savedState = localStorage.getItem(this.storageKey());\n if (savedState) {\n return JSON.parse(savedState);\n } else {\n return {\n inputs: {},\n radios: {},\n selects: {},\n checkboxes: {},\n inactiveToggles: []\n };\n }\n }\n\n saveState() {\n const data = this.getStoredData();\n\n // Save the state of all inputs\n this.inputTargets.forEach(input => {\n data.inputs[input.id] = input.value;\n });\n\n // Save the state of all radio buttons\n this.radioTargets.forEach(radio => {\n if (radio.checked) {\n data.radios[radio.id] = radio.value;\n }\n });\n\n // Save the state of all select elements\n this.selectTargets.forEach(select => {\n data.selects[select.id] = select.value;\n });\n\n // Save the state of all checkboxes\n this.checkboxTargets.forEach(checkbox => {\n data.checkboxes[checkbox.id] = checkbox.checked;\n });\n\n // Save the state of inactive toggles\n this.toggleTargets.forEach(toggle => {\n const index = data.inactiveToggles.indexOf(toggle.id);\n if (!toggle.classList.contains(\"active\")) {\n if (index === -1) {\n data.inactiveToggles.push(toggle.id);\n }\n } else {\n if (index !== -1) {\n data.inactiveToggles.splice(index, 1);\n }\n }\n });\n\n localStorage.setItem(this.storageKey(), JSON.stringify(data));\n }\n\n restoreState() {\n const data = this.getStoredData();\n\n // Restore the state of all inputs\n this.inputTargets.forEach(input => {\n if (data.inputs[input.id] !== undefined) {\n input.value = data.inputs[input.id];\n }\n });\n\n // Restore the state of all radio buttons\n this.radioTargets.forEach(radio => {\n if (data.radios[radio.id]) {\n radio.checked = true;\n }\n });\n\n // Restore the state of all select elements\n this.selectTargets.forEach(select => {\n if (data.selects[select.id]) {\n select.value = data.selects[select.id];\n }\n });\n\n // Restore the state of all checkboxes\n this.checkboxTargets.forEach(checkbox => {\n if (data.checkboxes.hasOwnProperty(checkbox.id)) {\n checkbox.checked = data.checkboxes[checkbox.id];\n }\n });\n\n // Restore the state of the toggle button\n this.toggleTargets.forEach(toggle => {\n if (data.inactiveToggles.includes(toggle.id)) {\n toggle.classList.remove(\"active\");\n } else {\n toggle.classList.add(\"active\");\n }\n });\n }\n\n clearState() {\n localStorage.removeItem(this.storageKey());\n }\n\n storageKey() {\n return `formState-${this.groupIdValue}`;\n }\n\n changeHandler() {\n this.saveState();\n }\n}\n", "import {Controller} from '@hotwired/stimulus'\n\nexport default class extends Controller {\n static targets = ['form']\n\n submit() {\n this.formTarget.requestSubmit()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Carousel } from \"bootstrap\"\n\nexport default class extends Controller {\n static targets = [\"carousel\"]\n\n connect() {\n this.carouselInstance = Carousel.getOrCreateInstance(this.carouselTarget)\n }\n\n changeImage(event) {\n this.carouselInstance.to(event.currentTarget.dataset.index)\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"gallery-update\"\nexport default class extends Controller {\n static targets = [ \"gallery\", \"colorSelect\", \"logoSelect\" ]\n\n change() {\n const url = new URL(this.galleryTarget.src)\n this.updateURLParam(url, 'color', this.colorSelectTarget.value)\n if (this.hasLogoSelectTarget) {\n this.updateURLParam(url, 'logo', this.logoSelectTarget.value)\n }\n\n this.galleryTarget.src = url.toString()\n }\n\n updateURLParam(url, param, value) {\n if (value && value !== \"Select\") {\n url.searchParams.set(param, value)\n } else {\n url.searchParams.delete(param)\n }\n }\n}\n", "// app/javascript/controllers/logo_selection_controller.js\nimport {Controller} from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [\"card\"]\n\n connect() {\n this.cardTargets.forEach(card => {\n const destroy = card.querySelector('.destroy-field');\n this.updateSelection(card, destroy.value);\n });\n }\n\n toggleSelection(event) {\n const card = event.currentTarget;\n const destroy = card.querySelector('.destroy-field');\n\n // Toggle the hidden field\n destroy.value = destroy.value === '1' ? '0' : '1';\n\n this.updateSelection(card, destroy.value);\n }\n\n updateSelection(card, value) {\n card.style.backgroundColor = (value === '0' ? '#d1ecf1' : '');\n }\n}\n", "/**!\n * Sortable 1.15.2\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.2\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = parent.parentNode);\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\";\n\n// Connects to data-controller=\"manage-gallery\"\nexport default class extends Controller {\n connect() {\n this.initializeSortable();\n }\n\n initializeSortable() {\n this.sortable = new Sortable(this.element, {\n group: 'gallery',\n handle: '.panel',\n animation: 150,\n onEnd: (evt) => {\n const items = this.element.querySelectorAll('.sortable-item');\n items.forEach((item, index) => {\n item.querySelector('.gallery-order').value = index;\n });\n }\n });\n\n // Adjust cursor style on mouse down and up\n this.setupCursorHandlers();\n }\n\n removeImageFromGallery(event) {\n event.preventDefault();\n\n // Assuming the button has a data-action that calls this method\n const imageId = event.currentTarget.dataset.imageId;\n\n // Hide the image panel\n const imagePanel = document.getElementById('image-panel-' + imageId);\n if (imagePanel) {\n imagePanel.style.display = 'none';\n }\n\n // Set the destroy value\n const destroyInput = document.getElementById('product-gallery-destroy-' + imageId);\n if (destroyInput) {\n destroyInput.value = 'true';\n }\n }\n\n // private\n\n setupCursorHandlers() {\n const panels = this.element.querySelectorAll('.panel');\n panels.forEach(panel => {\n panel.addEventListener('mousedown', () => {\n panel.style.cursor = 'move';\n });\n panel.addEventListener('mouseup', () => {\n panel.style.cursor = 'auto';\n });\n });\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"parent-click\"\nexport default class extends Controller {\n static targets = [ 'link' ]\n\n click(e) {\n // Make sure the target element isn't a link or a button\n if (!e.target.hasAttribute('href')) {\n this.linkTarget.click()\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"personalization-warning\"\nexport default class extends Controller {\n static targets = [ \"personalizations\" ]\n\n warn(event) {\n let personalizationsSelected = this.personalizationsTargets.some((personalization) => {\n return personalization.checked;\n });\n\n if (!personalizationsSelected && this.personalizationsTargets.length > 0) {\n if (confirm('Are you sure you do not want to personalize any of your items?')) {\n return true\n } else {\n event.preventDefault();\n event.stopImmediatePropagation();\n return false\n }\n }\n }\n}\n", "import {Controller} from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"background\", \"overlay\", \"logoXPosition\", \"logoYPosition\", \"scale\"]\n\n connect() {\n this.dragging = false;\n\n // Apply initial position and scale\n this.updateOverlayPosition();\n this.updateOverlaySize();\n\n this.overlayTarget.addEventListener(\"mousedown\", this.startDrag.bind(this));\n document.addEventListener(\"mousemove\", this.drag.bind(this));\n document.addEventListener(\"mouseup\", this.endDrag.bind(this));\n }\n\n updateOverlayPosition() {\n const xPercent = parseFloat(this.logoXPositionTarget.value) || 50;\n const yPercent = parseFloat(this.logoYPositionTarget.value) || 50;\n\n this.overlayTarget.style.left = `${xPercent}%`;\n this.overlayTarget.style.top = `${yPercent}%`;\n this.overlayTarget.style.transform = `translate(-50%, -50%)`; // Keep transform for centering\n }\n\n updateOverlaySize() {\n const scalePercentage = parseFloat(this.scaleTarget.value) || 100;\n const originalWidth = parseFloat(this.overlayTarget.dataset.originalWidth);\n const originalHeight = parseFloat(this.overlayTarget.dataset.originalHeight);\n\n const scaledWidth = (originalWidth * scalePercentage / 100.0).toFixed(2);\n const scaledHeight = (originalHeight * scalePercentage / 100.0).toFixed(2);\n\n this.overlayTarget.style.width = `${scaledWidth}px`;\n this.overlayTarget.style.height = `${scaledHeight}px`;\n }\n\n startDrag(event) {\n event.preventDefault();\n this.dragging = true;\n this.initialX = event.clientX;\n this.initialY = event.clientY;\n }\n\n drag(event) {\n if (!this.dragging) return;\n\n const dx = event.clientX - this.initialX;\n const dy = event.clientY - this.initialY;\n\n // Calculate the new position\n const currentLeft = parseFloat(this.overlayTarget.style.left);\n const currentTop = parseFloat(this.overlayTarget.style.top);\n\n this.overlayTarget.style.left = `${currentLeft + dx}px`;\n this.overlayTarget.style.top = `${currentTop + dy}px`;\n\n // Update initial position\n this.initialX = event.clientX;\n this.initialY = event.clientY;\n }\n\n endDrag() {\n if (!this.dragging) return;\n\n this.dragging = false;\n\n const rect = this.backgroundTarget.getBoundingClientRect();\n const overlayRect = this.overlayTarget.getBoundingClientRect();\n\n // Convert the new position to percentages relative to the background\n const xPercent = ((overlayRect.left + overlayRect.width / 2 - rect.left) / rect.width) * 100;\n const yPercent = ((overlayRect.top + overlayRect.height / 2 - rect.top) / rect.height) * 100;\n\n this.logoXPositionTarget.value = xPercent;\n this.logoYPositionTarget.value = yPercent;\n }\n}\n", "import {Controller} from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"canvas\", \"topLeftX\", \"topLeftY\", \"bottomRightX\", \"bottomRightY\"]\n\n connect() {\n this.ctx = this.canvasTarget.getContext('2d');\n\n const topLeftX = parseInt(this.topLeftXTarget.value);\n const topLeftY = parseInt(this.topLeftYTarget.value);\n const bottomRightX = parseInt(this.bottomRightXTarget.value);\n const bottomRightY = parseInt(this.bottomRightYTarget.value);\n\n this.rect = {\n x: topLeftX,\n y: topLeftY,\n w: bottomRightX - topLeftX,\n h: bottomRightY - topLeftY\n }\n\n this.handlesSize = 8;\n this.currentHandle = null;\n this.drag = false;\n this.isDraggingRectangle = false;\n\n this.canvasTarget.addEventListener('mousedown', this.mouseDown.bind(this), false);\n this.canvasTarget.addEventListener('mouseup', this.mouseUp.bind(this), false);\n this.canvasTarget.addEventListener('mousemove', this.mouseMove.bind(this), false);\n\n this.draw();\n this.updatePositionValues();\n }\n\n point(x, y) {\n return {x: x, y: y};\n }\n\n dist(p1, p2) {\n return Math.sqrt((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2);\n }\n\n getHandle(mouse) {\n const {x, y, w, h} = this.rect;\n if (this.dist(mouse, this.point(x, y)) <= this.handlesSize) return 'topleft';\n if (this.dist(mouse, this.point(x + w, y)) <= this.handlesSize) return 'topright';\n if (this.dist(mouse, this.point(x, y + h)) <= this.handlesSize) return 'bottomleft';\n if (this.dist(mouse, this.point(x + w, y + h)) <= this.handlesSize) return 'bottomright';\n return null;\n }\n\n isMouseInRectangle(mouse) {\n const {x, y, w, h} = this.rect;\n return mouse.x > x && mouse.x < x + w && mouse.y > y && mouse.y < y + h;\n }\n\n mouseDown(e) {\n const mousePos = this.point(e.offsetX, e.offsetY);\n this.currentHandle = this.getHandle(mousePos);\n\n if (this.currentHandle) {\n this.drag = true;\n } else if (this.isMouseInRectangle(mousePos)) {\n this.isDraggingRectangle = true;\n this.initialX = mousePos.x;\n this.initialY = mousePos.y;\n }\n\n this.draw();\n }\n\n mouseUp() {\n this.drag = false;\n this.isDraggingRectangle = false;\n this.currentHandle = null;\n this.updatePositionValues(); // Update the hidden input fields\n this.draw();\n }\n\n mouseMove(e) {\n const mousePos = this.point(e.offsetX, e.offsetY);\n\n if (!this.drag && !this.isDraggingRectangle) {\n this.currentHandle = this.getHandle(mousePos);\n }\n\n if (this.isDraggingRectangle) {\n const dx = mousePos.x - this.initialX;\n const dy = mousePos.y - this.initialY;\n\n this.rect.x = Math.max(0, Math.min(this.rect.x + dx, this.canvasTarget.width - this.rect.w));\n this.rect.y = Math.max(0, Math.min(this.rect.y + dy, this.canvasTarget.height - this.rect.h));\n\n this.initialX = mousePos.x;\n this.initialY = mousePos.y;\n\n this.draw();\n } else if (this.drag && this.currentHandle) {\n switch (this.currentHandle) {\n case 'topleft':\n const newX1 = Math.max(0, mousePos.x);\n const newY1 = Math.max(0, mousePos.y);\n this.rect.w += this.rect.x - newX1;\n this.rect.h += this.rect.y - newY1;\n this.rect.x = newX1;\n this.rect.y = newY1;\n break;\n case 'topright':\n const newY2 = Math.max(0, mousePos.y);\n this.rect.w = Math.min(mousePos.x, this.canvasTarget.width) - this.rect.x;\n this.rect.h += this.rect.y - newY2;\n this.rect.y = newY2;\n break;\n case 'bottomleft':\n const newX3 = Math.max(0, mousePos.x);\n this.rect.w += this.rect.x - newX3;\n this.rect.x = newX3;\n this.rect.h = Math.min(mousePos.y, this.canvasTarget.height) - this.rect.y;\n break;\n case 'bottomright':\n this.rect.w = Math.min(mousePos.x, this.canvasTarget.width) - this.rect.x;\n this.rect.h = Math.min(mousePos.y, this.canvasTarget.height) - this.rect.y;\n break;\n }\n this.draw();\n } else {\n this.draw(); // Redraw to update handle highlights\n }\n }\n\n draw() {\n const {x, y, w, h} = this.rect;\n this.ctx.clearRect(0, 0, this.canvasTarget.width, this.canvasTarget.height);\n this.ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';\n this.ctx.fillRect(x, y, w, h);\n\n // Draw handles\n this.drawHandle(x, y, 'topleft');\n this.drawHandle(x + w, y, 'topright');\n this.drawHandle(x, y + h, 'bottomleft');\n this.drawHandle(x + w, y + h, 'bottomright');\n }\n\n drawHandle(x, y, handle) {\n if (this.currentHandle === handle) {\n this.ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; // Match the rectangle color\n this.ctx.beginPath();\n this.ctx.arc(x, y, this.handlesSize, 0, 2 * Math.PI);\n this.ctx.fill();\n }\n }\n\n updatePositionValues() {\n this.topLeftXTarget.value = this.rect.x;\n this.topLeftYTarget.value = this.rect.y;\n this.bottomRightXTarget.value = this.rect.x + this.rect.w;\n this.bottomRightYTarget.value = this.rect.y + this.rect.h;\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"search\"\nexport default class extends Controller {\n static targets = [\"row\"];\n\n filter(event) {\n const searchText = event.target.value.toLowerCase();\n\n this.rowTargets.forEach((row) => {\n const isMatch = Array.from(row.cells).some(cell =>\n cell.textContent.toLowerCase().includes(searchText));\n row.style.display = isMatch ? \"\" : \"none\";\n });\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Modal } from \"bootstrap\"\n\n// Connects to data-controller=\"show-modal\"\nexport default class extends Controller {\n static targets = [ \"modal\" ]\n\n connect() {\n this.modalTarget.addEventListener('hidden.bs.modal', this.modalHidden.bind(this));\n\n new Modal(this.modalTarget).show()\n }\n\n // Avoid modal re-appearing if the user clicks the browser's back button\n modalHidden() {\n this.modalTarget.remove()\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"show-shipping\"\nexport default class extends Controller {\n static targets = [ \"radio\", \"questions\", \"fields\" ]\n\n connect() {\n this.toggle();\n }\n\n toggle() {\n if (this.hasRadioTarget) {\n if (this.radioTarget.checked) {\n this.questionsTarget.classList.remove(\"d-none\");\n\n this.fieldsTargets.forEach((field) => {\n field.required = true;\n });\n } else {\n this.questionsTarget.classList.add(\"d-none\");\n\n this.fieldsTargets.forEach((field) => {\n field.required = false;\n });\n }\n // Allow other controllers to react to this event\n this.dispatch(\"toggle\")\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport Sortable from \"sortablejs\"\n\n// Connects to data-controller=\"sortable-form\"\nexport default class extends Controller {\n static targets = [\"form\", \"sortable\", \"position\"];\n\n connect() {\n this.initSortable();\n }\n\n initSortable() {\n new Sortable(this.sortableTarget, {\n animation: 150,\n handle: '.handle', // Assuming you're using '.handle' class for drag handle\n onEnd: this.onSortEnd.bind(this),\n });\n }\n\n onSortEnd(event) {\n this.formTarget.requestSubmit();\n }\n}\n", "var l=(e,r,t)=>new Promise((n,i)=>{var d=o=>{try{c(t.next(o))}catch(a){i(a)}},m=o=>{try{c(t.throw(o))}catch(a){i(a)}},c=o=>o.done?n(o.value):Promise.resolve(o.value).then(d,m);c((t=t.apply(e,r)).next())});function f(e){return document.querySelector(`script[src=\"${e}\"]`)}function S(e){let r=document.head||document.body;if(!r)throw new Error(\"Square.js requires a <body> or <head> element.\");let t=document.createElement(\"script\");return t.src=e,r.appendChild(t),t}var s=null;function p(e){return s!==null||(s=new Promise((r,t)=>{if(typeof window==\"undefined\"){r(null);return}if(window.Square){r(window.Square);return}try{let n=f(e);n||(n=S(e)),n.addEventListener(\"load\",()=>{window.Square?r(window.Square):t(new Error(\"Square.js failed to load properly.\"))}),n.addEventListener(\"error\",()=>{t(new Error(\"Error occurred while loading Square.js\"))})}catch(n){t(n)}})),s}var w=\"v1\",u=class extends Error{constructor(r=\"The Payment 'applicationId' option is not in the correct format.\"){super(r);this.name=\"InvalidApplicationIdError\",Object.setPrototypeOf(this,u.prototype)}};function q(e){let r=\"\";if(e.startsWith(\"sq0idp-\")&&(r=\"https://web.squarecdn.com/\"),e.startsWith(\"sandbox-sq0idb-\")&&(r=\"https://sandbox.web.squarecdn.com/\"),r.length===0)throw new u;return r+=`${w}/square.js`,r}function E(e,r,t){return l(this,null,function*(){let n=(t==null?void 0:t.scriptSrc)!==void 0?t.scriptSrc:q(e),i=yield p(n);return i===null?null:i.payments(e,r)})}export{E as payments};\n", "import { Controller, StringMapObserver } from \"@hotwired/stimulus\"\nimport * as Square from \"@square/web-sdk\"\n\n// Connects to data-controller=\"square-payments\"\nexport default class extends Controller {\n static targets = [ \"card\", \"error\", \"submitButton\", \"overlay\", \"recaptchaV3\", \"recaptchaV2\" ]\n static values = {\n applicationId: String,\n locationId: String,\n submitPaymentUrl: String,\n orderId: String,\n verificationAmount: String,\n verificationAddressLines: String,\n verificationCity: String,\n verificationEmail: String,\n verificationPhoneNumber: String,\n verificationFamilyName: String,\n verificationGivenName: String,\n verificationPostalCode: String,\n verificationState: String\n }\n\n async connect() {\n this.squarePaymentsClient = await Square.payments(this.applicationIdValue, this.locationIdValue);\n this.card = await this.squarePaymentsClient.card();\n this.refreshIdempotencyKey();\n await this.card.attach(this.cardTarget);\n }\n\n async submit(event) {\n this.submitButtonTarget.disabled = true\n this.overlayTarget.classList.remove('d-none')\n event.preventDefault()\n const tokenizeResult = await this.card.tokenize()\n if (tokenizeResult.status === 'OK') {\n const verificationDetails = {\n amount: this.verificationAmountValue,\n billingContact: {\n givenName: this.verificationGivenNameValue,\n familyName: this.verificationFamilyNameValue,\n email: this.verificationEmailValue,\n phone: this.verificationPhoneNumberValue,\n addressLines: [this.verificationAddressLinesValue],\n city: this.verificationCityValue,\n state: this.verificationStateValue,\n postalCode: this.verificationPostalCodeValue,\n },\n intent: 'CHARGE',\n currencyCode: 'USD',\n };\n try {\n const verificationResult = await this.squarePaymentsClient.verifyBuyer(\n tokenizeResult.token,\n verificationDetails\n )\n this.submitPayment(tokenizeResult.token, verificationResult.token)\n } catch {\n this.handleErrorResponse()\n }\n } else {\n this.handleErrorResponse(tokenizeResult)\n }\n }\n\n async submitPayment(payment_token, verification_token) {\n const submitPaymentResponse = await fetch(this.submitPaymentUrlValue, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]')?.getAttribute('content')\n },\n body: JSON.stringify({\n \"cart\": {\n \"token\": payment_token,\n \"verification_token\": verification_token,\n \"order_id\": this.orderIdValue,\n \"idempotency_key\": this.idempotencyKey\n },\n \"g-recaptcha-v3-response\": this.recaptchaV3Target?.querySelector('#g-recaptcha-response-data-submit')?.value,\n \"g-recaptcha-v2-response\": this.recaptchaV2Target?.querySelector('.g-recaptcha-response')?.value\n })\n })\n if (submitPaymentResponse.ok) {\n const response = await submitPaymentResponse.json()\n\n window.location.href = response.redirect_path\n }\n else {\n this.handleErrorResponse(submitPaymentResponse)\n }\n }\n\n async handleErrorResponse(response) {\n const genericError = \"An error occurred while processing your payment. Please validate all fields and try again. If the problem persists, please contact support.\";\n\n if (typeof grecaptcha !== 'undefined') {\n // Reset both v3 and v2 reCAPTCHA. Note that Resetting v3 captcha doesn't actually do anything, however the ordering is inconsistent and therefore both have to be reset.\n grecaptcha.reset();\n grecaptcha.reset(1);\n\n this.recaptchaV2Target.classList.remove('d-none');\n }\n\n try {\n // Try to extract the error message from the response body\n const errorData = await response.json();\n this.errorTarget.textContent = errorData.error || genericError;\n } catch (e) {\n // If the response is not JSON or another error occurs\n this.errorTarget.textContent = genericError;\n }\n\n this.errorTarget.classList.remove('d-none');\n this.refreshIdempotencyKey();\n this.submitButtonTarget.disabled = false;\n this.overlayTarget.classList.add('d-none');\n }\n\n refreshIdempotencyKey() {\n this.idempotencyKey = self.crypto.randomUUID();\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nconst moneyFormatter = new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD'\n});\n\n// Connects to data-controller=\"subtotal\"\nexport default class extends Controller {\n static targets = [ \"personalizations\", \"subtotal\" ]\n static values = { itemsTotal: Number }\n\n connect() {\n this.update();\n }\n\n update() {\n let subtotal = this.itemsTotalValue;\n\n this.personalizationsTargets.forEach((personalization) => {\n if (personalization.checked) {\n subtotal += Number(personalization.dataset.priceCents.replace(/_/g, \"\"));\n }\n });\n\n this.subtotalTarget.innerHTML = moneyFormatter.format(subtotal / 100);\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"input\", \"button\", \"radio\" ]\n\n connect() {\n // Toggle checkout needs to run after the form has stabilized. Otherwise it\n // will run before the form has been fully loaded and will disable the button\n setTimeout(() => {\n this.toggle();\n }, 0);\n }\n\n // This handles both the 'Cart' and 'Checkout' enable/disable buttons.\n toggle() {\n let inputResult = this.inputTargets.some((input) => {\n return this.isVisible(input) && (!input.disabled && (input.value == \"\" || input.selectedIndex == 0));\n });\n\n let radioResult = false;\n if (this.hasRadioTarget) {\n let radioGroups = {};\n this.radioTargets.forEach((radio) => {\n (radioGroups[radio.name] = radioGroups[radio.name] || []).push(radio);\n });\n radioResult = Object.values(radioGroups).some(radioTargets => {\n return !radioTargets.some(radio => radio.checked);\n });\n }\n this.buttonTarget.disabled = inputResult || radioResult;\n }\n\n\n // private\n\n isVisible(elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n }\n}\n", "import {Controller} from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"toggle-personalization\"\nexport default class extends Controller {\n static targets = [\"checkbox\", \"input\", \"button\"]\n\n // This executes after the form-state controller restores any locally stored form values.\n connect() {\n this.toggle();\n }\n\n toggle() {\n if (!this.hasCheckboxTarget) return;\n\n if (this.checkboxTarget.checked) {\n this.inputTarget.disabled = false;\n this.updateButtonDisabled(false);\n } else {\n this.inputTarget.disabled = true;\n this.updateButtonDisabled(true);\n }\n }\n\n updateButtonDisabled(bool) {\n if (!this.hasButtonTarget) return;\n\n this.buttonTarget.disabled = bool;\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\nimport { Tooltip } from \"bootstrap\"\n\n// Connects to data-controller=\"tooltip\"\nexport default class extends Controller {\n connect() {\n new Tooltip(this.element);\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\"\n\n// Connects to data-controller=\"upcase-fields\"\nexport default class extends Controller {\n static targets = [\"input\"]\n\n upcase() {\n this.inputTargets.forEach(input => {\n if (input.classList.contains('text-uppercase')) {\n input.value = input.value.toUpperCase();\n }\n });\n }\n}\n", "// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\"\n\nimport Admin__DiscountCodesController from \"./admin/discount_codes_controller\"\napplication.register(\"admin--discount-codes\", Admin__DiscountCodesController)\n\nimport AnchorLinkController from \"./anchor_link_controller\"\napplication.register(\"anchor-link\", AnchorLinkController)\n\nimport CaseConsiderationController from \"./case_consideration_controller\"\napplication.register(\"case-consideration\", CaseConsiderationController)\n\nimport CheckVisibilityController from \"./check_visibility_controller\"\napplication.register(\"check-visibility\", CheckVisibilityController)\n\nimport DataTableController from \"./data_table_controller\"\napplication.register(\"data-table\", DataTableController)\n\nimport FormStateController from \"./form_state_controller\"\napplication.register(\"form-state\", FormStateController)\n\nimport FormSubmitController from \"./form_submit_controller\"\napplication.register(\"form-submit\", FormSubmitController)\n\nimport GalleryController from \"./gallery_controller\"\napplication.register(\"gallery\", GalleryController)\n\nimport GalleryUpdateController from \"./gallery_update_controller\"\napplication.register(\"gallery-update\", GalleryUpdateController)\n\nimport LogoSelectionController from \"./logo_selection_controller\"\napplication.register(\"logo-selection\", LogoSelectionController)\n\nimport ManageGalleryController from \"./manage_gallery_controller\"\napplication.register(\"manage-gallery\", ManageGalleryController)\n\nimport ParentClickController from \"./parent_click_controller\"\napplication.register(\"parent-click\", ParentClickController)\n\nimport PersonalizationWarningController from \"./personalization_warning_controller\"\napplication.register(\"personalization-warning\", PersonalizationWarningController)\n\nimport PositionPickerController from \"./position_picker_controller\"\napplication.register(\"position-picker\", PositionPickerController)\n\nimport ResizableRectangleController from \"./resizable_rectangle_controller\"\napplication.register(\"resizable-rectangle\", ResizableRectangleController)\n\nimport SearchController from \"./search_controller\"\napplication.register(\"search\", SearchController)\n\nimport ShowModalController from \"./show_modal_controller\"\napplication.register(\"show-modal\", ShowModalController)\n\nimport ShowShippingController from \"./show_shipping_controller\"\napplication.register(\"show-shipping\", ShowShippingController)\n\nimport SortableFormController from \"./sortable_form_controller\"\napplication.register(\"sortable-form\", SortableFormController)\n\nimport SquarePaymentsController from \"./square_payments_controller\"\napplication.register(\"square-payments\", SquarePaymentsController)\n\nimport SubtotalController from \"./subtotal_controller\"\napplication.register(\"subtotal\", SubtotalController)\n\nimport ToggleCheckoutController from \"./toggle_checkout_controller\"\napplication.register(\"toggle-checkout\", ToggleCheckoutController)\n\nimport TogglePersonalizationController from \"./toggle_personalization_controller\"\napplication.register(\"toggle-personalization\", TogglePersonalizationController)\n\nimport TooltipController from \"./tooltip_controller\"\napplication.register(\"tooltip\", TooltipController)\n\nimport UpcaseFieldsController from \"./upcase_fields_controller\"\napplication.register(\"upcase-fields\", UpcaseFieldsController)\n", "/*!\nTurbo 8.0.3\nCopyright \u00A9 2024 37signals LLC\n */\n/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Javan Makhmali\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function (prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function (submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form ||\n raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\n\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return candidate?.type == \"submit\" ? candidate : null\n}\n\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n\n(function () {\n if (\"submitter\" in Event.prototype) return\n\n let prototype = window.Event.prototype;\n // Certain versions of Safari 15 have a bug where they won't\n // populate the submitter. This hurts TurboDrive's enable/disable detection.\n // See https://bugs.webkit.org/show_bug.cgi?id=229660\n if (\"SubmitEvent\" in window) {\n const prototypeOfSubmitEvent = window.SubmitEvent.prototype;\n\n if (/Apple Computer/.test(navigator.vendor) && !(\"submitter\" in prototypeOfSubmitEvent)) {\n prototype = prototypeOfSubmitEvent;\n } else {\n return // polyfill not needed\n }\n }\n\n addEventListener(\"click\", clickCaptured, true);\n\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target)\n }\n }\n });\n})();\n\nconst FrameLoadingStyle = {\n eager: \"eager\",\n lazy: \"lazy\"\n};\n\n/**\n * Contains a fragment of HTML which is updated based on navigation within\n * it (e.g. via links or form submissions).\n *\n * @customElement turbo-frame\n * @example\n * <turbo-frame id=\"messages\">\n * <a href=\"/messages/expanded\">\n * Show all expanded messages in this frame.\n * </a>\n *\n * <form action=\"/messages\">\n * Show response from this form within this frame.\n * </form>\n * </turbo-frame>\n */\nclass FrameElement extends HTMLElement {\n static delegateConstructor = undefined\n\n loaded = Promise.resolve()\n\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"]\n }\n\n constructor() {\n super();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n\n connectedCallback() {\n this.delegate.connect();\n }\n\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n\n reload() {\n return this.delegate.sourceURLReloaded()\n }\n\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n } else if (name == \"complete\") {\n this.delegate.completeChanged();\n } else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n } else {\n this.delegate.disabledChanged();\n }\n }\n\n /**\n * Gets the URL to lazily load source HTML from\n */\n get src() {\n return this.getAttribute(\"src\")\n }\n\n /**\n * Sets the URL to lazily load source HTML from\n */\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n } else {\n this.removeAttribute(\"src\");\n }\n }\n\n /**\n * Gets the refresh mode for the frame.\n */\n get refresh() {\n return this.getAttribute(\"refresh\")\n }\n\n /**\n * Sets the refresh mode for the frame.\n */\n set refresh(value) {\n if (value) {\n this.setAttribute(\"refresh\", value);\n } else {\n this.removeAttribute(\"refresh\");\n }\n }\n\n /**\n * Determines if the element is loading\n */\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\")\n }\n\n /**\n * Sets the value of if the element is loading\n */\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n } else {\n this.removeAttribute(\"loading\");\n }\n }\n\n /**\n * Gets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n get disabled() {\n return this.hasAttribute(\"disabled\")\n }\n\n /**\n * Sets the disabled state of the frame.\n *\n * If disabled, no requests will be intercepted by the frame.\n */\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n } else {\n this.removeAttribute(\"disabled\");\n }\n }\n\n /**\n * Gets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\")\n }\n\n /**\n * Sets the autoscroll state of the frame.\n *\n * If true, the frame will be scrolled into view automatically on update.\n */\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n } else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n\n /**\n * Determines if the element has finished loading\n */\n get complete() {\n return !this.delegate.isLoading\n }\n\n /**\n * Gets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isActive() {\n return this.ownerDocument === document && !this.isPreview\n }\n\n /**\n * Sets the active state of the frame.\n *\n * If inactive, source changes will not be observed.\n */\n get isPreview() {\n return this.ownerDocument?.documentElement?.hasAttribute(\"data-turbo-preview\")\n }\n}\n\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy\n default:\n return FrameLoadingStyle.eager\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI)\n}\n\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1)\n // eslint-disable-next-line no-cond-assign\n } else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1]\n }\n}\n\nfunction getAction$1(form, submitter) {\n const action = submitter?.getAttribute(\"formaction\") || form.getAttribute(\"action\") || form.action;\n\n return expandURL(action)\n}\n\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\"\n}\n\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/)\n}\n\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix)\n}\n\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location)\n}\n\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href\n}\n\nfunction toCacheKey(url) {\n return getRequestURL(url)\n}\n\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href\n}\n\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1)\n}\n\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0]\n}\n\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname)\n}\n\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\"\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n\n get succeeded() {\n return this.response.ok\n }\n\n get failed() {\n return !this.succeeded\n }\n\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499\n }\n\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599\n }\n\n get redirected() {\n return this.response.redirected\n }\n\n get location() {\n return expandURL(this.response.url)\n }\n\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/)\n }\n\n get statusCode() {\n return this.response.status\n }\n\n get contentType() {\n return this.header(\"Content-Type\")\n }\n\n get responseText() {\n return this.response.clone().text()\n }\n\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text()\n } else {\n return Promise.resolve(undefined)\n }\n }\n\n header(name) {\n return this.response.headers.get(name)\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element\n } else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement\n }\n}\n\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\n\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content\n}\n\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail\n });\n\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n } else {\n document.documentElement.dispatchEvent(event);\n }\n\n return event\n}\n\nfunction nextRepaint() {\n if (document.visibilityState === \"hidden\") {\n return nextEventLoopTick()\n } else {\n return nextAnimationFrame()\n }\n}\n\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()))\n}\n\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0))\n}\n\nfunction nextMicrotask() {\n return Promise.resolve()\n}\n\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\")\n}\n\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\")\n}\n\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value\n }, \"\")\n}\n\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\"\n } else if (i == 14) {\n return \"4\"\n } else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16)\n } else {\n return Math.floor(Math.random() * 15).toString(16)\n }\n })\n .join(\"\")\n}\n\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element?.getAttribute(attributeName))) {\n if (typeof value == \"string\") return value\n }\n\n return null\n}\n\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName))\n}\n\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\n\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n\n element.removeAttribute(\"aria-busy\");\n }\n}\n\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n })\n}\n\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n}\n\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\"\n}\n\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n\n return isAction(action) ? action : null\n}\n\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`)\n}\n\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content\n}\n\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n\n document.head.appendChild(element);\n }\n\n element.setAttribute(\"content\", content);\n\n return element\n}\n\nfunction findClosestRecursively(element, selector) {\n if (element instanceof Element) {\n return (\n element.closest(selector) || findClosestRecursively(element.assignedSlot || element.getRootNode()?.host, selector)\n )\n }\n}\n\nfunction elementIsFocusable(element) {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n\n return !!element && element.closest(inertDisabledOrHidden) == null && typeof element.focus == \"function\"\n}\n\nfunction queryAutofocusableElement(elementOrDocumentFragment) {\n return Array.from(elementOrDocumentFragment.querySelectorAll(\"[autofocus]\")).find(elementIsFocusable)\n}\n\nasync function around(callback, reader) {\n const before = reader();\n\n callback();\n\n await nextAnimationFrame();\n\n const after = reader();\n\n return [before, after]\n}\n\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n }\n\n return true\n}\n\nfunction findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\")\n}\n\nfunction getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\")\n}\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n\n return (...args) => {\n const callback = () => fn.apply(this, args);\n clearTimeout(timeoutId);\n timeoutId = setTimeout(callback, delay);\n }\n}\n\nclass LimitedSet extends Set {\n constructor(maxSize) {\n super();\n this.maxSize = maxSize;\n }\n\n add(value) {\n if (this.size >= this.maxSize) {\n const iterator = this.values();\n const oldestValue = iterator.next().value;\n this.delete(oldestValue);\n }\n super.add(value);\n }\n}\n\nconst recentRequests = new LimitedSet(20);\n\nconst nativeFetch = window.fetch;\n\nfunction fetchWithTurboHeaders(url, options = {}) {\n const modifiedHeaders = new Headers(options.headers || {});\n const requestUID = uuid();\n recentRequests.add(requestUID);\n modifiedHeaders.append(\"X-Turbo-Request-Id\", requestUID);\n\n return nativeFetch(url, {\n ...options,\n headers: modifiedHeaders\n })\n}\n\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get\n case \"post\":\n return FetchMethod.post\n case \"put\":\n return FetchMethod.put\n case \"patch\":\n return FetchMethod.patch\n case \"delete\":\n return FetchMethod.delete\n }\n}\n\nconst FetchMethod = {\n get: \"get\",\n post: \"post\",\n put: \"put\",\n patch: \"patch\",\n delete: \"delete\"\n};\n\nfunction fetchEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FetchEnctype.multipart:\n return FetchEnctype.multipart\n case FetchEnctype.plain:\n return FetchEnctype.plain\n default:\n return FetchEnctype.urlEncoded\n }\n}\n\nconst FetchEnctype = {\n urlEncoded: \"application/x-www-form-urlencoded\",\n multipart: \"multipart/form-data\",\n plain: \"text/plain\"\n};\n\nclass FetchRequest {\n abortController = new AbortController()\n #resolveRequestPromise = (_value) => {}\n\n constructor(delegate, method, location, requestBody = new URLSearchParams(), target = null, enctype = FetchEnctype.urlEncoded) {\n const [url, body] = buildResourceAndBody(expandURL(location), method, requestBody, enctype);\n\n this.delegate = delegate;\n this.url = url;\n this.target = target;\n this.fetchOptions = {\n credentials: \"same-origin\",\n redirect: \"follow\",\n method: method,\n headers: { ...this.defaultHeaders },\n body: body,\n signal: this.abortSignal,\n referrer: this.delegate.referrer?.href\n };\n this.enctype = enctype;\n }\n\n get method() {\n return this.fetchOptions.method\n }\n\n set method(value) {\n const fetchBody = this.isSafe ? this.url.searchParams : this.fetchOptions.body || new FormData();\n const fetchMethod = fetchMethodFromString(value) || FetchMethod.get;\n\n this.url.search = \"\";\n\n const [url, body] = buildResourceAndBody(this.url, fetchMethod, fetchBody, this.enctype);\n\n this.url = url;\n this.fetchOptions.body = body;\n this.fetchOptions.method = fetchMethod;\n }\n\n get headers() {\n return this.fetchOptions.headers\n }\n\n set headers(value) {\n this.fetchOptions.headers = value;\n }\n\n get body() {\n if (this.isSafe) {\n return this.url.searchParams\n } else {\n return this.fetchOptions.body\n }\n }\n\n set body(value) {\n this.fetchOptions.body = value;\n }\n\n get location() {\n return this.url\n }\n\n get params() {\n return this.url.searchParams\n }\n\n get entries() {\n return this.body ? Array.from(this.body.entries()) : []\n }\n\n cancel() {\n this.abortController.abort();\n }\n\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n const event = await this.#allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n\n if (event.detail.fetchRequest) {\n this.response = event.detail.fetchRequest.response;\n } else {\n this.response = fetchWithTurboHeaders(this.url.href, fetchOptions);\n }\n\n const response = await this.response;\n return await this.receive(response)\n } catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.#willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error\n }\n } finally {\n this.delegate.requestFinished(this);\n }\n }\n\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n } else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n } else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse\n }\n\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\"\n }\n }\n\n get isSafe() {\n return isSafe(this.method)\n }\n\n get abortSignal() {\n return this.abortController.signal\n }\n\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n\n async #allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.#resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.#resolveRequestPromise\n },\n target: this.target\n });\n this.url = event.detail.url;\n if (event.defaultPrevented) await requestInterception;\n\n return event\n }\n\n #willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error }\n });\n\n return !event.defaultPrevented\n }\n}\n\nfunction isSafe(fetchMethod) {\n return fetchMethodFromString(fetchMethod) == FetchMethod.get\n}\n\nfunction buildResourceAndBody(resource, method, requestBody, enctype) {\n const searchParams =\n Array.from(requestBody).length > 0 ? new URLSearchParams(entriesExcludingFiles(requestBody)) : resource.searchParams;\n\n if (isSafe(method)) {\n return [mergeIntoURLSearchParams(resource, searchParams), null]\n } else if (enctype == FetchEnctype.urlEncoded) {\n return [resource, searchParams]\n } else {\n return [resource, requestBody]\n }\n}\n\nfunction entriesExcludingFiles(requestBody) {\n const entries = [];\n\n for (const [name, value] of requestBody) {\n if (value instanceof File) continue\n else entries.push([name, value]);\n }\n\n return entries\n}\n\nfunction mergeIntoURLSearchParams(url, requestBody) {\n const searchParams = new URLSearchParams(entriesExcludingFiles(requestBody));\n\n url.search = searchParams.toString();\n\n return url\n}\n\nclass AppearanceObserver {\n started = false\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n\n intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry?.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static contentType = \"text/vnd.turbo-stream.html\"\n\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message))\n } else {\n return message\n }\n }\n\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\n\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n\n element.replaceWith(streamElement);\n }\n\n return fragment\n}\n\nconst PREFETCH_DELAY = 100;\n\nclass PrefetchCache {\n #prefetchTimeout = null\n #prefetched = null\n\n get(url) {\n if (this.#prefetched && this.#prefetched.url === url && this.#prefetched.expire > Date.now()) {\n return this.#prefetched.request\n }\n }\n\n setLater(url, request, ttl) {\n this.clear();\n\n this.#prefetchTimeout = setTimeout(() => {\n request.perform();\n this.set(url, request, ttl);\n this.#prefetchTimeout = null;\n }, PREFETCH_DELAY);\n }\n\n set(url, request, ttl) {\n this.#prefetched = { url, request, expire: new Date(new Date().getTime() + ttl) };\n }\n\n clear() {\n if (this.#prefetchTimeout) clearTimeout(this.#prefetchTimeout);\n this.#prefetched = null;\n }\n}\n\nconst cacheTtl = 10 * 1000;\nconst prefetchCache = new PrefetchCache();\n\nconst FormSubmissionState = {\n initialized: \"initialized\",\n requesting: \"requesting\",\n waiting: \"waiting\",\n receiving: \"receiving\",\n stopping: \"stopping\",\n stopped: \"stopped\"\n};\n\nclass FormSubmission {\n state = FormSubmissionState.initialized\n\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message))\n }\n\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n const method = getMethod(formElement, submitter);\n const action = getAction(getFormAction(formElement, submitter), method);\n const body = buildFormData(formElement, submitter);\n const enctype = getEnctype(formElement, submitter);\n\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.fetchRequest = new FetchRequest(this, method, action, body, formElement, enctype);\n this.mustRedirect = mustRedirect;\n }\n\n get method() {\n return this.fetchRequest.method\n }\n\n set method(value) {\n this.fetchRequest.method = value;\n }\n\n get action() {\n return this.fetchRequest.url.toString()\n }\n\n set action(value) {\n this.fetchRequest.url = expandURL(value);\n }\n\n get body() {\n return this.fetchRequest.body\n }\n\n get enctype() {\n return this.fetchRequest.enctype\n }\n\n get isSafe() {\n return this.fetchRequest.isSafe\n }\n\n get location() {\n return this.fetchRequest.url\n }\n\n // The submission process\n\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return\n }\n }\n\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform()\n }\n }\n\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n this.state = FormSubmissionState.waiting;\n this.submitter?.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n markAsBusy(this.formElement);\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this }\n });\n this.delegate.formSubmissionStarted(this);\n }\n\n requestPreventedHandlingResponse(request, response) {\n prefetchCache.clear();\n\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n return\n }\n\n prefetchCache.clear();\n\n if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n } else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n\n requestFinished(_request) {\n this.state = FormSubmissionState.stopped;\n this.submitter?.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n clearBusyState(this.formElement);\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: { formSubmission: this, ...this.result }\n });\n this.delegate.formSubmissionFinished(this);\n }\n\n // Private\n\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith) return\n\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText) return\n\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n } else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect\n }\n\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement)\n }\n\n get submitsWith() {\n return this.submitter?.getAttribute(\"data-turbo-submits-with\")\n }\n}\n\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter?.getAttribute(\"name\");\n const value = submitter?.getAttribute(\"value\");\n\n if (name) {\n formData.append(name, value || \"\");\n }\n\n return formData\n}\n\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined\n }\n }\n}\n\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected\n}\n\nfunction getFormAction(formElement, submitter) {\n const formElementAction = typeof formElement.action === \"string\" ? formElement.action : null;\n\n if (submitter?.hasAttribute(\"formaction\")) {\n return submitter.getAttribute(\"formaction\") || \"\"\n } else {\n return formElement.getAttribute(\"action\") || formElementAction || \"\"\n }\n}\n\nfunction getAction(formAction, fetchMethod) {\n const action = expandURL(formAction);\n\n if (isSafe(fetchMethod)) {\n action.search = \"\";\n }\n\n return action\n}\n\nfunction getMethod(formElement, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get\n}\n\nfunction getEnctype(formElement, submitter) {\n return fetchEnctypeFromString(submitter?.getAttribute(\"formenctype\") || formElement.enctype)\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n\n get activeElement() {\n return this.element.ownerDocument.activeElement\n }\n\n get children() {\n return [...this.element.children]\n }\n\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null\n }\n\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null\n }\n\n get isConnected() {\n return this.element.isConnected\n }\n\n get firstAutofocusableElement() {\n return queryAutofocusableElement(this.element)\n }\n\n get permanentElements() {\n return queryPermanentElementsAll(this.element)\n }\n\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id)\n }\n\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n\n return permanentElementMap\n }\n}\n\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`)\n}\n\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\")\n}\n\nclass FormSubmitObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n\n submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n }\n\n submitBubbled = (event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n\n if (\n form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)\n ) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n }\n}\n\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = submitter?.getAttribute(\"formmethod\") || form.getAttribute(\"method\");\n\n return method != \"dialog\"\n}\n\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if (submitter?.hasAttribute(\"formtarget\") || form.hasAttribute(\"target\")) {\n const target = submitter?.getAttribute(\"formtarget\") || form.target;\n\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement) return false\n }\n\n return true\n } else {\n return true\n }\n}\n\nclass View {\n #resolveRenderPromise = (_value) => {}\n #resolveInterceptionPromise = (_value) => {}\n\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n // Scrolling\n\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n } else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n\n scrollToElement(element) {\n element.scrollIntoView();\n }\n\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n } else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n\n get scrollRoot() {\n return window\n }\n\n // Rendering\n\n async render(renderer) {\n const { isPreview, shouldRender, willRender, newSnapshot: snapshot } = renderer;\n\n // A workaround to ignore tracked element mismatch reloads when performing\n // a promoted Visit from a frame navigation\n const shouldInvalidate = willRender;\n\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.#resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n\n const renderInterception = new Promise((resolve) => (this.#resolveInterceptionPromise = resolve));\n const options = { resume: this.#resolveInterceptionPromise, render: this.renderer.renderElement, renderMethod: this.renderer.renderMethod };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender) await renderInterception;\n\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview, this.renderer.renderMethod);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n } finally {\n delete this.renderer;\n this.#resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n } else if (shouldInvalidate) {\n this.invalidate(renderer.reloadReason);\n }\n }\n\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n } else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n\n markVisitDirection(direction) {\n this.element.setAttribute(\"data-turbo-visit-direction\", direction);\n }\n\n unmarkVisitDirection() {\n this.element.removeAttribute(\"data-turbo-visit-direction\");\n }\n\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n\n get snapshot() {\n return new Snapshot(this.element)\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.element = element;\n }\n\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n\n clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n } else {\n delete this.clickEvent;\n }\n }\n\n linkClicked = (event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n }\n\n willVisit = (_event) => {\n delete this.clickEvent;\n }\n\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element\n }\n}\n\nclass LinkClickObserver {\n started = false\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n\n clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n }\n\n clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n }\n\n clickEventIsSignificant(event) {\n return !(\n (event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey\n )\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n }\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return false\n }\n\n prefetchAndCacheRequestToLocation(link, location) {\n return\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, originalEvent) {\n return (\n this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n (link.hasAttribute(\"data-turbo-method\") || link.hasAttribute(\"data-turbo-stream\"))\n )\n }\n\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n\n const method = link.getAttribute(\"data-turbo-method\");\n if (method) form.setAttribute(\"method\", method);\n\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame) form.setAttribute(\"data-turbo-frame\", turboFrame);\n\n const turboAction = getVisitAction(link);\n if (turboAction) form.setAttribute(\"data-turbo-action\", turboAction);\n\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm) form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream) form.setAttribute(\"data-turbo-stream\", \"\");\n\n this.delegate.submittedFormLinkToLocation(link, location, form);\n\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder?.replaceWith(permanentElement);\n }\n\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id)\n }\n\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")]\n }\n}\n\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element\n}\n\nclass Renderer {\n #activeElement = null\n\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n\n get shouldRender() {\n return true\n }\n\n get reloadReason() {\n return\n }\n\n prepareToRender() {\n return\n }\n\n render() {\n // Abstract method\n }\n\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (element) {\n element.focus();\n }\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement) {\n if (this.#activeElement) return\n\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.#activeElement = this.currentSnapshot.activeElement;\n }\n }\n\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.#activeElement) && this.#activeElement instanceof HTMLElement) {\n this.#activeElement.focus();\n\n this.#activeElement = null;\n }\n }\n\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot\n }\n\n get currentElement() {\n return this.currentSnapshot.element\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)\n }\n\n get renderMethod() {\n return \"replace\"\n }\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n\n const frameElement = newElement;\n const sourceRange = frameElement.ownerDocument?.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n\n get shouldRender() {\n return true\n }\n\n async render() {\n await nextRepaint();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextRepaint();\n this.focusFirstAutofocusableElement();\n await nextRepaint();\n this.activateScriptElements();\n }\n\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true\n }\n }\n return false\n }\n\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\")\n }\n}\n\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value\n } else {\n return defaultValue\n }\n}\n\nclass ProgressBar {\n static animationDuration = 300 /*ms*/\n\n static get defaultCSS() {\n return unindent`\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `\n }\n\n hiding = false\n value = 0\n visible = false\n\n constructor() {\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n\n // Private\n\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n\n trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n }\n\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element\n }\n\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element\n }\n\n get cspNonce() {\n return getMetaContent(\"csp-nonce\")\n }\n}\n\nclass HeadSnapshot extends Snapshot {\n detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details =\n outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: []\n };\n return {\n ...result,\n [outerHTML]: {\n ...details,\n elements: [...details.elements, element]\n }\n }\n }, {})\n\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\")\n }\n\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot)\n }\n\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot)\n }\n\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element)\n }\n\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements]\n } else if (elements.length > 1) {\n return [...result, ...elements.slice(1)]\n } else {\n return result\n }\n }, [])\n }\n\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null\n }\n\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const {\n elements: [element]\n } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result\n }, undefined | undefined)\n }\n}\n\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\"\n } else if (elementIsStylesheet(element)) {\n return \"stylesheet\"\n }\n}\n\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\"\n}\n\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\"\n}\n\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\"\n}\n\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\")\n}\n\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name\n}\n\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n\n return element\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html))\n }\n\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument)\n }\n\n static fromDocument({ documentElement, body, head }) {\n return new this(documentElement, body, new HeadSnapshot(head))\n }\n\n constructor(documentElement, body, headSnapshot) {\n super(body);\n this.documentElement = documentElement;\n this.headSnapshot = headSnapshot;\n }\n\n clone() {\n const clonedElement = this.element.cloneNode(true);\n\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions) option.selected = false;\n for (const option of source.selectedOptions) clone.options[option.index].selected = true;\n }\n\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n\n return new PageSnapshot(this.documentElement, clonedElement, this.headSnapshot)\n }\n\n get lang() {\n return this.documentElement.getAttribute(\"lang\")\n }\n\n get headElement() {\n return this.headSnapshot.element\n }\n\n get rootLocation() {\n const root = this.getSetting(\"root\") ?? \"/\";\n return expandURL(root)\n }\n\n get cacheControlValue() {\n return this.getSetting(\"cache-control\")\n }\n\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\"\n }\n\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\"\n }\n\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\"\n }\n\n get prefersViewTransitions() {\n return this.headSnapshot.getMetaValue(\"view-transition\") === \"same-origin\"\n }\n\n get shouldMorphPage() {\n return this.getSetting(\"refresh-method\") === \"morph\"\n }\n\n get shouldPreserveScrollPosition() {\n return this.getSetting(\"refresh-scroll\") === \"preserve\"\n }\n\n // Private\n\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`)\n }\n}\n\nclass ViewTransitioner {\n #viewTransitionStarted = false\n #lastOperation = Promise.resolve()\n\n renderChange(useViewTransition, render) {\n if (useViewTransition && this.viewTransitionsAvailable && !this.#viewTransitionStarted) {\n this.#viewTransitionStarted = true;\n this.#lastOperation = this.#lastOperation.then(async () => {\n await document.startViewTransition(render).finished;\n });\n } else {\n this.#lastOperation = this.#lastOperation.then(render);\n }\n\n return this.#lastOperation\n }\n\n get viewTransitionsAvailable() {\n return document.startViewTransition\n }\n}\n\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => {},\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false\n};\n\nconst TimingMetric = {\n visitStart: \"visitStart\",\n requestStart: \"requestStart\",\n requestEnd: \"requestEnd\",\n visitEnd: \"visitEnd\"\n};\n\nconst VisitState = {\n initialized: \"initialized\",\n started: \"started\",\n canceled: \"canceled\",\n failed: \"failed\",\n completed: \"completed\"\n};\n\nconst SystemStatusCode = {\n networkFailure: 0,\n timeoutFailure: -1,\n contentTypeMismatch: -2\n};\n\nconst Direction = {\n advance: \"forward\",\n restore: \"back\",\n replace: \"none\"\n};\n\nclass Visit {\n identifier = uuid() // Required by turbo-ios\n timingMetrics = {}\n\n followedRedirect = false\n historyChanged = false\n scrolled = false\n shouldCacheSnapshot = true\n acceptsStreamResponse = false\n snapshotCached = false\n state = VisitState.initialized\n viewTransitioner = new ViewTransitioner()\n\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n\n const {\n action,\n historyChanged,\n referrer,\n snapshot,\n snapshotHTML,\n response,\n visitCachedSnapshot,\n willRender,\n updateHistory,\n shouldCacheSnapshot,\n acceptsStreamResponse,\n direction\n } = {\n ...defaultOptions,\n ...options\n };\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.isPageRefresh = this.view.isPageRefresh(this);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n this.direction = direction || Direction[action];\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get history() {\n return this.delegate.history\n }\n\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)\n }\n\n get silent() {\n return this.isSamePage\n }\n\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.adapter.visitCompleted(this);\n this.state = VisitState.completed;\n this.followRedirect();\n\n if (!this.followedRedirect) {\n this.delegate.visitCompleted(this);\n }\n }\n }\n\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n this.delegate.visitCompleted(this);\n }\n }\n\n changeHistory() {\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === this.referrer?.href ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n } else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n } else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot) this.cacheSnapshot();\n if (this.view.renderPromise) await this.view.renderPromise;\n\n if (isSuccessful(statusCode) && responseHTML != null) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n await this.renderPageSnapshot(snapshot, false);\n\n this.adapter.visitRendered(this);\n this.complete();\n } else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot\n }\n }\n }\n\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML)\n }\n }\n\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null\n }\n\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage || this.isPageRefresh) {\n this.adapter.visitRendered(this);\n } else {\n if (this.view.renderPromise) await this.view.renderPromise;\n\n await this.renderPageSnapshot(snapshot, isPreview);\n\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n\n followRedirect() {\n if (this.redirectedToLocation && !this.followedRedirect && this.response?.redirected) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false\n });\n this.followedRedirect = true;\n }\n }\n\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted() {\n this.startRequest();\n }\n\n requestPreventedHandlingResponse(_request, _response) {}\n\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected\n });\n } else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false\n });\n }\n\n requestFinished() {\n this.finishRequest();\n }\n\n // Scrolling\n\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded && !this.view.shouldPreserveScrollPosition(this)) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n } else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n\n this.scrolled = true;\n }\n }\n\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true\n }\n }\n\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true\n }\n }\n\n // Instrumentation\n\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n\n getTimingMetrics() {\n return { ...this.timingMetrics }\n }\n\n // Private\n\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState\n case \"advance\":\n case \"restore\":\n return history.pushState\n }\n }\n\n hasPreloadedResponse() {\n return typeof this.response == \"object\"\n }\n\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false\n } else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot()\n } else {\n return this.willRender\n }\n }\n\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n\n async render(callback) {\n this.cancelRender();\n this.frame = await nextRepaint();\n await callback();\n delete this.frame;\n }\n\n async renderPageSnapshot(snapshot, isPreview) {\n await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(snapshot), async () => {\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n });\n }\n\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\n\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300\n}\n\nclass BrowserAdapter {\n progressBar = new ProgressBar()\n\n constructor(session) {\n this.session = session;\n }\n\n visitProposedToLocation(location, options) {\n if (locationIsVisitable(location, this.navigator.rootLocation)) {\n this.navigator.startVisit(location, options?.restorationIdentifier || uuid(), options);\n } else {\n window.location.href = location.toString();\n }\n }\n\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n } else {\n this.showProgressBar();\n }\n }\n\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode\n }\n })\n default:\n return visit.loadResponse()\n }\n }\n\n visitRequestFinished(_visit) {}\n\n visitCompleted(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n pageInvalidated(reason) {\n this.reload(reason);\n }\n\n visitFailed(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n\n visitRendered(_visit) {}\n\n // Form Submission Delegate\n\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n\n // Private\n\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n\n showProgressBar = () => {\n this.progressBar.show();\n }\n\n reload(reason) {\n dispatch(\"turbo:reload\", { detail: reason });\n\n window.location.href = this.location?.toString() || window.location.href;\n }\n\n get navigator() {\n return this.session.navigator\n }\n}\n\nclass CacheObserver {\n selector = \"[data-turbo-temporary]\"\n deprecatedSelector = \"[data-turbo-cache=false]\"\n\n started = false\n\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n\n removeTemporaryElements = (_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n }\n\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation]\n }\n\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n\n if (elements.length) {\n console.warn(\n `The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`\n );\n }\n\n return [...elements]\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldRedirect(element)\n }\n\n linkClickIntercepted(element, url, event) {\n const frame = this.#findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return (\n element.closest(\"turbo-frame\") == null &&\n this.#shouldSubmit(element, submitter) &&\n this.#shouldRedirect(element, submitter)\n )\n }\n\n formSubmitted(element, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n\n #shouldSubmit(form, submitter) {\n const action = getAction$1(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL(meta?.content ?? \"/\");\n\n return this.#shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation)\n }\n\n #shouldRedirect(element, submitter) {\n const isNavigatable =\n element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n\n if (isNavigatable) {\n const frame = this.#findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false\n } else {\n return false\n }\n }\n\n #findFrameElement(element, submitter) {\n const id = submitter?.getAttribute(\"data-turbo-frame\") || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame\n }\n }\n }\n}\n\nclass History {\n location\n restorationIdentifier = uuid()\n restorationData = {}\n started = false\n pageLoaded = false\n currentIndex = 0\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.currentIndex = history.state?.turbo?.restorationIndex || 0;\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n\n update(method, location, restorationIdentifier = uuid()) {\n if (method === history.pushState) ++this.currentIndex;\n\n const state = { turbo: { restorationIdentifier, restorationIndex: this.currentIndex } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n\n // Restoration data\n\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {}\n }\n\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = {\n ...restorationData,\n ...additionalData\n };\n }\n\n // Scroll restoration\n\n assumeControlOfScrollRestoration() {\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = history.scrollRestoration ?? \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n\n // Event handlers\n\n onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier, restorationIndex } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n const direction = restorationIndex > this.currentIndex ? \"forward\" : \"back\";\n this.delegate.historyPoppedToLocationWithRestorationIdentifierAndDirection(this.location, restorationIdentifier, direction);\n this.currentIndex = restorationIndex;\n }\n }\n }\n\n onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n }\n\n // Private\n\n shouldHandlePopState() {\n // Safari dispatches a popstate event after window's load event, ignore it\n return this.pageIsLoaded()\n }\n\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\"\n }\n}\n\nclass LinkPrefetchObserver {\n started = false\n #prefetchedLink = null\n\n constructor(delegate, eventTarget) {\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n\n start() {\n if (this.started) return\n\n if (this.eventTarget.readyState === \"loading\") {\n this.eventTarget.addEventListener(\"DOMContentLoaded\", this.#enable, { once: true });\n } else {\n this.#enable();\n }\n }\n\n stop() {\n if (!this.started) return\n\n this.eventTarget.removeEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.removeEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.removeEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = false;\n }\n\n #enable = () => {\n this.eventTarget.addEventListener(\"mouseenter\", this.#tryToPrefetchRequest, {\n capture: true,\n passive: true\n });\n this.eventTarget.addEventListener(\"mouseleave\", this.#cancelRequestIfObsolete, {\n capture: true,\n passive: true\n });\n\n this.eventTarget.addEventListener(\"turbo:before-fetch-request\", this.#tryToUsePrefetchedRequest, true);\n this.started = true;\n }\n\n #tryToPrefetchRequest = (event) => {\n if (getMetaContent(\"turbo-prefetch\") === \"false\") return\n\n const target = event.target;\n const isLink = target.matches && target.matches(\"a[href]:not([target^=_]):not([download])\");\n\n if (isLink && this.#isPrefetchable(target)) {\n const link = target;\n const location = getLocationForLink(link);\n\n if (this.delegate.canPrefetchRequestToLocation(link, location)) {\n this.#prefetchedLink = link;\n\n const fetchRequest = new FetchRequest(\n this,\n FetchMethod.get,\n location,\n new URLSearchParams(),\n target\n );\n\n prefetchCache.setLater(location.toString(), fetchRequest, this.#cacheTtl);\n }\n }\n }\n\n #cancelRequestIfObsolete = (event) => {\n if (event.target === this.#prefetchedLink) this.#cancelPrefetchRequest();\n }\n\n #cancelPrefetchRequest = () => {\n prefetchCache.clear();\n this.#prefetchedLink = null;\n }\n\n #tryToUsePrefetchedRequest = (event) => {\n if (event.target.tagName !== \"FORM\" && event.detail.fetchOptions.method === \"get\") {\n const cached = prefetchCache.get(event.detail.url.toString());\n\n if (cached) {\n // User clicked link, use cache response\n event.detail.fetchRequest = cached;\n }\n\n prefetchCache.clear();\n }\n }\n\n prepareRequest(request) {\n const link = request.target;\n\n request.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n\n const turboFrame = link.closest(\"turbo-frame\");\n const turboFrameTarget = link.getAttribute(\"data-turbo-frame\") || turboFrame?.getAttribute(\"target\") || turboFrame?.id;\n\n if (turboFrameTarget && turboFrameTarget !== \"_top\") {\n request.headers[\"Turbo-Frame\"] = turboFrameTarget;\n }\n }\n\n // Fetch request interface\n\n requestSucceededWithResponse() {}\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n get #cacheTtl() {\n return Number(getMetaContent(\"turbo-prefetch-cache-time\")) || cacheTtl\n }\n\n #isPrefetchable(link) {\n const href = link.getAttribute(\"href\");\n\n if (!href) return false\n\n if (unfetchableLink(link)) return false\n if (linkToTheSamePage(link)) return false\n if (linkOptsOut(link)) return false\n if (nonSafeLink(link)) return false\n if (eventPrevented(link)) return false\n\n return true\n }\n}\n\nconst unfetchableLink = (link) => {\n return link.origin !== document.location.origin || ![\"http:\", \"https:\"].includes(link.protocol) || link.hasAttribute(\"target\")\n};\n\nconst linkToTheSamePage = (link) => {\n return (link.pathname + link.search === document.location.pathname + document.location.search) || link.href.startsWith(\"#\")\n};\n\nconst linkOptsOut = (link) => {\n if (link.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n if (link.getAttribute(\"data-turbo\") === \"false\") return true\n\n const turboPrefetchParent = findClosestRecursively(link, \"[data-turbo-prefetch]\");\n if (turboPrefetchParent && turboPrefetchParent.getAttribute(\"data-turbo-prefetch\") === \"false\") return true\n\n return false\n};\n\nconst nonSafeLink = (link) => {\n const turboMethod = link.getAttribute(\"data-turbo-method\");\n if (turboMethod && turboMethod.toLowerCase() !== \"get\") return true\n\n if (isUJS(link)) return true\n if (link.hasAttribute(\"data-turbo-confirm\")) return true\n if (link.hasAttribute(\"data-turbo-stream\")) return true\n\n return false\n};\n\nconst isUJS = (link) => {\n return link.hasAttribute(\"data-remote\") || link.hasAttribute(\"data-behavior\") || link.hasAttribute(\"data-confirm\") || link.hasAttribute(\"data-method\")\n};\n\nconst eventPrevented = (link) => {\n const event = dispatch(\"turbo:before-prefetch\", { target: link, cancelable: true });\n return event.defaultPrevented\n};\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n }\n\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, {\n referrer: this.location,\n ...options\n });\n this.currentVisit.start();\n }\n\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n\n this.formSubmission.start();\n }\n\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n\n get adapter() {\n return this.delegate.adapter\n }\n\n get view() {\n return this.delegate.view\n }\n\n get rootLocation() {\n return this.view.snapshot.rootLocation\n }\n\n get history() {\n return this.delegate.history\n }\n\n // Form submission delegate\n\n formSubmissionStarted(formSubmission) {\n // Not all adapters implement formSubmissionStarted\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n\n const { statusCode, redirected } = fetchResponse;\n const action = this.#getActionForFormSubmission(formSubmission, fetchResponse);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected }\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n } else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n if(!snapshot.shouldPreserveScrollPosition) {\n this.view.scrollToTop();\n }\n this.view.clearSnapshotCache();\n }\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished(formSubmission) {\n // Not all adapters implement formSubmissionFinished\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n\n return (\n action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor))\n )\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n\n // Visits\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n #getActionForFormSubmission(formSubmission, fetchResponse) {\n const { submitter, formElement } = formSubmission;\n return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse)\n }\n\n #getDefaultAction(fetchResponse) {\n const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href;\n return sameLocationRedirect ? \"replace\" : \"advance\"\n }\n}\n\nconst PageStage = {\n initial: 0,\n loading: 1,\n interactive: 2,\n complete: 3\n};\n\nclass PageObserver {\n stage = PageStage.initial\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n\n interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n } else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n }\n\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n\n pageWillUnload = () => {\n this.delegate.pageWillUnload();\n }\n\n get readyState() {\n return document.readyState\n }\n}\n\nclass ScrollObserver {\n started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n\n onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n }\n\n // Private\n\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => {\n withAutofocusFromFragment(fragment, () => {\n withPreservedFocus(() => {\n document.documentElement.appendChild(fragment);\n });\n });\n });\n }\n\n // Bardo delegate\n\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n\n leavingBardo() {}\n}\n\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n\n return permanentElementMap\n}\n\nasync function withAutofocusFromFragment(fragment, callback) {\n const generatedID = `turbo-stream-autofocus-${uuid()}`;\n const turboStreams = fragment.querySelectorAll(\"turbo-stream\");\n const elementWithAutofocus = firstAutofocusableElementInStreams(turboStreams);\n let willAutofocusId = null;\n\n if (elementWithAutofocus) {\n if (elementWithAutofocus.id) {\n willAutofocusId = elementWithAutofocus.id;\n } else {\n willAutofocusId = generatedID;\n }\n\n elementWithAutofocus.id = willAutofocusId;\n }\n\n callback();\n await nextRepaint();\n\n const hasNoActiveElement = document.activeElement == null || document.activeElement == document.body;\n\n if (hasNoActiveElement && willAutofocusId) {\n const elementToAutofocus = document.getElementById(willAutofocusId);\n\n if (elementIsFocusable(elementToAutofocus)) {\n elementToAutofocus.focus();\n }\n if (elementToAutofocus && elementToAutofocus.id == generatedID) {\n elementToAutofocus.removeAttribute(\"id\");\n }\n }\n}\n\nasync function withPreservedFocus(callback) {\n const [activeElementBeforeRender, activeElementAfterRender] = await around(callback, () => document.activeElement);\n\n const restoreFocusTo = activeElementBeforeRender && activeElementBeforeRender.id;\n\n if (restoreFocusTo) {\n const elementToFocus = document.getElementById(restoreFocusTo);\n\n if (elementIsFocusable(elementToFocus) && elementToFocus != activeElementAfterRender) {\n elementToFocus.focus();\n }\n }\n}\n\nfunction firstAutofocusableElementInStreams(nodeListOfStreamElements) {\n for (const streamElement of nodeListOfStreamElements) {\n const elementWithAutofocus = queryAutofocusableElement(streamElement.templateElement.content);\n\n if (elementWithAutofocus) return elementWithAutofocus\n }\n\n return null\n}\n\nclass StreamObserver {\n sources = new Set()\n #started = false\n\n constructor(delegate) {\n this.delegate = delegate;\n }\n\n start() {\n if (!this.#started) {\n this.#started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n stop() {\n if (this.#started) {\n this.#started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n\n streamSourceIsConnected(source) {\n return this.sources.has(source)\n }\n\n inspectFetchResponse = (event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n }\n\n receiveMessageEvent = (event) => {\n if (this.#started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n }\n\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\n\nfunction fetchResponseFromEvent(event) {\n const fetchResponse = event.detail?.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse\n }\n}\n\nfunction fetchResponseIsStream(response) {\n const contentType = response.contentType ?? \"\";\n return contentType.startsWith(StreamMessage.contentType)\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n\n documentElement.replaceChild(newElement, body);\n }\n\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n\n get newHead() {\n return this.newSnapshot.headSnapshot.element\n }\n\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\")\n }\n}\n\n// base IIFE to define idiomorph\nvar Idiomorph = (function () {\n\n //=============================================================================\n // AND NOW IT BEGINS...\n //=============================================================================\n let EMPTY_SET = new Set();\n\n // default configuration values, updatable by users now\n let defaults = {\n morphStyle: \"outerHTML\",\n callbacks : {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: function (elt) {\n return elt.getAttribute(\"im-preserve\") === \"true\";\n },\n shouldReAppend: function (elt) {\n return elt.getAttribute(\"im-re-append\") === \"true\";\n },\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n }\n };\n\n //=============================================================================\n // Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n //=============================================================================\n function morph(oldNode, newContent, config = {}) {\n\n if (oldNode instanceof Document) {\n oldNode = oldNode.documentElement;\n }\n\n if (typeof newContent === 'string') {\n newContent = parseContent(newContent);\n }\n\n let normalizedContent = normalizeContent(newContent);\n\n let ctx = createMorphContext(oldNode, normalizedContent, config);\n\n return morphNormalizedContent(oldNode, normalizedContent, ctx);\n }\n\n function morphNormalizedContent(oldNode, normalizedNewContent, ctx) {\n if (ctx.head.block) {\n let oldHead = oldNode.querySelector('head');\n let newHead = normalizedNewContent.querySelector('head');\n if (oldHead && newHead) {\n let promises = handleHeadElement(newHead, oldHead, ctx);\n // when head promises resolve, call morph again, ignoring the head tag\n Promise.all(promises).then(function () {\n morphNormalizedContent(oldNode, normalizedNewContent, Object.assign(ctx, {\n head: {\n block: false,\n ignore: true\n }\n }));\n });\n return;\n }\n }\n\n if (ctx.morphStyle === \"innerHTML\") {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n } else if (ctx.morphStyle === \"outerHTML\" || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n let bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n let previousSibling = bestMatch?.previousSibling;\n let nextSibling = bestMatch?.nextSibling;\n\n // morph it\n let morphedNode = morphOldNodeTo(oldNode, bestMatch, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling, morphedNode, nextSibling);\n } else {\n // otherwise nothing was added to the DOM\n return []\n }\n } else {\n throw \"Do not understand how to morph style \" + ctx.morphStyle;\n }\n }\n\n\n /**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\n function ignoreValueOfActiveElement(possibleActiveElement, ctx) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement && possibleActiveElement !== document.body;\n }\n\n /**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\n function morphOldNodeTo(oldNode, newContent, ctx) {\n if (ctx.ignoreActive && oldNode === document.activeElement) ; else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n oldNode.remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode, newContent)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n\n if (oldNode instanceof HTMLHeadElement && ctx.head.ignore) ; else if (oldNode instanceof HTMLHeadElement && ctx.head.style !== \"morph\") {\n handleHeadElement(newContent, oldNode, ctx);\n } else {\n syncNodeFrom(newContent, oldNode, ctx);\n if (!ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n }\n\n /**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\n function morphChildren(newParent, oldParent, ctx) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild, insertionPoint, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n let idSetMatch = findIdSetMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n let softMatch = findSoftMatch(newParent, oldParent, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n let tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n }\n\n //=============================================================================\n // Attribute Syncing Code\n //=============================================================================\n\n /**\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\n function ignoreAttribute(attr, to, updateType, ctx) {\n if(attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement){\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n }\n\n /**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\n function syncNodeFrom(from, to, ctx) {\n let type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; 0 <= i; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n }\n }\n }\n\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n\n if (!ignoreValueOfActiveElement(to, ctx)) {\n // sync input values\n syncInputValue(from, to, ctx);\n }\n }\n\n /**\n * @param from {Element} element to sync the value from\n * @param to {Element} element to sync the value to\n * @param attributeName {String} the attribute name\n * @param ctx the merge context\n */\n function syncBooleanAttribute(from, to, attributeName, ctx) {\n if (from[attributeName] !== to[attributeName]) {\n let ignoreUpdate = ignoreAttribute(attributeName, to, 'update', ctx);\n if (!ignoreUpdate) {\n to[attributeName] = from[attributeName];\n }\n if (from[attributeName]) {\n if (!ignoreUpdate) {\n to.setAttribute(attributeName, from[attributeName]);\n }\n } else {\n if (!ignoreAttribute(attributeName, to, 'remove', ctx)) {\n to.removeAttribute(attributeName);\n }\n }\n }\n }\n\n /**\n * NB: many bothans died to bring us information:\n *\n * https://github.com/patrick-steele-idem/morphdom/blob/master/src/specialElHandlers.js\n * https://github.com/choojs/nanomorph/blob/master/lib/morph.jsL113\n *\n * @param from {Element} the element to sync the input value from\n * @param to {Element} the element to sync the input value to\n * @param ctx the merge context\n */\n function syncInputValue(from, to, ctx) {\n if (from instanceof HTMLInputElement &&\n to instanceof HTMLInputElement &&\n from.type !== 'file') {\n\n let fromValue = from.value;\n let toValue = to.value;\n\n // sync boolean attributes\n syncBooleanAttribute(from, to, 'checked', ctx);\n syncBooleanAttribute(from, to, 'disabled', ctx);\n\n if (!from.hasAttribute('value')) {\n if (!ignoreAttribute('value', to, 'remove', ctx)) {\n to.value = '';\n to.removeAttribute('value');\n }\n } else if (fromValue !== toValue) {\n if (!ignoreAttribute('value', to, 'update', ctx)) {\n to.setAttribute('value', fromValue);\n to.value = fromValue;\n }\n }\n } else if (from instanceof HTMLOptionElement) {\n syncBooleanAttribute(from, to, 'selected', ctx);\n } else if (from instanceof HTMLTextAreaElement && to instanceof HTMLTextAreaElement) {\n let fromValue = from.value;\n let toValue = to.value;\n if (ignoreAttribute('value', to, 'update', ctx)) {\n return;\n }\n if (fromValue !== toValue) {\n to.value = fromValue;\n }\n if (to.firstChild && to.firstChild.nodeValue !== fromValue) {\n to.firstChild.nodeValue = fromValue;\n }\n }\n }\n\n //=============================================================================\n // the HEAD tag can be handled specially, either w/ a 'merge' or 'append' style\n //=============================================================================\n function handleHeadElement(newHeadTag, currentHead, ctx) {\n\n let added = [];\n let removed = [];\n let preserved = [];\n let nodesToAppend = [];\n\n let headMergeStyle = ctx.head.style;\n\n // put all new head elements into a Map, by their outerHTML\n let srcToNewHeadNodes = new Map();\n for (const newHeadChild of newHeadTag.children) {\n srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild);\n }\n\n // for each elt in the current head\n for (const currentHeadElt of currentHead.children) {\n\n // If the current head element is in the map\n let inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML);\n let isReAppended = ctx.head.shouldReAppend(currentHeadElt);\n let isPreserved = ctx.head.shouldPreserve(currentHeadElt);\n if (inNewContent || isPreserved) {\n if (isReAppended) {\n // remove the current version and let the new version replace it and re-execute\n removed.push(currentHeadElt);\n } else {\n // this element already exists and should not be re-appended, so remove it from\n // the new content map, preserving it in the DOM\n srcToNewHeadNodes.delete(currentHeadElt.outerHTML);\n preserved.push(currentHeadElt);\n }\n } else {\n if (headMergeStyle === \"append\") {\n // we are appending and this existing element is not new content\n // so if and only if it is marked for re-append do we do anything\n if (isReAppended) {\n removed.push(currentHeadElt);\n nodesToAppend.push(currentHeadElt);\n }\n } else {\n // if this is a merge, we remove this content since it is not in the new head\n if (ctx.head.shouldRemove(currentHeadElt) !== false) {\n removed.push(currentHeadElt);\n }\n }\n }\n }\n\n // Push the remaining new head elements in the Map into the\n // nodes to append to the head tag\n nodesToAppend.push(...srcToNewHeadNodes.values());\n\n let promises = [];\n for (const newNode of nodesToAppend) {\n let newElt = document.createRange().createContextualFragment(newNode.outerHTML).firstChild;\n if (ctx.callbacks.beforeNodeAdded(newElt) !== false) {\n if (newElt.href || newElt.src) {\n let resolve = null;\n let promise = new Promise(function (_resolve) {\n resolve = _resolve;\n });\n newElt.addEventListener('load', function () {\n resolve();\n });\n promises.push(promise);\n }\n currentHead.appendChild(newElt);\n ctx.callbacks.afterNodeAdded(newElt);\n added.push(newElt);\n }\n }\n\n // remove all removed elements, after we have appended the new elements to avoid\n // additional network requests for things like style sheets\n for (const removedElement of removed) {\n if (ctx.callbacks.beforeNodeRemoved(removedElement) !== false) {\n currentHead.removeChild(removedElement);\n ctx.callbacks.afterNodeRemoved(removedElement);\n }\n }\n\n ctx.head.afterHeadMorphed(currentHead, {added: added, kept: preserved, removed: removed});\n return promises;\n }\n\n function noOp() {\n }\n\n /*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\n function mergeDefaults(config) {\n let finalConfig = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n }\n\n function createMorphContext(oldNode, newContent, config) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent: newContent,\n config: config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head\n }\n }\n\n function isIdSetMatch(node1, node2, ctx) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== \"\" && node1.id === node2.id) {\n return true;\n } else {\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n }\n return false;\n }\n\n function isSoftMatch(node1, node2) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName\n }\n\n function removeNodesBetween(startInclusive, endExclusive, ctx) {\n while (startInclusive !== endExclusive) {\n let tempNode = startInclusive;\n startInclusive = startInclusive.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential id match\n // for the newChild. We stop if we find a potential id match for the new child OR\n // if the number of potential id matches we are discarding is greater than the\n // potential id matches for the new child\n //=============================================================================\n function findIdSetMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n // max id matches we are willing to discard in our search\n let newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n let potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n }\n\n //=============================================================================\n // Scans forward from the insertionPoint in the old parent looking for a potential soft match\n // for the newChild. We stop if we find a potential soft match for the new child OR\n // if we find a potential id match in the old parents children OR if we find two\n // potential soft matches for the next two pieces of new content\n //=============================================================================\n function findSoftMatch(newContent, oldParent, newChild, insertionPoint, ctx) {\n\n let potentialSoftMatch = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild, potentialSoftMatch)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling, potentialSoftMatch)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling.nextSibling;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch.nextSibling;\n }\n\n return potentialSoftMatch;\n }\n\n function parseContent(newContent) {\n let parser = new DOMParser();\n\n // remove svgs to avoid false-positive matches on head, etc.\n let contentWithSvgsRemoved = newContent.replace(/<svg(\\s[^>]*>|>)([\\s\\S]*?)<\\/svg>/gim, '');\n\n // if the newContent contains a html, head or body tag, we can simply parse it w/o wrapping\n if (contentWithSvgsRemoved.match(/<\\/html>/) || contentWithSvgsRemoved.match(/<\\/head>/) || contentWithSvgsRemoved.match(/<\\/body>/)) {\n let content = parser.parseFromString(newContent, \"text/html\");\n // if it is a full HTML document, return the document itself as the parent container\n if (contentWithSvgsRemoved.match(/<\\/html>/)) {\n content.generatedByIdiomorph = true;\n return content;\n } else {\n // otherwise return the html element as the parent container\n let htmlElement = content.firstChild;\n if (htmlElement) {\n htmlElement.generatedByIdiomorph = true;\n return htmlElement;\n } else {\n return null;\n }\n }\n } else {\n // if it is partial HTML, wrap it in a template tag to provide a parent element and also to help\n // deal with touchy tags like tr, tbody, etc.\n let responseDoc = parser.parseFromString(\"<body><template>\" + newContent + \"</template></body>\", \"text/html\");\n let content = responseDoc.body.querySelector('template').content;\n content.generatedByIdiomorph = true;\n return content\n }\n }\n\n function normalizeContent(newContent) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n } else if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n } else if (newContent instanceof Node) {\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n } else {\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n }\n }\n\n function insertSiblings(previousSibling, morphedNode, nextSibling) {\n let stack = [];\n let added = [];\n while (previousSibling != null) {\n stack.push(previousSibling);\n previousSibling = previousSibling.previousSibling;\n }\n while (stack.length > 0) {\n let node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n morphedNode.parentElement.insertBefore(node, morphedNode);\n }\n added.push(morphedNode);\n while (nextSibling != null) {\n stack.push(nextSibling);\n added.push(nextSibling); // here we are going in order, so push on as we scan, rather than add\n nextSibling = nextSibling.nextSibling;\n }\n while (stack.length > 0) {\n morphedNode.parentElement.insertBefore(stack.pop(), morphedNode.nextSibling);\n }\n return added;\n }\n\n function findBestNodeMatch(newContent, oldNode, ctx) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n let newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n }\n\n function scoreElement(node1, node2, ctx) {\n if (isSoftMatch(node1, node2)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n }\n\n function removeNode(tempNode, ctx) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n tempNode.remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n }\n\n //=============================================================================\n // ID Set Functions\n //=============================================================================\n\n function isIdInConsideration(ctx, id) {\n return !ctx.deadIds.has(id);\n }\n\n function idIsWithinNode(ctx, id, targetNode) {\n let idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n }\n\n function removeIdsFromConsideration(ctx, node) {\n let idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n }\n\n function getIdIntersectionCount(ctx, node1, node2) {\n let sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n }\n\n /**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\n function populateIdMapForNode(node, idMap) {\n let nodeParent = node.parentElement;\n // find all elements with an id property\n let idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set doesn't exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n }\n\n /**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\n function createIdMap(oldContent, newContent) {\n let idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n }\n\n //=============================================================================\n // This is what ends up becoming the Idiomorph global object\n //=============================================================================\n return {\n morph,\n defaults\n }\n })();\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n } else {\n document.documentElement.appendChild(newElement);\n }\n }\n\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical\n }\n\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\"\n }\n }\n\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\"\n }\n }\n }\n\n async prepareToRender() {\n this.#setLanguage();\n await this.mergeHead();\n }\n\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot\n }\n\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot\n }\n\n get newElement() {\n return this.newSnapshot.element\n }\n\n #setLanguage() {\n const { documentElement } = this.currentSnapshot;\n const { lang } = this.newSnapshot;\n\n if (lang) {\n documentElement.setAttribute(\"lang\", lang);\n } else {\n documentElement.removeAttribute(\"lang\");\n }\n }\n\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n\n await mergedHeadElements;\n await newStylesheetElements;\n\n if (this.willRender) {\n this.removeUnusedDynamicStylesheetElements();\n }\n }\n\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature\n }\n\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n\n document.head.appendChild(element);\n }\n\n await Promise.all(loadingElements);\n }\n\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n\n removeUnusedDynamicStylesheetElements() {\n for (const element of this.unusedDynamicStylesheetElements) {\n document.head.removeChild(element);\n }\n }\n\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n // if title element...\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n // if any other element...\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true\n }\n }\n\n return false\n }\n\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n\n get unusedDynamicStylesheetElements() {\n return this.oldHeadStylesheetElements.filter((element) => {\n return element.getAttribute(\"data-turbo-track\") === \"dynamic\"\n })\n }\n\n get oldHeadStylesheetElements() {\n return this.currentHeadSnapshot.getStylesheetElementsNotInSnapshot(this.newHeadSnapshot)\n }\n\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)\n }\n\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements\n }\n\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements\n }\n\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\")\n }\n}\n\nclass MorphRenderer extends PageRenderer {\n async render() {\n if (this.willRender) await this.#morphBody();\n }\n\n get renderMethod() {\n return \"morph\"\n }\n\n // Private\n\n async #morphBody() {\n this.#morphElements(this.currentElement, this.newElement);\n this.#reloadRemoteFrames();\n\n dispatch(\"turbo:morph\", {\n detail: {\n currentElement: this.currentElement,\n newElement: this.newElement\n }\n });\n }\n\n #morphElements(currentElement, newElement, morphStyle = \"outerHTML\") {\n this.isMorphingTurboFrame = this.#isFrameReloadedWithMorph(currentElement);\n\n Idiomorph.morph(currentElement, newElement, {\n morphStyle: morphStyle,\n callbacks: {\n beforeNodeAdded: this.#shouldAddElement,\n beforeNodeMorphed: this.#shouldMorphElement,\n beforeAttributeUpdated: this.#shouldUpdateAttribute,\n beforeNodeRemoved: this.#shouldRemoveElement,\n afterNodeMorphed: this.#didMorphElement\n }\n });\n }\n\n #shouldAddElement = (node) => {\n return !(node.id && node.hasAttribute(\"data-turbo-permanent\") && document.getElementById(node.id))\n }\n\n #shouldMorphElement = (oldNode, newNode) => {\n if (oldNode instanceof HTMLElement) {\n if (!oldNode.hasAttribute(\"data-turbo-permanent\") && (this.isMorphingTurboFrame || !this.#isFrameReloadedWithMorph(oldNode))) {\n const event = dispatch(\"turbo:before-morph-element\", {\n cancelable: true,\n target: oldNode,\n detail: {\n newElement: newNode\n }\n });\n\n return !event.defaultPrevented\n } else {\n return false\n }\n }\n }\n\n #shouldUpdateAttribute = (attributeName, target, mutationType) => {\n const event = dispatch(\"turbo:before-morph-attribute\", { cancelable: true, target, detail: { attributeName, mutationType } });\n\n return !event.defaultPrevented\n }\n\n #didMorphElement = (oldNode, newNode) => {\n if (newNode instanceof HTMLElement) {\n dispatch(\"turbo:morph-element\", {\n target: oldNode,\n detail: {\n newElement: newNode\n }\n });\n }\n }\n\n #shouldRemoveElement = (node) => {\n return this.#shouldMorphElement(node)\n }\n\n #reloadRemoteFrames() {\n this.#remoteFrames().forEach((frame) => {\n if (this.#isFrameReloadedWithMorph(frame)) {\n this.#renderFrameWithMorph(frame);\n frame.reload();\n }\n });\n }\n\n #renderFrameWithMorph(frame) {\n frame.addEventListener(\"turbo:before-frame-render\", (event) => {\n event.detail.render = this.#morphFrameUpdate;\n }, { once: true });\n }\n\n #morphFrameUpdate = (currentElement, newElement) => {\n dispatch(\"turbo:before-frame-morph\", {\n target: currentElement,\n detail: { currentElement, newElement }\n });\n this.#morphElements(currentElement, newElement.children, \"innerHTML\");\n }\n\n #isFrameReloadedWithMorph(element) {\n return element.src && element.refresh === \"morph\"\n }\n\n #remoteFrames() {\n return Array.from(document.querySelectorAll('turbo-frame[src]')).filter(frame => {\n return !frame.closest('[data-turbo-permanent]')\n })\n }\n}\n\nclass SnapshotCache {\n keys = []\n snapshots = {}\n\n constructor(size) {\n this.size = size;\n }\n\n has(location) {\n return toCacheKey(location) in this.snapshots\n }\n\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot\n }\n }\n\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot\n }\n\n clear() {\n this.snapshots = {};\n }\n\n // Private\n\n read(location) {\n return this.snapshots[toCacheKey(location)]\n }\n\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1) this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n snapshotCache = new SnapshotCache(10)\n lastRenderedLocation = new URL(location.href)\n forceReloaded = false\n\n shouldTransitionTo(newSnapshot) {\n return this.snapshot.prefersViewTransitions && newSnapshot.prefersViewTransitions\n }\n\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const shouldMorphPage = this.isPageRefresh(visit) && this.snapshot.shouldMorphPage;\n const rendererClass = shouldMorphPage ? MorphRenderer : PageRenderer;\n\n const renderer = new rendererClass(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n } else {\n visit?.changeHistory();\n }\n\n return this.render(renderer)\n }\n\n renderError(snapshot, visit) {\n visit?.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer)\n }\n\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot\n }\n }\n\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location)\n }\n\n isPageRefresh(visit) {\n return !visit || (this.lastRenderedLocation.pathname === visit.location.pathname && visit.action === \"replace\")\n }\n\n shouldPreserveScrollPosition(visit) {\n return this.isPageRefresh(visit) && this.snapshot.shouldPreserveScrollPosition\n }\n\n get snapshot() {\n return PageSnapshot.fromElement(this.element)\n }\n}\n\nclass Preloader {\n selector = \"a[data-turbo-preload]\"\n\n constructor(delegate, snapshotCache) {\n this.delegate = delegate;\n this.snapshotCache = snapshotCache;\n }\n\n start() {\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", this.#preloadAll);\n } else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n\n stop() {\n document.removeEventListener(\"DOMContentLoaded\", this.#preloadAll);\n }\n\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n if (this.delegate.shouldPreloadLink(link)) {\n this.preloadURL(link);\n }\n }\n }\n\n async preloadURL(link) {\n const location = new URL(link.href);\n\n if (this.snapshotCache.has(location)) {\n return\n }\n\n const fetchRequest = new FetchRequest(this, FetchMethod.get, location, new URLSearchParams(), link);\n await fetchRequest.perform();\n }\n\n // Fetch request delegate\n\n prepareRequest(fetchRequest) {\n fetchRequest.headers[\"X-Sec-Purpose\"] = \"prefetch\";\n }\n\n async requestSucceededWithResponse(fetchRequest, fetchResponse) {\n try {\n const responseHTML = await fetchResponse.responseHTML;\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n\n this.snapshotCache.put(fetchRequest.url, snapshot);\n } catch (_) {\n // If we cannot preload that is ok!\n }\n }\n\n requestStarted(fetchRequest) {}\n\n requestErrored(fetchRequest) {}\n\n requestFinished(fetchRequest) {}\n\n requestPreventedHandlingResponse(fetchRequest, fetchResponse) {}\n\n requestFailedWithResponse(fetchRequest, fetchResponse) {}\n\n #preloadAll = () => {\n this.preloadOnLoadLinksForView(document.body);\n }\n}\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n\n clear() {\n this.session.clearCache();\n }\n\n resetCacheControl() {\n this.#setCacheControl(\"\");\n }\n\n exemptPageFromCache() {\n this.#setCacheControl(\"no-cache\");\n }\n\n exemptPageFromPreview() {\n this.#setCacheControl(\"no-preview\");\n }\n\n #setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nclass Session {\n navigator = new Navigator(this)\n history = new History(this)\n view = new PageView(this, document.documentElement)\n adapter = new BrowserAdapter(this)\n\n pageObserver = new PageObserver(this)\n cacheObserver = new CacheObserver()\n linkPrefetchObserver = new LinkPrefetchObserver(this, document)\n linkClickObserver = new LinkClickObserver(this, window)\n formSubmitObserver = new FormSubmitObserver(this, document)\n scrollObserver = new ScrollObserver(this)\n streamObserver = new StreamObserver(this)\n formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement)\n frameRedirector = new FrameRedirector(this, document.documentElement)\n streamMessageRenderer = new StreamMessageRenderer()\n cache = new Cache(this)\n\n drive = true\n enabled = true\n progressBarDelay = 500\n started = false\n formMode = \"on\"\n #pageRefreshDebouncePeriod = 150\n\n constructor(recentRequests) {\n this.recentRequests = recentRequests;\n this.preloader = new Preloader(this, this.view.snapshotCache);\n this.debouncedRefresh = this.refresh;\n this.pageRefreshDebouncePeriod = this.pageRefreshDebouncePeriod;\n }\n\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.linkPrefetchObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n\n disable() {\n this.enabled = false;\n }\n\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.linkPrefetchObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.preloader.stop();\n this.started = false;\n }\n }\n\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n\n if (frameElement instanceof FrameElement) {\n const action = options.action || getVisitAction(frameElement);\n\n frameElement.delegate.proposeVisitIfNavigatedWithAction(frameElement, action);\n frameElement.src = location.toString();\n } else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n\n refresh(url, requestId) {\n const isRecentRequest = requestId && this.recentRequests.has(requestId);\n if (!isRecentRequest) {\n this.visit(url, { action: \"replace\", shouldCacheSnapshot: false });\n }\n }\n\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n\n clearCache() {\n this.view.clearSnapshotCache();\n }\n\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n\n setFormMode(mode) {\n this.formMode = mode;\n }\n\n get location() {\n return this.history.location\n }\n\n get restorationIdentifier() {\n return this.history.restorationIdentifier\n }\n\n get pageRefreshDebouncePeriod() {\n return this.#pageRefreshDebouncePeriod\n }\n\n set pageRefreshDebouncePeriod(value) {\n this.refresh = debounce(this.debouncedRefresh.bind(this), value);\n this.#pageRefreshDebouncePeriod = value;\n }\n\n // Preloader delegate\n\n shouldPreloadLink(element) {\n const isUnsafe = element.hasAttribute(\"data-turbo-method\");\n const isStream = element.hasAttribute(\"data-turbo-stream\");\n const frameTarget = element.getAttribute(\"data-turbo-frame\");\n const frame = frameTarget == \"_top\" ?\n null :\n document.getElementById(frameTarget) || findClosestRecursively(element, \"turbo-frame:not([disabled])\");\n\n if (isUnsafe || isStream || frame instanceof FrameElement) {\n return false\n } else {\n const location = new URL(element.href);\n\n return this.elementIsNavigatable(element) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n }\n\n // History delegate\n\n historyPoppedToLocationWithRestorationIdentifierAndDirection(location, restorationIdentifier, direction) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n direction\n });\n } else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\"\n });\n }\n }\n\n // Scroll observer delegate\n\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n\n // Form click observer delegate\n\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation)\n }\n\n submittedFormLinkToLocation() {}\n\n // Link hover observer delegate\n\n canPrefetchRequestToLocation(link, location) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation)\n )\n }\n\n // Link click observer delegate\n\n willFollowLinkToLocation(link, location, event) {\n return (\n this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event)\n )\n }\n\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n\n // Navigator delegate\n\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location)\n }\n\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n\n // Visit delegate\n\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n this.view.markVisitDirection(visit.direction);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n\n visitCompleted(visit) {\n this.view.unmarkVisitDirection();\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action)\n }\n\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return (\n this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation)\n )\n }\n\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n\n // Page observer delegate\n\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n\n // Stream observer delegate\n\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n\n // Page view delegate\n\n viewWillCacheSnapshot() {\n if (!this.navigator.currentVisit?.silent) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, renderMethod) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender(renderMethod);\n }\n\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n\n // Frame element\n\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n\n // Application events\n\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented\n }\n\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented\n }\n\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true\n })\n }\n\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true\n })\n }\n\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } })\n }\n\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\")\n }\n\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: { newBody, ...options },\n cancelable: true\n })\n }\n\n notifyApplicationAfterRender(renderMethod) {\n return dispatch(\"turbo:render\", { detail: { renderMethod } })\n }\n\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing }\n })\n }\n\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(\n new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString()\n })\n );\n }\n\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame })\n }\n\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true\n })\n }\n\n // Helpers\n\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false\n } else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null\n } else {\n return submitterIsNavigatable && this.elementIsNavigatable(form)\n }\n }\n }\n\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n\n // Check if Drive is enabled on the session or we're within a Frame.\n if (this.drive || withinFrame) {\n // Element is navigatable by default, unless `data-turbo=\"false\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\"\n } else {\n return true\n }\n } else {\n // Element isn't navigatable by default, unless `data-turbo=\"true\"`.\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\"\n } else {\n return false\n }\n }\n }\n\n // Private\n\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\"\n }\n\n get snapshot() {\n return this.view.snapshot\n }\n}\n\n// Older versions of the Turbo Native adapters referenced the\n// `Location#absoluteURL` property in their implementations of\n// the `Adapter#visitProposedToLocation()` and `#visitStarted()`\n// methods. The Location class has since been removed in favor\n// of the DOM URL API, and accordingly all Adapter methods now\n// receive URL objects.\n//\n// We alias #absoluteURL to #toString() here to avoid crashing\n// older adapters which do not expect URL objects. We should\n// consider removing this support at some point in the future.\n\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\n\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString()\n }\n }\n};\n\nconst session = new Session(recentRequests);\nconst { cache, navigator: navigator$1 } = session;\n\n/**\n * Starts the main session.\n * This initialises any necessary observers such as those to monitor\n * link interactions.\n */\nfunction start() {\n session.start();\n}\n\n/**\n * Registers an adapter for the main session.\n *\n * @param adapter Adapter to register\n */\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\n\n/**\n * Performs an application visit to the given location.\n *\n * @param location Location to visit (a URL or path)\n * @param options Options to apply\n * @param options.action Type of history navigation to apply (\"restore\",\n * \"replace\" or \"advance\")\n * @param options.historyChanged Specifies whether the browser history has\n * already been changed for this visit or not\n * @param options.referrer Specifies the referrer of this visit such that\n * navigations to the same page will not result in a new history entry.\n * @param options.snapshotHTML Cached snapshot to render\n * @param options.response Response of the specified location\n */\nfunction visit(location, options) {\n session.visit(location, options);\n}\n\n/**\n * Connects a stream source to the main session.\n *\n * @param source Stream source to connect\n */\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\n\n/**\n * Disconnects a stream source from the main session.\n *\n * @param source Stream source to disconnect\n */\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\n\n/**\n * Renders a stream message to the main session by appending it to the\n * current document.\n *\n * @param message Message to render\n */\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\n\n/**\n * Removes all entries from the Turbo Drive page cache.\n * Call this when state has changed on the server that may affect cached pages.\n *\n * @deprecated since version 7.2.0 in favor of `Turbo.cache.clear()`\n */\nfunction clearCache() {\n console.warn(\n \"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\"\n );\n session.clearCache();\n}\n\n/**\n * Sets the delay after which the progress bar will appear during navigation.\n *\n * The progress bar appears after 500ms by default.\n *\n * Note that this method has no effect when used with the iOS or Android\n * adapters.\n *\n * @param delay Time to delay in milliseconds\n */\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\n\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\n\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n fetch: fetchWithTurboHeaders,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode\n});\n\nclass TurboFrameMissingError extends Error {}\n\nclass FrameController {\n fetchResponseLoaded = (_fetchResponse) => Promise.resolve()\n #currentFetchRequest = null\n #resolveVisitPromise = () => {}\n #connected = false\n #hasBeenLoaded = false\n #ignoredAttributes = new Set()\n action = null\n\n constructor(element) {\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n\n // Frame delegate\n\n connect() {\n if (!this.#connected) {\n this.#connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.#loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n\n disconnect() {\n if (this.#connected) {\n this.#connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLChanged() {\n if (this.#isIgnoringChangesTo(\"src\")) return\n\n if (this.element.isConnected) {\n this.complete = false;\n }\n\n if (this.loadingStyle == FrameLoadingStyle.eager || this.#hasBeenLoaded) {\n this.#loadSourceURL();\n }\n }\n\n sourceURLReloaded() {\n const { src } = this.element;\n this.#ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded\n }\n\n completeChanged() {\n if (this.#isIgnoringChangesTo(\"complete\")) return\n\n this.#loadSourceURL();\n }\n\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n } else {\n this.appearanceObserver.stop();\n this.#loadSourceURL();\n }\n }\n\n async #loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.#visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.#hasBeenLoaded = true;\n }\n }\n\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n\n if (pageSnapshot.isVisitable) {\n await this.#loadFrameResponse(fetchResponse, document);\n } else {\n await this.#handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n } finally {\n this.fetchResponseLoaded = () => Promise.resolve();\n }\n }\n\n // Appearance observer delegate\n\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, getVisitAction(element));\n this.#loadSourceURL();\n }\n\n // Form link click observer delegate\n\n willSubmitFormLinkToLocation(link) {\n return this.#shouldInterceptNavigation(link)\n }\n\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.#findFrameElement(link);\n if (frame) form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n\n // Link interceptor delegate\n\n shouldInterceptLinkClick(element, _location, _event) {\n return this.#shouldInterceptNavigation(element)\n }\n\n linkClickIntercepted(element, location) {\n this.#navigateFrame(element, location);\n }\n\n // Form submit observer delegate\n\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.#shouldInterceptNavigation(element, submitter)\n }\n\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n\n // Fetch request delegate\n\n prepareRequest(request) {\n request.headers[\"Turbo-Frame\"] = this.id;\n\n if (this.currentNavigationElement?.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n\n requestPreventedHandlingResponse(_request, _response) {\n this.#resolveVisitPromise();\n }\n\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.#resolveVisitPromise();\n }\n\n requestErrored(request, error) {\n console.error(error);\n this.#resolveVisitPromise();\n }\n\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n\n // Form submission delegate\n\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.#findFrameElement(formElement));\n }\n\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.#findFrameElement(formSubmission.formElement, formSubmission.submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(formSubmission.submitter, formSubmission.formElement, frame));\n frame.delegate.loadResponse(response);\n\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.#findFrameElement(formElement));\n }\n\n // View delegate\n\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: { newFrame, ...options },\n cancelable: true\n });\n const {\n defaultPrevented,\n detail: { render }\n } = event;\n\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n\n return !defaultPrevented\n }\n\n viewRenderedSnapshot(_snapshot, _isPreview, _renderMethod) {}\n\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n\n viewInvalidated() {}\n\n // Frame renderer delegate\n\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n\n visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n\n delete this.previousFrameElement;\n }\n\n // Private\n\n async #loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise) await this.view.renderPromise;\n this.changeHistory();\n\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n await this.fetchResponseLoaded(fetchResponse);\n } else if (this.#willHandleFrameMissingFromResponse(fetchResponse)) {\n this.#handleFrameMissingFromResponse(fetchResponse);\n }\n }\n\n async #visit(url) {\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n\n this.#currentFetchRequest?.cancel();\n this.#currentFetchRequest = request;\n\n return new Promise((resolve) => {\n this.#resolveVisitPromise = () => {\n this.#resolveVisitPromise = () => {};\n this.#currentFetchRequest = null;\n resolve();\n };\n request.perform();\n })\n }\n\n #navigateFrame(element, url, submitter) {\n const frame = this.#findFrameElement(element, submitter);\n\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, getVisitAction(submitter, element, frame));\n\n this.#withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n\n proposeVisitIfNavigatedWithAction(frame, action = null) {\n this.action = action;\n\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n\n frame.delegate.fetchResponseLoaded = async (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = await fetchResponse.responseHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot\n };\n\n if (this.action) options.action = this.action;\n\n session.visit(frame.src, options);\n }\n };\n }\n }\n\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n\n async #handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(\n `The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`\n );\n\n await this.#visitResponse(fetchResponse.response);\n }\n\n #willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n\n const response = fetchResponse.response;\n const visit = async (url, options) => {\n if (url instanceof Response) {\n this.#visitResponse(url);\n } else {\n session.visit(url, options);\n }\n };\n\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true\n });\n\n return !event.defaultPrevented\n }\n\n #handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.#throwFrameMissingError(fetchResponse);\n }\n\n #throwFrameMissingError(fetchResponse) {\n 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.`;\n throw new TurboFrameMissingError(message)\n }\n\n async #visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n\n return session.visit(location, { response: { redirected, statusCode, responseHTML } })\n }\n\n #findFrameElement(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return getFrameElementById(id) ?? this.element\n }\n\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element\n }\n\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element)\n }\n } catch (error) {\n console.error(error);\n return new FrameElement()\n }\n\n return null\n }\n\n #formActionIsVisitable(form, submitter) {\n const action = getAction$1(form, submitter);\n\n return locationIsVisitable(expandURL(action), this.rootLocation)\n }\n\n #shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n\n if (element instanceof HTMLFormElement && !this.#formActionIsVisitable(element, submitter)) {\n return false\n }\n\n if (!this.enabled || id == \"_top\") {\n return false\n }\n\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled\n }\n }\n\n if (!session.elementIsNavigatable(element)) {\n return false\n }\n\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false\n }\n\n return true\n }\n\n // Computed properties\n\n get id() {\n return this.element.id\n }\n\n get enabled() {\n return !this.element.disabled\n }\n\n get sourceURL() {\n if (this.element.src) {\n return this.element.src\n }\n }\n\n set sourceURL(sourceURL) {\n this.#ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL ?? null;\n });\n }\n\n get loadingStyle() {\n return this.element.loading\n }\n\n get isLoading() {\n return this.formSubmission !== undefined || this.#resolveVisitPromise() !== undefined\n }\n\n get complete() {\n return this.element.hasAttribute(\"complete\")\n }\n\n set complete(value) {\n this.#ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n } else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n\n get isActive() {\n return this.element.isActive && this.#connected\n }\n\n get rootLocation() {\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = meta?.content ?? \"/\";\n return expandURL(root)\n }\n\n #isIgnoringChangesTo(attributeName) {\n return this.#ignoredAttributes.has(attributeName)\n }\n\n #ignoringChangesToAttribute(attributeName, callback) {\n this.#ignoredAttributes.add(attributeName);\n callback();\n this.#ignoredAttributes.delete(attributeName);\n }\n\n #withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\n\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element\n }\n }\n}\n\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`)\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element\n }\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e.nextSibling));\n },\n\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n\n before() {\n this.targetElements.forEach((e) => e.parentElement?.insertBefore(this.templateContent, e));\n },\n\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n\n refresh() {\n session.refresh(this.baseURI, this.requestId);\n }\n};\n\n// <turbo-stream action=replace target=id><template>...\n\n/**\n * Renders updates to the page from a stream of messages.\n *\n * Using the `action` attribute, this can be configured one of four ways:\n *\n * - `append` - appends the result to the container\n * - `prepend` - prepends the result to the container\n * - `replace` - replaces the contents of the container\n * - `remove` - removes the container\n * - `before` - inserts the result before the target\n * - `after` - inserts the result after the target\n *\n * @customElement turbo-stream\n * @example\n * <turbo-stream action=\"append\" target=\"dom_id\">\n * <template>\n * Content to append to container designated with the dom_id.\n * </template>\n * </turbo-stream>\n */\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n\n async connectedCallback() {\n try {\n await this.render();\n } catch (error) {\n console.error(error);\n } finally {\n this.disconnect();\n }\n }\n\n async render() {\n return (this.renderPromise ??= (async () => {\n const event = this.beforeRenderEvent;\n\n if (this.dispatchEvent(event)) {\n await nextRepaint();\n await event.detail.render(this);\n }\n })())\n }\n\n disconnect() {\n try {\n this.remove();\n // eslint-disable-next-line no-empty\n } catch {}\n }\n\n /**\n * Removes duplicate children (by ID)\n */\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n\n /**\n * Gets the list of duplicate children (i.e. those with the same ID)\n */\n get duplicateChildren() {\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(this.templateContent?.children || [])].filter((c) => !!c.id).map((c) => c.id);\n\n return existingChildren.filter((c) => newChildrenIds.includes(c.id))\n }\n\n /**\n * Gets the action function to be performed.\n */\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction\n }\n this.#raise(\"unknown action\");\n }\n this.#raise(\"action attribute is missing\");\n }\n\n /**\n * Gets the target elements which the template will be rendered to.\n */\n get targetElements() {\n if (this.target) {\n return this.targetElementsById\n } else if (this.targets) {\n return this.targetElementsByQuery\n } else {\n this.#raise(\"target or targets attribute is missing\");\n }\n }\n\n /**\n * Gets the contents of the main `<template>`.\n */\n get templateContent() {\n return this.templateElement.content.cloneNode(true)\n }\n\n /**\n * Gets the main `<template>` used for rendering\n */\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template\n } else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild\n }\n this.#raise(\"first child element must be a <template> element\");\n }\n\n /**\n * Gets the current action.\n */\n get action() {\n return this.getAttribute(\"action\")\n }\n\n /**\n * Gets the current target (an element ID) to which the result will\n * be rendered.\n */\n get target() {\n return this.getAttribute(\"target\")\n }\n\n /**\n * Gets the current \"targets\" selector (a CSS selector)\n */\n get targets() {\n return this.getAttribute(\"targets\")\n }\n\n /**\n * Reads the request-id attribute\n */\n get requestId() {\n return this.getAttribute(\"request-id\")\n }\n\n #raise(message) {\n throw new Error(`${this.description}: ${message}`)\n }\n\n get description() {\n return (this.outerHTML.match(/<[^>]+>/) ?? [])[0] ?? \"<turbo-stream>\"\n }\n\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement }\n })\n }\n\n get targetElementsById() {\n const element = this.ownerDocument?.getElementById(this.target);\n\n if (element !== null) {\n return [element]\n } else {\n return []\n }\n }\n\n get targetElementsByQuery() {\n const elements = this.ownerDocument?.querySelectorAll(this.targets);\n\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements)\n } else {\n return []\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n streamSource = null\n\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n\n connectStreamSource(this.streamSource);\n }\n\n disconnectedCallback() {\n if (this.streamSource) {\n this.streamSource.close();\n\n disconnectStreamSource(this.streamSource);\n }\n }\n\n get src() {\n return this.getAttribute(\"src\") || \"\"\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\n\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\n\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\n\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element) return\n if (element.hasAttribute(\"data-turbo-suppress-warning\")) return\n\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(\n unindent`\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n \u2014\u2014\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `,\n element.outerHTML\n )\n }\n\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = { ...Turbo, StreamActions };\nstart();\n\nexport { FetchEnctype, FetchMethod, FetchRequest, FetchResponse, FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, fetchWithTurboHeaders as fetch, fetchEnctypeFromString, fetchMethodFromString, isSafe, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "let consumer\n\nexport async function getConsumer() {\n return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n const { subscriptions } = await getConsumer()\n return subscriptions.create(channel, mixin)\n}\n", "// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n if (!obj || typeof obj !== 'object') return obj;\n if (obj instanceof Date || obj instanceof RegExp) return obj;\n if (Array.isArray(obj)) return obj.map(walk);\n return Object.keys(obj).reduce(function (acc, key) {\n var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n return '_' + x.toLowerCase();\n });\n acc[camel] = walk(obj[key]);\n return acc;\n }, {});\n};", "import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n async connectedCallback() {\n connectStreamSource(this)\n this.subscription = await subscribeTo(this.channel, {\n received: this.dispatchMessageEvent.bind(this),\n connected: this.subscriptionConnected.bind(this),\n disconnected: this.subscriptionDisconnected.bind(this)\n })\n }\n\n disconnectedCallback() {\n disconnectStreamSource(this)\n if (this.subscription) this.subscription.unsubscribe()\n }\n\n dispatchMessageEvent(data) {\n const event = new MessageEvent(\"message\", { data })\n return this.dispatchEvent(event)\n }\n\n subscriptionConnected() {\n this.setAttribute(\"connected\", \"\")\n }\n\n subscriptionDisconnected() {\n this.removeAttribute(\"connected\")\n }\n\n get channel() {\n const channel = this.getAttribute(\"channel\")\n const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n", "export function encodeMethodIntoRequestBody(event) {\n if (event.target instanceof HTMLFormElement) {\n const { target: form, detail: { fetchOptions } } = event\n\n form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n const method = determineFetchMethod(submitter, body, form)\n\n if (!/get/i.test(method)) {\n if (/post/i.test(method)) {\n body.delete(\"_method\")\n } else {\n body.set(\"_method\", method)\n }\n\n fetchOptions.method = \"post\"\n }\n }, { once: true })\n }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n const formMethod = determineFormMethod(submitter)\n const overrideMethod = body.get(\"_method\")\n const method = form.getAttribute(\"method\") || \"get\"\n\n if (typeof formMethod == \"string\") {\n return formMethod\n } else if (typeof overrideMethod == \"string\") {\n return overrideMethod\n } else {\n return method\n }\n}\n\nfunction determineFormMethod(submitter) {\n if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n // Rails 7 ActionView::Helpers::FormBuilder#button method has an override\n // for formmethod if the button does not have name or value attributes\n // set, which is the default. This means that if you use <%= f.button\n // formmethod: :delete %>, it will generate a <button name=\"_method\"\n // value=\"delete\" formmethod=\"post\">. Therefore, if the submitter's name\n // is already _method, it's value attribute already contains the desired\n // method.\n if (submitter.name === '_method') {\n return submitter.value\n } else if (submitter.hasAttribute(\"formmethod\")) {\n return submitter.formMethod\n } else {\n return null\n }\n } else {\n return null\n }\n}\n\nfunction isBodyInit(body) {\n return body instanceof FormData || body instanceof URLSearchParams\n}\n", "import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\nwindow.Turbo = Turbo\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n"], "mappings": "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", "names": ["adapters_default", "init_adapters", "__esmMin", "logger_default", "init_logger", "__esmMin", "init_adapters", "messages", "adapters_default", "now", "secondsSince", "ConnectionMonitor", "connection_monitor_default", "init_connection_monitor", "__esmMin", "init_logger", "time", "connection", "logger_default", "staleThreshold", "reconnectionBackoffRate", "backoff", "jitter", "internal_default", "init_internal", "__esmMin", "message_types", "protocols", "supportedProtocols", "indexOf", "Connection", "connection_default", "init_connection", "__esmMin", "init_adapters", "init_connection_monitor", "init_internal", "init_logger", "internal_default", "consumer", "connection_monitor_default", "data", "logger_default", "socketProtocols", "adapters_default", "allowReconnect", "error", "states", "state", "eventName", "handler", "event", "identifier", "message", "reason", "reconnect", "type", "extend", "Subscription", "init_subscription", "__esmMin", "object", "properties", "key", "value", "consumer", "params", "mixin", "action", "data", "SubscriptionGuarantor", "subscription_guarantor_default", "init_subscription_guarantor", "__esmMin", "init_logger", "subscriptions", "subscription", "logger_default", "s", "Subscriptions", "init_subscriptions", "__esmMin", "init_subscription", "init_subscription_guarantor", "init_logger", "consumer", "subscription_guarantor_default", "channelName", "mixin", "channel", "params", "subscription", "Subscription", "identifier", "s", "callbackName", "args", "subscriptions", "logger_default", "command", "createWebSocketURL", "url", "a", "Consumer", "init_consumer", "__esmMin", "init_connection", "init_subscriptions", "Subscriptions", "connection_default", "data", "subprotocol", "src_exports", "__export", "connection_default", "connection_monitor_default", "Consumer", "internal_default", "Subscription", "subscription_guarantor_default", "Subscriptions", "adapters_default", "createConsumer", "createWebSocketURL", "getConfig", "logger_default", "url", "name", "element", "init_src", "__esmMin", "init_connection", "init_connection_monitor", "init_consumer", "init_internal", "init_subscription", "init_subscriptions", "init_subscription_guarantor", "init_adapters", "init_logger", "lib_exports", "__export", "afterMain", "afterRead", "afterWrite", "applyStyles_default", "arrow_default", "auto", "basePlacements", "beforeMain", "beforeRead", "beforeWrite", "bottom", "clippingParents", "computeStyles_default", "createPopper", "detectOverflow", "end", "eventListeners_default", "flip_default", "hide_default", "left", "main", "modifierPhases", "offset_default", "placements", "popper", "popperGenerator", "popperOffsets_default", "preventOverflow_default", "read", "reference", "right", "start", "top", "variationPlacements", "viewport", "write", "top", "bottom", "right", "left", "auto", "basePlacements", "start", "end", "clippingParents", "viewport", "popper", "reference", "variationPlacements", "acc", "placement", "placements", "beforeRead", "read", "afterRead", "beforeMain", "main", "afterMain", "beforeWrite", "write", "afterWrite", "modifierPhases", "getNodeName", "element", "getWindow", "node", "ownerDocument", "isElement", "node", "OwnElement", "getWindow", "isHTMLElement", "isShadowRoot", "applyStyles", "_ref", "state", "name", "style", "attributes", "element", "isHTMLElement", "getNodeName", "value", "effect", "_ref2", "initialStyles", "styleProperties", "property", "attribute", "applyStyles_default", "getBasePlacement", "placement", "max", "min", "round", "getUAString", "uaData", "item", "isLayoutViewport", "getUAString", "getBoundingClientRect", "element", "includeScale", "isFixedStrategy", "clientRect", "scaleX", "scaleY", "isHTMLElement", "round", "_ref", "isElement", "getWindow", "visualViewport", "addVisualOffsets", "isLayoutViewport", "x", "y", "width", "height", "getLayoutRect", "element", "clientRect", "getBoundingClientRect", "width", "height", "contains", "parent", "child", "rootNode", "isShadowRoot", "next", "getComputedStyle", "element", "getWindow", "isTableElement", "element", "getNodeName", "getDocumentElement", "element", "isElement", "getParentNode", "element", "getNodeName", "isShadowRoot", "getDocumentElement", "getTrueOffsetParent", "element", "isHTMLElement", "getComputedStyle", "getContainingBlock", "isFirefox", "getUAString", "isIE", "elementCss", "currentNode", "getParentNode", "isShadowRoot", "getNodeName", "css", "getOffsetParent", "window", "getWindow", "offsetParent", "isTableElement", "getMainAxisFromPlacement", "placement", "within", "min", "value", "max", "withinMaxClamp", "v", "getFreshSideObject", "mergePaddingObject", "paddingObject", "getFreshSideObject", "expandToHashMap", "value", "keys", "hashMap", "key", "toPaddingObject", "padding", "state", "mergePaddingObject", "expandToHashMap", "basePlacements", "arrow", "_ref", "_state$modifiersData$", "name", "options", "arrowElement", "popperOffsets", "basePlacement", "getBasePlacement", "axis", "getMainAxisFromPlacement", "isVertical", "left", "right", "len", "paddingObject", "arrowRect", "getLayoutRect", "minProp", "top", "maxProp", "bottom", "endDiff", "startDiff", "arrowOffsetParent", "getOffsetParent", "clientSize", "centerToReference", "min", "max", "center", "offset", "within", "axisProp", "effect", "_ref2", "_options$element", "contains", "arrow_default", "getVariation", "placement", "unsetSides", "roundOffsetsByDPR", "_ref", "win", "x", "y", "dpr", "round", "mapToStyles", "_ref2", "_Object$assign2", "popper", "popperRect", "placement", "variation", "offsets", "position", "gpuAcceleration", "adaptive", "roundOffsets", "isFixed", "_offsets$x", "_offsets$y", "_ref3", "hasX", "hasY", "sideX", "left", "sideY", "top", "offsetParent", "getOffsetParent", "heightProp", "widthProp", "getWindow", "getDocumentElement", "getComputedStyle", "right", "end", "bottom", "offsetY", "offsetX", "commonStyles", "_ref4", "_Object$assign", "computeStyles", "_ref5", "state", "options", "_options$gpuAccelerat", "_options$adaptive", "_options$roundOffsets", "getBasePlacement", "getVariation", "computeStyles_default", "passive", "effect", "_ref", "state", "instance", "options", "_options$scroll", "scroll", "_options$resize", "resize", "window", "getWindow", "scrollParents", "scrollParent", "eventListeners_default", "hash", "getOppositePlacement", "placement", "matched", "hash", "getOppositeVariationPlacement", "placement", "matched", "getWindowScroll", "node", "win", "getWindow", "scrollLeft", "scrollTop", "getWindowScrollBarX", "element", "getBoundingClientRect", "getDocumentElement", "getWindowScroll", "getViewportRect", "element", "strategy", "win", "getWindow", "html", "getDocumentElement", "visualViewport", "width", "height", "x", "y", "layoutViewport", "isLayoutViewport", "getWindowScrollBarX", "getDocumentRect", "element", "_element$ownerDocumen", "html", "getDocumentElement", "winScroll", "getWindowScroll", "body", "width", "max", "height", "x", "getWindowScrollBarX", "y", "getComputedStyle", "isScrollParent", "element", "_getComputedStyle", "getComputedStyle", "overflow", "overflowX", "overflowY", "getScrollParent", "node", "getNodeName", "isHTMLElement", "isScrollParent", "getParentNode", "listScrollParents", "element", "list", "_element$ownerDocumen", "scrollParent", "getScrollParent", "isBody", "win", "getWindow", "target", "isScrollParent", "updatedList", "getParentNode", "rectToClientRect", "rect", "getInnerBoundingClientRect", "element", "strategy", "rect", "getBoundingClientRect", "getClientRectFromMixedType", "clippingParent", "viewport", "rectToClientRect", "getViewportRect", "isElement", "getDocumentRect", "getDocumentElement", "getClippingParents", "clippingParents", "listScrollParents", "getParentNode", "canEscapeClipping", "getComputedStyle", "clipperElement", "isHTMLElement", "getOffsetParent", "contains", "getNodeName", "getClippingRect", "boundary", "rootBoundary", "mainClippingParents", "firstClippingParent", "clippingRect", "accRect", "max", "min", "computeOffsets", "_ref", "reference", "element", "placement", "basePlacement", "getBasePlacement", "variation", "getVariation", "commonX", "commonY", "offsets", "top", "bottom", "right", "left", "mainAxis", "getMainAxisFromPlacement", "len", "start", "end", "detectOverflow", "state", "options", "_options", "_options$placement", "placement", "_options$strategy", "strategy", "_options$boundary", "boundary", "clippingParents", "_options$rootBoundary", "rootBoundary", "viewport", "_options$elementConte", "elementContext", "popper", "_options$altBoundary", "altBoundary", "_options$padding", "padding", "paddingObject", "mergePaddingObject", "expandToHashMap", "basePlacements", "altContext", "reference", "popperRect", "element", "clippingClientRect", "getClippingRect", "isElement", "getDocumentElement", "referenceClientRect", "getBoundingClientRect", "popperOffsets", "computeOffsets", "popperClientRect", "rectToClientRect", "elementClientRect", "overflowOffsets", "offsetData", "offset", "key", "multiply", "right", "bottom", "axis", "top", "computeAutoPlacement", "state", "options", "_options", "placement", "boundary", "rootBoundary", "padding", "flipVariations", "_options$allowedAutoP", "allowedAutoPlacements", "placements", "variation", "getVariation", "variationPlacements", "basePlacements", "allowedPlacements", "overflows", "acc", "detectOverflow", "getBasePlacement", "a", "b", "getExpandedFallbackPlacements", "placement", "getBasePlacement", "auto", "oppositePlacement", "getOppositePlacement", "getOppositeVariationPlacement", "flip", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "specifiedFallbackPlacements", "padding", "boundary", "rootBoundary", "altBoundary", "_options$flipVariatio", "flipVariations", "allowedAutoPlacements", "preferredPlacement", "basePlacement", "isBasePlacement", "fallbackPlacements", "placements", "acc", "computeAutoPlacement", "referenceRect", "popperRect", "checksMap", "makeFallbackChecks", "firstFittingPlacement", "i", "_basePlacement", "isStartVariation", "getVariation", "start", "isVertical", "top", "bottom", "len", "overflow", "detectOverflow", "mainVariationSide", "right", "left", "altVariationSide", "checks", "check", "numberOfChecks", "_loop", "_i", "fittingPlacement", "_ret", "flip_default", "getSideOffsets", "overflow", "rect", "preventedOffsets", "isAnySideFullyClipped", "top", "right", "bottom", "left", "side", "hide", "_ref", "state", "name", "referenceRect", "popperRect", "referenceOverflow", "detectOverflow", "popperAltOverflow", "referenceClippingOffsets", "popperEscapeOffsets", "isReferenceHidden", "hasPopperEscaped", "hide_default", "distanceAndSkiddingToXY", "placement", "rects", "offset", "basePlacement", "getBasePlacement", "invertDistance", "left", "top", "_ref", "skidding", "distance", "right", "_ref2", "state", "options", "name", "_options$offset", "data", "placements", "acc", "_data$state$placement", "x", "y", "offset_default", "popperOffsets", "_ref", "state", "name", "computeOffsets", "popperOffsets_default", "getAltAxis", "axis", "preventOverflow", "_ref", "state", "options", "name", "_options$mainAxis", "checkMainAxis", "_options$altAxis", "checkAltAxis", "boundary", "rootBoundary", "altBoundary", "padding", "_options$tether", "tether", "_options$tetherOffset", "tetherOffset", "overflow", "detectOverflow", "basePlacement", "getBasePlacement", "variation", "getVariation", "isBasePlacement", "mainAxis", "getMainAxisFromPlacement", "altAxis", "getAltAxis", "popperOffsets", "referenceRect", "popperRect", "tetherOffsetValue", "normalizedTetherOffsetValue", "offsetModifierState", "data", "_offsetModifierState$", "mainSide", "top", "left", "altSide", "bottom", "right", "len", "offset", "min", "max", "additive", "minLen", "start", "maxLen", "arrowElement", "arrowRect", "getLayoutRect", "arrowPaddingObject", "getFreshSideObject", "arrowPaddingMin", "arrowPaddingMax", "arrowLen", "within", "minOffset", "maxOffset", "arrowOffsetParent", "getOffsetParent", "clientOffset", "offsetModifierValue", "tetherMin", "tetherMax", "preventedOffset", "_offsetModifierState$2", "_mainSide", "_altSide", "_offset", "_len", "_min", "_max", "isOriginSide", "_offsetModifierValue", "_tetherMin", "_tetherMax", "_preventedOffset", "withinMaxClamp", "preventOverflow_default", "getHTMLElementScroll", "element", "getNodeScroll", "node", "getWindow", "isHTMLElement", "getWindowScroll", "getHTMLElementScroll", "isElementScaled", "element", "rect", "scaleX", "round", "scaleY", "getCompositeRect", "elementOrVirtualElement", "offsetParent", "isFixed", "isOffsetParentAnElement", "isHTMLElement", "offsetParentIsScaled", "documentElement", "getDocumentElement", "getBoundingClientRect", "scroll", "offsets", "getNodeName", "isScrollParent", "getNodeScroll", "getWindowScrollBarX", "order", "modifiers", "map", "visited", "result", "modifier", "sort", "requires", "dep", "depModifier", "orderModifiers", "orderedModifiers", "modifierPhases", "acc", "phase", "debounce", "fn", "pending", "resolve", "mergeByName", "modifiers", "merged", "current", "existing", "key", "DEFAULT_OPTIONS", "areValidElements", "_len", "args", "_key", "element", "popperGenerator", "generatorOptions", "_generatorOptions", "_generatorOptions$def", "defaultModifiers", "_generatorOptions$def2", "defaultOptions", "reference", "popper", "options", "state", "effectCleanupFns", "isDestroyed", "instance", "setOptionsAction", "cleanupModifierEffects", "isElement", "listScrollParents", "orderedModifiers", "orderModifiers", "mergeByName", "m", "runModifierEffects", "_state$elements", "getCompositeRect", "getOffsetParent", "getLayoutRect", "modifier", "index", "_state$orderedModifie", "fn", "_state$orderedModifie2", "_options", "name", "debounce", "resolve", "_ref", "_ref$options", "effect", "cleanupFn", "noopFn", "createPopper", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "createPopper", "popperGenerator", "defaultModifiers", "eventListeners_default", "popperOffsets_default", "computeStyles_default", "applyStyles_default", "offset_default", "flip_default", "preventOverflow_default", "arrow_default", "hide_default", "createPopper", "popperGenerator", "elementMap", "Map", "Data", "set", "element", "key", "instance", "has", "instanceMap", "get", "size", "console", "error", "Array", "from", "keys", "remove", "delete", "MAX_UID", "MILLISECONDS_MULTIPLIER", "TRANSITION_END", "parseSelector", "selector", "window", "CSS", "escape", "replace", "match", "id", "toType", "object", "Object", "prototype", "toString", "call", "toLowerCase", "getUID", "prefix", "Math", "floor", "random", "document", "getElementById", "getTransitionDurationFromElement", "transitionDuration", "transitionDelay", "getComputedStyle", "floatTransitionDuration", "Number", "parseFloat", "floatTransitionDelay", "split", "triggerTransitionEnd", "dispatchEvent", "Event", "isElement", "jquery", "nodeType", "getElement", "length", "querySelector", "isVisible", "getClientRects", "elementIsVisible", "getPropertyValue", "closedDetails", "closest", "summary", "parentNode", "isDisabled", "Node", "ELEMENT_NODE", "classList", "contains", "disabled", "hasAttribute", "getAttribute", "findShadowRoot", "documentElement", "attachShadow", "getRootNode", "root", "ShadowRoot", "noop", "reflow", "offsetHeight", "getjQuery", "jQuery", "body", "DOMContentLoadedCallbacks", "onDOMContentLoaded", "callback", "readyState", "addEventListener", "push", "isRTL", "dir", "defineJQueryPlugin", "plugin", "$", "name", "NAME", "JQUERY_NO_CONFLICT", "fn", "jQueryInterface", "Constructor", "noConflict", "execute", "possibleCallback", "args", "defaultValue", "executeAfterTransition", "transitionElement", "waitForTransition", "durationPadding", "emulatedDuration", "called", "handler", "target", "removeEventListener", "setTimeout", "getNextActiveElement", "list", "activeElement", "shouldGetNext", "isCycleAllowed", "listLength", "index", "indexOf", "max", "min", "namespaceRegex", "stripNameRegex", "stripUidRegex", "eventRegistry", "uidEvent", "customEvents", "mouseenter", "mouseleave", "nativeEvents", "Set", "makeEventUid", "uid", "getElementEvents", "bootstrapHandler", "event", "hydrateObj", "delegateTarget", "oneOff", "EventHandler", "off", "type", "apply", "bootstrapDelegationHandler", "domElements", "querySelectorAll", "domElement", "findHandler", "events", "callable", "delegationSelector", "values", "find", "normalizeParameters", "originalTypeEvent", "delegationFunction", "isDelegated", "typeEvent", "getTypeEvent", "addHandler", "relatedTarget", "handlers", "previousFunction", "removeHandler", "Boolean", "removeNamespacedHandlers", "namespace", "storeElementEvent", "handlerKey", "entries", "includes", "on", "one", "inNamespace", "isNamespace", "startsWith", "elementEvent", "slice", "keyHandlers", "trigger", "jQueryEvent", "bubbles", "nativeDispatch", "defaultPrevented", "isPropagationStopped", "isImmediatePropagationStopped", "isDefaultPrevented", "evt", "cancelable", "preventDefault", "obj", "meta", "value", "defineProperty", "configurable", "normalizeData", "JSON", "parse", "decodeURIComponent", "normalizeDataKey", "chr", "Manipulator", "setDataAttribute", "setAttribute", "removeDataAttribute", "removeAttribute", "getDataAttributes", "attributes", "bsKeys", "dataset", "filter", "pureKey", "charAt", "getDataAttribute", "Config", "Default", "DefaultType", "Error", "_getConfig", "config", "_mergeConfigObj", "_configAfterMerge", "_typeCheckConfig", "jsonConfig", "constructor", "configTypes", "property", "expectedTypes", "valueType", "RegExp", "test", "TypeError", "toUpperCase", "VERSION", "BaseComponent", "_element", "_config", "DATA_KEY", "dispose", "EVENT_KEY", "propertyName", "getOwnPropertyNames", "_queueCallback", "isAnimated", "getInstance", "getOrCreateInstance", "eventName", "getSelector", "hrefAttribute", "trim", "SelectorEngine", "concat", "Element", "findOne", "children", "child", "matches", "parents", "ancestor", "prev", "previous", "previousElementSibling", "next", "nextElementSibling", "focusableChildren", "focusables", "map", "join", "el", "getSelectorFromElement", "getElementFromSelector", "getMultipleElementsFromSelector", "enableDismissTrigger", "component", "method", "clickEvent", "tagName", "EVENT_CLOSE", "EVENT_CLOSED", "CLASS_NAME_FADE", "CLASS_NAME_SHOW", "Alert", "close", "_destroyElement", "each", "data", "undefined", "DATA_API_KEY", "CLASS_NAME_ACTIVE", "SELECTOR_DATA_TOGGLE", "EVENT_CLICK_DATA_API", "Button", "toggle", "button", "EVENT_TOUCHSTART", "EVENT_TOUCHMOVE", "EVENT_TOUCHEND", "EVENT_POINTERDOWN", "EVENT_POINTERUP", "POINTER_TYPE_TOUCH", "POINTER_TYPE_PEN", "CLASS_NAME_POINTER_EVENT", "SWIPE_THRESHOLD", "endCallback", "leftCallback", "rightCallback", "Swipe", "isSupported", "_deltaX", "_supportPointerEvents", "PointerEvent", "_initEvents", "_start", "touches", "clientX", "_eventIsPointerPenTouch", "_end", "_handleSwipe", "_move", "absDeltaX", "abs", "direction", "add", "pointerType", "navigator", "maxTouchPoints", "ARROW_LEFT_KEY", "ARROW_RIGHT_KEY", "TOUCHEVENT_COMPAT_WAIT", "ORDER_NEXT", "ORDER_PREV", "DIRECTION_LEFT", "DIRECTION_RIGHT", "EVENT_SLIDE", "EVENT_SLID", "EVENT_KEYDOWN", "EVENT_MOUSEENTER", "EVENT_MOUSELEAVE", "EVENT_DRAG_START", "EVENT_LOAD_DATA_API", "CLASS_NAME_CAROUSEL", "CLASS_NAME_SLIDE", "CLASS_NAME_END", "CLASS_NAME_START", "CLASS_NAME_NEXT", "CLASS_NAME_PREV", "SELECTOR_ACTIVE", "SELECTOR_ITEM", "SELECTOR_ACTIVE_ITEM", "SELECTOR_ITEM_IMG", "SELECTOR_INDICATORS", "SELECTOR_DATA_SLIDE", "SELECTOR_DATA_RIDE", "KEY_TO_DIRECTION", "interval", "keyboard", "pause", "ride", "touch", "wrap", "Carousel", "_interval", "_activeElement", "_isSliding", "touchTimeout", "_swipeHelper", "_indicatorsElement", "_addEventListeners", "cycle", "_slide", "nextWhenVisible", "hidden", "_clearInterval", "_updateInterval", "setInterval", "_maybeEnableCycle", "to", "items", "_getItems", "activeIndex", "_getItemIndex", "_getActive", "order", "defaultInterval", "_keydown", "_addTouchEventListeners", "img", "swipeConfig", "_directionToOrder", "endCallBack", "clearTimeout", "_setActiveIndicatorElement", "activeIndicator", "newActiveIndicator", "elementInterval", "parseInt", "isNext", "nextElement", "nextElementIndex", "triggerEvent", "_orderToDirection", "isCycling", "directionalClassName", "orderClassName", "completeCallBack", "_isAnimated", "clearInterval", "carousel", "slideIndex", "carousels", "EVENT_SHOW", "EVENT_SHOWN", "EVENT_HIDE", "EVENT_HIDDEN", "CLASS_NAME_COLLAPSE", "CLASS_NAME_COLLAPSING", "CLASS_NAME_COLLAPSED", "CLASS_NAME_DEEPER_CHILDREN", "CLASS_NAME_HORIZONTAL", "WIDTH", "HEIGHT", "SELECTOR_ACTIVES", "parent", "Collapse", "_isTransitioning", "_triggerArray", "toggleList", "elem", "filterElement", "foundElement", "_initializeChildren", "_addAriaAndCollapsedClass", "_isShown", "hide", "show", "activeChildren", "_getFirstLevelChildren", "activeInstance", "dimension", "_getDimension", "style", "complete", "scrollSize", "getBoundingClientRect", "selected", "triggerArray", "isOpen", "ESCAPE_KEY", "TAB_KEY", "ARROW_UP_KEY", "ARROW_DOWN_KEY", "RIGHT_MOUSE_BUTTON", "EVENT_KEYDOWN_DATA_API", "EVENT_KEYUP_DATA_API", "CLASS_NAME_DROPUP", "CLASS_NAME_DROPEND", "CLASS_NAME_DROPSTART", "CLASS_NAME_DROPUP_CENTER", "CLASS_NAME_DROPDOWN_CENTER", "SELECTOR_DATA_TOGGLE_SHOWN", "SELECTOR_MENU", "SELECTOR_NAVBAR", "SELECTOR_NAVBAR_NAV", "SELECTOR_VISIBLE_ITEMS", "PLACEMENT_TOP", "PLACEMENT_TOPEND", "PLACEMENT_BOTTOM", "PLACEMENT_BOTTOMEND", "PLACEMENT_RIGHT", "PLACEMENT_LEFT", "PLACEMENT_TOPCENTER", "PLACEMENT_BOTTOMCENTER", "autoClose", "boundary", "display", "offset", "popperConfig", "reference", "Dropdown", "_popper", "_parent", "_menu", "_inNavbar", "_detectNavbar", "showEvent", "_createPopper", "focus", "_completeHide", "destroy", "update", "hideEvent", "Popper", "referenceElement", "_getPopperConfig", "createPopper", "_getPlacement", "parentDropdown", "isEnd", "_getOffset", "popperData", "defaultBsPopperConfig", "placement", "modifiers", "options", "enabled", "_selectMenuItem", "clearMenus", "openToggles", "context", "composedPath", "isMenuTarget", "dataApiKeydownHandler", "isInput", "isEscapeEvent", "isUpOrDownEvent", "getToggleButton", "stopPropagation", "EVENT_MOUSEDOWN", "className", "clickCallback", "rootElement", "Backdrop", "_isAppended", "_append", "_getElement", "_emulateAnimation", "backdrop", "createElement", "append", "EVENT_FOCUSIN", "EVENT_KEYDOWN_TAB", "TAB_NAV_FORWARD", "TAB_NAV_BACKWARD", "autofocus", "trapElement", "FocusTrap", "_isActive", "_lastTabNavDirection", "activate", "_handleFocusin", "_handleKeydown", "deactivate", "elements", "shiftKey", "SELECTOR_FIXED_CONTENT", "SELECTOR_STICKY_CONTENT", "PROPERTY_PADDING", "PROPERTY_MARGIN", "ScrollBarHelper", "getWidth", "documentWidth", "clientWidth", "innerWidth", "width", "_disableOverFlow", "_setElementAttributes", "calculatedValue", "reset", "_resetElementAttributes", "isOverflowing", "_saveInitialAttribute", "overflow", "styleProperty", "scrollbarWidth", "manipulationCallBack", "setProperty", "_applyManipulationCallback", "actualValue", "removeProperty", "callBack", "sel", "EVENT_HIDE_PREVENTED", "EVENT_RESIZE", "EVENT_CLICK_DISMISS", "EVENT_MOUSEDOWN_DISMISS", "EVENT_KEYDOWN_DISMISS", "CLASS_NAME_OPEN", "CLASS_NAME_STATIC", "OPEN_SELECTOR", "SELECTOR_DIALOG", "SELECTOR_MODAL_BODY", "Modal", "_dialog", "_backdrop", "_initializeBackDrop", "_focustrap", "_initializeFocusTrap", "_scrollBar", "_adjustDialog", "_showElement", "_hideModal", "handleUpdate", "scrollTop", "modalBody", "transitionComplete", "_triggerBackdropTransition", "event2", "_resetAdjustments", "isModalOverflowing", "scrollHeight", "clientHeight", "initialOverflowY", "overflowY", "isBodyOverflowing", "paddingLeft", "paddingRight", "alreadyOpen", "CLASS_NAME_SHOWING", "CLASS_NAME_HIDING", "CLASS_NAME_BACKDROP", "scroll", "Offcanvas", "blur", "completeCallback", "position", "ARIA_ATTRIBUTE_PATTERN", "DefaultAllowlist", "a", "area", "b", "br", "col", "code", "div", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "ol", "p", "pre", "s", "small", "span", "sub", "sup", "strong", "u", "ul", "uriAttributes", "SAFE_URL_PATTERN", "allowedAttribute", "attribute", "allowedAttributeList", "attributeName", "nodeName", "nodeValue", "attributeRegex", "some", "regex", "sanitizeHtml", "unsafeHtml", "allowList", "sanitizeFunction", "createdDocument", "DOMParser", "parseFromString", "elementName", "attributeList", "allowedAttributes", "innerHTML", "content", "extraClass", "html", "sanitize", "sanitizeFn", "template", "DefaultContentType", "entry", "TemplateFactory", "getContent", "_resolvePossibleFunction", "hasContent", "changeContent", "_checkContent", "toHtml", "templateWrapper", "_maybeSanitize", "text", "_setContent", "arg", "templateElement", "_putElementInTemplate", "textContent", "DISALLOWED_ATTRIBUTES", "CLASS_NAME_MODAL", "SELECTOR_TOOLTIP_INNER", "SELECTOR_MODAL", "EVENT_MODAL_HIDE", "TRIGGER_HOVER", "TRIGGER_FOCUS", "TRIGGER_CLICK", "TRIGGER_MANUAL", "EVENT_INSERTED", "EVENT_CLICK", "EVENT_FOCUSOUT", "AttachmentMap", "AUTO", "TOP", "RIGHT", "BOTTOM", "LEFT", "animation", "container", "customClass", "delay", "fallbackPlacements", "title", "Tooltip", "_isEnabled", "_timeout", "_isHovered", "_activeTrigger", "_templateFactory", "_newContent", "tip", "_setListeners", "_fixTitle", "enable", "disable", "toggleEnabled", "click", "_leave", "_enter", "_hideModalHandler", "_disposePopper", "_isWithContent", "isInTheDom", "ownerDocument", "_getTipElement", "_isWithActiveTrigger", "_getTitle", "_createTipElement", "_getContentForTemplate", "_getTemplateFactory", "tipId", "setContent", "_initializeOnDelegatedTarget", "_getDelegateConfig", "attachment", "phase", "state", "triggers", "eventIn", "eventOut", "_setTimeout", "timeout", "dataAttributes", "dataAttribute", "SELECTOR_TITLE", "SELECTOR_CONTENT", "Popover", "_getContent", "EVENT_ACTIVATE", "CLASS_NAME_DROPDOWN_ITEM", "SELECTOR_DATA_SPY", "SELECTOR_TARGET_LINKS", "SELECTOR_NAV_LIST_GROUP", "SELECTOR_NAV_LINKS", "SELECTOR_NAV_ITEMS", "SELECTOR_LIST_ITEMS", "SELECTOR_LINK_ITEMS", "SELECTOR_DROPDOWN", "SELECTOR_DROPDOWN_TOGGLE", "rootMargin", "smoothScroll", "threshold", "ScrollSpy", "_targetLinks", "_observableSections", "_rootElement", "_activeTarget", "_observer", "_previousScrollData", "visibleEntryTop", "parentScrollTop", "refresh", "_initializeTargetsAndObservables", "_maybeEnableSmoothScroll", "disconnect", "_getNewObserver", "section", "observe", "observableSection", "hash", "height", "offsetTop", "scrollTo", "top", "behavior", "IntersectionObserver", "_observerCallback", "targetElement", "_process", "userScrollsDown", "isIntersecting", "_clearActiveClass", "entryIsLowerThanPrevious", "targetLinks", "anchor", "decodeURI", "_activateParents", "listGroup", "item", "activeNodes", "node", "spy", "HOME_KEY", "END_KEY", "CLASS_DROPDOWN", "SELECTOR_DROPDOWN_MENU", "NOT_SELECTOR_DROPDOWN_TOGGLE", "SELECTOR_TAB_PANEL", "SELECTOR_OUTER", "SELECTOR_INNER", "SELECTOR_INNER_ELEM", "SELECTOR_DATA_TOGGLE_ACTIVE", "Tab", "_setInitialAttributes", "_getChildren", "innerElem", "_elemIsActive", "active", "_getActiveElem", "_deactivate", "_activate", "relatedElem", "_toggleDropDown", "nextActiveElement", "preventScroll", "_setAttributeIfNotExists", "_setInitialAttributesOnChild", "_getInnerElement", "isActive", "outerElem", "_getOuterElement", "_setInitialAttributesOnTargetPanel", "open", "EVENT_MOUSEOVER", "EVENT_MOUSEOUT", "CLASS_NAME_HIDE", "autohide", "Toast", "_hasMouseInteraction", "_hasKeyboardInteraction", "_clearTimeout", "_maybeScheduleHide", "isShown", "_onInteraction", "isInteracting", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "_Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "application", "Application", "discount_codes_controller_default", "Controller", "showPercentage", "targets", "show", "target", "anchor_link_controller_default", "Controller", "event", "target", "case_consideration_controller_default", "Controller", "check_visibility_controller_default", "Controller", "elem", "rect", "viewHeight", "isObject", "val", "Object", "prototype", "toString", "call", "createElement", "nodeName", "attrs", "dom", "document", "attr", "innerHTML", "setAttribute", "objToText", "obj", "includes", "data", "childNodes", "map", "childNode", "join", "cellToText", "hasOwnProperty", "cell", "text", "String", "visibleToColumnIndex", "visibleIndex", "columns", "counter", "columnIndex", "hidden", "namedNodeMapToObject", "map", "obj", "attr", "name", "value", "classNamesToSelector", "classNames", "trim", "split", "className", "join", "containsClass", "element", "classes", "some", "classList", "contains", "joinWithSpaces", "first", "second", "Diff", "options", "_this", "this", "Object", "entries", "forEach", "_a", "key", "prototype", "toString", "JSON", "stringify", "setValue", "aKey", "aValue", "checkElementType", "arguments$1", "arguments", "elementTypeNames", "_i", "length", "elementTypeName", "_b", "ownerDocument", "defaultView", "objToNode", "objNode", "insideSvg", "node", "nodeName", "document", "createTextNode", "data", "createComment", "createElementNS", "toLowerCase", "createElement", "attributes", "setAttribute", "childNodes", "childNode", "appendChild", "valueDiffing", "checked", "selected", "getFromRoute", "route", "slice", "c", "splice", "applyDiff", "tree", "diff", "newNode", "reference", "action", "_const", "addElement", "addTextElement", "includes", "info", "preDiffApply", "addAttribute", "modifyAttribute", "newValue", "removeAttribute", "modifyTextElement", "textDiff", "oldValue", "parentNode", "modifyValue", "modifyComment", "modifyChecked", "modifySelected", "replaceElement", "namespaceURI", "replaceChild", "relocateGroup", "Array", "apply", "groupLength", "removeChild", "from", "index", "to", "insertBefore", "removeElement", "parentRoute", "removeTextElement", "nodeType", "console", "log", "postDiffApply", "swap", "p1", "p2", "tmp", "undoDOM", "diffs", "reverse", "__assign", "assign", "t", "s", "i", "n", "p", "hasOwnProperty", "call", "elementDescriptors", "el", "output", "push", "nodeName", "attributes", "concat", "replace", "id", "findUniqueDescriptors", "li", "uniqueDescriptors", "duplicateDescriptors", "forEach", "node", "descriptor", "inUnique", "uniqueInBoth", "l1", "l2", "l1Unique", "l2Unique", "inBoth", "Object", "keys", "key", "removeDone", "tree", "outerDone", "innerDone", "valueDone", "childNodes", "every", "cleanNode", "diffNode", "prototype", "hasOwnProperty", "call", "data", "elementNode", "__assign", "checked", "value", "selected", "map", "diffChildNode", "isEqual", "e1", "e2", "element", "Boolean", "e1Attributes", "e2Attributes", "length", "attribute", "childNode", "index", "roughlyEqual", "sameSiblings", "preventRecursion", "includes", "nodeList1", "slice", "reverse", "nodeList2", "childUniqueDescriptors_1", "makeBooleanArray", "n", "v", "Array", "apply", "markSubTrees", "oldTree", "newTree", "oldChildren", "newChildren", "marked1", "marked2", "subsets", "returnIndex", "arguments", "foundAllSubsets", "_loop_1", "subset", "c1", "c2", "lcsSize", "c1Length", "c2Length", "matches", "subsetsSame", "some", "i", "c1Desc", "c2Desc", "description", "c1Index", "c1Element", "c2Index", "c2Element", "oldValue", "newValue", "item", "subsetsAge", "DiffTracker", "this", "list", "add", "diffs", "_a", "fn", "getFromVirtualRoute", "route", "parentNode", "nodeIndex", "splice", "applyVirtual", "options", "diff", "_const", "addElement", "addTextElement", "action", "routeInfo", "newNode", "newSubsets", "info", "preVirtualDiffApply", "addAttribute", "name", "modifyAttribute", "removeAttribute", "modifyTextElement", "modifyValue", "modifyComment", "modifyChecked", "modifySelected", "replaceElement", "relocateGroup", "from", "groupLength", "movedNode", "to", "splitLength", "removeElement", "delete", "c_1", "removeTextElement", "c_2", "console", "log", "filter", "postVirtualDiffApply", "nodeToObj", "aNode", "valueDiffing", "objNode", "checkElementType", "type", "toLowerCase", "tagRE", "attrRE", "unescape", "string", "lookup", "area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "menuItem", "meta", "param", "source", "track", "wbr", "parseTag", "tag", "caseSensitive", "res", "voidElement", "tagMatch", "match", "toUpperCase", "charAt", "startsWith", "endIndex", "indexOf", "reg", "RegExp", "result", "done", "exec", "trim", "attr", "arr", "split", "lastIndex", "substring", "stringToObj", "html", "current", "level", "insideSvg", "end", "isOpen", "isComment", "start", "nextChar", "comment", "parent_1", "parent_2", "DiffFinder", "t1Node", "t2Node", "t1", "Element", "JSON", "parse", "stringify", "t2", "diffcount", "foundAll", "debug", "t1Orig", "t2Orig", "tracker", "init", "findDiffs", "diffcap", "Error", "findNextDiff", "error", "fdiffs", "maxDepth", "findOuterDiff", "filterOuterDiff", "findInnerDiff", "findValueDiff", "attr1", "attr2", "attrLength", "pos", "Diff", "setValue", "Math", "abs", "sort", "t1ChildNodes", "t2ChildNodes", "last", "max", "childNodesLengthDifference", "maxChildCount", "cachedSubtrees", "subtrees", "attemptGroupRelocation", "destinationDifferent", "toGroup", "group", "similarNode", "gapInformation", "stable", "gaps1", "gaps2", "endOld", "endNew", "j", "shortest", "min", "index2", "index1", "testI", "DEFAULT_OPTIONS", "textDiff", "currentValue", "expectedValue", "preDiffApply", "postDiffApply", "compress", "document", "window", "components", "DiffDOM", "entries", "varNames", "constNames_1", "varName", "applyDiff", "undo", "undoDOM", "headingsToVirtualHeaderRowDOM", "headings", "columnSettings", "columnsState", "classes", "format", "hiddenHeader", "sortable", "scrollY", "noColumnWidths", "unhideHeader", "heading", "column", "searchable", "hidden", "headerClass", "class", "joinWithSpaces", "directionClass", "dir", "ascending", "descending", "filters", "filterActive", "widths", "style", "headerNodes", "text", "String", "sorter", "dataToVirtualDOM", "tableAttributes", "rows", "rowCursor", "header", "footer", "rowRender", "tabIndex", "renderHeader", "footers", "captions", "table", "row", "tr", "cells", "cell", "cIndex", "td", "cellToText", "cellClass", "render", "renderedCell", "cursor", "renderedRow", "headerRow", "thead", "unshift", "tfoot", "structuredClone", "foot", "caption", "tabindex", "F", "t", "B", "z", "e", "n", "r", "i", "s", "u", "a", "o", "c", "f", "h", "d", "l", "$", "y", "M", "name", "weekdays", "split", "months", "ordinal", "m", "String", "length", "Array", "join", "v", "utcOffset", "Math", "abs", "floor", "date", "year", "month", "clone", "add", "ceil", "p", "w", "D", "ms", "Q", "toLowerCase", "replace", "g", "S", "_", "O", "args", "arguments", "b", "locale", "$L", "utc", "$u", "x", "$x", "$offset", "this", "parse", "prototype", "$d", "Date", "NaN", "test", "match", "substring", "UTC", "init", "$y", "getFullYear", "$M", "getMonth", "$D", "getDate", "$W", "getDay", "$H", "getHours", "$m", "getMinutes", "$s", "getSeconds", "$ms", "getMilliseconds", "$utils", "isValid", "toString", "isSame", "startOf", "endOf", "isAfter", "isBefore", "$g", "set", "unix", "valueOf", "getTime", "toDate", "apply", "slice", "$locale", "weekStart", "$set", "min", "daysInMonth", "get", "Number", "round", "subtract", "format", "invalidDate", "meridiem", "monthsShort", "weekdaysMin", "weekdaysShort", "getTimezoneOffset", "diff", "toJSON", "toISOString", "toUTCString", "k", "forEach", "extend", "$i", "isDayjs", "en", "Ls", "exports", "LTS", "LT", "L", "LL", "LLL", "LLLL", "zone", "offset", "indexOf", "concat", "A", "afternoon", "milliseconds", "SS", "SSS", "ss", "mm", "H", "HH", "hh", "DD", "Do", "day", "MM", "MMM", "map", "Error", "MMMM", "Y", "YY", "YYYY", "Z", "ZZ", "formats", "toUpperCase", "regex", "parser", "exec", "call", "hours", "customParseFormat", "parseTwoDigitYear", "minutes", "seconds", "dayjs", "parseDate", "content", "readDataCell", "cell", "columnSettings", "constructor", "Object", "hasOwnProperty", "keys", "find", "key", "includes", "cellData", "data", "type", "text", "order", "parseInt", "node", "isArray", "nodeName", "childNodes", "stringToObj", "objToText", "trim", "JSON", "stringify", "readHeaderCell", "undefined", "readTableData", "dataOption", "dom", "defaultType", "defaultFormat", "headings", "heading", "tHead", "from", "querySelectorAll", "th", "index", "nodeToObj", "valueDiffing", "innerText", "attributes", "searchable", "sortable", "settings", "dataset", "sort", "hidden", "getAttribute", "firstRow", "firstRowCells", "cells", "_cell", "tBodies", "rows", "row", "namedNodeMapToObject", "isNaN", "parseFloat", "Rows", "dt", "cursor", "oldCursor", "_renderTable", "options", "scrollY", "cursorSelector", "classNamesToSelector", "classes", "cursorDOM", "querySelector", "scrollIntoView", "block", "emit", "columns", "push", "hasRows", "update", "select", "remove", "filter", "_row", "columnIndex", "value", "findIndex", "cellToText", "findRowIndex", "cols", "splice", "Columns", "_state", "columnOptions", "filters", "selector", "column", "render", "cellClass", "headerClass", "numeric", "caseFirst", "sensitivity", "ignorePunctuation", "sortSequence", "dir", "searchItemSeparator", "widths", "size", "_node", "newColumnSelector", "_heading", "currentFilter", "newFilterState", "returnNext", "_currentPage", "currentDir", "currentDirIndex", "collator", "Intl", "Collator", "usage", "row1", "row2", "cell1", "cell2", "order1", "order2", "temp", "compare", "_searchQueries", "multiSearch", "_measureWidths", "activeHeadings", "fixedColumns", "renderOptions", "noPaging", "header", "footer", "unhideHeader", "headerDOM", "parentElement", "removeChild", "noColumnWidths", "activeDOMHeadings", "firstElementChild", "domCounter", "absoluteColumnWidths", "width", "offsetWidth", "totalOffsetWidth", "reduce", "total", "cellWidth", "renderHeader", "defaultConfig", "destroyable", "searchQuerySeparator", "searchAnd", "paging", "perPage", "perPageSelect", "nextPrev", "firstLast", "prevText", "nextText", "firstText", "lastText", "ellipsisText", "truncatePager", "pagerDelta", "fixedHeight", "hiddenHeader", "caption", "rowNavigation", "tabIndex", "pagerRender", "rowRender", "tableRender", "diffDomOptions", "labels", "placeholder", "searchTitle", "pageTitle", "noRows", "noResults", "info", "template", "top", "dropdown", "search", "input", "id", "container", "bottom", "pagination", "active", "ascending", "descending", "disabled", "ellipsis", "filterActive", "empty", "headercontainer", "loading", "paginationList", "paginationListItem", "paginationListItemLink", "sorter", "table", "wrapper", "page", "label", "state", "class", "createVirtualPagerDOM", "onFirstPage", "onLastPage", "currentPage", "totalPages", "pagerListItems", "prev", "pages", "paginationListItems", "pagesLength", "doublePagerDelta", "previousPage", "nextPage", "paginationListItemsToModify", "li", "previousLi", "modifiedLis", "pageNumber", "previousPageNumber", "newLi", "next", "DataTable", "document", "HTMLTableElement", "createElement", "appendChild", "_initialInnerHTML", "innerHTML", "_listeners", "onResize", "_onResize", "_dd", "DiffDOM", "initialized", "_events", "hasHeadings", "containsClass", "_virtualDOM", "_tableAttributes", "_tableFooters", "_tableCaptions", "_render", "setTimeout", "wrapperDOM", "selectorClassSelector", "choice", "lab", "val", "selected", "option", "Option", "containerSelector", "containerDOM", "_pagerDOMs", "paginationSelector", "el", "HTMLElement", "_virtualPagerDOM", "infoSelector", "_label", "replaceChild", "_rect", "getBoundingClientRect", "_fixHeight", "classList", "_bindEvents", "newVirtualDOM", "dataToVirtualDOM", "renderedTableVirtualDOM", "lastRowCursor", "lastPage", "setMessage", "items", "current", "_searchData", "string", "setCursor", "_renderPagers", "newPagerVirtualDOM", "renderedPagerVirtualDOM", "diffs", "pagerDOM", "_renderSeparateHeader", "_virtualHeaderDOM", "insertBefore", "tableVirtualDOM", "headingsToVirtualHeaderRowDOM", "joinWithSpaces", "newVirtualHeaderDOM", "paddingRight", "clientWidth", "paddedVirtualHeaderDOM", "structuredClone", "style", "scrollHeight", "clientHeight", "overflowY", "HTMLSelectElement", "addEventListener", "event", "inputSelector", "target", "HTMLInputElement", "matches", "preventDefault", "searches", "andSearch", "and", "terms", "querySeparator", "term", "hyperlink", "closest", "hasAttribute", "visibleIndex", "children", "visibleToColumnIndex", "lastRow", "stopPropagation", "foundRow", "nextRow", "Element", "contains", "window", "destroy", "className", "removeEventListener", "measureWidths", "Boolean", "_paginate", "_renderPage", "filterState", "height", "rawQueries", "queries", "query", "queryWords", "columnQueries", "normalize", "idx", "searchRow", "every", "queryWord", "searchItem", "rIndex", "entries", "isObject", "refresh", "print", "tableDOM", "newTableVirtualDOM", "open", "body", "message", "colspan", "callback", "data_table_controller_default", "Controller", "it", "form_state_controller_default", "Controller", "savedState", "data", "input", "radio", "select", "checkbox", "toggle", "index", "form_submit_controller_default", "Controller", "gallery_controller_default", "Controller", "Carousel", "event", "gallery_update_controller_default", "Controller", "url", "param", "value", "logo_selection_controller_default", "Controller", "card", "destroy", "event", "value", "ownKeys", "object", "enumerableOnly", "keys", "symbols", "sym", "_objectSpread2", "target", "i", "source", "key", "_defineProperty", "_typeof", "obj", "value", "_extends", "_objectWithoutPropertiesLoose", "excluded", "sourceKeys", "_objectWithoutProperties", "sourceSymbolKeys", "version", "userAgent", "pattern", "IE11OrLess", "Edge", "FireFox", "Safari", "IOS", "ChromeForAndroid", "captureMode", "on", "el", "event", "fn", "off", "matches", "selector", "getParentOrHost", "closest", "ctx", "includeCTX", "R_SPACE", "toggleClass", "name", "state", "className", "css", "prop", "val", "style", "matrix", "selfOnly", "appliedTransforms", "transform", "matrixFn", "find", "tagName", "iterator", "list", "i", "n", "getWindowScrollingElement", "scrollingElement", "getRect", "relativeToContainingBlock", "relativeToNonStaticParent", "undoScale", "container", "elRect", "top", "left", "bottom", "right", "height", "width", "containerRect", "elMatrix", "scaleX", "scaleY", "isScrolledPast", "elSide", "parentSide", "parent", "getParentAutoScrollElement", "elSideVal", "parentSideVal", "visible", "getChild", "childNum", "options", "includeDragEl", "currentChild", "children", "Sortable", "lastChild", "last", "index", "getRelativeScrollOffset", "offsetLeft", "offsetTop", "winScroller", "indexOfObject", "arr", "obj", "key", "includeSelf", "elem", "gotSelf", "elemCSS", "extend", "dst", "src", "isRectEqual", "rect1", "rect2", "_throttleTimeout", "throttle", "callback", "ms", "args", "_this", "cancelThrottle", "scrollBy", "x", "y", "clone", "Polymer", "$", "getChildContainingRectFromElement", "container", "options", "ghostEl", "rect", "child", "_rect$left", "_rect$top", "_rect$right", "_rect$bottom", "closest", "childRect", "getRect", "expando", "AnimationStateManager", "animationStates", "animationCallbackId", "children", "css", "Sortable", "fromRect", "_objectSpread2", "childMatrix", "matrix", "state", "target", "indexOfObject", "callback", "_this", "animating", "animationTime", "time", "toRect", "prevFromRect", "prevToRect", "animatingRect", "targetMatrix", "isRectEqual", "calculateRealTime", "currentRect", "duration", "elMatrix", "scaleX", "scaleY", "translateX", "translateY", "repaint", "plugins", "defaults", "PluginManager", "plugin", "option", "p", "eventName", "sortable", "evt", "eventNameGlobal", "el", "pluginName", "initialized", "_extends", "modified", "name", "eventProperties", "value", "modifiedValue", "dispatchEvent", "_ref", "rootEl", "targetEl", "cloneEl", "toEl", "fromEl", "oldIndex", "newIndex", "oldDraggableIndex", "newDraggableIndex", "originalEvent", "putSortable", "extraEventProperties", "onName", "IE11OrLess", "Edge", "allEventProperties", "_excluded", "pluginEvent", "data", "_objectWithoutProperties", "dragEl", "parentEl", "nextEl", "lastDownEl", "cloneHidden", "moved", "_hideGhostForTarget", "_unhideGhostForTarget", "_dispatchEvent", "info", "activeGroup", "awaitingDragStarted", "ignoreNextClick", "sortables", "tapEvt", "touchEvt", "lastDx", "lastDy", "tapDistanceLeft", "tapDistanceTop", "lastTarget", "lastDirection", "pastFirstInvertThresh", "isCircumstantialInvert", "targetMoveDistance", "ghostRelativeParent", "ghostRelativeParentInitialScroll", "_silent", "savedInputChecked", "documentExists", "PositionGhostAbsolutely", "IOS", "CSSFloatProperty", "supportDraggable", "ChromeForAndroid", "supportCssPointerEvents", "_detectDirection", "elCSS", "elWidth", "child1", "getChild", "child2", "firstChildCSS", "secondChildCSS", "firstChildWidth", "secondChildWidth", "touchingSideChild2", "_dragElInRowColumn", "dragRect", "targetRect", "vertical", "dragElS1Opp", "dragElS2Opp", "dragElOppLength", "targetS1Opp", "targetS2Opp", "targetOppLength", "_detectNearestEmptySortable", "x", "y", "ret", "threshold", "lastChild", "insideHorizontally", "insideVertically", "_prepareGroup", "toFn", "pull", "to", "from", "sameGroup", "otherGroup", "group", "originalGroup", "_typeof", "nearestEmptyInsertDetectEvent", "nearest", "event", "i", "_checkOutsideTargetEl", "dataTransfer", "Safari", "fn", "on", "preventOnFilter", "type", "touch", "originalTarget", "filter", "_saveInputCheckedState", "index", "criteria", "ownerDocument", "dragStartFn", "FireFox", "toggleClass", "find", "_disableDraggable", "e", "off", "_nextTick", "fallback", "parent", "inserted", "fallbackTolerance", "fallbackOffset", "ghostMatrix", "relativeScrollOffset", "getRelativeScrollOffset", "dx", "dy", "cssMatrix", "getWindowScrollingElement", "clone", "revert", "activeSortable", "isOwner", "canSort", "fromSortable", "completedFired", "dragOverEvent", "extra", "completed", "after", "_onMove", "changed", "capture", "insertion", "elLastChild", "_ghostIsLast", "_ghostIsFirst", "firstChild", "direction", "targetBeforeFirstSwap", "differentLevel", "differentRowCol", "side1", "scrolledPastTop", "isScrolledPast", "scrollBefore", "_getSwapDirection", "sibling", "dragIndex", "nextSibling", "moveVector", "_unsilent", "scrollBy", "_cancelNextTick", "_globalDragOver", "order", "n", "_generateId", "useAnimation", "items", "id", "store", "selector", "willInsertAfter", "onMoveFn", "retVal", "firstElRect", "childContainingRect", "spacer", "lastElRect", "swapThreshold", "invertedSwapThreshold", "invertSwap", "isLastTarget", "mouseOnAxis", "targetLength", "targetS1", "targetS2", "invert", "_getInsertDirection", "str", "sum", "root", "inputs", "idx", "extend", "throttle", "element", "_len", "_key", "version", "autoScrolls", "scrollEl", "scrollRootEl", "scrolling", "lastAutoScrollX", "lastAutoScrollY", "touchEvt$1", "pointerElemChangedInterval", "AutoScrollPlugin", "AutoScroll", "_ref2", "clearPointerElemChangedInterval", "clearAutoScrolls", "cancelThrottle", "elem", "autoScroll", "ogElemScroller", "getParentAutoScrollElement", "newElem", "isFallback", "sens", "speed", "winScroller", "scrollThisInstance", "scrollCustomFn", "layersOut", "currentParent", "top", "bottom", "left", "right", "width", "height", "canScrollX", "canScrollY", "scrollWidth", "scrollHeight", "scrollPosX", "scrollPosY", "vx", "vy", "scrollOffsetY", "scrollOffsetX", "drop", "dispatchSortableEvent", "hideGhostForTarget", "unhideGhostForTarget", "toSortable", "Revert", "_ref3", "Remove", "_ref4", "parentSortable", "Sortable", "AutoScrollPlugin", "Remove", "Revert", "sortable_esm_default", "manage_gallery_controller_default", "Controller", "sortable_esm_default", "evt", "item", "index", "event", "imageId", "imagePanel", "destroyInput", "panel", "parent_click_controller_default", "Controller", "e", "personalization_warning_controller_default", "Controller", "event", "personalization", "position_picker_controller_default", "Controller", "xPercent", "yPercent", "scalePercentage", "originalWidth", "originalHeight", "scaledWidth", "scaledHeight", "event", "dx", "dy", "currentLeft", "currentTop", "rect", "overlayRect", "resizable_rectangle_controller_default", "Controller", "topLeftX", "topLeftY", "bottomRightX", "bottomRightY", "x", "y", "p1", "p2", "mouse", "w", "h", "e", "mousePos", "dx", "dy", "newX1", "newY1", "newY2", "newX3", "handle", "search_controller_default", "Controller", "event", "searchText", "row", "isMatch", "cell", "show_modal_controller_default", "Controller", "Modal", "show_shipping_controller_default", "Controller", "field", "sortable_form_controller_default", "Controller", "sortable_esm_default", "event", "l", "e", "r", "t", "n", "i", "d", "o", "c", "a", "m", "f", "S", "s", "p", "w", "u", "q", "E", "square_payments_controller_default", "Controller", "E", "event", "tokenizeResult", "verificationDetails", "verificationResult", "payment_token", "verification_token", "submitPaymentResponse", "response", "genericError", "errorData", "moneyFormatter", "subtotal_controller_default", "Controller", "subtotal", "personalization", "toggle_checkout_controller_default", "Controller", "inputResult", "input", "radioResult", "radioGroups", "radio", "radioTargets", "elem", "toggle_personalization_controller_default", "Controller", "bool", "tooltip_controller_default", "Controller", "Tooltip", "upcase_fields_controller_default", "Controller", "input", "application", "discount_codes_controller_default", "anchor_link_controller_default", "case_consideration_controller_default", "check_visibility_controller_default", "data_table_controller_default", "form_state_controller_default", "form_submit_controller_default", "gallery_controller_default", "gallery_update_controller_default", "logo_selection_controller_default", "manage_gallery_controller_default", "parent_click_controller_default", "personalization_warning_controller_default", "position_picker_controller_default", "resizable_rectangle_controller_default", "search_controller_default", "show_modal_controller_default", "show_shipping_controller_default", "sortable_form_controller_default", "square_payments_controller_default", "subtotal_controller_default", "toggle_checkout_controller_default", "toggle_personalization_controller_default", "tooltip_controller_default", "upcase_fields_controller_default", "turbo_es2017_esm_exports", "__export", "FetchEnctype", "FetchMethod", "FetchRequest", "FetchResponse", "FrameElement", "FrameLoadingStyle", "FrameRenderer", "PageRenderer", "PageSnapshot", "StreamActions", "StreamElement", "StreamSourceElement", "cache", "clearCache", "connectStreamSource", "disconnectStreamSource", "fetchWithTurboHeaders", "fetchEnctypeFromString", "fetchMethodFromString", "isSafe", "navigator$1", "registerAdapter", "renderStreamMessage", "session", "setConfirmMethod", "setFormMode", "setProgressBarDelay", "start", "visit", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "prototypeOfSubmitEvent", "_FrameElement", "value", "frameLoadingStyleFromString", "style", "expandURL", "locatable", "getAnchor", "url", "anchorMatch", "getAction$1", "action", "getExtension", "getLastPathComponent", "isHTML", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "response", "activateScriptElement", "createdScriptElement", "cspNonce", "getMetaContent", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "nextRepaint", "nextEventLoopTick", "nextAnimationFrame", "resolve", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "i", "uuid", "_", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "isAction", "getVisitAction", "getMetaElement", "setMetaContent", "content", "findClosestRecursively", "selector", "elementIsFocusable", "inertDisabledOrHidden", "queryAutofocusableElement", "elementOrDocumentFragment", "around", "callback", "reader", "before", "after", "doesNotTargetIFrame", "findLinkFromClickTarget", "getLocationForLink", "link", "debounce", "fn", "delay", "timeoutId", "args", "LimitedSet", "maxSize", "oldestValue", "recentRequests", "nativeFetch", "options", "modifiedHeaders", "requestUID", "method", "encoding", "#resolveRequestPromise", "_value", "delegate", "requestBody", "enctype", "body", "buildResourceAndBody", "fetchBody", "fetchMethod", "fetchOptions", "#allowRequestToBeIntercepted", "error", "#willDelegateErrorHandling", "fetchResponse", "mimeType", "requestInterception", "resource", "searchParams", "entriesExcludingFiles", "mergeIntoURLSearchParams", "entries", "AppearanceObserver", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "PREFETCH_DELAY", "PrefetchCache", "#prefetchTimeout", "#prefetched", "request", "ttl", "cacheTtl", "prefetchCache", "FormSubmissionState", "FormSubmission", "_FormSubmission", "_element", "_submitter", "formElement", "mustRedirect", "getMethod", "getAction", "getFormAction", "buildFormData", "getEnctype", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "formElementAction", "formAction", "Snapshot", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "View", "#resolveRenderPromise", "#resolveInterceptionPromise", "x", "y", "renderer", "isPreview", "shouldRender", "willRender", "shouldInvalidate", "renderInterception", "reason", "direction", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "Renderer", "#activeElement", "currentSnapshot", "newSnapshot", "renderElement", "reject", "currentElement", "newElement", "destinationRange", "frameElement", "sourceRange", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "ProgressBar", "_ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "tagName", "_PageSnapshot", "documentElement", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "index", "source", "option", "clonedPasswordInput", "root", "ViewTransitioner", "#viewTransitionStarted", "#lastOperation", "useViewTransition", "render", "defaultOptions", "TimingMetric", "VisitState", "SystemStatusCode", "Direction", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "_visit", "_formSubmission", "CacheObserver", "FrameRedirector", "_location", "#shouldRedirect", "frame", "#findFrameElement", "#shouldSubmit", "meta", "History", "state", "additionalData", "restorationData", "turbo", "restorationIndex", "LinkPrefetchObserver", "#prefetchedLink", "#enable", "#tryToPrefetchRequest", "#cancelRequestIfObsolete", "#tryToUsePrefetchedRequest", "#isPrefetchable", "fetchRequest", "#cacheTtl", "#cancelPrefetchRequest", "cached", "turboFrameTarget", "unfetchableLink", "linkToTheSamePage", "linkOptsOut", "nonSafeLink", "eventPrevented", "turboPrefetchParent", "turboMethod", "isUJS", "Navigator", "formSubmission", "visitOptions", "#getActionForFormSubmission", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "#getDefaultAction", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "withAutofocusFromFragment", "withPreservedFocus", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "generatedID", "turboStreams", "elementWithAutofocus", "firstAutofocusableElementInStreams", "willAutofocusId", "elementToAutofocus", "activeElementBeforeRender", "activeElementAfterRender", "restoreFocusTo", "elementToFocus", "nodeListOfStreamElements", "StreamObserver", "#started", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "replaceableElement", "parentNode", "Idiomorph", "EMPTY_SET", "defaults", "noOp", "elt", "morph", "oldNode", "newContent", "config", "parseContent", "normalizedContent", "normalizeContent", "ctx", "createMorphContext", "morphNormalizedContent", "normalizedNewContent", "oldHead", "newHead", "promises", "handleHeadElement", "morphChildren", "bestMatch", "findBestNodeMatch", "previousSibling", "nextSibling", "morphedNode", "morphOldNodeTo", "insertSiblings", "ignoreValueOfActiveElement", "possibleActiveElement", "isSoftMatch", "syncNodeFrom", "newParent", "oldParent", "nextNewChild", "insertionPoint", "newChild", "removeIdsFromConsideration", "isIdSetMatch", "idSetMatch", "findIdSetMatch", "removeNodesBetween", "softMatch", "findSoftMatch", "tempNode", "removeNode", "ignoreAttribute", "attr", "to", "updateType", "from", "fromAttributes", "toAttributes", "fromAttribute", "toAttribute", "syncInputValue", "syncBooleanAttribute", "ignoreUpdate", "fromValue", "toValue", "newHeadTag", "currentHead", "added", "removed", "preserved", "nodesToAppend", "headMergeStyle", "srcToNewHeadNodes", "newHeadChild", "currentHeadElt", "inNewContent", "isReAppended", "isPreserved", "newNode", "newElt", "promise", "_resolve", "removedElement", "mergeDefaults", "finalConfig", "createIdMap", "node1", "node2", "getIdIntersectionCount", "startInclusive", "endExclusive", "newChildPotentialIdCount", "potentialMatch", "otherMatchCount", "potentialSoftMatch", "siblingSoftMatchCount", "parser", "contentWithSvgsRemoved", "htmlElement", "dummyParent", "stack", "bestElement", "score", "newScore", "scoreElement", "isIdInConsideration", "idIsWithinNode", "targetNode", "idSet", "sourceSet", "matchCount", "populateIdMapForNode", "idMap", "nodeParent", "idElements", "current", "oldContent", "#setLanguage", "lang", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "MorphRenderer", "#morphBody", "#morphElements", "#reloadRemoteFrames", "morphStyle", "#isFrameReloadedWithMorph", "#shouldAddElement", "#shouldMorphElement", "#shouldUpdateAttribute", "#shouldRemoveElement", "#didMorphElement", "mutationType", "#remoteFrames", "#renderFrameWithMorph", "#morphFrameUpdate", "SnapshotCache", "size", "key", "PageView", "rendererClass", "cachedSnapshot", "Preloader", "snapshotCache", "#preloadAll", "Cache", "#setCacheControl", "Session", "#pageRefreshDebouncePeriod", "adapter", "requestId", "mode", "isUnsafe", "isStream", "frameTarget", "extendURLWithDeprecatedProperties", "defaultPrevented", "_snapshot", "_isPreview", "renderMethod", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "confirmMethod", "Turbo", "TurboFrameMissingError", "FrameController", "_fetchResponse", "#currentFetchRequest", "#resolveVisitPromise", "#connected", "#hasBeenLoaded", "#ignoredAttributes", "#loadSourceURL", "#isIgnoringChangesTo", "src", "#ignoringChangesToAttribute", "#visit", "document", "#loadFrameResponse", "#handleUnvisitableFrameResponse", "#shouldInterceptNavigation", "#navigateFrame", "newFrame", "_renderMethod", "_newElement", "newFrameElement", "#willHandleFrameMissingFromResponse", "#handleFrameMissingFromResponse", "#withCurrentNavigationElement", "pageSnapshot", "#visitResponse", "#throwFrameMissingError", "wrapped", "getFrameElementById", "activateElement", "#formActionIsVisitable", "sourceURL", "currentURL", "e", "targetElement", "_StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "#raise", "consumer", "getConsumer", "setConsumer", "createConsumer", "newConsumer", "subscribeTo", "channel", "mixin", "subscriptions", "walk", "obj", "acc", "key", "camel", "m", "x", "TurboCableStreamSourceElement", "connectStreamSource", "subscribeTo", "disconnectStreamSource", "data", "event", "channel", "signed_stream_name", "walk", "encodeMethodIntoRequestBody", "event", "form", "fetchOptions", "submitter", "body", "isBodyInit", "method", "determineFetchMethod", "formMethod", "determineFormMethod", "overrideMethod", "turbo_es2017_esm_exports", "encodeMethodIntoRequestBody"] }