Files
BlogPosts/.obsidian/plugins/multi-properties/main.js
2026-01-22 20:10:59 +08:00

6456 lines
187 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key2 of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key2) && key2 !== except)
__defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/main.ts
var main_exports = {};
__export(main_exports, {
default: () => MultiPropPlugin2
});
module.exports = __toCommonJS(main_exports);
var import_obsidian7 = require("obsidian");
// src/AddPropModal.ts
var import_obsidian2 = require("obsidian");
// node_modules/esm-env/dev-fallback.js
var node_env = globalThis.process?.env?.NODE_ENV;
var dev_fallback_default = node_env && !node_env.toLowerCase().startsWith("prod");
// node_modules/svelte/src/internal/shared/utils.js
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var array_from = Array.from;
var object_keys = Object.keys;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
var get_descriptors = Object.getOwnPropertyDescriptors;
var object_prototype = Object.prototype;
var array_prototype = Array.prototype;
var get_prototype_of = Object.getPrototypeOf;
var is_extensible = Object.isExtensible;
function run_all(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i]();
}
}
function deferred() {
var resolve;
var reject;
var promise = new Promise((res, rej) => {
resolve = res;
reject = rej;
});
return { promise, resolve, reject };
}
function to_array(value, n) {
if (Array.isArray(value)) {
return value;
}
if (n === void 0 || !(Symbol.iterator in value)) {
return Array.from(value);
}
const array = [];
for (const element2 of value) {
array.push(element2);
if (array.length === n) break;
}
return array;
}
// node_modules/svelte/src/internal/client/constants.js
var DERIVED = 1 << 1;
var EFFECT = 1 << 2;
var RENDER_EFFECT = 1 << 3;
var MANAGED_EFFECT = 1 << 24;
var BLOCK_EFFECT = 1 << 4;
var BRANCH_EFFECT = 1 << 5;
var ROOT_EFFECT = 1 << 6;
var BOUNDARY_EFFECT = 1 << 7;
var CONNECTED = 1 << 9;
var CLEAN = 1 << 10;
var DIRTY = 1 << 11;
var MAYBE_DIRTY = 1 << 12;
var INERT = 1 << 13;
var DESTROYED = 1 << 14;
var EFFECT_RAN = 1 << 15;
var EFFECT_TRANSPARENT = 1 << 16;
var EAGER_EFFECT = 1 << 17;
var HEAD_EFFECT = 1 << 18;
var EFFECT_PRESERVED = 1 << 19;
var USER_EFFECT = 1 << 20;
var EFFECT_OFFSCREEN = 1 << 25;
var WAS_MARKED = 1 << 15;
var REACTION_IS_UPDATING = 1 << 21;
var ASYNC = 1 << 22;
var ERROR_VALUE = 1 << 23;
var STATE_SYMBOL = Symbol("$state");
var LEGACY_PROPS = Symbol("legacy props");
var LOADING_ATTR_SYMBOL = Symbol("");
var PROXY_PATH_SYMBOL = Symbol("proxy path");
var STALE_REACTION = new class StaleReactionError extends Error {
name = "StaleReactionError";
message = "The reaction that called `getAbortSignal()` was re-run or destroyed";
}();
var TEXT_NODE = 3;
var COMMENT_NODE = 8;
// node_modules/svelte/src/internal/shared/errors.js
function lifecycle_outside_component(name) {
if (dev_fallback_default) {
const error = new Error(`lifecycle_outside_component
\`${name}(...)\` can only be used during component initialisation
https://svelte.dev/e/lifecycle_outside_component`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
// node_modules/svelte/src/internal/client/errors.js
function async_derived_orphan() {
if (dev_fallback_default) {
const error = new Error(`async_derived_orphan
Cannot create a \`$derived(...)\` with an \`await\` expression outside of an effect tree
https://svelte.dev/e/async_derived_orphan`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/async_derived_orphan`);
}
}
function bind_invalid_checkbox_value() {
if (dev_fallback_default) {
const error = new Error(`bind_invalid_checkbox_value
Using \`bind:value\` together with a checkbox input is not allowed. Use \`bind:checked\` instead
https://svelte.dev/e/bind_invalid_checkbox_value`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/bind_invalid_checkbox_value`);
}
}
function derived_references_self() {
if (dev_fallback_default) {
const error = new Error(`derived_references_self
A derived value cannot reference itself recursively
https://svelte.dev/e/derived_references_self`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/derived_references_self`);
}
}
function effect_in_teardown(rune) {
if (dev_fallback_default) {
const error = new Error(`effect_in_teardown
\`${rune}\` cannot be used inside an effect cleanup function
https://svelte.dev/e/effect_in_teardown`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/effect_in_teardown`);
}
}
function effect_in_unowned_derived() {
if (dev_fallback_default) {
const error = new Error(`effect_in_unowned_derived
Effect cannot be created inside a \`$derived\` value that was not itself created inside an effect
https://svelte.dev/e/effect_in_unowned_derived`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/effect_in_unowned_derived`);
}
}
function effect_orphan(rune) {
if (dev_fallback_default) {
const error = new Error(`effect_orphan
\`${rune}\` can only be used inside an effect (e.g. during component initialisation)
https://svelte.dev/e/effect_orphan`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/effect_orphan`);
}
}
function effect_update_depth_exceeded() {
if (dev_fallback_default) {
const error = new Error(`effect_update_depth_exceeded
Maximum update depth exceeded. This typically indicates that an effect reads and writes the same piece of state
https://svelte.dev/e/effect_update_depth_exceeded`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/effect_update_depth_exceeded`);
}
}
function hydration_failed() {
if (dev_fallback_default) {
const error = new Error(`hydration_failed
Failed to hydrate the application
https://svelte.dev/e/hydration_failed`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/hydration_failed`);
}
}
function props_invalid_value(key2) {
if (dev_fallback_default) {
const error = new Error(`props_invalid_value
Cannot do \`bind:${key2}={undefined}\` when \`${key2}\` has a fallback value
https://svelte.dev/e/props_invalid_value`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/props_invalid_value`);
}
}
function rune_outside_svelte(rune) {
if (dev_fallback_default) {
const error = new Error(`rune_outside_svelte
The \`${rune}\` rune is only available inside \`.svelte\` and \`.svelte.js/ts\` files
https://svelte.dev/e/rune_outside_svelte`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/rune_outside_svelte`);
}
}
function state_descriptors_fixed() {
if (dev_fallback_default) {
const error = new Error(`state_descriptors_fixed
Property descriptors defined on \`$state\` objects must contain \`value\` and always be \`enumerable\`, \`configurable\` and \`writable\`.
https://svelte.dev/e/state_descriptors_fixed`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/state_descriptors_fixed`);
}
}
function state_prototype_fixed() {
if (dev_fallback_default) {
const error = new Error(`state_prototype_fixed
Cannot set prototype of \`$state\` object
https://svelte.dev/e/state_prototype_fixed`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/state_prototype_fixed`);
}
}
function state_unsafe_mutation() {
if (dev_fallback_default) {
const error = new Error(`state_unsafe_mutation
Updating state inside \`$derived(...)\`, \`$inspect(...)\` or a template expression is forbidden. If the value should not be reactive, declare it without \`$state\`
https://svelte.dev/e/state_unsafe_mutation`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
function svelte_boundary_reset_onerror() {
if (dev_fallback_default) {
const error = new Error(`svelte_boundary_reset_onerror
A \`<svelte:boundary>\` \`reset\` function cannot be called while an error is still being handled
https://svelte.dev/e/svelte_boundary_reset_onerror`);
error.name = "Svelte error";
throw error;
} else {
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}
// node_modules/svelte/src/constants.js
var EACH_ITEM_REACTIVE = 1;
var EACH_INDEX_REACTIVE = 1 << 1;
var EACH_IS_CONTROLLED = 1 << 2;
var EACH_IS_ANIMATED = 1 << 3;
var EACH_ITEM_IMMUTABLE = 1 << 4;
var PROPS_IS_IMMUTABLE = 1;
var PROPS_IS_RUNES = 1 << 1;
var PROPS_IS_UPDATED = 1 << 2;
var PROPS_IS_BINDABLE = 1 << 3;
var PROPS_IS_LAZY_INITIAL = 1 << 4;
var TRANSITION_OUT = 1 << 1;
var TRANSITION_GLOBAL = 1 << 2;
var TEMPLATE_FRAGMENT = 1;
var TEMPLATE_USE_IMPORT_NODE = 1 << 1;
var TEMPLATE_USE_SVG = 1 << 2;
var TEMPLATE_USE_MATHML = 1 << 3;
var HYDRATION_START = "[";
var HYDRATION_START_ELSE = "[!";
var HYDRATION_END = "]";
var HYDRATION_ERROR = {};
var ELEMENT_PRESERVE_ATTRIBUTE_CASE = 1 << 1;
var ELEMENT_IS_INPUT = 1 << 2;
var UNINITIALIZED = Symbol();
var FILENAME = Symbol("filename");
var HMR = Symbol("hmr");
var NAMESPACE_HTML = "http://www.w3.org/1999/xhtml";
// node_modules/svelte/src/internal/client/warnings.js
var bold = "font-weight: bold";
var normal = "font-weight: normal";
function await_waterfall(name, location) {
if (dev_fallback_default) {
console.warn(`%c[svelte] await_waterfall
%cAn async derived, \`${name}\` (${location}) was not read immediately after it resolved. This often indicates an unnecessary waterfall, which can slow down your app
https://svelte.dev/e/await_waterfall`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/await_waterfall`);
}
}
function hydration_attribute_changed(attribute, html2, value) {
if (dev_fallback_default) {
console.warn(`%c[svelte] hydration_attribute_changed
%cThe \`${attribute}\` attribute on \`${html2}\` changed its value between server and client renders. The client value, \`${value}\`, will be ignored in favour of the server value
https://svelte.dev/e/hydration_attribute_changed`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/hydration_attribute_changed`);
}
}
function hydration_mismatch(location) {
if (dev_fallback_default) {
console.warn(
`%c[svelte] hydration_mismatch
%c${location ? `Hydration failed because the initial UI does not match what was rendered on the server. The error occurred near ${location}` : "Hydration failed because the initial UI does not match what was rendered on the server"}
https://svelte.dev/e/hydration_mismatch`,
bold,
normal
);
} else {
console.warn(`https://svelte.dev/e/hydration_mismatch`);
}
}
function lifecycle_double_unmount() {
if (dev_fallback_default) {
console.warn(`%c[svelte] lifecycle_double_unmount
%cTried to unmount a component that was not mounted
https://svelte.dev/e/lifecycle_double_unmount`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/lifecycle_double_unmount`);
}
}
function select_multiple_invalid_value() {
if (dev_fallback_default) {
console.warn(`%c[svelte] select_multiple_invalid_value
%cThe \`value\` property of a \`<select multiple>\` element should be an array, but it received a non-array value. The selection will be kept as is.
https://svelte.dev/e/select_multiple_invalid_value`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/select_multiple_invalid_value`);
}
}
function state_proxy_equality_mismatch(operator) {
if (dev_fallback_default) {
console.warn(`%c[svelte] state_proxy_equality_mismatch
%cReactive \`$state(...)\` proxies and the values they proxy have different identities. Because of this, comparisons with \`${operator}\` will produce unexpected results
https://svelte.dev/e/state_proxy_equality_mismatch`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/state_proxy_equality_mismatch`);
}
}
function state_proxy_unmount() {
if (dev_fallback_default) {
console.warn(`%c[svelte] state_proxy_unmount
%cTried to unmount a state proxy, rather than a component
https://svelte.dev/e/state_proxy_unmount`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/state_proxy_unmount`);
}
}
function svelte_boundary_reset_noop() {
if (dev_fallback_default) {
console.warn(`%c[svelte] svelte_boundary_reset_noop
%cA \`<svelte:boundary>\` \`reset\` function only resets the boundary the first time it is called
https://svelte.dev/e/svelte_boundary_reset_noop`, bold, normal);
} else {
console.warn(`https://svelte.dev/e/svelte_boundary_reset_noop`);
}
}
// node_modules/svelte/src/internal/client/dom/hydration.js
var hydrating = false;
function set_hydrating(value) {
hydrating = value;
}
var hydrate_node;
function set_hydrate_node(node) {
if (node === null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return hydrate_node = node;
}
function hydrate_next() {
return set_hydrate_node(get_next_sibling(hydrate_node));
}
function reset(node) {
if (!hydrating) return;
if (get_next_sibling(hydrate_node) !== null) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
hydrate_node = node;
}
function next(count = 1) {
if (hydrating) {
var i = count;
var node = hydrate_node;
while (i--) {
node = /** @type {TemplateNode} */
get_next_sibling(node);
}
hydrate_node = node;
}
}
function skip_nodes(remove = true) {
var depth = 0;
var node = hydrate_node;
while (true) {
if (node.nodeType === COMMENT_NODE) {
var data = (
/** @type {Comment} */
node.data
);
if (data === HYDRATION_END) {
if (depth === 0) return node;
depth -= 1;
} else if (data === HYDRATION_START || data === HYDRATION_START_ELSE) {
depth += 1;
}
}
var next2 = (
/** @type {TemplateNode} */
get_next_sibling(node)
);
if (remove) node.remove();
node = next2;
}
}
function read_hydration_instruction(node) {
if (!node || node.nodeType !== COMMENT_NODE) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
return (
/** @type {Comment} */
node.data
);
}
// node_modules/svelte/src/internal/client/reactivity/equality.js
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
// node_modules/svelte/src/internal/flags/index.js
var async_mode_flag = false;
var legacy_mode_flag = false;
var tracing_mode_flag = false;
// node_modules/svelte/src/internal/client/dev/tracing.js
var tracing_expressions = null;
function tag(source2, label) {
source2.label = label;
tag_proxy(source2.v, label);
return source2;
}
function tag_proxy(value, label) {
value?.[PROXY_PATH_SYMBOL]?.(label);
return value;
}
// node_modules/svelte/src/internal/shared/dev.js
function get_error(label) {
const error = new Error();
const stack2 = get_stack();
if (stack2.length === 0) {
return null;
}
stack2.unshift("\n");
define_property(error, "stack", {
value: stack2.join("\n")
});
define_property(error, "name", {
value: label
});
return (
/** @type {Error & { stack: string }} */
error
);
}
function get_stack() {
const limit = Error.stackTraceLimit;
Error.stackTraceLimit = Infinity;
const stack2 = new Error().stack;
Error.stackTraceLimit = limit;
if (!stack2) return [];
const lines = stack2.split("\n");
const new_lines = [];
for (let i = 0; i < lines.length; i++) {
const line = lines[i];
const posixified = line.replaceAll("\\", "/");
if (line.trim() === "Error") {
continue;
}
if (line.includes("validate_each_keys")) {
return [];
}
if (posixified.includes("svelte/src/internal") || posixified.includes("node_modules/.vite")) {
continue;
}
new_lines.push(line);
}
return new_lines;
}
// node_modules/svelte/src/internal/client/context.js
var component_context = null;
function set_component_context(context) {
component_context = context;
}
var dev_stack = null;
function set_dev_stack(stack2) {
dev_stack = stack2;
}
var dev_current_component_function = null;
function set_dev_current_component_function(fn) {
dev_current_component_function = fn;
}
function push(props, runes = false, fn) {
component_context = {
p: component_context,
i: false,
c: null,
e: null,
s: props,
x: null,
l: legacy_mode_flag && !runes ? { s: null, u: null, $: [] } : null
};
if (dev_fallback_default) {
component_context.function = fn;
dev_current_component_function = fn;
}
}
function pop(component2) {
var context = (
/** @type {ComponentContext} */
component_context
);
var effects = context.e;
if (effects !== null) {
context.e = null;
for (var fn of effects) {
create_user_effect(fn);
}
}
if (component2 !== void 0) {
context.x = component2;
}
context.i = true;
component_context = context.p;
if (dev_fallback_default) {
dev_current_component_function = component_context?.function ?? null;
}
return component2 ?? /** @type {T} */
{};
}
function is_runes() {
return !legacy_mode_flag || component_context !== null && component_context.l === null;
}
// node_modules/svelte/src/internal/client/dom/task.js
var micro_tasks = [];
function run_micro_tasks() {
var tasks = micro_tasks;
micro_tasks = [];
run_all(tasks);
}
function queue_micro_task(fn) {
if (micro_tasks.length === 0 && !is_flushing_sync) {
var tasks = micro_tasks;
queueMicrotask(() => {
if (tasks === micro_tasks) run_micro_tasks();
});
}
micro_tasks.push(fn);
}
function flush_tasks() {
while (micro_tasks.length > 0) {
run_micro_tasks();
}
}
// node_modules/svelte/src/internal/client/error-handling.js
var adjustments = /* @__PURE__ */ new WeakMap();
function handle_error(error) {
var effect2 = active_effect;
if (effect2 === null) {
active_reaction.f |= ERROR_VALUE;
return error;
}
if (dev_fallback_default && error instanceof Error && !adjustments.has(error)) {
adjustments.set(error, get_adjustments(error, effect2));
}
if ((effect2.f & EFFECT_RAN) === 0) {
if ((effect2.f & BOUNDARY_EFFECT) === 0) {
if (dev_fallback_default && !effect2.parent && error instanceof Error) {
apply_adjustments(error);
}
throw error;
}
effect2.b.error(error);
} else {
invoke_error_boundary(error, effect2);
}
}
function invoke_error_boundary(error, effect2) {
while (effect2 !== null) {
if ((effect2.f & BOUNDARY_EFFECT) !== 0) {
try {
effect2.b.error(error);
return;
} catch (e) {
error = e;
}
}
effect2 = effect2.parent;
}
if (dev_fallback_default && error instanceof Error) {
apply_adjustments(error);
}
throw error;
}
function get_adjustments(error, effect2) {
const message_descriptor = get_descriptor(error, "message");
if (message_descriptor && !message_descriptor.configurable) return;
var indent = is_firefox ? " " : " ";
var component_stack = `
${indent}in ${effect2.fn?.name || "<unknown>"}`;
var context = effect2.ctx;
while (context !== null) {
component_stack += `
${indent}in ${context.function?.[FILENAME].split("/").pop()}`;
context = context.p;
}
return {
message: error.message + `
${component_stack}
`,
stack: error.stack?.split("\n").filter((line) => !line.includes("svelte/src/internal")).join("\n")
};
}
function apply_adjustments(error) {
const adjusted = adjustments.get(error);
if (adjusted) {
define_property(error, "message", {
value: adjusted.message
});
define_property(error, "stack", {
value: adjusted.stack
});
}
}
// node_modules/svelte/src/internal/client/reactivity/batch.js
var batches = /* @__PURE__ */ new Set();
var current_batch = null;
var previous_batch = null;
var batch_values = null;
var queued_root_effects = [];
var last_scheduled_effect = null;
var is_flushing = false;
var is_flushing_sync = false;
var Batch = class _Batch {
committed = false;
/**
* The current values of any sources that are updated in this batch
* They keys of this map are identical to `this.#previous`
* @type {Map<Source, any>}
*/
current = /* @__PURE__ */ new Map();
/**
* The values of any sources that are updated in this batch _before_ those updates took place.
* They keys of this map are identical to `this.#current`
* @type {Map<Source, any>}
*/
previous = /* @__PURE__ */ new Map();
/**
* When the batch is committed (and the DOM is updated), we need to remove old branches
* and append new ones by calling the functions added inside (if/each/key/etc) blocks
* @type {Set<() => void>}
*/
#commit_callbacks = /* @__PURE__ */ new Set();
/**
* If a fork is discarded, we need to destroy any effects that are no longer needed
* @type {Set<(batch: Batch) => void>}
*/
#discard_callbacks = /* @__PURE__ */ new Set();
/**
* The number of async effects that are currently in flight
*/
#pending = 0;
/**
* The number of async effects that are currently in flight, _not_ inside a pending boundary
*/
#blocking_pending = 0;
/**
* A deferred that resolves when the batch is committed, used with `settled()`
* TODO replace with Promise.withResolvers once supported widely enough
* @type {{ promise: Promise<void>, resolve: (value?: any) => void, reject: (reason: unknown) => void } | null}
*/
#deferred = null;
/**
* Deferred effects (which run after async work has completed) that are DIRTY
* @type {Effect[]}
*/
#dirty_effects = [];
/**
* Deferred effects that are MAYBE_DIRTY
* @type {Effect[]}
*/
#maybe_dirty_effects = [];
/**
* A set of branches that still exist, but will be destroyed when this batch
* is committed — we skip over these during `process`
* @type {Set<Effect>}
*/
skipped_effects = /* @__PURE__ */ new Set();
is_fork = false;
is_deferred() {
return this.is_fork || this.#blocking_pending > 0;
}
/**
*
* @param {Effect[]} root_effects
*/
process(root_effects) {
queued_root_effects = [];
previous_batch = null;
this.apply();
var target = {
parent: null,
effect: null,
effects: [],
render_effects: [],
block_effects: []
};
for (const root6 of root_effects) {
this.#traverse_effect_tree(root6, target);
}
if (!this.is_fork) {
this.#resolve();
}
if (this.is_deferred()) {
this.#defer_effects(target.effects);
this.#defer_effects(target.render_effects);
this.#defer_effects(target.block_effects);
} else {
previous_batch = this;
current_batch = null;
flush_queued_effects(target.render_effects);
flush_queued_effects(target.effects);
previous_batch = null;
this.#deferred?.resolve();
}
batch_values = null;
}
/**
* Traverse the effect tree, executing effects or stashing
* them for later execution as appropriate
* @param {Effect} root
* @param {EffectTarget} target
*/
#traverse_effect_tree(root6, target) {
root6.f ^= CLEAN;
var effect2 = root6.first;
while (effect2 !== null) {
var flags2 = effect2.f;
var is_branch = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) !== 0;
var is_skippable_branch = is_branch && (flags2 & CLEAN) !== 0;
var skip = is_skippable_branch || (flags2 & INERT) !== 0 || this.skipped_effects.has(effect2);
if ((effect2.f & BOUNDARY_EFFECT) !== 0 && effect2.b?.is_pending()) {
target = {
parent: target,
effect: effect2,
effects: [],
render_effects: [],
block_effects: []
};
}
if (!skip && effect2.fn !== null) {
if (is_branch) {
effect2.f ^= CLEAN;
} else if ((flags2 & EFFECT) !== 0) {
target.effects.push(effect2);
} else if (async_mode_flag && (flags2 & (RENDER_EFFECT | MANAGED_EFFECT)) !== 0) {
target.render_effects.push(effect2);
} else if (is_dirty(effect2)) {
if ((effect2.f & BLOCK_EFFECT) !== 0) target.block_effects.push(effect2);
update_effect(effect2);
}
var child2 = effect2.first;
if (child2 !== null) {
effect2 = child2;
continue;
}
}
var parent = effect2.parent;
effect2 = effect2.next;
while (effect2 === null && parent !== null) {
if (parent === target.effect) {
this.#defer_effects(target.effects);
this.#defer_effects(target.render_effects);
this.#defer_effects(target.block_effects);
target = /** @type {EffectTarget} */
target.parent;
}
effect2 = parent.next;
parent = parent.parent;
}
}
}
/**
* @param {Effect[]} effects
*/
#defer_effects(effects) {
for (const e of effects) {
const target = (e.f & DIRTY) !== 0 ? this.#dirty_effects : this.#maybe_dirty_effects;
target.push(e);
this.#clear_marked(e.deps);
set_signal_status(e, CLEAN);
}
}
/**
* @param {Value[] | null} deps
*/
#clear_marked(deps) {
if (deps === null) return;
for (const dep of deps) {
if ((dep.f & DERIVED) === 0 || (dep.f & WAS_MARKED) === 0) {
continue;
}
dep.f ^= WAS_MARKED;
this.#clear_marked(
/** @type {Derived} */
dep.deps
);
}
}
/**
* Associate a change to a given source with the current
* batch, noting its previous and current values
* @param {Source} source
* @param {any} value
*/
capture(source2, value) {
if (!this.previous.has(source2)) {
this.previous.set(source2, value);
}
if ((source2.f & ERROR_VALUE) === 0) {
this.current.set(source2, source2.v);
batch_values?.set(source2, source2.v);
}
}
activate() {
current_batch = this;
this.apply();
}
deactivate() {
if (current_batch !== this) return;
current_batch = null;
batch_values = null;
}
flush() {
this.activate();
if (queued_root_effects.length > 0) {
flush_effects();
if (current_batch !== null && current_batch !== this) {
return;
}
} else if (this.#pending === 0) {
this.process([]);
}
this.deactivate();
}
discard() {
for (const fn of this.#discard_callbacks) fn(this);
this.#discard_callbacks.clear();
}
#resolve() {
if (this.#blocking_pending === 0) {
for (const fn of this.#commit_callbacks) fn();
this.#commit_callbacks.clear();
}
if (this.#pending === 0) {
this.#commit();
}
}
#commit() {
if (batches.size > 1) {
this.previous.clear();
var previous_batch_values = batch_values;
var is_earlier = true;
var dummy_target = {
parent: null,
effect: null,
effects: [],
render_effects: [],
block_effects: []
};
for (const batch of batches) {
if (batch === this) {
is_earlier = false;
continue;
}
const sources = [];
for (const [source2, value] of this.current) {
if (batch.current.has(source2)) {
if (is_earlier && value !== batch.current.get(source2)) {
batch.current.set(source2, value);
} else {
continue;
}
}
sources.push(source2);
}
if (sources.length === 0) {
continue;
}
const others = [...batch.current.keys()].filter((s) => !this.current.has(s));
if (others.length > 0) {
var prev_queued_root_effects = queued_root_effects;
queued_root_effects = [];
const marked = /* @__PURE__ */ new Set();
const checked = /* @__PURE__ */ new Map();
for (const source2 of sources) {
mark_effects(source2, others, marked, checked);
}
if (queued_root_effects.length > 0) {
current_batch = batch;
batch.apply();
for (const root6 of queued_root_effects) {
batch.#traverse_effect_tree(root6, dummy_target);
}
batch.deactivate();
}
queued_root_effects = prev_queued_root_effects;
}
}
current_batch = null;
batch_values = previous_batch_values;
}
this.committed = true;
batches.delete(this);
}
/**
*
* @param {boolean} blocking
*/
increment(blocking) {
this.#pending += 1;
if (blocking) this.#blocking_pending += 1;
}
/**
*
* @param {boolean} blocking
*/
decrement(blocking) {
this.#pending -= 1;
if (blocking) this.#blocking_pending -= 1;
this.revive();
}
revive() {
for (const e of this.#dirty_effects) {
set_signal_status(e, DIRTY);
schedule_effect(e);
}
for (const e of this.#maybe_dirty_effects) {
set_signal_status(e, MAYBE_DIRTY);
schedule_effect(e);
}
this.#dirty_effects = [];
this.#maybe_dirty_effects = [];
this.flush();
}
/** @param {() => void} fn */
oncommit(fn) {
this.#commit_callbacks.add(fn);
}
/** @param {(batch: Batch) => void} fn */
ondiscard(fn) {
this.#discard_callbacks.add(fn);
}
settled() {
return (this.#deferred ??= deferred()).promise;
}
static ensure() {
if (current_batch === null) {
const batch = current_batch = new _Batch();
batches.add(current_batch);
if (!is_flushing_sync) {
_Batch.enqueue(() => {
if (current_batch !== batch) {
return;
}
batch.flush();
});
}
}
return current_batch;
}
/** @param {() => void} task */
static enqueue(task) {
queue_micro_task(task);
}
apply() {
if (!async_mode_flag || !this.is_fork && batches.size === 1) return;
batch_values = new Map(this.current);
for (const batch of batches) {
if (batch === this) continue;
for (const [source2, previous] of batch.previous) {
if (!batch_values.has(source2)) {
batch_values.set(source2, previous);
}
}
}
}
};
function flushSync(fn) {
var was_flushing_sync = is_flushing_sync;
is_flushing_sync = true;
try {
var result;
if (fn) {
if (current_batch !== null) {
flush_effects();
}
result = fn();
}
while (true) {
flush_tasks();
if (queued_root_effects.length === 0) {
current_batch?.flush();
if (queued_root_effects.length === 0) {
last_scheduled_effect = null;
return (
/** @type {T} */
result
);
}
}
flush_effects();
}
} finally {
is_flushing_sync = was_flushing_sync;
}
}
function flush_effects() {
var was_updating_effect = is_updating_effect;
is_flushing = true;
var source_stacks = dev_fallback_default ? /* @__PURE__ */ new Set() : null;
try {
var flush_count = 0;
set_is_updating_effect(true);
while (queued_root_effects.length > 0) {
var batch = Batch.ensure();
if (flush_count++ > 1e3) {
if (dev_fallback_default) {
var updates = /* @__PURE__ */ new Map();
for (const source2 of batch.current.keys()) {
for (const [stack2, update2] of source2.updated ?? []) {
var entry = updates.get(stack2);
if (!entry) {
entry = { error: update2.error, count: 0 };
updates.set(stack2, entry);
}
entry.count += update2.count;
}
}
for (const update2 of updates.values()) {
if (update2.error) {
console.error(update2.error);
}
}
}
infinite_loop_guard();
}
batch.process(queued_root_effects);
old_values.clear();
if (dev_fallback_default) {
for (const source2 of batch.current.keys()) {
source_stacks.add(source2);
}
}
}
} finally {
is_flushing = false;
set_is_updating_effect(was_updating_effect);
last_scheduled_effect = null;
if (dev_fallback_default) {
for (
const source2 of
/** @type {Set<Source>} */
source_stacks
) {
source2.updated = null;
}
}
}
}
function infinite_loop_guard() {
try {
effect_update_depth_exceeded();
} catch (error) {
if (dev_fallback_default) {
define_property(error, "stack", { value: "" });
}
invoke_error_boundary(error, last_scheduled_effect);
}
}
var eager_block_effects = null;
function flush_queued_effects(effects) {
var length = effects.length;
if (length === 0) return;
var i = 0;
while (i < length) {
var effect2 = effects[i++];
if ((effect2.f & (DESTROYED | INERT)) === 0 && is_dirty(effect2)) {
eager_block_effects = /* @__PURE__ */ new Set();
update_effect(effect2);
if (effect2.deps === null && effect2.first === null && effect2.nodes === null) {
if (effect2.teardown === null && effect2.ac === null) {
unlink_effect(effect2);
} else {
effect2.fn = null;
}
}
if (eager_block_effects?.size > 0) {
old_values.clear();
for (const e of eager_block_effects) {
if ((e.f & (DESTROYED | INERT)) !== 0) continue;
const ordered_effects = [e];
let ancestor = e.parent;
while (ancestor !== null) {
if (eager_block_effects.has(ancestor)) {
eager_block_effects.delete(ancestor);
ordered_effects.push(ancestor);
}
ancestor = ancestor.parent;
}
for (let j = ordered_effects.length - 1; j >= 0; j--) {
const e2 = ordered_effects[j];
if ((e2.f & (DESTROYED | INERT)) !== 0) continue;
update_effect(e2);
}
}
eager_block_effects.clear();
}
}
}
eager_block_effects = null;
}
function mark_effects(value, sources, marked, checked) {
if (marked.has(value)) return;
marked.add(value);
if (value.reactions !== null) {
for (const reaction of value.reactions) {
const flags2 = reaction.f;
if ((flags2 & DERIVED) !== 0) {
mark_effects(
/** @type {Derived} */
reaction,
sources,
marked,
checked
);
} else if ((flags2 & (ASYNC | BLOCK_EFFECT)) !== 0 && (flags2 & DIRTY) === 0 && depends_on(reaction, sources, checked)) {
set_signal_status(reaction, DIRTY);
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
}
function depends_on(reaction, sources, checked) {
const depends = checked.get(reaction);
if (depends !== void 0) return depends;
if (reaction.deps !== null) {
for (const dep of reaction.deps) {
if (sources.includes(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on(
/** @type {Derived} */
dep,
sources,
checked
)) {
checked.set(
/** @type {Derived} */
dep,
true
);
return true;
}
}
}
checked.set(reaction, false);
return false;
}
function schedule_effect(signal) {
var effect2 = last_scheduled_effect = signal;
while (effect2.parent !== null) {
effect2 = effect2.parent;
var flags2 = effect2.f;
if (is_flushing && effect2 === active_effect && (flags2 & BLOCK_EFFECT) !== 0 && (flags2 & HEAD_EFFECT) === 0) {
return;
}
if ((flags2 & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
if ((flags2 & CLEAN) === 0) return;
effect2.f ^= CLEAN;
}
}
queued_root_effects.push(effect2);
}
// node_modules/svelte/src/reactivity/create-subscriber.js
function createSubscriber(start) {
let subscribers = 0;
let version = source(0);
let stop;
if (dev_fallback_default) {
tag(version, "createSubscriber version");
}
return () => {
if (effect_tracking()) {
get(version);
render_effect(() => {
if (subscribers === 0) {
stop = untrack(() => start(() => increment(version)));
}
subscribers += 1;
return () => {
queue_micro_task(() => {
subscribers -= 1;
if (subscribers === 0) {
stop?.();
stop = void 0;
increment(version);
}
});
};
});
}
};
}
// node_modules/svelte/src/internal/client/dom/blocks/boundary.js
var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED | BOUNDARY_EFFECT;
function boundary(node, props, children) {
new Boundary(node, props, children);
}
var Boundary = class {
/** @type {Boundary | null} */
parent;
#pending = false;
/** @type {TemplateNode} */
#anchor;
/** @type {TemplateNode | null} */
#hydrate_open = hydrating ? hydrate_node : null;
/** @type {BoundaryProps} */
#props;
/** @type {((anchor: Node) => void)} */
#children;
/** @type {Effect} */
#effect;
/** @type {Effect | null} */
#main_effect = null;
/** @type {Effect | null} */
#pending_effect = null;
/** @type {Effect | null} */
#failed_effect = null;
/** @type {DocumentFragment | null} */
#offscreen_fragment = null;
/** @type {TemplateNode | null} */
#pending_anchor = null;
#local_pending_count = 0;
#pending_count = 0;
#is_creating_fallback = false;
/**
* A source containing the number of pending async deriveds/expressions.
* Only created if `$effect.pending()` is used inside the boundary,
* otherwise updating the source results in needless `Batch.ensure()`
* calls followed by no-op flushes
* @type {Source<number> | null}
*/
#effect_pending = null;
#effect_pending_subscriber = createSubscriber(() => {
this.#effect_pending = source(this.#local_pending_count);
if (dev_fallback_default) {
tag(this.#effect_pending, "$effect.pending()");
}
return () => {
this.#effect_pending = null;
};
});
/**
* @param {TemplateNode} node
* @param {BoundaryProps} props
* @param {((anchor: Node) => void)} children
*/
constructor(node, props, children) {
this.#anchor = node;
this.#props = props;
this.#children = children;
this.parent = /** @type {Effect} */
active_effect.b;
this.#pending = !!this.#props.pending;
this.#effect = block(() => {
active_effect.b = this;
if (hydrating) {
const comment2 = this.#hydrate_open;
hydrate_next();
const server_rendered_pending = (
/** @type {Comment} */
comment2.nodeType === COMMENT_NODE && /** @type {Comment} */
comment2.data === HYDRATION_START_ELSE
);
if (server_rendered_pending) {
this.#hydrate_pending_content();
} else {
this.#hydrate_resolved_content();
}
} else {
var anchor = this.#get_anchor();
try {
this.#main_effect = branch(() => children(anchor));
} catch (error) {
this.error(error);
}
if (this.#pending_count > 0) {
this.#show_pending_snippet();
} else {
this.#pending = false;
}
}
return () => {
this.#pending_anchor?.remove();
};
}, flags);
if (hydrating) {
this.#anchor = hydrate_node;
}
}
#hydrate_resolved_content() {
try {
this.#main_effect = branch(() => this.#children(this.#anchor));
} catch (error) {
this.error(error);
}
this.#pending = false;
}
#hydrate_pending_content() {
const pending2 = this.#props.pending;
if (!pending2) {
return;
}
this.#pending_effect = branch(() => pending2(this.#anchor));
Batch.enqueue(() => {
var anchor = this.#get_anchor();
this.#main_effect = this.#run(() => {
Batch.ensure();
return branch(() => this.#children(anchor));
});
if (this.#pending_count > 0) {
this.#show_pending_snippet();
} else {
pause_effect(
/** @type {Effect} */
this.#pending_effect,
() => {
this.#pending_effect = null;
}
);
this.#pending = false;
}
});
}
#get_anchor() {
var anchor = this.#anchor;
if (this.#pending) {
this.#pending_anchor = create_text();
this.#anchor.before(this.#pending_anchor);
anchor = this.#pending_anchor;
}
return anchor;
}
/**
* Returns `true` if the effect exists inside a boundary whose pending snippet is shown
* @returns {boolean}
*/
is_pending() {
return this.#pending || !!this.parent && this.parent.is_pending();
}
has_pending_snippet() {
return !!this.#props.pending;
}
/**
* @param {() => Effect | null} fn
*/
#run(fn) {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_ctx = component_context;
set_active_effect(this.#effect);
set_active_reaction(this.#effect);
set_component_context(this.#effect.ctx);
try {
return fn();
} catch (e) {
handle_error(e);
return null;
} finally {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_ctx);
}
}
#show_pending_snippet() {
const pending2 = (
/** @type {(anchor: Node) => void} */
this.#props.pending
);
if (this.#main_effect !== null) {
this.#offscreen_fragment = document.createDocumentFragment();
this.#offscreen_fragment.append(
/** @type {TemplateNode} */
this.#pending_anchor
);
move_effect(this.#main_effect, this.#offscreen_fragment);
}
if (this.#pending_effect === null) {
this.#pending_effect = branch(() => pending2(this.#anchor));
}
}
/**
* Updates the pending count associated with the currently visible pending snippet,
* if any, such that we can replace the snippet with content once work is done
* @param {1 | -1} d
*/
#update_pending_count(d) {
if (!this.has_pending_snippet()) {
if (this.parent) {
this.parent.#update_pending_count(d);
}
return;
}
this.#pending_count += d;
if (this.#pending_count === 0) {
this.#pending = false;
if (this.#pending_effect) {
pause_effect(this.#pending_effect, () => {
this.#pending_effect = null;
});
}
if (this.#offscreen_fragment) {
this.#anchor.before(this.#offscreen_fragment);
this.#offscreen_fragment = null;
}
}
}
/**
* Update the source that powers `$effect.pending()` inside this boundary,
* and controls when the current `pending` snippet (if any) is removed.
* Do not call from inside the class
* @param {1 | -1} d
*/
update_pending_count(d) {
this.#update_pending_count(d);
this.#local_pending_count += d;
if (this.#effect_pending) {
internal_set(this.#effect_pending, this.#local_pending_count);
}
}
get_effect_pending() {
this.#effect_pending_subscriber();
return get(
/** @type {Source<number>} */
this.#effect_pending
);
}
/** @param {unknown} error */
error(error) {
var onerror = this.#props.onerror;
let failed = this.#props.failed;
if (this.#is_creating_fallback || !onerror && !failed) {
throw error;
}
if (this.#main_effect) {
destroy_effect(this.#main_effect);
this.#main_effect = null;
}
if (this.#pending_effect) {
destroy_effect(this.#pending_effect);
this.#pending_effect = null;
}
if (this.#failed_effect) {
destroy_effect(this.#failed_effect);
this.#failed_effect = null;
}
if (hydrating) {
set_hydrate_node(
/** @type {TemplateNode} */
this.#hydrate_open
);
next();
set_hydrate_node(skip_nodes());
}
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
Batch.ensure();
this.#local_pending_count = 0;
if (this.#failed_effect !== null) {
pause_effect(this.#failed_effect, () => {
this.#failed_effect = null;
});
}
this.#pending = this.has_pending_snippet();
this.#main_effect = this.#run(() => {
this.#is_creating_fallback = false;
return branch(() => this.#children(this.#anchor));
});
if (this.#pending_count > 0) {
this.#show_pending_snippet();
} else {
this.#pending = false;
}
};
var previous_reaction = active_reaction;
try {
set_active_reaction(null);
calling_on_error = true;
onerror?.(error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, this.#effect && this.#effect.parent);
} finally {
set_active_reaction(previous_reaction);
}
if (failed) {
queue_micro_task(() => {
this.#failed_effect = this.#run(() => {
Batch.ensure();
this.#is_creating_fallback = true;
try {
return branch(() => {
failed(
this.#anchor,
() => error,
() => reset2
);
});
} catch (error2) {
invoke_error_boundary(
error2,
/** @type {Effect} */
this.#effect.parent
);
return null;
} finally {
this.#is_creating_fallback = false;
}
});
});
}
}
};
// node_modules/svelte/src/internal/client/reactivity/async.js
function flatten(blockers, sync, async2, fn) {
const d = is_runes() ? derived : derived_safe_equal;
if (async2.length === 0 && blockers.length === 0) {
fn(sync.map(d));
return;
}
var batch = current_batch;
var parent = (
/** @type {Effect} */
active_effect
);
var restore = capture();
function run3() {
Promise.all(async2.map((expression) => async_derived(expression))).then((result) => {
restore();
try {
fn([...sync.map(d), ...result]);
} catch (error) {
if ((parent.f & DESTROYED) === 0) {
invoke_error_boundary(error, parent);
}
}
batch?.deactivate();
unset_context();
}).catch((error) => {
invoke_error_boundary(error, parent);
});
}
if (blockers.length > 0) {
Promise.all(blockers).then(() => {
restore();
try {
return run3();
} finally {
batch?.deactivate();
unset_context();
}
});
} else {
run3();
}
}
function capture() {
var previous_effect = active_effect;
var previous_reaction = active_reaction;
var previous_component_context = component_context;
var previous_batch2 = current_batch;
if (dev_fallback_default) {
var previous_dev_stack = dev_stack;
}
return function restore(activate_batch = true) {
set_active_effect(previous_effect);
set_active_reaction(previous_reaction);
set_component_context(previous_component_context);
if (activate_batch) previous_batch2?.activate();
if (dev_fallback_default) {
set_from_async_derived(null);
set_dev_stack(previous_dev_stack);
}
};
}
function unset_context() {
set_active_effect(null);
set_active_reaction(null);
set_component_context(null);
if (dev_fallback_default) {
set_from_async_derived(null);
set_dev_stack(null);
}
}
// node_modules/svelte/src/internal/client/reactivity/deriveds.js
var current_async_effect = null;
function set_from_async_derived(v) {
current_async_effect = v;
}
var recent_async_deriveds = /* @__PURE__ */ new Set();
// @__NO_SIDE_EFFECTS__
function derived(fn) {
var flags2 = DERIVED | DIRTY;
var parent_derived = active_reaction !== null && (active_reaction.f & DERIVED) !== 0 ? (
/** @type {Derived} */
active_reaction
) : null;
if (active_effect !== null) {
active_effect.f |= EFFECT_PRESERVED;
}
const signal = {
ctx: component_context,
deps: null,
effects: null,
equals,
f: flags2,
fn,
reactions: null,
rv: 0,
v: (
/** @type {V} */
UNINITIALIZED
),
wv: 0,
parent: parent_derived ?? active_effect,
ac: null
};
if (dev_fallback_default && tracing_mode_flag) {
signal.created = get_error("created at");
}
return signal;
}
// @__NO_SIDE_EFFECTS__
function async_derived(fn, location) {
let parent = (
/** @type {Effect | null} */
active_effect
);
if (parent === null) {
async_derived_orphan();
}
var boundary2 = (
/** @type {Boundary} */
parent.b
);
var promise = (
/** @type {Promise<V>} */
/** @type {unknown} */
void 0
);
var signal = source(
/** @type {V} */
UNINITIALIZED
);
var should_suspend = !active_reaction;
var deferreds = /* @__PURE__ */ new Map();
async_effect(() => {
if (dev_fallback_default) current_async_effect = active_effect;
var d = deferred();
promise = d.promise;
try {
Promise.resolve(fn()).then(d.resolve, d.reject).then(() => {
if (batch === current_batch && batch.committed) {
batch.deactivate();
}
unset_context();
});
} catch (error) {
d.reject(error);
unset_context();
}
if (dev_fallback_default) current_async_effect = null;
var batch = (
/** @type {Batch} */
current_batch
);
if (should_suspend) {
var blocking = !boundary2.is_pending();
boundary2.update_pending_count(1);
batch.increment(blocking);
deferreds.get(batch)?.reject(STALE_REACTION);
deferreds.delete(batch);
deferreds.set(batch, d);
}
const handler = (value, error = void 0) => {
current_async_effect = null;
batch.activate();
if (error) {
if (error !== STALE_REACTION) {
signal.f |= ERROR_VALUE;
internal_set(signal, error);
}
} else {
if ((signal.f & ERROR_VALUE) !== 0) {
signal.f ^= ERROR_VALUE;
}
internal_set(signal, value);
for (const [b, d2] of deferreds) {
deferreds.delete(b);
if (b === batch) break;
d2.reject(STALE_REACTION);
}
if (dev_fallback_default && location !== void 0) {
recent_async_deriveds.add(signal);
setTimeout(() => {
if (recent_async_deriveds.has(signal)) {
await_waterfall(
/** @type {string} */
signal.label,
location
);
recent_async_deriveds.delete(signal);
}
});
}
}
if (should_suspend) {
boundary2.update_pending_count(-1);
batch.decrement(blocking);
}
};
d.promise.then(handler, (e) => handler(null, e || "unknown"));
});
teardown(() => {
for (const d of deferreds.values()) {
d.reject(STALE_REACTION);
}
});
if (dev_fallback_default) {
signal.f |= ASYNC;
}
return new Promise((fulfil) => {
function next2(p) {
function go() {
if (p === promise) {
fulfil(signal);
} else {
next2(promise);
}
}
p.then(go, go);
}
next2(promise);
});
}
// @__NO_SIDE_EFFECTS__
function user_derived(fn) {
const d = /* @__PURE__ */ derived(fn);
if (!async_mode_flag) push_reaction_value(d);
return d;
}
// @__NO_SIDE_EFFECTS__
function derived_safe_equal(fn) {
const signal = /* @__PURE__ */ derived(fn);
signal.equals = safe_equals;
return signal;
}
function destroy_derived_effects(derived2) {
var effects = derived2.effects;
if (effects !== null) {
derived2.effects = null;
for (var i = 0; i < effects.length; i += 1) {
destroy_effect(
/** @type {Effect} */
effects[i]
);
}
}
}
var stack = [];
function get_derived_parent_effect(derived2) {
var parent = derived2.parent;
while (parent !== null) {
if ((parent.f & DERIVED) === 0) {
return (parent.f & DESTROYED) === 0 ? (
/** @type {Effect} */
parent
) : null;
}
parent = parent.parent;
}
return null;
}
function execute_derived(derived2) {
var value;
var prev_active_effect = active_effect;
set_active_effect(get_derived_parent_effect(derived2));
if (dev_fallback_default) {
let prev_eager_effects = eager_effects;
set_eager_effects(/* @__PURE__ */ new Set());
try {
if (stack.includes(derived2)) {
derived_references_self();
}
stack.push(derived2);
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
set_eager_effects(prev_eager_effects);
stack.pop();
}
} else {
try {
derived2.f &= ~WAS_MARKED;
destroy_derived_effects(derived2);
value = update_reaction(derived2);
} finally {
set_active_effect(prev_active_effect);
}
}
return value;
}
function update_derived(derived2) {
var value = execute_derived(derived2);
if (!derived2.equals(value)) {
if (!current_batch?.is_fork) {
derived2.v = value;
}
derived2.wv = increment_write_version();
}
if (is_destroying_effect) {
return;
}
if (batch_values !== null) {
if (effect_tracking() || current_batch?.is_fork) {
batch_values.set(derived2, value);
}
} else {
var status = (derived2.f & CONNECTED) === 0 ? MAYBE_DIRTY : CLEAN;
set_signal_status(derived2, status);
}
}
// node_modules/svelte/src/internal/client/reactivity/sources.js
var eager_effects = /* @__PURE__ */ new Set();
var old_values = /* @__PURE__ */ new Map();
function set_eager_effects(v) {
eager_effects = v;
}
var eager_effects_deferred = false;
function set_eager_effects_deferred() {
eager_effects_deferred = true;
}
function source(v, stack2) {
var signal = {
f: 0,
// TODO ideally we could skip this altogether, but it causes type errors
v,
reactions: null,
equals,
rv: 0,
wv: 0
};
if (dev_fallback_default && tracing_mode_flag) {
signal.created = stack2 ?? get_error("created at");
signal.updated = null;
signal.set_during_effect = false;
signal.trace = null;
}
return signal;
}
// @__NO_SIDE_EFFECTS__
function state(v, stack2) {
const s = source(v, stack2);
push_reaction_value(s);
return s;
}
// @__NO_SIDE_EFFECTS__
function mutable_source(initial_value, immutable = false, trackable = true) {
const s = source(initial_value);
if (!immutable) {
s.equals = safe_equals;
}
if (legacy_mode_flag && trackable && component_context !== null && component_context.l !== null) {
(component_context.l.s ??= []).push(s);
}
return s;
}
function set(source2, value, should_proxy = false) {
if (active_reaction !== null && // since we are untracking the function inside `$inspect.with` we need to add this check
// to ensure we error if state is set inside an inspect effect
(!untracking || (active_reaction.f & EAGER_EFFECT) !== 0) && is_runes() && (active_reaction.f & (DERIVED | BLOCK_EFFECT | ASYNC | EAGER_EFFECT)) !== 0 && !current_sources?.includes(source2)) {
state_unsafe_mutation();
}
let new_value = should_proxy ? proxy(value) : value;
if (dev_fallback_default) {
tag_proxy(
new_value,
/** @type {string} */
source2.label
);
}
return internal_set(source2, new_value);
}
function internal_set(source2, value) {
if (!source2.equals(value)) {
var old_value = source2.v;
if (is_destroying_effect) {
old_values.set(source2, value);
} else {
old_values.set(source2, old_value);
}
source2.v = value;
var batch = Batch.ensure();
batch.capture(source2, old_value);
if (dev_fallback_default) {
if (tracing_mode_flag || active_effect !== null) {
source2.updated ??= /* @__PURE__ */ new Map();
const count = (source2.updated.get("")?.count ?? 0) + 1;
source2.updated.set("", { error: (
/** @type {any} */
null
), count });
if (tracing_mode_flag || count > 5) {
const error = get_error("updated at");
if (error !== null) {
let entry = source2.updated.get(error.stack);
if (!entry) {
entry = { error, count: 0 };
source2.updated.set(error.stack, entry);
}
entry.count++;
}
}
}
if (active_effect !== null) {
source2.set_during_effect = true;
}
}
if ((source2.f & DERIVED) !== 0) {
if ((source2.f & DIRTY) !== 0) {
execute_derived(
/** @type {Derived} */
source2
);
}
set_signal_status(source2, (source2.f & CONNECTED) !== 0 ? CLEAN : MAYBE_DIRTY);
}
source2.wv = increment_write_version();
mark_reactions(source2, DIRTY);
if (is_runes() && active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0) {
if (untracked_writes === null) {
set_untracked_writes([source2]);
} else {
untracked_writes.push(source2);
}
}
if (!batch.is_fork && eager_effects.size > 0 && !eager_effects_deferred) {
flush_eager_effects();
}
}
return value;
}
function flush_eager_effects() {
eager_effects_deferred = false;
var prev_is_updating_effect = is_updating_effect;
set_is_updating_effect(true);
const inspects = Array.from(eager_effects);
try {
for (const effect2 of inspects) {
if ((effect2.f & CLEAN) !== 0) {
set_signal_status(effect2, MAYBE_DIRTY);
}
if (is_dirty(effect2)) {
update_effect(effect2);
}
}
} finally {
set_is_updating_effect(prev_is_updating_effect);
}
eager_effects.clear();
}
function update(source2, d = 1) {
var value = get(source2);
var result = d === 1 ? value++ : value--;
set(source2, value);
return result;
}
function increment(source2) {
set(source2, source2.v + 1);
}
function mark_reactions(signal, status) {
var reactions = signal.reactions;
if (reactions === null) return;
var runes = is_runes();
var length = reactions.length;
for (var i = 0; i < length; i++) {
var reaction = reactions[i];
var flags2 = reaction.f;
if (!runes && reaction === active_effect) continue;
if (dev_fallback_default && (flags2 & EAGER_EFFECT) !== 0) {
eager_effects.add(reaction);
continue;
}
var not_dirty = (flags2 & DIRTY) === 0;
if (not_dirty) {
set_signal_status(reaction, status);
}
if ((flags2 & DERIVED) !== 0) {
var derived2 = (
/** @type {Derived} */
reaction
);
batch_values?.delete(derived2);
if ((flags2 & WAS_MARKED) === 0) {
if (flags2 & CONNECTED) {
reaction.f |= WAS_MARKED;
}
mark_reactions(derived2, MAYBE_DIRTY);
}
} else if (not_dirty) {
if ((flags2 & BLOCK_EFFECT) !== 0 && eager_block_effects !== null) {
eager_block_effects.add(
/** @type {Effect} */
reaction
);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
// node_modules/svelte/src/internal/client/proxy.js
var regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
function proxy(value) {
if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
return value;
}
const prototype = get_prototype_of(value);
if (prototype !== object_prototype && prototype !== array_prototype) {
return value;
}
var sources = /* @__PURE__ */ new Map();
var is_proxied_array = is_array(value);
var version = state(0);
var stack2 = dev_fallback_default && tracing_mode_flag ? get_error("created at") : null;
var parent_version = update_version;
var with_parent = (fn) => {
if (update_version === parent_version) {
return fn();
}
var reaction = active_reaction;
var version2 = update_version;
set_active_reaction(null);
set_update_version(parent_version);
var result = fn();
set_active_reaction(reaction);
set_update_version(version2);
return result;
};
if (is_proxied_array) {
sources.set("length", state(
/** @type {any[]} */
value.length,
stack2
));
if (dev_fallback_default) {
value = /** @type {any} */
inspectable_array(
/** @type {any[]} */
value
);
}
}
var path = "";
let updating = false;
function update_path(new_path) {
if (updating) return;
updating = true;
path = new_path;
tag(version, `${path} version`);
for (const [prop2, source2] of sources) {
tag(source2, get_label(path, prop2));
}
updating = false;
}
return new Proxy(
/** @type {any} */
value,
{
defineProperty(_, prop2, descriptor) {
if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
state_descriptors_fixed();
}
var s = sources.get(prop2);
if (s === void 0) {
s = with_parent(() => {
var s2 = state(descriptor.value, stack2);
sources.set(prop2, s2);
if (dev_fallback_default && typeof prop2 === "string") {
tag(s2, get_label(path, prop2));
}
return s2;
});
} else {
set(s, descriptor.value, true);
}
return true;
},
deleteProperty(target, prop2) {
var s = sources.get(prop2);
if (s === void 0) {
if (prop2 in target) {
const s2 = with_parent(() => state(UNINITIALIZED, stack2));
sources.set(prop2, s2);
increment(version);
if (dev_fallback_default) {
tag(s2, get_label(path, prop2));
}
}
} else {
set(s, UNINITIALIZED);
increment(version);
}
return true;
},
get(target, prop2, receiver) {
if (prop2 === STATE_SYMBOL) {
return value;
}
if (dev_fallback_default && prop2 === PROXY_PATH_SYMBOL) {
return update_path;
}
var s = sources.get(prop2);
var exists = prop2 in target;
if (s === void 0 && (!exists || get_descriptor(target, prop2)?.writable)) {
s = with_parent(() => {
var p = proxy(exists ? target[prop2] : UNINITIALIZED);
var s2 = state(p, stack2);
if (dev_fallback_default) {
tag(s2, get_label(path, prop2));
}
return s2;
});
sources.set(prop2, s);
}
if (s !== void 0) {
var v = get(s);
return v === UNINITIALIZED ? void 0 : v;
}
return Reflect.get(target, prop2, receiver);
},
getOwnPropertyDescriptor(target, prop2) {
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor && "value" in descriptor) {
var s = sources.get(prop2);
if (s) descriptor.value = get(s);
} else if (descriptor === void 0) {
var source2 = sources.get(prop2);
var value2 = source2?.v;
if (source2 !== void 0 && value2 !== UNINITIALIZED) {
return {
enumerable: true,
configurable: true,
value: value2,
writable: true
};
}
}
return descriptor;
},
has(target, prop2) {
if (prop2 === STATE_SYMBOL) {
return true;
}
var s = sources.get(prop2);
var has = s !== void 0 && s.v !== UNINITIALIZED || Reflect.has(target, prop2);
if (s !== void 0 || active_effect !== null && (!has || get_descriptor(target, prop2)?.writable)) {
if (s === void 0) {
s = with_parent(() => {
var p = has ? proxy(target[prop2]) : UNINITIALIZED;
var s2 = state(p, stack2);
if (dev_fallback_default) {
tag(s2, get_label(path, prop2));
}
return s2;
});
sources.set(prop2, s);
}
var value2 = get(s);
if (value2 === UNINITIALIZED) {
return false;
}
}
return has;
},
set(target, prop2, value2, receiver) {
var s = sources.get(prop2);
var has = prop2 in target;
if (is_proxied_array && prop2 === "length") {
for (var i = value2; i < /** @type {Source<number>} */
s.v; i += 1) {
var other_s = sources.get(i + "");
if (other_s !== void 0) {
set(other_s, UNINITIALIZED);
} else if (i in target) {
other_s = with_parent(() => state(UNINITIALIZED, stack2));
sources.set(i + "", other_s);
if (dev_fallback_default) {
tag(other_s, get_label(path, i));
}
}
}
}
if (s === void 0) {
if (!has || get_descriptor(target, prop2)?.writable) {
s = with_parent(() => state(void 0, stack2));
if (dev_fallback_default) {
tag(s, get_label(path, prop2));
}
set(s, proxy(value2));
sources.set(prop2, s);
}
} else {
has = s.v !== UNINITIALIZED;
var p = with_parent(() => proxy(value2));
set(s, p);
}
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
if (descriptor?.set) {
descriptor.set.call(receiver, value2);
}
if (!has) {
if (is_proxied_array && typeof prop2 === "string") {
var ls = (
/** @type {Source<number>} */
sources.get("length")
);
var n = Number(prop2);
if (Number.isInteger(n) && n >= ls.v) {
set(ls, n + 1);
}
}
increment(version);
}
return true;
},
ownKeys(target) {
get(version);
var own_keys = Reflect.ownKeys(target).filter((key3) => {
var source3 = sources.get(key3);
return source3 === void 0 || source3.v !== UNINITIALIZED;
});
for (var [key2, source2] of sources) {
if (source2.v !== UNINITIALIZED && !(key2 in target)) {
own_keys.push(key2);
}
}
return own_keys;
},
setPrototypeOf() {
state_prototype_fixed();
}
}
);
}
function get_label(path, prop2) {
if (typeof prop2 === "symbol") return `${path}[Symbol(${prop2.description ?? ""})]`;
if (regex_is_valid_identifier.test(prop2)) return `${path}.${prop2}`;
return /^\d+$/.test(prop2) ? `${path}[${prop2}]` : `${path}['${prop2}']`;
}
function get_proxied_value(value) {
try {
if (value !== null && typeof value === "object" && STATE_SYMBOL in value) {
return value[STATE_SYMBOL];
}
} catch {
}
return value;
}
function is(a, b) {
return Object.is(get_proxied_value(a), get_proxied_value(b));
}
var ARRAY_MUTATING_METHODS = /* @__PURE__ */ new Set([
"copyWithin",
"fill",
"pop",
"push",
"reverse",
"shift",
"sort",
"splice",
"unshift"
]);
function inspectable_array(array) {
return new Proxy(array, {
get(target, prop2, receiver) {
var value = Reflect.get(target, prop2, receiver);
if (!ARRAY_MUTATING_METHODS.has(
/** @type {string} */
prop2
)) {
return value;
}
return function(...args) {
set_eager_effects_deferred();
var result = value.apply(this, args);
flush_eager_effects();
return result;
};
}
});
}
// node_modules/svelte/src/internal/client/dev/equality.js
function init_array_prototype_warnings() {
const array_prototype2 = Array.prototype;
const cleanup = Array.__svelte_cleanup;
if (cleanup) {
cleanup();
}
const { indexOf, lastIndexOf, includes } = array_prototype2;
array_prototype2.indexOf = function(item, from_index) {
const index2 = indexOf.call(this, item, from_index);
if (index2 === -1) {
for (let i = from_index ?? 0; i < this.length; i += 1) {
if (get_proxied_value(this[i]) === item) {
state_proxy_equality_mismatch("array.indexOf(...)");
break;
}
}
}
return index2;
};
array_prototype2.lastIndexOf = function(item, from_index) {
const index2 = lastIndexOf.call(this, item, from_index ?? this.length - 1);
if (index2 === -1) {
for (let i = 0; i <= (from_index ?? this.length - 1); i += 1) {
if (get_proxied_value(this[i]) === item) {
state_proxy_equality_mismatch("array.lastIndexOf(...)");
break;
}
}
}
return index2;
};
array_prototype2.includes = function(item, from_index) {
const has = includes.call(this, item, from_index);
if (!has) {
for (let i = 0; i < this.length; i += 1) {
if (get_proxied_value(this[i]) === item) {
state_proxy_equality_mismatch("array.includes(...)");
break;
}
}
}
return has;
};
Array.__svelte_cleanup = () => {
array_prototype2.indexOf = indexOf;
array_prototype2.lastIndexOf = lastIndexOf;
array_prototype2.includes = includes;
};
}
// node_modules/svelte/src/internal/client/dom/operations.js
var $window;
var $document;
var is_firefox;
var first_child_getter;
var next_sibling_getter;
function init_operations() {
if ($window !== void 0) {
return;
}
$window = window;
$document = document;
is_firefox = /Firefox/.test(navigator.userAgent);
var element_prototype = Element.prototype;
var node_prototype = Node.prototype;
var text_prototype = Text.prototype;
first_child_getter = get_descriptor(node_prototype, "firstChild").get;
next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
if (is_extensible(element_prototype)) {
element_prototype.__click = void 0;
element_prototype.__className = void 0;
element_prototype.__attributes = null;
element_prototype.__style = void 0;
element_prototype.__e = void 0;
}
if (is_extensible(text_prototype)) {
text_prototype.__t = void 0;
}
if (dev_fallback_default) {
element_prototype.__svelte_meta = null;
init_array_prototype_warnings();
}
}
function create_text(value = "") {
return document.createTextNode(value);
}
// @__NO_SIDE_EFFECTS__
function get_first_child(node) {
return (
/** @type {TemplateNode | null} */
first_child_getter.call(node)
);
}
// @__NO_SIDE_EFFECTS__
function get_next_sibling(node) {
return (
/** @type {TemplateNode | null} */
next_sibling_getter.call(node)
);
}
function child(node, is_text) {
if (!hydrating) {
return /* @__PURE__ */ get_first_child(node);
}
var child2 = /* @__PURE__ */ get_first_child(hydrate_node);
if (child2 === null) {
child2 = hydrate_node.appendChild(create_text());
} else if (is_text && child2.nodeType !== TEXT_NODE) {
var text2 = create_text();
child2?.before(text2);
set_hydrate_node(text2);
return text2;
}
set_hydrate_node(child2);
return child2;
}
function sibling(node, count = 1, is_text = false) {
let next_sibling = hydrating ? hydrate_node : node;
var last_sibling;
while (count--) {
last_sibling = next_sibling;
next_sibling = /** @type {TemplateNode} */
/* @__PURE__ */ get_next_sibling(next_sibling);
}
if (!hydrating) {
return next_sibling;
}
if (is_text && next_sibling?.nodeType !== TEXT_NODE) {
var text2 = create_text();
if (next_sibling === null) {
last_sibling?.after(text2);
} else {
next_sibling.before(text2);
}
set_hydrate_node(text2);
return text2;
}
set_hydrate_node(next_sibling);
return next_sibling;
}
function clear_text_content(node) {
node.textContent = "";
}
function should_defer_append() {
if (!async_mode_flag) return false;
if (eager_block_effects !== null) return false;
var flags2 = (
/** @type {Effect} */
active_effect.f
);
return (flags2 & EFFECT_RAN) !== 0;
}
// node_modules/svelte/src/internal/client/dom/elements/misc.js
var listening_to_form_reset = false;
function add_form_reset_listener() {
if (!listening_to_form_reset) {
listening_to_form_reset = true;
document.addEventListener(
"reset",
(evt) => {
Promise.resolve().then(() => {
if (!evt.defaultPrevented) {
for (
const e of
/**@type {HTMLFormElement} */
evt.target.elements
) {
e.__on_r?.();
}
}
});
},
// In the capture phase to guarantee we get noticed of it (no possibility of stopPropagation)
{ capture: true }
);
}
}
// node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js
function without_reactive_context(fn) {
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
return fn();
} finally {
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
function listen_to_event_and_reset_event(element2, event2, handler, on_reset = handler) {
element2.addEventListener(event2, () => without_reactive_context(handler));
const prev = element2.__on_r;
if (prev) {
element2.__on_r = () => {
prev();
on_reset(true);
};
} else {
element2.__on_r = () => on_reset(true);
}
add_form_reset_listener();
}
// node_modules/svelte/src/internal/client/reactivity/effects.js
function validate_effect(rune) {
if (active_effect === null) {
if (active_reaction === null) {
effect_orphan(rune);
}
effect_in_unowned_derived();
}
if (is_destroying_effect) {
effect_in_teardown(rune);
}
}
function push_effect(effect2, parent_effect) {
var parent_last = parent_effect.last;
if (parent_last === null) {
parent_effect.last = parent_effect.first = effect2;
} else {
parent_last.next = effect2;
effect2.prev = parent_last;
parent_effect.last = effect2;
}
}
function create_effect(type, fn, sync) {
var parent = active_effect;
if (dev_fallback_default) {
while (parent !== null && (parent.f & EAGER_EFFECT) !== 0) {
parent = parent.parent;
}
}
if (parent !== null && (parent.f & INERT) !== 0) {
type |= INERT;
}
var effect2 = {
ctx: component_context,
deps: null,
nodes: null,
f: type | DIRTY | CONNECTED,
first: null,
fn,
last: null,
next: null,
parent,
b: parent && parent.b,
prev: null,
teardown: null,
wv: 0,
ac: null
};
if (dev_fallback_default) {
effect2.component_function = dev_current_component_function;
}
if (sync) {
try {
update_effect(effect2);
effect2.f |= EFFECT_RAN;
} catch (e2) {
destroy_effect(effect2);
throw e2;
}
} else if (fn !== null) {
schedule_effect(effect2);
}
var e = effect2;
if (sync && e.deps === null && e.teardown === null && e.nodes === null && e.first === e.last && // either `null`, or a singular child
(e.f & EFFECT_PRESERVED) === 0) {
e = e.first;
if ((type & BLOCK_EFFECT) !== 0 && (type & EFFECT_TRANSPARENT) !== 0 && e !== null) {
e.f |= EFFECT_TRANSPARENT;
}
}
if (e !== null) {
e.parent = parent;
if (parent !== null) {
push_effect(e, parent);
}
if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0 && (type & ROOT_EFFECT) === 0) {
var derived2 = (
/** @type {Derived} */
active_reaction
);
(derived2.effects ??= []).push(e);
}
}
return effect2;
}
function effect_tracking() {
return active_reaction !== null && !untracking;
}
function teardown(fn) {
const effect2 = create_effect(RENDER_EFFECT, null, false);
set_signal_status(effect2, CLEAN);
effect2.teardown = fn;
return effect2;
}
function user_effect(fn) {
validate_effect("$effect");
if (dev_fallback_default) {
define_property(fn, "name", {
value: "$effect"
});
}
var flags2 = (
/** @type {Effect} */
active_effect.f
);
var defer = !active_reaction && (flags2 & BRANCH_EFFECT) !== 0 && (flags2 & EFFECT_RAN) === 0;
if (defer) {
var context = (
/** @type {ComponentContext} */
component_context
);
(context.e ??= []).push(fn);
} else {
return create_user_effect(fn);
}
}
function create_user_effect(fn) {
return create_effect(EFFECT | USER_EFFECT, fn, false);
}
function effect_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);
return () => {
destroy_effect(effect2);
};
}
function component_root(fn) {
Batch.ensure();
const effect2 = create_effect(ROOT_EFFECT | EFFECT_PRESERVED, fn, true);
return (options = {}) => {
return new Promise((fulfil) => {
if (options.outro) {
pause_effect(effect2, () => {
destroy_effect(effect2);
fulfil(void 0);
});
} else {
destroy_effect(effect2);
fulfil(void 0);
}
});
};
}
function effect(fn) {
return create_effect(EFFECT, fn, false);
}
function async_effect(fn) {
return create_effect(ASYNC | EFFECT_PRESERVED, fn, true);
}
function render_effect(fn, flags2 = 0) {
return create_effect(RENDER_EFFECT | flags2, fn, true);
}
function template_effect(fn, sync = [], async2 = [], blockers = []) {
flatten(blockers, sync, async2, (values) => {
create_effect(RENDER_EFFECT, () => fn(...values.map(get)), true);
});
}
function block(fn, flags2 = 0) {
var effect2 = create_effect(BLOCK_EFFECT | flags2, fn, true);
if (dev_fallback_default) {
effect2.dev_stack = dev_stack;
}
return effect2;
}
function branch(fn) {
return create_effect(BRANCH_EFFECT | EFFECT_PRESERVED, fn, true);
}
function execute_effect_teardown(effect2) {
var teardown2 = effect2.teardown;
if (teardown2 !== null) {
const previously_destroying_effect = is_destroying_effect;
const previous_reaction = active_reaction;
set_is_destroying_effect(true);
set_active_reaction(null);
try {
teardown2.call(null);
} finally {
set_is_destroying_effect(previously_destroying_effect);
set_active_reaction(previous_reaction);
}
}
}
function destroy_effect_children(signal, remove_dom = false) {
var effect2 = signal.first;
signal.first = signal.last = null;
while (effect2 !== null) {
const controller = effect2.ac;
if (controller !== null) {
without_reactive_context(() => {
controller.abort(STALE_REACTION);
});
}
var next2 = effect2.next;
if ((effect2.f & ROOT_EFFECT) !== 0) {
effect2.parent = null;
} else {
destroy_effect(effect2, remove_dom);
}
effect2 = next2;
}
}
function destroy_block_effect_children(signal) {
var effect2 = signal.first;
while (effect2 !== null) {
var next2 = effect2.next;
if ((effect2.f & BRANCH_EFFECT) === 0) {
destroy_effect(effect2);
}
effect2 = next2;
}
}
function destroy_effect(effect2, remove_dom = true) {
var removed = false;
if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes !== null && effect2.nodes.end !== null) {
remove_effect_dom(
effect2.nodes.start,
/** @type {TemplateNode} */
effect2.nodes.end
);
removed = true;
}
destroy_effect_children(effect2, remove_dom && !removed);
remove_reactions(effect2, 0);
set_signal_status(effect2, DESTROYED);
var transitions = effect2.nodes && effect2.nodes.t;
if (transitions !== null) {
for (const transition2 of transitions) {
transition2.stop();
}
}
execute_effect_teardown(effect2);
var parent = effect2.parent;
if (parent !== null && parent.first !== null) {
unlink_effect(effect2);
}
if (dev_fallback_default) {
effect2.component_function = null;
}
effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.fn = effect2.nodes = effect2.ac = null;
}
function remove_effect_dom(node, end) {
while (node !== null) {
var next2 = node === end ? null : get_next_sibling(node);
node.remove();
node = next2;
}
}
function unlink_effect(effect2) {
var parent = effect2.parent;
var prev = effect2.prev;
var next2 = effect2.next;
if (prev !== null) prev.next = next2;
if (next2 !== null) next2.prev = prev;
if (parent !== null) {
if (parent.first === effect2) parent.first = next2;
if (parent.last === effect2) parent.last = prev;
}
}
function pause_effect(effect2, callback, destroy = true) {
var transitions = [];
pause_children(effect2, transitions, true);
var fn = () => {
if (destroy) destroy_effect(effect2);
if (callback) callback();
};
var remaining = transitions.length;
if (remaining > 0) {
var check = () => --remaining || fn();
for (var transition2 of transitions) {
transition2.out(check);
}
} else {
fn();
}
}
function pause_children(effect2, transitions, local) {
if ((effect2.f & INERT) !== 0) return;
effect2.f ^= INERT;
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition2 of t) {
if (transition2.is_global || local) {
transitions.push(transition2);
}
}
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || // If this is a branch effect without a block effect parent,
// it means the parent block effect was pruned. In that case,
// transparency information was transferred to the branch effect.
(child2.f & BRANCH_EFFECT) !== 0 && (effect2.f & BLOCK_EFFECT) !== 0;
pause_children(child2, transitions, transparent ? local : false);
child2 = sibling2;
}
}
function resume_effect(effect2) {
resume_children(effect2, true);
}
function resume_children(effect2, local) {
if ((effect2.f & INERT) === 0) return;
effect2.f ^= INERT;
if ((effect2.f & CLEAN) === 0) {
set_signal_status(effect2, DIRTY);
schedule_effect(effect2);
}
var child2 = effect2.first;
while (child2 !== null) {
var sibling2 = child2.next;
var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
resume_children(child2, transparent ? local : false);
child2 = sibling2;
}
var t = effect2.nodes && effect2.nodes.t;
if (t !== null) {
for (const transition2 of t) {
if (transition2.is_global || local) {
transition2.in();
}
}
}
}
function move_effect(effect2, fragment) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
while (node !== null) {
var next2 = node === end ? null : get_next_sibling(node);
fragment.append(node);
node = next2;
}
}
// node_modules/svelte/src/internal/client/legacy.js
var captured_signals = null;
// node_modules/svelte/src/internal/client/runtime.js
var is_updating_effect = false;
function set_is_updating_effect(value) {
is_updating_effect = value;
}
var is_destroying_effect = false;
function set_is_destroying_effect(value) {
is_destroying_effect = value;
}
var active_reaction = null;
var untracking = false;
function set_active_reaction(reaction) {
active_reaction = reaction;
}
var active_effect = null;
function set_active_effect(effect2) {
active_effect = effect2;
}
var current_sources = null;
function push_reaction_value(value) {
if (active_reaction !== null && (!async_mode_flag || (active_reaction.f & DERIVED) !== 0)) {
if (current_sources === null) {
current_sources = [value];
} else {
current_sources.push(value);
}
}
}
var new_deps = null;
var skipped_deps = 0;
var untracked_writes = null;
function set_untracked_writes(value) {
untracked_writes = value;
}
var write_version = 1;
var read_version = 0;
var update_version = read_version;
function set_update_version(value) {
update_version = value;
}
function increment_write_version() {
return ++write_version;
}
function is_dirty(reaction) {
var flags2 = reaction.f;
if ((flags2 & DIRTY) !== 0) {
return true;
}
if (flags2 & DERIVED) {
reaction.f &= ~WAS_MARKED;
}
if ((flags2 & MAYBE_DIRTY) !== 0) {
var dependencies = reaction.deps;
if (dependencies !== null) {
var length = dependencies.length;
for (var i = 0; i < length; i++) {
var dependency = dependencies[i];
if (is_dirty(
/** @type {Derived} */
dependency
)) {
update_derived(
/** @type {Derived} */
dependency
);
}
if (dependency.wv > reaction.wv) {
return true;
}
}
}
if ((flags2 & CONNECTED) !== 0 && // During time traveling we don't want to reset the status so that
// traversal of the graph in the other batches still happens
batch_values === null) {
set_signal_status(reaction, CLEAN);
}
}
return false;
}
function schedule_possible_effect_self_invalidation(signal, effect2, root6 = true) {
var reactions = signal.reactions;
if (reactions === null) return;
if (!async_mode_flag && current_sources?.includes(signal)) {
return;
}
for (var i = 0; i < reactions.length; i++) {
var reaction = reactions[i];
if ((reaction.f & DERIVED) !== 0) {
schedule_possible_effect_self_invalidation(
/** @type {Derived} */
reaction,
effect2,
false
);
} else if (effect2 === reaction) {
if (root6) {
set_signal_status(reaction, DIRTY);
} else if ((reaction.f & CLEAN) !== 0) {
set_signal_status(reaction, MAYBE_DIRTY);
}
schedule_effect(
/** @type {Effect} */
reaction
);
}
}
}
function update_reaction(reaction) {
var previous_deps = new_deps;
var previous_skipped_deps = skipped_deps;
var previous_untracked_writes = untracked_writes;
var previous_reaction = active_reaction;
var previous_sources = current_sources;
var previous_component_context = component_context;
var previous_untracking = untracking;
var previous_update_version = update_version;
var flags2 = reaction.f;
new_deps = /** @type {null | Value[]} */
null;
skipped_deps = 0;
untracked_writes = null;
active_reaction = (flags2 & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
current_sources = null;
set_component_context(reaction.ctx);
untracking = false;
update_version = ++read_version;
if (reaction.ac !== null) {
without_reactive_context(() => {
reaction.ac.abort(STALE_REACTION);
});
reaction.ac = null;
}
try {
reaction.f |= REACTION_IS_UPDATING;
var fn = (
/** @type {Function} */
reaction.fn
);
var result = fn();
var deps = reaction.deps;
if (new_deps !== null) {
var i;
remove_reactions(reaction, skipped_deps);
if (deps !== null && skipped_deps > 0) {
deps.length = skipped_deps + new_deps.length;
for (i = 0; i < new_deps.length; i++) {
deps[skipped_deps + i] = new_deps[i];
}
} else {
reaction.deps = deps = new_deps;
}
if (effect_tracking() && (reaction.f & CONNECTED) !== 0) {
for (i = skipped_deps; i < deps.length; i++) {
(deps[i].reactions ??= []).push(reaction);
}
}
} else if (deps !== null && skipped_deps < deps.length) {
remove_reactions(reaction, skipped_deps);
deps.length = skipped_deps;
}
if (is_runes() && untracked_writes !== null && !untracking && deps !== null && (reaction.f & (DERIVED | MAYBE_DIRTY | DIRTY)) === 0) {
for (i = 0; i < /** @type {Source[]} */
untracked_writes.length; i++) {
schedule_possible_effect_self_invalidation(
untracked_writes[i],
/** @type {Effect} */
reaction
);
}
}
if (previous_reaction !== null && previous_reaction !== reaction) {
read_version++;
if (untracked_writes !== null) {
if (previous_untracked_writes === null) {
previous_untracked_writes = untracked_writes;
} else {
previous_untracked_writes.push(.../** @type {Source[]} */
untracked_writes);
}
}
}
if ((reaction.f & ERROR_VALUE) !== 0) {
reaction.f ^= ERROR_VALUE;
}
return result;
} catch (error) {
return handle_error(error);
} finally {
reaction.f ^= REACTION_IS_UPDATING;
new_deps = previous_deps;
skipped_deps = previous_skipped_deps;
untracked_writes = previous_untracked_writes;
active_reaction = previous_reaction;
current_sources = previous_sources;
set_component_context(previous_component_context);
untracking = previous_untracking;
update_version = previous_update_version;
}
}
function remove_reaction(signal, dependency) {
let reactions = dependency.reactions;
if (reactions !== null) {
var index2 = index_of.call(reactions, signal);
if (index2 !== -1) {
var new_length = reactions.length - 1;
if (new_length === 0) {
reactions = dependency.reactions = null;
} else {
reactions[index2] = reactions[new_length];
reactions.pop();
}
}
}
if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
// to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
// allows us to skip the expensive work of disconnecting and immediately reconnecting it
(new_deps === null || !new_deps.includes(dependency))) {
set_signal_status(dependency, MAYBE_DIRTY);
if ((dependency.f & CONNECTED) !== 0) {
dependency.f ^= CONNECTED;
dependency.f &= ~WAS_MARKED;
}
destroy_derived_effects(
/** @type {Derived} **/
dependency
);
remove_reactions(
/** @type {Derived} **/
dependency,
0
);
}
}
function remove_reactions(signal, start_index) {
var dependencies = signal.deps;
if (dependencies === null) return;
for (var i = start_index; i < dependencies.length; i++) {
remove_reaction(signal, dependencies[i]);
}
}
function update_effect(effect2) {
var flags2 = effect2.f;
if ((flags2 & DESTROYED) !== 0) {
return;
}
set_signal_status(effect2, CLEAN);
var previous_effect = active_effect;
var was_updating_effect = is_updating_effect;
active_effect = effect2;
is_updating_effect = true;
if (dev_fallback_default) {
var previous_component_fn = dev_current_component_function;
set_dev_current_component_function(effect2.component_function);
var previous_stack = (
/** @type {any} */
dev_stack
);
set_dev_stack(effect2.dev_stack ?? dev_stack);
}
try {
if ((flags2 & (BLOCK_EFFECT | MANAGED_EFFECT)) !== 0) {
destroy_block_effect_children(effect2);
} else {
destroy_effect_children(effect2);
}
execute_effect_teardown(effect2);
var teardown2 = update_reaction(effect2);
effect2.teardown = typeof teardown2 === "function" ? teardown2 : null;
effect2.wv = write_version;
if (dev_fallback_default && tracing_mode_flag && (effect2.f & DIRTY) !== 0 && effect2.deps !== null) {
for (var dep of effect2.deps) {
if (dep.set_during_effect) {
dep.wv = increment_write_version();
dep.set_during_effect = false;
}
}
}
} finally {
is_updating_effect = was_updating_effect;
active_effect = previous_effect;
if (dev_fallback_default) {
set_dev_current_component_function(previous_component_fn);
set_dev_stack(previous_stack);
}
}
}
async function tick() {
if (async_mode_flag) {
return new Promise((f) => {
requestAnimationFrame(() => f());
setTimeout(() => f());
});
}
await Promise.resolve();
flushSync();
}
function get(signal) {
var flags2 = signal.f;
var is_derived = (flags2 & DERIVED) !== 0;
captured_signals?.add(signal);
if (active_reaction !== null && !untracking) {
var destroyed = active_effect !== null && (active_effect.f & DESTROYED) !== 0;
if (!destroyed && !current_sources?.includes(signal)) {
var deps = active_reaction.deps;
if ((active_reaction.f & REACTION_IS_UPDATING) !== 0) {
if (signal.rv < read_version) {
signal.rv = read_version;
if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
skipped_deps++;
} else if (new_deps === null) {
new_deps = [signal];
} else if (!new_deps.includes(signal)) {
new_deps.push(signal);
}
}
} else {
(active_reaction.deps ??= []).push(signal);
var reactions = signal.reactions;
if (reactions === null) {
signal.reactions = [active_reaction];
} else if (!reactions.includes(active_reaction)) {
reactions.push(active_reaction);
}
}
}
}
if (dev_fallback_default) {
recent_async_deriveds.delete(signal);
if (tracing_mode_flag && !untracking && tracing_expressions !== null && active_reaction !== null && tracing_expressions.reaction === active_reaction) {
if (signal.trace) {
signal.trace();
} else {
var trace2 = get_error("traced at");
if (trace2) {
var entry = tracing_expressions.entries.get(signal);
if (entry === void 0) {
entry = { traces: [] };
tracing_expressions.entries.set(signal, entry);
}
var last = entry.traces[entry.traces.length - 1];
if (trace2.stack !== last?.stack) {
entry.traces.push(trace2);
}
}
}
}
}
if (is_destroying_effect) {
if (old_values.has(signal)) {
return old_values.get(signal);
}
if (is_derived) {
var derived2 = (
/** @type {Derived} */
signal
);
var value = derived2.v;
if ((derived2.f & CLEAN) === 0 && derived2.reactions !== null || depends_on_old_values(derived2)) {
value = execute_derived(derived2);
}
old_values.set(derived2, value);
return value;
}
} else if (is_derived && (!batch_values?.has(signal) || current_batch?.is_fork && !effect_tracking())) {
derived2 = /** @type {Derived} */
signal;
if (is_dirty(derived2)) {
update_derived(derived2);
}
if (is_updating_effect && effect_tracking() && (derived2.f & CONNECTED) === 0) {
reconnect(derived2);
}
}
if (batch_values?.has(signal)) {
return batch_values.get(signal);
}
if ((signal.f & ERROR_VALUE) !== 0) {
throw signal.v;
}
return signal.v;
}
function reconnect(derived2) {
if (derived2.deps === null) return;
derived2.f ^= CONNECTED;
for (const dep of derived2.deps) {
(dep.reactions ??= []).push(derived2);
if ((dep.f & DERIVED) !== 0 && (dep.f & CONNECTED) === 0) {
reconnect(
/** @type {Derived} */
dep
);
}
}
}
function depends_on_old_values(derived2) {
if (derived2.v === UNINITIALIZED) return true;
if (derived2.deps === null) return false;
for (const dep of derived2.deps) {
if (old_values.has(dep)) {
return true;
}
if ((dep.f & DERIVED) !== 0 && depends_on_old_values(
/** @type {Derived} */
dep
)) {
return true;
}
}
return false;
}
function untrack(fn) {
var previous_untracking = untracking;
try {
untracking = true;
return fn();
} finally {
untracking = previous_untracking;
}
}
var STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);
function set_signal_status(signal, status) {
signal.f = signal.f & STATUS_MASK | status;
}
// node_modules/svelte/src/utils.js
var DOM_BOOLEAN_ATTRIBUTES = [
"allowfullscreen",
"async",
"autofocus",
"autoplay",
"checked",
"controls",
"default",
"disabled",
"formnovalidate",
"indeterminate",
"inert",
"ismap",
"loop",
"multiple",
"muted",
"nomodule",
"novalidate",
"open",
"playsinline",
"readonly",
"required",
"reversed",
"seamless",
"selected",
"webkitdirectory",
"defer",
"disablepictureinpicture",
"disableremoteplayback"
];
var DOM_PROPERTIES = [
...DOM_BOOLEAN_ATTRIBUTES,
"formNoValidate",
"isMap",
"noModule",
"playsInline",
"readOnly",
"value",
"volume",
"defaultValue",
"defaultChecked",
"srcObject",
"noValidate",
"allowFullscreen",
"disablePictureInPicture",
"disableRemotePlayback"
];
var PASSIVE_EVENTS = ["touchstart", "touchmove"];
function is_passive_event(name) {
return PASSIVE_EVENTS.includes(name);
}
var STATE_CREATION_RUNES = (
/** @type {const} */
[
"$state",
"$state.raw",
"$derived",
"$derived.by"
]
);
var RUNES = (
/** @type {const} */
[
...STATE_CREATION_RUNES,
"$state.eager",
"$state.snapshot",
"$props",
"$props.id",
"$bindable",
"$effect",
"$effect.pre",
"$effect.tracking",
"$effect.root",
"$effect.pending",
"$inspect",
"$inspect().with",
"$inspect.trace",
"$host"
]
);
// node_modules/svelte/src/internal/client/dev/css.js
var all_styles = /* @__PURE__ */ new Map();
function register_style(hash2, style) {
var styles = all_styles.get(hash2);
if (!styles) {
styles = /* @__PURE__ */ new Set();
all_styles.set(hash2, styles);
}
styles.add(style);
}
// node_modules/svelte/src/internal/client/dom/elements/events.js
var all_registered_events = /* @__PURE__ */ new Set();
var root_event_handles = /* @__PURE__ */ new Set();
function create_event(event_name, dom, handler, options = {}) {
function target_handler(event2) {
if (!options.capture) {
handle_event_propagation.call(dom, event2);
}
if (!event2.cancelBubble) {
return without_reactive_context(() => {
return handler?.call(this, event2);
});
}
}
if (event_name.startsWith("pointer") || event_name.startsWith("touch") || event_name === "wheel") {
queue_micro_task(() => {
dom.addEventListener(event_name, target_handler, options);
});
} else {
dom.addEventListener(event_name, target_handler, options);
}
return target_handler;
}
function event(event_name, dom, handler, capture2, passive2) {
var options = { capture: capture2, passive: passive2 };
var target_handler = create_event(event_name, dom, handler, options);
if (dom === document.body || // @ts-ignore
dom === window || // @ts-ignore
dom === document || // Firefox has quirky behavior, it can happen that we still get "canplay" events when the element is already removed
dom instanceof HTMLMediaElement) {
teardown(() => {
dom.removeEventListener(event_name, target_handler, options);
});
}
}
function delegate(events) {
for (var i = 0; i < events.length; i++) {
all_registered_events.add(events[i]);
}
for (var fn of root_event_handles) {
fn(events);
}
}
var last_propagated_event = null;
function handle_event_propagation(event2) {
var handler_element = this;
var owner_document = (
/** @type {Node} */
handler_element.ownerDocument
);
var event_name = event2.type;
var path = event2.composedPath?.() || [];
var current_target = (
/** @type {null | Element} */
path[0] || event2.target
);
last_propagated_event = event2;
var path_idx = 0;
var handled_at = last_propagated_event === event2 && event2.__root;
if (handled_at) {
var at_idx = path.indexOf(handled_at);
if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
window)) {
event2.__root = handler_element;
return;
}
var handler_idx = path.indexOf(handler_element);
if (handler_idx === -1) {
return;
}
if (at_idx <= handler_idx) {
path_idx = at_idx;
}
}
current_target = /** @type {Element} */
path[path_idx] || event2.target;
if (current_target === handler_element) return;
define_property(event2, "currentTarget", {
configurable: true,
get() {
return current_target || owner_document;
}
});
var previous_reaction = active_reaction;
var previous_effect = active_effect;
set_active_reaction(null);
set_active_effect(null);
try {
var throw_error;
var other_errors = [];
while (current_target !== null) {
var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
current_target.host || null;
try {
var delegated = current_target["__" + event_name];
if (delegated != null && (!/** @type {any} */
current_target.disabled || // DOM could've been updated already by the time this is reached, so we check this as well
// -> the target could not have been disabled because it emits the event in the first place
event2.target === current_target)) {
delegated.call(current_target, event2);
}
} catch (error) {
if (throw_error) {
other_errors.push(error);
} else {
throw_error = error;
}
}
if (event2.cancelBubble || parent_element === handler_element || parent_element === null) {
break;
}
current_target = parent_element;
}
if (throw_error) {
for (let error of other_errors) {
queueMicrotask(() => {
throw error;
});
}
throw throw_error;
}
} finally {
event2.__root = handler_element;
delete event2.currentTarget;
set_active_reaction(previous_reaction);
set_active_effect(previous_effect);
}
}
// node_modules/svelte/src/internal/client/dom/reconciler.js
function create_fragment_from_html(html2) {
var elem = document.createElement("template");
elem.innerHTML = html2.replaceAll("<!>", "<!---->");
return elem.content;
}
// node_modules/svelte/src/internal/client/dom/template.js
function assign_nodes(start, end) {
var effect2 = (
/** @type {Effect} */
active_effect
);
if (effect2.nodes === null) {
effect2.nodes = { start, end, a: null, t: null };
}
}
// @__NO_SIDE_EFFECTS__
function from_html(content, flags2) {
var is_fragment = (flags2 & TEMPLATE_FRAGMENT) !== 0;
var use_import_node = (flags2 & TEMPLATE_USE_IMPORT_NODE) !== 0;
var node;
var has_start = !content.startsWith("<!>");
return () => {
if (hydrating) {
assign_nodes(hydrate_node, null);
return hydrate_node;
}
if (node === void 0) {
node = create_fragment_from_html(has_start ? content : "<!>" + content);
if (!is_fragment) node = /** @type {TemplateNode} */
get_first_child(node);
}
var clone = (
/** @type {TemplateNode} */
use_import_node || is_firefox ? document.importNode(node, true) : node.cloneNode(true)
);
if (is_fragment) {
var start = (
/** @type {TemplateNode} */
get_first_child(clone)
);
var end = (
/** @type {TemplateNode} */
clone.lastChild
);
assign_nodes(start, end);
} else {
assign_nodes(clone, clone);
}
return clone;
};
}
function append(anchor, dom) {
if (hydrating) {
var effect2 = (
/** @type {Effect & { nodes: EffectNodes }} */
active_effect
);
if ((effect2.f & EFFECT_RAN) === 0 || effect2.nodes.end === null) {
effect2.nodes.end = hydrate_node;
}
hydrate_next();
return;
}
if (anchor === null) {
return;
}
anchor.before(
/** @type {Node} */
dom
);
}
// node_modules/svelte/src/internal/client/render.js
var should_intro = true;
function set_text(text2, value) {
var str = value == null ? "" : typeof value === "object" ? value + "" : value;
if (str !== (text2.__t ??= text2.nodeValue)) {
text2.__t = str;
text2.nodeValue = str + "";
}
}
function mount(component2, options) {
return _mount(component2, options);
}
function hydrate(component2, options) {
init_operations();
options.intro = options.intro ?? false;
const target = options.target;
const was_hydrating = hydrating;
const previous_hydrate_node = hydrate_node;
try {
var anchor = get_first_child(target);
while (anchor && (anchor.nodeType !== COMMENT_NODE || /** @type {Comment} */
anchor.data !== HYDRATION_START)) {
anchor = get_next_sibling(anchor);
}
if (!anchor) {
throw HYDRATION_ERROR;
}
set_hydrating(true);
set_hydrate_node(
/** @type {Comment} */
anchor
);
const instance = _mount(component2, { ...options, anchor });
set_hydrating(false);
return (
/** @type {Exports} */
instance
);
} catch (error) {
if (error instanceof Error && error.message.split("\n").some((line) => line.startsWith("https://svelte.dev/e/"))) {
throw error;
}
if (error !== HYDRATION_ERROR) {
console.warn("Failed to hydrate: ", error);
}
if (options.recover === false) {
hydration_failed();
}
init_operations();
clear_text_content(target);
set_hydrating(false);
return mount(component2, options);
} finally {
set_hydrating(was_hydrating);
set_hydrate_node(previous_hydrate_node);
}
}
var document_listeners = /* @__PURE__ */ new Map();
function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {
init_operations();
var registered_events = /* @__PURE__ */ new Set();
var event_handle = (events2) => {
for (var i = 0; i < events2.length; i++) {
var event_name = events2[i];
if (registered_events.has(event_name)) continue;
registered_events.add(event_name);
var passive2 = is_passive_event(event_name);
target.addEventListener(event_name, handle_event_propagation, { passive: passive2 });
var n = document_listeners.get(event_name);
if (n === void 0) {
document.addEventListener(event_name, handle_event_propagation, { passive: passive2 });
document_listeners.set(event_name, 1);
} else {
document_listeners.set(event_name, n + 1);
}
}
};
event_handle(array_from(all_registered_events));
root_event_handles.add(event_handle);
var component2 = void 0;
var unmount2 = component_root(() => {
var anchor_node = anchor ?? target.appendChild(create_text());
boundary(
/** @type {TemplateNode} */
anchor_node,
{
pending: () => {
}
},
(anchor_node2) => {
if (context) {
push({});
var ctx = (
/** @type {ComponentContext} */
component_context
);
ctx.c = context;
}
if (events) {
props.$$events = events;
}
if (hydrating) {
assign_nodes(
/** @type {TemplateNode} */
anchor_node2,
null
);
}
should_intro = intro;
component2 = Component(anchor_node2, props) || {};
should_intro = true;
if (hydrating) {
active_effect.nodes.end = hydrate_node;
if (hydrate_node === null || hydrate_node.nodeType !== COMMENT_NODE || /** @type {Comment} */
hydrate_node.data !== HYDRATION_END) {
hydration_mismatch();
throw HYDRATION_ERROR;
}
}
if (context) {
pop();
}
}
);
return () => {
for (var event_name of registered_events) {
target.removeEventListener(event_name, handle_event_propagation);
var n = (
/** @type {number} */
document_listeners.get(event_name)
);
if (--n === 0) {
document.removeEventListener(event_name, handle_event_propagation);
document_listeners.delete(event_name);
} else {
document_listeners.set(event_name, n);
}
}
root_event_handles.delete(event_handle);
if (anchor_node !== anchor) {
anchor_node.parentNode?.removeChild(anchor_node);
}
};
});
mounted_components.set(component2, unmount2);
return component2;
}
var mounted_components = /* @__PURE__ */ new WeakMap();
function unmount(component2, options) {
const fn = mounted_components.get(component2);
if (fn) {
mounted_components.delete(component2);
return fn(options);
}
if (dev_fallback_default) {
if (STATE_SYMBOL in component2) {
state_proxy_unmount();
} else {
lifecycle_double_unmount();
}
}
return Promise.resolve();
}
// node_modules/svelte/src/internal/client/dom/blocks/each.js
function index(_, i) {
return i;
}
function pause_effects(state2, to_destroy, controlled_anchor) {
var transitions = [];
var length = to_destroy.length;
var group;
var remaining = to_destroy.length;
for (var i = 0; i < length; i++) {
let effect2 = to_destroy[i];
pause_effect(
effect2,
() => {
if (group) {
group.pending.delete(effect2);
group.done.add(effect2);
if (group.pending.size === 0) {
var groups = (
/** @type {Set<EachOutroGroup>} */
state2.outrogroups
);
destroy_effects(array_from(group.done));
groups.delete(group);
if (groups.size === 0) {
state2.outrogroups = null;
}
}
} else {
remaining -= 1;
}
},
false
);
}
if (remaining === 0) {
var fast_path = transitions.length === 0 && controlled_anchor !== null;
if (fast_path) {
var anchor = (
/** @type {Element} */
controlled_anchor
);
var parent_node = (
/** @type {Element} */
anchor.parentNode
);
clear_text_content(parent_node);
parent_node.append(anchor);
state2.items.clear();
}
destroy_effects(to_destroy, !fast_path);
} else {
group = {
pending: new Set(to_destroy),
done: /* @__PURE__ */ new Set()
};
(state2.outrogroups ??= /* @__PURE__ */ new Set()).add(group);
}
}
function destroy_effects(to_destroy, remove_dom = true) {
for (var i = 0; i < to_destroy.length; i++) {
destroy_effect(to_destroy[i], remove_dom);
}
}
var offscreen_anchor;
function each(node, flags2, get_collection, get_key, render_fn, fallback_fn = null) {
var anchor = node;
var items = /* @__PURE__ */ new Map();
var is_controlled = (flags2 & EACH_IS_CONTROLLED) !== 0;
if (is_controlled) {
var parent_node = (
/** @type {Element} */
node
);
anchor = hydrating ? set_hydrate_node(get_first_child(parent_node)) : parent_node.appendChild(create_text());
}
if (hydrating) {
hydrate_next();
}
var fallback2 = null;
var each_array = derived_safe_equal(() => {
var collection = get_collection();
return is_array(collection) ? collection : collection == null ? [] : array_from(collection);
});
var array;
var first_run = true;
function commit() {
state2.fallback = fallback2;
reconcile(state2, array, anchor, flags2, get_key);
if (fallback2 !== null) {
if (array.length === 0) {
if ((fallback2.f & EFFECT_OFFSCREEN) === 0) {
resume_effect(fallback2);
} else {
fallback2.f ^= EFFECT_OFFSCREEN;
move(fallback2, null, anchor);
}
} else {
pause_effect(fallback2, () => {
fallback2 = null;
});
}
}
}
var effect2 = block(() => {
array = /** @type {V[]} */
get(each_array);
var length = array.length;
let mismatch = false;
if (hydrating) {
var is_else = read_hydration_instruction(anchor) === HYDRATION_START_ELSE;
if (is_else !== (length === 0)) {
anchor = skip_nodes();
set_hydrate_node(anchor);
set_hydrating(false);
mismatch = true;
}
}
var keys = /* @__PURE__ */ new Set();
var batch = (
/** @type {Batch} */
current_batch
);
var defer = should_defer_append();
for (var index2 = 0; index2 < length; index2 += 1) {
if (hydrating && hydrate_node.nodeType === COMMENT_NODE && /** @type {Comment} */
hydrate_node.data === HYDRATION_END) {
anchor = /** @type {Comment} */
hydrate_node;
mismatch = true;
set_hydrating(false);
}
var value = array[index2];
var key2 = get_key(value, index2);
var item = first_run ? null : items.get(key2);
if (item) {
if (item.v) internal_set(item.v, value);
if (item.i) internal_set(item.i, index2);
if (defer) {
batch.skipped_effects.delete(item.e);
}
} else {
item = create_item(
items,
first_run ? anchor : offscreen_anchor ??= create_text(),
value,
key2,
index2,
render_fn,
flags2,
get_collection
);
if (!first_run) {
item.e.f |= EFFECT_OFFSCREEN;
}
items.set(key2, item);
}
keys.add(key2);
}
if (length === 0 && fallback_fn && !fallback2) {
if (first_run) {
fallback2 = branch(() => fallback_fn(anchor));
} else {
fallback2 = branch(() => fallback_fn(offscreen_anchor ??= create_text()));
fallback2.f |= EFFECT_OFFSCREEN;
}
}
if (hydrating && length > 0) {
set_hydrate_node(skip_nodes());
}
if (!first_run) {
if (defer) {
for (const [key3, item2] of items) {
if (!keys.has(key3)) {
batch.skipped_effects.add(item2.e);
}
}
batch.oncommit(commit);
batch.ondiscard(() => {
});
} else {
commit();
}
}
if (mismatch) {
set_hydrating(true);
}
get(each_array);
});
var state2 = { effect: effect2, flags: flags2, items, outrogroups: null, fallback: fallback2 };
first_run = false;
if (hydrating) {
anchor = hydrate_node;
}
}
function reconcile(state2, array, anchor, flags2, get_key) {
var is_animated = (flags2 & EACH_IS_ANIMATED) !== 0;
var length = array.length;
var items = state2.items;
var current = state2.effect.first;
var seen;
var prev = null;
var to_animate;
var matched = [];
var stashed = [];
var value;
var key2;
var effect2;
var i;
if (is_animated) {
for (i = 0; i < length; i += 1) {
value = array[i];
key2 = get_key(value, i);
effect2 = /** @type {EachItem} */
items.get(key2).e;
if ((effect2.f & EFFECT_OFFSCREEN) === 0) {
effect2.nodes?.a?.measure();
(to_animate ??= /* @__PURE__ */ new Set()).add(effect2);
}
}
}
for (i = 0; i < length; i += 1) {
value = array[i];
key2 = get_key(value, i);
effect2 = /** @type {EachItem} */
items.get(key2).e;
if (state2.outrogroups !== null) {
for (const group of state2.outrogroups) {
group.pending.delete(effect2);
group.done.delete(effect2);
}
}
if ((effect2.f & EFFECT_OFFSCREEN) !== 0) {
effect2.f ^= EFFECT_OFFSCREEN;
if (effect2 === current) {
move(effect2, null, anchor);
} else {
var next2 = prev ? prev.next : current;
if (effect2 === state2.effect.last) {
state2.effect.last = effect2.prev;
}
if (effect2.prev) effect2.prev.next = effect2.next;
if (effect2.next) effect2.next.prev = effect2.prev;
link(state2, prev, effect2);
link(state2, effect2, next2);
move(effect2, next2, anchor);
prev = effect2;
matched = [];
stashed = [];
current = prev.next;
continue;
}
}
if ((effect2.f & INERT) !== 0) {
resume_effect(effect2);
if (is_animated) {
effect2.nodes?.a?.unfix();
(to_animate ??= /* @__PURE__ */ new Set()).delete(effect2);
}
}
if (effect2 !== current) {
if (seen !== void 0 && seen.has(effect2)) {
if (matched.length < stashed.length) {
var start = stashed[0];
var j;
prev = start.prev;
var a = matched[0];
var b = matched[matched.length - 1];
for (j = 0; j < matched.length; j += 1) {
move(matched[j], start, anchor);
}
for (j = 0; j < stashed.length; j += 1) {
seen.delete(stashed[j]);
}
link(state2, a.prev, b.next);
link(state2, prev, a);
link(state2, b, start);
current = start;
prev = b;
i -= 1;
matched = [];
stashed = [];
} else {
seen.delete(effect2);
move(effect2, current, anchor);
link(state2, effect2.prev, effect2.next);
link(state2, effect2, prev === null ? state2.effect.first : prev.next);
link(state2, prev, effect2);
prev = effect2;
}
continue;
}
matched = [];
stashed = [];
while (current !== null && current !== effect2) {
(seen ??= /* @__PURE__ */ new Set()).add(current);
stashed.push(current);
current = current.next;
}
if (current === null) {
continue;
}
}
if ((effect2.f & EFFECT_OFFSCREEN) === 0) {
matched.push(effect2);
}
prev = effect2;
current = effect2.next;
}
if (state2.outrogroups !== null) {
for (const group of state2.outrogroups) {
if (group.pending.size === 0) {
destroy_effects(array_from(group.done));
state2.outrogroups?.delete(group);
}
}
if (state2.outrogroups.size === 0) {
state2.outrogroups = null;
}
}
if (current !== null || seen !== void 0) {
var to_destroy = [];
if (seen !== void 0) {
for (effect2 of seen) {
if ((effect2.f & INERT) === 0) {
to_destroy.push(effect2);
}
}
}
while (current !== null) {
if ((current.f & INERT) === 0 && current !== state2.fallback) {
to_destroy.push(current);
}
current = current.next;
}
var destroy_length = to_destroy.length;
if (destroy_length > 0) {
var controlled_anchor = (flags2 & EACH_IS_CONTROLLED) !== 0 && length === 0 ? anchor : null;
if (is_animated) {
for (i = 0; i < destroy_length; i += 1) {
to_destroy[i].nodes?.a?.measure();
}
for (i = 0; i < destroy_length; i += 1) {
to_destroy[i].nodes?.a?.fix();
}
}
pause_effects(state2, to_destroy, controlled_anchor);
}
}
if (is_animated) {
queue_micro_task(() => {
if (to_animate === void 0) return;
for (effect2 of to_animate) {
effect2.nodes?.a?.apply();
}
});
}
}
function create_item(items, anchor, value, key2, index2, render_fn, flags2, get_collection) {
var v = (flags2 & EACH_ITEM_REACTIVE) !== 0 ? (flags2 & EACH_ITEM_IMMUTABLE) === 0 ? mutable_source(value, false, false) : source(value) : null;
var i = (flags2 & EACH_INDEX_REACTIVE) !== 0 ? source(index2) : null;
if (dev_fallback_default && v) {
v.trace = () => {
get_collection()[i?.v ?? index2];
};
}
return {
v,
i,
e: branch(() => {
render_fn(anchor, v ?? value, i ?? index2, get_collection);
return () => {
items.delete(key2);
};
})
};
}
function move(effect2, next2, anchor) {
if (!effect2.nodes) return;
var node = effect2.nodes.start;
var end = effect2.nodes.end;
var dest = next2 && (next2.f & EFFECT_OFFSCREEN) === 0 ? (
/** @type {EffectNodes} */
next2.nodes.start
) : anchor;
while (node !== null) {
var next_node = (
/** @type {TemplateNode} */
get_next_sibling(node)
);
dest.before(node);
if (node === end) {
return;
}
node = next_node;
}
}
function link(state2, prev, next2) {
if (prev === null) {
state2.effect.first = next2;
} else {
prev.next = next2;
}
if (next2 === null) {
state2.effect.last = prev;
} else {
next2.prev = prev;
}
}
// node_modules/svelte/src/internal/client/dom/css.js
function append_styles(anchor, css) {
effect(() => {
var root6 = anchor.getRootNode();
var target = (
/** @type {ShadowRoot} */
root6.host ? (
/** @type {ShadowRoot} */
root6
) : (
/** @type {Document} */
root6.head ?? /** @type {Document} */
root6.ownerDocument.head
)
);
if (!target.querySelector("#" + css.hash)) {
const style = document.createElement("style");
style.id = css.hash;
style.textContent = css.code;
target.appendChild(style);
if (dev_fallback_default) {
register_style(css.hash, style);
}
}
});
}
// node_modules/svelte/src/internal/shared/attributes.js
var whitespace = [..." \n\r\f\xA0\v\uFEFF"];
function to_class(value, hash2, directives) {
var classname = value == null ? "" : "" + value;
if (hash2) {
classname = classname ? classname + " " + hash2 : hash2;
}
if (directives) {
for (var key2 in directives) {
if (directives[key2]) {
classname = classname ? classname + " " + key2 : key2;
} else if (classname.length) {
var len = key2.length;
var a = 0;
while ((a = classname.indexOf(key2, a)) >= 0) {
var b = a + len;
if ((a === 0 || whitespace.includes(classname[a - 1])) && (b === classname.length || whitespace.includes(classname[b]))) {
classname = (a === 0 ? "" : classname.substring(0, a)) + classname.substring(b + 1);
} else {
a = b;
}
}
}
}
}
return classname === "" ? null : classname;
}
// node_modules/svelte/src/internal/client/dom/elements/class.js
function set_class(dom, is_html, value, hash2, prev_classes, next_classes) {
var prev = dom.__className;
if (hydrating || prev !== value || prev === void 0) {
var next_class_name = to_class(value, hash2, next_classes);
if (!hydrating || next_class_name !== dom.getAttribute("class")) {
if (next_class_name == null) {
dom.removeAttribute("class");
} else if (is_html) {
dom.className = next_class_name;
} else {
dom.setAttribute("class", next_class_name);
}
}
dom.__className = value;
} else if (next_classes && prev_classes !== next_classes) {
for (var key2 in next_classes) {
var is_present = !!next_classes[key2];
if (prev_classes == null || is_present !== !!prev_classes[key2]) {
dom.classList.toggle(key2, is_present);
}
}
}
return next_classes;
}
// node_modules/svelte/src/internal/client/dom/elements/bindings/select.js
function select_option(select, value, mounting = false) {
if (select.multiple) {
if (value == void 0) {
return;
}
if (!is_array(value)) {
return select_multiple_invalid_value();
}
for (var option of select.options) {
option.selected = value.includes(get_option_value(option));
}
return;
}
for (option of select.options) {
var option_value = get_option_value(option);
if (is(option_value, value)) {
option.selected = true;
return;
}
}
if (!mounting || value !== void 0) {
select.selectedIndex = -1;
}
}
function init_select(select) {
var observer = new MutationObserver(() => {
select_option(select, select.__value);
});
observer.observe(select, {
// Listen to option element changes
childList: true,
subtree: true,
// because of <optgroup>
// Listen to option element value attribute changes
// (doesn't get notified of select value changes,
// because that property is not reflected as an attribute)
attributes: true,
attributeFilter: ["value"]
});
teardown(() => {
observer.disconnect();
});
}
function bind_select_value(select, get3, set2 = get3) {
var batches2 = /* @__PURE__ */ new WeakSet();
var mounting = true;
listen_to_event_and_reset_event(select, "change", (is_reset) => {
var query = is_reset ? "[selected]" : ":checked";
var value;
if (select.multiple) {
value = [].map.call(select.querySelectorAll(query), get_option_value);
} else {
var selected_option = select.querySelector(query) ?? // will fall back to first non-disabled option if no option is selected
select.querySelector("option:not([disabled])");
value = selected_option && get_option_value(selected_option);
}
set2(value);
if (current_batch !== null) {
batches2.add(current_batch);
}
});
effect(() => {
var value = get3();
if (select === document.activeElement) {
var batch = (
/** @type {Batch} */
previous_batch ?? current_batch
);
if (batches2.has(batch)) {
return;
}
}
select_option(select, value, mounting);
if (mounting && value === void 0) {
var selected_option = select.querySelector(":checked");
if (selected_option !== null) {
value = get_option_value(selected_option);
set2(value);
}
}
select.__value = value;
mounting = false;
});
init_select(select);
}
function get_option_value(option) {
if ("__value" in option) {
return option.__value;
} else {
return option.value;
}
}
// node_modules/svelte/src/internal/client/dom/elements/attributes.js
var CLASS = Symbol("class");
var STYLE = Symbol("style");
var IS_CUSTOM_ELEMENT = Symbol("is custom element");
var IS_HTML = Symbol("is html");
function remove_input_defaults(input) {
if (!hydrating) return;
var already_removed = false;
var remove_defaults = () => {
if (already_removed) return;
already_removed = true;
if (input.hasAttribute("value")) {
var value = input.value;
set_attribute2(input, "value", null);
input.value = value;
}
if (input.hasAttribute("checked")) {
var checked = input.checked;
set_attribute2(input, "checked", null);
input.checked = checked;
}
};
input.__on_r = remove_defaults;
queue_micro_task(remove_defaults);
add_form_reset_listener();
}
function set_checked(element2, checked) {
var attributes = get_attributes(element2);
if (attributes.checked === (attributes.checked = // treat null and undefined the same for the initial value
checked ?? void 0)) {
return;
}
element2.checked = checked;
}
function set_attribute2(element2, attribute, value, skip_warning) {
var attributes = get_attributes(element2);
if (hydrating) {
attributes[attribute] = element2.getAttribute(attribute);
if (attribute === "src" || attribute === "srcset" || attribute === "href" && element2.nodeName === "LINK") {
if (!skip_warning) {
check_src_in_dev_hydration(element2, attribute, value ?? "");
}
return;
}
}
if (attributes[attribute] === (attributes[attribute] = value)) return;
if (attribute === "loading") {
element2[LOADING_ATTR_SYMBOL] = value;
}
if (value == null) {
element2.removeAttribute(attribute);
} else if (typeof value !== "string" && get_setters(element2).includes(attribute)) {
element2[attribute] = value;
} else {
element2.setAttribute(attribute, value);
}
}
function get_attributes(element2) {
return (
/** @type {Record<string | symbol, unknown>} **/
// @ts-expect-error
element2.__attributes ??= {
[IS_CUSTOM_ELEMENT]: element2.nodeName.includes("-"),
[IS_HTML]: element2.namespaceURI === NAMESPACE_HTML
}
);
}
var setters_cache = /* @__PURE__ */ new Map();
function get_setters(element2) {
var cache_key = element2.getAttribute("is") || element2.nodeName;
var setters = setters_cache.get(cache_key);
if (setters) return setters;
setters_cache.set(cache_key, setters = []);
var descriptors;
var proto = element2;
var element_proto = Element.prototype;
while (element_proto !== proto) {
descriptors = get_descriptors(proto);
for (var key2 in descriptors) {
if (descriptors[key2].set) {
setters.push(key2);
}
}
proto = get_prototype_of(proto);
}
return setters;
}
function check_src_in_dev_hydration(element2, attribute, value) {
if (!dev_fallback_default) return;
if (attribute === "srcset" && srcset_url_equal(element2, value)) return;
if (src_url_equal(element2.getAttribute(attribute) ?? "", value)) return;
hydration_attribute_changed(
attribute,
element2.outerHTML.replace(element2.innerHTML, element2.innerHTML && "..."),
String(value)
);
}
function src_url_equal(element_src, url) {
if (element_src === url) return true;
return new URL(element_src, document.baseURI).href === new URL(url, document.baseURI).href;
}
function split_srcset(srcset) {
return srcset.split(",").map((src) => src.trim().split(" ").filter(Boolean));
}
function srcset_url_equal(element2, srcset) {
var element_urls = split_srcset(element2.srcset);
var urls = split_srcset(srcset);
return urls.length === element_urls.length && urls.every(
([url, width], i) => width === element_urls[i][1] && // We need to test both ways because Vite will create an a full URL with
// `new URL(asset, import.meta.url).href` for the client when `base: './'`, and the
// relative URLs inside srcset are not automatically resolved to absolute URLs by
// browsers (in contrast to img.src). This means both SSR and DOM code could
// contain relative or absolute URLs.
(src_url_equal(element_urls[i][0], url) || src_url_equal(url, element_urls[i][0]))
);
}
// node_modules/svelte/src/internal/client/dom/elements/bindings/input.js
function bind_value(input, get3, set2 = get3) {
var batches2 = /* @__PURE__ */ new WeakSet();
listen_to_event_and_reset_event(input, "input", async (is_reset) => {
if (dev_fallback_default && input.type === "checkbox") {
bind_invalid_checkbox_value();
}
var value = is_reset ? input.defaultValue : input.value;
value = is_numberlike_input(input) ? to_number(value) : value;
set2(value);
if (current_batch !== null) {
batches2.add(current_batch);
}
await tick();
if (value !== (value = get3())) {
var start = input.selectionStart;
var end = input.selectionEnd;
var length = input.value.length;
input.value = value ?? "";
if (end !== null) {
var new_length = input.value.length;
if (start === end && end === length && new_length > length) {
input.selectionStart = new_length;
input.selectionEnd = new_length;
} else {
input.selectionStart = start;
input.selectionEnd = Math.min(end, new_length);
}
}
}
});
if (
// If we are hydrating and the value has since changed,
// then use the updated value from the input instead.
hydrating && input.defaultValue !== input.value || // If defaultValue is set, then value == defaultValue
// TODO Svelte 6: remove input.value check and set to empty string?
untrack(get3) == null && input.value
) {
set2(is_numberlike_input(input) ? to_number(input.value) : input.value);
if (current_batch !== null) {
batches2.add(current_batch);
}
}
render_effect(() => {
if (dev_fallback_default && input.type === "checkbox") {
bind_invalid_checkbox_value();
}
var value = get3();
if (input === document.activeElement) {
var batch = (
/** @type {Batch} */
previous_batch ?? current_batch
);
if (batches2.has(batch)) {
return;
}
}
if (is_numberlike_input(input) && value === to_number(input.value)) {
return;
}
if (input.type === "date" && !value && !input.value) {
return;
}
if (value !== input.value) {
input.value = value ?? "";
}
});
}
function bind_checked(input, get3, set2 = get3) {
listen_to_event_and_reset_event(input, "change", (is_reset) => {
var value = is_reset ? input.defaultChecked : input.checked;
set2(value);
});
if (
// If we are hydrating and the value has since changed,
// then use the update value from the input instead.
hydrating && input.defaultChecked !== input.checked || // If defaultChecked is set, then checked == defaultChecked
untrack(get3) == null
) {
set2(input.checked);
}
render_effect(() => {
var value = get3();
input.checked = Boolean(value);
});
}
function is_numberlike_input(input) {
var type = input.type;
return type === "number" || type === "range";
}
function to_number(value) {
return value === "" ? null : +value;
}
// node_modules/svelte/src/internal/client/dom/elements/bindings/this.js
function is_bound_this(bound_value, element_or_component) {
return bound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component;
}
function bind_this(element_or_component = {}, update2, get_value, get_parts) {
effect(() => {
var old_parts;
var parts;
render_effect(() => {
old_parts = parts;
parts = get_parts?.() || [];
untrack(() => {
if (element_or_component !== get_value(...parts)) {
update2(element_or_component, ...parts);
if (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {
update2(null, ...old_parts);
}
}
});
});
return () => {
queue_micro_task(() => {
if (parts && is_bound_this(get_value(...parts), element_or_component)) {
update2(null, ...parts);
}
});
};
});
return element_or_component;
}
// node_modules/svelte/src/internal/client/reactivity/store.js
var is_store_binding = false;
var IS_UNMOUNTED = Symbol();
function capture_store_binding(fn) {
var previous_is_store_binding = is_store_binding;
try {
is_store_binding = false;
return [fn(), is_store_binding];
} finally {
is_store_binding = previous_is_store_binding;
}
}
// node_modules/svelte/src/internal/client/reactivity/props.js
function prop(props, key2, flags2, fallback2) {
var runes = !legacy_mode_flag || (flags2 & PROPS_IS_RUNES) !== 0;
var bindable = (flags2 & PROPS_IS_BINDABLE) !== 0;
var lazy = (flags2 & PROPS_IS_LAZY_INITIAL) !== 0;
var fallback_value = (
/** @type {V} */
fallback2
);
var fallback_dirty = true;
var get_fallback = () => {
if (fallback_dirty) {
fallback_dirty = false;
fallback_value = lazy ? untrack(
/** @type {() => V} */
fallback2
) : (
/** @type {V} */
fallback2
);
}
return fallback_value;
};
var setter;
if (bindable) {
var is_entry_props = STATE_SYMBOL in props || LEGACY_PROPS in props;
setter = get_descriptor(props, key2)?.set ?? (is_entry_props && key2 in props ? (v) => props[key2] = v : void 0);
}
var initial_value;
var is_store_sub = false;
if (bindable) {
[initial_value, is_store_sub] = capture_store_binding(() => (
/** @type {V} */
props[key2]
));
} else {
initial_value = /** @type {V} */
props[key2];
}
if (initial_value === void 0 && fallback2 !== void 0) {
initial_value = get_fallback();
if (setter) {
if (runes) props_invalid_value(key2);
setter(initial_value);
}
}
var getter;
if (runes) {
getter = () => {
var value = (
/** @type {V} */
props[key2]
);
if (value === void 0) return get_fallback();
fallback_dirty = true;
return value;
};
} else {
getter = () => {
var value = (
/** @type {V} */
props[key2]
);
if (value !== void 0) {
fallback_value = /** @type {V} */
void 0;
}
return value === void 0 ? fallback_value : value;
};
}
if (runes && (flags2 & PROPS_IS_UPDATED) === 0) {
return getter;
}
if (setter) {
var legacy_parent = props.$$legacy;
return (
/** @type {() => V} */
(function(value, mutation) {
if (arguments.length > 0) {
if (!runes || !mutation || legacy_parent || is_store_sub) {
setter(mutation ? getter() : value);
}
return value;
}
return getter();
})
);
}
var overridden = false;
var d = ((flags2 & PROPS_IS_IMMUTABLE) !== 0 ? derived : derived_safe_equal)(() => {
overridden = false;
return getter();
});
if (dev_fallback_default) {
d.label = key2;
}
if (bindable) get(d);
var parent_effect = (
/** @type {Effect} */
active_effect
);
return (
/** @type {() => V} */
(function(value, mutation) {
if (arguments.length > 0) {
const new_value = mutation ? get(d) : runes && bindable ? proxy(value) : value;
set(d, new_value);
overridden = true;
if (fallback_value !== void 0) {
fallback_value = new_value;
}
return value;
}
if (is_destroying_effect && overridden || (parent_effect.f & DESTROYED) !== 0) {
return d.v;
}
return get(d);
})
);
}
// node_modules/svelte/src/legacy/legacy-client.js
function createClassComponent(options) {
return new Svelte4Component(options);
}
var Svelte4Component = class {
/** @type {any} */
#events;
/** @type {Record<string, any>} */
#instance;
/**
* @param {ComponentConstructorOptions & {
* component: any;
* }} options
*/
constructor(options) {
var sources = /* @__PURE__ */ new Map();
var add_source = (key2, value) => {
var s = mutable_source(value, false, false);
sources.set(key2, s);
return s;
};
const props = new Proxy(
{ ...options.props || {}, $$events: {} },
{
get(target, prop2) {
return get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2)));
},
has(target, prop2) {
if (prop2 === LEGACY_PROPS) return true;
get(sources.get(prop2) ?? add_source(prop2, Reflect.get(target, prop2)));
return Reflect.has(target, prop2);
},
set(target, prop2, value) {
set(sources.get(prop2) ?? add_source(prop2, value), value);
return Reflect.set(target, prop2, value);
}
}
);
this.#instance = (options.hydrate ? hydrate : mount)(options.component, {
target: options.target,
anchor: options.anchor,
props,
context: options.context,
intro: options.intro ?? false,
recover: options.recover
});
if (!async_mode_flag && (!options?.props?.$$host || options.sync === false)) {
flushSync();
}
this.#events = props.$$events;
for (const key2 of Object.keys(this.#instance)) {
if (key2 === "$set" || key2 === "$destroy" || key2 === "$on") continue;
define_property(this, key2, {
get() {
return this.#instance[key2];
},
/** @param {any} value */
set(value) {
this.#instance[key2] = value;
},
enumerable: true
});
}
this.#instance.$set = /** @param {Record<string, any>} next */
(next2) => {
Object.assign(props, next2);
};
this.#instance.$destroy = () => {
unmount(this.#instance);
};
}
/** @param {Record<string, any>} props */
$set(props) {
this.#instance.$set(props);
}
/**
* @param {string} event
* @param {(...args: any[]) => any} callback
* @returns {any}
*/
$on(event2, callback) {
this.#events[event2] = this.#events[event2] || [];
const cb = (...args) => callback.call(this, ...args);
this.#events[event2].push(cb);
return () => {
this.#events[event2] = this.#events[event2].filter(
/** @param {any} fn */
(fn) => fn !== cb
);
};
}
$destroy() {
this.#instance.$destroy();
}
};
// node_modules/svelte/src/internal/client/dom/elements/custom-element.js
var SvelteElement;
if (typeof HTMLElement === "function") {
SvelteElement = class extends HTMLElement {
/** The Svelte component constructor */
$$ctor;
/** Slots */
$$s;
/** @type {any} The Svelte component instance */
$$c;
/** Whether or not the custom element is connected */
$$cn = false;
/** @type {Record<string, any>} Component props data */
$$d = {};
/** `true` if currently in the process of reflecting component props back to attributes */
$$r = false;
/** @type {Record<string, CustomElementPropDefinition>} Props definition (name, reflected, type etc) */
$$p_d = {};
/** @type {Record<string, EventListenerOrEventListenerObject[]>} Event listeners */
$$l = {};
/** @type {Map<EventListenerOrEventListenerObject, Function>} Event listener unsubscribe functions */
$$l_u = /* @__PURE__ */ new Map();
/** @type {any} The managed render effect for reflecting attributes */
$$me;
/**
* @param {*} $$componentCtor
* @param {*} $$slots
* @param {*} use_shadow_dom
*/
constructor($$componentCtor, $$slots, use_shadow_dom) {
super();
this.$$ctor = $$componentCtor;
this.$$s = $$slots;
if (use_shadow_dom) {
this.attachShadow({ mode: "open" });
}
}
/**
* @param {string} type
* @param {EventListenerOrEventListenerObject} listener
* @param {boolean | AddEventListenerOptions} [options]
*/
addEventListener(type, listener, options) {
this.$$l[type] = this.$$l[type] || [];
this.$$l[type].push(listener);
if (this.$$c) {
const unsub = this.$$c.$on(type, listener);
this.$$l_u.set(listener, unsub);
}
super.addEventListener(type, listener, options);
}
/**
* @param {string} type
* @param {EventListenerOrEventListenerObject} listener
* @param {boolean | AddEventListenerOptions} [options]
*/
removeEventListener(type, listener, options) {
super.removeEventListener(type, listener, options);
if (this.$$c) {
const unsub = this.$$l_u.get(listener);
if (unsub) {
unsub();
this.$$l_u.delete(listener);
}
}
}
async connectedCallback() {
this.$$cn = true;
if (!this.$$c) {
let create_slot = function(name) {
return (anchor) => {
const slot2 = document.createElement("slot");
if (name !== "default") slot2.name = name;
append(anchor, slot2);
};
};
await Promise.resolve();
if (!this.$$cn || this.$$c) {
return;
}
const $$slots = {};
const existing_slots = get_custom_elements_slots(this);
for (const name of this.$$s) {
if (name in existing_slots) {
if (name === "default" && !this.$$d.children) {
this.$$d.children = create_slot(name);
$$slots.default = true;
} else {
$$slots[name] = create_slot(name);
}
}
}
for (const attribute of this.attributes) {
const name = this.$$g_p(attribute.name);
if (!(name in this.$$d)) {
this.$$d[name] = get_custom_element_value(name, attribute.value, this.$$p_d, "toProp");
}
}
for (const key2 in this.$$p_d) {
if (!(key2 in this.$$d) && this[key2] !== void 0) {
this.$$d[key2] = this[key2];
delete this[key2];
}
}
this.$$c = createClassComponent({
component: this.$$ctor,
target: this.shadowRoot || this,
props: {
...this.$$d,
$$slots,
$$host: this
}
});
this.$$me = effect_root(() => {
render_effect(() => {
this.$$r = true;
for (const key2 of object_keys(this.$$c)) {
if (!this.$$p_d[key2]?.reflect) continue;
this.$$d[key2] = this.$$c[key2];
const attribute_value = get_custom_element_value(
key2,
this.$$d[key2],
this.$$p_d,
"toAttribute"
);
if (attribute_value == null) {
this.removeAttribute(this.$$p_d[key2].attribute || key2);
} else {
this.setAttribute(this.$$p_d[key2].attribute || key2, attribute_value);
}
}
this.$$r = false;
});
});
for (const type in this.$$l) {
for (const listener of this.$$l[type]) {
const unsub = this.$$c.$on(type, listener);
this.$$l_u.set(listener, unsub);
}
}
this.$$l = {};
}
}
// We don't need this when working within Svelte code, but for compatibility of people using this outside of Svelte
// and setting attributes through setAttribute etc, this is helpful
/**
* @param {string} attr
* @param {string} _oldValue
* @param {string} newValue
*/
attributeChangedCallback(attr2, _oldValue, newValue) {
if (this.$$r) return;
attr2 = this.$$g_p(attr2);
this.$$d[attr2] = get_custom_element_value(attr2, newValue, this.$$p_d, "toProp");
this.$$c?.$set({ [attr2]: this.$$d[attr2] });
}
disconnectedCallback() {
this.$$cn = false;
Promise.resolve().then(() => {
if (!this.$$cn && this.$$c) {
this.$$c.$destroy();
this.$$me();
this.$$c = void 0;
}
});
}
/**
* @param {string} attribute_name
*/
$$g_p(attribute_name) {
return object_keys(this.$$p_d).find(
(key2) => this.$$p_d[key2].attribute === attribute_name || !this.$$p_d[key2].attribute && key2.toLowerCase() === attribute_name
) || attribute_name;
}
};
}
function get_custom_element_value(prop2, value, props_definition, transform) {
const type = props_definition[prop2]?.type;
value = type === "Boolean" && typeof value !== "boolean" ? value != null : value;
if (!transform || !props_definition[prop2]) {
return value;
} else if (transform === "toAttribute") {
switch (type) {
case "Object":
case "Array":
return value == null ? null : JSON.stringify(value);
case "Boolean":
return value ? "" : null;
case "Number":
return value == null ? null : value;
default:
return value;
}
} else {
switch (type) {
case "Object":
case "Array":
return value && JSON.parse(value);
case "Boolean":
return value;
// conversion already handled above
case "Number":
return value != null ? +value : value;
default:
return value;
}
}
}
function get_custom_elements_slots(element2) {
const result = {};
element2.childNodes.forEach((node) => {
result[
/** @type {Element} node */
node.slot || "default"
] = true;
});
return result;
}
// node_modules/svelte/src/index-client.js
if (dev_fallback_default) {
let throw_rune_error = function(rune) {
if (!(rune in globalThis)) {
let value;
Object.defineProperty(globalThis, rune, {
configurable: true,
// eslint-disable-next-line getter-return
get: () => {
if (value !== void 0) {
return value;
}
rune_outside_svelte(rune);
},
set: (v) => {
value = v;
}
});
}
};
throw_rune_error("$state");
throw_rune_error("$effect");
throw_rune_error("$derived");
throw_rune_error("$inspect");
throw_rune_error("$props");
throw_rune_error("$bindable");
}
function onMount(fn) {
if (component_context === null) {
lifecycle_outside_component("onMount");
}
if (legacy_mode_flag && component_context.l !== null) {
init_update_callbacks(component_context).m.push(fn);
} else {
user_effect(() => {
const cleanup = untrack(fn);
if (typeof cleanup === "function") return (
/** @type {() => void} */
cleanup
);
});
}
}
function init_update_callbacks(context) {
var l = (
/** @type {ComponentContextLegacy} */
context.l
);
return l.u ??= { a: [], b: [], m: [] };
}
// node_modules/svelte/src/version.js
var PUBLIC_VERSION = "5";
// node_modules/svelte/src/internal/disclose-version.js
if (typeof window !== "undefined") {
((window.__svelte ??= {}).v ??= /* @__PURE__ */ new Set()).add(PUBLIC_VERSION);
}
// node_modules/tslib/tslib.es6.js
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
// src/AddPropInput.svelte
var root_1 = from_html(`<option> </option>`);
var root = from_html(`<div class="modal-input-container svelte-1jh3cip"><a id="del-btn" href="href">X</a> <select id="type-input" class="flex-obj svelte-1jh3cip"></select> <input id="name-input" class="name-input flex-obj svelte-1jh3cip" type="text" name="name[]" placeholder="name" required/> <input id="value-input" type="text" name="value[]" placeholder="value" class="value-input flex-obj svelte-1jh3cip"/></div>`);
var $$css = {
hash: "svelte-1jh3cip",
code: "input.svelte-1jh3cip {max-height:25px;overflow-x:auto;}select.svelte-1jh3cip {height:21px;}#name-input.svelte-1jh3cip {flex-grow:0;width:auto;}.modal-input-container.svelte-1jh3cip {width:95%;display:flex;flex-direction:row;align-items:center;gap:10px;margin-top:10px;}.btn-inactive.svelte-1jh3cip {cursor:not-allowed;pointer-events:none;opacity:0.7;}"
};
function AddPropInput($$anchor, $$props) {
push($$props, true);
append_styles($$anchor, $$css);
let totalInputs = prop($$props, "totalInputs", 11, 0), typeVal = prop($$props, "typeVal", 11, "text"), nameVal = prop($$props, "nameVal", 15, ""), valueVal = prop($$props, "valueVal", 15, "");
let inputEl = state(proxy(document.createElement("input")));
let valueEl = state(proxy(document.createElement("input")));
const options = {
Text: "string",
Number: "number",
Checkbox: "checkbox",
Date: "date",
Datetime: "datetime-local"
};
const convertProps = {
text: "Text",
multitext: "Text",
tags: "Text",
aliases: "Text",
number: "Number",
checkbox: "Checkbox",
date: "Date",
datetime: "Datetime"
};
let optionVal = state(proxy(options[convertProps[typeVal()]]));
onMount(() => __awaiter(void 0, void 0, void 0, function* () {
yield tick();
get(inputEl).focus();
get(inputEl).select();
set(
optionVal,
options[convertProps[typeVal()]],
//Load default type.
true
);
if (typeVal() !== "text") changeType(get(optionVal));
}));
function changeType(type) {
get(valueEl).type = type;
}
var div = root();
var a = child(div);
a.__click = () => {
if (totalInputs() <= 1) return;
$$props.removeInput($$props.id);
};
var select = sibling(a, 2);
select.__change = () => changeType(get(optionVal));
each(select, 21, () => Object.keys(options), index, ($$anchor2, key2) => {
var option = root_1();
var text2 = child(option, true);
reset(option);
var option_value = {};
template_effect(() => {
set_text(text2, get(key2));
if (option_value !== (option_value = options[get(key2)])) {
option.value = (option.__value = options[get(key2)]) ?? "";
}
});
append($$anchor2, option);
});
reset(select);
var input = sibling(select, 2);
remove_input_defaults(input);
bind_this(input, ($$value) => set(inputEl, $$value), () => get(inputEl));
var input_1 = sibling(input, 2);
remove_input_defaults(input_1);
bind_this(input_1, ($$value) => set(valueEl, $$value), () => get(valueEl));
reset(div);
template_effect(() => {
set_class(a, 1, `btn-del ${totalInputs() <= 1 ? "btn-inactive" : ""}`, "svelte-1jh3cip");
set_attribute2(a, "tabindex", totalInputs() <= 1 ? -1 : 0);
});
bind_select_value(select, () => get(optionVal), ($$value) => set(optionVal, $$value));
bind_value(input, nameVal);
bind_value(input_1, valueVal);
append($$anchor, div);
pop();
}
delegate(["click", "change"]);
// src/helpers.ts
function parseValue(input, type) {
switch (type) {
case "number":
return Number(input.value);
case "checkbox":
return Boolean(input.checked);
default:
return input.value;
}
}
function removeExtraCommas(str) {
return str.replace(/^,*(.*?),*$/g, "$1").replace(/,{2,}/g, ",");
}
function cleanTags(str) {
let cleanStr = str;
for (let index2 in KNOWN_BAD_CHARACTERS) {
cleanStr = cleanStr.replaceAll(KNOWN_BAD_CHARACTERS[index2], "");
}
return cleanStr;
}
var KNOWN_BAD_CHARACTERS = [
"\u2012",
"\u2013",
"\u2014",
"\u2015",
"\u204F",
"\u203D",
"\u2018",
"\u201A",
"\u201B",
"\u2039",
"\u203A",
"\u201C",
"\u201D",
"\u201E",
"\u201F",
"\u2045",
"\u2046",
"\u204B",
"\u204E",
"\u2051",
"\u2044",
"\u204A",
"\u2030",
"\u2031",
"\u2052",
"\u2020",
"\u2021",
"\u2022",
"\u2023",
"\u2043",
"\u204C",
"\u204D",
"\u2032",
"\u2035",
"\u2038",
"\u203B",
"\u2050",
"\u2041",
"\u2042",
"\u2016",
"\u2011",
"\u2033",
"\u2034",
"\u2057",
"\u2036",
"\u2037",
"`",
"^",
"\u203E",
"\u2017",
"\u2053",
";",
":",
"!",
"\u203C",
"\u2049",
"?",
"\u2048",
"\u2047",
".",
"\u2024",
"\u2025",
"\u2026",
"'",
'"',
"(",
")",
"[",
"]",
"{",
"}",
"@",
"*",
"&",
"%",
"\u2054",
"+",
"<",
"=",
">",
"|",
"~",
"$",
"\u2055",
"\u2056",
"\u2058",
"\u2059",
"\u205A",
"\u205B",
"\u205C",
"\u205D",
"\u205E",
"\u2E00",
"\u2E01",
"\u2E02",
"\u2E03",
"\u2E04",
"\u2E05",
"\u2E06",
"\u2E07",
"\u2E08",
"\u2E09",
"\u2E0A",
"\u2E0B",
"\u2E0C",
"\u2E0D",
"\u2E0E",
"\u2E0F",
"\u2E10",
"\u2E11",
"\u2E12",
"\u2E13",
"\u2E14",
"\u2E15",
"\u2E16",
"\u2E17",
"\u2E1C",
"\u2E1D",
" ",
"#"
];
// src/AddPropForm.svelte
var root_12 = from_html(`<button type="button" class="prop-chip"> </button>`);
var root2 = from_html(`<div id="multi-properties-modal" class="modal-content"><div id="alert-container" class="alert-container hidden svelte-18exwij"><div>ERROR</div> <div id="alert-text"> </div></div> <p>Select from existing properties or create new ones:</p> <div class="suggested-props svelte-18exwij"></div> <p>Type in a property name, then value. Use the dropbox to choose what type of
data you wish to store.</p> <p> </p> <p>如需添加标签,请使用属性名 "tags"。</p> <form><label><input type="checkbox"/> </label> <div class="modal-inputs-container svelte-18exwij"></div> <div class="modal-add-container svelte-18exwij"><button type="button" class="a-btn">Add</button></div> <div class="modal-button-container"><button type="submit" class="btn-submit">Submit</button></div></form></div>`);
var $$css2 = {
hash: "svelte-18exwij",
code: ".modal-inputs-container.svelte-18exwij {height:200px;width:100%;overflow-y:scroll;border-radius:5px;border-style:solid;display:flex;flex-direction:column;align-items:center;}.modal-add-container.svelte-18exwij {margin-top:10px;}.alert-container.svelte-18exwij {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.suggested-props.svelte-18exwij {overflow-y:scroll;max-height:100px;}.hidden.svelte-18exwij {display:none;}"
};
function AddPropForm($$anchor, $$props) {
push($$props, true);
append_styles($$anchor, $$css2);
let overwrite = prop($$props, "overwrite", 15);
let countInputs = 0;
let formEl = state(proxy(document.createElement("form")));
let errorEl = state(proxy(document.createElement("div")));
let alertText = state(".");
let inputEls = state(proxy([]));
function onCheckboxChange() {
overwrite(!overwrite());
$$props.changeBool(overwrite());
}
onMount(() => {
$$props.defaultProps.length > 0 ? addInputs($$props.defaultProps) : addInputs([{ type: "text", name: "", value: "" }]);
});
function addInputs(inputs = [{ type: "text", name: "", value: "" }]) {
let arr = [];
for (let input of inputs) {
countInputs++;
arr.push({
id: countInputs,
totalInputs: countInputs,
typeDef: input.type,
nameDef: input.name,
valueDef: input.value
});
}
set(inputEls, [...get(inputEls), ...arr], true);
}
function removeInput(id) {
return __awaiter(this, void 0, void 0, function* () {
set(inputEls, get(inputEls).filter((input) => input.id !== id), true);
yield tick();
let inputs = get(formEl).querySelectorAll("input");
if (!inputs) return;
inputs[inputs.length - 2].focus();
});
}
function addSuggested(prop2) {
if (!get(inputEls).find((el) => el.nameDef === prop2.name)) {
addInputs([{ type: prop2.widget, name: prop2.name, value: "" }]);
}
}
function checkDuplicateNames() {
let set2 = /* @__PURE__ */ new Set();
for (let input of get(inputEls)) set2.add(input.nameDef);
if (set2.size < get(inputEls).length) return true;
else return false;
}
function runError(errorText) {
set(alertText, errorText, true);
get(
errorEl
//Should I have this error message fade away?
).classList.remove("hidden");
}
function onSubmit(e) {
e.preventDefault();
if (checkDuplicateNames()) {
runError("Duplicate property names are not allowed.");
return;
}
let obj = /* @__PURE__ */ new Map();
let inputs = get(formEl).querySelectorAll('input[name^="name[]"]');
inputs.forEach((input) => {
var _a;
if (!(input.nextElementSibling instanceof HTMLInputElement)) return;
if (!(input.previousElementSibling instanceof HTMLSelectElement)) return;
if (!(input.previousElementSibling.children[0] instanceof HTMLOptionElement)) return;
let name = input.value;
if (name === "") {
input.reportValidity();
return;
}
const selectEl = input.previousElementSibling;
const htmlType = selectEl.value;
const reverseOptions = {
string: "text",
number: "number",
checkbox: "checkbox",
date: "date",
"datetime-local": "datetime"
};
const obsidianType = (_a = reverseOptions[htmlType]) !== null && _a !== void 0 ? _a : "text";
let value = parseValue(input.nextElementSibling, input.nextElementSibling.type);
if (typeof value === "string") {
if (name === "tags") {
value = cleanTags(value);
}
if (typeof value === "string" && value.includes(",")) {
let str = removeExtraCommas(value);
value = str.split($$props.delimiter);
}
}
if (value === "") value = null;
let propObj = {
type: obsidianType,
data: value,
overwrite: false,
delimiter: $$props.delimiter
};
obj.set(name, propObj);
});
if (obj.size < inputs.length) return;
$$props.submission(obj);
}
var div = root2();
var div_1 = child(div);
var div_2 = sibling(child(div_1), 2);
var text2 = child(div_2, true);
reset(div_2);
reset(div_1);
bind_this(div_1, ($$value) => set(errorEl, $$value), () => get(errorEl));
var div_3 = sibling(div_1, 4);
each(div_3, 21, () => $$props.suggestedProps, index, ($$anchor2, prop2) => {
var button = root_12();
button.__click = () => addSuggested(get(prop2));
var text_1 = child(button, true);
reset(button);
template_effect(() => set_text(text_1, get(prop2).name));
append($$anchor2, button);
});
reset(div_3);
var p = sibling(div_3, 4);
var text_2 = child(p);
reset(p);
var form = sibling(p, 4);
var label = child(form);
var input_1 = child(label);
remove_input_defaults(input_1);
input_1.__change = onCheckboxChange;
var text_3 = sibling(input_1, 1, true);
text_3.nodeValue = "覆盖已有属性";
reset(label);
var div_4 = sibling(label, 2);
each(div_4, 21, () => get(inputEls), (input) => input.id, ($$anchor2, input, $$index_1) => {
AddPropInput($$anchor2, {
get id() {
return get(input).id;
},
get totalInputs() {
return get(inputEls).length;
},
removeInput,
get typeVal() {
return get(input).typeDef;
},
set typeVal($$value) {
get(input).typeDef = $$value;
},
get nameVal() {
return get(input).nameDef;
},
set nameVal($$value) {
get(input).nameDef = $$value;
},
get valueVal() {
return get(input).valueDef;
},
set valueVal($$value) {
get(input).valueDef = $$value;
}
});
});
reset(div_4);
var div_5 = sibling(div_4, 2);
var button_1 = child(div_5);
button_1.__click = () => addInputs([{ type: "text", name: "", value: "" }]);
reset(div_5);
next(2);
reset(form);
bind_this(form, ($$value) => set(formEl, $$value), () => get(formEl));
reset(div);
template_effect(() => {
set_text(text2, get(alertText));
set_text(text_2, `If you want to make a List property, use the Text data type and separate
each value with a "${$$props.delimiter ?? ""}".`);
set_checked(input_1, overwrite());
});
event("submit", form, onSubmit);
append($$anchor, div);
pop();
}
delegate(["click", "change"]);
// src/AddConfirmModal.ts
var import_obsidian = require("obsidian");
// src/AddConfirmForm.svelte
var root_13 = from_html(`<li> </li>`);
var root3 = from_html(`<div><form><p class="msg svelte-n0gky0"> </p> <p>以下属性将被添加:</p> <ul></ul> <p>确认要继续执行吗?</p> <button class="mod-warning" type="submit">Confirm</button> <button type="button">Cancel</button></form></div>`);
var $$css3 = {
hash: "svelte-n0gky0",
code: ".msg.svelte-n0gky0 {font-weight:bold;padding-bottom:10px;}"
};
function AddConfirmForm($$anchor, $$props) {
push($$props, true);
append_styles($$anchor, $$css3);
let overwrite = prop($$props, "overwrite", 3, true);
let btnCancel = state(null);
let msg = user_derived(() => overwrite() ? "Any pre-existing text props will have their values overwritten." : "Any pre-existing text props will have their values be appended to.");
function onSubmit(e) {
e.preventDefault();
$$props.submission();
}
onMount(() => {
get(btnCancel) === null || get(btnCancel) === void 0 ? void 0 : get(btnCancel).focus();
});
var div = root3();
var form = child(div);
var p = child(form);
var text2 = child(p, true);
reset(p);
var ul = sibling(p, 4);
each(ul, 21, () => [...$$props.newProps], index, ($$anchor2, $$item) => {
var $$array = user_derived(() => to_array(get($$item), 2));
let propName = () => get($$array)[0];
let prop2 = () => get($$array)[1];
var li = root_13();
var text_1 = child(li);
reset(li);
template_effect(() => set_text(text_1, `${propName() ?? ""}: ${prop2().data ?? ""}`));
append($$anchor2, li);
});
reset(ul);
var button = sibling(ul, 6);
button.__click = function(...$$args) {
$$props.cancel?.apply(this, $$args);
};
bind_this(button, ($$value) => set(btnCancel, $$value), () => get(btnCancel));
reset(form);
reset(div);
template_effect(() => set_text(text2, get(msg)));
event("submit", form, onSubmit);
append($$anchor, div);
pop();
}
delegate(["click"]);
// src/AddConfirmModal.ts
var AddConfirmModal = class extends import_obsidian.Modal {
constructor(app, props, overwrite, submission) {
super(app);
this.props = props;
this.overwrite = overwrite;
this.submission = submission;
}
onSubmit() {
this.submission();
this.close();
}
onCancel() {
this.close();
}
onOpen() {
this.titleEl.createEl("h2", { text: "添加属性" });
this.component = mount(AddConfirmForm, {
target: this.contentEl,
props: {
newProps: this.props,
overwrite: this.overwrite,
submission: this.onSubmit.bind(this),
cancel: this.onCancel.bind(this)
}
});
}
};
// src/AddPropModal.ts
var PropModal = class extends import_obsidian2.Modal {
constructor(app, submission, overwrite, delimiter, defaultProps, changeBool, suggestedProps) {
super(app);
this.submission = submission;
this.overwrite = overwrite;
this.delimiter = delimiter;
this.defaultProps = defaultProps;
this.changeBool = changeBool;
this.suggestedProps = suggestedProps;
}
//Run form submission if user clicks confirm.
onConfirm() {
this.submission(this.props);
this.close();
}
updateBool(bool) {
this.overwrite = bool;
this.changeBool(bool);
}
//Pull up confirmation form when user submits base form.
onSubmit(props) {
this.props = props;
new AddConfirmModal(
this.app,
this.props,
this.overwrite,
this.onConfirm.bind(this)
).open();
}
onOpen() {
this.titleEl.createEl("h2", { text: "添加属性" });
this.component = mount(AddPropForm, {
target: this.contentEl,
props: {
submission: this.onSubmit.bind(this),
overwrite: this.overwrite,
delimiter: this.delimiter,
defaultProps: this.defaultProps,
changeBool: this.updateBool.bind(this),
suggestedProps: this.suggestedProps
}
});
}
};
// src/SettingTab.ts
var import_obsidian3 = require("obsidian");
var SettingTab = class extends import_obsidian3.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
let { containerEl } = this;
containerEl.empty();
new import_obsidian3.Setting(containerEl).setName("覆盖现有文本").setDesc(
"添加名称已经存在的属性时,文本将覆盖该属性的现有值。 如果保持禁用状态,新值将作为列表添加到旧值。 "
).addToggle((toggle) => {
toggle.setValue(this.plugin.settings.overwrite);
toggle.onChange(async (value) => {
this.plugin.settings.overwrite = value;
await this.plugin.saveSettings();
});
});
new import_obsidian3.Setting(containerEl).setName("递归迭代").setDesc(
"启用后,在循环遍历文件夹中的所有文件时,还将循环遍历任何子文件夹。 "
).addToggle((toggle) => {
toggle.setValue(this.plugin.settings.recursive);
toggle.onChange(async (value) => {
this.plugin.settings.recursive = value;
await this.plugin.saveSettings();
});
});
new import_obsidian3.Setting(containerEl).setName("列表分隔符").setDesc(
"设置要在创建列表时使用的分隔符。 默认使用逗号(,)。 "
).addText((text2) => {
text2.setValue(this.plugin.settings.delimiter);
text2.onChange(async (value) => {
if (value.length > 1) {
text2.setValue(value[0]);
new import_obsidian3.Notice("分隔符必须是单个字符。");
return;
}
this.plugin.settings.delimiter = value;
await this.plugin.saveSettings();
});
});
new import_obsidian3.Setting(containerEl).setName("默认属性文件").setDesc(
"选择一个包含属性的文件,该文件将默认载入多属性表单。请输入目标文件的完整路径。(例如Templates/PropFile 1)"
).addText((text2) => {
text2.setValue(this.plugin.settings.defaultPropPath);
text2.onChange(async (value) => {
this.plugin.settings.defaultPropPath = value;
await this.plugin.saveSettings();
});
});
}
};
// src/RemoveModal.ts
var import_obsidian5 = require("obsidian");
// src/RemovePropForm.svelte
var root_14 = from_html(`<label><input type="checkbox"/> </label>`);
var root4 = from_html(`<div><div id="alert-container" class="alert-container hidden svelte-1c8m26c"><div>ERROR</div> <div id="alert-text"> </div></div> <p>从文件选择中勾选您希望移除的属性。</p> <form><div class="name-container svelte-1c8m26c"></div> <div class="button-container svelte-1c8m26c"><button type="submit">Confirm</button> <button type="button"> </button></div></form></div>`);
var $$css4 = {
hash: "svelte-1c8m26c",
code: ".name-container.svelte-1c8m26c {display:flex;flex-direction:column;gap:5px;margin-top:10px;margin-bottom:20px;}.alert-container.svelte-1c8m26c {display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:10px;background-color:red;font-weight:bold;}.button-container.svelte-1c8m26c {display:flex;flex-direction:row;justify-content:space-between;}.hidden.svelte-1c8m26c {display:none;}"
};
function RemovePropForm($$anchor, $$props) {
push($$props, true);
append_styles($$anchor, $$css4);
let names = prop($$props, "names", 19, () => []);
let errorEl = state(null);
let alertText = state(".");
let checkCount = state(0);
let inputs = state(proxy([]));
user_effect(() => {
const sortedNames = [...names()].sort();
set(inputs, sortedNames.map((name) => ({ name, isChecked: false })), true);
set(checkCount, 0);
});
let isMaxChecked = user_derived(() => get(inputs).length > 0 && get(checkCount) >= get(inputs).length);
function onCheckboxChange(event2) {
let checked = event2.target.checked;
checked ? update(checkCount) : update(checkCount, -1);
}
function toggleAll() {
const shouldCheckAll = !get(isMaxChecked);
set(inputs, get(inputs).map((input) => Object.assign(Object.assign({}, input), { isChecked: shouldCheckAll })), true);
set(checkCount, shouldCheckAll ? get(inputs).length : 0, true);
}
function onSubmit(e) {
e.preventDefault();
if (get(checkCount) === 0) {
set(alertText, "请至少选择一个要移除的属性。");
get(errorEl) === null || get(errorEl) === void 0 ? void 0 : get(errorEl).classList.remove("hidden");
return;
}
let propNames = get(inputs).filter((input) => input.isChecked).map((input) => input.name);
$$props.submission(propNames);
}
var div = root4();
var div_1 = child(div);
var div_2 = sibling(child(div_1), 2);
var text2 = child(div_2, true);
reset(div_2);
reset(div_1);
bind_this(div_1, ($$value) => set(errorEl, $$value), () => get(errorEl));
var form = sibling(div_1, 4);
var div_3 = child(form);
each(div_3, 21, () => get(inputs), (input) => input.name, ($$anchor2, input, $$index) => {
var label = root_14();
var input_1 = child(label);
remove_input_defaults(input_1);
input_1.__change = (event2) => onCheckboxChange(event2);
var text_1 = sibling(input_1);
reset(label);
template_effect(() => set_text(text_1, ` ${get(input).name ?? ""}`));
bind_checked(input_1, () => get(input).isChecked, ($$value) => get(input).isChecked = $$value);
append($$anchor2, label);
});
reset(div_3);
var div_4 = sibling(div_3, 2);
var button = sibling(child(div_4), 2);
button.__click = toggleAll;
var text_2 = child(button, true);
reset(button);
reset(div_4);
reset(form);
reset(div);
template_effect(() => {
set_text(text2, get(alertText));
set_text(text_2, get(isMaxChecked) ? "Uncheck All" : "Check All");
});
event("submit", form, onSubmit);
append($$anchor, div);
pop();
}
delegate(["change", "click"]);
// src/RemoveConfirmModal.ts
var import_obsidian4 = require("obsidian");
// src/RemoveConfirmForm.svelte
var root_15 = from_html(`<li> </li>`);
var root5 = from_html(`<div><form><p> </p> <ul></ul> <p>确认要继续执行吗?</p> <button class="mod-warning" type="submit">Delete</button> <button type="button">Cancel</button></form></div>`);
function RemoveConfirmForm($$anchor, $$props) {
push($$props, true);
let names = prop($$props, "names", 19, () => ["test", "test2"]);
let btnCancel = state(null);
let word = user_derived(() => names().length > 1 ? "properties" : "property");
function onSubmit(e) {
e.preventDefault();
$$props.submission();
}
onMount(() => {
get(btnCancel) === null || get(btnCancel) === void 0 ? void 0 : get(btnCancel).focus();
});
var div = root5();
var form = child(div);
var p = child(form);
var text2 = child(p);
reset(p);
var ul = sibling(p, 2);
each(ul, 21, names, index, ($$anchor2, name) => {
var li = root_15();
var text_1 = child(li, true);
reset(li);
template_effect(() => set_text(text_1, get(name)));
append($$anchor2, li);
});
reset(ul);
var button = sibling(ul, 6);
button.__click = function(...$$args) {
$$props.cancel?.apply(this, $$args);
};
bind_this(button, ($$value) => set(btnCancel, $$value), () => get(btnCancel));
reset(form);
reset(div);
template_effect(() => set_text(text2, `下列 ${get(word) ?? ""} 将被移除:`));
event("submit", form, onSubmit);
append($$anchor, div);
pop();
}
delegate(["click"]);
// src/RemoveConfirmModal.ts
var RemoveConfirmModal = class extends import_obsidian4.Modal {
constructor(app, names, submission) {
super(app);
this.names = names;
this.submission = submission;
}
onSubmit() {
this.submission();
this.close();
}
onCancel() {
this.close();
}
onOpen() {
if (!this.names || this.names.length === 0) {
new import_obsidian4.Notice("请检查至少一个要删除的属性。");
this.close();
}
this.titleEl.createEl("h2", { text: "移除属性" });
this.component = mount(RemoveConfirmForm, {
target: this.contentEl,
props: {
names: this.names,
submission: this.onSubmit.bind(this),
cancel: this.onCancel.bind(this)
}
});
}
};
// src/RemoveModal.ts
var RemoveModal = class extends import_obsidian5.Modal {
constructor(app, names, submission) {
if (!names || names.length === 0) {
new import_obsidian5.Notice("没有要删除的属性");
return;
}
super(app);
this.names = names;
this.submission = submission;
}
onConfirm() {
this.submission(this.props);
this.close();
}
onSubmit(props) {
this.props = props;
new RemoveConfirmModal(
this.app,
this.props,
this.onConfirm.bind(this)
).open();
}
onOpen() {
this.titleEl.createEl("h2", { text: "移除属性" });
this.component = mount(RemovePropForm, {
target: this.contentEl,
props: {
names: this.names,
submission: this.onSubmit.bind(this)
}
});
}
};
// src/frontmatter.ts
var import_obsidian6 = require("obsidian");
async function addProperties(fileProcessor, file, props, overwrite, propCache) {
await fileProcessor(file, (frontmatter) => {
for (const [key2, value] of props) {
if (key2 === "tags" && !frontmatter.hasOwnProperty("tags") && !Array.isArray(value.data)) {
frontmatter[key2] = [value.data];
continue;
}
if (!frontmatter[key2] || overwrite) {
frontmatter[key2] = value.data;
continue;
}
let type1 = value.type;
let type2 = propCache[key2.toLowerCase()].widget;
if (canBeAppended(type1, type2)) {
if (frontmatter[key2] === value.data) continue;
if (!value.data) continue;
let arr = mergeIntoArrays(frontmatter[key2], value.data);
frontmatter[key2] = arr;
continue;
} else {
frontmatter[key2] = value.data;
continue;
}
}
});
}
async function addPropToSet(fileProcessor, set2, file) {
await fileProcessor(file, (frontmatter) => {
for (const key2 in frontmatter) {
set2.add(key2);
}
});
return set2;
}
async function removeProperties(fileProcessor, file, props) {
await fileProcessor(file, (frontmatter) => {
for (const prop2 of props) {
frontmatter[prop2] = void 0;
}
});
}
function canBeAppended(str1, str2) {
let arr = ["number", "date", "datetime", "checkbox"];
if (arr.includes(str1) || arr.includes(str2)) return false;
return true;
}
function mergeIntoArrays(...args) {
const arrays = args.map((arg) => Array.isArray(arg) ? arg : [arg]);
const flattened = arrays.flat();
const unique = [...new Set(flattened)];
return unique;
}
// src/main.ts
var defaultSettings = {
overwrite: false,
recursive: true,
delimiter: ",",
defaultPropPath: ""
};
var MultiPropPlugin2 = class extends import_obsidian7.Plugin {
async loadSettings() {
this.settings = Object.assign({}, defaultSettings, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
async changeOverwrite(bool) {
this.settings.overwrite = bool;
await this.saveSettings();
}
_getFilesFromTabGroup(leaf) {
if (!leaf) {
return [];
}
const files = [];
const fileSet = /* @__PURE__ */ new Set();
const activeParent = leaf.parent;
if (activeParent instanceof import_obsidian7.WorkspaceTabs) {
this.app.workspace.iterateAllLeaves((l) => {
if (l.parent === activeParent && l.view instanceof import_obsidian7.FileView) {
const file = l.view.file;
if (file && !fileSet.has(file.path)) {
files.push(file);
fileSet.add(file.path);
}
}
});
} else {
const activeWindowRoot = leaf.getRoot();
this.app.workspace.iterateAllLeaves((l) => {
if (l.getRoot() === activeWindowRoot && l.view instanceof import_obsidian7.FileView) {
const file = l.view.file;
if (file && !fileSet.has(file.path)) {
files.push(file);
fileSet.add(file.path);
}
}
});
}
return files;
}
async onload() {
await this.loadSettings();
this.addSettingTab(new SettingTab(this.app, this));
this.addCommand({
id: "add-props-to-current-note",
name: "Add props to current note",
callback: async () => {
const file = this.app.workspace.getActiveFile();
if (!file) {
new import_obsidian7.Notice("No active file to add properties to.", 4e3);
return;
}
await this.createPropModal([file]);
}
});
this.registerEvent(
this.app.workspace.on("file-menu", (menu, node) => {
let title = "";
let obj;
if (node instanceof import_obsidian7.TFile) {
obj = [node];
title = "Add props to file.";
} else {
obj = node;
title = "Add props to folder.";
}
menu.addItem((item) => {
item.setIcon("archive").setTitle(title).onClick(() => this.createPropModal(obj));
});
})
);
this.addCommand({
id: "remove-props-from-current-note",
name: "Remove props from current note",
callback: async () => {
const file = this.app.workspace.getActiveFile();
if (!file) {
new import_obsidian7.Notice("No active file to remove properties from.", 4e3);
return;
}
await this.createRemoveModal([file]);
}
});
this.registerEvent(
this.app.workspace.on("file-menu", (menu, node) => {
let title = "";
let obj;
if (node instanceof import_obsidian7.TFile) {
obj = [node];
title = "Remove props from file.";
} else {
obj = node;
title = "Remove props from folder.";
}
menu.addItem((item) => {
item.setIcon("archive").setTitle(title).onClick(() => this.createRemoveModal(obj));
});
})
);
this.addCommand({
id: "add-props-to-tab-group",
name: "Add props to tabs in active tab group",
callback: async () => {
const files = this._getFilesFromTabGroup(this.app.workspace.activeLeaf);
if (!files || !files.length) {
new import_obsidian7.Notice(
"No open tabs in the active tab group to add properties to.",
4e3
);
return;
}
await this.createPropModal(files);
}
});
this.registerEvent(
this.app.workspace.on("tab-group-menu", (menu) => {
const obj = this._getFilesFromTabGroup(
this.app.workspace.getLeaf(false)
);
menu.addItem((item) => {
item.setIcon("archive").setTitle("Add props from all tabs").onClick(() => this.createPropModal(obj));
});
})
);
this.addCommand({
id: "remove-props-from-tab-group",
name: "Remove props from tabs in active tab group",
callback: async () => {
const files = this._getFilesFromTabGroup(
this.app.workspace.getLeaf(false)
);
if (!files || !files.length) {
new import_obsidian7.Notice(
"No open tabs in the active tab group to remove properties from.",
4e3
);
return;
}
await this.createRemoveModal(files);
}
});
this.registerEvent(
this.app.workspace.on("tab-group-menu", (menu) => {
const obj = this._getFilesFromTabGroup(
this.app.workspace.getLeaf(false)
);
menu.addItem((item) => {
item.setIcon("archive").setTitle("Remove props from all tabs").onClick(() => this.createRemoveModal(obj));
});
})
);
this.registerEvent(
this.app.workspace.on("files-menu", (menu, nodes) => {
let obj = nodes;
menu.addItem((item) => {
item.setIcon("archive").setTitle("向所选文件添加props").onClick(() => this.createPropModal(obj));
});
})
);
this.registerEvent(
this.app.workspace.on("files-menu", (menu, nodes) => {
let obj = nodes;
menu.addItem((item) => {
item.setIcon("archive").setTitle("从选定的文件中删除props").onClick(async () => this.createRemoveModal(obj));
});
})
);
this.registerEvent(
this.app.workspace.on("search:results-menu", (menu, leaf) => {
menu.addItem((item) => {
item.setIcon("archive").setTitle("在搜索结果中添加props").onClick(() => {
let files = this.getFilesFromSearch(leaf);
if (!files.length) {
new import_obsidian7.Notice("没有要添加属性的文件。", 4e3);
return;
}
this.createPropModal(files);
});
});
})
);
this.registerEvent(
this.app.workspace.on("search:results-menu", (menu, leaf) => {
menu.addItem((item) => {
item.setIcon("archive").setTitle("在搜索结果中移除props").onClick(async () => {
let files = this.getFilesFromSearch(leaf);
if (!files.length) {
new import_obsidian7.Notice("没有要从中删除属性的文件。", 4e3);
return;
}
this.createRemoveModal(files);
});
});
})
);
}
async getPropsFromFolder(folder, names) {
for (let obj of folder.children) {
if (obj instanceof import_obsidian7.TFile && obj.extension === "md") {
names = await addPropToSet(
this.app.fileManager.processFrontMatter.bind(this.app.fileManager),
names,
obj
);
}
if (obj instanceof import_obsidian7.TFolder) {
if (this.settings.recursive) {
await this.getPropsFromFolder(obj, names);
}
}
}
return [...names].sort();
}
async getPropsFromFiles(files, names) {
for (let file of files) {
if (file instanceof import_obsidian7.TFile && file.extension === "md") {
names = await addPropToSet(
this.app.fileManager.processFrontMatter.bind(this.app.fileManager),
names,
file
);
}
}
return [...names];
}
/** Iterates through all files in a folder and runs callback on each file. */
async searchFolders(folder, callback) {
for (let obj of folder.children) {
if (obj instanceof import_obsidian7.TFolder) {
if (this.settings.recursive) {
await this.searchFolders(obj, callback);
}
}
if (obj instanceof import_obsidian7.TFile && obj.extension === "md") {
await callback(obj);
}
}
}
async searchFiles(files, callback) {
for (let file of files) {
if (file instanceof import_obsidian7.TFile && file.extension === "md") {
await callback(file);
}
}
}
getFilesFromSearch(leaf) {
let files = [];
leaf.dom.vChildren.children.forEach((e) => {
files.push(e.file);
});
return files;
}
async createPropModal(iterable) {
let iterateFunc;
if (iterable instanceof import_obsidian7.TFolder) {
const allFiles = [];
this.searchFolders(iterable, async (f) => allFiles.push(f));
iterateFunc = async (props) => {
await this.searchFolders(
iterable,
await this.addPropsCallback(props, allFiles.length)
);
};
} else {
iterateFunc = async (props) => this.searchFiles(
iterable,
await this.addPropsCallback(props, iterable.length)
);
}
let defaultProps;
defaultProps = this.loadDefaultProps();
const allProps = this.getAllUsedProperties();
new PropModal(
this.app,
iterateFunc,
this.settings.overwrite,
this.settings.delimiter,
defaultProps,
this.changeOverwrite.bind(this),
allProps
).open();
}
getAllUsedProperties() {
const allProps = this.app.metadataCache.getAllPropertyInfos();
return Object.values(allProps).sort(
(a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())
);
}
/** Create modal for removing properties.
* Will call a different function depending on whether files or a folder is used. */
async createRemoveModal(iterable) {
let names;
let iterateFunc;
if (iterable instanceof import_obsidian7.TFolder) {
names = await this.getPropsFromFolder(iterable, /* @__PURE__ */ new Set());
const allFiles = [];
this.searchFolders(iterable, async (f) => allFiles.push(f));
iterateFunc = (props) => this.searchFolders(
iterable,
this.removePropsCallback(props, allFiles.length)
);
} else {
names = await this.getPropsFromFiles(iterable, /* @__PURE__ */ new Set());
iterateFunc = (props) => this.searchFiles(
iterable,
this.removePropsCallback(props, iterable.length)
);
}
if (names.length === 0) {
new import_obsidian7.Notice("无属性可移除", 4e3);
return;
}
const sortedNames = [...names].sort(
(a, b) => a.toLowerCase() > b.toLowerCase() ? 1 : -1
);
new RemoveModal(this.app, sortedNames, iterateFunc).open();
}
/** Read through a given file and get name/value of props.
* Revised from https://forum.obsidian.md/t/how-to-programmatically-access-a-files-properties-types/77826/4.
*/
readYamlProperties(file) {
const metadata = this.app.metadataCache.getFileCache(file);
const frontmatter = metadata?.frontmatter;
if (!frontmatter) {
new import_obsidian7.Notice("无效的属性模板。", 4e3);
return;
}
const allPropsWithType = this.app.metadataCache.getAllPropertyInfos();
let result = [];
for (let [key2, value] of Object.entries(frontmatter)) {
const keyLower = key2.toLowerCase();
const obj = {
name: key2,
value,
type: allPropsWithType[keyLower].widget
};
result.push(obj);
}
return result;
}
loadDefaultProps() {
if (this.settings.defaultPropPath) {
try {
const file = this.app.vault.getAbstractFileByPath(
`${this.settings.defaultPropPath}.md`
);
let tmp = this.readYamlProperties(file);
if (tmp === void 0) throw Error("Undefined path.");
return tmp;
} catch (e) {
new import_obsidian7.Notice(
`${e}. 请检查默认属性文件设置中输入的路径是否有效。`,
1e4
);
}
}
return [{ name: "", value: "", type: "text" }];
}
async addPropsCallback(props, totalFiles) {
const statusBarItem = this.addStatusBarItem();
let count = 0;
return async (file) => {
await addProperties(
this.app.fileManager.processFrontMatter.bind(this.app.fileManager),
file,
props,
this.settings.overwrite,
this.app.metadataCache.getAllPropertyInfos()
);
count++;
statusBarItem.setText(
"Added props to " + count + "/" + totalFiles + " files"
);
if (count === totalFiles) {
setTimeout(() => {
statusBarItem.remove();
}, 5e3);
}
};
}
removePropsCallback(props, totalFiles) {
const statusBarItem = this.addStatusBarItem();
let count = 0;
return async (file) => {
await removeProperties(
this.app.fileManager.processFrontMatter.bind(this.app.fileManager),
file,
props
);
count++;
statusBarItem.setText(
"Removed props from " + count + "/" + totalFiles + " files"
);
if (count === totalFiles) {
setTimeout(() => {
statusBarItem.remove();
}, 5e3);
}
};
}
};
/* nosourcemap */