app/assets/build/coco/book.js in coveragebook_components-0.5.2 vs app/assets/build/coco/book.js in coveragebook_components-0.5.3
- old
+ new
@@ -32,13 +32,10 @@
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
- var __esm = (fn3, res) => function __init() {
- return fn3 && (res = (0, fn3[__getOwnPropNames(fn3)[0]])(fn3 = 0)), res;
- };
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
@@ -59,579 +56,10 @@
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
- // ../../../node_modules/@rails/actioncable/src/adapters.js
- var adapters_default;
- var init_adapters = __esm({
- "../../../node_modules/@rails/actioncable/src/adapters.js"() {
- adapters_default = {
- logger: self.console,
- WebSocket: self.WebSocket
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/logger.js
- var logger_default;
- var init_logger = __esm({
- "../../../node_modules/@rails/actioncable/src/logger.js"() {
- init_adapters();
- logger_default = {
- log(...messages) {
- if (this.enabled) {
- messages.push(Date.now());
- adapters_default.logger.log("[ActionCable]", ...messages);
- }
- }
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/connection_monitor.js
- var now, secondsSince, ConnectionMonitor, connection_monitor_default;
- var init_connection_monitor = __esm({
- "../../../node_modules/@rails/actioncable/src/connection_monitor.js"() {
- init_logger();
- now = () => (/* @__PURE__ */ new Date()).getTime();
- secondsSince = (time) => (now() - time) / 1e3;
- ConnectionMonitor = class {
- constructor(connection) {
- this.visibilityDidChange = this.visibilityDidChange.bind(this);
- this.connection = connection;
- this.reconnectAttempts = 0;
- }
- start() {
- if (!this.isRunning()) {
- this.startedAt = now();
- delete this.stoppedAt;
- this.startPolling();
- addEventListener("visibilitychange", this.visibilityDidChange);
- logger_default.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`);
- }
- }
- stop() {
- if (this.isRunning()) {
- this.stoppedAt = now();
- this.stopPolling();
- removeEventListener("visibilitychange", this.visibilityDidChange);
- logger_default.log("ConnectionMonitor stopped");
- }
- }
- isRunning() {
- return this.startedAt && !this.stoppedAt;
- }
- recordPing() {
- this.pingedAt = now();
- }
- recordConnect() {
- this.reconnectAttempts = 0;
- this.recordPing();
- delete this.disconnectedAt;
- logger_default.log("ConnectionMonitor recorded connect");
- }
- recordDisconnect() {
- this.disconnectedAt = now();
- logger_default.log("ConnectionMonitor recorded disconnect");
- }
- // Private
- startPolling() {
- this.stopPolling();
- this.poll();
- }
- stopPolling() {
- clearTimeout(this.pollTimeout);
- }
- poll() {
- this.pollTimeout = setTimeout(
- () => {
- this.reconnectIfStale();
- this.poll();
- },
- this.getPollInterval()
- );
- }
- getPollInterval() {
- const { staleThreshold, reconnectionBackoffRate } = this.constructor;
- const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10));
- const jitterMax = this.reconnectAttempts === 0 ? 1 : reconnectionBackoffRate;
- const jitter = jitterMax * Math.random();
- return staleThreshold * 1e3 * backoff * (1 + jitter);
- }
- reconnectIfStale() {
- if (this.connectionIsStale()) {
- logger_default.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`);
- this.reconnectAttempts++;
- if (this.disconnectedRecently()) {
- logger_default.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`);
- } else {
- logger_default.log("ConnectionMonitor reopening");
- this.connection.reopen();
- }
- }
- }
- get refreshedAt() {
- return this.pingedAt ? this.pingedAt : this.startedAt;
- }
- connectionIsStale() {
- return secondsSince(this.refreshedAt) > this.constructor.staleThreshold;
- }
- disconnectedRecently() {
- return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;
- }
- visibilityDidChange() {
- if (document.visibilityState === "visible") {
- setTimeout(
- () => {
- if (this.connectionIsStale() || !this.connection.isOpen()) {
- logger_default.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`);
- this.connection.reopen();
- }
- },
- 200
- );
- }
- }
- };
- ConnectionMonitor.staleThreshold = 6;
- ConnectionMonitor.reconnectionBackoffRate = 0.15;
- connection_monitor_default = ConnectionMonitor;
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/internal.js
- var internal_default;
- var init_internal = __esm({
- "../../../node_modules/@rails/actioncable/src/internal.js"() {
- internal_default = {
- "message_types": {
- "welcome": "welcome",
- "disconnect": "disconnect",
- "ping": "ping",
- "confirmation": "confirm_subscription",
- "rejection": "reject_subscription"
- },
- "disconnect_reasons": {
- "unauthorized": "unauthorized",
- "invalid_request": "invalid_request",
- "server_restart": "server_restart"
- },
- "default_mount_path": "/cable",
- "protocols": [
- "actioncable-v1-json",
- "actioncable-unsupported"
- ]
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/connection.js
- var message_types, protocols, supportedProtocols, indexOf, Connection, connection_default;
- var init_connection = __esm({
- "../../../node_modules/@rails/actioncable/src/connection.js"() {
- init_adapters();
- init_connection_monitor();
- init_internal();
- init_logger();
- ({ message_types, protocols } = internal_default);
- supportedProtocols = protocols.slice(0, protocols.length - 1);
- indexOf = [].indexOf;
- Connection = class {
- constructor(consumer2) {
- this.open = this.open.bind(this);
- this.consumer = consumer2;
- this.subscriptions = this.consumer.subscriptions;
- this.monitor = new connection_monitor_default(this);
- this.disconnected = true;
- }
- send(data2) {
- if (this.isOpen()) {
- this.webSocket.send(JSON.stringify(data2));
- return true;
- } else {
- return false;
- }
- }
- open() {
- if (this.isActive()) {
- logger_default.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);
- return false;
- } else {
- logger_default.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);
- if (this.webSocket) {
- this.uninstallEventHandlers();
- }
- this.webSocket = new adapters_default.WebSocket(this.consumer.url, protocols);
- this.installEventHandlers();
- this.monitor.start();
- return true;
- }
- }
- close({ allowReconnect } = { allowReconnect: true }) {
- if (!allowReconnect) {
- this.monitor.stop();
- }
- if (this.isOpen()) {
- return this.webSocket.close();
- }
- }
- reopen() {
- logger_default.log(`Reopening WebSocket, current state is ${this.getState()}`);
- if (this.isActive()) {
- try {
- return this.close();
- } catch (error2) {
- logger_default.log("Failed to reopen WebSocket", error2);
- } finally {
- logger_default.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`);
- setTimeout(this.open, this.constructor.reopenDelay);
- }
- } else {
- return this.open();
- }
- }
- getProtocol() {
- if (this.webSocket) {
- return this.webSocket.protocol;
- }
- }
- isOpen() {
- return this.isState("open");
- }
- isActive() {
- return this.isState("open", "connecting");
- }
- // Private
- isProtocolSupported() {
- return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;
- }
- isState(...states) {
- return indexOf.call(states, this.getState()) >= 0;
- }
- getState() {
- if (this.webSocket) {
- for (let state in adapters_default.WebSocket) {
- if (adapters_default.WebSocket[state] === this.webSocket.readyState) {
- return state.toLowerCase();
- }
- }
- }
- return null;
- }
- installEventHandlers() {
- for (let eventName in this.events) {
- const handler3 = this.events[eventName].bind(this);
- this.webSocket[`on${eventName}`] = handler3;
- }
- }
- uninstallEventHandlers() {
- for (let eventName in this.events) {
- this.webSocket[`on${eventName}`] = function() {
- };
- }
- }
- };
- Connection.reopenDelay = 500;
- Connection.prototype.events = {
- message(event) {
- if (!this.isProtocolSupported()) {
- return;
- }
- const { identifier, message, reason, reconnect, type } = JSON.parse(event.data);
- switch (type) {
- case message_types.welcome:
- this.monitor.recordConnect();
- return this.subscriptions.reload();
- case message_types.disconnect:
- logger_default.log(`Disconnecting. Reason: ${reason}`);
- return this.close({ allowReconnect: reconnect });
- case message_types.ping:
- return this.monitor.recordPing();
- case message_types.confirmation:
- this.subscriptions.confirmSubscription(identifier);
- return this.subscriptions.notify(identifier, "connected");
- case message_types.rejection:
- return this.subscriptions.reject(identifier);
- default:
- return this.subscriptions.notify(identifier, "received", message);
- }
- },
- open() {
- logger_default.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`);
- this.disconnected = false;
- if (!this.isProtocolSupported()) {
- logger_default.log("Protocol is unsupported. Stopping monitor and disconnecting.");
- return this.close({ allowReconnect: false });
- }
- },
- close(event) {
- logger_default.log("WebSocket onclose event");
- if (this.disconnected) {
- return;
- }
- this.disconnected = true;
- this.monitor.recordDisconnect();
- return this.subscriptions.notifyAll("disconnected", { willAttemptReconnect: this.monitor.isRunning() });
- },
- error() {
- logger_default.log("WebSocket onerror event");
- }
- };
- connection_default = Connection;
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/subscription.js
- var extend, Subscription;
- var init_subscription = __esm({
- "../../../node_modules/@rails/actioncable/src/subscription.js"() {
- extend = function(object, properties) {
- if (properties != null) {
- for (let key in properties) {
- const value = properties[key];
- object[key] = value;
- }
- }
- return object;
- };
- Subscription = class {
- constructor(consumer2, params = {}, mixin) {
- this.consumer = consumer2;
- this.identifier = JSON.stringify(params);
- extend(this, mixin);
- }
- // Perform a channel action with the optional data passed as an attribute
- perform(action, data2 = {}) {
- data2.action = action;
- return this.send(data2);
- }
- send(data2) {
- return this.consumer.send({ command: "message", identifier: this.identifier, data: JSON.stringify(data2) });
- }
- unsubscribe() {
- return this.consumer.subscriptions.remove(this);
- }
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/subscription_guarantor.js
- var SubscriptionGuarantor, subscription_guarantor_default;
- var init_subscription_guarantor = __esm({
- "../../../node_modules/@rails/actioncable/src/subscription_guarantor.js"() {
- init_logger();
- SubscriptionGuarantor = class {
- constructor(subscriptions) {
- this.subscriptions = subscriptions;
- this.pendingSubscriptions = [];
- }
- guarantee(subscription) {
- if (this.pendingSubscriptions.indexOf(subscription) == -1) {
- logger_default.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`);
- this.pendingSubscriptions.push(subscription);
- } else {
- logger_default.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`);
- }
- this.startGuaranteeing();
- }
- forget(subscription) {
- logger_default.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`);
- this.pendingSubscriptions = this.pendingSubscriptions.filter((s2) => s2 !== subscription);
- }
- startGuaranteeing() {
- this.stopGuaranteeing();
- this.retrySubscribing();
- }
- stopGuaranteeing() {
- clearTimeout(this.retryTimeout);
- }
- retrySubscribing() {
- this.retryTimeout = setTimeout(
- () => {
- if (this.subscriptions && typeof this.subscriptions.subscribe === "function") {
- this.pendingSubscriptions.map((subscription) => {
- logger_default.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`);
- this.subscriptions.subscribe(subscription);
- });
- }
- },
- 500
- );
- }
- };
- subscription_guarantor_default = SubscriptionGuarantor;
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/subscriptions.js
- var Subscriptions;
- var init_subscriptions = __esm({
- "../../../node_modules/@rails/actioncable/src/subscriptions.js"() {
- init_subscription();
- init_subscription_guarantor();
- init_logger();
- Subscriptions = class {
- constructor(consumer2) {
- this.consumer = consumer2;
- this.guarantor = new subscription_guarantor_default(this);
- this.subscriptions = [];
- }
- create(channelName, mixin) {
- const channel = channelName;
- const params = typeof channel === "object" ? channel : { channel };
- const subscription = new Subscription(this.consumer, params, mixin);
- return this.add(subscription);
- }
- // Private
- add(subscription) {
- this.subscriptions.push(subscription);
- this.consumer.ensureActiveConnection();
- this.notify(subscription, "initialized");
- this.subscribe(subscription);
- return subscription;
- }
- remove(subscription) {
- this.forget(subscription);
- if (!this.findAll(subscription.identifier).length) {
- this.sendCommand(subscription, "unsubscribe");
- }
- return subscription;
- }
- reject(identifier) {
- return this.findAll(identifier).map((subscription) => {
- this.forget(subscription);
- this.notify(subscription, "rejected");
- return subscription;
- });
- }
- forget(subscription) {
- this.guarantor.forget(subscription);
- this.subscriptions = this.subscriptions.filter((s2) => s2 !== subscription);
- return subscription;
- }
- findAll(identifier) {
- return this.subscriptions.filter((s2) => s2.identifier === identifier);
- }
- reload() {
- return this.subscriptions.map((subscription) => this.subscribe(subscription));
- }
- notifyAll(callbackName, ...args) {
- return this.subscriptions.map((subscription) => this.notify(subscription, callbackName, ...args));
- }
- notify(subscription, callbackName, ...args) {
- let subscriptions;
- if (typeof subscription === "string") {
- subscriptions = this.findAll(subscription);
- } else {
- subscriptions = [subscription];
- }
- return subscriptions.map((subscription2) => typeof subscription2[callbackName] === "function" ? subscription2[callbackName](...args) : void 0);
- }
- subscribe(subscription) {
- if (this.sendCommand(subscription, "subscribe")) {
- this.guarantor.guarantee(subscription);
- }
- }
- confirmSubscription(identifier) {
- logger_default.log(`Subscription confirmed ${identifier}`);
- this.findAll(identifier).map((subscription) => this.guarantor.forget(subscription));
- }
- sendCommand(subscription, command) {
- const { identifier } = subscription;
- return this.consumer.send({ command, identifier });
- }
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/consumer.js
- function createWebSocketURL(url) {
- if (typeof url === "function") {
- url = url();
- }
- if (url && !/^wss?:/i.test(url)) {
- const a2 = document.createElement("a");
- a2.href = url;
- a2.href = a2.href;
- a2.protocol = a2.protocol.replace("http", "ws");
- return a2.href;
- } else {
- return url;
- }
- }
- var Consumer;
- var init_consumer = __esm({
- "../../../node_modules/@rails/actioncable/src/consumer.js"() {
- init_connection();
- init_subscriptions();
- Consumer = class {
- constructor(url) {
- this._url = url;
- this.subscriptions = new Subscriptions(this);
- this.connection = new connection_default(this);
- }
- get url() {
- return createWebSocketURL(this._url);
- }
- send(data2) {
- return this.connection.send(data2);
- }
- connect() {
- return this.connection.open();
- }
- disconnect() {
- return this.connection.close({ allowReconnect: false });
- }
- ensureActiveConnection() {
- if (!this.connection.isActive()) {
- return this.connection.open();
- }
- }
- };
- }
- });
-
- // ../../../node_modules/@rails/actioncable/src/index.js
- var src_exports = {};
- __export(src_exports, {
- Connection: () => connection_default,
- ConnectionMonitor: () => connection_monitor_default,
- Consumer: () => Consumer,
- INTERNAL: () => internal_default,
- Subscription: () => Subscription,
- SubscriptionGuarantor: () => subscription_guarantor_default,
- Subscriptions: () => Subscriptions,
- adapters: () => adapters_default,
- createConsumer: () => createConsumer,
- createWebSocketURL: () => createWebSocketURL,
- getConfig: () => getConfig,
- logger: () => logger_default
- });
- function createConsumer(url = getConfig("url") || internal_default.default_mount_path) {
- return new Consumer(url);
- }
- function getConfig(name) {
- const element = document.head.querySelector(`meta[name='action-cable-${name}']`);
- if (element) {
- return element.getAttribute("content");
- }
- }
- var init_src = __esm({
- "../../../node_modules/@rails/actioncable/src/index.js"() {
- init_connection();
- init_connection_monitor();
- init_consumer();
- init_internal();
- init_subscription();
- init_subscriptions();
- init_subscription_guarantor();
- init_adapters();
- init_logger();
- }
- });
-
// ../../../node_modules/lodash/lodash.js
var require_lodash = __commonJS({
"../../../node_modules/lodash/lodash.js"(exports, module) {
(function() {
var undefined2;
@@ -1191,12 +619,12 @@
function baseValues(object, props) {
return arrayMap(props, function(key) {
return object[key];
});
}
- function cacheHas(cache2, key) {
- return cache2.has(key);
+ function cacheHas(cache, key) {
+ return cache.has(key);
}
function charsStartIndex(strSymbols, chrSymbols) {
var index = -1, length = strSymbols.length;
while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {
}
@@ -1319,11 +747,11 @@
function unicodeWords(string) {
return string.match(reUnicodeWord) || [];
}
var runInContext = function runInContext2(context) {
context = context == null ? root : _2.defaults(root.Object(), context, _2.pick(root, contextProps));
- var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
+ var Array2 = context.Array, Date = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype;
var coreJsData = context["__core-js_shared__"];
var funcToString = funcProto.toString;
var hasOwnProperty3 = objectProto.hasOwnProperty;
var idCounter2 = 0;
@@ -1344,12 +772,12 @@
func({}, "", {});
return func;
} catch (e2) {
}
}();
- var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
- var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse;
+ var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, ctxNow = Date && Date.now !== root.Date.now && Date.now, ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
+ var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse;
var DataView = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap2 = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create");
var metaMap = WeakMap2 && new WeakMap2();
var realNames = {};
var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2);
var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2;
@@ -1467,11 +895,11 @@
result2.__dir__ *= -1;
}
return result2;
}
function lazyValue() {
- var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start4 = view.start, end2 = view.end, length = end2 - start4, index = isRight ? end2 : start4 - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
+ var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start3 = view.start, end2 = view.end, length = end2 - start3, index = isRight ? end2 : start3 - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
if (!isArr || !isRight && arrLength == length && takeCount == length) {
return baseWrapperValue(array, this.__actions__);
}
var result2 = [];
outer:
@@ -1902,23 +1330,23 @@
var computed = current, result2 = value;
}
}
return result2;
}
- function baseFill(array, value, start4, end2) {
+ function baseFill(array, value, start3, end2) {
var length = array.length;
- start4 = toInteger(start4);
- if (start4 < 0) {
- start4 = -start4 > length ? 0 : length + start4;
+ start3 = toInteger(start3);
+ if (start3 < 0) {
+ start3 = -start3 > length ? 0 : length + start3;
}
end2 = end2 === undefined2 || end2 > length ? length : toInteger(end2);
if (end2 < 0) {
end2 += length;
}
- end2 = start4 > end2 ? 0 : toLength(end2);
- while (start4 < end2) {
- array[start4++] = value;
+ end2 = start3 > end2 ? 0 : toLength(end2);
+ while (start3 < end2) {
+ array[start3++] = value;
}
return array;
}
function baseFilter(collection, predicate) {
var result2 = [];
@@ -1985,12 +1413,12 @@
return object != null && hasOwnProperty3.call(object, key);
}
function baseHasIn(object, key) {
return object != null && key in Object2(object);
}
- function baseInRange(number, start4, end2) {
- return number >= nativeMin(start4, end2) && number < nativeMax(start4, end2);
+ function baseInRange(number, start3, end2) {
+ return number >= nativeMin(start3, end2) && number < nativeMax(start3, end2);
}
function baseIntersection(arrays, iteratee2, comparator) {
var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = [];
while (othIndex--) {
var array = arrays[othIndex];
@@ -2007,12 +1435,12 @@
var value = array[index], computed = iteratee2 ? iteratee2(value) : value;
value = comparator || value !== 0 ? value : 0;
if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) {
othIndex = othLength;
while (--othIndex) {
- var cache2 = caches[othIndex];
- if (!(cache2 ? cacheHas(cache2, computed) : includes2(arrays[othIndex], computed, comparator))) {
+ var cache = caches[othIndex];
+ if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) {
continue outer;
}
}
if (seen) {
seen.push(computed);
@@ -2308,20 +1736,20 @@
return function(object) {
return baseGet(object, path);
};
}
function basePullAll(array, values2, iteratee2, comparator) {
- var indexOf3 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array;
+ var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values2.length, seen = array;
if (array === values2) {
values2 = copyArray(values2);
}
if (iteratee2) {
seen = arrayMap(array, baseUnary(iteratee2));
}
while (++index < length) {
var fromIndex = 0, value = values2[index], computed = iteratee2 ? iteratee2(value) : value;
- while ((fromIndex = indexOf3(seen, computed, fromIndex, comparator)) > -1) {
+ while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) {
if (seen !== array) {
splice.call(seen, fromIndex, 1);
}
splice.call(array, fromIndex, 1);
}
@@ -2344,15 +1772,15 @@
return array;
}
function baseRandom(lower, upper) {
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}
- function baseRange(start4, end2, step, fromRight) {
- var index = -1, length = nativeMax(nativeCeil((end2 - start4) / (step || 1)), 0), result2 = Array2(length);
+ function baseRange(start3, end2, step, fromRight) {
+ var index = -1, length = nativeMax(nativeCeil((end2 - start3) / (step || 1)), 0), result2 = Array2(length);
while (length--) {
- result2[fromRight ? length : ++index] = start4;
- start4 += step;
+ result2[fromRight ? length : ++index] = start3;
+ start3 += step;
}
return result2;
}
function baseRepeat(string, n2) {
var result2 = "";
@@ -2368,12 +1796,12 @@
string += string;
}
} while (n2);
return result2;
}
- function baseRest(func, start4) {
- return setToString(overRest(func, start4, identity), func + "");
+ function baseRest(func, start3) {
+ return setToString(overRest(func, start3, identity), func + "");
}
function baseSample(collection) {
return arraySample(values(collection));
}
function baseSampleSize(collection, n2) {
@@ -2416,24 +1844,24 @@
});
};
function baseShuffle(collection) {
return shuffleSelf(values(collection));
}
- function baseSlice(array, start4, end2) {
+ function baseSlice(array, start3, end2) {
var index = -1, length = array.length;
- if (start4 < 0) {
- start4 = -start4 > length ? 0 : length + start4;
+ if (start3 < 0) {
+ start3 = -start3 > length ? 0 : length + start3;
}
end2 = end2 > length ? length : end2;
if (end2 < 0) {
end2 += length;
}
- length = start4 > end2 ? 0 : end2 - start4 >>> 0;
- start4 >>>= 0;
+ length = start3 > end2 ? 0 : end2 - start3 >>> 0;
+ start3 >>>= 0;
var result2 = Array2(length);
while (++index < length) {
- result2[index] = array[index + start4];
+ result2[index] = array[index + start3];
}
return result2;
}
function baseSome(collection, predicate) {
var result2;
@@ -2619,14 +2047,14 @@
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
var castRest = baseRest;
- function castSlice(array, start4, end2) {
+ function castSlice(array, start3, end2) {
var length = array.length;
end2 = end2 === undefined2 ? length : end2;
- return !start4 && end2 >= length ? array : baseSlice(array, start4, end2);
+ return !start3 && end2 >= length ? array : baseSlice(array, start3, end2);
}
var clearTimeout2 = ctxClearTimeout || function(id) {
return root.clearTimeout(id);
};
function cloneBuffer(buffer, isDeep) {
@@ -3040,23 +2468,23 @@
return apply(fn3, isBind ? thisArg : this, args);
}
return wrapper;
}
function createRange(fromRight) {
- return function(start4, end2, step) {
- if (step && typeof step != "number" && isIterateeCall(start4, end2, step)) {
+ return function(start3, end2, step) {
+ if (step && typeof step != "number" && isIterateeCall(start3, end2, step)) {
end2 = step = undefined2;
}
- start4 = toFinite(start4);
+ start3 = toFinite(start3);
if (end2 === undefined2) {
- end2 = start4;
- start4 = 0;
+ end2 = start3;
+ start3 = 0;
} else {
end2 = toFinite(end2);
}
- step = step === undefined2 ? start4 < end2 ? 1 : -1 : toFinite(step);
- return baseRange(start4, end2, step, fromRight);
+ step = step === undefined2 ? start3 < end2 ? 1 : -1 : toFinite(step);
+ return baseRange(start3, end2, step, fromRight);
};
}
function createRelationalOperation(operator) {
return function(value, other) {
if (!(typeof value == "string" && typeof other == "string")) {
@@ -3423,30 +2851,30 @@
}
}
return result2;
};
}
- function getView(start4, end2, transforms) {
+ function getView(start3, end2, transforms) {
var index = -1, length = transforms.length;
while (++index < length) {
var data2 = transforms[index], size3 = data2.size;
switch (data2.type) {
case "drop":
- start4 += size3;
+ start3 += size3;
break;
case "dropRight":
end2 -= size3;
break;
case "take":
- end2 = nativeMin(end2, start4 + size3);
+ end2 = nativeMin(end2, start3 + size3);
break;
case "takeRight":
- start4 = nativeMax(start4, end2 - size3);
+ start3 = nativeMax(start3, end2 - size3);
break;
}
}
- return { "start": start4, "end": end2 };
+ return { "start": start3, "end": end2 };
}
function getWrapDetails(source) {
var match = source.match(reWrapDetails);
return match ? match[1].split(reSplitDetails) : [];
}
@@ -3582,16 +3010,16 @@
return object[key] === srcValue && (srcValue !== undefined2 || key in Object2(object));
};
}
function memoizeCapped(func) {
var result2 = memoize(func, function(key) {
- if (cache2.size === MAX_MEMOIZE_SIZE) {
- cache2.clear();
+ if (cache.size === MAX_MEMOIZE_SIZE) {
+ cache.clear();
}
return key;
});
- var cache2 = result2.cache;
+ var cache = result2.cache;
return result2;
}
function mergeData(data2, source) {
var bitmask = data2[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data2[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG;
@@ -3638,23 +3066,23 @@
return result2;
}
function objectToString2(value) {
return nativeObjectToString.call(value);
}
- function overRest(func, start4, transform2) {
- start4 = nativeMax(start4 === undefined2 ? func.length - 1 : start4, 0);
+ function overRest(func, start3, transform2) {
+ start3 = nativeMax(start3 === undefined2 ? func.length - 1 : start3, 0);
return function() {
- var args = arguments, index = -1, length = nativeMax(args.length - start4, 0), array = Array2(length);
+ var args = arguments, index = -1, length = nativeMax(args.length - start3, 0), array = Array2(length);
while (++index < length) {
- array[index] = args[start4 + index];
+ array[index] = args[start3 + index];
}
index = -1;
- var otherArgs = Array2(start4 + 1);
- while (++index < start4) {
+ var otherArgs = Array2(start3 + 1);
+ while (++index < start3) {
otherArgs[index] = args[index];
}
- otherArgs[start4] = transform2(array);
+ otherArgs[start3] = transform2(array);
return apply(func, this, otherArgs);
};
}
function parent(object, path) {
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
@@ -3835,20 +3263,20 @@
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];
}
function dropWhile(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];
}
- function fill(array, value, start4, end2) {
+ function fill(array, value, start3, end2) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
- if (start4 && typeof start4 != "number" && isIterateeCall(array, value, start4)) {
- start4 = 0;
+ if (start3 && typeof start3 != "number" && isIterateeCall(array, value, start3)) {
+ start3 = 0;
end2 = length;
}
- return baseFill(array, value, start4, end2);
+ return baseFill(array, value, start3, end2);
}
function findIndex3(array, predicate, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
@@ -3896,11 +3324,11 @@
return result2;
}
function head(array) {
return array && array.length ? array[0] : undefined2;
}
- function indexOf2(array, value, fromIndex) {
+ function indexOf(array, value, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index = fromIndex == null ? 0 : toInteger(fromIndex);
@@ -3991,23 +3419,23 @@
return result2;
}
function reverse(array) {
return array == null ? array : nativeReverse.call(array);
}
- function slice(array, start4, end2) {
+ function slice(array, start3, end2) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
- if (end2 && typeof end2 != "number" && isIterateeCall(array, start4, end2)) {
- start4 = 0;
+ if (end2 && typeof end2 != "number" && isIterateeCall(array, start3, end2)) {
+ start3 = 0;
end2 = length;
} else {
- start4 = start4 == null ? 0 : toInteger(start4);
+ start3 = start3 == null ? 0 : toInteger(start3);
end2 = end2 === undefined2 ? length : toInteger(end2);
}
- return baseSlice(array, start4, end2);
+ return baseSlice(array, start3, end2);
}
function sortedIndex(array, value) {
return baseSortedIndex(array, value);
}
function sortedIndexBy(array, value, iteratee2) {
@@ -4164,17 +3592,17 @@
}
function thru(value, interceptor2) {
return interceptor2(value);
}
var wrapperAt = flatRest(function(paths) {
- var length = paths.length, start4 = length ? paths[0] : 0, value = this.__wrapped__, interceptor2 = function(object) {
+ var length = paths.length, start3 = length ? paths[0] : 0, value = this.__wrapped__, interceptor2 = function(object) {
return baseAt(object, paths);
};
- if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start4)) {
+ if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start3)) {
return this.thru(interceptor2);
}
- value = value.slice(start4, +start4 + (length ? 1 : 0));
+ value = value.slice(start3, +start3 + (length ? 1 : 0));
value.__actions__.push({
"func": thru,
"args": [interceptor2],
"thisArg": undefined2
});
@@ -4383,11 +3811,11 @@
} else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
iteratees = [iteratees[0]];
}
return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
});
- var now2 = ctxNow || function() {
+ var now = ctxNow || function() {
return root.Date.now();
};
function after(n2, func) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
@@ -4479,11 +3907,11 @@
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
- var time = now2();
+ var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout2(timerExpired, remainingWait(time));
}
@@ -4501,14 +3929,14 @@
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = undefined2;
}
function flush() {
- return timerId === undefined2 ? result2 : trailingEdge(now2());
+ return timerId === undefined2 ? result2 : trailingEdge(now());
}
function debounced() {
- var time = now2(), isInvoking = shouldInvoke(time);
+ var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === undefined2) {
@@ -4541,16 +3969,16 @@
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
var memoized = function() {
- var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache2 = memoized.cache;
- if (cache2.has(key)) {
- return cache2.get(key);
+ var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
+ if (cache.has(key)) {
+ return cache.get(key);
}
var result2 = func.apply(this, args);
- memoized.cache = cache2.set(key, result2) || cache2;
+ memoized.cache = cache.set(key, result2) || cache;
return result2;
};
memoized.cache = new (memoize.Cache || MapCache)();
return memoized;
}
@@ -4597,24 +4025,24 @@
return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders);
});
var rearg = flatRest(function(func, indexes) {
return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes);
});
- function rest(func, start4) {
+ function rest(func, start3) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
- start4 = start4 === undefined2 ? start4 : toInteger(start4);
- return baseRest(func, start4);
+ start3 = start3 === undefined2 ? start3 : toInteger(start3);
+ return baseRest(func, start3);
}
- function spread(func, start4) {
+ function spread(func, start3) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
- start4 = start4 == null ? 0 : nativeMax(toInteger(start4), 0);
+ start3 = start3 == null ? 0 : nativeMax(toInteger(start3), 0);
return baseRest(function(args) {
- var array = args[start4], otherArgs = castSlice(args, 0, start4);
+ var array = args[start3], otherArgs = castSlice(args, 0, start3);
if (array) {
arrayPush(otherArgs, array);
}
return apply(func, this, otherArgs);
});
@@ -5114,20 +4542,20 @@
lower = toNumber(lower);
lower = lower === lower ? lower : 0;
}
return baseClamp(toNumber(number), lower, upper);
}
- function inRange(number, start4, end2) {
- start4 = toFinite(start4);
+ function inRange(number, start3, end2) {
+ start3 = toFinite(start3);
if (end2 === undefined2) {
- end2 = start4;
- start4 = 0;
+ end2 = start3;
+ start3 = 0;
} else {
end2 = toFinite(end2);
}
number = toNumber(number);
- return baseInRange(number, start4, end2);
+ return baseInRange(number, start3, end2);
}
function random(lower, upper, floating) {
if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) {
upper = floating = undefined2;
}
@@ -5275,13 +4703,13 @@
options = undefined2;
}
string = toString(string);
options = assignInWith({}, options, settings, customDefaultsAssignIn);
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys);
- var isEscaping, isEvaluating, index = 0, interpolate2 = options.interpolate || reNoMatch, source = "__p += '";
+ var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '";
var reDelimiters = RegExp2(
- (options.escape || reNoMatch).source + "|" + interpolate2.source + "|" + (interpolate2 === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
+ (options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
"g"
);
var sourceURL = "//# sourceURL=" + (hasOwnProperty3.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n";
string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset2) {
interpolateValue || (interpolateValue = esTemplateValue);
@@ -5330,12 +4758,12 @@
return baseTrim(string);
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
- var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start4 = charsStartIndex(strSymbols, chrSymbols), end2 = charsEndIndex(strSymbols, chrSymbols) + 1;
- return castSlice(strSymbols, start4, end2).join("");
+ var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start3 = charsStartIndex(strSymbols, chrSymbols), end2 = charsEndIndex(strSymbols, chrSymbols) + 1;
+ return castSlice(strSymbols, start3, end2).join("");
}
function trimEnd(string, chars, guard) {
string = toString(string);
if (string && (guard || chars === undefined2)) {
return string.slice(0, trimmedEndIndex(string) + 1);
@@ -5352,12 +4780,12 @@
return string.replace(reTrimStart, "");
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
- var strSymbols = stringToArray(string), start4 = charsStartIndex(strSymbols, stringToArray(chars));
- return castSlice(strSymbols, start4).join("");
+ var strSymbols = stringToArray(string), start3 = charsStartIndex(strSymbols, stringToArray(chars));
+ return castSlice(strSymbols, start3).join("");
}
function truncate(string, options) {
var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
if (isObject3(options)) {
var separator = "separator" in options ? options.separator : separator;
@@ -5811,11 +5239,11 @@
lodash.has = has2;
lodash.hasIn = hasIn;
lodash.head = head;
lodash.identity = identity;
lodash.includes = includes;
- lodash.indexOf = indexOf2;
+ lodash.indexOf = indexOf;
lodash.inRange = inRange;
lodash.invoke = invoke;
lodash.isArguments = isArguments;
lodash.isArray = isArray2;
lodash.isArrayBuffer = isArrayBuffer;
@@ -5874,11 +5302,11 @@
lodash.stubTrue = stubTrue;
lodash.multiply = multiply;
lodash.nth = nth;
lodash.noConflict = noConflict;
lodash.noop = noop;
- lodash.now = now2;
+ lodash.now = now;
lodash.pad = pad;
lodash.padEnd = padEnd;
lodash.padStart = padStart;
lodash.parseInt = parseInt2;
lodash.random = random;
@@ -5998,24 +5426,24 @@
});
});
LazyWrapper.prototype.reject = function(predicate) {
return this.filter(negate(getIteratee(predicate)));
};
- LazyWrapper.prototype.slice = function(start4, end2) {
- start4 = toInteger(start4);
+ LazyWrapper.prototype.slice = function(start3, end2) {
+ start3 = toInteger(start3);
var result2 = this;
- if (result2.__filtered__ && (start4 > 0 || end2 < 0)) {
+ if (result2.__filtered__ && (start3 > 0 || end2 < 0)) {
return new LazyWrapper(result2);
}
- if (start4 < 0) {
- result2 = result2.takeRight(-start4);
- } else if (start4) {
- result2 = result2.drop(start4);
+ if (start3 < 0) {
+ result2 = result2.takeRight(-start3);
+ } else if (start3) {
+ result2 = result2.drop(start3);
}
if (end2 !== undefined2) {
end2 = toInteger(end2);
- result2 = end2 < 0 ? result2.dropRight(-end2) : result2.take(end2 - start4);
+ result2 = end2 < 0 ? result2.dropRight(-end2) : result2.take(end2 - start3);
}
return result2;
};
LazyWrapper.prototype.takeRightWhile = function(predicate) {
return this.reverse().takeWhile(predicate).reverse();
@@ -7607,4071 +7035,10 @@
return f2;
}
u2.prepend(s2, o2), A2(u2), S2();
}();
- // ../../../node_modules/alpine-turbo-drive-adapter/dist/alpine-turbo-drive-adapter.esm.js
- function isValidVersion(required, current) {
- var requiredArray = required.split(".");
- var currentArray = current.split(".");
- for (var i2 = 0; i2 < requiredArray.length; i2++) {
- if (currentArray[i2] && currentArray[i2] > requiredArray[i2]) {
- return true;
- }
- }
- return currentArray[requiredArray.length - 1] === requiredArray[requiredArray.length - 1];
- }
- function dispatch(el, name) {
- var detail = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
- el.dispatchEvent(new CustomEvent(name, {
- detail,
- bubbles: true,
- composed: true,
- cancelable: true
- }));
- }
- var Bridge = class {
- init() {
- if (!window.Alpine.version || !isValidVersion("3.0.0", window.Alpine.version)) {
- throw new Error("Invalid Alpine version. Please use Alpine 3.0.0 or above");
- }
- window.Alpine.mutateDom(() => {
- document.body.querySelectorAll("[x-cloak]").forEach((el) => {
- var _el$getAttribute;
- el.setAttribute("data-alpine-was-cloaked", (_el$getAttribute = el.getAttribute("x-cloak")) !== null && _el$getAttribute !== void 0 ? _el$getAttribute : "");
- });
- });
- this.configureEventHandlers();
- }
- configureEventHandlers() {
- var renderCallback = (event) => {
- if (document.documentElement.hasAttribute("data-turbo-preview")) {
- return;
- }
- dispatch(document, "alpine:init");
- dispatch(document, "alpine:initializing");
- window.Alpine.flushAndStopDeferringMutations();
- dispatch(document, "alpine:initialised");
- window.Alpine.mutateDom(() => {
- document.querySelectorAll("[data-alpine-ignored]").forEach((el) => {
- el.removeAttribute("x-ignore");
- el.removeAttribute("data-alpine-ignored");
- });
- });
- };
- var beforeRenderCallback = (event) => {
- window.Alpine.mutateDom(() => {
- if (document.documentElement.hasAttribute("data-turbo-preview")) {
- return;
- }
- event.detail.newBody.querySelectorAll("[data-alpine-generated-me],[x-cloak]").forEach((el) => {
- if (el.hasAttribute("x-cloak")) {
- var _el$getAttribute2;
- el.setAttribute("data-alpine-was-cloaked", (_el$getAttribute2 = el.getAttribute("x-cloak")) !== null && _el$getAttribute2 !== void 0 ? _el$getAttribute2 : "");
- }
- if (el.hasAttribute("data-alpine-generated-me")) {
- el.removeAttribute("data-alpine-generated-me");
- el.remove();
- }
- });
- });
- window.Alpine.deferMutations();
- };
- var beforeCacheCallback = (event) => {
- window.Alpine.mutateDom(() => {
- document.body.querySelectorAll("[x-for],[x-if],[data-alpine-was-cloaked]").forEach((el) => {
- if (el.hasAttribute("data-alpine-was-cloaked")) {
- var _el$getAttribute3;
- el.setAttribute("x-cloak", (_el$getAttribute3 = el.getAttribute("data-alpine-was-cloaked")) !== null && _el$getAttribute3 !== void 0 ? _el$getAttribute3 : "");
- el.removeAttribute("data-alpine-was-cloaked");
- }
- if (el.hasAttribute("x-for") && el._x_lookup) {
- Object.values(el._x_lookup).forEach((el2) => el2.setAttribute("data-alpine-generated-me", true));
- }
- if (el.hasAttribute("x-if") && el._x_currentIfEl) {
- el._x_currentIfEl.setAttribute("data-alpine-generated-me", true);
- }
- });
- });
- document.querySelectorAll("[data-turbo-permanent]").forEach((el) => {
- window.Alpine.mutateDom(() => {
- if (!el.hasAttribute("x-ignore")) {
- el.setAttribute("x-ignore", true);
- el.setAttribute("data-alpine-ignored", true);
- }
- el.querySelectorAll("[data-alpine-generated-me]").forEach((sub) => {
- sub.removeAttribute("data-alpine-generated-me");
- });
- });
- });
- };
- document.addEventListener("turbo:render", renderCallback);
- document.addEventListener("turbo:before-render", beforeRenderCallback);
- document.addEventListener("turbo:before-cache", beforeCacheCallback);
- }
- };
- if (window.Alpine) {
- console.error("Alpine-turbo-drive-adapter must be included before AlpineJs");
- }
- if (!Object.getOwnPropertyDescriptor(NodeList.prototype, "forEach")) {
- Object.defineProperty(NodeList.prototype, "forEach", Object.getOwnPropertyDescriptor(Array.prototype, "forEach"));
- }
- document.addEventListener("alpine:init", () => {
- var bridge = new Bridge();
- bridge.init();
- }, {
- once: true
- });
-
- // ../../../node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js
- (function() {
- if (window.Reflect === void 0 || window.customElements === void 0 || window.customElements.polyfillWrapFlushCallback) {
- return;
- }
- const BuiltInHTMLElement = HTMLElement;
- const wrapperForTheName = {
- HTMLElement: function HTMLElement2() {
- return Reflect.construct(BuiltInHTMLElement, [], this.constructor);
- }
- };
- window.HTMLElement = wrapperForTheName["HTMLElement"];
- HTMLElement.prototype = BuiltInHTMLElement.prototype;
- HTMLElement.prototype.constructor = HTMLElement;
- Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);
- })();
- (function(prototype) {
- if (typeof prototype.requestSubmit == "function")
- return;
- prototype.requestSubmit = function(submitter) {
- if (submitter) {
- validateSubmitter(submitter, this);
- submitter.click();
- } else {
- submitter = document.createElement("input");
- submitter.type = "submit";
- submitter.hidden = true;
- this.appendChild(submitter);
- submitter.click();
- this.removeChild(submitter);
- }
- };
- function validateSubmitter(submitter, form) {
- submitter instanceof HTMLElement || raise(TypeError, "parameter 1 is not of type 'HTMLElement'");
- submitter.type == "submit" || raise(TypeError, "The specified element is not a submit button");
- submitter.form == form || raise(DOMException, "The specified element is not owned by this form element", "NotFoundError");
- }
- function raise(errorConstructor, message, name) {
- throw new errorConstructor("Failed to execute 'requestSubmit' on 'HTMLFormElement': " + message + ".", name);
- }
- })(HTMLFormElement.prototype);
- var submittersByForm = /* @__PURE__ */ new WeakMap();
- function findSubmitterFromClickTarget(target) {
- const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;
- const candidate = element ? element.closest("input, button") : null;
- return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == "submit" ? candidate : null;
- }
- function clickCaptured(event) {
- const submitter = findSubmitterFromClickTarget(event.target);
- if (submitter && submitter.form) {
- submittersByForm.set(submitter.form, submitter);
- }
- }
- (function() {
- if ("submitter" in Event.prototype)
- return;
- let prototype = window.Event.prototype;
- if ("SubmitEvent" in window && /Apple Computer/.test(navigator.vendor)) {
- prototype = window.SubmitEvent.prototype;
- } else if ("SubmitEvent" in window) {
- return;
- }
- addEventListener("click", clickCaptured, true);
- Object.defineProperty(prototype, "submitter", {
- get() {
- if (this.type == "submit" && this.target instanceof HTMLFormElement) {
- return submittersByForm.get(this.target);
- }
- }
- });
- })();
- var FrameLoadingStyle;
- (function(FrameLoadingStyle2) {
- FrameLoadingStyle2["eager"] = "eager";
- FrameLoadingStyle2["lazy"] = "lazy";
- })(FrameLoadingStyle || (FrameLoadingStyle = {}));
- var FrameElement = class extends HTMLElement {
- static get observedAttributes() {
- return ["disabled", "complete", "loading", "src"];
- }
- constructor() {
- super();
- this.loaded = Promise.resolve();
- this.delegate = new FrameElement.delegateConstructor(this);
- }
- connectedCallback() {
- this.delegate.connect();
- }
- disconnectedCallback() {
- this.delegate.disconnect();
- }
- reload() {
- return this.delegate.sourceURLReloaded();
- }
- attributeChangedCallback(name) {
- if (name == "loading") {
- this.delegate.loadingStyleChanged();
- } else if (name == "complete") {
- this.delegate.completeChanged();
- } else if (name == "src") {
- this.delegate.sourceURLChanged();
- } else {
- this.delegate.disabledChanged();
- }
- }
- get src() {
- return this.getAttribute("src");
- }
- set src(value) {
- if (value) {
- this.setAttribute("src", value);
- } else {
- this.removeAttribute("src");
- }
- }
- get loading() {
- return frameLoadingStyleFromString(this.getAttribute("loading") || "");
- }
- set loading(value) {
- if (value) {
- this.setAttribute("loading", value);
- } else {
- this.removeAttribute("loading");
- }
- }
- get disabled() {
- return this.hasAttribute("disabled");
- }
- set disabled(value) {
- if (value) {
- this.setAttribute("disabled", "");
- } else {
- this.removeAttribute("disabled");
- }
- }
- get autoscroll() {
- return this.hasAttribute("autoscroll");
- }
- set autoscroll(value) {
- if (value) {
- this.setAttribute("autoscroll", "");
- } else {
- this.removeAttribute("autoscroll");
- }
- }
- get complete() {
- return !this.delegate.isLoading;
- }
- get isActive() {
- return this.ownerDocument === document && !this.isPreview;
- }
- get isPreview() {
- var _a, _b;
- return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute("data-turbo-preview");
- }
- };
- function frameLoadingStyleFromString(style) {
- switch (style.toLowerCase()) {
- case "lazy":
- return FrameLoadingStyle.lazy;
- default:
- return FrameLoadingStyle.eager;
- }
- }
- function expandURL(locatable) {
- return new URL(locatable.toString(), document.baseURI);
- }
- function getAnchor(url) {
- let anchorMatch;
- if (url.hash) {
- return url.hash.slice(1);
- } else if (anchorMatch = url.href.match(/#(.*)$/)) {
- return anchorMatch[1];
- }
- }
- function getAction(form, submitter) {
- const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formaction")) || form.getAttribute("action") || form.action;
- return expandURL(action);
- }
- function getExtension(url) {
- return (getLastPathComponent(url).match(/\.[^.]*$/) || [])[0] || "";
- }
- function isHTML(url) {
- return !!getExtension(url).match(/^(?:|\.(?:htm|html|xhtml|php))$/);
- }
- function isPrefixedBy(baseURL, url) {
- const prefix2 = getPrefix(url);
- return baseURL.href === expandURL(prefix2).href || baseURL.href.startsWith(prefix2);
- }
- function locationIsVisitable(location2, rootLocation) {
- return isPrefixedBy(location2, rootLocation) && isHTML(location2);
- }
- function getRequestURL(url) {
- const anchor = getAnchor(url);
- return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;
- }
- function toCacheKey(url) {
- return getRequestURL(url);
- }
- function urlsAreEqual(left2, right2) {
- return expandURL(left2).href == expandURL(right2).href;
- }
- function getPathComponents(url) {
- return url.pathname.split("/").slice(1);
- }
- function getLastPathComponent(url) {
- return getPathComponents(url).slice(-1)[0];
- }
- function getPrefix(url) {
- return addTrailingSlash(url.origin + url.pathname);
- }
- function addTrailingSlash(value) {
- return value.endsWith("/") ? value : value + "/";
- }
- var FetchResponse = class {
- constructor(response) {
- this.response = response;
- }
- get succeeded() {
- return this.response.ok;
- }
- get failed() {
- return !this.succeeded;
- }
- get clientError() {
- return this.statusCode >= 400 && this.statusCode <= 499;
- }
- get serverError() {
- return this.statusCode >= 500 && this.statusCode <= 599;
- }
- get redirected() {
- return this.response.redirected;
- }
- get location() {
- return expandURL(this.response.url);
- }
- get isHTML() {
- return this.contentType && this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/);
- }
- get statusCode() {
- return this.response.status;
- }
- get contentType() {
- return this.header("Content-Type");
- }
- get responseText() {
- return this.response.clone().text();
- }
- get responseHTML() {
- if (this.isHTML) {
- return this.response.clone().text();
- } else {
- return Promise.resolve(void 0);
- }
- }
- header(name) {
- return this.response.headers.get(name);
- }
- };
- function activateScriptElement(element) {
- if (element.getAttribute("data-turbo-eval") == "false") {
- return element;
- } else {
- const createdScriptElement = document.createElement("script");
- const cspNonce = getMetaContent("csp-nonce");
- if (cspNonce) {
- createdScriptElement.nonce = cspNonce;
- }
- createdScriptElement.textContent = element.textContent;
- createdScriptElement.async = false;
- copyElementAttributes(createdScriptElement, element);
- return createdScriptElement;
- }
- }
- function copyElementAttributes(destinationElement, sourceElement) {
- for (const { name, value } of sourceElement.attributes) {
- destinationElement.setAttribute(name, value);
- }
- }
- function createDocumentFragment(html) {
- const template = document.createElement("template");
- template.innerHTML = html;
- return template.content;
- }
- function dispatch2(eventName, { target, cancelable, detail } = {}) {
- const event = new CustomEvent(eventName, {
- cancelable,
- bubbles: true,
- composed: true,
- detail
- });
- if (target && target.isConnected) {
- target.dispatchEvent(event);
- } else {
- document.documentElement.dispatchEvent(event);
- }
- return event;
- }
- function nextAnimationFrame() {
- return new Promise((resolve) => requestAnimationFrame(() => resolve()));
- }
- function nextEventLoopTick() {
- return new Promise((resolve) => setTimeout(() => resolve(), 0));
- }
- function nextMicrotask() {
- return Promise.resolve();
- }
- function parseHTMLDocument(html = "") {
- return new DOMParser().parseFromString(html, "text/html");
- }
- function unindent(strings, ...values) {
- const lines = interpolate(strings, values).replace(/^\n/, "").split("\n");
- const match = lines[0].match(/^\s+/);
- const indent = match ? match[0].length : 0;
- return lines.map((line) => line.slice(indent)).join("\n");
- }
- function interpolate(strings, values) {
- return strings.reduce((result, string, i2) => {
- const value = values[i2] == void 0 ? "" : values[i2];
- return result + string + value;
- }, "");
- }
- function uuid() {
- return Array.from({ length: 36 }).map((_2, i2) => {
- if (i2 == 8 || i2 == 13 || i2 == 18 || i2 == 23) {
- return "-";
- } else if (i2 == 14) {
- return "4";
- } else if (i2 == 19) {
- return (Math.floor(Math.random() * 4) + 8).toString(16);
- } else {
- return Math.floor(Math.random() * 15).toString(16);
- }
- }).join("");
- }
- function getAttribute(attributeName, ...elements) {
- for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {
- if (typeof value == "string")
- return value;
- }
- return null;
- }
- function hasAttribute(attributeName, ...elements) {
- return elements.some((element) => element && element.hasAttribute(attributeName));
- }
- function markAsBusy(...elements) {
- for (const element of elements) {
- if (element.localName == "turbo-frame") {
- element.setAttribute("busy", "");
- }
- element.setAttribute("aria-busy", "true");
- }
- }
- function clearBusyState(...elements) {
- for (const element of elements) {
- if (element.localName == "turbo-frame") {
- element.removeAttribute("busy");
- }
- element.removeAttribute("aria-busy");
- }
- }
- function waitForLoad(element, timeoutInMilliseconds = 2e3) {
- return new Promise((resolve) => {
- const onComplete = () => {
- element.removeEventListener("error", onComplete);
- element.removeEventListener("load", onComplete);
- resolve();
- };
- element.addEventListener("load", onComplete, { once: true });
- element.addEventListener("error", onComplete, { once: true });
- setTimeout(resolve, timeoutInMilliseconds);
- });
- }
- function getHistoryMethodForAction(action) {
- switch (action) {
- case "replace":
- return history.replaceState;
- case "advance":
- case "restore":
- return history.pushState;
- }
- }
- function isAction(action) {
- return action == "advance" || action == "replace" || action == "restore";
- }
- function getVisitAction(...elements) {
- const action = getAttribute("data-turbo-action", ...elements);
- return isAction(action) ? action : null;
- }
- function getMetaElement(name) {
- return document.querySelector(`meta[name="${name}"]`);
- }
- function getMetaContent(name) {
- const element = getMetaElement(name);
- return element && element.content;
- }
- function setMetaContent(name, content2) {
- let element = getMetaElement(name);
- if (!element) {
- element = document.createElement("meta");
- element.setAttribute("name", name);
- document.head.appendChild(element);
- }
- element.setAttribute("content", content2);
- return element;
- }
- function findClosestRecursively(element, selector) {
- var _a;
- if (element instanceof Element) {
- return element.closest(selector) || findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector);
- }
- }
- var FetchMethod;
- (function(FetchMethod2) {
- FetchMethod2[FetchMethod2["get"] = 0] = "get";
- FetchMethod2[FetchMethod2["post"] = 1] = "post";
- FetchMethod2[FetchMethod2["put"] = 2] = "put";
- FetchMethod2[FetchMethod2["patch"] = 3] = "patch";
- FetchMethod2[FetchMethod2["delete"] = 4] = "delete";
- })(FetchMethod || (FetchMethod = {}));
- function fetchMethodFromString(method) {
- switch (method.toLowerCase()) {
- case "get":
- return FetchMethod.get;
- case "post":
- return FetchMethod.post;
- case "put":
- return FetchMethod.put;
- case "patch":
- return FetchMethod.patch;
- case "delete":
- return FetchMethod.delete;
- }
- }
- var FetchRequest = class {
- constructor(delegate, method, location2, body = new URLSearchParams(), target = null) {
- this.abortController = new AbortController();
- this.resolveRequestPromise = (_value) => {
- };
- this.delegate = delegate;
- this.method = method;
- this.headers = this.defaultHeaders;
- this.body = body;
- this.url = location2;
- this.target = target;
- }
- get location() {
- return this.url;
- }
- get params() {
- return this.url.searchParams;
- }
- get entries() {
- return this.body ? Array.from(this.body.entries()) : [];
- }
- cancel() {
- this.abortController.abort();
- }
- async perform() {
- const { fetchOptions } = this;
- this.delegate.prepareRequest(this);
- await this.allowRequestToBeIntercepted(fetchOptions);
- try {
- this.delegate.requestStarted(this);
- const response = await fetch(this.url.href, fetchOptions);
- return await this.receive(response);
- } catch (error2) {
- if (error2.name !== "AbortError") {
- if (this.willDelegateErrorHandling(error2)) {
- this.delegate.requestErrored(this, error2);
- }
- throw error2;
- }
- } finally {
- this.delegate.requestFinished(this);
- }
- }
- async receive(response) {
- const fetchResponse = new FetchResponse(response);
- const event = dispatch2("turbo:before-fetch-response", {
- cancelable: true,
- detail: { fetchResponse },
- target: this.target
- });
- if (event.defaultPrevented) {
- this.delegate.requestPreventedHandlingResponse(this, fetchResponse);
- } else if (fetchResponse.succeeded) {
- this.delegate.requestSucceededWithResponse(this, fetchResponse);
- } else {
- this.delegate.requestFailedWithResponse(this, fetchResponse);
- }
- return fetchResponse;
- }
- get fetchOptions() {
- var _a;
- return {
- method: FetchMethod[this.method].toUpperCase(),
- credentials: "same-origin",
- headers: this.headers,
- redirect: "follow",
- body: this.isSafe ? null : this.body,
- signal: this.abortSignal,
- referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href
- };
- }
- get defaultHeaders() {
- return {
- Accept: "text/html, application/xhtml+xml"
- };
- }
- get isSafe() {
- return this.method === FetchMethod.get;
- }
- get abortSignal() {
- return this.abortController.signal;
- }
- acceptResponseType(mimeType) {
- this.headers["Accept"] = [mimeType, this.headers["Accept"]].join(", ");
- }
- async allowRequestToBeIntercepted(fetchOptions) {
- const requestInterception = new Promise((resolve) => this.resolveRequestPromise = resolve);
- const event = dispatch2("turbo:before-fetch-request", {
- cancelable: true,
- detail: {
- fetchOptions,
- url: this.url,
- resume: this.resolveRequestPromise
- },
- target: this.target
- });
- if (event.defaultPrevented)
- await requestInterception;
- }
- willDelegateErrorHandling(error2) {
- const event = dispatch2("turbo:fetch-request-error", {
- target: this.target,
- cancelable: true,
- detail: { request: this, error: error2 }
- });
- return !event.defaultPrevented;
- }
- };
- var AppearanceObserver = class {
- constructor(delegate, element) {
- this.started = false;
- this.intersect = (entries) => {
- const lastEntry = entries.slice(-1)[0];
- if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {
- this.delegate.elementAppearedInViewport(this.element);
- }
- };
- this.delegate = delegate;
- this.element = element;
- this.intersectionObserver = new IntersectionObserver(this.intersect);
- }
- start() {
- if (!this.started) {
- this.started = true;
- this.intersectionObserver.observe(this.element);
- }
- }
- stop() {
- if (this.started) {
- this.started = false;
- this.intersectionObserver.unobserve(this.element);
- }
- }
- };
- var StreamMessage = class {
- static wrap(message) {
- if (typeof message == "string") {
- return new this(createDocumentFragment(message));
- } else {
- return message;
- }
- }
- constructor(fragment) {
- this.fragment = importStreamElements(fragment);
- }
- };
- StreamMessage.contentType = "text/vnd.turbo-stream.html";
- function importStreamElements(fragment) {
- for (const element of fragment.querySelectorAll("turbo-stream")) {
- const streamElement = document.importNode(element, true);
- for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll("script")) {
- inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));
- }
- element.replaceWith(streamElement);
- }
- return fragment;
- }
- var FormSubmissionState;
- (function(FormSubmissionState2) {
- FormSubmissionState2[FormSubmissionState2["initialized"] = 0] = "initialized";
- FormSubmissionState2[FormSubmissionState2["requesting"] = 1] = "requesting";
- FormSubmissionState2[FormSubmissionState2["waiting"] = 2] = "waiting";
- FormSubmissionState2[FormSubmissionState2["receiving"] = 3] = "receiving";
- FormSubmissionState2[FormSubmissionState2["stopping"] = 4] = "stopping";
- FormSubmissionState2[FormSubmissionState2["stopped"] = 5] = "stopped";
- })(FormSubmissionState || (FormSubmissionState = {}));
- var FormEnctype;
- (function(FormEnctype2) {
- FormEnctype2["urlEncoded"] = "application/x-www-form-urlencoded";
- FormEnctype2["multipart"] = "multipart/form-data";
- FormEnctype2["plain"] = "text/plain";
- })(FormEnctype || (FormEnctype = {}));
- function formEnctypeFromString(encoding) {
- switch (encoding.toLowerCase()) {
- case FormEnctype.multipart:
- return FormEnctype.multipart;
- case FormEnctype.plain:
- return FormEnctype.plain;
- default:
- return FormEnctype.urlEncoded;
- }
- }
- var FormSubmission = class {
- static confirmMethod(message, _element, _submitter) {
- return Promise.resolve(confirm(message));
- }
- constructor(delegate, formElement, submitter, mustRedirect = false) {
- this.state = FormSubmissionState.initialized;
- this.delegate = delegate;
- this.formElement = formElement;
- this.submitter = submitter;
- this.formData = buildFormData(formElement, submitter);
- this.location = expandURL(this.action);
- if (this.method == FetchMethod.get) {
- mergeFormDataEntries(this.location, [...this.body.entries()]);
- }
- this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);
- this.mustRedirect = mustRedirect;
- }
- get method() {
- var _a;
- const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("formmethod")) || this.formElement.getAttribute("method") || "";
- return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;
- }
- get action() {
- var _a;
- const formElementAction = typeof this.formElement.action === "string" ? this.formElement.action : null;
- if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute("formaction")) {
- return this.submitter.getAttribute("formaction") || "";
- } else {
- return this.formElement.getAttribute("action") || formElementAction || "";
- }
- }
- get body() {
- if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {
- return new URLSearchParams(this.stringFormData);
- } else {
- return this.formData;
- }
- }
- get enctype() {
- var _a;
- return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("formenctype")) || this.formElement.enctype);
- }
- get isSafe() {
- return this.fetchRequest.isSafe;
- }
- get stringFormData() {
- return [...this.formData].reduce((entries, [name, value]) => {
- return entries.concat(typeof value == "string" ? [[name, value]] : []);
- }, []);
- }
- async start() {
- const { initialized, requesting } = FormSubmissionState;
- const confirmationMessage = getAttribute("data-turbo-confirm", this.submitter, this.formElement);
- if (typeof confirmationMessage === "string") {
- const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);
- if (!answer) {
- return;
- }
- }
- if (this.state == initialized) {
- this.state = requesting;
- return this.fetchRequest.perform();
- }
- }
- stop() {
- const { stopping, stopped } = FormSubmissionState;
- if (this.state != stopping && this.state != stopped) {
- this.state = stopping;
- this.fetchRequest.cancel();
- return true;
- }
- }
- prepareRequest(request) {
- if (!request.isSafe) {
- const token = getCookieValue(getMetaContent("csrf-param")) || getMetaContent("csrf-token");
- if (token) {
- request.headers["X-CSRF-Token"] = token;
- }
- }
- if (this.requestAcceptsTurboStreamResponse(request)) {
- request.acceptResponseType(StreamMessage.contentType);
- }
- }
- requestStarted(_request) {
- var _a;
- this.state = FormSubmissionState.waiting;
- (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute("disabled", "");
- this.setSubmitsWith();
- dispatch2("turbo:submit-start", {
- target: this.formElement,
- detail: { formSubmission: this }
- });
- this.delegate.formSubmissionStarted(this);
- }
- requestPreventedHandlingResponse(request, response) {
- this.result = { success: response.succeeded, fetchResponse: response };
- }
- requestSucceededWithResponse(request, response) {
- if (response.clientError || response.serverError) {
- this.delegate.formSubmissionFailedWithResponse(this, response);
- } else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {
- const error2 = new Error("Form responses must redirect to another location");
- this.delegate.formSubmissionErrored(this, error2);
- } else {
- this.state = FormSubmissionState.receiving;
- this.result = { success: true, fetchResponse: response };
- this.delegate.formSubmissionSucceededWithResponse(this, response);
- }
- }
- requestFailedWithResponse(request, response) {
- this.result = { success: false, fetchResponse: response };
- this.delegate.formSubmissionFailedWithResponse(this, response);
- }
- requestErrored(request, error2) {
- this.result = { success: false, error: error2 };
- this.delegate.formSubmissionErrored(this, error2);
- }
- requestFinished(_request) {
- var _a;
- this.state = FormSubmissionState.stopped;
- (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute("disabled");
- this.resetSubmitterText();
- dispatch2("turbo:submit-end", {
- target: this.formElement,
- detail: Object.assign({ formSubmission: this }, this.result)
- });
- this.delegate.formSubmissionFinished(this);
- }
- setSubmitsWith() {
- if (!this.submitter || !this.submitsWith)
- return;
- if (this.submitter.matches("button")) {
- this.originalSubmitText = this.submitter.innerHTML;
- this.submitter.innerHTML = this.submitsWith;
- } else if (this.submitter.matches("input")) {
- const input = this.submitter;
- this.originalSubmitText = input.value;
- input.value = this.submitsWith;
- }
- }
- resetSubmitterText() {
- if (!this.submitter || !this.originalSubmitText)
- return;
- if (this.submitter.matches("button")) {
- this.submitter.innerHTML = this.originalSubmitText;
- } else if (this.submitter.matches("input")) {
- const input = this.submitter;
- input.value = this.originalSubmitText;
- }
- }
- requestMustRedirect(request) {
- return !request.isSafe && this.mustRedirect;
- }
- requestAcceptsTurboStreamResponse(request) {
- return !request.isSafe || hasAttribute("data-turbo-stream", this.submitter, this.formElement);
- }
- get submitsWith() {
- var _a;
- return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute("data-turbo-submits-with");
- }
- };
- function buildFormData(formElement, submitter) {
- const formData = new FormData(formElement);
- const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("name");
- const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("value");
- if (name) {
- formData.append(name, value || "");
- }
- return formData;
- }
- function getCookieValue(cookieName) {
- if (cookieName != null) {
- const cookies = document.cookie ? document.cookie.split("; ") : [];
- const cookie = cookies.find((cookie2) => cookie2.startsWith(cookieName));
- if (cookie) {
- const value = cookie.split("=").slice(1).join("=");
- return value ? decodeURIComponent(value) : void 0;
- }
- }
- }
- function responseSucceededWithoutRedirect(response) {
- return response.statusCode == 200 && !response.redirected;
- }
- function mergeFormDataEntries(url, entries) {
- const searchParams = new URLSearchParams();
- for (const [name, value] of entries) {
- if (value instanceof File)
- continue;
- searchParams.append(name, value);
- }
- url.search = searchParams.toString();
- return url;
- }
- var Snapshot = class {
- constructor(element) {
- this.element = element;
- }
- get activeElement() {
- return this.element.ownerDocument.activeElement;
- }
- get children() {
- return [...this.element.children];
- }
- hasAnchor(anchor) {
- return this.getElementForAnchor(anchor) != null;
- }
- getElementForAnchor(anchor) {
- return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;
- }
- get isConnected() {
- return this.element.isConnected;
- }
- get firstAutofocusableElement() {
- const inertDisabledOrHidden = "[inert], :disabled, [hidden], details:not([open]), dialog:not([open])";
- for (const element of this.element.querySelectorAll("[autofocus]")) {
- if (element.closest(inertDisabledOrHidden) == null)
- return element;
- else
- continue;
- }
- return null;
- }
- get permanentElements() {
- return queryPermanentElementsAll(this.element);
- }
- getPermanentElementById(id) {
- return getPermanentElementById(this.element, id);
- }
- getPermanentElementMapForSnapshot(snapshot) {
- const permanentElementMap = {};
- for (const currentPermanentElement of this.permanentElements) {
- const { id } = currentPermanentElement;
- const newPermanentElement = snapshot.getPermanentElementById(id);
- if (newPermanentElement) {
- permanentElementMap[id] = [currentPermanentElement, newPermanentElement];
- }
- }
- return permanentElementMap;
- }
- };
- function getPermanentElementById(node, id) {
- return node.querySelector(`#${id}[data-turbo-permanent]`);
- }
- function queryPermanentElementsAll(node) {
- return node.querySelectorAll("[id][data-turbo-permanent]");
- }
- var FormSubmitObserver = class {
- constructor(delegate, eventTarget) {
- this.started = false;
- this.submitCaptured = () => {
- this.eventTarget.removeEventListener("submit", this.submitBubbled, false);
- this.eventTarget.addEventListener("submit", this.submitBubbled, false);
- };
- this.submitBubbled = (event) => {
- if (!event.defaultPrevented) {
- const form = event.target instanceof HTMLFormElement ? event.target : void 0;
- const submitter = event.submitter || void 0;
- if (form && submissionDoesNotDismissDialog(form, submitter) && submissionDoesNotTargetIFrame(form, submitter) && this.delegate.willSubmitForm(form, submitter)) {
- event.preventDefault();
- event.stopImmediatePropagation();
- this.delegate.formSubmitted(form, submitter);
- }
- }
- };
- this.delegate = delegate;
- this.eventTarget = eventTarget;
- }
- start() {
- if (!this.started) {
- this.eventTarget.addEventListener("submit", this.submitCaptured, true);
- this.started = true;
- }
- }
- stop() {
- if (this.started) {
- this.eventTarget.removeEventListener("submit", this.submitCaptured, true);
- this.started = false;
- }
- }
- };
- function submissionDoesNotDismissDialog(form, submitter) {
- const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formmethod")) || form.getAttribute("method");
- return method != "dialog";
- }
- function submissionDoesNotTargetIFrame(form, submitter) {
- if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute("formtarget")) || form.hasAttribute("target")) {
- const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("formtarget")) || form.target;
- for (const element of document.getElementsByName(target)) {
- if (element instanceof HTMLIFrameElement)
- return false;
- }
- return true;
- } else {
- return true;
- }
- }
- var View = class {
- constructor(delegate, element) {
- this.resolveRenderPromise = (_value) => {
- };
- this.resolveInterceptionPromise = (_value) => {
- };
- this.delegate = delegate;
- this.element = element;
- }
- scrollToAnchor(anchor) {
- const element = this.snapshot.getElementForAnchor(anchor);
- if (element) {
- this.scrollToElement(element);
- this.focusElement(element);
- } else {
- this.scrollToPosition({ x: 0, y: 0 });
- }
- }
- scrollToAnchorFromLocation(location2) {
- this.scrollToAnchor(getAnchor(location2));
- }
- scrollToElement(element) {
- element.scrollIntoView();
- }
- focusElement(element) {
- if (element instanceof HTMLElement) {
- if (element.hasAttribute("tabindex")) {
- element.focus();
- } else {
- element.setAttribute("tabindex", "-1");
- element.focus();
- element.removeAttribute("tabindex");
- }
- }
- }
- scrollToPosition({ x: x2, y: y2 }) {
- this.scrollRoot.scrollTo(x2, y2);
- }
- scrollToTop() {
- this.scrollToPosition({ x: 0, y: 0 });
- }
- get scrollRoot() {
- return window;
- }
- async render(renderer) {
- const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;
- if (shouldRender) {
- try {
- this.renderPromise = new Promise((resolve) => this.resolveRenderPromise = resolve);
- this.renderer = renderer;
- await this.prepareToRenderSnapshot(renderer);
- const renderInterception = new Promise((resolve) => this.resolveInterceptionPromise = resolve);
- const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };
- const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);
- if (!immediateRender)
- await renderInterception;
- await this.renderSnapshot(renderer);
- this.delegate.viewRenderedSnapshot(snapshot, isPreview);
- this.delegate.preloadOnLoadLinksForView(this.element);
- this.finishRenderingSnapshot(renderer);
- } finally {
- delete this.renderer;
- this.resolveRenderPromise(void 0);
- delete this.renderPromise;
- }
- } else {
- this.invalidate(renderer.reloadReason);
- }
- }
- invalidate(reason) {
- this.delegate.viewInvalidated(reason);
- }
- async prepareToRenderSnapshot(renderer) {
- this.markAsPreview(renderer.isPreview);
- await renderer.prepareToRender();
- }
- markAsPreview(isPreview) {
- if (isPreview) {
- this.element.setAttribute("data-turbo-preview", "");
- } else {
- this.element.removeAttribute("data-turbo-preview");
- }
- }
- async renderSnapshot(renderer) {
- await renderer.render();
- }
- finishRenderingSnapshot(renderer) {
- renderer.finishRendering();
- }
- };
- var FrameView = class extends View {
- missing() {
- this.element.innerHTML = `<strong class="turbo-frame-error">Content missing</strong>`;
- }
- get snapshot() {
- return new Snapshot(this.element);
- }
- };
- var LinkInterceptor = class {
- constructor(delegate, element) {
- this.clickBubbled = (event) => {
- if (this.respondsToEventTarget(event.target)) {
- this.clickEvent = event;
- } else {
- delete this.clickEvent;
- }
- };
- this.linkClicked = (event) => {
- if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {
- if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {
- this.clickEvent.preventDefault();
- event.preventDefault();
- this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);
- }
- }
- delete this.clickEvent;
- };
- this.willVisit = (_event) => {
- delete this.clickEvent;
- };
- this.delegate = delegate;
- this.element = element;
- }
- start() {
- this.element.addEventListener("click", this.clickBubbled);
- document.addEventListener("turbo:click", this.linkClicked);
- document.addEventListener("turbo:before-visit", this.willVisit);
- }
- stop() {
- this.element.removeEventListener("click", this.clickBubbled);
- document.removeEventListener("turbo:click", this.linkClicked);
- document.removeEventListener("turbo:before-visit", this.willVisit);
- }
- respondsToEventTarget(target) {
- const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;
- return element && element.closest("turbo-frame, html") == this.element;
- }
- };
- var LinkClickObserver = class {
- constructor(delegate, eventTarget) {
- this.started = false;
- this.clickCaptured = () => {
- this.eventTarget.removeEventListener("click", this.clickBubbled, false);
- this.eventTarget.addEventListener("click", this.clickBubbled, false);
- };
- this.clickBubbled = (event) => {
- if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {
- const target = event.composedPath && event.composedPath()[0] || event.target;
- const link = this.findLinkFromClickTarget(target);
- if (link && doesNotTargetIFrame(link)) {
- const location2 = this.getLocationForLink(link);
- if (this.delegate.willFollowLinkToLocation(link, location2, event)) {
- event.preventDefault();
- this.delegate.followedLinkToLocation(link, location2);
- }
- }
- }
- };
- this.delegate = delegate;
- this.eventTarget = eventTarget;
- }
- start() {
- if (!this.started) {
- this.eventTarget.addEventListener("click", this.clickCaptured, true);
- this.started = true;
- }
- }
- stop() {
- if (this.started) {
- this.eventTarget.removeEventListener("click", this.clickCaptured, true);
- this.started = false;
- }
- }
- clickEventIsSignificant(event) {
- return !(event.target && event.target.isContentEditable || event.defaultPrevented || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);
- }
- findLinkFromClickTarget(target) {
- return findClosestRecursively(target, "a[href]:not([target^=_]):not([download])");
- }
- getLocationForLink(link) {
- return expandURL(link.getAttribute("href") || "");
- }
- };
- function doesNotTargetIFrame(anchor) {
- if (anchor.hasAttribute("target")) {
- for (const element of document.getElementsByName(anchor.target)) {
- if (element instanceof HTMLIFrameElement)
- return false;
- }
- return true;
- } else {
- return true;
- }
- }
- var FormLinkClickObserver = class {
- constructor(delegate, element) {
- this.delegate = delegate;
- this.linkInterceptor = new LinkClickObserver(this, element);
- }
- start() {
- this.linkInterceptor.start();
- }
- stop() {
- this.linkInterceptor.stop();
- }
- willFollowLinkToLocation(link, location2, originalEvent) {
- return this.delegate.willSubmitFormLinkToLocation(link, location2, originalEvent) && link.hasAttribute("data-turbo-method");
- }
- followedLinkToLocation(link, location2) {
- const form = document.createElement("form");
- const type = "hidden";
- for (const [name, value] of location2.searchParams) {
- form.append(Object.assign(document.createElement("input"), { type, name, value }));
- }
- const action = Object.assign(location2, { search: "" });
- form.setAttribute("data-turbo", "true");
- form.setAttribute("action", action.href);
- form.setAttribute("hidden", "");
- const method = link.getAttribute("data-turbo-method");
- if (method)
- form.setAttribute("method", method);
- const turboFrame = link.getAttribute("data-turbo-frame");
- if (turboFrame)
- form.setAttribute("data-turbo-frame", turboFrame);
- const turboAction = getVisitAction(link);
- if (turboAction)
- form.setAttribute("data-turbo-action", turboAction);
- const turboConfirm = link.getAttribute("data-turbo-confirm");
- if (turboConfirm)
- form.setAttribute("data-turbo-confirm", turboConfirm);
- const turboStream = link.hasAttribute("data-turbo-stream");
- if (turboStream)
- form.setAttribute("data-turbo-stream", "");
- this.delegate.submittedFormLinkToLocation(link, location2, form);
- document.body.appendChild(form);
- form.addEventListener("turbo:submit-end", () => form.remove(), { once: true });
- requestAnimationFrame(() => form.requestSubmit());
- }
- };
- var Bardo = class {
- static async preservingPermanentElements(delegate, permanentElementMap, callback) {
- const bardo = new this(delegate, permanentElementMap);
- bardo.enter();
- await callback();
- bardo.leave();
- }
- constructor(delegate, permanentElementMap) {
- this.delegate = delegate;
- this.permanentElementMap = permanentElementMap;
- }
- enter() {
- for (const id in this.permanentElementMap) {
- const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];
- this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);
- this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);
- }
- }
- leave() {
- for (const id in this.permanentElementMap) {
- const [currentPermanentElement] = this.permanentElementMap[id];
- this.replaceCurrentPermanentElementWithClone(currentPermanentElement);
- this.replacePlaceholderWithPermanentElement(currentPermanentElement);
- this.delegate.leavingBardo(currentPermanentElement);
- }
- }
- replaceNewPermanentElementWithPlaceholder(permanentElement) {
- const placeholder = createPlaceholderForPermanentElement(permanentElement);
- permanentElement.replaceWith(placeholder);
- }
- replaceCurrentPermanentElementWithClone(permanentElement) {
- const clone2 = permanentElement.cloneNode(true);
- permanentElement.replaceWith(clone2);
- }
- replacePlaceholderWithPermanentElement(permanentElement) {
- const placeholder = this.getPlaceholderById(permanentElement.id);
- placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);
- }
- getPlaceholderById(id) {
- return this.placeholders.find((element) => element.content == id);
- }
- get placeholders() {
- return [...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")];
- }
- };
- function createPlaceholderForPermanentElement(permanentElement) {
- const element = document.createElement("meta");
- element.setAttribute("name", "turbo-permanent-placeholder");
- element.setAttribute("content", permanentElement.id);
- return element;
- }
- var Renderer = class {
- constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
- this.activeElement = null;
- this.currentSnapshot = currentSnapshot;
- this.newSnapshot = newSnapshot;
- this.isPreview = isPreview;
- this.willRender = willRender;
- this.renderElement = renderElement;
- this.promise = new Promise((resolve, reject) => this.resolvingFunctions = { resolve, reject });
- }
- get shouldRender() {
- return true;
- }
- get reloadReason() {
- return;
- }
- prepareToRender() {
- return;
- }
- finishRendering() {
- if (this.resolvingFunctions) {
- this.resolvingFunctions.resolve();
- delete this.resolvingFunctions;
- }
- }
- async preservingPermanentElements(callback) {
- await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);
- }
- focusFirstAutofocusableElement() {
- const element = this.connectedSnapshot.firstAutofocusableElement;
- if (elementIsFocusable(element)) {
- element.focus();
- }
- }
- enteringBardo(currentPermanentElement) {
- if (this.activeElement)
- return;
- if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {
- this.activeElement = this.currentSnapshot.activeElement;
- }
- }
- leavingBardo(currentPermanentElement) {
- if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {
- this.activeElement.focus();
- this.activeElement = null;
- }
- }
- get connectedSnapshot() {
- return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;
- }
- get currentElement() {
- return this.currentSnapshot.element;
- }
- get newElement() {
- return this.newSnapshot.element;
- }
- get permanentElementMap() {
- return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);
- }
- };
- function elementIsFocusable(element) {
- return element && typeof element.focus == "function";
- }
- var FrameRenderer = class extends Renderer {
- static renderElement(currentElement, newElement) {
- var _a;
- const destinationRange = document.createRange();
- destinationRange.selectNodeContents(currentElement);
- destinationRange.deleteContents();
- const frameElement = newElement;
- const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();
- if (sourceRange) {
- sourceRange.selectNodeContents(frameElement);
- currentElement.appendChild(sourceRange.extractContents());
- }
- }
- constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {
- super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);
- this.delegate = delegate;
- }
- get shouldRender() {
- return true;
- }
- async render() {
- await nextAnimationFrame();
- this.preservingPermanentElements(() => {
- this.loadFrameElement();
- });
- this.scrollFrameIntoView();
- await nextAnimationFrame();
- this.focusFirstAutofocusableElement();
- await nextAnimationFrame();
- this.activateScriptElements();
- }
- loadFrameElement() {
- this.delegate.willRenderFrame(this.currentElement, this.newElement);
- this.renderElement(this.currentElement, this.newElement);
- }
- scrollFrameIntoView() {
- if (this.currentElement.autoscroll || this.newElement.autoscroll) {
- const element = this.currentElement.firstElementChild;
- const block = readScrollLogicalPosition(this.currentElement.getAttribute("data-autoscroll-block"), "end");
- const behavior = readScrollBehavior(this.currentElement.getAttribute("data-autoscroll-behavior"), "auto");
- if (element) {
- element.scrollIntoView({ block, behavior });
- return true;
- }
- }
- return false;
- }
- activateScriptElements() {
- for (const inertScriptElement of this.newScriptElements) {
- const activatedScriptElement = activateScriptElement(inertScriptElement);
- inertScriptElement.replaceWith(activatedScriptElement);
- }
- }
- get newScriptElements() {
- return this.currentElement.querySelectorAll("script");
- }
- };
- function readScrollLogicalPosition(value, defaultValue) {
- if (value == "end" || value == "start" || value == "center" || value == "nearest") {
- return value;
- } else {
- return defaultValue;
- }
- }
- function readScrollBehavior(value, defaultValue) {
- if (value == "auto" || value == "smooth") {
- return value;
- } else {
- return defaultValue;
- }
- }
- var ProgressBar = class {
- static get defaultCSS() {
- return unindent`
- .turbo-progress-bar {
- position: fixed;
- display: block;
- top: 0;
- left: 0;
- height: 3px;
- background: #0076ff;
- z-index: 2147483647;
- transition:
- width ${ProgressBar.animationDuration}ms ease-out,
- opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;
- transform: translate3d(0, 0, 0);
- }
- `;
- }
- constructor() {
- this.hiding = false;
- this.value = 0;
- this.visible = false;
- this.trickle = () => {
- this.setValue(this.value + Math.random() / 100);
- };
- this.stylesheetElement = this.createStylesheetElement();
- this.progressElement = this.createProgressElement();
- this.installStylesheetElement();
- this.setValue(0);
- }
- show() {
- if (!this.visible) {
- this.visible = true;
- this.installProgressElement();
- this.startTrickling();
- }
- }
- hide() {
- if (this.visible && !this.hiding) {
- this.hiding = true;
- this.fadeProgressElement(() => {
- this.uninstallProgressElement();
- this.stopTrickling();
- this.visible = false;
- this.hiding = false;
- });
- }
- }
- setValue(value) {
- this.value = value;
- this.refresh();
- }
- installStylesheetElement() {
- document.head.insertBefore(this.stylesheetElement, document.head.firstChild);
- }
- installProgressElement() {
- this.progressElement.style.width = "0";
- this.progressElement.style.opacity = "1";
- document.documentElement.insertBefore(this.progressElement, document.body);
- this.refresh();
- }
- fadeProgressElement(callback) {
- this.progressElement.style.opacity = "0";
- setTimeout(callback, ProgressBar.animationDuration * 1.5);
- }
- uninstallProgressElement() {
- if (this.progressElement.parentNode) {
- document.documentElement.removeChild(this.progressElement);
- }
- }
- startTrickling() {
- if (!this.trickleInterval) {
- this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);
- }
- }
- stopTrickling() {
- window.clearInterval(this.trickleInterval);
- delete this.trickleInterval;
- }
- refresh() {
- requestAnimationFrame(() => {
- this.progressElement.style.width = `${10 + this.value * 90}%`;
- });
- }
- createStylesheetElement() {
- const element = document.createElement("style");
- element.type = "text/css";
- element.textContent = ProgressBar.defaultCSS;
- if (this.cspNonce) {
- element.nonce = this.cspNonce;
- }
- return element;
- }
- createProgressElement() {
- const element = document.createElement("div");
- element.className = "turbo-progress-bar";
- return element;
- }
- get cspNonce() {
- return getMetaContent("csp-nonce");
- }
- };
- ProgressBar.animationDuration = 300;
- var HeadSnapshot = class extends Snapshot {
- constructor() {
- super(...arguments);
- this.detailsByOuterHTML = this.children.filter((element) => !elementIsNoscript(element)).map((element) => elementWithoutNonce(element)).reduce((result, element) => {
- const { outerHTML } = element;
- const details = outerHTML in result ? result[outerHTML] : {
- type: elementType(element),
- tracked: elementIsTracked(element),
- elements: []
- };
- return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });
- }, {});
- }
- get trackedElementSignature() {
- return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked).join("");
- }
- getScriptElementsNotInSnapshot(snapshot) {
- return this.getElementsMatchingTypeNotInSnapshot("script", snapshot);
- }
- getStylesheetElementsNotInSnapshot(snapshot) {
- return this.getElementsMatchingTypeNotInSnapshot("stylesheet", snapshot);
- }
- getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {
- return Object.keys(this.detailsByOuterHTML).filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML)).map((outerHTML) => this.detailsByOuterHTML[outerHTML]).filter(({ type }) => type == matchedType).map(({ elements: [element] }) => element);
- }
- get provisionalElements() {
- return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
- const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];
- if (type == null && !tracked) {
- return [...result, ...elements];
- } else if (elements.length > 1) {
- return [...result, ...elements.slice(1)];
- } else {
- return result;
- }
- }, []);
- }
- getMetaValue(name) {
- const element = this.findMetaElementByName(name);
- return element ? element.getAttribute("content") : null;
- }
- findMetaElementByName(name) {
- return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {
- const { elements: [element] } = this.detailsByOuterHTML[outerHTML];
- return elementIsMetaElementWithName(element, name) ? element : result;
- }, void 0);
- }
- };
- function elementType(element) {
- if (elementIsScript(element)) {
- return "script";
- } else if (elementIsStylesheet(element)) {
- return "stylesheet";
- }
- }
- function elementIsTracked(element) {
- return element.getAttribute("data-turbo-track") == "reload";
- }
- function elementIsScript(element) {
- const tagName = element.localName;
- return tagName == "script";
- }
- function elementIsNoscript(element) {
- const tagName = element.localName;
- return tagName == "noscript";
- }
- function elementIsStylesheet(element) {
- const tagName = element.localName;
- return tagName == "style" || tagName == "link" && element.getAttribute("rel") == "stylesheet";
- }
- function elementIsMetaElementWithName(element, name) {
- const tagName = element.localName;
- return tagName == "meta" && element.getAttribute("name") == name;
- }
- function elementWithoutNonce(element) {
- if (element.hasAttribute("nonce")) {
- element.setAttribute("nonce", "");
- }
- return element;
- }
- var PageSnapshot = class extends Snapshot {
- static fromHTMLString(html = "") {
- return this.fromDocument(parseHTMLDocument(html));
- }
- static fromElement(element) {
- return this.fromDocument(element.ownerDocument);
- }
- static fromDocument({ head, body }) {
- return new this(body, new HeadSnapshot(head));
- }
- constructor(element, headSnapshot) {
- super(element);
- this.headSnapshot = headSnapshot;
- }
- clone() {
- const clonedElement = this.element.cloneNode(true);
- const selectElements = this.element.querySelectorAll("select");
- const clonedSelectElements = clonedElement.querySelectorAll("select");
- for (const [index, source] of selectElements.entries()) {
- const clone2 = clonedSelectElements[index];
- for (const option of clone2.selectedOptions)
- option.selected = false;
- for (const option of source.selectedOptions)
- clone2.options[option.index].selected = true;
- }
- for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type="password"]')) {
- clonedPasswordInput.value = "";
- }
- return new PageSnapshot(clonedElement, this.headSnapshot);
- }
- get headElement() {
- return this.headSnapshot.element;
- }
- get rootLocation() {
- var _a;
- const root = (_a = this.getSetting("root")) !== null && _a !== void 0 ? _a : "/";
- return expandURL(root);
- }
- get cacheControlValue() {
- return this.getSetting("cache-control");
- }
- get isPreviewable() {
- return this.cacheControlValue != "no-preview";
- }
- get isCacheable() {
- return this.cacheControlValue != "no-cache";
- }
- get isVisitable() {
- return this.getSetting("visit-control") != "reload";
- }
- getSetting(name) {
- return this.headSnapshot.getMetaValue(`turbo-${name}`);
- }
- };
- var TimingMetric;
- (function(TimingMetric2) {
- TimingMetric2["visitStart"] = "visitStart";
- TimingMetric2["requestStart"] = "requestStart";
- TimingMetric2["requestEnd"] = "requestEnd";
- TimingMetric2["visitEnd"] = "visitEnd";
- })(TimingMetric || (TimingMetric = {}));
- var VisitState;
- (function(VisitState2) {
- VisitState2["initialized"] = "initialized";
- VisitState2["started"] = "started";
- VisitState2["canceled"] = "canceled";
- VisitState2["failed"] = "failed";
- VisitState2["completed"] = "completed";
- })(VisitState || (VisitState = {}));
- var defaultOptions = {
- action: "advance",
- historyChanged: false,
- visitCachedSnapshot: () => {
- },
- willRender: true,
- updateHistory: true,
- shouldCacheSnapshot: true,
- acceptsStreamResponse: false
- };
- var SystemStatusCode;
- (function(SystemStatusCode2) {
- SystemStatusCode2[SystemStatusCode2["networkFailure"] = 0] = "networkFailure";
- SystemStatusCode2[SystemStatusCode2["timeoutFailure"] = -1] = "timeoutFailure";
- SystemStatusCode2[SystemStatusCode2["contentTypeMismatch"] = -2] = "contentTypeMismatch";
- })(SystemStatusCode || (SystemStatusCode = {}));
- var Visit = class {
- constructor(delegate, location2, restorationIdentifier, options = {}) {
- this.identifier = uuid();
- this.timingMetrics = {};
- this.followedRedirect = false;
- this.historyChanged = false;
- this.scrolled = false;
- this.shouldCacheSnapshot = true;
- this.acceptsStreamResponse = false;
- this.snapshotCached = false;
- this.state = VisitState.initialized;
- this.delegate = delegate;
- this.location = location2;
- this.restorationIdentifier = restorationIdentifier || uuid();
- const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse } = Object.assign(Object.assign({}, defaultOptions), options);
- this.action = action;
- this.historyChanged = historyChanged;
- this.referrer = referrer;
- this.snapshot = snapshot;
- this.snapshotHTML = snapshotHTML;
- this.response = response;
- this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);
- this.visitCachedSnapshot = visitCachedSnapshot;
- this.willRender = willRender;
- this.updateHistory = updateHistory;
- this.scrolled = !willRender;
- this.shouldCacheSnapshot = shouldCacheSnapshot;
- this.acceptsStreamResponse = acceptsStreamResponse;
- }
- get adapter() {
- return this.delegate.adapter;
- }
- get view() {
- return this.delegate.view;
- }
- get history() {
- return this.delegate.history;
- }
- get restorationData() {
- return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);
- }
- get silent() {
- return this.isSamePage;
- }
- start() {
- if (this.state == VisitState.initialized) {
- this.recordTimingMetric(TimingMetric.visitStart);
- this.state = VisitState.started;
- this.adapter.visitStarted(this);
- this.delegate.visitStarted(this);
- }
- }
- cancel() {
- if (this.state == VisitState.started) {
- if (this.request) {
- this.request.cancel();
- }
- this.cancelRender();
- this.state = VisitState.canceled;
- }
- }
- complete() {
- if (this.state == VisitState.started) {
- this.recordTimingMetric(TimingMetric.visitEnd);
- this.state = VisitState.completed;
- this.followRedirect();
- if (!this.followedRedirect) {
- this.adapter.visitCompleted(this);
- this.delegate.visitCompleted(this);
- }
- }
- }
- fail() {
- if (this.state == VisitState.started) {
- this.state = VisitState.failed;
- this.adapter.visitFailed(this);
- }
- }
- changeHistory() {
- var _a;
- if (!this.historyChanged && this.updateHistory) {
- const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? "replace" : this.action;
- const method = getHistoryMethodForAction(actionForHistory);
- this.history.update(method, this.location, this.restorationIdentifier);
- this.historyChanged = true;
- }
- }
- issueRequest() {
- if (this.hasPreloadedResponse()) {
- this.simulateRequest();
- } else if (this.shouldIssueRequest() && !this.request) {
- this.request = new FetchRequest(this, FetchMethod.get, this.location);
- this.request.perform();
- }
- }
- simulateRequest() {
- if (this.response) {
- this.startRequest();
- this.recordResponse();
- this.finishRequest();
- }
- }
- startRequest() {
- this.recordTimingMetric(TimingMetric.requestStart);
- this.adapter.visitRequestStarted(this);
- }
- recordResponse(response = this.response) {
- this.response = response;
- if (response) {
- const { statusCode } = response;
- if (isSuccessful(statusCode)) {
- this.adapter.visitRequestCompleted(this);
- } else {
- this.adapter.visitRequestFailedWithStatusCode(this, statusCode);
- }
- }
- }
- finishRequest() {
- this.recordTimingMetric(TimingMetric.requestEnd);
- this.adapter.visitRequestFinished(this);
- }
- loadResponse() {
- if (this.response) {
- const { statusCode, responseHTML } = this.response;
- this.render(async () => {
- if (this.shouldCacheSnapshot)
- this.cacheSnapshot();
- if (this.view.renderPromise)
- await this.view.renderPromise;
- if (isSuccessful(statusCode) && responseHTML != null) {
- await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);
- this.performScroll();
- this.adapter.visitRendered(this);
- this.complete();
- } else {
- await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);
- this.adapter.visitRendered(this);
- this.fail();
- }
- });
- }
- }
- getCachedSnapshot() {
- const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();
- if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {
- if (this.action == "restore" || snapshot.isPreviewable) {
- return snapshot;
- }
- }
- }
- getPreloadedSnapshot() {
- if (this.snapshotHTML) {
- return PageSnapshot.fromHTMLString(this.snapshotHTML);
- }
- }
- hasCachedSnapshot() {
- return this.getCachedSnapshot() != null;
- }
- loadCachedSnapshot() {
- const snapshot = this.getCachedSnapshot();
- if (snapshot) {
- const isPreview = this.shouldIssueRequest();
- this.render(async () => {
- this.cacheSnapshot();
- if (this.isSamePage) {
- this.adapter.visitRendered(this);
- } else {
- if (this.view.renderPromise)
- await this.view.renderPromise;
- await this.view.renderPage(snapshot, isPreview, this.willRender, this);
- this.performScroll();
- this.adapter.visitRendered(this);
- if (!isPreview) {
- this.complete();
- }
- }
- });
- }
- }
- followRedirect() {
- var _a;
- if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {
- this.adapter.visitProposedToLocation(this.redirectedToLocation, {
- action: "replace",
- response: this.response,
- shouldCacheSnapshot: false,
- willRender: false
- });
- this.followedRedirect = true;
- }
- }
- goToSamePageAnchor() {
- if (this.isSamePage) {
- this.render(async () => {
- this.cacheSnapshot();
- this.performScroll();
- this.changeHistory();
- this.adapter.visitRendered(this);
- });
- }
- }
- prepareRequest(request) {
- if (this.acceptsStreamResponse) {
- request.acceptResponseType(StreamMessage.contentType);
- }
- }
- requestStarted() {
- this.startRequest();
- }
- requestPreventedHandlingResponse(_request, _response) {
- }
- async requestSucceededWithResponse(request, response) {
- const responseHTML = await response.responseHTML;
- const { redirected, statusCode } = response;
- if (responseHTML == void 0) {
- this.recordResponse({
- statusCode: SystemStatusCode.contentTypeMismatch,
- redirected
- });
- } else {
- this.redirectedToLocation = response.redirected ? response.location : void 0;
- this.recordResponse({ statusCode, responseHTML, redirected });
- }
- }
- async requestFailedWithResponse(request, response) {
- const responseHTML = await response.responseHTML;
- const { redirected, statusCode } = response;
- if (responseHTML == void 0) {
- this.recordResponse({
- statusCode: SystemStatusCode.contentTypeMismatch,
- redirected
- });
- } else {
- this.recordResponse({ statusCode, responseHTML, redirected });
- }
- }
- requestErrored(_request, _error) {
- this.recordResponse({
- statusCode: SystemStatusCode.networkFailure,
- redirected: false
- });
- }
- requestFinished() {
- this.finishRequest();
- }
- performScroll() {
- if (!this.scrolled && !this.view.forceReloaded) {
- if (this.action == "restore") {
- this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();
- } else {
- this.scrollToAnchor() || this.view.scrollToTop();
- }
- if (this.isSamePage) {
- this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);
- }
- this.scrolled = true;
- }
- }
- scrollToRestoredPosition() {
- const { scrollPosition } = this.restorationData;
- if (scrollPosition) {
- this.view.scrollToPosition(scrollPosition);
- return true;
- }
- }
- scrollToAnchor() {
- const anchor = getAnchor(this.location);
- if (anchor != null) {
- this.view.scrollToAnchor(anchor);
- return true;
- }
- }
- recordTimingMetric(metric) {
- this.timingMetrics[metric] = (/* @__PURE__ */ new Date()).getTime();
- }
- getTimingMetrics() {
- return Object.assign({}, this.timingMetrics);
- }
- getHistoryMethodForAction(action) {
- switch (action) {
- case "replace":
- return history.replaceState;
- case "advance":
- case "restore":
- return history.pushState;
- }
- }
- hasPreloadedResponse() {
- return typeof this.response == "object";
- }
- shouldIssueRequest() {
- if (this.isSamePage) {
- return false;
- } else if (this.action == "restore") {
- return !this.hasCachedSnapshot();
- } else {
- return this.willRender;
- }
- }
- cacheSnapshot() {
- if (!this.snapshotCached) {
- this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));
- this.snapshotCached = true;
- }
- }
- async render(callback) {
- this.cancelRender();
- await new Promise((resolve) => {
- this.frame = requestAnimationFrame(() => resolve());
- });
- await callback();
- delete this.frame;
- }
- cancelRender() {
- if (this.frame) {
- cancelAnimationFrame(this.frame);
- delete this.frame;
- }
- }
- };
- function isSuccessful(statusCode) {
- return statusCode >= 200 && statusCode < 300;
- }
- var BrowserAdapter = class {
- constructor(session2) {
- this.progressBar = new ProgressBar();
- this.showProgressBar = () => {
- this.progressBar.show();
- };
- this.session = session2;
- }
- visitProposedToLocation(location2, options) {
- this.navigator.startVisit(location2, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);
- }
- visitStarted(visit2) {
- this.location = visit2.location;
- visit2.loadCachedSnapshot();
- visit2.issueRequest();
- visit2.goToSamePageAnchor();
- }
- visitRequestStarted(visit2) {
- this.progressBar.setValue(0);
- if (visit2.hasCachedSnapshot() || visit2.action != "restore") {
- this.showVisitProgressBarAfterDelay();
- } else {
- this.showProgressBar();
- }
- }
- visitRequestCompleted(visit2) {
- visit2.loadResponse();
- }
- visitRequestFailedWithStatusCode(visit2, statusCode) {
- switch (statusCode) {
- case SystemStatusCode.networkFailure:
- case SystemStatusCode.timeoutFailure:
- case SystemStatusCode.contentTypeMismatch:
- return this.reload({
- reason: "request_failed",
- context: {
- statusCode
- }
- });
- default:
- return visit2.loadResponse();
- }
- }
- visitRequestFinished(_visit) {
- this.progressBar.setValue(1);
- this.hideVisitProgressBar();
- }
- visitCompleted(_visit) {
- }
- pageInvalidated(reason) {
- this.reload(reason);
- }
- visitFailed(_visit) {
- }
- visitRendered(_visit) {
- }
- formSubmissionStarted(_formSubmission) {
- this.progressBar.setValue(0);
- this.showFormProgressBarAfterDelay();
- }
- formSubmissionFinished(_formSubmission) {
- this.progressBar.setValue(1);
- this.hideFormProgressBar();
- }
- showVisitProgressBarAfterDelay() {
- this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);
- }
- hideVisitProgressBar() {
- this.progressBar.hide();
- if (this.visitProgressBarTimeout != null) {
- window.clearTimeout(this.visitProgressBarTimeout);
- delete this.visitProgressBarTimeout;
- }
- }
- showFormProgressBarAfterDelay() {
- if (this.formProgressBarTimeout == null) {
- this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);
- }
- }
- hideFormProgressBar() {
- this.progressBar.hide();
- if (this.formProgressBarTimeout != null) {
- window.clearTimeout(this.formProgressBarTimeout);
- delete this.formProgressBarTimeout;
- }
- }
- reload(reason) {
- var _a;
- dispatch2("turbo:reload", { detail: reason });
- window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;
- }
- get navigator() {
- return this.session.navigator;
- }
- };
- var CacheObserver = class {
- constructor() {
- this.selector = "[data-turbo-temporary]";
- this.deprecatedSelector = "[data-turbo-cache=false]";
- this.started = false;
- this.removeTemporaryElements = (_event) => {
- for (const element of this.temporaryElements) {
- element.remove();
- }
- };
- }
- start() {
- if (!this.started) {
- this.started = true;
- addEventListener("turbo:before-cache", this.removeTemporaryElements, false);
- }
- }
- stop() {
- if (this.started) {
- this.started = false;
- removeEventListener("turbo:before-cache", this.removeTemporaryElements, false);
- }
- }
- get temporaryElements() {
- return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];
- }
- get temporaryElementsWithDeprecation() {
- const elements = document.querySelectorAll(this.deprecatedSelector);
- if (elements.length) {
- console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);
- }
- return [...elements];
- }
- };
- var FrameRedirector = class {
- constructor(session2, element) {
- this.session = session2;
- this.element = element;
- this.linkInterceptor = new LinkInterceptor(this, element);
- this.formSubmitObserver = new FormSubmitObserver(this, element);
- }
- start() {
- this.linkInterceptor.start();
- this.formSubmitObserver.start();
- }
- stop() {
- this.linkInterceptor.stop();
- this.formSubmitObserver.stop();
- }
- shouldInterceptLinkClick(element, _location, _event) {
- return this.shouldRedirect(element);
- }
- linkClickIntercepted(element, url, event) {
- const frame = this.findFrameElement(element);
- if (frame) {
- frame.delegate.linkClickIntercepted(element, url, event);
- }
- }
- willSubmitForm(element, submitter) {
- return element.closest("turbo-frame") == null && this.shouldSubmit(element, submitter) && this.shouldRedirect(element, submitter);
- }
- formSubmitted(element, submitter) {
- const frame = this.findFrameElement(element, submitter);
- if (frame) {
- frame.delegate.formSubmitted(element, submitter);
- }
- }
- shouldSubmit(form, submitter) {
- var _a;
- const action = getAction(form, submitter);
- const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`);
- const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : "/");
- return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);
- }
- shouldRedirect(element, submitter) {
- const isNavigatable = element instanceof HTMLFormElement ? this.session.submissionIsNavigatable(element, submitter) : this.session.elementIsNavigatable(element);
- if (isNavigatable) {
- const frame = this.findFrameElement(element, submitter);
- return frame ? frame != element.closest("turbo-frame") : false;
- } else {
- return false;
- }
- }
- findFrameElement(element, submitter) {
- const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute("data-turbo-frame")) || element.getAttribute("data-turbo-frame");
- if (id && id != "_top") {
- const frame = this.element.querySelector(`#${id}:not([disabled])`);
- if (frame instanceof FrameElement) {
- return frame;
- }
- }
- }
- };
- var History = class {
- constructor(delegate) {
- this.restorationIdentifier = uuid();
- this.restorationData = {};
- this.started = false;
- this.pageLoaded = false;
- this.onPopState = (event) => {
- if (this.shouldHandlePopState()) {
- const { turbo } = event.state || {};
- if (turbo) {
- this.location = new URL(window.location.href);
- const { restorationIdentifier } = turbo;
- this.restorationIdentifier = restorationIdentifier;
- this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);
- }
- }
- };
- this.onPageLoad = async (_event) => {
- await nextMicrotask();
- this.pageLoaded = true;
- };
- this.delegate = delegate;
- }
- start() {
- if (!this.started) {
- addEventListener("popstate", this.onPopState, false);
- addEventListener("load", this.onPageLoad, false);
- this.started = true;
- this.replace(new URL(window.location.href));
- }
- }
- stop() {
- if (this.started) {
- removeEventListener("popstate", this.onPopState, false);
- removeEventListener("load", this.onPageLoad, false);
- this.started = false;
- }
- }
- push(location2, restorationIdentifier) {
- this.update(history.pushState, location2, restorationIdentifier);
- }
- replace(location2, restorationIdentifier) {
- this.update(history.replaceState, location2, restorationIdentifier);
- }
- update(method, location2, restorationIdentifier = uuid()) {
- const state = { turbo: { restorationIdentifier } };
- method.call(history, state, "", location2.href);
- this.location = location2;
- this.restorationIdentifier = restorationIdentifier;
- }
- getRestorationDataForIdentifier(restorationIdentifier) {
- return this.restorationData[restorationIdentifier] || {};
- }
- updateRestorationData(additionalData) {
- const { restorationIdentifier } = this;
- const restorationData = this.restorationData[restorationIdentifier];
- this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);
- }
- assumeControlOfScrollRestoration() {
- var _a;
- if (!this.previousScrollRestoration) {
- this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : "auto";
- history.scrollRestoration = "manual";
- }
- }
- relinquishControlOfScrollRestoration() {
- if (this.previousScrollRestoration) {
- history.scrollRestoration = this.previousScrollRestoration;
- delete this.previousScrollRestoration;
- }
- }
- shouldHandlePopState() {
- return this.pageIsLoaded();
- }
- pageIsLoaded() {
- return this.pageLoaded || document.readyState == "complete";
- }
- };
- var Navigator = class {
- constructor(delegate) {
- this.delegate = delegate;
- }
- proposeVisit(location2, options = {}) {
- if (this.delegate.allowsVisitingLocationWithAction(location2, options.action)) {
- if (locationIsVisitable(location2, this.view.snapshot.rootLocation)) {
- this.delegate.visitProposedToLocation(location2, options);
- } else {
- window.location.href = location2.toString();
- }
- }
- }
- startVisit(locatable, restorationIdentifier, options = {}) {
- this.stop();
- this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));
- this.currentVisit.start();
- }
- submitForm(form, submitter) {
- this.stop();
- this.formSubmission = new FormSubmission(this, form, submitter, true);
- this.formSubmission.start();
- }
- stop() {
- if (this.formSubmission) {
- this.formSubmission.stop();
- delete this.formSubmission;
- }
- if (this.currentVisit) {
- this.currentVisit.cancel();
- delete this.currentVisit;
- }
- }
- get adapter() {
- return this.delegate.adapter;
- }
- get view() {
- return this.delegate.view;
- }
- get history() {
- return this.delegate.history;
- }
- formSubmissionStarted(formSubmission) {
- if (typeof this.adapter.formSubmissionStarted === "function") {
- this.adapter.formSubmissionStarted(formSubmission);
- }
- }
- async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {
- if (formSubmission == this.formSubmission) {
- const responseHTML = await fetchResponse.responseHTML;
- if (responseHTML) {
- const shouldCacheSnapshot = formSubmission.isSafe;
- if (!shouldCacheSnapshot) {
- this.view.clearSnapshotCache();
- }
- const { statusCode, redirected } = fetchResponse;
- const action = this.getActionForFormSubmission(formSubmission);
- const visitOptions = {
- action,
- shouldCacheSnapshot,
- response: { statusCode, responseHTML, redirected }
- };
- this.proposeVisit(fetchResponse.location, visitOptions);
- }
- }
- }
- async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {
- const responseHTML = await fetchResponse.responseHTML;
- if (responseHTML) {
- const snapshot = PageSnapshot.fromHTMLString(responseHTML);
- if (fetchResponse.serverError) {
- await this.view.renderError(snapshot, this.currentVisit);
- } else {
- await this.view.renderPage(snapshot, false, true, this.currentVisit);
- }
- this.view.scrollToTop();
- this.view.clearSnapshotCache();
- }
- }
- formSubmissionErrored(formSubmission, error2) {
- console.error(error2);
- }
- formSubmissionFinished(formSubmission) {
- if (typeof this.adapter.formSubmissionFinished === "function") {
- this.adapter.formSubmissionFinished(formSubmission);
- }
- }
- visitStarted(visit2) {
- this.delegate.visitStarted(visit2);
- }
- visitCompleted(visit2) {
- this.delegate.visitCompleted(visit2);
- }
- locationWithActionIsSamePage(location2, action) {
- const anchor = getAnchor(location2);
- const currentAnchor = getAnchor(this.view.lastRenderedLocation);
- const isRestorationToTop = action === "restore" && typeof anchor === "undefined";
- return action !== "replace" && getRequestURL(location2) === getRequestURL(this.view.lastRenderedLocation) && (isRestorationToTop || anchor != null && anchor !== currentAnchor);
- }
- visitScrolledToSamePageLocation(oldURL, newURL) {
- this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);
- }
- get location() {
- return this.history.location;
- }
- get restorationIdentifier() {
- return this.history.restorationIdentifier;
- }
- getActionForFormSubmission({ submitter, formElement }) {
- return getVisitAction(submitter, formElement) || "advance";
- }
- };
- var PageStage;
- (function(PageStage2) {
- PageStage2[PageStage2["initial"] = 0] = "initial";
- PageStage2[PageStage2["loading"] = 1] = "loading";
- PageStage2[PageStage2["interactive"] = 2] = "interactive";
- PageStage2[PageStage2["complete"] = 3] = "complete";
- })(PageStage || (PageStage = {}));
- var PageObserver = class {
- constructor(delegate) {
- this.stage = PageStage.initial;
- this.started = false;
- this.interpretReadyState = () => {
- const { readyState } = this;
- if (readyState == "interactive") {
- this.pageIsInteractive();
- } else if (readyState == "complete") {
- this.pageIsComplete();
- }
- };
- this.pageWillUnload = () => {
- this.delegate.pageWillUnload();
- };
- this.delegate = delegate;
- }
- start() {
- if (!this.started) {
- if (this.stage == PageStage.initial) {
- this.stage = PageStage.loading;
- }
- document.addEventListener("readystatechange", this.interpretReadyState, false);
- addEventListener("pagehide", this.pageWillUnload, false);
- this.started = true;
- }
- }
- stop() {
- if (this.started) {
- document.removeEventListener("readystatechange", this.interpretReadyState, false);
- removeEventListener("pagehide", this.pageWillUnload, false);
- this.started = false;
- }
- }
- pageIsInteractive() {
- if (this.stage == PageStage.loading) {
- this.stage = PageStage.interactive;
- this.delegate.pageBecameInteractive();
- }
- }
- pageIsComplete() {
- this.pageIsInteractive();
- if (this.stage == PageStage.interactive) {
- this.stage = PageStage.complete;
- this.delegate.pageLoaded();
- }
- }
- get readyState() {
- return document.readyState;
- }
- };
- var ScrollObserver = class {
- constructor(delegate) {
- this.started = false;
- this.onScroll = () => {
- this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });
- };
- this.delegate = delegate;
- }
- start() {
- if (!this.started) {
- addEventListener("scroll", this.onScroll, false);
- this.onScroll();
- this.started = true;
- }
- }
- stop() {
- if (this.started) {
- removeEventListener("scroll", this.onScroll, false);
- this.started = false;
- }
- }
- updatePosition(position) {
- this.delegate.scrollPositionChanged(position);
- }
- };
- var StreamMessageRenderer = class {
- render({ fragment }) {
- Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));
- }
- enteringBardo(currentPermanentElement, newPermanentElement) {
- newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));
- }
- leavingBardo() {
- }
- };
- function getPermanentElementMapForFragment(fragment) {
- const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);
- const permanentElementMap = {};
- for (const permanentElementInDocument of permanentElementsInDocument) {
- const { id } = permanentElementInDocument;
- for (const streamElement of fragment.querySelectorAll("turbo-stream")) {
- const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);
- if (elementInStream) {
- permanentElementMap[id] = [permanentElementInDocument, elementInStream];
- }
- }
- }
- return permanentElementMap;
- }
- var StreamObserver = class {
- constructor(delegate) {
- this.sources = /* @__PURE__ */ new Set();
- this.started = false;
- this.inspectFetchResponse = (event) => {
- const response = fetchResponseFromEvent(event);
- if (response && fetchResponseIsStream(response)) {
- event.preventDefault();
- this.receiveMessageResponse(response);
- }
- };
- this.receiveMessageEvent = (event) => {
- if (this.started && typeof event.data == "string") {
- this.receiveMessageHTML(event.data);
- }
- };
- this.delegate = delegate;
- }
- start() {
- if (!this.started) {
- this.started = true;
- addEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false);
- }
- }
- stop() {
- if (this.started) {
- this.started = false;
- removeEventListener("turbo:before-fetch-response", this.inspectFetchResponse, false);
- }
- }
- connectStreamSource(source) {
- if (!this.streamSourceIsConnected(source)) {
- this.sources.add(source);
- source.addEventListener("message", this.receiveMessageEvent, false);
- }
- }
- disconnectStreamSource(source) {
- if (this.streamSourceIsConnected(source)) {
- this.sources.delete(source);
- source.removeEventListener("message", this.receiveMessageEvent, false);
- }
- }
- streamSourceIsConnected(source) {
- return this.sources.has(source);
- }
- async receiveMessageResponse(response) {
- const html = await response.responseHTML;
- if (html) {
- this.receiveMessageHTML(html);
- }
- }
- receiveMessageHTML(html) {
- this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));
- }
- };
- function fetchResponseFromEvent(event) {
- var _a;
- const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;
- if (fetchResponse instanceof FetchResponse) {
- return fetchResponse;
- }
- }
- function fetchResponseIsStream(response) {
- var _a;
- const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : "";
- return contentType.startsWith(StreamMessage.contentType);
- }
- var ErrorRenderer = class extends Renderer {
- static renderElement(currentElement, newElement) {
- const { documentElement, body } = document;
- documentElement.replaceChild(newElement, body);
- }
- async render() {
- this.replaceHeadAndBody();
- this.activateScriptElements();
- }
- replaceHeadAndBody() {
- const { documentElement, head } = document;
- documentElement.replaceChild(this.newHead, head);
- this.renderElement(this.currentElement, this.newElement);
- }
- activateScriptElements() {
- for (const replaceableElement of this.scriptElements) {
- const parentNode = replaceableElement.parentNode;
- if (parentNode) {
- const element = activateScriptElement(replaceableElement);
- parentNode.replaceChild(element, replaceableElement);
- }
- }
- }
- get newHead() {
- return this.newSnapshot.headSnapshot.element;
- }
- get scriptElements() {
- return document.documentElement.querySelectorAll("script");
- }
- };
- var PageRenderer = class extends Renderer {
- static renderElement(currentElement, newElement) {
- if (document.body && newElement instanceof HTMLBodyElement) {
- document.body.replaceWith(newElement);
- } else {
- document.documentElement.appendChild(newElement);
- }
- }
- get shouldRender() {
- return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;
- }
- get reloadReason() {
- if (!this.newSnapshot.isVisitable) {
- return {
- reason: "turbo_visit_control_is_reload"
- };
- }
- if (!this.trackedElementsAreIdentical) {
- return {
- reason: "tracked_element_mismatch"
- };
- }
- }
- async prepareToRender() {
- await this.mergeHead();
- }
- async render() {
- if (this.willRender) {
- await this.replaceBody();
- }
- }
- finishRendering() {
- super.finishRendering();
- if (!this.isPreview) {
- this.focusFirstAutofocusableElement();
- }
- }
- get currentHeadSnapshot() {
- return this.currentSnapshot.headSnapshot;
- }
- get newHeadSnapshot() {
- return this.newSnapshot.headSnapshot;
- }
- get newElement() {
- return this.newSnapshot.element;
- }
- async mergeHead() {
- const mergedHeadElements = this.mergeProvisionalElements();
- const newStylesheetElements = this.copyNewHeadStylesheetElements();
- this.copyNewHeadScriptElements();
- await mergedHeadElements;
- await newStylesheetElements;
- }
- async replaceBody() {
- await this.preservingPermanentElements(async () => {
- this.activateNewBody();
- await this.assignNewBody();
- });
- }
- get trackedElementsAreIdentical() {
- return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;
- }
- async copyNewHeadStylesheetElements() {
- const loadingElements = [];
- for (const element of this.newHeadStylesheetElements) {
- loadingElements.push(waitForLoad(element));
- document.head.appendChild(element);
- }
- await Promise.all(loadingElements);
- }
- copyNewHeadScriptElements() {
- for (const element of this.newHeadScriptElements) {
- document.head.appendChild(activateScriptElement(element));
- }
- }
- async mergeProvisionalElements() {
- const newHeadElements = [...this.newHeadProvisionalElements];
- for (const element of this.currentHeadProvisionalElements) {
- if (!this.isCurrentElementInElementList(element, newHeadElements)) {
- document.head.removeChild(element);
- }
- }
- for (const element of newHeadElements) {
- document.head.appendChild(element);
- }
- }
- isCurrentElementInElementList(element, elementList) {
- for (const [index, newElement] of elementList.entries()) {
- if (element.tagName == "TITLE") {
- if (newElement.tagName != "TITLE") {
- continue;
- }
- if (element.innerHTML == newElement.innerHTML) {
- elementList.splice(index, 1);
- return true;
- }
- }
- if (newElement.isEqualNode(element)) {
- elementList.splice(index, 1);
- return true;
- }
- }
- return false;
- }
- removeCurrentHeadProvisionalElements() {
- for (const element of this.currentHeadProvisionalElements) {
- document.head.removeChild(element);
- }
- }
- copyNewHeadProvisionalElements() {
- for (const element of this.newHeadProvisionalElements) {
- document.head.appendChild(element);
- }
- }
- activateNewBody() {
- document.adoptNode(this.newElement);
- this.activateNewBodyScriptElements();
- }
- activateNewBodyScriptElements() {
- for (const inertScriptElement of this.newBodyScriptElements) {
- const activatedScriptElement = activateScriptElement(inertScriptElement);
- inertScriptElement.replaceWith(activatedScriptElement);
- }
- }
- async assignNewBody() {
- await this.renderElement(this.currentElement, this.newElement);
- }
- get newHeadStylesheetElements() {
- return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);
- }
- get newHeadScriptElements() {
- return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);
- }
- get currentHeadProvisionalElements() {
- return this.currentHeadSnapshot.provisionalElements;
- }
- get newHeadProvisionalElements() {
- return this.newHeadSnapshot.provisionalElements;
- }
- get newBodyScriptElements() {
- return this.newElement.querySelectorAll("script");
- }
- };
- var SnapshotCache = class {
- constructor(size2) {
- this.keys = [];
- this.snapshots = {};
- this.size = size2;
- }
- has(location2) {
- return toCacheKey(location2) in this.snapshots;
- }
- get(location2) {
- if (this.has(location2)) {
- const snapshot = this.read(location2);
- this.touch(location2);
- return snapshot;
- }
- }
- put(location2, snapshot) {
- this.write(location2, snapshot);
- this.touch(location2);
- return snapshot;
- }
- clear() {
- this.snapshots = {};
- }
- read(location2) {
- return this.snapshots[toCacheKey(location2)];
- }
- write(location2, snapshot) {
- this.snapshots[toCacheKey(location2)] = snapshot;
- }
- touch(location2) {
- const key = toCacheKey(location2);
- const index = this.keys.indexOf(key);
- if (index > -1)
- this.keys.splice(index, 1);
- this.keys.unshift(key);
- this.trim();
- }
- trim() {
- for (const key of this.keys.splice(this.size)) {
- delete this.snapshots[key];
- }
- }
- };
- var PageView = class extends View {
- constructor() {
- super(...arguments);
- this.snapshotCache = new SnapshotCache(10);
- this.lastRenderedLocation = new URL(location.href);
- this.forceReloaded = false;
- }
- renderPage(snapshot, isPreview = false, willRender = true, visit2) {
- const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);
- if (!renderer.shouldRender) {
- this.forceReloaded = true;
- } else {
- visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();
- }
- return this.render(renderer);
- }
- renderError(snapshot, visit2) {
- visit2 === null || visit2 === void 0 ? void 0 : visit2.changeHistory();
- const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);
- return this.render(renderer);
- }
- clearSnapshotCache() {
- this.snapshotCache.clear();
- }
- async cacheSnapshot(snapshot = this.snapshot) {
- if (snapshot.isCacheable) {
- this.delegate.viewWillCacheSnapshot();
- const { lastRenderedLocation: location2 } = this;
- await nextEventLoopTick();
- const cachedSnapshot = snapshot.clone();
- this.snapshotCache.put(location2, cachedSnapshot);
- return cachedSnapshot;
- }
- }
- getCachedSnapshotForLocation(location2) {
- return this.snapshotCache.get(location2);
- }
- get snapshot() {
- return PageSnapshot.fromElement(this.element);
- }
- };
- var Preloader = class {
- constructor(delegate) {
- this.selector = "a[data-turbo-preload]";
- this.delegate = delegate;
- }
- get snapshotCache() {
- return this.delegate.navigator.view.snapshotCache;
- }
- start() {
- if (document.readyState === "loading") {
- return document.addEventListener("DOMContentLoaded", () => {
- this.preloadOnLoadLinksForView(document.body);
- });
- } else {
- this.preloadOnLoadLinksForView(document.body);
- }
- }
- preloadOnLoadLinksForView(element) {
- for (const link of element.querySelectorAll(this.selector)) {
- this.preloadURL(link);
- }
- }
- async preloadURL(link) {
- const location2 = new URL(link.href);
- if (this.snapshotCache.has(location2)) {
- return;
- }
- try {
- const response = await fetch(location2.toString(), { headers: { "VND.PREFETCH": "true", Accept: "text/html" } });
- const responseText = await response.text();
- const snapshot = PageSnapshot.fromHTMLString(responseText);
- this.snapshotCache.put(location2, snapshot);
- } catch (_2) {
- }
- }
- };
- var Session = class {
- constructor() {
- this.navigator = new Navigator(this);
- this.history = new History(this);
- this.preloader = new Preloader(this);
- this.view = new PageView(this, document.documentElement);
- this.adapter = new BrowserAdapter(this);
- this.pageObserver = new PageObserver(this);
- this.cacheObserver = new CacheObserver();
- this.linkClickObserver = new LinkClickObserver(this, window);
- this.formSubmitObserver = new FormSubmitObserver(this, document);
- this.scrollObserver = new ScrollObserver(this);
- this.streamObserver = new StreamObserver(this);
- this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);
- this.frameRedirector = new FrameRedirector(this, document.documentElement);
- this.streamMessageRenderer = new StreamMessageRenderer();
- this.drive = true;
- this.enabled = true;
- this.progressBarDelay = 500;
- this.started = false;
- this.formMode = "on";
- }
- start() {
- if (!this.started) {
- this.pageObserver.start();
- this.cacheObserver.start();
- this.formLinkClickObserver.start();
- this.linkClickObserver.start();
- this.formSubmitObserver.start();
- this.scrollObserver.start();
- this.streamObserver.start();
- this.frameRedirector.start();
- this.history.start();
- this.preloader.start();
- this.started = true;
- this.enabled = true;
- }
- }
- disable() {
- this.enabled = false;
- }
- stop() {
- if (this.started) {
- this.pageObserver.stop();
- this.cacheObserver.stop();
- this.formLinkClickObserver.stop();
- this.linkClickObserver.stop();
- this.formSubmitObserver.stop();
- this.scrollObserver.stop();
- this.streamObserver.stop();
- this.frameRedirector.stop();
- this.history.stop();
- this.started = false;
- }
- }
- registerAdapter(adapter) {
- this.adapter = adapter;
- }
- visit(location2, options = {}) {
- const frameElement = options.frame ? document.getElementById(options.frame) : null;
- if (frameElement instanceof FrameElement) {
- frameElement.src = location2.toString();
- frameElement.loaded;
- } else {
- this.navigator.proposeVisit(expandURL(location2), options);
- }
- }
- connectStreamSource(source) {
- this.streamObserver.connectStreamSource(source);
- }
- disconnectStreamSource(source) {
- this.streamObserver.disconnectStreamSource(source);
- }
- renderStreamMessage(message) {
- this.streamMessageRenderer.render(StreamMessage.wrap(message));
- }
- clearCache() {
- this.view.clearSnapshotCache();
- }
- setProgressBarDelay(delay3) {
- this.progressBarDelay = delay3;
- }
- setFormMode(mode) {
- this.formMode = mode;
- }
- get location() {
- return this.history.location;
- }
- get restorationIdentifier() {
- return this.history.restorationIdentifier;
- }
- historyPoppedToLocationWithRestorationIdentifier(location2, restorationIdentifier) {
- if (this.enabled) {
- this.navigator.startVisit(location2, restorationIdentifier, {
- action: "restore",
- historyChanged: true
- });
- } else {
- this.adapter.pageInvalidated({
- reason: "turbo_disabled"
- });
- }
- }
- scrollPositionChanged(position) {
- this.history.updateRestorationData({ scrollPosition: position });
- }
- willSubmitFormLinkToLocation(link, location2) {
- return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation);
- }
- submittedFormLinkToLocation() {
- }
- willFollowLinkToLocation(link, location2, event) {
- return this.elementIsNavigatable(link) && locationIsVisitable(location2, this.snapshot.rootLocation) && this.applicationAllowsFollowingLinkToLocation(link, location2, event);
- }
- followedLinkToLocation(link, location2) {
- const action = this.getActionForLink(link);
- const acceptsStreamResponse = link.hasAttribute("data-turbo-stream");
- this.visit(location2.href, { action, acceptsStreamResponse });
- }
- allowsVisitingLocationWithAction(location2, action) {
- return this.locationWithActionIsSamePage(location2, action) || this.applicationAllowsVisitingLocation(location2);
- }
- visitProposedToLocation(location2, options) {
- extendURLWithDeprecatedProperties(location2);
- this.adapter.visitProposedToLocation(location2, options);
- }
- visitStarted(visit2) {
- if (!visit2.acceptsStreamResponse) {
- markAsBusy(document.documentElement);
- }
- extendURLWithDeprecatedProperties(visit2.location);
- if (!visit2.silent) {
- this.notifyApplicationAfterVisitingLocation(visit2.location, visit2.action);
- }
- }
- visitCompleted(visit2) {
- clearBusyState(document.documentElement);
- this.notifyApplicationAfterPageLoad(visit2.getTimingMetrics());
- }
- locationWithActionIsSamePage(location2, action) {
- return this.navigator.locationWithActionIsSamePage(location2, action);
- }
- visitScrolledToSamePageLocation(oldURL, newURL) {
- this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);
- }
- willSubmitForm(form, submitter) {
- const action = getAction(form, submitter);
- return this.submissionIsNavigatable(form, submitter) && locationIsVisitable(expandURL(action), this.snapshot.rootLocation);
- }
- formSubmitted(form, submitter) {
- this.navigator.submitForm(form, submitter);
- }
- pageBecameInteractive() {
- this.view.lastRenderedLocation = this.location;
- this.notifyApplicationAfterPageLoad();
- }
- pageLoaded() {
- this.history.assumeControlOfScrollRestoration();
- }
- pageWillUnload() {
- this.history.relinquishControlOfScrollRestoration();
- }
- receivedMessageFromStream(message) {
- this.renderStreamMessage(message);
- }
- viewWillCacheSnapshot() {
- var _a;
- if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {
- this.notifyApplicationBeforeCachingSnapshot();
- }
- }
- allowsImmediateRender({ element }, options) {
- const event = this.notifyApplicationBeforeRender(element, options);
- const { defaultPrevented, detail: { render: render2 } } = event;
- if (this.view.renderer && render2) {
- this.view.renderer.renderElement = render2;
- }
- return !defaultPrevented;
- }
- viewRenderedSnapshot(_snapshot, _isPreview) {
- this.view.lastRenderedLocation = this.history.location;
- this.notifyApplicationAfterRender();
- }
- preloadOnLoadLinksForView(element) {
- this.preloader.preloadOnLoadLinksForView(element);
- }
- viewInvalidated(reason) {
- this.adapter.pageInvalidated(reason);
- }
- frameLoaded(frame) {
- this.notifyApplicationAfterFrameLoad(frame);
- }
- frameRendered(fetchResponse, frame) {
- this.notifyApplicationAfterFrameRender(fetchResponse, frame);
- }
- applicationAllowsFollowingLinkToLocation(link, location2, ev) {
- const event = this.notifyApplicationAfterClickingLinkToLocation(link, location2, ev);
- return !event.defaultPrevented;
- }
- applicationAllowsVisitingLocation(location2) {
- const event = this.notifyApplicationBeforeVisitingLocation(location2);
- return !event.defaultPrevented;
- }
- notifyApplicationAfterClickingLinkToLocation(link, location2, event) {
- return dispatch2("turbo:click", {
- target: link,
- detail: { url: location2.href, originalEvent: event },
- cancelable: true
- });
- }
- notifyApplicationBeforeVisitingLocation(location2) {
- return dispatch2("turbo:before-visit", {
- detail: { url: location2.href },
- cancelable: true
- });
- }
- notifyApplicationAfterVisitingLocation(location2, action) {
- return dispatch2("turbo:visit", { detail: { url: location2.href, action } });
- }
- notifyApplicationBeforeCachingSnapshot() {
- return dispatch2("turbo:before-cache");
- }
- notifyApplicationBeforeRender(newBody, options) {
- return dispatch2("turbo:before-render", {
- detail: Object.assign({ newBody }, options),
- cancelable: true
- });
- }
- notifyApplicationAfterRender() {
- return dispatch2("turbo:render");
- }
- notifyApplicationAfterPageLoad(timing = {}) {
- return dispatch2("turbo:load", {
- detail: { url: this.location.href, timing }
- });
- }
- notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {
- dispatchEvent(new HashChangeEvent("hashchange", {
- oldURL: oldURL.toString(),
- newURL: newURL.toString()
- }));
- }
- notifyApplicationAfterFrameLoad(frame) {
- return dispatch2("turbo:frame-load", { target: frame });
- }
- notifyApplicationAfterFrameRender(fetchResponse, frame) {
- return dispatch2("turbo:frame-render", {
- detail: { fetchResponse },
- target: frame,
- cancelable: true
- });
- }
- submissionIsNavigatable(form, submitter) {
- if (this.formMode == "off") {
- return false;
- } else {
- const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;
- if (this.formMode == "optin") {
- return submitterIsNavigatable && form.closest('[data-turbo="true"]') != null;
- } else {
- return submitterIsNavigatable && this.elementIsNavigatable(form);
- }
- }
- }
- elementIsNavigatable(element) {
- const container = findClosestRecursively(element, "[data-turbo]");
- const withinFrame = findClosestRecursively(element, "turbo-frame");
- if (this.drive || withinFrame) {
- if (container) {
- return container.getAttribute("data-turbo") != "false";
- } else {
- return true;
- }
- } else {
- if (container) {
- return container.getAttribute("data-turbo") == "true";
- } else {
- return false;
- }
- }
- }
- getActionForLink(link) {
- return getVisitAction(link) || "advance";
- }
- get snapshot() {
- return this.view.snapshot;
- }
- };
- function extendURLWithDeprecatedProperties(url) {
- Object.defineProperties(url, deprecatedLocationPropertyDescriptors);
- }
- var deprecatedLocationPropertyDescriptors = {
- absoluteURL: {
- get() {
- return this.toString();
- }
- }
- };
- var Cache = class {
- constructor(session2) {
- this.session = session2;
- }
- clear() {
- this.session.clearCache();
- }
- resetCacheControl() {
- this.setCacheControl("");
- }
- exemptPageFromCache() {
- this.setCacheControl("no-cache");
- }
- exemptPageFromPreview() {
- this.setCacheControl("no-preview");
- }
- setCacheControl(value) {
- setMetaContent("turbo-cache-control", value);
- }
- };
- var StreamActions = {
- after() {
- this.targetElements.forEach((e2) => {
- var _a;
- return (_a = e2.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e2.nextSibling);
- });
- },
- append() {
- this.removeDuplicateTargetChildren();
- this.targetElements.forEach((e2) => e2.append(this.templateContent));
- },
- before() {
- this.targetElements.forEach((e2) => {
- var _a;
- return (_a = e2.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e2);
- });
- },
- prepend() {
- this.removeDuplicateTargetChildren();
- this.targetElements.forEach((e2) => e2.prepend(this.templateContent));
- },
- remove() {
- this.targetElements.forEach((e2) => e2.remove());
- },
- replace() {
- this.targetElements.forEach((e2) => e2.replaceWith(this.templateContent));
- },
- update() {
- this.targetElements.forEach((targetElement) => {
- targetElement.innerHTML = "";
- targetElement.append(this.templateContent);
- });
- }
- };
- var session = new Session();
- var cache = new Cache(session);
- var { navigator: navigator$1 } = session;
- function start() {
- session.start();
- }
- function registerAdapter(adapter) {
- session.registerAdapter(adapter);
- }
- function visit(location2, options) {
- session.visit(location2, options);
- }
- function connectStreamSource(source) {
- session.connectStreamSource(source);
- }
- function disconnectStreamSource(source) {
- session.disconnectStreamSource(source);
- }
- function renderStreamMessage(message) {
- session.renderStreamMessage(message);
- }
- function clearCache() {
- console.warn("Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`");
- session.clearCache();
- }
- function setProgressBarDelay(delay3) {
- session.setProgressBarDelay(delay3);
- }
- function setConfirmMethod(confirmMethod) {
- FormSubmission.confirmMethod = confirmMethod;
- }
- function setFormMode(mode) {
- session.setFormMode(mode);
- }
- var Turbo = /* @__PURE__ */ Object.freeze({
- __proto__: null,
- navigator: navigator$1,
- session,
- cache,
- PageRenderer,
- PageSnapshot,
- FrameRenderer,
- start,
- registerAdapter,
- visit,
- connectStreamSource,
- disconnectStreamSource,
- renderStreamMessage,
- clearCache,
- setProgressBarDelay,
- setConfirmMethod,
- setFormMode,
- StreamActions
- });
- var TurboFrameMissingError = class extends Error {
- };
- var FrameController = class {
- constructor(element) {
- this.fetchResponseLoaded = (_fetchResponse) => {
- };
- this.currentFetchRequest = null;
- this.resolveVisitPromise = () => {
- };
- this.connected = false;
- this.hasBeenLoaded = false;
- this.ignoredAttributes = /* @__PURE__ */ new Set();
- this.action = null;
- this.visitCachedSnapshot = ({ element: element2 }) => {
- const frame = element2.querySelector("#" + this.element.id);
- if (frame && this.previousFrameElement) {
- frame.replaceChildren(...this.previousFrameElement.children);
- }
- delete this.previousFrameElement;
- };
- this.element = element;
- this.view = new FrameView(this, this.element);
- this.appearanceObserver = new AppearanceObserver(this, this.element);
- this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);
- this.linkInterceptor = new LinkInterceptor(this, this.element);
- this.restorationIdentifier = uuid();
- this.formSubmitObserver = new FormSubmitObserver(this, this.element);
- }
- connect() {
- if (!this.connected) {
- this.connected = true;
- if (this.loadingStyle == FrameLoadingStyle.lazy) {
- this.appearanceObserver.start();
- } else {
- this.loadSourceURL();
- }
- this.formLinkClickObserver.start();
- this.linkInterceptor.start();
- this.formSubmitObserver.start();
- }
- }
- disconnect() {
- if (this.connected) {
- this.connected = false;
- this.appearanceObserver.stop();
- this.formLinkClickObserver.stop();
- this.linkInterceptor.stop();
- this.formSubmitObserver.stop();
- }
- }
- disabledChanged() {
- if (this.loadingStyle == FrameLoadingStyle.eager) {
- this.loadSourceURL();
- }
- }
- sourceURLChanged() {
- if (this.isIgnoringChangesTo("src"))
- return;
- if (this.element.isConnected) {
- this.complete = false;
- }
- if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {
- this.loadSourceURL();
- }
- }
- sourceURLReloaded() {
- const { src } = this.element;
- this.ignoringChangesToAttribute("complete", () => {
- this.element.removeAttribute("complete");
- });
- this.element.src = null;
- this.element.src = src;
- return this.element.loaded;
- }
- completeChanged() {
- if (this.isIgnoringChangesTo("complete"))
- return;
- this.loadSourceURL();
- }
- loadingStyleChanged() {
- if (this.loadingStyle == FrameLoadingStyle.lazy) {
- this.appearanceObserver.start();
- } else {
- this.appearanceObserver.stop();
- this.loadSourceURL();
- }
- }
- async loadSourceURL() {
- if (this.enabled && this.isActive && !this.complete && this.sourceURL) {
- this.element.loaded = this.visit(expandURL(this.sourceURL));
- this.appearanceObserver.stop();
- await this.element.loaded;
- this.hasBeenLoaded = true;
- }
- }
- async loadResponse(fetchResponse) {
- if (fetchResponse.redirected || fetchResponse.succeeded && fetchResponse.isHTML) {
- this.sourceURL = fetchResponse.response.url;
- }
- try {
- const html = await fetchResponse.responseHTML;
- if (html) {
- const document2 = parseHTMLDocument(html);
- const pageSnapshot = PageSnapshot.fromDocument(document2);
- if (pageSnapshot.isVisitable) {
- await this.loadFrameResponse(fetchResponse, document2);
- } else {
- await this.handleUnvisitableFrameResponse(fetchResponse);
- }
- }
- } finally {
- this.fetchResponseLoaded = () => {
- };
- }
- }
- elementAppearedInViewport(element) {
- this.proposeVisitIfNavigatedWithAction(element, element);
- this.loadSourceURL();
- }
- willSubmitFormLinkToLocation(link) {
- return this.shouldInterceptNavigation(link);
- }
- submittedFormLinkToLocation(link, _location, form) {
- const frame = this.findFrameElement(link);
- if (frame)
- form.setAttribute("data-turbo-frame", frame.id);
- }
- shouldInterceptLinkClick(element, _location, _event) {
- return this.shouldInterceptNavigation(element);
- }
- linkClickIntercepted(element, location2) {
- this.navigateFrame(element, location2);
- }
- willSubmitForm(element, submitter) {
- return element.closest("turbo-frame") == this.element && this.shouldInterceptNavigation(element, submitter);
- }
- formSubmitted(element, submitter) {
- if (this.formSubmission) {
- this.formSubmission.stop();
- }
- this.formSubmission = new FormSubmission(this, element, submitter);
- const { fetchRequest } = this.formSubmission;
- this.prepareRequest(fetchRequest);
- this.formSubmission.start();
- }
- prepareRequest(request) {
- var _a;
- request.headers["Turbo-Frame"] = this.id;
- if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute("data-turbo-stream")) {
- request.acceptResponseType(StreamMessage.contentType);
- }
- }
- requestStarted(_request) {
- markAsBusy(this.element);
- }
- requestPreventedHandlingResponse(_request, _response) {
- this.resolveVisitPromise();
- }
- async requestSucceededWithResponse(request, response) {
- await this.loadResponse(response);
- this.resolveVisitPromise();
- }
- async requestFailedWithResponse(request, response) {
- await this.loadResponse(response);
- this.resolveVisitPromise();
- }
- requestErrored(request, error2) {
- console.error(error2);
- this.resolveVisitPromise();
- }
- requestFinished(_request) {
- clearBusyState(this.element);
- }
- formSubmissionStarted({ formElement }) {
- markAsBusy(formElement, this.findFrameElement(formElement));
- }
- formSubmissionSucceededWithResponse(formSubmission, response) {
- const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);
- frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);
- frame.delegate.loadResponse(response);
- if (!formSubmission.isSafe) {
- session.clearCache();
- }
- }
- formSubmissionFailedWithResponse(formSubmission, fetchResponse) {
- this.element.delegate.loadResponse(fetchResponse);
- session.clearCache();
- }
- formSubmissionErrored(formSubmission, error2) {
- console.error(error2);
- }
- formSubmissionFinished({ formElement }) {
- clearBusyState(formElement, this.findFrameElement(formElement));
- }
- allowsImmediateRender({ element: newFrame }, options) {
- const event = dispatch2("turbo:before-frame-render", {
- target: this.element,
- detail: Object.assign({ newFrame }, options),
- cancelable: true
- });
- const { defaultPrevented, detail: { render: render2 } } = event;
- if (this.view.renderer && render2) {
- this.view.renderer.renderElement = render2;
- }
- return !defaultPrevented;
- }
- viewRenderedSnapshot(_snapshot, _isPreview) {
- }
- preloadOnLoadLinksForView(element) {
- session.preloadOnLoadLinksForView(element);
- }
- viewInvalidated() {
- }
- willRenderFrame(currentElement, _newElement) {
- this.previousFrameElement = currentElement.cloneNode(true);
- }
- async loadFrameResponse(fetchResponse, document2) {
- const newFrameElement = await this.extractForeignFrameElement(document2.body);
- if (newFrameElement) {
- const snapshot = new Snapshot(newFrameElement);
- const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);
- if (this.view.renderPromise)
- await this.view.renderPromise;
- this.changeHistory();
- await this.view.render(renderer);
- this.complete = true;
- session.frameRendered(fetchResponse, this.element);
- session.frameLoaded(this.element);
- this.fetchResponseLoaded(fetchResponse);
- } else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {
- this.handleFrameMissingFromResponse(fetchResponse);
- }
- }
- async visit(url) {
- var _a;
- const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);
- (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();
- this.currentFetchRequest = request;
- return new Promise((resolve) => {
- this.resolveVisitPromise = () => {
- this.resolveVisitPromise = () => {
- };
- this.currentFetchRequest = null;
- resolve();
- };
- request.perform();
- });
- }
- navigateFrame(element, url, submitter) {
- const frame = this.findFrameElement(element, submitter);
- frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);
- this.withCurrentNavigationElement(element, () => {
- frame.src = url;
- });
- }
- proposeVisitIfNavigatedWithAction(frame, element, submitter) {
- this.action = getVisitAction(submitter, element, frame);
- if (this.action) {
- const pageSnapshot = PageSnapshot.fromElement(frame).clone();
- const { visitCachedSnapshot } = frame.delegate;
- frame.delegate.fetchResponseLoaded = (fetchResponse) => {
- if (frame.src) {
- const { statusCode, redirected } = fetchResponse;
- const responseHTML = frame.ownerDocument.documentElement.outerHTML;
- const response = { statusCode, redirected, responseHTML };
- const options = {
- response,
- visitCachedSnapshot,
- willRender: false,
- updateHistory: false,
- restorationIdentifier: this.restorationIdentifier,
- snapshot: pageSnapshot
- };
- if (this.action)
- options.action = this.action;
- session.visit(frame.src, options);
- }
- };
- }
- }
- changeHistory() {
- if (this.action) {
- const method = getHistoryMethodForAction(this.action);
- session.history.update(method, expandURL(this.element.src || ""), this.restorationIdentifier);
- }
- }
- async handleUnvisitableFrameResponse(fetchResponse) {
- console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id="${this.element.id}"> is performing a full page visit due to turbo-visit-control.`);
- await this.visitResponse(fetchResponse.response);
- }
- willHandleFrameMissingFromResponse(fetchResponse) {
- this.element.setAttribute("complete", "");
- const response = fetchResponse.response;
- const visit2 = async (url, options = {}) => {
- if (url instanceof Response) {
- this.visitResponse(url);
- } else {
- session.visit(url, options);
- }
- };
- const event = dispatch2("turbo:frame-missing", {
- target: this.element,
- detail: { response, visit: visit2 },
- cancelable: true
- });
- return !event.defaultPrevented;
- }
- handleFrameMissingFromResponse(fetchResponse) {
- this.view.missing();
- this.throwFrameMissingError(fetchResponse);
- }
- throwFrameMissingError(fetchResponse) {
- 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.`;
- throw new TurboFrameMissingError(message);
- }
- async visitResponse(response) {
- const wrapped = new FetchResponse(response);
- const responseHTML = await wrapped.responseHTML;
- const { location: location2, redirected, statusCode } = wrapped;
- return session.visit(location2, { response: { redirected, statusCode, responseHTML } });
- }
- findFrameElement(element, submitter) {
- var _a;
- const id = getAttribute("data-turbo-frame", submitter, element) || this.element.getAttribute("target");
- return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;
- }
- async extractForeignFrameElement(container) {
- let element;
- const id = CSS.escape(this.id);
- try {
- element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);
- if (element) {
- return element;
- }
- element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);
- if (element) {
- await element.loaded;
- return await this.extractForeignFrameElement(element);
- }
- } catch (error2) {
- console.error(error2);
- return new FrameElement();
- }
- return null;
- }
- formActionIsVisitable(form, submitter) {
- const action = getAction(form, submitter);
- return locationIsVisitable(expandURL(action), this.rootLocation);
- }
- shouldInterceptNavigation(element, submitter) {
- const id = getAttribute("data-turbo-frame", submitter, element) || this.element.getAttribute("target");
- if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {
- return false;
- }
- if (!this.enabled || id == "_top") {
- return false;
- }
- if (id) {
- const frameElement = getFrameElementById(id);
- if (frameElement) {
- return !frameElement.disabled;
- }
- }
- if (!session.elementIsNavigatable(element)) {
- return false;
- }
- if (submitter && !session.elementIsNavigatable(submitter)) {
- return false;
- }
- return true;
- }
- get id() {
- return this.element.id;
- }
- get enabled() {
- return !this.element.disabled;
- }
- get sourceURL() {
- if (this.element.src) {
- return this.element.src;
- }
- }
- set sourceURL(sourceURL) {
- this.ignoringChangesToAttribute("src", () => {
- this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;
- });
- }
- get loadingStyle() {
- return this.element.loading;
- }
- get isLoading() {
- return this.formSubmission !== void 0 || this.resolveVisitPromise() !== void 0;
- }
- get complete() {
- return this.element.hasAttribute("complete");
- }
- set complete(value) {
- this.ignoringChangesToAttribute("complete", () => {
- if (value) {
- this.element.setAttribute("complete", "");
- } else {
- this.element.removeAttribute("complete");
- }
- });
- }
- get isActive() {
- return this.element.isActive && this.connected;
- }
- get rootLocation() {
- var _a;
- const meta = this.element.ownerDocument.querySelector(`meta[name="turbo-root"]`);
- const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : "/";
- return expandURL(root);
- }
- isIgnoringChangesTo(attributeName) {
- return this.ignoredAttributes.has(attributeName);
- }
- ignoringChangesToAttribute(attributeName, callback) {
- this.ignoredAttributes.add(attributeName);
- callback();
- this.ignoredAttributes.delete(attributeName);
- }
- withCurrentNavigationElement(element, callback) {
- this.currentNavigationElement = element;
- callback();
- delete this.currentNavigationElement;
- }
- };
- function getFrameElementById(id) {
- if (id != null) {
- const element = document.getElementById(id);
- if (element instanceof FrameElement) {
- return element;
- }
- }
- }
- function activateElement(element, currentURL) {
- if (element) {
- const src = element.getAttribute("src");
- if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {
- throw new Error(`Matching <turbo-frame id="${element.id}"> element has a source URL which references itself`);
- }
- if (element.ownerDocument !== document) {
- element = document.importNode(element, true);
- }
- if (element instanceof FrameElement) {
- element.connectedCallback();
- element.disconnectedCallback();
- return element;
- }
- }
- }
- var StreamElement = class extends HTMLElement {
- static async renderElement(newElement) {
- await newElement.performAction();
- }
- async connectedCallback() {
- try {
- await this.render();
- } catch (error2) {
- console.error(error2);
- } finally {
- this.disconnect();
- }
- }
- async render() {
- var _a;
- return (_a = this.renderPromise) !== null && _a !== void 0 ? _a : this.renderPromise = (async () => {
- const event = this.beforeRenderEvent;
- if (this.dispatchEvent(event)) {
- await nextAnimationFrame();
- await event.detail.render(this);
- }
- })();
- }
- disconnect() {
- try {
- this.remove();
- } catch (_a) {
- }
- }
- removeDuplicateTargetChildren() {
- this.duplicateChildren.forEach((c2) => c2.remove());
- }
- get duplicateChildren() {
- var _a;
- const existingChildren = this.targetElements.flatMap((e2) => [...e2.children]).filter((c2) => !!c2.id);
- const newChildrenIds = [...((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || []].filter((c2) => !!c2.id).map((c2) => c2.id);
- return existingChildren.filter((c2) => newChildrenIds.includes(c2.id));
- }
- get performAction() {
- if (this.action) {
- const actionFunction = StreamActions[this.action];
- if (actionFunction) {
- return actionFunction;
- }
- this.raise("unknown action");
- }
- this.raise("action attribute is missing");
- }
- get targetElements() {
- if (this.target) {
- return this.targetElementsById;
- } else if (this.targets) {
- return this.targetElementsByQuery;
- } else {
- this.raise("target or targets attribute is missing");
- }
- }
- get templateContent() {
- return this.templateElement.content.cloneNode(true);
- }
- get templateElement() {
- if (this.firstElementChild === null) {
- const template = this.ownerDocument.createElement("template");
- this.appendChild(template);
- return template;
- } else if (this.firstElementChild instanceof HTMLTemplateElement) {
- return this.firstElementChild;
- }
- this.raise("first child element must be a <template> element");
- }
- get action() {
- return this.getAttribute("action");
- }
- get target() {
- return this.getAttribute("target");
- }
- get targets() {
- return this.getAttribute("targets");
- }
- raise(message) {
- throw new Error(`${this.description}: ${message}`);
- }
- get description() {
- var _a, _b;
- return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : "<turbo-stream>";
- }
- get beforeRenderEvent() {
- return new CustomEvent("turbo:before-stream-render", {
- bubbles: true,
- cancelable: true,
- detail: { newStream: this, render: StreamElement.renderElement }
- });
- }
- get targetElementsById() {
- var _a;
- const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);
- if (element !== null) {
- return [element];
- } else {
- return [];
- }
- }
- get targetElementsByQuery() {
- var _a;
- const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);
- if (elements.length !== 0) {
- return Array.prototype.slice.call(elements);
- } else {
- return [];
- }
- }
- };
- var StreamSourceElement = class extends HTMLElement {
- constructor() {
- super(...arguments);
- this.streamSource = null;
- }
- connectedCallback() {
- this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);
- connectStreamSource(this.streamSource);
- }
- disconnectedCallback() {
- if (this.streamSource) {
- disconnectStreamSource(this.streamSource);
- }
- }
- get src() {
- return this.getAttribute("src") || "";
- }
- };
- FrameElement.delegateConstructor = FrameController;
- if (customElements.get("turbo-frame") === void 0) {
- customElements.define("turbo-frame", FrameElement);
- }
- if (customElements.get("turbo-stream") === void 0) {
- customElements.define("turbo-stream", StreamElement);
- }
- if (customElements.get("turbo-stream-source") === void 0) {
- customElements.define("turbo-stream-source", StreamSourceElement);
- }
- (() => {
- let element = document.currentScript;
- if (!element)
- return;
- if (element.hasAttribute("data-turbo-suppress-warning"))
- return;
- element = element.parentElement;
- while (element) {
- if (element == document.body) {
- return console.warn(unindent`
- You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!
-
- Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
-
- For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements
-
- ——
- Suppress this warning by adding a "data-turbo-suppress-warning" attribute to: %s
- `, element.outerHTML);
- }
- element = element.parentElement;
- }
- })();
- window.Turbo = Turbo;
- start();
-
- // ../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js
- var consumer;
- async function getConsumer() {
- return consumer || setConsumer(createConsumer2().then(setConsumer));
- }
- function setConsumer(newConsumer) {
- return consumer = newConsumer;
- }
- async function createConsumer2() {
- const { createConsumer: createConsumer3 } = await Promise.resolve().then(() => (init_src(), src_exports));
- return createConsumer3();
- }
- async function subscribeTo(channel, mixin) {
- const { subscriptions } = await getConsumer();
- return subscriptions.create(channel, mixin);
- }
-
- // ../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js
- function walk(obj) {
- if (!obj || typeof obj !== "object")
- return obj;
- if (obj instanceof Date || obj instanceof RegExp)
- return obj;
- if (Array.isArray(obj))
- return obj.map(walk);
- return Object.keys(obj).reduce(function(acc, key) {
- var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function(m2, x2) {
- return "_" + x2.toLowerCase();
- });
- acc[camel] = walk(obj[key]);
- return acc;
- }, {});
- }
-
- // ../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js
- var TurboCableStreamSourceElement = class extends HTMLElement {
- async connectedCallback() {
- connectStreamSource(this);
- this.subscription = await subscribeTo(this.channel, {
- received: this.dispatchMessageEvent.bind(this),
- connected: this.subscriptionConnected.bind(this),
- disconnected: this.subscriptionDisconnected.bind(this)
- });
- }
- disconnectedCallback() {
- disconnectStreamSource(this);
- if (this.subscription)
- this.subscription.unsubscribe();
- }
- dispatchMessageEvent(data2) {
- const event = new MessageEvent("message", { data: data2 });
- return this.dispatchEvent(event);
- }
- subscriptionConnected() {
- this.setAttribute("connected", "");
- }
- subscriptionDisconnected() {
- this.removeAttribute("connected");
- }
- get channel() {
- const channel = this.getAttribute("channel");
- const signed_stream_name = this.getAttribute("signed-stream-name");
- return __spreadValues({ channel, signed_stream_name }, walk(__spreadValues({}, this.dataset)));
- }
- };
- if (customElements.get("turbo-cable-stream-source") === void 0) {
- customElements.define("turbo-cable-stream-source", TurboCableStreamSourceElement);
- }
-
- // ../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js
- function encodeMethodIntoRequestBody(event) {
- if (event.target instanceof HTMLFormElement) {
- const { target: form, detail: { fetchOptions } } = event;
- form.addEventListener("turbo:submit-start", ({ detail: { formSubmission: { submitter } } }) => {
- const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams();
- const method = determineFetchMethod(submitter, body, form);
- if (!/get/i.test(method)) {
- if (/post/i.test(method)) {
- body.delete("_method");
- } else {
- body.set("_method", method);
- }
- fetchOptions.method = "post";
- }
- }, { once: true });
- }
- }
- function determineFetchMethod(submitter, body, form) {
- const formMethod = determineFormMethod(submitter);
- const overrideMethod = body.get("_method");
- const method = form.getAttribute("method") || "get";
- if (typeof formMethod == "string") {
- return formMethod;
- } else if (typeof overrideMethod == "string") {
- return overrideMethod;
- } else {
- return method;
- }
- }
- function determineFormMethod(submitter) {
- if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {
- if (submitter.hasAttribute("formmethod")) {
- return submitter.formMethod;
- } else {
- return null;
- }
- } else {
- return null;
- }
- }
- function isBodyInit(body) {
- return body instanceof FormData || body instanceof URLSearchParams;
- }
-
- // ../../../node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js
- addEventListener("turbo:before-fetch-request", encodeMethodIntoRequestBody);
-
- // base/polyfills/request-submit.js
- (function(prototype) {
- if (typeof prototype.requestSubmit == "function")
- return;
- prototype.requestSubmit = function(submitter) {
- if (submitter) {
- validateSubmitter(submitter, this);
- submitter.click();
- } else {
- submitter = document.createElement("input");
- submitter.type = "submit";
- submitter.hidden = true;
- this.appendChild(submitter);
- submitter.click();
- this.removeChild(submitter);
- }
- };
- function validateSubmitter(submitter, form) {
- submitter instanceof HTMLElement || raise(TypeError, "parameter 1 is not of type 'HTMLElement'");
- submitter.type == "submit" || raise(TypeError, "The specified element is not a submit button");
- submitter.form == form || raise(
- DOMException,
- "The specified element is not owned by this form element",
- "NotFoundError"
- );
- }
- function raise(errorConstructor, message, name) {
- throw new errorConstructor(
- "Failed to execute 'requestSubmit' on 'HTMLFormElement': " + message + ".",
- name
- );
- }
- })(HTMLFormElement.prototype);
-
// ../../../node_modules/alpinejs/dist/module.esm.js
var flushPending = false;
var flushing = false;
var queue = [];
var lastFlushedIndex = -1;
@@ -12084,14 +7451,14 @@
throw error2;
}, 0);
}
var shouldAutoEvaluateFunctions = true;
function dontAutoEvaluateFunctions(callback) {
- let cache2 = shouldAutoEvaluateFunctions;
+ let cache = shouldAutoEvaluateFunctions;
shouldAutoEvaluateFunctions = false;
callback();
- shouldAutoEvaluateFunctions = cache2;
+ shouldAutoEvaluateFunctions = cache;
}
function evaluate(el, expression, extras = {}) {
let result;
evaluateLater(el, expression)((value) => result = value, extras);
return result;
@@ -12328,56 +7695,56 @@
function byPriority(a2, b2) {
let typeA = directiveOrder.indexOf(a2.type) === -1 ? DEFAULT : a2.type;
let typeB = directiveOrder.indexOf(b2.type) === -1 ? DEFAULT : b2.type;
return directiveOrder.indexOf(typeA) - directiveOrder.indexOf(typeB);
}
- function dispatch3(el, name, detail = {}) {
+ function dispatch(el, name, detail = {}) {
el.dispatchEvent(new CustomEvent(name, {
detail,
bubbles: true,
composed: true,
cancelable: true
}));
}
- function walk2(el, callback) {
+ function walk(el, callback) {
if (typeof ShadowRoot === "function" && el instanceof ShadowRoot) {
- Array.from(el.children).forEach((el2) => walk2(el2, callback));
+ Array.from(el.children).forEach((el2) => walk(el2, callback));
return;
}
let skip = false;
callback(el, () => skip = true);
if (skip)
return;
let node = el.firstElementChild;
while (node) {
- walk2(node, callback, false);
+ walk(node, callback, false);
node = node.nextElementSibling;
}
}
function warn(message, ...args) {
console.warn(`Alpine Warning: ${message}`, ...args);
}
var started = false;
- function start2() {
+ function start() {
if (started)
warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.");
started = true;
if (!document.body)
warn("Unable to initialize. Trying to load Alpine before `<body>` is available. Did you forget to add `defer` in Alpine's `<script>` tag?");
- dispatch3(document, "alpine:init");
- dispatch3(document, "alpine:initializing");
+ dispatch(document, "alpine:init");
+ dispatch(document, "alpine:initializing");
startObservingMutations();
- onElAdded((el) => initTree(el, walk2));
+ onElAdded((el) => initTree(el, walk));
onElRemoved((el) => destroyTree(el));
onAttributesAdded((el, attrs) => {
directives(el, attrs).forEach((handle) => handle());
});
let outNestedComponents = (el) => !closestRoot(el.parentElement, true);
Array.from(document.querySelectorAll(allSelectors())).filter(outNestedComponents).forEach((el) => {
initTree(el);
});
- dispatch3(document, "alpine:initialized");
+ dispatch(document, "alpine:initialized");
}
var rootSelectorCallbacks = [];
var initSelectorCallbacks = [];
function rootSelectors() {
return rootSelectorCallbacks.map((fn3) => fn3());
@@ -12414,11 +7781,11 @@
}
var initInterceptors2 = [];
function interceptInit(callback) {
initInterceptors2.push(callback);
}
- function initTree(el, walker = walk2, intercept = () => {
+ function initTree(el, walker = walk, intercept = () => {
}) {
deferHandlingDirectives(() => {
walker(el, (el2, skip) => {
intercept(el2, skip);
initInterceptors2.forEach((i2) => i2(el2, skip));
@@ -12426,11 +7793,11 @@
el2._x_ignore && skip();
});
});
}
function destroyTree(root) {
- walk2(root, (el) => cleanupAttributes(el));
+ walk(root, (el) => cleanupAttributes(el));
}
var tickStack = [];
var isHolding = false;
function nextTick(callback = () => {
}) {
@@ -12522,14 +7889,14 @@
return () => {
setStyles(el, previousStyles);
};
}
function setStylesFromString(el, value) {
- let cache2 = el.getAttribute("style", value);
+ let cache = el.getAttribute("style", value);
el.setAttribute("style", value);
return () => {
- el.setAttribute("style", cache2 || "");
+ el.setAttribute("style", cache || "");
};
}
function kebabCase(subject) {
return subject.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
}
@@ -12838,29 +8205,29 @@
isCloning = false;
}
function cloneTree(el) {
let hasRunThroughFirstEl = false;
let shallowWalker = (el2, callback) => {
- walk2(el2, (el3, skip) => {
+ walk(el2, (el3, skip) => {
if (hasRunThroughFirstEl && isRoot(el3))
return skip();
hasRunThroughFirstEl = true;
callback(el3, skip);
});
};
initTree(el, shallowWalker);
}
function dontRegisterReactiveSideEffects(callback) {
- let cache2 = effect;
+ let cache = effect;
overrideEffect((callback2, el) => {
- let storedEffect = cache2(callback2);
+ let storedEffect = cache(callback2);
release(storedEffect);
return () => {
};
});
callback();
- overrideEffect(cache2);
+ overrideEffect(cache);
}
function bind(el, name, value, modifiers = []) {
if (!el._x_bindings)
el._x_bindings = reactive({});
el._x_bindings[name] = value;
@@ -13157,15 +8524,15 @@
prefixed: prefix,
prefix: setPrefix,
plugin,
magic,
store,
- start: start2,
+ start,
clone,
bound: getBinding,
$data: scope,
- walk: walk2,
+ walk,
data,
bind: bind2
};
var alpine_default = Alpine2;
function makeMap(str, expectsLowerCase) {
@@ -13178,11 +8545,11 @@
}
var specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
var isBooleanAttr2 = /* @__PURE__ */ makeMap(specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`);
var EMPTY_OBJ = true ? Object.freeze({}) : {};
var EMPTY_ARR = true ? Object.freeze([]) : [];
- var extend2 = Object.assign;
+ var extend = Object.assign;
var hasOwnProperty = Object.prototype.hasOwnProperty;
var hasOwn = (val, key) => hasOwnProperty.call(val, key);
var isArray = Array.isArray;
var isMap = (val) => toTypeString(val) === "[object Map]";
var isString = (val) => typeof val === "string";
@@ -13193,14 +8560,14 @@
var toRawType = (value) => {
return toTypeString(value).slice(8, -1);
};
var isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
var cacheStringFunction = (fn3) => {
- const cache2 = /* @__PURE__ */ Object.create(null);
+ const cache = /* @__PURE__ */ Object.create(null);
return (str) => {
- const hit = cache2[str];
- return hit || (cache2[str] = fn3(str));
+ const hit = cache[str];
+ return hit || (cache[str] = fn3(str));
};
};
var camelizeRE = /-(\w)/g;
var camelize = cacheStringFunction((str) => {
return str.replace(camelizeRE, (_2, c2) => c2 ? c2.toUpperCase() : "");
@@ -13516,15 +8883,15 @@
console.warn(`Delete operation on key "${String(key)}" failed: target is readonly.`, target);
}
return true;
}
};
- var shallowReactiveHandlers = extend2({}, mutableHandlers, {
+ var shallowReactiveHandlers = extend({}, mutableHandlers, {
get: shallowGet,
set: shallowSet
});
- var shallowReadonlyHandlers = extend2({}, readonlyHandlers, {
+ var shallowReadonlyHandlers = extend({}, readonlyHandlers, {
get: shallowReadonlyGet
});
var toReactive = (value) => isObject(value) ? reactive2(value) : value;
var toReadonly = (value) => isObject(value) ? readonly(value) : value;
var toShallow = (value) => value;
@@ -13821,11 +9188,11 @@
}
function isRef(r2) {
return Boolean(r2 && r2.__v_isRef === true);
}
magic("nextTick", () => nextTick);
- magic("dispatch", (el) => dispatch3.bind(dispatch3, el));
+ magic("dispatch", (el) => dispatch.bind(dispatch, el));
magic("watch", (el, { evaluateLater: evaluateLater2, effect: effect32 }) => (key, callback) => {
let evaluate2 = evaluateLater2(key);
let firstTime = true;
let oldValue;
let effectReference = effect32(() => evaluate2((value) => {
@@ -14580,11 +9947,11 @@
el.after(clone2);
initTree(clone2);
});
el._x_currentIfEl = clone2;
el._x_undoIf = () => {
- walk2(clone2, (node) => {
+ walk(clone2, (node) => {
if (!!node._x_effects) {
node._x_effects.forEach(dequeueJob);
}
});
clone2.remove();
@@ -16056,13 +11423,13 @@
}));
}
function setInert(el) {
let undos = [];
crawlSiblingsUp(el, (sibling) => {
- let cache2 = sibling.hasAttribute("aria-hidden");
+ let cache = sibling.hasAttribute("aria-hidden");
sibling.setAttribute("aria-hidden", "true");
- undos.push(() => cache2 || sibling.removeAttribute("aria-hidden"));
+ undos.push(() => cache || sibling.removeAttribute("aria-hidden"));
});
return () => {
while (undos.length)
undos.pop()();
};
@@ -16229,21 +11596,21 @@
var bottom = "bottom";
var right = "right";
var left = "left";
var auto = "auto";
var basePlacements = [top, bottom, right, left];
- var start3 = "start";
+ var start2 = "start";
var end = "end";
var clippingParents = "clippingParents";
var viewport = "viewport";
var popper = "popper";
var reference = "reference";
var variationPlacements = /* @__PURE__ */ basePlacements.reduce(function(acc, placement) {
- return acc.concat([placement + "-" + start3, placement + "-" + end]);
+ return acc.concat([placement + "-" + start2, placement + "-" + end]);
}, []);
var placements = /* @__PURE__ */ [].concat(basePlacements, [auto]).reduce(function(acc, placement) {
- return acc.concat([placement, placement + "-" + start3, placement + "-" + end]);
+ return acc.concat([placement, placement + "-" + start2, placement + "-" + end]);
}, []);
var beforeRead = "beforeRead";
var read = "read";
var afterRead = "afterRead";
var beforeMain = "beforeMain";
@@ -17010,11 +12377,11 @@
}
var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;
if (mainAxis != null) {
var len = mainAxis === "y" ? "height" : "width";
switch (variation) {
- case start3:
+ case start2:
offsets[mainAxis] = offsets[mainAxis] - (reference2[len] / 2 - element[len] / 2);
break;
case end:
offsets[mainAxis] = offsets[mainAxis] + (reference2[len] / 2 - element[len] / 2);
break;
@@ -17126,11 +12493,11 @@
var makeFallbackChecks = true;
var firstFittingPlacement = placements2[0];
for (var i2 = 0; i2 < placements2.length; i2++) {
var placement = placements2[i2];
var _basePlacement = getBasePlacement(placement);
- var isStartVariation = getVariation(placement) === start3;
+ var isStartVariation = getVariation(placement) === start2;
var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;
var len = isVertical ? "width" : "height";
var overflow = detectOverflow(state, {
placement,
boundary,
@@ -17357,12 +12724,12 @@
var len = mainAxis === "y" ? "height" : "width";
var offset2 = popperOffsets2[mainAxis];
var min2 = offset2 + overflow[mainSide];
var max2 = offset2 - overflow[altSide];
var additive = tether ? -popperRect[len] / 2 : 0;
- var minLen = variation === start3 ? referenceRect[len] : popperRect[len];
- var maxLen = variation === start3 ? -popperRect[len] : -referenceRect[len];
+ var minLen = variation === start2 ? referenceRect[len] : popperRect[len];
+ var maxLen = variation === start2 ? -popperRect[len] : -referenceRect[len];
var arrowElement = state.elements.arrow;
var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {
width: 0,
height: 0
};
@@ -17552,19 +12919,19 @@
}
function popperGenerator(generatorOptions) {
if (generatorOptions === void 0) {
generatorOptions = {};
}
- var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions2 = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
+ var _generatorOptions = generatorOptions, _generatorOptions$def = _generatorOptions.defaultModifiers, defaultModifiers2 = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, _generatorOptions$def2 = _generatorOptions.defaultOptions, defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;
return function createPopper2(reference2, popper2, options) {
if (options === void 0) {
- options = defaultOptions2;
+ options = defaultOptions;
}
var state = {
placement: "bottom",
orderedModifiers: [],
- options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions2),
+ options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),
modifiersData: {},
elements: {
reference: reference2,
popper: popper2
},
@@ -17576,11 +12943,11 @@
var instance = {
state,
setOptions: function setOptions(setOptionsAction) {
var options2 = typeof setOptionsAction === "function" ? setOptionsAction(state.options) : setOptionsAction;
cleanupModifierEffects();
- state.options = Object.assign({}, defaultOptions2, state.options, options2);
+ state.options = Object.assign({}, defaultOptions, state.options, options2);
state.scrollParents = {
reference: isElement(reference2) ? listScrollParents(reference2) : reference2.contextElement ? listScrollParents(reference2.contextElement) : [],
popper: listScrollParents(popper2)
};
var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers2, state.options.modifiers)));
@@ -17860,16 +13227,16 @@
if (window.performance) {
document.addEventListener("mousemove", onDocumentMouseMove);
}
}
function onDocumentMouseMove() {
- var now2 = performance.now();
- if (now2 - lastMouseMoveTime < 20) {
+ var now = performance.now();
+ if (now - lastMouseMoveTime < 20) {
currentInput.isTouch = false;
document.removeEventListener("mousemove", onDocumentMouseMove);
}
- lastMouseMoveTime = now2;
+ lastMouseMoveTime = now;
}
function onWindowBlur() {
var activeElement = document.activeElement;
if (isReferenceElement(activeElement)) {
var instance = activeElement._tippy;
@@ -19426,15 +14793,10 @@
module_default.plugin(dimensions_default);
module_default.plugin(notification_default);
window.Alpine = module_default;
var alpine_default2 = module_default;
- // base/setup.js
- document.addEventListener("DOMContentLoaded", () => {
- alpine_default2.start();
- });
-
// ../../components/coco/base/button/button.js
var button_exports = {};
__export(button_exports, {
default: () => button_default
});
@@ -19846,9 +15208,12 @@
var modules2 = [];
var __default2 = modules2;
// book/components.js
var components_default2 = registerComponents(__default2);
+
+ // book.js
+ alpine_default2.start();
})();
/*! Bundled license information:
lodash/lodash.js:
(**