/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet = (obj, member, getter) => { __accessCheck(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet = (obj, member, value, setter) => { __accessCheck(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; // node_modules/classnames/index.js var require_classnames = __commonJS({ "node_modules/classnames/index.js"(exports, module2) { (function() { "use strict"; var hasOwn2 = {}.hasOwnProperty; function classNames2() { var classes = ""; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; if (arg) { classes = appendClass(classes, parseValue(arg)); } } return classes; } function parseValue(arg) { if (typeof arg === "string" || typeof arg === "number") { return arg; } if (typeof arg !== "object") { return ""; } if (Array.isArray(arg)) { return classNames2.apply(null, arg); } if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes("[native code]")) { return arg.toString(); } var classes = ""; for (var key in arg) { if (hasOwn2.call(arg, key) && arg[key]) { classes = appendClass(classes, key); } } return classes; } function appendClass(value, newClass) { if (!newClass) { return value; } if (value) { return value + " " + newClass; } return value + newClass; } if (typeof module2 !== "undefined" && module2.exports) { classNames2.default = classNames2; module2.exports = classNames2; } else if (typeof define === "function" && typeof define.amd === "object" && define.amd) { define("classnames", [], function() { return classNames2; }); } else { window.classNames = classNames2; } })(); } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => Lineage }); module.exports = __toCommonJS(main_exports); var import_obsidian45 = require("obsidian"); // src/view/view.ts var import_obsidian37 = require("obsidian"); // node_modules/svelte/src/runtime/internal/utils.js function noop() { } function assign(tar, src) { for (const k in src) tar[k] = src[k]; return ( /** @type {T & S} */ tar ); } function run(fn) { return fn(); } function blank_object() { return /* @__PURE__ */ Object.create(null); } function run_all(fns) { fns.forEach(run); } function is_function(thing) { return typeof thing === "function"; } function safe_not_equal(a, b) { return a != a ? b == b : a !== b || a && typeof a === "object" || typeof a === "function"; } function is_empty(obj) { return Object.keys(obj).length === 0; } function subscribe(store, ...callbacks) { if (store == null) { for (const callback of callbacks) { callback(void 0); } return noop; } const unsub = store.subscribe(...callbacks); return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub; } function get_store_value(store) { let value; subscribe(store, (_) => value = _)(); return value; } function component_subscribe(component, store, callback) { component.$$.on_destroy.push(subscribe(store, callback)); } function create_slot(definition, ctx, $$scope, fn) { if (definition) { const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); return definition[0](slot_ctx); } } function get_slot_context(definition, ctx, $$scope, fn) { return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx; } function get_slot_changes(definition, $$scope, dirty, fn) { if (definition[2] && fn) { const lets = definition[2](fn(dirty)); if ($$scope.dirty === void 0) { return lets; } if (typeof lets === "object") { const merged = []; const len = Math.max($$scope.dirty.length, lets.length); for (let i = 0; i < len; i += 1) { merged[i] = $$scope.dirty[i] | lets[i]; } return merged; } return $$scope.dirty | lets; } return $$scope.dirty; } function update_slot_base(slot, slot_definition, ctx, $$scope, slot_changes, get_slot_context_fn) { if (slot_changes) { const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); slot.p(slot_context, slot_changes); } } function get_all_dirty_from_scope($$scope) { if ($$scope.ctx.length > 32) { const dirty = []; const length = $$scope.ctx.length / 32; for (let i = 0; i < length; i++) { dirty[i] = -1; } return dirty; } return -1; } function exclude_internal_props(props) { const result = {}; for (const k in props) if (k[0] !== "$") result[k] = props[k]; return result; } function compute_rest_props(props, keys) { const rest = {}; keys = new Set(keys); for (const k in props) if (!keys.has(k) && k[0] !== "$") rest[k] = props[k]; return rest; } function null_to_empty(value) { return value == null ? "" : value; } function action_destroyer(action_result) { return action_result && is_function(action_result.destroy) ? action_result.destroy : noop; } // node_modules/svelte/src/runtime/internal/globals.js var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : ( // @ts-ignore Node typings have this global ); // node_modules/svelte/src/runtime/internal/ResizeObserverSingleton.js var ResizeObserverSingleton = class _ResizeObserverSingleton { /** @param {ResizeObserverOptions} options */ constructor(options) { /** * @private * @readonly * @type {WeakMap} */ __publicField(this, "_listeners", "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0); /** * @private * @type {ResizeObserver} */ __publicField(this, "_observer"); /** @type {ResizeObserverOptions} */ __publicField(this, "options"); this.options = options; } /** * @param {Element} element * @param {import('./private.js').Listener} listener * @returns {() => void} */ observe(element2, listener) { this._listeners.set(element2, listener); this._getObserver().observe(element2, this.options); return () => { this._listeners.delete(element2); this._observer.unobserve(element2); }; } /** * @private */ _getObserver() { return this._observer ?? (this._observer = new ResizeObserver((entries) => { for (const entry of entries) { _ResizeObserverSingleton.entries.set(entry.target, entry); this._listeners.get(entry.target)?.(entry); } })); } }; ResizeObserverSingleton.entries = "WeakMap" in globals ? /* @__PURE__ */ new WeakMap() : void 0; // node_modules/svelte/src/runtime/internal/dom.js var is_hydrating = false; function start_hydrating() { is_hydrating = true; } function end_hydrating() { is_hydrating = false; } function append(target, node) { target.appendChild(node); } function append_styles(target, style_sheet_id, styles) { const append_styles_to = get_root_for_style(target); if (!append_styles_to.getElementById(style_sheet_id)) { const style = element("style"); style.id = style_sheet_id; style.textContent = styles; append_stylesheet(append_styles_to, style); } } function get_root_for_style(node) { if (!node) return document; const root = node.getRootNode ? node.getRootNode() : node.ownerDocument; if (root && /** @type {ShadowRoot} */ root.host) { return ( /** @type {ShadowRoot} */ root ); } return node.ownerDocument; } function append_stylesheet(node, style) { append( /** @type {Document} */ node.head || node, style ); return style.sheet; } function insert(target, node, anchor) { target.insertBefore(node, anchor || null); } function detach(node) { if (node.parentNode) { node.parentNode.removeChild(node); } } function destroy_each(iterations, detaching) { for (let i = 0; i < iterations.length; i += 1) { if (iterations[i]) iterations[i].d(detaching); } } function element(name) { return document.createElement(name); } function svg_element(name) { return document.createElementNS("http://www.w3.org/2000/svg", name); } function text(data) { return document.createTextNode(data); } function space() { return text(" "); } function empty() { return text(""); } function listen(node, event, handler, options) { node.addEventListener(event, handler, options); return () => node.removeEventListener(event, handler, options); } function attr(node, attribute, value) { if (value == null) node.removeAttribute(attribute); else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); } function set_svg_attributes(node, attributes) { for (const key in attributes) { attr(node, key, attributes[key]); } } function children(element2) { return Array.from(element2.childNodes); } function set_data(text2, data) { data = "" + data; if (text2.data === data) return; text2.data = /** @type {string} */ data; } function set_input_value(input, value) { input.value = value == null ? "" : value; } function set_style(node, key, value, important) { if (value == null) { node.style.removeProperty(key); } else { node.style.setProperty(key, value, important ? "important" : ""); } } function select_option(select, value, mounting) { for (let i = 0; i < select.options.length; i += 1) { const option = select.options[i]; if (option.__value === value) { option.selected = true; return; } } if (!mounting || value !== void 0) { select.selectedIndex = -1; } } function toggle_class(element2, name, toggle) { element2.classList.toggle(name, !!toggle); } var HtmlTag = class { constructor(is_svg = false) { /** * @private * @default false */ __publicField(this, "is_svg", false); /** parent for creating node */ __publicField(this, "e"); /** html tag nodes */ __publicField(this, "n"); /** target */ __publicField(this, "t"); /** anchor */ __publicField(this, "a"); this.is_svg = is_svg; this.e = this.n = null; } /** * @param {string} html * @returns {void} */ c(html) { this.h(html); } /** * @param {string} html * @param {HTMLElement | SVGElement} target * @param {HTMLElement | SVGElement} anchor * @returns {void} */ m(html, target, anchor = null) { if (!this.e) { if (this.is_svg) this.e = svg_element( /** @type {keyof SVGElementTagNameMap} */ target.nodeName ); else this.e = element( /** @type {keyof HTMLElementTagNameMap} */ target.nodeType === 11 ? "TEMPLATE" : target.nodeName ); this.t = target.tagName !== "TEMPLATE" ? target : ( /** @type {HTMLTemplateElement} */ target.content ); this.c(html); } this.i(anchor); } /** * @param {string} html * @returns {void} */ h(html) { this.e.innerHTML = html; this.n = Array.from( this.e.nodeName === "TEMPLATE" ? this.e.content.childNodes : this.e.childNodes ); } /** * @returns {void} */ i(anchor) { for (let i = 0; i < this.n.length; i += 1) { insert(this.t, this.n[i], anchor); } } /** * @param {string} html * @returns {void} */ p(html) { this.d(); this.h(html); this.i(this.a); } /** * @returns {void} */ d() { this.n.forEach(detach); } }; function get_custom_elements_slots(element2) { const result = {}; element2.childNodes.forEach( /** @param {Element} node */ (node) => { result[node.slot || "default"] = true; } ); return result; } function construct_svelte_component(component, props) { return new component(props); } // node_modules/svelte/src/runtime/internal/lifecycle.js var current_component; function set_current_component(component) { current_component = component; } function get_current_component() { if (!current_component) throw new Error("Function called outside component initialization"); return current_component; } function onMount(fn) { get_current_component().$$.on_mount.push(fn); } function onDestroy(fn) { get_current_component().$$.on_destroy.push(fn); } function setContext(key, context) { get_current_component().$$.context.set(key, context); return context; } function getContext(key) { return get_current_component().$$.context.get(key); } function bubble(component, event) { const callbacks = component.$$.callbacks[event.type]; if (callbacks) { callbacks.slice().forEach((fn) => fn.call(this, event)); } } // node_modules/svelte/src/runtime/internal/scheduler.js var dirty_components = []; var binding_callbacks = []; var render_callbacks = []; var flush_callbacks = []; var resolved_promise = /* @__PURE__ */ Promise.resolve(); var update_scheduled = false; function schedule_update() { if (!update_scheduled) { update_scheduled = true; resolved_promise.then(flush); } } function add_render_callback(fn) { render_callbacks.push(fn); } var seen_callbacks = /* @__PURE__ */ new Set(); var flushidx = 0; function flush() { if (flushidx !== 0) { return; } const saved_component = current_component; do { try { while (flushidx < dirty_components.length) { const component = dirty_components[flushidx]; flushidx++; set_current_component(component); update(component.$$); } } catch (e) { dirty_components.length = 0; flushidx = 0; throw e; } set_current_component(null); dirty_components.length = 0; flushidx = 0; while (binding_callbacks.length) binding_callbacks.pop()(); for (let i = 0; i < render_callbacks.length; i += 1) { const callback = render_callbacks[i]; if (!seen_callbacks.has(callback)) { seen_callbacks.add(callback); callback(); } } render_callbacks.length = 0; } while (dirty_components.length); while (flush_callbacks.length) { flush_callbacks.pop()(); } update_scheduled = false; seen_callbacks.clear(); set_current_component(saved_component); } function update($$) { if ($$.fragment !== null) { $$.update(); run_all($$.before_update); const dirty = $$.dirty; $$.dirty = [-1]; $$.fragment && $$.fragment.p($$.ctx, dirty); $$.after_update.forEach(add_render_callback); } } function flush_render_callbacks(fns) { const filtered = []; const targets2 = []; render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets2.push(c)); targets2.forEach((c) => c()); render_callbacks = filtered; } // node_modules/svelte/src/runtime/internal/transitions.js var outroing = /* @__PURE__ */ new Set(); var outros; function group_outros() { outros = { r: 0, c: [], p: outros // parent group }; } function check_outros() { if (!outros.r) { run_all(outros.c); } outros = outros.p; } function transition_in(block, local) { if (block && block.i) { outroing.delete(block); block.i(local); } } function transition_out(block, local, detach2, callback) { if (block && block.o) { if (outroing.has(block)) return; outroing.add(block); outros.c.push(() => { outroing.delete(block); if (callback) { if (detach2) block.d(1); callback(); } }); block.o(local); } else if (callback) { callback(); } } // node_modules/svelte/src/runtime/internal/each.js function ensure_array_like(array_like_or_iterator) { return array_like_or_iterator?.length !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator); } function outro_and_destroy_block(block, lookup) { transition_out(block, 1, 1, () => { lookup.delete(block.key); }); } function update_keyed_each(old_blocks, dirty, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block18, next, get_context) { let o = old_blocks.length; let n = list.length; let i = o; const old_indexes = {}; while (i--) old_indexes[old_blocks[i].key] = i; const new_blocks = []; const new_lookup = /* @__PURE__ */ new Map(); const deltas = /* @__PURE__ */ new Map(); const updates = []; i = n; while (i--) { const child_ctx = get_context(ctx, list, i); const key = get_key(child_ctx); let block = lookup.get(key); if (!block) { block = create_each_block18(key, child_ctx); block.c(); } else if (dynamic) { updates.push(() => block.p(child_ctx, dirty)); } new_lookup.set(key, new_blocks[i] = block); if (key in old_indexes) deltas.set(key, Math.abs(i - old_indexes[key])); } const will_move = /* @__PURE__ */ new Set(); const did_move = /* @__PURE__ */ new Set(); function insert2(block) { transition_in(block, 1); block.m(node, next); lookup.set(block.key, block); next = block.first; n--; } while (o && n) { const new_block = new_blocks[n - 1]; const old_block = old_blocks[o - 1]; const new_key = new_block.key; const old_key = old_block.key; if (new_block === old_block) { next = new_block.first; o--; n--; } else if (!new_lookup.has(old_key)) { destroy(old_block, lookup); o--; } else if (!lookup.has(new_key) || will_move.has(new_key)) { insert2(new_block); } else if (did_move.has(old_key)) { o--; } else if (deltas.get(new_key) > deltas.get(old_key)) { did_move.add(new_key); insert2(new_block); } else { will_move.add(old_key); o--; } } while (o--) { const old_block = old_blocks[o]; if (!new_lookup.has(old_block.key)) destroy(old_block, lookup); } while (n) insert2(new_blocks[n - 1]); run_all(updates); return new_blocks; } // node_modules/svelte/src/runtime/internal/spread.js function get_spread_update(levels, updates) { const update2 = {}; const to_null_out = {}; const accounted_for = { $$scope: 1 }; let i = levels.length; while (i--) { const o = levels[i]; const n = updates[i]; if (n) { for (const key in o) { if (!(key in n)) to_null_out[key] = 1; } for (const key in n) { if (!accounted_for[key]) { update2[key] = n[key]; accounted_for[key] = 1; } } levels[i] = n; } else { for (const key in o) { accounted_for[key] = 1; } } } for (const key in to_null_out) { if (!(key in update2)) update2[key] = void 0; } return update2; } function get_spread_object(spread_props) { return typeof spread_props === "object" && spread_props !== null ? spread_props : {}; } // node_modules/svelte/src/shared/boolean_attributes.js var _boolean_attributes = ( /** @type {const} */ [ "allowfullscreen", "allowpaymentrequest", "async", "autofocus", "autoplay", "checked", "controls", "default", "defer", "disabled", "formnovalidate", "hidden", "inert", "ismap", "loop", "multiple", "muted", "nomodule", "novalidate", "open", "playsinline", "readonly", "required", "reversed", "selected" ] ); var boolean_attributes = /* @__PURE__ */ new Set([..._boolean_attributes]); // node_modules/svelte/src/runtime/internal/Component.js function create_component(block) { block && block.c(); } function mount_component(component, target, anchor) { const { fragment, after_update } = component.$$; fragment && fragment.m(target, anchor); add_render_callback(() => { const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); if (component.$$.on_destroy) { component.$$.on_destroy.push(...new_on_destroy); } else { run_all(new_on_destroy); } component.$$.on_mount = []; }); after_update.forEach(add_render_callback); } function destroy_component(component, detaching) { const $$ = component.$$; if ($$.fragment !== null) { flush_render_callbacks($$.after_update); run_all($$.on_destroy); $$.fragment && $$.fragment.d(detaching); $$.on_destroy = $$.fragment = null; $$.ctx = []; } } function make_dirty(component, i) { if (component.$$.dirty[0] === -1) { dirty_components.push(component); schedule_update(); component.$$.dirty.fill(0); } component.$$.dirty[i / 31 | 0] |= 1 << i % 31; } function init(component, options, instance111, create_fragment114, not_equal, props, append_styles2 = null, dirty = [-1]) { const parent_component = current_component; set_current_component(component); const $$ = component.$$ = { fragment: null, ctx: [], // state props, update: noop, not_equal, bound: blank_object(), // lifecycle on_mount: [], on_destroy: [], on_disconnect: [], before_update: [], after_update: [], context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), // everything else callbacks: blank_object(), dirty, skip_bound: false, root: options.target || parent_component.$$.root }; append_styles2 && append_styles2($$.root); let ready = false; $$.ctx = instance111 ? instance111(component, options.props || {}, (i, ret, ...rest) => { const value = rest.length ? rest[0] : ret; if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) { if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); if (ready) make_dirty(component, i); } return ret; }) : []; $$.update(); ready = true; run_all($$.before_update); $$.fragment = create_fragment114 ? create_fragment114($$.ctx) : false; if (options.target) { if (options.hydrate) { start_hydrating(); const nodes = children(options.target); $$.fragment && $$.fragment.l(nodes); nodes.forEach(detach); } else { $$.fragment && $$.fragment.c(); } if (options.intro) transition_in(component.$$.fragment); mount_component(component, options.target, options.anchor); end_hydrating(); flush(); } set_current_component(parent_component); } var SvelteElement; if (typeof HTMLElement === "function") { SvelteElement = class extends HTMLElement { constructor($$componentCtor, $$slots, use_shadow_dom) { super(); /** The Svelte component constructor */ __publicField(this, "$$ctor"); /** Slots */ __publicField(this, "$$s"); /** The Svelte component instance */ __publicField(this, "$$c"); /** Whether or not the custom element is connected */ __publicField(this, "$$cn", false); /** Component props data */ __publicField(this, "$$d", {}); /** `true` if currently in the process of reflecting component props back to attributes */ __publicField(this, "$$r", false); /** @type {Record} Props definition (name, reflected, type etc) */ __publicField(this, "$$p_d", {}); /** @type {Record} Event listeners */ __publicField(this, "$$l", {}); /** @type {Map} Event listener unsubscribe functions */ __publicField(this, "$$l_u", /* @__PURE__ */ new Map()); this.$$ctor = $$componentCtor; this.$$s = $$slots; if (use_shadow_dom) { this.attachShadow({ mode: "open" }); } } 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); } 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_slot2 = function(name) { return () => { let node; const obj = { c: function create() { node = element("slot"); if (name !== "default") { attr(node, "name", name); } }, /** * @param {HTMLElement} target * @param {HTMLElement} [anchor] */ m: function mount(target, anchor) { insert(target, node, anchor); }, d: function destroy(detaching) { if (detaching) { detach(node); } } }; return obj; }; }; 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) { $$slots[name] = [create_slot2(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 key in this.$$p_d) { if (!(key in this.$$d) && this[key] !== void 0) { this.$$d[key] = this[key]; delete this[key]; } } this.$$c = new this.$$ctor({ target: this.shadowRoot || this, props: { ...this.$$d, $$slots, $$scope: { ctx: [] } } }); const reflect_attributes = () => { this.$$r = true; for (const key in this.$$p_d) { this.$$d[key] = this.$$c.$$.ctx[this.$$c.$$.props[key]]; if (this.$$p_d[key].reflect) { const attribute_value = get_custom_element_value( key, this.$$d[key], this.$$p_d, "toAttribute" ); if (attribute_value == null) { this.removeAttribute(this.$$p_d[key].attribute || key); } else { this.setAttribute(this.$$p_d[key].attribute || key, attribute_value); } } } this.$$r = false; }; this.$$c.$$.after_update.push(reflect_attributes); reflect_attributes(); 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 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.$destroy(); this.$$c = void 0; } }); } $$g_p(attribute_name) { return Object.keys(this.$$p_d).find( (key) => this.$$p_d[key].attribute === attribute_name || !this.$$p_d[key].attribute && key.toLowerCase() === attribute_name ) || attribute_name; } }; } function get_custom_element_value(prop, value, props_definition, transform) { const type = props_definition[prop]?.type; value = type === "Boolean" && typeof value !== "boolean" ? value != null : value; if (!transform || !props_definition[prop]) { 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; case "Number": return value != null ? +value : value; default: return value; } } } var SvelteComponent = class { constructor() { /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$"); /** * ### PRIVATE API * * Do not use, may change at any time * * @type {any} */ __publicField(this, "$$set"); } /** @returns {void} */ $destroy() { destroy_component(this, 1); this.$destroy = noop; } /** * @template {Extract} K * @param {K} type * @param {((e: Events[K]) => void) | null | undefined} callback * @returns {() => void} */ $on(type, callback) { if (!is_function(callback)) { return noop; } const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); callbacks.push(callback); return () => { const index = callbacks.indexOf(callback); if (index !== -1) callbacks.splice(index, 1); }; } /** * @param {Partial} props * @returns {void} */ $set(props) { if (this.$$set && !is_empty(props)) { this.$$.skip_bound = true; this.$$set(props); this.$$.skip_bound = false; } } }; // node_modules/svelte/src/shared/version.js var PUBLIC_VERSION = "4"; // node_modules/svelte/src/runtime/internal/disclose-version/index.js if (typeof window !== "undefined") (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION); // src/lang/lang.ts var lang = { // open ocm_open_in_editor: "Open in editor", ocm_open_in_lineage: "Open in Lineage", cmd_toggle_lineage_view: "Toggle view", card_btn_reveal_in_editor: "Reveal in editor", error_parent_not_found: (full) => `Could not find the parent section of ${full}`, modals_snapshots_document_loaded: "Opened document", error_set_empty_data: "Data is empty, but the file on disk is not", error_save_empty_data: "Can't save empty data", // create document cmd_create_new_document: "Create new document", ocm_new_document: "New document", ocm_import_from_gingko: "Import from Gingko", // add cards hk_add_below_and_split: "Add card below and split at cursor", card_btn_add_card_below: "Add card below", hk_add_above_and_split: "Add card above and split at cursor", card_btn_add_card_above: "Add card above", hk_add_child_and_split: "Add child card and split at cursor", card_btn_add_child_card: "Add child card", hkg_create_cards: "Create cards", modals_snapshots_created_card: "Created card ", // edit settings_general_maintain_edit_mode: "Maintain edit mode", settings_general_maintain_edit_mode_desc: "Keeps edit mode active when switching to a different card using the mouse or keyboard", card_btn_edit: "Edit", hk_enable_edit_mode: "Edit card", hk_enable_edit_mode_and_place_cursor_at_start: "Edit card and place cursor at the start", hk_enable_edit_mode_and_place_cursor_at_end: "Edit card and place cursor at the end", hkg_edit_cards: "Edit cards", modals_snapshots_updated_card: "Updated card ", modal_hk_editor_state_on: "Enable only when the editor is active", modal_hk_editor_state_off: "Enable only when the editor is inactive", modal_hk_editor_state_both: "Enable regardless of the editor's state", // save card_btn_save: "Save", hk_save_changes: "Save changes and exit card", hk_disable_edit_mode: "Cancel changes", // delete card_btn_delete: "Delete", hk_delete_card: "Delete card", error_delete_last_node: "Cannot delete this card", hkg_delete_cards: "Delete cards", modals_snapshots_deleted_card: "Deleted card ", // copy cm_copy: "Copy", cm_copy_branches: "Copy branches", cm_copy_branch: "Copy branch", cm_copy_branches_wo_formatting: "Copy branches without formatting", cm_copy_branch_wo_formatting: "Copy branch without formatting", cm_copy_section_wo_subitems: "Copy sections without sub-items", cm_copy_sections_wo_subitems: "Copy section without sub-items", hk_copy_node: "Copy branch", hk_copy_node_unformatted: "Copy branch without formatting", hk_copy_node_without_subitems: "Copy without subitems", cm_copy_link_to_block: "Copy link to block", hkg_clipboard: "Clipboard", hk_notice_copy: (size, formatted, type) => { if (size === 0) return null; return type === "branch" ? size === 1 ? formatted ? null : "Unformatted branch copied to clipboard" : formatted ? `${size} branches copied to clipboard` : `${size} unformatted branches copied to clipboard` : size === 1 ? null : size + " sections copied to clipboard"; }, // cut paste cm_cut: "Cut branch", hk_cut_node: "Cut branch", cm_paste: "Paste", hk_paste_node: "Paste branch", modals_snapshots_cut_card: "Cut card ", modals_snapshots_pasted_card: "Pasted card ", error_cant_paste: "Paste command failed. Try pasting directly into a card", // merge cm_merge_above: "Merge with branch above", cm_merge_below: "Merge with branch below", hk_merge_with_node_above: "Merge with branch above", hk_merge_with_node_below: "Merge with branch below", error_hk_cant_merge_multiple_nodes: "Cannot merge multiple cards", hkg_merge_cards: "Merge cards", modals_snapshots_merged_card: "Merged card ", // move hk_move_node_up: "Move branch up", hk_move_node_down: "Move branch down", hk_move_node_right: "Move branch right", hk_move_node_left: "Move branch left", hkg_move_cards: "Move cards", modals_snapshots_moved_card: "Moved branch ", // dnd modals_snapshots_dropped_card: "Dropped card ", // split cm_split_card: "Split card", error_cm_cant_split_card_that_has_children: "Cannot split a card that has children", error_cm_cant_split_card_identical: "The result is the same as the input", modals_snapshots_split_card: "Split card ", // undo controls_history: "History", controls_history_undo: "Undo", controls_history_redo: "Redo", hk_undo_change: "Undo change", hk_redo_change: "Redo change", error_apply_snapshot_while_editing: "Cannot apply a snapshot while editing", hkg_history: "History", // extract cmd_extract_branch: "Extract branch to a new document", cm_extract_branch: "Extract branch", modals_snapshots_extracted_card: "Extracted card ", // export cm_export_document: "Export document", cm_export_column: "Export column", // document format settings_general_default_format: "Default format", settings_general_default_format_desc: "Applies to new documents", settings_format_html_elements: "HTML elements (experimental)", settings_format_html_comments: "HTML comments", settings_format_outline: "Outline", cm_change_format_to_html_element: "Format: HTML elements (experimental)", cm_change_format_to_document: "Format: HTML comments", cm_change_format_to_outline: "Format: outline", // format cm_format_headings: "Format headings", modals_snapshots_formatted_headings: "Formatted headings", // search tlb_search_toggle: "Toggle search input", tlb_search_show_all_cards: "Show all cards", tlb_search_fuzzy_search: "Fuzzy search", tlb_search_previous_result: "Previous result", tlb_search_next_result: "Next result", tlb_search_clear: "Clear", hk_toggle_search_input: "Toggle search", hkg_search: "Search", // select hk_extend_select_up: "Extend selection up", hk_extend_select_down: "Extend selection down", hk_extend_select_to_start_of_group: "Extend selection to start of group", hk_extend_select_to_end_of_group: "Extend selection to end of group", hk_extend_select_to_start_of_column: "Extend selection to start of column", hk_extend_select_to_end_of_column: "Extend selection to end of column", hkg_selection: "Selection", // navigate spatially hk_navigate_to_next_node: "Select next card", hk_navigate_to_previous_node: "Select previous card", hk_go_up: "Go up", hk_go_down: "Go down", hk_go_right: "Go right", hk_go_Left: "Go left", hk_go_to_beginning_of_group: "Go to start of group", hk_go_to_end_of_group: "Go to end of group", hk_go_to_beginning_of_column: "Go to start of column", hk_go_to_end_of_column: "Go to end of column", hk_select_parent: "Select parent card", hkg_navigation: "Navigation", hk_select_previous_sibling: "Select previous sibling", hk_select_next_sibling: "Select next sibling", // navigate node history hk_navigate_back: "Navigate back", hk_navigate_forward: "Navigate forward", tlb_navigation_navigate_back: "Navigate back", tlb_navigation_navigate_forward: "Navigate forward", // zoom controls_zoom_in: "Zoom in", controls_zoom_out: "Zoom out", controls_zoom_reset: "Reset (hold shift to undo)", controls_zoom_presets: "", hk_zoom_in: "Zoom in", hk_zoom_out: "Zoom out", hk_zoom_reset: "Reset zoom", hkg_zoom: "Zoom", // scroll hk_scroll_left: "Scroll left", hk_scroll_right: "Scroll right", hk_scroll_up: "Scroll up", hk_scroll_down: "Scroll down", hk_align_branch: "Align active branch", controls_toggle_scrolling_mode_horizontal: "Always center active card horizontally", controls_toggle_scrolling_mode_vertical: "Always center active card vertically", cmd_toggle_horizontal_scrolling_mode: `Toggle 'always center active card horizontally'`, cmd_toggle_vertical_scrolling_mode: `Toggle 'always center active card vertically'`, card_btn_scroll_to_reveal: "Scroll to reveal", hkg_scrolling: "Align branch", // theme settings_theme_bg: "Background color", settings_theme_active_branch_bg: "Active branch background color", settings_theme_active_branch_color: "Active branch text color", settings_appearance_font_size: "Font size", settings_appearance_inactive_node_opacity: "Inactive cards opacity", // layout settings_layout_card_width: "Card width", settings_layout_limit_card_height: "Limit card height", settings_always_show_card_buttons: "Show buttons on all cards", settings_always_show_card_buttons_desc: "Show card buttons on all cards, not just the active one", // outline settings_layout_indentation_width: "Card indentation", settings_layout_indentation_width_desc: "Applicable in 'outline mode'", controls_single_column: "Outline mode", hk_toggle_outline_mode: `Toggle outline mode`, card_btn_collapse_card: "Collapse", card_btn_expand_card: "Expand", hk_outline_toggle_collapse: "Collapse/expand card", hk_outline_toggle_collapse_all: "Collapse/expand all cards", hkg_outline: "Outline", // space between cards controls_gap_between_cards: "Space between cards", cmd_space_between_cards: `Toggle 'space between cards'`, settings_layout_space_between_cards: "Space between cards", settings_layout_space_between_cards_desc: "Applicable when spaces are enabled", // sidebar toolbar_toggle_left_sidebar: "Left sidebar", controls_toggle_minimap: "Document minimap", cmd_toggle_minimap: "Toggle document minimap", cmd_toggle_left_sidebar: "Toggle left sidebar", // recent cards sidebar_tab_recent_cards: "Recent cards", sidebar_no_recent_cards: "No recent cards", // pin cards cm_unpin_from_left_sidebar: "Unpin from left sidebar", cm_pin_in_left_sidebar: "Pin in left sidebar", cmd_toggle_pin_in_left_sidebar: `Toggle 'pin card in left sidebar'`, sidebar_tab_pinned_cards: "Pinned cards", sidebar_no_pinned_cards: "No pinned cards", // rules modals_rules_add_rule: "Add rule", modals_rules_no_rules: "No rules", controls_rules: "Rule-based styles", modals_rules_matches: "Number of matches", modals_rules_drag_handle: "Change priority", // settings controls_settings: "Settings", controls_toggle_bar: "Toggle controls bar", settings_appearance: "Appearance", settings_layout: "Layout", settings_reset: "Reset", // hotkeys modals_hk_input_placeholder: "Filter", modals_hk_editor_cancel: "Cancel", controls_hotkeys: "Hotkeys", modals_hk_reset_hotkeys: "Reset all hotkeys", modals_hk_load_alt_hotkeys_preset: "Apply preset: use 'Alt' as the primary modifier", modals_hk_load_nav_while_editing_preset: "Apply preset: navigate while editing using 'Alt+Shift+Arrow keys'", error_generic: "Something went wrong\nYou might find additional details in the developer console" }; // node_modules/lucide-svelte/dist/defaultAttributes.js var defaultAttributes = { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }; var defaultAttributes_default = defaultAttributes; // node_modules/lucide-svelte/dist/Icon.svelte function get_each_context(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[10] = list[i][0]; child_ctx[11] = list[i][1]; return child_ctx; } function create_dynamic_element(ctx) { let svelte_element; let svelte_element_levels = [ /*attrs*/ ctx[11] ]; let svelte_element_data = {}; for (let i = 0; i < svelte_element_levels.length; i += 1) { svelte_element_data = assign(svelte_element_data, svelte_element_levels[i]); } return { c() { svelte_element = svg_element( /*tag*/ ctx[10] ); set_svg_attributes(svelte_element, svelte_element_data); }, m(target, anchor) { insert(target, svelte_element, anchor); }, p(ctx2, dirty) { set_svg_attributes(svelte_element, svelte_element_data = get_spread_update(svelte_element_levels, [dirty & /*iconNode*/ 32 && /*attrs*/ ctx2[11]])); }, d(detaching) { if (detaching) { detach(svelte_element); } } }; } function create_each_block(ctx) { let previous_tag = ( /*tag*/ ctx[10] ); let svelte_element_anchor; let svelte_element = ( /*tag*/ ctx[10] && create_dynamic_element(ctx) ); return { c() { if (svelte_element) svelte_element.c(); svelte_element_anchor = empty(); }, m(target, anchor) { if (svelte_element) svelte_element.m(target, anchor); insert(target, svelte_element_anchor, anchor); }, p(ctx2, dirty) { if ( /*tag*/ ctx2[10] ) { if (!previous_tag) { svelte_element = create_dynamic_element(ctx2); previous_tag = /*tag*/ ctx2[10]; svelte_element.c(); svelte_element.m(svelte_element_anchor.parentNode, svelte_element_anchor); } else if (safe_not_equal( previous_tag, /*tag*/ ctx2[10] )) { svelte_element.d(1); svelte_element = create_dynamic_element(ctx2); previous_tag = /*tag*/ ctx2[10]; svelte_element.c(); svelte_element.m(svelte_element_anchor.parentNode, svelte_element_anchor); } else { svelte_element.p(ctx2, dirty); } } else if (previous_tag) { svelte_element.d(1); svelte_element = null; previous_tag = /*tag*/ ctx2[10]; } }, d(detaching) { if (detaching) { detach(svelte_element_anchor); } if (svelte_element) svelte_element.d(detaching); } }; } function create_fragment(ctx) { let svg; let each_1_anchor; let svg_stroke_width_value; let svg_class_value; let current; let each_value = ensure_array_like( /*iconNode*/ ctx[5] ); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); } const default_slot_template = ( /*#slots*/ ctx[9].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[8], null ); let svg_levels = [ defaultAttributes_default, /*$$restProps*/ ctx[6], { width: ( /*size*/ ctx[2] ) }, { height: ( /*size*/ ctx[2] ) }, { stroke: ( /*color*/ ctx[1] ) }, { "stroke-width": svg_stroke_width_value = /*absoluteStrokeWidth*/ ctx[4] ? Number( /*strokeWidth*/ ctx[3] ) * 24 / Number( /*size*/ ctx[2] ) : ( /*strokeWidth*/ ctx[3] ) }, { class: svg_class_value = `lucide-icon lucide lucide-${/*name*/ ctx[0]} ${/*$$props*/ ctx[7].class ?? ""}` } ]; let svg_data = {}; for (let i = 0; i < svg_levels.length; i += 1) { svg_data = assign(svg_data, svg_levels[i]); } return { c() { svg = svg_element("svg"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); if (default_slot) default_slot.c(); set_svg_attributes(svg, svg_data); }, m(target, anchor) { insert(target, svg, anchor); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(svg, null); } } append(svg, each_1_anchor); if (default_slot) { default_slot.m(svg, null); } current = true; }, p(ctx2, [dirty]) { if (dirty & /*iconNode*/ 32) { each_value = ensure_array_like( /*iconNode*/ ctx2[5] ); let i; for (i = 0; i < each_value.length; i += 1) { const child_ctx = get_each_context(ctx2, each_value, i); if (each_blocks[i]) { each_blocks[i].p(child_ctx, dirty); } else { each_blocks[i] = create_each_block(child_ctx); each_blocks[i].c(); each_blocks[i].m(svg, each_1_anchor); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].d(1); } each_blocks.length = each_value.length; } if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 256)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[8], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[8] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[8], dirty, null ), null ); } } set_svg_attributes(svg, svg_data = get_spread_update(svg_levels, [ defaultAttributes_default, dirty & /*$$restProps*/ 64 && /*$$restProps*/ ctx2[6], (!current || dirty & /*size*/ 4) && { width: ( /*size*/ ctx2[2] ) }, (!current || dirty & /*size*/ 4) && { height: ( /*size*/ ctx2[2] ) }, (!current || dirty & /*color*/ 2) && { stroke: ( /*color*/ ctx2[1] ) }, (!current || dirty & /*absoluteStrokeWidth, strokeWidth, size*/ 28 && svg_stroke_width_value !== (svg_stroke_width_value = /*absoluteStrokeWidth*/ ctx2[4] ? Number( /*strokeWidth*/ ctx2[3] ) * 24 / Number( /*size*/ ctx2[2] ) : ( /*strokeWidth*/ ctx2[3] ))) && { "stroke-width": svg_stroke_width_value }, (!current || dirty & /*name, $$props*/ 129 && svg_class_value !== (svg_class_value = `lucide-icon lucide lucide-${/*name*/ ctx2[0]} ${/*$$props*/ ctx2[7].class ?? ""}`)) && { class: svg_class_value } ])); }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(svg); } destroy_each(each_blocks, detaching); if (default_slot) default_slot.d(detaching); } }; } function instance($$self, $$props, $$invalidate) { const omit_props_names = ["name", "color", "size", "strokeWidth", "absoluteStrokeWidth", "iconNode"]; let $$restProps = compute_rest_props($$props, omit_props_names); let { $$slots: slots = {}, $$scope } = $$props; let { name } = $$props; let { color = "currentColor" } = $$props; let { size = 24 } = $$props; let { strokeWidth = 2 } = $$props; let { absoluteStrokeWidth = false } = $$props; let { iconNode } = $$props; $$self.$$set = ($$new_props) => { $$invalidate(7, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); $$invalidate(6, $$restProps = compute_rest_props($$props, omit_props_names)); if ("name" in $$new_props) $$invalidate(0, name = $$new_props.name); if ("color" in $$new_props) $$invalidate(1, color = $$new_props.color); if ("size" in $$new_props) $$invalidate(2, size = $$new_props.size); if ("strokeWidth" in $$new_props) $$invalidate(3, strokeWidth = $$new_props.strokeWidth); if ("absoluteStrokeWidth" in $$new_props) $$invalidate(4, absoluteStrokeWidth = $$new_props.absoluteStrokeWidth); if ("iconNode" in $$new_props) $$invalidate(5, iconNode = $$new_props.iconNode); if ("$$scope" in $$new_props) $$invalidate(8, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [ name, color, size, strokeWidth, absoluteStrokeWidth, iconNode, $$restProps, $$props, $$scope, slots ]; } var Icon = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance, create_fragment, safe_not_equal, { name: 0, color: 1, size: 2, strokeWidth: 3, absoluteStrokeWidth: 4, iconNode: 5 }); } }; var Icon_default = Icon; // node_modules/lucide-svelte/dist/icons/arrow-left.svelte function create_default_slot(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment2(ctx) { let icon; let current; const icon_spread_levels = [ { name: "arrow-left" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance2($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "m12 19-7-7 7-7" }], ["path", { "d": "M19 12H5" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Arrow_left = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance2, create_fragment2, safe_not_equal, {}); } }; var arrow_left_default = Arrow_left; // node_modules/lucide-svelte/dist/icons/arrow-right.svelte function create_default_slot2(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment3(ctx) { let icon; let current; const icon_spread_levels = [ { name: "arrow-right" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot2] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance3($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "M5 12h14" }], ["path", { "d": "m12 5 7 7-7 7" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Arrow_right = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance3, create_fragment3, safe_not_equal, {}); } }; var arrow_right_default = Arrow_right; // node_modules/lucide-svelte/dist/icons/chevron-down.svelte function create_default_slot3(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment4(ctx) { let icon; let current; const icon_spread_levels = [ { name: "chevron-down" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot3] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance4($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "m6 9 6 6 6-6" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Chevron_down = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance4, create_fragment4, safe_not_equal, {}); } }; var chevron_down_default = Chevron_down; // node_modules/lucide-svelte/dist/icons/chevron-right.svelte function create_default_slot4(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment5(ctx) { let icon; let current; const icon_spread_levels = [ { name: "chevron-right" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot4] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance5($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "m9 18 6-6-6-6" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Chevron_right = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance5, create_fragment5, safe_not_equal, {}); } }; var chevron_right_default = Chevron_right; // node_modules/lucide-svelte/dist/icons/chevron-up.svelte function create_default_slot5(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment6(ctx) { let icon; let current; const icon_spread_levels = [ { name: "chevron-up" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot5] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance6($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "m18 15-6-6-6 6" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Chevron_up = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance6, create_fragment6, safe_not_equal, {}); } }; var chevron_up_default = Chevron_up; // node_modules/lucide-svelte/dist/icons/clipboard-paste.svelte function create_default_slot6(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment7(ctx) { let icon; let current; const icon_spread_levels = [ { name: "clipboard-paste" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot6] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance7($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M15 2H9a1 1 0 0 0-1 1v2c0 .6.4 1 1 1h6c.6 0 1-.4 1-1V3c0-.6-.4-1-1-1Z" } ], [ "path", { "d": "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2M16 4h2a2 2 0 0 1 2 2v2M11 14h10" } ], ["path", { "d": "m17 10 4 4-4 4" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Clipboard_paste = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance7, create_fragment7, safe_not_equal, {}); } }; var clipboard_paste_default = Clipboard_paste; // node_modules/lucide-svelte/dist/icons/clock.svelte function create_default_slot7(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment8(ctx) { let icon; let current; const icon_spread_levels = [ { name: "clock" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot7] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance8($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "12", "cy": "12", "r": "10" }], ["polyline", { "points": "12 6 12 12 16 14" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Clock = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance8, create_fragment8, safe_not_equal, {}); } }; var clock_default = Clock; // node_modules/lucide-svelte/dist/icons/eye.svelte function create_default_slot8(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment9(ctx) { let icon; let current; const icon_spread_levels = [ { name: "eye" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot8] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance9($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" } ], ["circle", { "cx": "12", "cy": "12", "r": "3" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Eye = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance9, create_fragment9, safe_not_equal, {}); } }; var eye_default = Eye; // node_modules/lucide-svelte/dist/icons/file-minus.svelte function create_default_slot9(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment10(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-minus" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot9] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance10($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" } ], ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], ["path", { "d": "M9 15h6" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_minus = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance10, create_fragment10, safe_not_equal, {}); } }; var file_minus_default = File_minus; // node_modules/lucide-svelte/dist/icons/file-output.svelte function create_default_slot10(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment11(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-output" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot10] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance11($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], [ "path", { "d": "M4 7V4a2 2 0 0 1 2-2 2 2 0 0 0-2 2" } ], [ "path", { "d": "M4.063 20.999a2 2 0 0 0 2 1L18 22a2 2 0 0 0 2-2V7l-5-5H6" } ], ["path", { "d": "m5 11-3 3" }], ["path", { "d": "m5 17-3-3h10" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_output = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance11, create_fragment11, safe_not_equal, {}); } }; var file_output_default = File_output; // node_modules/lucide-svelte/dist/icons/file-pen.svelte function create_default_slot11(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment12(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-pen" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot11] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance12($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M12 22h6a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v10" } ], ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], [ "path", { "d": "M10.4 12.6a2 2 0 1 1 3 3L8 21l-4 1 1-4Z" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_pen = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance12, create_fragment12, safe_not_equal, {}); } }; var file_pen_default = File_pen; // node_modules/lucide-svelte/dist/icons/file-plus.svelte function create_default_slot12(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment13(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-plus" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot12] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance13($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" } ], ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], ["path", { "d": "M9 15h6" }], ["path", { "d": "M12 18v-6" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_plus = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance13, create_fragment13, safe_not_equal, {}); } }; var file_plus_default = File_plus; // node_modules/lucide-svelte/dist/icons/file-symlink.svelte function create_default_slot13(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment14(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-symlink" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot13] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance14($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "m10 18 3-3-3-3" }], ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], [ "path", { "d": "M4 11V4a2 2 0 0 1 2-2h9l5 5v13a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h7" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_symlink = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance14, create_fragment14, safe_not_equal, {}); } }; var file_symlink_default = File_symlink; // node_modules/lucide-svelte/dist/icons/file-up.svelte function create_default_slot14(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment15(ctx) { let icon; let current; const icon_spread_levels = [ { name: "file-up" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot14] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance15($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" } ], ["path", { "d": "M14 2v4a2 2 0 0 0 2 2h4" }], ["path", { "d": "M12 12v6" }], ["path", { "d": "m15 15-3-3-3 3" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var File_up = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance15, create_fragment15, safe_not_equal, {}); } }; var file_up_default = File_up; // node_modules/lucide-svelte/dist/icons/focus.svelte function create_default_slot15(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment16(ctx) { let icon; let current; const icon_spread_levels = [ { name: "focus" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot15] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance16($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "12", "cy": "12", "r": "3" }], ["path", { "d": "M3 7V5a2 2 0 0 1 2-2h2" }], ["path", { "d": "M17 3h2a2 2 0 0 1 2 2v2" }], ["path", { "d": "M21 17v2a2 2 0 0 1-2 2h-2" }], ["path", { "d": "M7 21H5a2 2 0 0 1-2-2v-2" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Focus = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance16, create_fragment16, safe_not_equal, {}); } }; var focus_default = Focus; // node_modules/lucide-svelte/dist/icons/grip-vertical.svelte function create_default_slot16(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment17(ctx) { let icon; let current; const icon_spread_levels = [ { name: "grip-vertical" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot16] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance17($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "9", "cy": "12", "r": "1" }], ["circle", { "cx": "9", "cy": "5", "r": "1" }], ["circle", { "cx": "9", "cy": "19", "r": "1" }], ["circle", { "cx": "15", "cy": "12", "r": "1" }], ["circle", { "cx": "15", "cy": "5", "r": "1" }], ["circle", { "cx": "15", "cy": "19", "r": "1" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Grip_vertical = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance17, create_fragment17, safe_not_equal, {}); } }; var grip_vertical_default = Grip_vertical; // node_modules/lucide-svelte/dist/icons/heading-1.svelte function create_default_slot17(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment18(ctx) { let icon; let current; const icon_spread_levels = [ { name: "heading-1" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot17] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance18($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M4 12h8" }], ["path", { "d": "M4 18V6" }], ["path", { "d": "M12 18V6" }], ["path", { "d": "m17 12 3-2v8" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Heading_1 = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance18, create_fragment18, safe_not_equal, {}); } }; var heading_1_default = Heading_1; // node_modules/lucide-svelte/dist/icons/history.svelte function create_default_slot18(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment19(ctx) { let icon; let current; const icon_spread_levels = [ { name: "history" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot18] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance19($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" } ], ["path", { "d": "M3 3v5h5" }], ["path", { "d": "M12 7v5l4 2" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var History = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance19, create_fragment19, safe_not_equal, {}); } }; var history_default = History; // node_modules/lucide-svelte/dist/icons/info.svelte function create_default_slot19(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment20(ctx) { let icon; let current; const icon_spread_levels = [ { name: "info" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot19] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance20($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "12", "cy": "12", "r": "10" }], ["path", { "d": "M12 16v-4" }], ["path", { "d": "M12 8h.01" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Info = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance20, create_fragment20, safe_not_equal, {}); } }; var info_default = Info; // node_modules/lucide-svelte/dist/icons/keyboard.svelte function create_default_slot20(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment21(ctx) { let icon; let current; const icon_spread_levels = [ { name: "keyboard" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot20] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance21($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M10 8h.01" }], ["path", { "d": "M12 12h.01" }], ["path", { "d": "M14 8h.01" }], ["path", { "d": "M16 12h.01" }], ["path", { "d": "M18 8h.01" }], ["path", { "d": "M6 8h.01" }], ["path", { "d": "M7 16h10" }], ["path", { "d": "M8 12h.01" }], [ "rect", { "x": "2", "y": "4", "width": "20", "height": "16", "rx": "2" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Keyboard = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance21, create_fragment21, safe_not_equal, {}); } }; var keyboard_default = Keyboard; // node_modules/lucide-svelte/dist/icons/merge.svelte function create_default_slot21(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment22(ctx) { let icon; let current; const icon_spread_levels = [ { name: "merge" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot21] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance22($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "m8 6 4-4 4 4" }], [ "path", { "d": "M12 2v10.3a4 4 0 0 1-1.172 2.872L4 22" } ], ["path", { "d": "m20 22-5-5" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Merge = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance22, create_fragment22, safe_not_equal, {}); } }; var merge_default = Merge; // node_modules/lucide-svelte/dist/icons/minus.svelte function create_default_slot22(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment23(ctx) { let icon; let current; const icon_spread_levels = [ { name: "minus" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot22] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance23($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "M5 12h14" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Minus = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance23, create_fragment23, safe_not_equal, {}); } }; var minus_default = Minus; // node_modules/lucide-svelte/dist/icons/more-vertical.svelte function create_default_slot23(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment24(ctx) { let icon; let current; const icon_spread_levels = [ { name: "more-vertical" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot23] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance24($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "12", "cy": "12", "r": "1" }], ["circle", { "cx": "12", "cy": "5", "r": "1" }], ["circle", { "cx": "12", "cy": "19", "r": "1" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var More_vertical = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance24, create_fragment24, safe_not_equal, {}); } }; var more_vertical_default = More_vertical; // node_modules/lucide-svelte/dist/icons/palette.svelte function create_default_slot24(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment25(ctx) { let icon; let current; const icon_spread_levels = [ { name: "palette" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot24] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance25($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "circle", { "cx": "13.5", "cy": "6.5", "r": ".5", "fill": "currentColor" } ], [ "circle", { "cx": "17.5", "cy": "10.5", "r": ".5", "fill": "currentColor" } ], [ "circle", { "cx": "8.5", "cy": "7.5", "r": ".5", "fill": "currentColor" } ], [ "circle", { "cx": "6.5", "cy": "12.5", "r": ".5", "fill": "currentColor" } ], [ "path", { "d": "M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Palette = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance25, create_fragment25, safe_not_equal, {}); } }; var palette_default = Palette; // node_modules/lucide-svelte/dist/icons/panel-left-dashed.svelte function create_default_slot25(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment26(ctx) { let icon; let current; const icon_spread_levels = [ { name: "panel-left-dashed" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot25] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance26($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" } ], ["path", { "d": "M9 14v1" }], ["path", { "d": "M9 19v2" }], ["path", { "d": "M9 3v2" }], ["path", { "d": "M9 9v1" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Panel_left_dashed = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance26, create_fragment26, safe_not_equal, {}); } }; var panel_left_dashed_default = Panel_left_dashed; // node_modules/lucide-svelte/dist/icons/panel-right-dashed.svelte function create_default_slot26(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment27(ctx) { let icon; let current; const icon_spread_levels = [ { name: "panel-right-dashed" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot26] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance27($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "rect", { "width": "18", "height": "18", "x": "3", "y": "3", "rx": "2" } ], ["path", { "d": "M15 14v1" }], ["path", { "d": "M15 19v2" }], ["path", { "d": "M15 3v2" }], ["path", { "d": "M15 9v1" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Panel_right_dashed = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance27, create_fragment27, safe_not_equal, {}); } }; var panel_right_dashed_default = Panel_right_dashed; // node_modules/lucide-svelte/dist/icons/pen.svelte function create_default_slot27(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment28(ctx) { let icon; let current; const icon_spread_levels = [ { name: "pen" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot27] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance28($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Pen = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance28, create_fragment28, safe_not_equal, {}); } }; var pen_default = Pen; // node_modules/lucide-svelte/dist/icons/pencil.svelte function create_default_slot28(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment29(ctx) { let icon; let current; const icon_spread_levels = [ { name: "pencil" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot28] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance29($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" } ], ["path", { "d": "m15 5 4 4" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Pencil = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance29, create_fragment29, safe_not_equal, {}); } }; var pencil_default = Pencil; // node_modules/lucide-svelte/dist/icons/pin.svelte function create_default_slot29(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment30(ctx) { let icon; let current; const icon_spread_levels = [ { name: "pin" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot29] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance30($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "line", { "x1": "12", "x2": "12", "y1": "17", "y2": "22" } ], [ "path", { "d": "M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24Z" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Pin = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance30, create_fragment30, safe_not_equal, {}); } }; var pin_default = Pin; // node_modules/lucide-svelte/dist/icons/plus.svelte function create_default_slot30(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment31(ctx) { let icon; let current; const icon_spread_levels = [ { name: "plus" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot30] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance31($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "M5 12h14" }], ["path", { "d": "M12 5v14" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Plus = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance31, create_fragment31, safe_not_equal, {}); } }; var plus_default = Plus; // node_modules/lucide-svelte/dist/icons/redo-2.svelte function create_default_slot31(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment32(ctx) { let icon; let current; const icon_spread_levels = [ { name: "redo-2" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot31] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance32($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "m15 14 5-5-5-5" }], [ "path", { "d": "M20 9H9.5A5.5 5.5 0 0 0 4 14.5v0A5.5 5.5 0 0 0 9.5 20H13" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Redo_2 = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance32, create_fragment32, safe_not_equal, {}); } }; var redo_2_default = Redo_2; // node_modules/lucide-svelte/dist/icons/rotate-ccw.svelte function create_default_slot32(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment33(ctx) { let icon; let current; const icon_spread_levels = [ { name: "rotate-ccw" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot32] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance33($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" } ], ["path", { "d": "M3 3v5h5" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Rotate_ccw = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance33, create_fragment33, safe_not_equal, {}); } }; var rotate_ccw_default = Rotate_ccw; // node_modules/lucide-svelte/dist/icons/rotate-cw.svelte function create_default_slot33(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment34(ctx) { let icon; let current; const icon_spread_levels = [ { name: "rotate-cw" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot33] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance34($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8" } ], ["path", { "d": "M21 3v5h-5" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Rotate_cw = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance34, create_fragment34, safe_not_equal, {}); } }; var rotate_cw_default = Rotate_cw; // node_modules/lucide-svelte/dist/icons/save.svelte function create_default_slot34(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment35(ctx) { let icon; let current; const icon_spread_levels = [ { name: "save" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot34] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance35($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" } ], ["polyline", { "points": "17 21 17 13 7 13 7 21" }], ["polyline", { "points": "7 3 7 8 15 8" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Save = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance35, create_fragment35, safe_not_equal, {}); } }; var save_default = Save; // node_modules/lucide-svelte/dist/icons/scan-search.svelte function create_default_slot35(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment36(ctx) { let icon; let current; const icon_spread_levels = [ { name: "scan-search" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot35] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance36($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M3 7V5a2 2 0 0 1 2-2h2" }], ["path", { "d": "M17 3h2a2 2 0 0 1 2 2v2" }], ["path", { "d": "M21 17v2a2 2 0 0 1-2 2h-2" }], ["path", { "d": "M7 21H5a2 2 0 0 1-2-2v-2" }], ["circle", { "cx": "12", "cy": "12", "r": "3" }], ["path", { "d": "m16 16-1.9-1.9" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Scan_search = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance36, create_fragment36, safe_not_equal, {}); } }; var scan_search_default = Scan_search; // node_modules/lucide-svelte/dist/icons/scissors.svelte function create_default_slot36(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment37(ctx) { let icon; let current; const icon_spread_levels = [ { name: "scissors" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot36] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance37($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "6", "cy": "6", "r": "3" }], ["path", { "d": "M8.12 8.12 12 12" }], ["path", { "d": "M20 4 8.12 15.88" }], ["circle", { "cx": "6", "cy": "18", "r": "3" }], ["path", { "d": "M14.8 14.8 20 20" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Scissors = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance37, create_fragment37, safe_not_equal, {}); } }; var scissors_default = Scissors; // node_modules/lucide-svelte/dist/icons/search.svelte function create_default_slot37(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment38(ctx) { let icon; let current; const icon_spread_levels = [ { name: "search" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot37] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance38($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["circle", { "cx": "11", "cy": "11", "r": "8" }], ["path", { "d": "m21 21-4.3-4.3" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Search = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance38, create_fragment38, safe_not_equal, {}); } }; var search_default = Search; // node_modules/lucide-svelte/dist/icons/settings.svelte function create_default_slot38(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment39(ctx) { let icon; let current; const icon_spread_levels = [ { name: "settings" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot38] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance39($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ [ "path", { "d": "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" } ], ["circle", { "cx": "12", "cy": "12", "r": "3" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Settings = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance39, create_fragment39, safe_not_equal, {}); } }; var settings_default = Settings; // node_modules/lucide-svelte/dist/icons/split.svelte function create_default_slot39(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment40(ctx) { let icon; let current; const icon_spread_levels = [ { name: "split" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot39] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance40($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M16 3h5v5" }], ["path", { "d": "M8 3H3v5" }], [ "path", { "d": "M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3" } ], ["path", { "d": "m15 9 6-6" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Split = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance40, create_fragment40, safe_not_equal, {}); } }; var split_default = Split; // node_modules/lucide-svelte/dist/icons/text.svelte function create_default_slot40(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment41(ctx) { let icon; let current; const icon_spread_levels = [ { name: "text" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot40] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance41($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M17 6.1H3" }], ["path", { "d": "M21 12.1H3" }], ["path", { "d": "M15.1 18H3" }] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Text = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance41, create_fragment41, safe_not_equal, {}); } }; var text_default = Text; // node_modules/lucide-svelte/dist/icons/trash.svelte function create_default_slot41(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment42(ctx) { let icon; let current; const icon_spread_levels = [ { name: "trash" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot41] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance42($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M3 6h18" }], [ "path", { "d": "M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" } ], [ "path", { "d": "M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Trash = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance42, create_fragment42, safe_not_equal, {}); } }; var trash_default = Trash; // node_modules/lucide-svelte/dist/icons/undo-2.svelte function create_default_slot42(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment43(ctx) { let icon; let current; const icon_spread_levels = [ { name: "undo-2" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot42] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance43($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [ ["path", { "d": "M9 14 4 9l5-5" }], [ "path", { "d": "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5v0a5.5 5.5 0 0 1-5.5 5.5H11" } ] ]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var Undo_2 = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance43, create_fragment43, safe_not_equal, {}); } }; var undo_2_default = Undo_2; // node_modules/lucide-svelte/dist/icons/x.svelte function create_default_slot43(ctx) { let current; const default_slot_template = ( /*#slots*/ ctx[2].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[3], null ); return { c() { if (default_slot) default_slot.c(); }, m(target, anchor) { if (default_slot) { default_slot.m(target, anchor); } current = true; }, p(ctx2, dirty) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 8)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[3], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[3] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[3], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (default_slot) default_slot.d(detaching); } }; } function create_fragment44(ctx) { let icon; let current; const icon_spread_levels = [ { name: "x" }, /*$$props*/ ctx[1], { iconNode: ( /*iconNode*/ ctx[0] ) } ]; let icon_props = { $$slots: { default: [create_default_slot43] }, $$scope: { ctx } }; for (let i = 0; i < icon_spread_levels.length; i += 1) { icon_props = assign(icon_props, icon_spread_levels[i]); } icon = new Icon_default({ props: icon_props }); return { c() { create_component(icon.$$.fragment); }, m(target, anchor) { mount_component(icon, target, anchor); current = true; }, p(ctx2, [dirty]) { const icon_changes = dirty & /*$$props, iconNode*/ 3 ? get_spread_update(icon_spread_levels, [ icon_spread_levels[0], dirty & /*$$props*/ 2 && get_spread_object( /*$$props*/ ctx2[1] ), dirty & /*iconNode*/ 1 && { iconNode: ( /*iconNode*/ ctx2[0] ) } ]) : {}; if (dirty & /*$$scope*/ 8) { icon_changes.$$scope = { dirty, ctx: ctx2 }; } icon.$set(icon_changes); }, i(local) { if (current) return; transition_in(icon.$$.fragment, local); current = true; }, o(local) { transition_out(icon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(icon, detaching); } }; } function instance44($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; const iconNode = [["path", { "d": "M18 6 6 18" }], ["path", { "d": "m6 6 12 12" }]]; $$self.$$set = ($$new_props) => { $$invalidate(1, $$props = assign(assign({}, $$props), exclude_internal_props($$new_props))); if ("$$scope" in $$new_props) $$invalidate(3, $$scope = $$new_props.$$scope); }; $$props = exclude_internal_props($$props); return [iconNode, $$props, slots, $$scope]; } var X = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance44, create_fragment44, safe_not_equal, {}); } }; var x_default = X; // src/view/components/container/context.ts var getPlugin = () => { return getContext("plugin"); }; var getView = () => { return getContext("view"); }; // src/lib/store/derived.ts var derived = (source, mapper) => { const subscribers = /* @__PURE__ */ new Set(); let derivedValue; let unsubFromSource = null; return { subscribe: (run2) => { subscribers.add(run2); if (!unsubFromSource) { unsubFromSource = source.subscribe( (value, action, initialRun) => { if (action || initialRun) { const newValue = mapper(value, action); if (newValue !== derivedValue) { derivedValue = newValue; for (const sub of subscribers) { sub(derivedValue, action, initialRun); } } } } ); } return () => { subscribers.delete(run2); if (unsubFromSource && subscribers.size === 0) { unsubFromSource(); unsubFromSource = null; } }; } }; }; // src/stores/document/derived/history-store.ts var historyStore = (view) => { return derived(view.documentStore, (state2) => { return state2.history; }); }; // src/view/components/container/controls-bar/controls-container.svelte var import_obsidian3 = require("obsidian"); // node_modules/svelte/src/runtime/store/index.js var subscriber_queue = []; function readable(value, start) { return { subscribe: writable(value, start).subscribe }; } function writable(value, start = noop) { let stop; const subscribers = /* @__PURE__ */ new Set(); function set(new_value) { if (safe_not_equal(value, new_value)) { value = new_value; if (stop) { const run_queue = !subscriber_queue.length; for (const subscriber of subscribers) { subscriber[1](); subscriber_queue.push(subscriber, value); } if (run_queue) { for (let i = 0; i < subscriber_queue.length; i += 2) { subscriber_queue[i][0](subscriber_queue[i + 1]); } subscriber_queue.length = 0; } } } } function update2(fn) { set(fn(value)); } function subscribe2(run2, invalidate = noop) { const subscriber = [run2, invalidate]; subscribers.add(subscriber); if (subscribers.size === 1) { stop = start(set, update2) || noop; } run2(value); return () => { subscribers.delete(subscriber); if (subscribers.size === 0 && stop) { stop(); stop = null; } }; } return { set, update: update2, subscribe: subscribe2 }; } function derived2(stores, fn, initial_value) { const single = !Array.isArray(stores); const stores_array = single ? [stores] : stores; if (!stores_array.every(Boolean)) { throw new Error("derived() expects stores as input, got a falsy value"); } const auto = fn.length < 2; return readable(initial_value, (set, update2) => { let started = false; const values = []; let pending = 0; let cleanup = noop; const sync = () => { if (pending) { return; } cleanup(); const result = fn(single ? values[0] : values, set, update2); if (auto) { set(result); } else { cleanup = is_function(result) ? result : noop; } }; const unsubscribers = stores_array.map( (store, i) => subscribe( store, (value) => { values[i] = value; pending &= ~(1 << i); if (started) { sync(); } }, () => { pending |= 1 << i; } ) ); started = true; sync(); return function stop() { run_all(unsubscribers); cleanup(); started = false; }; }); } // src/stores/view/derived/ui-controls-store.ts var uiControlsStore = (view) => derived(view.viewStore, (state2) => state2.ui.controls); // src/view/components/container/shared/button.svelte function create_fragment45(ctx) { let button; let button_class_value; let current; let mounted; let dispose; const default_slot_template = ( /*#slots*/ ctx[6].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[5], null ); return { c() { button = element("button"); if (default_slot) default_slot.c(); attr( button, "aria-label", /*label*/ ctx[0] ); attr(button, "class", button_class_value = "lineage-view-button " + /*classes*/ ctx[3]); attr( button, "data-active", /*active*/ ctx[4] ); attr( button, "data-tooltip-position", /*tooltipPosition*/ ctx[1] ); button.disabled = /*disabled*/ ctx[2]; }, m(target, anchor) { insert(target, button, anchor); if (default_slot) { default_slot.m(button, null); } current = true; if (!mounted) { dispose = listen( button, "click", /*click_handler*/ ctx[7] ); mounted = true; } }, p(ctx2, [dirty]) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 32)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[5], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[5] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[5], dirty, null ), null ); } } if (!current || dirty & /*label*/ 1) { attr( button, "aria-label", /*label*/ ctx2[0] ); } if (!current || dirty & /*classes*/ 8 && button_class_value !== (button_class_value = "lineage-view-button " + /*classes*/ ctx2[3])) { attr(button, "class", button_class_value); } if (!current || dirty & /*active*/ 16) { attr( button, "data-active", /*active*/ ctx2[4] ); } if (!current || dirty & /*tooltipPosition*/ 2) { attr( button, "data-tooltip-position", /*tooltipPosition*/ ctx2[1] ); } if (!current || dirty & /*disabled*/ 4) { button.disabled = /*disabled*/ ctx2[2]; } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(button); } if (default_slot) default_slot.d(detaching); mounted = false; dispose(); } }; } function instance45($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; let { label } = $$props; let { tooltipPosition } = $$props; let { disabled = false } = $$props; let { classes = "" } = $$props; let { active = false } = $$props; function click_handler(event) { bubble.call(this, $$self, event); } $$self.$$set = ($$props2) => { if ("label" in $$props2) $$invalidate(0, label = $$props2.label); if ("tooltipPosition" in $$props2) $$invalidate(1, tooltipPosition = $$props2.tooltipPosition); if ("disabled" in $$props2) $$invalidate(2, disabled = $$props2.disabled); if ("classes" in $$props2) $$invalidate(3, classes = $$props2.classes); if ("active" in $$props2) $$invalidate(4, active = $$props2.active); if ("$$scope" in $$props2) $$invalidate(5, $$scope = $$props2.$$scope); }; return [ label, tooltipPosition, disabled, classes, active, $$scope, slots, click_handler ]; } var Button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance45, create_fragment45, safe_not_equal, { label: 0, tooltipPosition: 1, disabled: 2, classes: 3, active: 4 }); } }; var button_default = Button; // src/stores/settings/derived/scrolling-store.ts var ScrollSettingsStore = (view) => derived(view.plugin.settings, (state2) => state2.view.scrolling); var showMinimapStore = (view) => derived(view.plugin.settings, (state2) => state2.view.showMinimap); // src/helpers/load-custom-icons.ts var import_obsidian = require("obsidian"); var svgWrapper = (innerSVG, mode = "stroke") => ` ${innerSVG.trim().replace(/\n/g, "")}`; var cards = { name: "lineage-cards", svg: ` `, mode: "fill" }; var split = { name: "lineage-split", svg: ``, mode: "stroke" }; var alignH = { name: "lineage-align-horizontal", svg: ` `, mode: "stroke" }; var alignV = { name: "lineage-align-vertical", svg: ` `, mode: "stroke" }; var gap = { name: "cards-gap", svg: ` `, mode: "stroke" }; var outline = { name: "outline", svg: ` `, mode: "stroke" }; var cursorOff = { name: "cursor-off", svg: ` `, mode: "stroke" }; var cursor = { name: "cursor", svg: ` `, mode: "stroke" }; var customIcons = { cards, split, alignH, alignV, gap, outline, cursor, cursorOff }; var loadCustomIcons = () => { for (const icon of Object.values(customIcons)) { icon.svg = svgWrapper(icon.svg, icon.mode); (0, import_obsidian.addIcon)(icon.name, icon.svg); } }; // src/stores/settings/derived/view-settings-store.ts var ShowLeftSidebarStore = (view) => derived(view.plugin.settings, (state2) => state2.view.showLeftSidebar); var LeftSidebarActiveTabStore = (view) => derived(view.plugin.settings, (state2) => state2.view.leftSidebarActiveTab); var ApplyGapBetweenCardsStore = (view) => derived(view.plugin.settings, (state2) => state2.view.applyGapBetweenCards); var OutlineModeStore = (view) => derived(view.plugin.settings, (state2) => state2.view.outlineMode); var MaintainEditMode = (view) => derived(view.plugin.settings, (state2) => state2.view.maintainEditMode); var AlwaysShowCardButtons = (view) => derived(view.plugin.settings, (state2) => state2.view.alwaysShowCardButtons); // node_modules/tslib/tslib.es6.mjs 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/stores/view/derived/zoom-level-store.ts var zoomLevelStore = (view) => derived(view.plugin.settings, (state2) => state2.view.zoomLevel); // src/stores/settings/reducers/change-zoom-level.ts var formatNumber = (num) => parseFloat(num.toFixed(3)); var zoomStep = 0.1; var maxZoomLevel = 2; var minZoomLevel = 0.05; var changeZoomLevel = (state2, payload) => { if ("value" in payload) { state2.view.zoomLevel = payload.value; } else { state2.view.zoomLevel = payload.direction === "in" ? Math.min(state2.view.zoomLevel + zoomStep, maxZoomLevel) : Math.max(state2.view.zoomLevel - zoomStep, minZoomLevel); } state2.view.zoomLevel = formatNumber(state2.view.zoomLevel); }; // src/view/components/container/controls-bar/components/helpers/create-zoom-menu.ts var import_obsidian2 = require("obsidian"); // node_modules/tiny-invariant/dist/esm/tiny-invariant.js var isProduction = false; var prefix = "Invariant failed"; function invariant(condition, message) { if (condition) { return; } if (isProduction) { throw new Error(prefix); } var provided = typeof message === "function" ? message() : message; var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix; throw new Error(value); } // src/lib/align-element/helpers/get-combined-client-rect.ts var getCombinedBoundingClientRect = (elements) => { if (elements.length === 0) { return new DOMRect(0, 0, 0, 0); } let combinedRect = elements[0].getBoundingClientRect(); for (let i = 1; i < elements.length; i++) { const rect = elements[i].getBoundingClientRect(); combinedRect = combineRects(combinedRect, rect); } return combinedRect; }; var combineRects = (rect1, rect2) => { const left = Math.min(rect1.left, rect2.left); const top = Math.min(rect1.top, rect2.top); const right = Math.max(rect1.right, rect2.right); const bottom = Math.max(rect1.bottom, rect2.bottom); const width = right - left; const height = bottom - top; return new DOMRect(left, top, width, height); }; // src/view/components/container/controls-bar/components/helpers/fit-document-height-into-view.ts var fitDocumentHeightIntoView = async (view) => { invariant(view.container); const initialZoomLevel = get_store_value(zoomLevelStore(view)); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: 1 } }); const columns = Array.from( view.containerEl.querySelectorAll(".column") ); let result = 1; if (columns.length) { const groupHeights = columns.map((c) => { return getCombinedBoundingClientRect( Array.from(c.querySelectorAll(".group")) ).height; }).sort((a, b) => a - b); const height = groupHeights[groupHeights.length - 1]; const width = getCombinedBoundingClientRect(columns).width; const heightScale = view.container.getBoundingClientRect().height / (height + 100); const widthScale = view.container.getBoundingClientRect().width / (width + 100); result = Math.min(heightScale, widthScale); } view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: initialZoomLevel } }); return result; }; // src/view/components/container/controls-bar/components/helpers/fit-branch-into-view.ts var fitBranchIntoView = async (view) => { invariant(view.container); const initialZoomLevel = get_store_value(zoomLevelStore(view)); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: 1 } }); let result = 1; const parents = Array.from( view.containerEl.querySelectorAll(".active-parent") ); const activeNode = view.containerEl.querySelector( ".active-node" ); const children2 = Array.from( view.containerEl.querySelectorAll(".active-child") ); const siblings = Array.from( view.containerEl.querySelectorAll(".active-sibling") ); const combinedRect = getCombinedBoundingClientRect([ ...parents, activeNode, ...siblings, ...children2 ]); const heightScale = view.container.getBoundingClientRect().height / (combinedRect.height + 100); const widthScale = view.container.getBoundingClientRect().width / (combinedRect.width + 100); result = Math.min(heightScale, widthScale); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: initialZoomLevel } }); return result; }; // src/view/components/container/controls-bar/components/helpers/create-zoom-menu.ts var staticZoomOptions = [ { label: "5%", scale: 0.05 }, { label: "10%", scale: 0.1 }, { label: "20%", scale: 0.2 }, { label: "30%", scale: 0.3 }, { label: "40%", scale: 0.4 }, { label: "50%", scale: 0.5 }, { label: "60%", scale: 0.6 }, { label: "70%", scale: 0.7 }, { label: "80%", scale: 0.8 }, { label: "90%", scale: 0.9 }, { label: "100%", scale: 1 }, { label: "125%", scale: 1.25 }, { label: "150%", scale: 1.5 }, { label: "175%", scale: 1.75 }, { label: "200%", scale: 2 } ]; var dynamicZoomOptions = [ { label: "Fit document height into view", scale: fitDocumentHeightIntoView }, { label: "Fit active branch into view", scale: fitBranchIntoView } ]; var createZoomMenu = (props) => { let lastClickedZoom = get_store_value(zoomLevelStore(props.view)); const zoomGroups = [dynamicZoomOptions, staticZoomOptions]; const apply = async (zoom, isClick) => { const newValue = typeof zoom.scale === "number" ? zoom.scale : await zoom.scale(props.view); if (isClick) { lastClickedZoom = newValue; } else { hoverZoom = newValue; } props.view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: newValue } }); }; const menu = new import_obsidian2.Menu(); let hoverZoom = lastClickedZoom; for (const group of zoomGroups) { const groupIndex = zoomGroups.indexOf(group); if (groupIndex > 0) menu.addSeparator(); for (const zoom of group) { menu.addItem((item) => { item.setTitle(zoom.label).setChecked(zoom.scale === lastClickedZoom).onClick(() => { apply(zoom, true); menu.hide(); createZoomMenu(props); }); const dom = item.dom; if (dom) { dom.addEventListener("mouseenter", () => { apply(zoom, false); }); } }); } } const menuDom = menu.dom; if (menuDom) { menuDom.addEventListener("mouseleave", () => { if (hoverZoom !== lastClickedZoom) { props.view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: lastClickedZoom } }); } }); menuDom.style.width = "220px"; } if (menuDom && !props.state.menuHeight) { menu.showAtPosition({ x: props.event.pageX, y: props.event.pageY }); const rect = menuDom.getBoundingClientRect(); props.state.menuHeight = rect.height; props.state.menuWidth = rect.width; menu.close(); } const buttonRect = props.event.target.getBoundingClientRect(); menu.showAtPosition({ x: get_store_value(showMinimapStore(props.view)) ? buttonRect.left - props.state.menuWidth - 10 : buttonRect.left - 10, y: buttonRect.top + buttonRect.height / 2 - props.state.menuHeight / 2 }); menu.onHide(() => { props.state.lastMenuHideEvent_ms = Date.now(); }); }; // src/stores/view/derived/keyboard-store.ts var KeyboardStore = (view) => derived(view.viewStore, (state2) => state2.keyboard); // src/view/components/container/controls-bar/components/zoom-buttons.svelte function create_default_slot_3(ctx) { let zoomin; let current; zoomin = new plus_default({ props: { class: "svg-icon" } }); return { c() { create_component(zoomin.$$.fragment); }, m(target, anchor) { mount_component(zoomin, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(zoomin.$$.fragment, local); current = true; }, o(local) { transition_out(zoomin.$$.fragment, local); current = false; }, d(detaching) { destroy_component(zoomin, detaching); } }; } function create_else_block(ctx) { let rotateccw; let current; rotateccw = new rotate_ccw_default({ props: { class: "svg-icon" } }); return { c() { create_component(rotateccw.$$.fragment); }, m(target, anchor) { mount_component(rotateccw, target, anchor); current = true; }, i(local) { if (current) return; transition_in(rotateccw.$$.fragment, local); current = true; }, o(local) { transition_out(rotateccw.$$.fragment, local); current = false; }, d(detaching) { destroy_component(rotateccw, detaching); } }; } function create_if_block(ctx) { let rotatecw; let current; rotatecw = new rotate_cw_default({ props: { class: "svg-icon" } }); return { c() { create_component(rotatecw.$$.fragment); }, m(target, anchor) { mount_component(rotatecw, target, anchor); current = true; }, i(local) { if (current) return; transition_in(rotatecw.$$.fragment, local); current = true; }, o(local) { transition_out(rotatecw.$$.fragment, local); current = false; }, d(detaching) { destroy_component(rotatecw, detaching); } }; } function create_default_slot_2(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block, create_else_block]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*showUndoRestZoomButton*/ ctx2[1] ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if_blocks[current_block_type_index].m(target, anchor); insert(target, if_block_anchor, anchor); current = true; }, p(ctx2, dirty) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index !== previous_block_index) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(if_block_anchor); } if_blocks[current_block_type_index].d(detaching); } }; } function create_default_slot_1(ctx) { let scansearch; let current; scansearch = new scan_search_default({ props: { class: "svg-icon" } }); return { c() { create_component(scansearch.$$.fragment); }, m(target, anchor) { mount_component(scansearch, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(scansearch.$$.fragment, local); current = true; }, o(local) { transition_out(scansearch.$$.fragment, local); current = false; }, d(detaching) { destroy_component(scansearch, detaching); } }; } function create_default_slot44(ctx) { let zoomout; let current; zoomout = new minus_default({ props: { class: "svg-icon" } }); return { c() { create_component(zoomout.$$.fragment); }, m(target, anchor) { mount_component(zoomout, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(zoomout.$$.fragment, local); current = true; }, o(local) { transition_out(zoomout.$$.fragment, local); current = false; }, d(detaching) { destroy_component(zoomout, detaching); } }; } function create_fragment46(ctx) { let div; let button0; let t0; let button1; let t1; let button2; let t2; let button3; let current; button0 = new button_default({ props: { classes: "control-item", disabled: ( /*$zoomLevel*/ ctx[2] >= maxZoomLevel ), label: lang.controls_zoom_in, tooltipPosition: "left", $$slots: { default: [create_default_slot_3] }, $$scope: { ctx } } }); button0.$on( "click", /*zoomIn*/ ctx[4] ); button1 = new button_default({ props: { classes: "control-item", disabled: ( /*showUndoRestZoomButton*/ ctx[1] ? false : ( /*$zoomLevel*/ ctx[2] === 1 ) ), label: lang.controls_zoom_reset, active: ( /*showUndoRestZoomButton*/ ctx[1] ? true : ( /*$zoomLevel*/ ctx[2] !== 1 ) ), tooltipPosition: "left", $$slots: { default: [create_default_slot_2] }, $$scope: { ctx } } }); button1.$on( "click", /*restoreZoom*/ ctx[6] ); button2 = new button_default({ props: { classes: "control-item", label: lang.controls_zoom_presets, tooltipPosition: "left", $$slots: { default: [create_default_slot_1] }, $$scope: { ctx } } }); button2.$on( "click", /*showZoomPopupMenu*/ ctx[8] ); button3 = new button_default({ props: { classes: "control-item", disabled: ( /*$zoomLevel*/ ctx[2] <= minZoomLevel ), label: lang.controls_zoom_out, tooltipPosition: "left", $$slots: { default: [create_default_slot44] }, $$scope: { ctx } } }); button3.$on( "click", /*zoomOut*/ ctx[5] ); return { c() { div = element("div"); create_component(button0.$$.fragment); t0 = space(); create_component(button1.$$.fragment); t1 = space(); create_component(button2.$$.fragment); t2 = space(); create_component(button3.$$.fragment); attr(div, "class", "buttons-group buttons-group--vertical"); attr( div, "data-visible", /*showControls*/ ctx[0] ); }, m(target, anchor) { insert(target, div, anchor); mount_component(button0, div, null); append(div, t0); mount_component(button1, div, null); append(div, t1); mount_component(button2, div, null); append(div, t2); mount_component(button3, div, null); current = true; }, p(ctx2, [dirty]) { const button0_changes = {}; if (dirty & /*$zoomLevel*/ 4) button0_changes.disabled = /*$zoomLevel*/ ctx2[2] >= maxZoomLevel; if (dirty & /*$$scope*/ 8192) { button0_changes.$$scope = { dirty, ctx: ctx2 }; } button0.$set(button0_changes); const button1_changes = {}; if (dirty & /*showUndoRestZoomButton, $zoomLevel*/ 6) button1_changes.disabled = /*showUndoRestZoomButton*/ ctx2[1] ? false : ( /*$zoomLevel*/ ctx2[2] === 1 ); if (dirty & /*showUndoRestZoomButton, $zoomLevel*/ 6) button1_changes.active = /*showUndoRestZoomButton*/ ctx2[1] ? true : ( /*$zoomLevel*/ ctx2[2] !== 1 ); if (dirty & /*$$scope, showUndoRestZoomButton*/ 8194) { button1_changes.$$scope = { dirty, ctx: ctx2 }; } button1.$set(button1_changes); const button2_changes = {}; if (dirty & /*$$scope*/ 8192) { button2_changes.$$scope = { dirty, ctx: ctx2 }; } button2.$set(button2_changes); const button3_changes = {}; if (dirty & /*$zoomLevel*/ 4) button3_changes.disabled = /*$zoomLevel*/ ctx2[2] <= minZoomLevel; if (dirty & /*$$scope*/ 8192) { button3_changes.$$scope = { dirty, ctx: ctx2 }; } button3.$set(button3_changes); if (!current || dirty & /*showControls*/ 1) { attr( div, "data-visible", /*showControls*/ ctx2[0] ); } }, i(local) { if (current) return; transition_in(button0.$$.fragment, local); transition_in(button1.$$.fragment, local); transition_in(button2.$$.fragment, local); transition_in(button3.$$.fragment, local); current = true; }, o(local) { transition_out(button0.$$.fragment, local); transition_out(button1.$$.fragment, local); transition_out(button2.$$.fragment, local); transition_out(button3.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div); } destroy_component(button0); destroy_component(button1); destroy_component(button2); destroy_component(button3); } }; } function instance46($$self, $$props, $$invalidate) { let $keyboardStore; let $zoomLevel; let { showControls } = $$props; const view = getView(); const keyboardStore = KeyboardStore(view); component_subscribe($$self, keyboardStore, (value) => $$invalidate(10, $keyboardStore = value)); const zoomIn = () => { view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { direction: "in" } }); }; const zoomOut = () => { view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { direction: "out" } }); }; let zoomValueBeforeReset = -1; const restoreZoom = () => { if (showUndoRestZoomButton) { view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: zoomValueBeforeReset } }); $$invalidate(9, zoomValueBeforeReset = -1); } else { $$invalidate(9, zoomValueBeforeReset = get_store_value(zoomLevelStore(view))); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: 1 } }); } }; const zoomLevel = zoomLevelStore(view); component_subscribe($$self, zoomLevel, (value) => $$invalidate(2, $zoomLevel = value)); const zoomMenuState = { menuHeight: 0, menuWidth: 0, lastMenuHideEvent_ms: 0 }; const showZoomPopupMenu = (event) => __awaiter(void 0, void 0, void 0, function* () { if (Date.now() - zoomMenuState.lastMenuHideEvent_ms < 100) return; createZoomMenu({ event, view, state: zoomMenuState }); }); let showUndoRestZoomButton = false; $$self.$$set = ($$props2) => { if ("showControls" in $$props2) $$invalidate(0, showControls = $$props2.showControls); }; $$self.$$.update = () => { if ($$self.$$.dirty & /*$keyboardStore, zoomValueBeforeReset*/ 1536) { $: { $$invalidate(1, showUndoRestZoomButton = $keyboardStore.shift && zoomValueBeforeReset !== -1); } } }; return [ showControls, showUndoRestZoomButton, $zoomLevel, keyboardStore, zoomIn, zoomOut, restoreZoom, zoomLevel, showZoomPopupMenu, zoomValueBeforeReset, $keyboardStore ]; } var Zoom_buttons = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance46, create_fragment46, safe_not_equal, { showControls: 0 }); } }; var zoom_buttons_default = Zoom_buttons; // src/view/components/container/controls-bar/controls-container.svelte function add_css(target) { append_styles(target, "svelte-1316cva", ".controls-container.svelte-1316cva{right:var(--size-4-2);top:var(--size-4-2);gap:var(--size-4-2);display:flex;flex-direction:column;position:absolute;z-index:2}.controls-toggle.svelte-1316cva{display:none}.is-mobile{& .controls-toggle {\n display: block;\n };& .buttons-group[data-visible='false'] {\n display: none;\n }}"); } function create_default_slot_11(ctx) { let morevertical; let current; morevertical = new more_vertical_default({ props: { class: "svg-icon" } }); return { c() { create_component(morevertical.$$.fragment); }, m(target, anchor) { mount_component(morevertical, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(morevertical.$$.fragment, local); current = true; }, o(local) { transition_out(morevertical.$$.fragment, local); current = false; }, d(detaching) { destroy_component(morevertical, detaching); } }; } function create_default_slot_10(ctx) { let panelright; let current; panelright = new panel_right_dashed_default({ props: { class: "svg-icon" } }); return { c() { create_component(panelright.$$.fragment); }, m(target, anchor) { mount_component(panelright, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(panelright.$$.fragment, local); current = true; }, o(local) { transition_out(panelright.$$.fragment, local); current = false; }, d(detaching) { destroy_component(panelright, detaching); } }; } function create_default_slot_9(ctx) { let settings; let current; settings = new settings_default({ props: { class: "svg-icon" } }); return { c() { create_component(settings.$$.fragment); }, m(target, anchor) { mount_component(settings, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(settings.$$.fragment, local); current = true; }, o(local) { transition_out(settings.$$.fragment, local); current = false; }, d(detaching) { destroy_component(settings, detaching); } }; } function create_default_slot_8(ctx) { let keyboard; let current; keyboard = new keyboard_default({ props: { class: "svg-icon" } }); return { c() { create_component(keyboard.$$.fragment); }, m(target, anchor) { mount_component(keyboard, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(keyboard.$$.fragment, local); current = true; }, o(local) { transition_out(keyboard.$$.fragment, local); current = false; }, d(detaching) { destroy_component(keyboard, detaching); } }; } function create_default_slot_7(ctx) { let palette; let current; palette = new palette_default({ props: { class: "svg-icon" } }); return { c() { create_component(palette.$$.fragment); }, m(target, anchor) { mount_component(palette, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(palette.$$.fragment, local); current = true; }, o(local) { transition_out(palette.$$.fragment, local); current = false; }, d(detaching) { destroy_component(palette, detaching); } }; } function create_default_slot_6(ctx) { let html_tag; let raw_value = customIcons.alignH.svg + ""; let html_anchor; return { c() { html_tag = new HtmlTag(false); html_anchor = empty(); html_tag.a = html_anchor; }, m(target, anchor) { html_tag.m(raw_value, target, anchor); insert(target, html_anchor, anchor); }, p: noop, d(detaching) { if (detaching) { detach(html_anchor); html_tag.d(); } } }; } function create_default_slot_5(ctx) { let html_tag; let raw_value = customIcons.alignV.svg + ""; let html_anchor; return { c() { html_tag = new HtmlTag(false); html_anchor = empty(); html_tag.a = html_anchor; }, m(target, anchor) { html_tag.m(raw_value, target, anchor); insert(target, html_anchor, anchor); }, p: noop, d(detaching) { if (detaching) { detach(html_anchor); html_tag.d(); } } }; } function create_default_slot_4(ctx) { let html_tag; let raw_value = customIcons.outline.svg + ""; let html_anchor; return { c() { html_tag = new HtmlTag(false); html_anchor = empty(); html_tag.a = html_anchor; }, m(target, anchor) { html_tag.m(raw_value, target, anchor); insert(target, html_anchor, anchor); }, p: noop, d(detaching) { if (detaching) { detach(html_anchor); html_tag.d(); } } }; } function create_default_slot_32(ctx) { let html_tag; let raw_value = customIcons.gap.svg + ""; let html_anchor; return { c() { html_tag = new HtmlTag(false); html_anchor = empty(); html_tag.a = html_anchor; }, m(target, anchor) { html_tag.m(raw_value, target, anchor); insert(target, html_anchor, anchor); }, p: noop, d(detaching) { if (detaching) { detach(html_anchor); html_tag.d(); } } }; } function create_default_slot_22(ctx) { let historyicon; let current; historyicon = new history_default({ props: { class: "svg-icon" } }); return { c() { create_component(historyicon.$$.fragment); }, m(target, anchor) { mount_component(historyicon, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(historyicon.$$.fragment, local); current = true; }, o(local) { transition_out(historyicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(historyicon, detaching); } }; } function create_default_slot_12(ctx) { let undoicon; let current; undoicon = new undo_2_default({ props: { class: "svg-icon" } }); return { c() { create_component(undoicon.$$.fragment); }, m(target, anchor) { mount_component(undoicon, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(undoicon.$$.fragment, local); current = true; }, o(local) { transition_out(undoicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(undoicon, detaching); } }; } function create_default_slot45(ctx) { let redoicon; let current; redoicon = new redo_2_default({ props: { class: "svg-icon" } }); return { c() { create_component(redoicon.$$.fragment); }, m(target, anchor) { mount_component(redoicon, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(redoicon.$$.fragment, local); current = true; }, o(local) { transition_out(redoicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(redoicon, detaching); } }; } function create_fragment47(ctx) { let div6; let div0; let button0; let t0; let div1; let button1; let t1; let div2; let button2; let t2; let button3; let t3; let button4; let t4; let div3; let button5; let t5; let button6; let t6; let div4; let button7; let t7; let button8; let t8; let div5; let button9; let t9; let button10; let t10; let button11; let t11; let zoombuttons; let current; button0 = new button_default({ props: { active: ( /*$showControls*/ ctx[0] ), label: lang.controls_toggle_bar, tooltipPosition: "left", $$slots: { default: [create_default_slot_11] }, $$scope: { ctx } } }); button0.$on( "click", /*toggleShowControls*/ ctx[16] ); button1 = new button_default({ props: { active: ( /*$showMinimap*/ ctx[1] ), classes: "control-item", label: lang.controls_toggle_minimap, tooltipPosition: "left", $$slots: { default: [create_default_slot_10] }, $$scope: { ctx } } }); button1.$on( "click", /*toggleMinimap*/ ctx[18] ); button2 = new button_default({ props: { active: ( /*$controls*/ ctx[2].showSettingsSidebar ), classes: "control-item", label: lang.controls_settings, tooltipPosition: "left", $$slots: { default: [create_default_slot_9] }, $$scope: { ctx } } }); button2.$on( "click", /*toggleSettings*/ ctx[13] ); button3 = new button_default({ props: { active: ( /*$controls*/ ctx[2].showHelpSidebar ), classes: "control-item", label: lang.controls_hotkeys, tooltipPosition: "left", $$slots: { default: [create_default_slot_8] }, $$scope: { ctx } } }); button3.$on( "click", /*toggleHelp*/ ctx[11] ); button4 = new button_default({ props: { active: ( /*$controls*/ ctx[2].showStyleRulesModal ), classes: "control-item", label: lang.controls_rules, tooltipPosition: "left", $$slots: { default: [create_default_slot_7] }, $$scope: { ctx } } }); button4.$on( "click", /*toggleStyleRules*/ ctx[12] ); button5 = new button_default({ props: { active: ( /*$scrollSettingsStore*/ ctx[3].centerActiveNodeH ), classes: "control-item", label: lang.controls_toggle_scrolling_mode_horizontal, tooltipPosition: "left", $$slots: { default: [create_default_slot_6] }, $$scope: { ctx } } }); button5.$on( "click", /*toggleScrollModeH*/ ctx[19] ); button6 = new button_default({ props: { active: ( /*$scrollSettingsStore*/ ctx[3].centerActiveNodeV ), classes: "control-item", label: lang.controls_toggle_scrolling_mode_vertical, tooltipPosition: "left", $$slots: { default: [create_default_slot_5] }, $$scope: { ctx } } }); button6.$on( "click", /*toggleScrollModeV*/ ctx[20] ); button7 = new button_default({ props: { active: ( /*$outlineMode*/ ctx[4] ), classes: "control-item", label: lang.controls_single_column, tooltipPosition: "left", $$slots: { default: [create_default_slot_4] }, $$scope: { ctx } } }); button7.$on( "click", /*toggleOutlineMode*/ ctx[25] ); button8 = new button_default({ props: { active: ( /*$applyGapBetweenCards*/ ctx[5] ), classes: "control-item", label: lang.controls_gap_between_cards, tooltipPosition: "left", $$slots: { default: [create_default_slot_32] }, $$scope: { ctx } } }); button8.$on( "click", /*toggleGap*/ ctx[23] ); button9 = new button_default({ props: { active: ( /*$controls*/ ctx[2].showHistorySidebar ), classes: "control-item", disabled: ( /*$history*/ ctx[6].items.length === 0 ), label: lang.controls_history, tooltipPosition: "left", $$slots: { default: [create_default_slot_22] }, $$scope: { ctx } } }); button9.$on( "click", /*click_handler*/ ctx[26] ); button10 = new button_default({ props: { classes: "control-item", disabled: !/*$history*/ ctx[6].state.canGoBack, label: lang.controls_history_undo, tooltipPosition: "left", $$slots: { default: [create_default_slot_12] }, $$scope: { ctx } } }); button10.$on( "click", /*handlePreviousClick*/ ctx[10] ); button11 = new button_default({ props: { classes: "control-item", disabled: !/*$history*/ ctx[6].state.canGoForward, label: lang.controls_history_redo, tooltipPosition: "left", $$slots: { default: [create_default_slot45] }, $$scope: { ctx } } }); button11.$on( "click", /*handleNextClick*/ ctx[9] ); zoombuttons = new zoom_buttons_default({ props: { showControls: ( /*$showControls*/ ctx[0] ) } }); return { c() { div6 = element("div"); div0 = element("div"); create_component(button0.$$.fragment); t0 = space(); div1 = element("div"); create_component(button1.$$.fragment); t1 = space(); div2 = element("div"); create_component(button2.$$.fragment); t2 = space(); create_component(button3.$$.fragment); t3 = space(); create_component(button4.$$.fragment); t4 = space(); div3 = element("div"); create_component(button5.$$.fragment); t5 = space(); create_component(button6.$$.fragment); t6 = space(); div4 = element("div"); create_component(button7.$$.fragment); t7 = space(); create_component(button8.$$.fragment); t8 = space(); div5 = element("div"); create_component(button9.$$.fragment); t9 = space(); create_component(button10.$$.fragment); t10 = space(); create_component(button11.$$.fragment); t11 = space(); create_component(zoombuttons.$$.fragment); attr(div0, "class", "buttons-group controls-toggle svelte-1316cva"); attr(div1, "class", "buttons-group buttons-group--vertical"); attr( div1, "data-visible", /*$showControls*/ ctx[0] ); attr(div2, "class", "buttons-group buttons-group--vertical"); attr( div2, "data-visible", /*$showControls*/ ctx[0] ); attr(div3, "class", "buttons-group buttons-group--vertical"); attr( div3, "data-visible", /*$showControls*/ ctx[0] ); attr(div4, "class", "buttons-group buttons-group--vertical"); attr( div4, "data-visible", /*$showControls*/ ctx[0] ); attr(div5, "class", "buttons-group buttons-group--vertical"); attr( div5, "data-visible", /*$showControls*/ ctx[0] ); attr(div6, "class", "controls-container svelte-1316cva"); }, m(target, anchor) { insert(target, div6, anchor); append(div6, div0); mount_component(button0, div0, null); append(div6, t0); append(div6, div1); mount_component(button1, div1, null); append(div6, t1); append(div6, div2); mount_component(button2, div2, null); append(div2, t2); mount_component(button3, div2, null); append(div2, t3); mount_component(button4, div2, null); append(div6, t4); append(div6, div3); mount_component(button5, div3, null); append(div3, t5); mount_component(button6, div3, null); append(div6, t6); append(div6, div4); mount_component(button7, div4, null); append(div4, t7); mount_component(button8, div4, null); append(div6, t8); append(div6, div5); mount_component(button9, div5, null); append(div5, t9); mount_component(button10, div5, null); append(div5, t10); mount_component(button11, div5, null); append(div6, t11); mount_component(zoombuttons, div6, null); current = true; }, p(ctx2, [dirty]) { const button0_changes = {}; if (dirty & /*$showControls*/ 1) button0_changes.active = /*$showControls*/ ctx2[0]; if (dirty & /*$$scope*/ 536870912) { button0_changes.$$scope = { dirty, ctx: ctx2 }; } button0.$set(button0_changes); const button1_changes = {}; if (dirty & /*$showMinimap*/ 2) button1_changes.active = /*$showMinimap*/ ctx2[1]; if (dirty & /*$$scope*/ 536870912) { button1_changes.$$scope = { dirty, ctx: ctx2 }; } button1.$set(button1_changes); if (!current || dirty & /*$showControls*/ 1) { attr( div1, "data-visible", /*$showControls*/ ctx2[0] ); } const button2_changes = {}; if (dirty & /*$controls*/ 4) button2_changes.active = /*$controls*/ ctx2[2].showSettingsSidebar; if (dirty & /*$$scope*/ 536870912) { button2_changes.$$scope = { dirty, ctx: ctx2 }; } button2.$set(button2_changes); const button3_changes = {}; if (dirty & /*$controls*/ 4) button3_changes.active = /*$controls*/ ctx2[2].showHelpSidebar; if (dirty & /*$$scope*/ 536870912) { button3_changes.$$scope = { dirty, ctx: ctx2 }; } button3.$set(button3_changes); const button4_changes = {}; if (dirty & /*$controls*/ 4) button4_changes.active = /*$controls*/ ctx2[2].showStyleRulesModal; if (dirty & /*$$scope*/ 536870912) { button4_changes.$$scope = { dirty, ctx: ctx2 }; } button4.$set(button4_changes); if (!current || dirty & /*$showControls*/ 1) { attr( div2, "data-visible", /*$showControls*/ ctx2[0] ); } const button5_changes = {}; if (dirty & /*$scrollSettingsStore*/ 8) button5_changes.active = /*$scrollSettingsStore*/ ctx2[3].centerActiveNodeH; if (dirty & /*$$scope*/ 536870912) { button5_changes.$$scope = { dirty, ctx: ctx2 }; } button5.$set(button5_changes); const button6_changes = {}; if (dirty & /*$scrollSettingsStore*/ 8) button6_changes.active = /*$scrollSettingsStore*/ ctx2[3].centerActiveNodeV; if (dirty & /*$$scope*/ 536870912) { button6_changes.$$scope = { dirty, ctx: ctx2 }; } button6.$set(button6_changes); if (!current || dirty & /*$showControls*/ 1) { attr( div3, "data-visible", /*$showControls*/ ctx2[0] ); } const button7_changes = {}; if (dirty & /*$outlineMode*/ 16) button7_changes.active = /*$outlineMode*/ ctx2[4]; if (dirty & /*$$scope*/ 536870912) { button7_changes.$$scope = { dirty, ctx: ctx2 }; } button7.$set(button7_changes); const button8_changes = {}; if (dirty & /*$applyGapBetweenCards*/ 32) button8_changes.active = /*$applyGapBetweenCards*/ ctx2[5]; if (dirty & /*$$scope*/ 536870912) { button8_changes.$$scope = { dirty, ctx: ctx2 }; } button8.$set(button8_changes); if (!current || dirty & /*$showControls*/ 1) { attr( div4, "data-visible", /*$showControls*/ ctx2[0] ); } const button9_changes = {}; if (dirty & /*$controls*/ 4) button9_changes.active = /*$controls*/ ctx2[2].showHistorySidebar; if (dirty & /*$history*/ 64) button9_changes.disabled = /*$history*/ ctx2[6].items.length === 0; if (dirty & /*$$scope*/ 536870912) { button9_changes.$$scope = { dirty, ctx: ctx2 }; } button9.$set(button9_changes); const button10_changes = {}; if (dirty & /*$history*/ 64) button10_changes.disabled = !/*$history*/ ctx2[6].state.canGoBack; if (dirty & /*$$scope*/ 536870912) { button10_changes.$$scope = { dirty, ctx: ctx2 }; } button10.$set(button10_changes); const button11_changes = {}; if (dirty & /*$history*/ 64) button11_changes.disabled = !/*$history*/ ctx2[6].state.canGoForward; if (dirty & /*$$scope*/ 536870912) { button11_changes.$$scope = { dirty, ctx: ctx2 }; } button11.$set(button11_changes); if (!current || dirty & /*$showControls*/ 1) { attr( div5, "data-visible", /*$showControls*/ ctx2[0] ); } const zoombuttons_changes = {}; if (dirty & /*$showControls*/ 1) zoombuttons_changes.showControls = /*$showControls*/ ctx2[0]; zoombuttons.$set(zoombuttons_changes); }, i(local) { if (current) return; transition_in(button0.$$.fragment, local); transition_in(button1.$$.fragment, local); transition_in(button2.$$.fragment, local); transition_in(button3.$$.fragment, local); transition_in(button4.$$.fragment, local); transition_in(button5.$$.fragment, local); transition_in(button6.$$.fragment, local); transition_in(button7.$$.fragment, local); transition_in(button8.$$.fragment, local); transition_in(button9.$$.fragment, local); transition_in(button10.$$.fragment, local); transition_in(button11.$$.fragment, local); transition_in(zoombuttons.$$.fragment, local); current = true; }, o(local) { transition_out(button0.$$.fragment, local); transition_out(button1.$$.fragment, local); transition_out(button2.$$.fragment, local); transition_out(button3.$$.fragment, local); transition_out(button4.$$.fragment, local); transition_out(button5.$$.fragment, local); transition_out(button6.$$.fragment, local); transition_out(button7.$$.fragment, local); transition_out(button8.$$.fragment, local); transition_out(button9.$$.fragment, local); transition_out(button10.$$.fragment, local); transition_out(button11.$$.fragment, local); transition_out(zoombuttons.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div6); } destroy_component(button0); destroy_component(button1); destroy_component(button2); destroy_component(button3); destroy_component(button4); destroy_component(button5); destroy_component(button6); destroy_component(button7); destroy_component(button8); destroy_component(button9); destroy_component(button10); destroy_component(button11); destroy_component(zoombuttons); } }; } function instance47($$self, $$props, $$invalidate) { let $showControls; let $showMinimap; let $controls; let $scrollSettingsStore; let $outlineMode; let $applyGapBetweenCards; let $history; const view = getView(); const viewStore = view.viewStore; const documentStore = view.documentStore; const history = historyStore(view); component_subscribe($$self, history, (value) => $$invalidate(6, $history = value)); const handleNextClick = () => { if (viewStore.getValue().document.editing.activeNodeId) new import_obsidian3.Notice(lang.error_apply_snapshot_while_editing); else documentStore.dispatch({ type: "HISTORY/APPLY_NEXT_SNAPSHOT" }); }; const handlePreviousClick = () => { if (viewStore.getValue().document.editing.activeNodeId) new import_obsidian3.Notice(lang.error_apply_snapshot_while_editing); else documentStore.dispatch({ type: "HISTORY/APPLY_PREVIOUS_SNAPSHOT" }); }; const toggleHelp = () => { viewStore.dispatch({ type: "UI/TOGGLE_HELP_SIDEBAR" }); }; const toggleStyleRules = () => { viewStore.dispatch({ type: "view/modals/toggle-style-rules" }); }; const toggleSettings = () => { viewStore.dispatch({ type: "UI/TOGGLE_SETTINGS_SIDEBAR" }); }; const controls = uiControlsStore(view); component_subscribe($$self, controls, (value) => $$invalidate(2, $controls = value)); const showControls = writable(false); component_subscribe($$self, showControls, (value) => $$invalidate(0, $showControls = value)); const toggleShowControls = () => { showControls.update((v) => !v); }; const showMinimap = showMinimapStore(view); component_subscribe($$self, showMinimap, (value) => $$invalidate(1, $showMinimap = value)); const toggleMinimap = () => { view.plugin.settings.dispatch({ type: "VIEW/TOGGLE_MINIMAP" }); }; const toggleScrollModeH = () => { view.plugin.settings.dispatch({ type: "VIEW/SCROLLING/TOGGLE_SCROLLING_MODE" }); }; const toggleScrollModeV = () => { view.plugin.settings.dispatch({ type: "settings/view/scrolling/toggle-vertical-scrolling-mode" }); }; const scrollSettingsStore = ScrollSettingsStore(view); component_subscribe($$self, scrollSettingsStore, (value) => $$invalidate(3, $scrollSettingsStore = value)); const applyGapBetweenCards = ApplyGapBetweenCardsStore(view); component_subscribe($$self, applyGapBetweenCards, (value) => $$invalidate(5, $applyGapBetweenCards = value)); const toggleGap = () => { view.plugin.settings.dispatch({ type: "view/modes/gap-between-cards/toggle" }); }; const outlineMode = OutlineModeStore(view); component_subscribe($$self, outlineMode, (value) => $$invalidate(4, $outlineMode = value)); const toggleOutlineMode = () => { view.plugin.settings.dispatch({ type: "settings/view/modes/toggle-outline-mode" }); }; const click_handler = () => { viewStore.dispatch({ type: "UI/TOGGLE_HISTORY_SIDEBAR" }); }; return [ $showControls, $showMinimap, $controls, $scrollSettingsStore, $outlineMode, $applyGapBetweenCards, $history, viewStore, history, handleNextClick, handlePreviousClick, toggleHelp, toggleStyleRules, toggleSettings, controls, showControls, toggleShowControls, showMinimap, toggleMinimap, toggleScrollModeH, toggleScrollModeV, scrollSettingsStore, applyGapBetweenCards, toggleGap, outlineMode, toggleOutlineMode, click_handler ]; } var Controls_container = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance47, create_fragment47, safe_not_equal, {}, add_css); } }; var controls_container_default = Controls_container; // src/lib/tree-utils/find/find-node-column.ts var findNodeColumn = (columns, nodeId) => { for (let i = 0; i < columns.length; i++) { const column = columns[i]; for (const group of column.groups) { if (group.nodes.find((n) => n === nodeId)) return i; } } return -1; }; // src/lib/tree-utils/get/traverse-down.ts var traverseDown = (columns, nodeId, cleanDocument) => { const result = []; let nodeColumnIndex = 0; if (cleanDocument) { nodeColumnIndex = findNodeColumn(columns, nodeId) + 1; if (nodeColumnIndex > columns.length - 1) { return result; } } const currentParents = /* @__PURE__ */ new Set([nodeId]); let firstResult = false; for (let i = nodeColumnIndex; i < columns.length; i++) { const column = columns[i]; let columnResult = false; for (const group of column.groups) { if (currentParents.has(group.parentId)) { result.push(group.parentId); group.nodes.forEach((node) => currentParents.add(node)); columnResult = true; if (!firstResult) firstResult = true; } } if (firstResult && !columnResult) break; } return result; }; // src/view/actions/dnd/draggable.ts var DND_ACTIVE_CLASS = "is-dragged"; var toggleDraggedNodeVisibility = (node, data, visible) => { requestAnimationFrame(() => { const parent = node.matchParent("#" + data.id); if (parent) { parent.style.display = visible ? "flex" : "none"; parent.toggleClass(DND_ACTIVE_CLASS, !visible); } }); }; var draggable = (node, data) => { const view = getView(); const viewStore = view.viewStore; const documentStore = view.documentStore; if (data.isInSidebar) return; node.draggable = true; const handleDragstart = (event) => { if (!event.dataTransfer) return; const target = event.currentTarget; if (event.clientX - target.getBoundingClientRect().x <= 7 || target.dataset["test"] === "true") { event.dataTransfer.setData("text/plain", data.id); setTimeout(() => { const childGroups = traverseDown( documentStore.getValue().document.columns, data.id, false ); viewStore.dispatch({ type: "SET_DRAG_STARTED", payload: { nodeId: data.id, childGroups } }); toggleDraggedNodeVisibility(node, data, false); }, 0); } else { event.preventDefault(); } }; node.addEventListener("dragstart", handleDragstart); const handleDragEnd = () => { viewStore.dispatch({ type: "DOCUMENT/SET_DRAG_ENDED" }); toggleDraggedNodeVisibility(node, data, true); }; node.addEventListener("dragend", handleDragEnd); return { destroy: () => { node.removeEventListener("dragstart", handleDragstart); node.removeEventListener("dragend", handleDragEnd); } }; }; // src/view/components/container/column/components/group/components/card/components/dnd/draggable.svelte function add_css2(target) { append_styles(target, "svelte-gtjx2q", ".draggable.svelte-gtjx2q.svelte-gtjx2q{width:100%;background-color:transparent;display:flex;position:relative}.drag-handle.svelte-gtjx2q.svelte-gtjx2q{height:100%;width:6px;background-color:transparent;cursor:grab;position:absolute;left:-5px;z-index:10}.active-node .drag-handle.svelte-gtjx2q.svelte-gtjx2q{left:0}.draggable.svelte-gtjx2q:hover .drag-handle.svelte-gtjx2q{background-size:2px 4px;background-image:linear-gradient(\n 0deg,\n hsla(0, 0%, 60%, 0.5) 20%,\n transparent 40%\n )}.content.svelte-gtjx2q.svelte-gtjx2q{width:100%\n }"); } function create_if_block2(ctx) { let div; return { c() { div = element("div"); attr(div, "class", "drag-handle svelte-gtjx2q"); }, m(target, anchor) { insert(target, div, anchor); }, d(detaching) { if (detaching) { detach(div); } } }; } function create_fragment48(ctx) { let div1; let t; let div0; let draggable_action; let current; let mounted; let dispose; let if_block = !/*isInSidebar*/ ctx[0] && create_if_block2(ctx); const default_slot_template = ( /*#slots*/ ctx[3].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[2], null ); return { c() { div1 = element("div"); if (if_block) if_block.c(); t = space(); div0 = element("div"); if (default_slot) default_slot.c(); attr(div0, "class", "content svelte-gtjx2q"); attr(div1, "class", "draggable svelte-gtjx2q"); }, m(target, anchor) { insert(target, div1, anchor); if (if_block) if_block.m(div1, null); append(div1, t); append(div1, div0); if (default_slot) { default_slot.m(div0, null); } current = true; if (!mounted) { dispose = action_destroyer(draggable_action = draggable.call(null, div1, { id: ( /*nodeId*/ ctx[1] ), isInSidebar: ( /*isInSidebar*/ ctx[0] ) })); mounted = true; } }, p(ctx2, [dirty]) { if (!/*isInSidebar*/ ctx2[0]) { if (if_block) { } else { if_block = create_if_block2(ctx2); if_block.c(); if_block.m(div1, t); } } else if (if_block) { if_block.d(1); if_block = null; } if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 4)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[2], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[2] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[2], dirty, null ), null ); } } if (draggable_action && is_function(draggable_action.update) && dirty & /*nodeId, isInSidebar*/ 3) draggable_action.update.call(null, { id: ( /*nodeId*/ ctx2[1] ), isInSidebar: ( /*isInSidebar*/ ctx2[0] ) }); }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } if (if_block) if_block.d(); if (default_slot) default_slot.d(detaching); mounted = false; dispose(); } }; } function instance48($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; let { isInSidebar } = $$props; let { nodeId } = $$props; $$self.$$set = ($$props2) => { if ("isInSidebar" in $$props2) $$invalidate(0, isInSidebar = $$props2.isInSidebar); if ("nodeId" in $$props2) $$invalidate(1, nodeId = $$props2.nodeId); if ("$$scope" in $$props2) $$invalidate(2, $$scope = $$props2.$$scope); }; return [isInSidebar, nodeId, $$scope, slots]; } var Draggable = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance48, create_fragment48, safe_not_equal, { isInSidebar: 0, nodeId: 1 }, add_css2); } }; var draggable_default = Draggable; // src/view/actions/inline-editor/load-inline-editor.ts var loadInlineEditor = (target, nodeId) => { const view = getView(); if (!view.file) return; view.inlineEditor.loadNode(target, nodeId); return { destroy: () => { view.inlineEditor.unloadNode(nodeId); } }; }; // src/stores/settings/derived/limit-preview-height-store.ts var limitPreviewHeightStore = (view) => derived(view.plugin.settings, (state2) => state2.view.limitPreviewHeight); // src/view/actions/inline-editor/expandable-textarea-action.ts var deletionKeys = /* @__PURE__ */ new Set(["Backspace", "Delete", "x", " "]); var AdjustHeight = (view, el) => { let previousScrollHeight = 0; let x; const limitCardHeight = get_store_value(limitPreviewHeightStore(view)); return (e) => { if (!x) { x = el.querySelector(".cm-scroller"); } if (!x) return; requestAnimationFrame(() => { const scrollHeight = x.scrollHeight; const scrollHeightChange = scrollHeight > 100 && scrollHeight !== previousScrollHeight; if (scrollHeightChange || e && deletionKeys.has(e.key)) { x.style.height = "auto"; previousScrollHeight = x.scrollHeight; el.style.height = previousScrollHeight + "px"; x.style.height = ""; if (limitCardHeight && scrollHeightChange) { view.alignBranch.align({ type: "view/align-branch/reveal-node" }); } } }); }; }; var expandableTextareaAction = (el) => { const view = getView(); const adjustHeight = AdjustHeight(view, el); el.addEventListener("keydown", adjustHeight); return { destroy: () => { el.removeEventListener("keydown", adjustHeight); } }; }; // src/view/components/container/column/components/group/components/card/components/content/inline-editor.svelte function add_css3(target) { append_styles(target, "svelte-lini95", ".editor-container.svelte-lini95{width:100%;min-height:var(--min-node-height);height:fit-content;overflow:hidden;display:flex}.apply-style-rule.svelte-lini95{& .view-content {\n background-color: transparent !important;\n }}"); } function create_fragment49(ctx) { let div; let div_class_value; let expandableTextareaAction_action; let loadInlineEditor_action; let mounted; let dispose; return { c() { div = element("div"); attr(div, "class", div_class_value = null_to_empty("editor-container" + /*style*/ (ctx[1] ? " apply-style-rule" : "")) + " svelte-lini95"); }, m(target, anchor) { insert(target, div, anchor); if (!mounted) { dispose = [ action_destroyer(expandableTextareaAction_action = expandableTextareaAction.call(null, div)), action_destroyer(loadInlineEditor_action = loadInlineEditor.call( null, div, /*nodeId*/ ctx[0] )) ]; mounted = true; } }, p(ctx2, [dirty]) { if (dirty & /*style*/ 2 && div_class_value !== (div_class_value = null_to_empty("editor-container" + /*style*/ (ctx2[1] ? " apply-style-rule" : "")) + " svelte-lini95")) { attr(div, "class", div_class_value); } if (loadInlineEditor_action && is_function(loadInlineEditor_action.update) && dirty & /*nodeId*/ 1) loadInlineEditor_action.update.call( null, /*nodeId*/ ctx2[0] ); }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function instance49($$self, $$props, $$invalidate) { let { nodeId } = $$props; let { style } = $$props; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(0, nodeId = $$props2.nodeId); if ("style" in $$props2) $$invalidate(1, style = $$props2.style); }; return [nodeId, style]; } var Inline_editor = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance49, create_fragment49, safe_not_equal, { nodeId: 0, style: 1 }, add_css3); } }; var inline_editor_default = Inline_editor; // src/view/actions/markdown-preview/markdown-preview-action.ts var import_obsidian4 = require("obsidian"); // src/stores/document/derived/content-store.ts var contentStore = (view, nodeId) => { let nodeContent; let documentContent; return derived(view.documentStore, (state2) => { if (!nodeContent || documentContent !== state2.document.content || nodeContent !== documentContent[nodeId]) { documentContent = state2.document.content; nodeContent = documentContent[nodeId]; if (!nodeContent) return ""; } return nodeContent.content; }); }; var documentContentStore = (view) => { return derived(view.documentStore, (state2) => { return state2.document.content; }); }; // src/view/actions/markdown-preview/helpers/format-text.ts var applyNbsp = (text2) => { const lines = text2.split("\n"); let mutated = false; let isInCodeBlock = false; for (let i = 0; i < lines.length; i++) { if (lines[i].startsWith("```")) { isInCodeBlock = !isInCodeBlock; } if (isInCodeBlock) continue; if (lines[i].length > 0) continue; const previousLine = lines[i - 1]; const skipNbsp = i > 0 && (previousLine.startsWith("- ") || previousLine.startsWith("> ")); if (!skipNbsp) { lines[i] = " "; mutated = true; } } return mutated ? lines.join("\n") : text2; }; var formatText = (text2) => { if (/\s+(\^[a-zA-Z0-9]{4,})$/.test(text2)) { text2 = text2.replace( /\s+(\^[a-zA-Z0-9]{4,})$/gm, ' $1' ); } if (/%%/.test(text2)) { text2 = text2.replace( /%%(.*?)%%/gms, `%\u200B%$1%\u200B%` ); } if (//gms, '<!--$1-->' ); } if (/^\s*$/gm.test(text2) && !/^\|.*\|/m.test(text2)) { text2 = applyNbsp(text2); } return text2; }; // src/view/actions/markdown-preview/markdown-preview-action.ts var markdownPreviewAction = (element2, nodeId) => { const plugin = getPlugin(); const view = getView(); const store = view.documentStore; const render = (content) => { if (view && element2) { element2.empty(); if (content.length > 0) { content = formatText(content); } import_obsidian4.MarkdownRenderer.render( plugin.app, content, element2, store.getValue().file.path, view ); } }; const $content = contentStore(view, nodeId); const unsub = $content.subscribe((content) => { render(content); }); return { destroy: () => { unsub(); } }; }; // src/view/components/container/column/components/group/components/card/components/content/event-handlers/helpers/get-existing-right-tab-group.ts var getExistingRightTabGroup = (view) => { const rootSplit = view.plugin.app.workspace.rootSplit; if (!("children" in rootSplit)) return; const viewTabGroup = "parent" in view.leaf ? view.leaf.parent : null; if (!viewTabGroup || !(typeof viewTabGroup === "object")) return; if (!("type" in viewTabGroup && viewTabGroup.type === "tabs")) return; const children2 = rootSplit["children"]; if (children2 && Array.isArray(children2)) { const viewTabGroupIndex = children2.findIndex( (group) => viewTabGroup === group ); if (viewTabGroupIndex !== -1) { return children2[viewTabGroupIndex + 1]; } } }; // src/view/components/container/column/components/group/components/card/components/content/event-handlers/helpers/open-file-in-existing-right-tab-group.ts var openFileInExistingRightTabGroup = (view, link, activeFilePath) => { const rightTabGroup = getExistingRightTabGroup(view); if (!rightTabGroup) return false; const workspace = view.plugin.app.workspace; if (!("createLeafInTabGroup" in workspace && typeof workspace.createLeafInTabGroup === "function")) return false; const newLeaf = workspace.createLeafInTabGroup( rightTabGroup ); if (newLeaf) { const linkedFile = view.plugin.app.metadataCache.getFirstLinkpathDest( link, activeFilePath ); if (linkedFile) { newLeaf.openFile(linkedFile); return true; } } return false; }; // src/view/components/container/column/components/group/components/card/components/content/event-handlers/handle-links.ts var selectCard = (view, id2) => { view.viewStore.dispatch({ type: "view/set-active-node/mouse", payload: { id: id2 } }); }; var handleFile = (view, link) => { const path = view.documentStore.getValue().file.path; if (!link || !path) return; const success = openFileInExistingRightTabGroup(view, link, path); if (!success) { view.plugin.app.workspace.openLinkText(link, path, "split"); } }; var handleHeading = (view, link) => { const levelMatch = /(#+)/.exec(link); if (levelMatch) { for (let level2 = 1; level2 <= 6; level2++) { const headings = Array.from( view.containerEl.querySelectorAll("h" + level2) ); const heading = headings.find( (h) => "#" + h.dataset.heading === link ); if (heading) { const card = heading.closest(".lineage-card"); if (card && card.id) { selectCard(view, card.id); break; } } } } }; var handleBlockLink = (view, link) => { const match = /#\^([a-zA-Z0-9]{4,})$/.exec(link); if (match) { const id2 = match[1]; if (id2) { const element2 = view.containerEl.querySelector( `[data-block-id="^${id2}"` ); if (element2) { const card = element2.closest(".lineage-card"); if (card && card.id) { selectCard(view, card.id); } } } } }; var handleLinks = (view, e) => { if (!(e.target instanceof HTMLAnchorElement)) return; if (!e.target.hasClass("internal-link")) return; const link = e.target.dataset.href; if (!link) return; if (link.contains("#^")) { e.stopPropagation(); handleBlockLink(view, link); } else if (link.startsWith("#")) { e.stopPropagation(); handleHeading(view, link); } else { handleFile(view, link); } }; // src/view/components/container/column/components/group/components/card/components/content/event-handlers/get-cursor-position.ts var getCursorPosition = (markdownText, event) => { const range = document.caretRangeFromPoint(event.clientX, event.clientY); if (!range) return null; const lines = markdownText.split("\n"); const clickedText = range.startContainer.textContent || ""; const offset = range.startOffset; const start = Math.max(0, offset - 10); const end = Math.min(clickedText.length, offset + 10); const context = clickedText.slice(start, end); for (let i = 0; i < lines.length; i++) { if (lines[i].contains(context)) { const startInLine = lines[i].indexOf(context) + (offset - start); return { line: i, ch: startInLine }; } } return null; }; // src/view/components/container/column/components/group/components/card/components/content/event-handlers/helpers/is-grabbing.ts var isGrabbing = (view) => { const cursor2 = view.container.style.cursor; if (cursor2 === "grab") return true; return false; }; // src/stores/view/subscriptions/actions/set-active-sidebar-node.ts var setActiveSidebarNode = (view, id2) => { const settings = view.plugin.settings.getValue(); const activeTab = settings.view.leftSidebarActiveTab; view.viewStore.dispatch({ type: activeTab === "pinned-cards" ? "view/pinned-nodes/set-active-node" : "view/recent-nodes/set-active-node", payload: { id: id2 } }); }; // src/view/actions/keyboard-shortcuts/helpers/keyboard-events/mod-key.ts var import_obsidian5 = require("obsidian"); var isMacLike = import_obsidian5.Platform.isMacOS || import_obsidian5.Platform.isIosApp; var modKey = isMacLike ? "Cmd" : "Ctrl"; // src/view/components/container/column/components/group/components/card/components/content/store-actions/set-active-main-split-node.ts var setActiveMainSplitNode = (view, nodeId, e) => { const silent = isMacLike ? e.metaKey : e.ctrlKey; view.viewStore.dispatch({ type: silent ? "view/set-active-node/mouse-silent" : "view/set-active-node/mouse", payload: { id: nodeId } }); }; // src/view/components/container/column/components/group/components/card/components/content/store-actions/enable-edit-mode-in-sidebar.ts var enableEditModeInSidebar = (view, nodeId) => { const settings = view.plugin.settings.getValue(); const activeSidebarTab = settings.view.leftSidebarActiveTab; view.viewStore.dispatch({ type: "view/sidebar/enable-edit", payload: { id: nodeId }, context: { activeSidebarTab } }); }; // src/view/components/container/column/components/group/components/card/components/content/store-actions/enable-edit-mode-in-main-split.ts var enableEditModeInMainSplit = (view, nodeId) => { view.viewStore.dispatch({ type: "view/main/enable-edit", payload: { nodeId } }); }; // src/view/components/container/column/components/group/components/card/components/content/content.svelte function add_css4(target) { append_styles(target, "svelte-1wqkxy4", ".lng-prev.svelte-1wqkxy4{width:100%;min-height:var(--min-node-height);font-size:var(--font-text-size);padding:6px 6px 10px 12px;color-scheme:light}"); } function create_fragment50(ctx) { let div; let div_class_value; let markdownPreviewAction_action; let mounted; let dispose; return { c() { div = element("div"); attr(div, "class", div_class_value = null_to_empty("lng-prev markdown-preview-view markdown-preview-section markdown-rendered") + " svelte-1wqkxy4"); }, m(target, anchor) { insert(target, div, anchor); if (!mounted) { dispose = [ listen( div, "click", /*handleClick*/ ctx[1] ), listen( div, "dblclick", /*handleDoubleClick*/ ctx[2] ), action_destroyer(markdownPreviewAction_action = markdownPreviewAction.call( null, div, /*nodeId*/ ctx[0] )) ]; mounted = true; } }, p(ctx2, [dirty]) { if (markdownPreviewAction_action && is_function(markdownPreviewAction_action.update) && dirty & /*nodeId*/ 1) markdownPreviewAction_action.update.call( null, /*nodeId*/ ctx2[0] ); }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function instance50($$self, $$props, $$invalidate) { let { nodeId } = $$props; let { isInSidebar } = $$props; let { active } = $$props; const view = getView(); const setActiveNode2 = (e) => { if (isInSidebar) { setActiveSidebarNode(view, nodeId); } else { setActiveMainSplitNode(view, nodeId, e); } }; const enableEditMode3 = () => { if (isInSidebar) { enableEditModeInSidebar(view, nodeId); } else { enableEditModeInMainSplit(view, nodeId); } }; const enableEditModeAtCursor = (e) => { const content = get_store_value(contentStore(view, nodeId)); const cursor2 = getCursorPosition(content, e); setActiveNode2(e); if (cursor2) { view.inlineEditor.setNodeCursor(nodeId, cursor2); } enableEditMode3(); }; const anotherNodeIsBeingEdited = () => { const isNotActiveNode = active !== "node" /* node */; const editingState = view.viewStore.getValue().document.editing; return isNotActiveNode && editingState.activeNodeId && !editingState.isInSidebar; }; const handleClick = (e) => { if (isGrabbing(view)) return; const maintainEditMode2 = get_store_value(MaintainEditMode(view)); const enableEditOnSingleClick = maintainEditMode2 && !isInSidebar && anotherNodeIsBeingEdited(); if (enableEditOnSingleClick) { enableEditModeAtCursor(e); } else { handleLinks(view, e); setActiveNode2(e); } }; const handleDoubleClick = (e) => { if (isGrabbing(view)) return; enableEditModeAtCursor(e); }; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(0, nodeId = $$props2.nodeId); if ("isInSidebar" in $$props2) $$invalidate(3, isInSidebar = $$props2.isInSidebar); if ("active" in $$props2) $$invalidate(4, active = $$props2.active); }; return [nodeId, handleClick, handleDoubleClick, isInSidebar, active]; } var Content = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance50, create_fragment50, safe_not_equal, { nodeId: 0, isInSidebar: 3, active: 4 }, add_css4); } }; var content_default = Content; // src/view/components/container/column/components/group/components/card/components/card-buttons/shared/floating-button.svelte var import_classnames = __toESM(require_classnames()); function create_fragment51(ctx) { let button; let button_class_value; let current; let mounted; let dispose; const default_slot_template = ( /*#slots*/ ctx[5].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[4], null ); return { c() { button = element("button"); if (default_slot) default_slot.c(); attr( button, "aria-label", /*label*/ ctx[2] ); attr(button, "class", button_class_value = (0, import_classnames.default)( /*classes*/ ctx[0], /*positionClasses*/ ctx[3][ /*position*/ ctx[1] ], "lineage-floating-button" )); }, m(target, anchor) { insert(target, button, anchor); if (default_slot) { default_slot.m(button, null); } current = true; if (!mounted) { dispose = listen( button, "click", /*click_handler*/ ctx[6] ); mounted = true; } }, p(ctx2, [dirty]) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 16)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[4], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[4] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[4], dirty, null ), null ); } } if (!current || dirty & /*label*/ 4) { attr( button, "aria-label", /*label*/ ctx2[2] ); } if (!current || dirty & /*classes, position*/ 3 && button_class_value !== (button_class_value = (0, import_classnames.default)( /*classes*/ ctx2[0], /*positionClasses*/ ctx2[3][ /*position*/ ctx2[1] ], "lineage-floating-button" ))) { attr(button, "class", button_class_value); } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(button); } if (default_slot) default_slot.d(detaching); mounted = false; dispose(); } }; } function instance51($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; let { classes = "" } = $$props; let { position } = $$props; let { label } = $$props; const positionClasses = { up: "position-top", right: "position-right", down: "position-bottom", "down-right": "position-bottom-right", "up-right": "position-top-right", collapse: "collapse-button" }; function click_handler(event) { bubble.call(this, $$self, event); } $$self.$$set = ($$props2) => { if ("classes" in $$props2) $$invalidate(0, classes = $$props2.classes); if ("position" in $$props2) $$invalidate(1, position = $$props2.position); if ("label" in $$props2) $$invalidate(2, label = $$props2.label); if ("$$scope" in $$props2) $$invalidate(4, $$scope = $$props2.$$scope); }; return [classes, position, label, positionClasses, $$scope, slots, click_handler]; } var Floating_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance51, create_fragment51, safe_not_equal, { classes: 0, position: 1, label: 2 }); } }; var floating_button_default = Floating_button; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/delete-node.ts var deleteNode = (view, nodeId, includeSelection = false) => { const documentStore = view.documentStore; const viewState = view.viewStore.getValue(); if (viewState.document.pendingConfirmation.deleteNode.has(nodeId)) { const selectedNodes = includeSelection ? viewState.document.selectedNodes : void 0; documentStore.dispatch({ type: "DOCUMENT/DELETE_NODE", payload: { activeNodeId: nodeId, selectedNodes } }); view.viewStore.dispatch({ type: "view/confirmation/reset/delete-node" }); } else { view.viewStore.dispatch({ type: "view/confirmation/confirm/delete-node", payload: { id: nodeId, includeSelection } }); } }; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/components/delete-node-button.svelte function create_default_slot46(ctx) { let trashicon; let current; trashicon = new trash_default({ props: { class: "svg-con" } }); return { c() { create_component(trashicon.$$.fragment); }, m(target, anchor) { mount_component(trashicon, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(trashicon.$$.fragment, local); current = true; }, o(local) { transition_out(trashicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(trashicon, detaching); } }; } function create_fragment52(ctx) { let floatingbutton; let current; floatingbutton = new floating_button_default({ props: { label: lang.card_btn_delete, position: "up-right", classes: "delete-card-button", $$slots: { default: [create_default_slot46] }, $$scope: { ctx } } }); floatingbutton.$on( "click", /*_deleteNode*/ ctx[0] ); return { c() { create_component(floatingbutton.$$.fragment); }, m(target, anchor) { mount_component(floatingbutton, target, anchor); current = true; }, p(ctx2, [dirty]) { const floatingbutton_changes = {}; if (dirty & /*$$scope*/ 8) { floatingbutton_changes.$$scope = { dirty, ctx: ctx2 }; } floatingbutton.$set(floatingbutton_changes); }, i(local) { if (current) return; transition_in(floatingbutton.$$.fragment, local); current = true; }, o(local) { transition_out(floatingbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(floatingbutton, detaching); } }; } function instance52($$self, $$props, $$invalidate) { let { nodeId } = $$props; const view = getView(); const _deleteNode = (e) => { e.stopPropagation(); deleteNode(view, nodeId); }; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(1, nodeId = $$props2.nodeId); }; return [_deleteNode, nodeId]; } var Delete_node_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance52, create_fragment52, safe_not_equal, { nodeId: 1 }); } }; var delete_node_button_default = Delete_node_button; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/save-node-content.ts var saveNodeContent = (view, modKey2 = false) => { if (view.inlineEditor.nodeId) { view.inlineEditor.unloadNode(); const isInSidebar = view.viewStore.getValue().document.editing.isInSidebar; if (isInSidebar) { view.viewStore.dispatch({ type: "view/sidebar/disable-edit", context: { modKey: modKey2 } }); } else { view.viewStore.dispatch({ type: "view/main/disable-edit", context: { modKey: modKey2 } }); } } }; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/components/edit-node-button.svelte function create_else_block2(ctx) { let pencilicon; let current; pencilicon = new pencil_default({ props: { class: "svg-icon" } }); return { c() { create_component(pencilicon.$$.fragment); }, m(target, anchor) { mount_component(pencilicon, target, anchor); current = true; }, i(local) { if (current) return; transition_in(pencilicon.$$.fragment, local); current = true; }, o(local) { transition_out(pencilicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(pencilicon, detaching); } }; } function create_if_block3(ctx) { let saveicon; let current; saveicon = new save_default({ props: { class: "svg-con" } }); return { c() { create_component(saveicon.$$.fragment); }, m(target, anchor) { mount_component(saveicon, target, anchor); current = true; }, i(local) { if (current) return; transition_in(saveicon.$$.fragment, local); current = true; }, o(local) { transition_out(saveicon.$$.fragment, local); current = false; }, d(detaching) { destroy_component(saveicon, detaching); } }; } function create_default_slot47(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block3, create_else_block2]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*editing*/ ctx2[0] ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if_blocks[current_block_type_index].m(target, anchor); insert(target, if_block_anchor, anchor); current = true; }, p(ctx2, dirty) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index !== previous_block_index) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(if_block_anchor); } if_blocks[current_block_type_index].d(detaching); } }; } function create_fragment53(ctx) { let floatingbutton; let current; floatingbutton = new floating_button_default({ props: { label: ( /*editing*/ ctx[0] ? lang.card_btn_save : lang.card_btn_edit ), position: "down-right", $$slots: { default: [create_default_slot47] }, $$scope: { ctx } } }); floatingbutton.$on( "click", /*handleClick*/ ctx[1] ); return { c() { create_component(floatingbutton.$$.fragment); }, m(target, anchor) { mount_component(floatingbutton, target, anchor); current = true; }, p(ctx2, [dirty]) { const floatingbutton_changes = {}; if (dirty & /*editing*/ 1) floatingbutton_changes.label = /*editing*/ ctx2[0] ? lang.card_btn_save : lang.card_btn_edit; if (dirty & /*$$scope, editing*/ 257) { floatingbutton_changes.$$scope = { dirty, ctx: ctx2 }; } floatingbutton.$set(floatingbutton_changes); }, i(local) { if (current) return; transition_in(floatingbutton.$$.fragment, local); current = true; }, o(local) { transition_out(floatingbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(floatingbutton, detaching); } }; } function instance53($$self, $$props, $$invalidate) { let { editing } = $$props; let { nodeId } = $$props; let { isInSidebar } = $$props; const view = getView(); const viewStore = view.viewStore; const enableEditMode3 = (e) => { e.stopPropagation(); if (isInSidebar) { enableEditModeInSidebar(view, nodeId); } else { enableEditModeInMainSplit(view, nodeId); } }; const saveNode = (e) => { e.stopPropagation(); saveNodeContent(view); }; const handleClick = (e) => { if (editing) { saveNode(e); } else { enableEditMode3(e); } }; $$self.$$set = ($$props2) => { if ("editing" in $$props2) $$invalidate(0, editing = $$props2.editing); if ("nodeId" in $$props2) $$invalidate(2, nodeId = $$props2.nodeId); if ("isInSidebar" in $$props2) $$invalidate(3, isInSidebar = $$props2.isInSidebar); }; return [editing, handleClick, nodeId, isInSidebar]; } var Edit_node_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance53, create_fragment53, safe_not_equal, { editing: 0, nodeId: 2, isInSidebar: 3 }); } }; var edit_node_button_default = Edit_node_button; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/is-editing.ts var isEditing = (view) => { return !!view.viewStore.getValue().document.editing.activeNodeId; }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/save-node-and-insert-node.ts var saveNodeAndInsertNode = (view, direction, content = "", activeNodeId) => { if (isEditing(view)) { saveNodeContent(view); } const nodeId = activeNodeId || view.viewStore.getValue().document.activeNode; view.documentStore.dispatch({ type: "DOCUMENT/INSERT_NODE", payload: { position: direction, content, activeNodeId: nodeId } }); if (content) { if (direction === "down" || direction === "right") { view.inlineEditor.setNodeCursor(nodeId, { line: 0, ch: 0 }); } } }; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/components/create-card-button.svelte function create_default_slot48(ctx) { let switch_instance; let switch_instance_anchor; let current; var switch_value = ( /*chevrons*/ ctx[2][ /*position*/ ctx[0] ] ); function switch_props(ctx2, dirty) { return {}; } if (switch_value) { switch_instance = construct_svelte_component(switch_value, switch_props(ctx)); } return { c() { if (switch_instance) create_component(switch_instance.$$.fragment); switch_instance_anchor = empty(); }, m(target, anchor) { if (switch_instance) mount_component(switch_instance, target, anchor); insert(target, switch_instance_anchor, anchor); current = true; }, p(ctx2, dirty) { if (dirty & /*position*/ 1 && switch_value !== (switch_value = /*chevrons*/ ctx2[2][ /*position*/ ctx2[0] ])) { if (switch_instance) { group_outros(); const old_component = switch_instance; transition_out(old_component.$$.fragment, 1, 0, () => { destroy_component(old_component, 1); }); check_outros(); } if (switch_value) { switch_instance = construct_svelte_component(switch_value, switch_props(ctx2, dirty)); create_component(switch_instance.$$.fragment); transition_in(switch_instance.$$.fragment, 1); mount_component(switch_instance, switch_instance_anchor.parentNode, switch_instance_anchor); } else { switch_instance = null; } } else if (switch_value) { } }, i(local) { if (current) return; if (switch_instance) transition_in(switch_instance.$$.fragment, local); current = true; }, o(local) { if (switch_instance) transition_out(switch_instance.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(switch_instance_anchor); } if (switch_instance) destroy_component(switch_instance, detaching); } }; } function create_fragment54(ctx) { let floatingbutton; let current; floatingbutton = new floating_button_default({ props: { label: ( /*label*/ ctx[3][ /*position*/ ctx[0] ] ), position: ( /*position*/ ctx[0] ), $$slots: { default: [create_default_slot48] }, $$scope: { ctx } } }); floatingbutton.$on( "click", /*createCard*/ ctx[1] ); return { c() { create_component(floatingbutton.$$.fragment); }, m(target, anchor) { mount_component(floatingbutton, target, anchor); current = true; }, p(ctx2, [dirty]) { const floatingbutton_changes = {}; if (dirty & /*position*/ 1) floatingbutton_changes.label = /*label*/ ctx2[3][ /*position*/ ctx2[0] ]; if (dirty & /*position*/ 1) floatingbutton_changes.position = /*position*/ ctx2[0]; if (dirty & /*$$scope, position*/ 65) { floatingbutton_changes.$$scope = { dirty, ctx: ctx2 }; } floatingbutton.$set(floatingbutton_changes); }, i(local) { if (current) return; transition_in(floatingbutton.$$.fragment, local); current = true; }, o(local) { transition_out(floatingbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(floatingbutton, detaching); } }; } function instance54($$self, $$props, $$invalidate) { let { nodeId } = $$props; let { position } = $$props; const view = getView(); const createCard = (e) => { e.stopPropagation(); saveNodeAndInsertNode(view, position, void 0, nodeId); }; const chevrons = { right: chevron_right_default, up: chevron_up_default, down: chevron_down_default }; const label = { "up": lang.card_btn_add_card_above, "down": lang.card_btn_add_card_below, "right": lang.card_btn_add_child_card }; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(4, nodeId = $$props2.nodeId); if ("position" in $$props2) $$invalidate(0, position = $$props2.position); }; return [position, createCard, chevrons, label, nodeId]; } var Create_card_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance54, create_fragment54, safe_not_equal, { nodeId: 4, position: 0 }); } }; var create_card_button_default = Create_card_button; // src/stores/view/subscriptions/effects/focus-container.ts var import_obsidian6 = require("obsidian"); var focusContainer = (view) => { setTimeout(() => { if (view.container) { const isEditing2 = Boolean(view.inlineEditor.nodeId); const isEditingOnMobile = import_obsidian6.Platform.isMobile && isEditing2; if (!isEditingOnMobile) { if (isEditing2) view.inlineEditor.focus(); else view.container.focus(); } } }, 16); }; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/components/focus-card-button.svelte function create_default_slot49(ctx) { let focus; let current; focus = new focus_default({ props: { class: "svg-icon" } }); return { c() { create_component(focus.$$.fragment); }, m(target, anchor) { mount_component(focus, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(focus.$$.fragment, local); current = true; }, o(local) { transition_out(focus.$$.fragment, local); current = false; }, d(detaching) { destroy_component(focus, detaching); } }; } function create_fragment55(ctx) { let floatingbutton; let current; floatingbutton = new floating_button_default({ props: { label: lang.card_btn_scroll_to_reveal, position: "up-right", $$slots: { default: [create_default_slot49] }, $$scope: { ctx } } }); floatingbutton.$on( "click", /*focusCard*/ ctx[0] ); return { c() { create_component(floatingbutton.$$.fragment); }, m(target, anchor) { mount_component(floatingbutton, target, anchor); current = true; }, p(ctx2, [dirty]) { const floatingbutton_changes = {}; if (dirty & /*$$scope*/ 8) { floatingbutton_changes.$$scope = { dirty, ctx: ctx2 }; } floatingbutton.$set(floatingbutton_changes); }, i(local) { if (current) return; transition_in(floatingbutton.$$.fragment, local); current = true; }, o(local) { transition_out(floatingbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(floatingbutton, detaching); } }; } function instance55($$self, $$props, $$invalidate) { let { nodeId } = $$props; const view = getView(); const focusCard = () => { view.viewStore.dispatch({ type: "view/set-active-node/mouse", payload: { id: nodeId } }); focusContainer(view); }; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(1, nodeId = $$props2.nodeId); }; return [focusCard, nodeId]; } var Focus_card_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance55, create_fragment55, safe_not_equal, { nodeId: 1 }); } }; var focus_card_button_default = Focus_card_button; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/components/collapse-card-button.svelte function create_else_block3(ctx) { let minus; let current; minus = new minus_default({ props: { class: "svg-icon" } }); return { c() { create_component(minus.$$.fragment); }, m(target, anchor) { mount_component(minus, target, anchor); current = true; }, i(local) { if (current) return; transition_in(minus.$$.fragment, local); current = true; }, o(local) { transition_out(minus.$$.fragment, local); current = false; }, d(detaching) { destroy_component(minus, detaching); } }; } function create_if_block4(ctx) { let plus; let current; plus = new plus_default({ props: { class: "svg-icon" } }); return { c() { create_component(plus.$$.fragment); }, m(target, anchor) { mount_component(plus, target, anchor); current = true; }, i(local) { if (current) return; transition_in(plus.$$.fragment, local); current = true; }, o(local) { transition_out(plus.$$.fragment, local); current = false; }, d(detaching) { destroy_component(plus, detaching); } }; } function create_default_slot50(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block4, create_else_block3]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*collapsed*/ ctx2[0] ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if_blocks[current_block_type_index].m(target, anchor); insert(target, if_block_anchor, anchor); current = true; }, p(ctx2, dirty) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index !== previous_block_index) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(if_block_anchor); } if_blocks[current_block_type_index].d(detaching); } }; } function create_fragment56(ctx) { let floatingbutton; let current; floatingbutton = new floating_button_default({ props: { label: ( /*collapsed*/ ctx[0] ? lang.card_btn_collapse_card : lang.card_btn_expand_card ), position: "collapse", $$slots: { default: [create_default_slot50] }, $$scope: { ctx } } }); floatingbutton.$on( "click", /*toggleCollapse*/ ctx[1] ); return { c() { create_component(floatingbutton.$$.fragment); }, m(target, anchor) { mount_component(floatingbutton, target, anchor); current = true; }, p(ctx2, [dirty]) { const floatingbutton_changes = {}; if (dirty & /*collapsed*/ 1) floatingbutton_changes.label = /*collapsed*/ ctx2[0] ? lang.card_btn_collapse_card : lang.card_btn_expand_card; if (dirty & /*$$scope, collapsed*/ 17) { floatingbutton_changes.$$scope = { dirty, ctx: ctx2 }; } floatingbutton.$set(floatingbutton_changes); }, i(local) { if (current) return; transition_in(floatingbutton.$$.fragment, local); current = true; }, o(local) { transition_out(floatingbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(floatingbutton, detaching); } }; } function instance56($$self, $$props, $$invalidate) { let { nodeId } = $$props; let { collapsed } = $$props; const view = getView(); const toggleCollapse = () => { view.viewStore.dispatch({ type: "view/outline/toggle-collapse-node", payload: { id: nodeId, columns: view.documentStore.getValue().document.columns } }); }; $$self.$$set = ($$props2) => { if ("nodeId" in $$props2) $$invalidate(2, nodeId = $$props2.nodeId); if ("collapsed" in $$props2) $$invalidate(0, collapsed = $$props2.collapsed); }; return [collapsed, toggleCollapse, nodeId]; } var Collapse_card_button = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance56, create_fragment56, safe_not_equal, { nodeId: 2, collapsed: 0 }); } }; var collapse_card_button_default = Collapse_card_button; // src/view/components/container/column/components/group/components/card/components/card-buttons/card-buttons/card-buttons.svelte function create_if_block_1(ctx) { let t; let editnodebutton; let current; let if_block = !/*editing*/ ctx[0] && create_if_block_2(ctx); editnodebutton = new edit_node_button_default({ props: { editing: ( /*editing*/ ctx[0] ), nodeId: ( /*nodeId*/ ctx[1] ), isInSidebar: ( /*isInSidebar*/ ctx[3] ) } }); return { c() { if (if_block) if_block.c(); t = space(); create_component(editnodebutton.$$.fragment); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, t, anchor); mount_component(editnodebutton, target, anchor); current = true; }, p(ctx2, dirty) { if (!/*editing*/ ctx2[0]) { if (if_block) { if_block.p(ctx2, dirty); if (dirty & /*editing*/ 1) { transition_in(if_block, 1); } } else { if_block = create_if_block_2(ctx2); if_block.c(); transition_in(if_block, 1); if_block.m(t.parentNode, t); } } else if (if_block) { group_outros(); transition_out(if_block, 1, 1, () => { if_block = null; }); check_outros(); } const editnodebutton_changes = {}; if (dirty & /*editing*/ 1) editnodebutton_changes.editing = /*editing*/ ctx2[0]; if (dirty & /*nodeId*/ 2) editnodebutton_changes.nodeId = /*nodeId*/ ctx2[1]; if (dirty & /*isInSidebar*/ 8) editnodebutton_changes.isInSidebar = /*isInSidebar*/ ctx2[3]; editnodebutton.$set(editnodebutton_changes); }, i(local) { if (current) return; transition_in(if_block); transition_in(editnodebutton.$$.fragment, local); current = true; }, o(local) { transition_out(if_block); transition_out(editnodebutton.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(t); } if (if_block) if_block.d(detaching); destroy_component(editnodebutton, detaching); } }; } function create_if_block_2(ctx) { let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block_3, create_else_block4]; const if_blocks = []; function select_block_type(ctx2, dirty) { if (!/*isInSidebar*/ ctx2[3]) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if_blocks[current_block_type_index].m(target, anchor); insert(target, if_block_anchor, anchor); current = true; }, p(ctx2, dirty) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index === previous_block_index) { if_blocks[current_block_type_index].p(ctx2, dirty); } else { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { if_block.p(ctx2, dirty); } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(if_block_anchor); } if_blocks[current_block_type_index].d(detaching); } }; } function create_else_block4(ctx) { let focuscardbutton; let current; focuscardbutton = new focus_card_button_default({ props: { nodeId: ( /*nodeId*/ ctx[1] ) } }); return { c() { create_component(focuscardbutton.$$.fragment); }, m(target, anchor) { mount_component(focuscardbutton, target, anchor); current = true; }, p(ctx2, dirty) { const focuscardbutton_changes = {}; if (dirty & /*nodeId*/ 2) focuscardbutton_changes.nodeId = /*nodeId*/ ctx2[1]; focuscardbutton.$set(focuscardbutton_changes); }, i(local) { if (current) return; transition_in(focuscardbutton.$$.fragment, local); current = true; }, o(local) { transition_out(focuscardbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(focuscardbutton, detaching); } }; } function create_if_block_3(ctx) { let createcardbutton0; let t0; let createcardbutton1; let t1; let createcardbutton2; let t2; let deletenodebutton; let current; createcardbutton0 = new create_card_button_default({ props: { position: "up", nodeId: ( /*nodeId*/ ctx[1] ) } }); createcardbutton1 = new create_card_button_default({ props: { position: "right", nodeId: ( /*nodeId*/ ctx[1] ) } }); createcardbutton2 = new create_card_button_default({ props: { position: "down", nodeId: ( /*nodeId*/ ctx[1] ) } }); deletenodebutton = new delete_node_button_default({ props: { nodeId: ( /*nodeId*/ ctx[1] ) } }); return { c() { create_component(createcardbutton0.$$.fragment); t0 = space(); create_component(createcardbutton1.$$.fragment); t1 = space(); create_component(createcardbutton2.$$.fragment); t2 = space(); create_component(deletenodebutton.$$.fragment); }, m(target, anchor) { mount_component(createcardbutton0, target, anchor); insert(target, t0, anchor); mount_component(createcardbutton1, target, anchor); insert(target, t1, anchor); mount_component(createcardbutton2, target, anchor); insert(target, t2, anchor); mount_component(deletenodebutton, target, anchor); current = true; }, p(ctx2, dirty) { const createcardbutton0_changes = {}; if (dirty & /*nodeId*/ 2) createcardbutton0_changes.nodeId = /*nodeId*/ ctx2[1]; createcardbutton0.$set(createcardbutton0_changes); const createcardbutton1_changes = {}; if (dirty & /*nodeId*/ 2) createcardbutton1_changes.nodeId = /*nodeId*/ ctx2[1]; createcardbutton1.$set(createcardbutton1_changes); const createcardbutton2_changes = {}; if (dirty & /*nodeId*/ 2) createcardbutton2_changes.nodeId = /*nodeId*/ ctx2[1]; createcardbutton2.$set(createcardbutton2_changes); const deletenodebutton_changes = {}; if (dirty & /*nodeId*/ 2) deletenodebutton_changes.nodeId = /*nodeId*/ ctx2[1]; deletenodebutton.$set(deletenodebutton_changes); }, i(local) { if (current) return; transition_in(createcardbutton0.$$.fragment, local); transition_in(createcardbutton1.$$.fragment, local); transition_in(createcardbutton2.$$.fragment, local); transition_in(deletenodebutton.$$.fragment, local); current = true; }, o(local) { transition_out(createcardbutton0.$$.fragment, local); transition_out(createcardbutton1.$$.fragment, local); transition_out(createcardbutton2.$$.fragment, local); transition_out(deletenodebutton.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(t0); detach(t1); detach(t2); } destroy_component(createcardbutton0, detaching); destroy_component(createcardbutton1, detaching); destroy_component(createcardbutton2, detaching); destroy_component(deletenodebutton, detaching); } }; } function create_if_block5(ctx) { let collapsecardbutton; let current; collapsecardbutton = new collapse_card_button_default({ props: { nodeId: ( /*nodeId*/ ctx[1] ), collapsed: ( /*collapsed*/ ctx[4] ) } }); return { c() { create_component(collapsecardbutton.$$.fragment); }, m(target, anchor) { mount_component(collapsecardbutton, target, anchor); current = true; }, p(ctx2, dirty) { const collapsecardbutton_changes = {}; if (dirty & /*nodeId*/ 2) collapsecardbutton_changes.nodeId = /*nodeId*/ ctx2[1]; if (dirty & /*collapsed*/ 16) collapsecardbutton_changes.collapsed = /*collapsed*/ ctx2[4]; collapsecardbutton.$set(collapsecardbutton_changes); }, i(local) { if (current) return; transition_in(collapsecardbutton.$$.fragment, local); current = true; }, o(local) { transition_out(collapsecardbutton.$$.fragment, local); current = false; }, d(detaching) { destroy_component(collapsecardbutton, detaching); } }; } function create_fragment57(ctx) { let t; let if_block1_anchor; let current; let if_block0 = ( /*active*/ (ctx[5] === "node" /* node */ || /*alwaysShowCardButtons*/ ctx[6]) && create_if_block_1(ctx) ); let if_block1 = ( /*outlineMode*/ ctx[7] && /*hasChildren*/ ctx[2] && create_if_block5(ctx) ); return { c() { if (if_block0) if_block0.c(); t = space(); if (if_block1) if_block1.c(); if_block1_anchor = empty(); }, m(target, anchor) { if (if_block0) if_block0.m(target, anchor); insert(target, t, anchor); if (if_block1) if_block1.m(target, anchor); insert(target, if_block1_anchor, anchor); current = true; }, p(ctx2, [dirty]) { if ( /*active*/ ctx2[5] === "node" /* node */ || /*alwaysShowCardButtons*/ ctx2[6] ) { if (if_block0) { if_block0.p(ctx2, dirty); if (dirty & /*active, alwaysShowCardButtons*/ 96) { transition_in(if_block0, 1); } } else { if_block0 = create_if_block_1(ctx2); if_block0.c(); transition_in(if_block0, 1); if_block0.m(t.parentNode, t); } } else if (if_block0) { group_outros(); transition_out(if_block0, 1, 1, () => { if_block0 = null; }); check_outros(); } if ( /*outlineMode*/ ctx2[7] && /*hasChildren*/ ctx2[2] ) { if (if_block1) { if_block1.p(ctx2, dirty); if (dirty & /*outlineMode, hasChildren*/ 132) { transition_in(if_block1, 1); } } else { if_block1 = create_if_block5(ctx2); if_block1.c(); transition_in(if_block1, 1); if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); } } else if (if_block1) { group_outros(); transition_out(if_block1, 1, 1, () => { if_block1 = null; }); check_outros(); } }, i(local) { if (current) return; transition_in(if_block0); transition_in(if_block1); current = true; }, o(local) { transition_out(if_block0); transition_out(if_block1); current = false; }, d(detaching) { if (detaching) { detach(t); detach(if_block1_anchor); } if (if_block0) if_block0.d(detaching); if (if_block1) if_block1.d(detaching); } }; } function instance57($$self, $$props, $$invalidate) { let { editing } = $$props; let { nodeId } = $$props; let { hasChildren } = $$props; let { isInSidebar = false } = $$props; let { collapsed } = $$props; let { active } = $$props; let { alwaysShowCardButtons } = $$props; let { outlineMode } = $$props; $$self.$$set = ($$props2) => { if ("editing" in $$props2) $$invalidate(0, editing = $$props2.editing); if ("nodeId" in $$props2) $$invalidate(1, nodeId = $$props2.nodeId); if ("hasChildren" in $$props2) $$invalidate(2, hasChildren = $$props2.hasChildren); if ("isInSidebar" in $$props2) $$invalidate(3, isInSidebar = $$props2.isInSidebar); if ("collapsed" in $$props2) $$invalidate(4, collapsed = $$props2.collapsed); if ("active" in $$props2) $$invalidate(5, active = $$props2.active); if ("alwaysShowCardButtons" in $$props2) $$invalidate(6, alwaysShowCardButtons = $$props2.alwaysShowCardButtons); if ("outlineMode" in $$props2) $$invalidate(7, outlineMode = $$props2.outlineMode); }; return [ editing, nodeId, hasChildren, isInSidebar, collapsed, active, alwaysShowCardButtons, outlineMode ]; } var Card_buttons = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance57, create_fragment57, safe_not_equal, { editing: 0, nodeId: 1, hasChildren: 2, isInSidebar: 3, collapsed: 4, active: 5, alwaysShowCardButtons: 6, outlineMode: 7 }); } }; var card_buttons_default = Card_buttons; // src/view/components/container/column/components/group/components/card/card.svelte var import_classnames2 = __toESM(require_classnames()); // src/view/components/container/column/components/group/components/card/components/bridges/bridges.svelte function add_css5(target) { append_styles(target, "svelte-1bkhe9s", ".active-node-bridge.svelte-1bkhe9s,.active-parent-bridge-right.svelte-1bkhe9s,.active-parent-bridge-left.svelte-1bkhe9s{height:100%;width:10px;position:absolute;top:0}.active-parent-bridge-right.svelte-1bkhe9s{right:-10px;background-color:var(--bg-color)}.active-parent-bridge-left.svelte-1bkhe9s{left:-10px;background-color:var(--bg-color)}.active-node-bridge.svelte-1bkhe9s{right:-10px;background-color:var(--bg-color)}"); } function create_if_block_12(ctx) { let div; let div_class_value; let t; let if_block_anchor; let if_block = !/*firstColumn*/ ctx[3] && create_if_block_22(ctx); return { c() { div = element("div"); t = space(); if (if_block) if_block.c(); if_block_anchor = empty(); attr(div, "class", div_class_value = null_to_empty("active-parent-bridge-right") + " svelte-1bkhe9s"); set_style( div, "--bg-color", /*style*/ ctx[4] && /*style*/ ctx[4].styleVariant == "background-color" ? ( /*style*/ ctx[4].color ) : "var(--background-active-parent)" ); }, m(target, anchor) { insert(target, div, anchor); insert(target, t, anchor); if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, dirty) { if (dirty & /*style*/ 16) { set_style( div, "--bg-color", /*style*/ ctx2[4] && /*style*/ ctx2[4].styleVariant == "background-color" ? ( /*style*/ ctx2[4].color ) : "var(--background-active-parent)" ); } if (!/*firstColumn*/ ctx2[3]) { if (if_block) { if_block.p(ctx2, dirty); } else { if_block = create_if_block_22(ctx2); if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } else if (if_block) { if_block.d(1); if_block = null; } }, d(detaching) { if (detaching) { detach(div); detach(t); detach(if_block_anchor); } if (if_block) if_block.d(detaching); } }; } function create_if_block6(ctx) { let div; return { c() { div = element("div"); attr(div, "class", "active-node-bridge svelte-1bkhe9s"); set_style( div, "--bg-color", /*style*/ ctx[4] && /*style*/ ctx[4].styleVariant == "background-color" ? "transparent" : "var(--background-active-node)" ); }, m(target, anchor) { insert(target, div, anchor); }, p(ctx2, dirty) { if (dirty & /*style*/ 16) { set_style( div, "--bg-color", /*style*/ ctx2[4] && /*style*/ ctx2[4].styleVariant == "background-color" ? "transparent" : "var(--background-active-node)" ); } }, d(detaching) { if (detaching) { detach(div); } } }; } function create_if_block_22(ctx) { let div; return { c() { div = element("div"); attr(div, "class", "active-parent-bridge-left svelte-1bkhe9s"); set_style( div, "--bg-color", /*style*/ ctx[4] && /*style*/ ctx[4].styleVariant == "background-color" ? ( /*style*/ ctx[4].color ) : "var(--background-active-parent)" ); }, m(target, anchor) { insert(target, div, anchor); }, p(ctx2, dirty) { if (dirty & /*style*/ 16) { set_style( div, "--bg-color", /*style*/ ctx2[4] && /*style*/ ctx2[4].styleVariant == "background-color" ? ( /*style*/ ctx2[4].color ) : "var(--background-active-parent)" ); } }, d(detaching) { if (detaching) { detach(div); } } }; } function create_fragment58(ctx) { let if_block_anchor; function select_block_type(ctx2, dirty) { if (!/*editing*/ ctx2[0] && /*hasActiveChildren*/ ctx2[1] && /*active*/ ctx2[2] === "node" /* node */) return create_if_block6; if ( /*active*/ ctx2[2] === "parent" /* parent */ ) return create_if_block_12; } let current_block_type = select_block_type(ctx, -1); let if_block = current_block_type && current_block_type(ctx); return { c() { if (if_block) if_block.c(); if_block_anchor = empty(); }, m(target, anchor) { if (if_block) if_block.m(target, anchor); insert(target, if_block_anchor, anchor); }, p(ctx2, [dirty]) { if (current_block_type === (current_block_type = select_block_type(ctx2, dirty)) && if_block) { if_block.p(ctx2, dirty); } else { if (if_block) if_block.d(1); if_block = current_block_type && current_block_type(ctx2); if (if_block) { if_block.c(); if_block.m(if_block_anchor.parentNode, if_block_anchor); } } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(if_block_anchor); } if (if_block) { if_block.d(detaching); } } }; } function instance58($$self, $$props, $$invalidate) { let { editing } = $$props; let { hasActiveChildren } = $$props; let { active } = $$props; let { firstColumn } = $$props; let { style } = $$props; $$self.$$set = ($$props2) => { if ("editing" in $$props2) $$invalidate(0, editing = $$props2.editing); if ("hasActiveChildren" in $$props2) $$invalidate(1, hasActiveChildren = $$props2.hasActiveChildren); if ("active" in $$props2) $$invalidate(2, active = $$props2.active); if ("firstColumn" in $$props2) $$invalidate(3, firstColumn = $$props2.firstColumn); if ("style" in $$props2) $$invalidate(4, style = $$props2.style); }; return [editing, hasActiveChildren, active, firstColumn, style]; } var Bridges = class extends SvelteComponent { constructor(options) { super(); init( this, options, instance58, create_fragment58, safe_not_equal, { editing: 0, hasActiveChildren: 1, active: 2, firstColumn: 3, style: 4 }, add_css5 ); } }; var bridges_default = Bridges; // node_modules/nanoid/url-alphabet/index.js var urlAlphabet = "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"; // node_modules/nanoid/index.browser.js var nanoid = (size = 21) => { let id2 = ""; let bytes = crypto.getRandomValues(new Uint8Array(size)); while (size--) { id2 += urlAlphabet[bytes[size] & 63]; } return id2; }; // src/helpers/id.ts var id_size = 8; var id = { rootNode: () => "r" + nanoid(id_size), // node: () => 'n-' + RandomId.generateId('adjectives', 'nouns'), // column: () => 'c-' + RandomId.generateId('cities'), node: () => "n" + nanoid(id_size), column: () => "c" + nanoid(id_size), snapshot: () => "s" + nanoid(id_size), view: () => "v" + nanoid(id_size), canvas: () => "canvas-" + nanoid(id_size), styleRule: () => "sr" + nanoid(id_size) }; var isId = { node: (text2) => text2.length === 9 && text2.startsWith("n") }; // src/view/actions/dnd/droppable.ts var getDropPosition = (event, targetElement) => { const boundingBox = targetElement.getBoundingClientRect(); const mouseX = event.clientX; const mouseY = event.clientY; if (mouseY - boundingBox.top < boundingBox.height / 4) { return "up"; } else if (boundingBox.bottom - mouseY < boundingBox.height / 4) return "down"; else if (boundingBox.right - mouseX < boundingBox.width / 4) return "right"; }; var dropClasses = { up: "lineage__drop-node-above", down: "lineage__drop-node-below", right: "lineage__drop-node-under" }; var classesList = Object.values(dropClasses); var droppable = (node) => { const view = getView(); const viewStore = view.viewStore; const documentStore = view.documentStore; function HandleDragLeave(event) { if (!(event.currentTarget instanceof HTMLElement)) return; event.currentTarget.removeClasses(classesList); event.currentTarget.removeClass("inactive-node-hover"); } const handleDragOver = (event) => { event.preventDefault(); if (!event.dataTransfer) return; const targetCard = event.currentTarget; if (!targetCard.id.startsWith("n")) return; event.dataTransfer.dropEffect = "move"; const position = getDropPosition(event, targetCard); targetCard.removeClasses(classesList); if (position) { targetCard.addClass(dropClasses[position]); if (targetCard.hasClass("inactive-node")) targetCard.addClass("inactive-node-hover"); } }; function handleDrop(event) { event.preventDefault(); if (!(event.currentTarget instanceof HTMLElement)) return; if (!event.dataTransfer) return; const data = event.dataTransfer.getData("text/plain"); const targetCard = event.currentTarget; if (!targetCard.id.startsWith("n")) return; targetCard.removeClasses(classesList); targetCard.removeClass("inactive-node-hover"); if (!data) throw new Error(`droppedNodeId is missing`); if (!targetCard.id) throw new Error(`targetCard.id is missing`); const sections = documentStore.getValue().sections; if (isId.node(data) && sections.id_section[data]) { documentStore.dispatch({ type: "DOCUMENT/DROP_NODE", payload: { droppedNodeId: data, targetNodeId: targetCard.id, position: getDropPosition(event, targetCard) } }); } else { documentStore.dispatch({ type: "DOCUMENT/PASTE_NODE", payload: { targetNodeId: targetCard.id, text: data, position: getDropPosition(event, targetCard) } }); } viewStore.dispatch({ type: "DOCUMENT/SET_DRAG_ENDED" }); } node.addEventListener("dragleave", HandleDragLeave); node.addEventListener("dragover", handleDragOver); node.addEventListener("drop", handleDrop); return { destroy() { node.removeEventListener("dragleave", HandleDragLeave); node.removeEventListener("dragover", handleDragOver); node.removeEventListener("drop", handleDrop); } }; }; // src/obsidian/events/workspace/helpers/get-document-format.ts var getDocumentFormat = (view) => { invariant(view.file); const format2 = view.plugin.settings.getValue().documents[view.file.path]?.documentFormat; invariant(format2); return format2; }; // src/lib/data-conversion/helpers/html-comment-marker/parse-html-comment-marker.ts var htmlCommentRegex = /\s*/; var parseHtmlCommentMarker = (line) => { const results = htmlCommentRegex.exec(line); if (results) { const result = results[1]; const split2 = result.split("."); const index = split2[split2.length - 1]; const parent = result.substring(0, result.length - index.length - 1); return [parent, index, result]; } }; // src/view/components/container/column/components/group/components/card/components/card-buttons/helpers/find-section-position.ts var findSectionPosition = (view, nodeId) => { const lines = view.data.split("\n"); const treeIndex = get_store_value(view.documentStore).sections.id_section[nodeId]; for (let i = 0; i < lines.length; i++) { const line = lines[i]; if (line.startsWith("`; // src/lib/data-conversion/json-to-x/json-to-html-comment.ts var jsonToHtmlComment = (tree, parentNumber = "", text2 = "", includeStructure = true) => { for (let i = 0; i < tree.length; i++) { const node = tree[i]; const content = node.content; const index = i + 1; if (text2) text2 = text2 + (includeStructure ? "\n" : "\n\n"); if (includeStructure) { text2 += createHtmlCommentMarker(parentNumber, index) + "\n" + content; } else { text2 += content; } if (node.children.length > 0) { text2 = jsonToHtmlComment( node.children, level(parentNumber, index), text2, includeStructure ); } } return text2; }; // src/lib/tree-utils/create/create-column.ts var createColumn = () => ({ id: id.column(), groups: [] }); // src/lib/tree-utils/create/create-group.ts var createGroup = (parentId) => ({ nodes: [], parentId }); // src/lib/data-conversion/x-to-json/branch-to-json.ts var branchToColumns = (branch) => { const columns = []; columns.push(createColumn()); columns[columns.length - 1].groups.push(createGroup("root")); columns[columns.length - 1].groups[0].nodes.push(branch.nodeId); for (const groups of branch.sortedChildGroups) { columns.push(createColumn()); for (const group of groups) { columns[columns.length - 1].groups.push(group); } } return columns; }; var branchToJson = (branches) => { const trees = []; for (const branch of branches) { const tree = columnsToJson(branchToColumns(branch), branch.content); trees.push(tree[0]); } return trees; }; // src/lib/data-conversion/branch-to-x/branch-to-html-comment.ts var branchToHtmlComment = (branches) => { return jsonToHtmlComment(branchToJson(branches)); }; // src/lib/data-conversion/branch-to-x/branch-to-outline.ts var branchToOutline = (branches) => { return jsonToOutline(branchToJson(branches)); }; // src/lib/data-conversion/helpers/html-element-marker/create-html-element-marker.ts var createHtmlElementMarker = (parentNumber, index) => ``; // src/lib/data-conversion/json-to-x/json-to-html-element.ts var jsonToHtmlElement = (tree, parentNumber = "", text2 = "") => { for (let i = 0; i < tree.length; i++) { const node = tree[i]; const index = i + 1; if (text2) text2 = text2 + "\n\n"; let content = node.content.trimStart(); const marker = createHtmlElementMarker(parentNumber, index); if (content.match(/^#+ /)) { const headingLevel = content.match(/^#+/)?.[0]; content = `${headingLevel} ${marker}${content.slice(headingLevel.length).trim()}`; } else if (content.match(/^#[^\s#\uFEFF\u200B]+/)) { const tag = content.match(/^#[^\s#\uFEFF\u200B]+/)?.[0]; content = `${tag}${marker}${content.slice(tag.length)}`; } else if (content.startsWith(">")) { content = `> ${marker}${content.slice(1).trim()}`; } else if (content.match(/^[-*+]\s\[.\]\s/)) { const taskPrefix = content.match(/^[-*+]\s\[.\]\s/)?.[0]; content = `${taskPrefix}${marker}${content.slice(taskPrefix.length).trim()}`; } else if (content.match(/^[-*+]\s/)) { const bullet = content.match(/^[-*+]\s/)?.[0]; content = `${bullet}${marker}${content.slice(bullet.length).trim()}`; } else if (content.match(/^\d+\.\s/)) { const number = content.match(/^\d+\.\s/)?.[0]; content = `${number} ${marker}${content.slice(number.length).trim()}`; } else if (content.startsWith("```")) { content = `${marker} ${content}`; } else if (content.startsWith("|")) { content = `${marker} ${content}`; } else { content = `${marker}${content}`; } text2 += content; if (node.children.length > 0) { text2 = jsonToHtmlElement( node.children, level(parentNumber, index), text2 ); } } return text2; }; // src/lib/data-conversion/branch-to-x/branch-to-html-element.ts var branchToHtmlElement = (branches) => { return jsonToHtmlElement(branchToJson(branches)); }; // src/lib/data-conversion/json-to-x/json-to-text.ts var jsonToText = (nodes) => { return jsonToHtmlComment(nodes, void 0, void 0, false); }; // src/lib/data-conversion/branch-to-x/branch-to-text.ts var branchToText = (branches) => { return jsonToText(branchToJson(branches)); }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/clipboard/map-branches-to-text.ts var mapBranchesToText = (document2, nodes, format2) => { const branches = nodes.map( (node) => getBranch(document2.columns, document2.content, node, "copy") ); const isSingleNode = nodes.length === 1 && Object.keys(branches[0].content).length === 1; if (isSingleNode) { return branches[0].content[nodes[0]].content; } else if (format2 === "outline") { return branchToOutline(branches); } else if (format2 === "html-element") { return branchToHtmlElement(branches); } else if (format2 === "sections") { return branchToHtmlComment(branches); } else if (format2 === "unformatted-text") { return branchToText(branches); } else { throw new Error(`Invalid format: ${format2}`); } }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/clipboard/copy-active-branches-to-clipboard.ts var import_obsidian17 = require("obsidian"); var copyActiveBranchesToClipboard = async (view, formatted) => { const document2 = view.viewStore.getValue().document; const nodes = document2.selectedNodes.size > 0 ? Array.from(document2.selectedNodes) : [document2.activeNode]; const text2 = mapBranchesToText( view.documentStore.getValue().document, nodes, formatted ? getDocumentFormat(view) : "unformatted-text" ); await navigator.clipboard.writeText(text2); const message = lang.hk_notice_copy(nodes.length, formatted, "branch"); if (message) new import_obsidian17.Notice(message); }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/cut-node.ts var cutNode = async (view) => { const document2 = view.viewStore.getValue().document; await copyActiveBranchesToClipboard(view, true); view.documentStore.dispatch({ type: "DOCUMENT/CUT_NODE", payload: { nodeId: document2.activeNode, selectedNodes: document2.selectedNodes } }); }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/paste-node.ts var import_obsidian18 = require("obsidian"); var pasteNode = async (view) => { const viewState = view.viewStore.getValue(); const clipboardItems = await navigator.clipboard.read(); let containsImage = false; for (const item of clipboardItems) { if (item.types.some((type) => type.startsWith("image/"))) { containsImage = true; break; } } if (containsImage) { new import_obsidian18.Notice(lang.error_cant_paste); } else { const text2 = (await navigator.clipboard.readText()).replace( /\r\n/g, "\n" ); view.documentStore.dispatch({ type: "DOCUMENT/PASTE_NODE", payload: { targetNodeId: viewState.document.activeNode, text: text2 } }); } }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/clipboard/copy-active-nodes-to-clipboard.ts var import_obsidian19 = require("obsidian"); var copyActiveNodesToClipboard = async (view) => { const document2 = view.viewStore.getValue().document; const nodes = document2.selectedNodes.size > 0 ? Array.from(document2.selectedNodes) : [document2.activeNode]; const text2 = nodes.map((id2) => view.documentStore.getValue().document.content[id2].content).join("\n\n"); await navigator.clipboard.writeText(text2); if (nodes.length > 1) { const message = lang.hk_notice_copy(nodes.length, false, "section"); if (message) new import_obsidian19.Notice(message); } }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/clipboard-commands.ts var clipboardCommands = () => { return [ { name: "copy_node", callback: async (view, event) => { const selectedText = activeWindow.getSelection()?.toString(); if (selectedText && selectedText.length > 0) { return; } event.preventDefault(); copyActiveBranchesToClipboard(view, true); }, hotkeys: [ { key: "C", modifiers: ["Mod"], editorState: "editor-off" } ] }, { name: "copy_node_unformatted", callback: async (view, event) => { event.preventDefault(); copyActiveBranchesToClipboard(view, false); }, hotkeys: [ { key: "C", modifiers: ["Mod", "Alt"], editorState: "editor-off" } ] }, { name: "copy_node_without_subitems", callback: async (view, event) => { event.preventDefault(); copyActiveNodesToClipboard(view); }, hotkeys: [ { key: "C", modifiers: ["Mod", "Shift"], editorState: "editor-off" } ] }, { name: "cut_node", callback: async (view, event) => { event.preventDefault(); cutNode(view); }, hotkeys: [ { key: "X", modifiers: ["Mod"], editorState: "editor-off" } ] }, { name: "paste_node", callback: async (view, event) => { event.preventDefault(); pasteNode(view); }, hotkeys: [ { key: "V", modifiers: ["Mod"], editorState: "editor-off" } ] } ]; }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/selection-commands.ts var selectionCommands = () => { const commands = []; commands.push( { name: "extend_select_up", callback: (view, event) => { event.preventDefault(); view.viewStore.dispatch({ type: "DOCUMENT/NAVIGATE_USING_KEYBOARD", payload: { direction: "up", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true, outlineMode: view.plugin.settings.getValue().view.outlineMode } }); }, hotkeys: [ { key: "K", modifiers: ["Shift"], editorState: "editor-off" }, { key: "ArrowUp", modifiers: ["Shift"], editorState: "editor-off" } ] }, { name: "extend_select_down", callback: (view, event) => { event.preventDefault(); view.viewStore.dispatch({ type: "DOCUMENT/NAVIGATE_USING_KEYBOARD", payload: { direction: "down", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true, outlineMode: view.plugin.settings.getValue().view.outlineMode } }); }, hotkeys: [ { key: "J", modifiers: ["Shift"], editorState: "editor-off" }, { key: "ArrowDown", modifiers: ["Shift"], editorState: "editor-off" } ] }, { name: "extend_select_to_end_of_column", callback: (view, e) => { e.preventDefault(); e.stopPropagation(); view.viewStore.dispatch({ type: "DOCUMENT/JUMP_TO_NODE", payload: { target: "end-of-column", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true } }); }, hotkeys: [ { key: "End", modifiers: ["Shift"], editorState: "editor-off" } ] }, { name: "extend_select_to_start_of_column", callback: (view, e) => { e.preventDefault(); e.stopPropagation(); view.viewStore.dispatch({ type: "DOCUMENT/JUMP_TO_NODE", payload: { target: "start-of-column", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true } }); }, hotkeys: [ { key: "Home", modifiers: ["Shift"], editorState: "editor-off" } ] }, { name: "extend_select_to_end_of_group", callback: (view, e) => { e.preventDefault(); e.stopPropagation(); view.viewStore.dispatch({ type: "DOCUMENT/JUMP_TO_NODE", payload: { target: "end-of-group", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true } }); }, hotkeys: [ { key: "PageDown", modifiers: ["Shift"], editorState: "editor-off" } ] }, { name: "extend_select_to_start_of_group", callback: (view, e) => { e.preventDefault(); e.stopPropagation(); view.viewStore.dispatch({ type: "DOCUMENT/JUMP_TO_NODE", payload: { target: "start-of-group", columns: view.documentStore.getValue().document.columns }, context: { shiftKey: true } }); }, hotkeys: [ { key: "PageUp", modifiers: ["Shift"], editorState: "editor-off" } ] } ); return commands; }; // src/lib/align-element/helpers/get-element-by-id.ts var getElementById = (container, id2) => { if (id2) return container.querySelector("#" + id2); }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/helpers/scroll-node.ts var scrollNode = (view, direction) => { const container = view.container; if (!container) return; const element2 = getElementById( container, view.viewStore.getValue().document.activeNode ); if (!element2) return; const STEP = Math.floor(view.plugin.settings.getValue().view.cardWidth / 4); if (direction === "down" || direction === "up") { const column = element2.matchParent(".column"); if (!column) return; const scrollTop = direction === "up" ? STEP : -STEP; requestAnimationFrame(() => { column.scrollBy({ top: scrollTop, behavior: "smooth" }); }); } else { const scrollLeft = direction === "left" ? STEP : -STEP; requestAnimationFrame(() => { container.scrollBy({ left: scrollLeft, behavior: "smooth" }); }); } }; // src/view/actions/keyboard-shortcuts/helpers/commands/commands/scroll-commands.ts var scrollCommands = () => { const modifiers = ["Mod", "Alt"]; return [ { name: "scroll_right", callback: (view) => { scrollNode(view, "right"); }, hotkeys: [{ key: "L", modifiers, editorState: "both" }] }, { name: "scroll_left", callback: (view) => { scrollNode(view, "left"); }, hotkeys: [{ key: "H", modifiers, editorState: "both" }] }, { name: "scroll_up", callback: (view) => { scrollNode(view, "up"); }, hotkeys: [{ key: "K", modifiers, editorState: "both" }] }, { name: "scroll_down", callback: (view) => { scrollNode(view, "down"); }, hotkeys: [{ key: "J", modifiers, editorState: "both" }] }, { name: "align_branch", callback: (view) => { view.alignBranch.align({ type: "view/align-branch/center-node" }); }, hotkeys: [{ key: "G", modifiers, editorState: "both" }] } ]; }; // src/view/actions/keyboard-shortcuts/helpers/commands/default-view-hotkeys.ts var defaultViewHotkeys = () => [ ...navigateCommands(), ...editCommands(), ...createCommands(), ...moveCommands(), ...mergeCommands(), ...clipboardCommands(), ...historyCommands(), ...selectionCommands(), ...scrollCommands(), { name: "delete_card", callback: (view) => { const document2 = view.viewStore.getValue().document; deleteNode(view, document2.activeNode, true); }, hotkeys: [ { key: "Backspace", modifiers: ["Mod"], editorState: "editor-off" } ] }, { name: "toggle_search_input", callback: (view, e) => { e.preventDefault(); e.stopPropagation(); view.viewStore.dispatch({ type: "SEARCH/TOGGLE_INPUT" }); }, hotkeys: [ { key: "/", modifiers: [], editorState: "editor-off" }, { key: "f", modifiers: ["Alt"], editorState: "both" } ] }, { name: "zoom_in", callback: (view, e) => { e.preventDefault(); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { direction: "in" } }); }, hotkeys: [{ key: "=", modifiers: ["Mod"], editorState: "both" }] }, { name: "zoom_out", callback: (view, e) => { e.preventDefault(); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { direction: "out" } }); }, hotkeys: [{ key: "-", modifiers: ["Mod"], editorState: "both" }] }, { name: "zoom_reset", callback: (view, e) => { e.preventDefault(); view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { value: 1 } }); }, hotkeys: [{ key: "0", modifiers: ["Mod"], editorState: "both" }] }, { name: "toggle_outline_mode", callback: (view) => { view.plugin.settings.dispatch({ type: "settings/view/modes/toggle-outline-mode" }); }, hotkeys: [{ key: "o", modifiers: ["Alt"], editorState: "both" }] }, { name: "toggle_collapse", callback: (view, e) => { e.preventDefault(); if (!get_store_value(singleColumnStore(view))) return; view.viewStore.dispatch({ type: "view/outline/toggle-collapse-node", payload: { id: view.viewStore.getValue().document.activeNode, columns: view.documentStore.getValue().document.columns } }); }, hotkeys: [{ key: "=", modifiers: ["Alt"], editorState: "both" }] }, { name: "toggle_collapse_all", callback: (view, e) => { e.preventDefault(); if (!get_store_value(singleColumnStore(view))) return; view.viewStore.dispatch({ type: "view/outline/toggle-collapse-all", payload: { columns: view.documentStore.getValue().document.columns } }); }, hotkeys: [{ key: "=", modifiers: ["Alt", "Mod"], editorState: "both" }] } ]; // src/lang/hotkey-groups.ts var hotkeyGroups = { [lang.hkg_create_cards]: /* @__PURE__ */ new Set([ "add_child", "add_below", "add_above", "add_child_and_split", "add_below_and_split", "add_above_and_split" ]), [lang.hkg_edit_cards]: /* @__PURE__ */ new Set([ "enable_edit_mode", "enable_edit_mode_and_place_cursor_at_start", "enable_edit_mode_and_place_cursor_at_end", "disable_edit_mode", "save_changes_and_exit_card" ]), [lang.hkg_move_cards]: /* @__PURE__ */ new Set([ "move_node_up", "move_node_down", "move_node_right", "move_node_left" ]), [lang.hkg_merge_cards]: /* @__PURE__ */ new Set([ "merge_with_node_above", "merge_with_node_below" ]), [lang.hkg_delete_cards]: /* @__PURE__ */ new Set(["delete_card"]), [lang.hkg_navigation]: /* @__PURE__ */ new Set([ "go_up", "go_down", "go_right", "go_left", "go_to_beginning_of_group", "go_to_end_of_group", "go_to_beginning_of_column", "go_to_end_of_column", "navigate_back", "navigate_forward", "navigate_to_previous_node", "navigate_to_next_node", "select_parent" ]), [lang.hkg_selection]: /* @__PURE__ */ new Set([ "extend_select_up", "extend_select_down", "extend_select_to_start_of_group", "extend_select_to_end_of_group", "extend_select_to_start_of_column", "extend_select_to_end_of_column" ]), [lang.hkg_history]: /* @__PURE__ */ new Set(["undo_change", "redo_change"]), [lang.hkg_search]: /* @__PURE__ */ new Set(["toggle_search_input"]), [lang.hkg_clipboard]: /* @__PURE__ */ new Set([ "copy_node", "copy_node_unformatted", "copy_node_without_subitems", "cut_node", "paste_node" ]), [lang.hkg_scrolling]: /* @__PURE__ */ new Set([ "scroll_left", "scroll_right", "scroll_up", "scroll_down", "align_branch" ]), [lang.hkg_zoom]: /* @__PURE__ */ new Set(["zoom_in", "zoom_out", "zoom_reset"]), [lang.hkg_outline]: /* @__PURE__ */ new Set([ "toggle_outline_mode", "toggle_collapse", "toggle_collapse_all" ]) }; var hotkeysGroups = Object.fromEntries( Object.entries(hotkeyGroups).map(([group, commands]) => Array.from(commands).map((c) => [c, group])).flat() ); // src/stores/view/derived/hotkeys-store.ts var ConflictingHotkeys = (view) => derived(view.viewStore, (state2) => state2.hotkeys.conflictingHotkeys); var HotkeysSearchTerm = (view) => derived(view.viewStore, (state2) => state2.hotkeys.searchTerm); // src/helpers/group-array-by-property.ts var groupArrayByProperty = (array, property, grouped = {}) => { for (const item of array) { const key = String(item[property]); if (!grouped[key]) { grouped[key] = []; } grouped[key].push(item); } for (const key of Object.keys(grouped)) { if (grouped[key].length === 0) { delete grouped[key]; } } return grouped; }; // src/stores/settings/derived/view-hotkeys-store.ts var CustomHotkeysStore = (plugin) => derived2(plugin.settings, (state2) => state2.hotkeys.customHotkeys); var ViewHotkeysStore = (plugin) => derived2([CustomHotkeysStore(plugin)], ([customHotkeys]) => { const viewHotkeys2 = []; for (const defaultViewHotkey of defaultViewHotkeys()) { const customHotkey = customHotkeys[defaultViewHotkey.name]; const hotkeys = defaultViewHotkey.hotkeys.map( (hotkey, i) => { let isCustom = false; const persistedHotkey = i === 0 && customHotkey?.primary ? customHotkey.primary : i === 1 && customHotkey?.secondary ? customHotkey?.secondary : null; if (persistedHotkey) { if ("key" in persistedHotkey) { isCustom = persistedHotkey.key.length > 0 && (hotkey.key !== persistedHotkey.key || hotkey.modifiers.join("") !== persistedHotkey.modifiers.join("")); hotkey.key = persistedHotkey.key; hotkey.modifiers = persistedHotkey.modifiers; } if ("editorState" in persistedHotkey) { isCustom = persistedHotkey.editorState !== hotkey.editorState; hotkey.editorState = persistedHotkey.editorState; } } return { ...hotkey, string_representation: hotkeyToString(hotkey), isCustom }; } ); viewHotkeys2.push({ ...defaultViewHotkey, hotkeys, group: hotkeysGroups[defaultViewHotkey.name] }); } return viewHotkeys2; }); var ConflictLabeledHotkeysStore = (view) => derived2( [ViewHotkeysStore(view.plugin), ConflictingHotkeys(view)], ([hotkeys, conflicts]) => { let numberOfConflictingHotkeys = 0; const groupedByHotkey = /* @__PURE__ */ new Map(); for (const viewHotkey of hotkeys) { for (const hotkey of viewHotkey.hotkeys) { delete hotkey.obsidianConflict; delete hotkey.pluginConflict; const conflict = conflicts.get( hotkey.string_representation ); if (conflict) { hotkey.obsidianConflict = conflict; numberOfConflictingHotkeys++; } else { let set = groupedByHotkey.get( hotkey.string_representation ); if (!set) { set = /* @__PURE__ */ new Set(); groupedByHotkey.set( hotkey.string_representation, set ); } set.add(viewHotkey); } } } const conflicting = [...groupedByHotkey.entries()].filter( (v) => v[1].size > 1 ); for (const [string_representation, hotkeys2] of conflicting) { const conflicting2 = Array.from(hotkeys2).map((h) => h.name).join(", "); for (const pluginHotkey of hotkeys2) { for (const hotkey of pluginHotkey.hotkeys) { if (!hotkey.key) continue; if (hotkey.string_representation === string_representation) { hotkey.pluginConflict = conflicting2; numberOfConflictingHotkeys++; } } } } return { hotkeys: [...hotkeys], numberOfConflictingHotkeys }; } ); var FilteredHotkeysStore = (view) => derived2( [ConflictLabeledHotkeysStore(view), HotkeysSearchTerm(view)], ([hotkeys, searchTerm]) => { let array = []; if (searchTerm) { array = hotkeys.hotkeys.filter((c) => { const fullName = hotkeysLang[c.name].toLowerCase(); return fullName.includes(searchTerm) || c.group.toLowerCase().includes(searchTerm); }); } else array = hotkeys.hotkeys; return { hotkeys: groupArrayByProperty(array, "group", { [lang.hkg_create_cards]: [], [lang.hkg_edit_cards]: [], [lang.hkg_move_cards]: [], [lang.hkg_merge_cards]: [], [lang.hkg_delete_cards]: [], [lang.hkg_clipboard]: [], [lang.hkg_navigation]: [], [lang.hkg_selection]: [], [lang.hkg_scrolling]: [], [lang.hkg_history]: [], [lang.hkg_search]: [], [lang.hkg_zoom]: [], [lang.hkg_outline]: [] }), numberOfConflictingHotkeys: hotkeys.numberOfConflictingHotkeys }; } ); // src/view/components/container/controls-bar/modals/hotkeys/hotkeys.svelte function add_css30(target) { append_styles(target, "svelte-1kffelc", ".groups.svelte-1kffelc{width:500px;display:flex;flex-direction:column;gap:var(--size-4-2);overflow-y:auto;flex:1\n }@media(max-width: 720px){.groups.svelte-1kffelc{width:fit-content}}"); } function get_each_context10(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[6] = list[i][0]; child_ctx[7] = list[i][1]; return child_ctx; } function create_each_block10(key_1, ctx) { let first; let group_1; let current; group_1 = new group_default2({ props: { groupName: ( /*groupName*/ ctx[6] ), group: ( /*group*/ ctx[7] ), labelState: ( /*labelState*/ ctx[0] ) } }); return { key: key_1, first: null, c() { first = empty(); create_component(group_1.$$.fragment); this.first = first; }, m(target, anchor) { insert(target, first, anchor); mount_component(group_1, target, anchor); current = true; }, p(new_ctx, dirty) { ctx = new_ctx; const group_1_changes = {}; if (dirty & /*$store*/ 2) group_1_changes.groupName = /*groupName*/ ctx[6]; if (dirty & /*$store*/ 2) group_1_changes.group = /*group*/ ctx[7]; if (dirty & /*labelState*/ 1) group_1_changes.labelState = /*labelState*/ ctx[0]; group_1.$set(group_1_changes); }, i(local) { if (current) return; transition_in(group_1.$$.fragment, local); current = true; }, o(local) { transition_out(group_1.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(first); } destroy_component(group_1, detaching); } }; } function create_fragment88(ctx) { let div1; let front; let t0; let div0; let each_blocks = []; let each_1_lookup = /* @__PURE__ */ new Map(); let t1; let numberofconflicts; let current; front = new front_default({}); let each_value = ensure_array_like(Object.entries( /*$store*/ ctx[1].hotkeys )); const get_key = (ctx2) => ( /*groupName*/ ctx2[6] ); for (let i = 0; i < each_value.length; i += 1) { let child_ctx = get_each_context10(ctx, each_value, i); let key = get_key(child_ctx); each_1_lookup.set(key, each_blocks[i] = create_each_block10(key, child_ctx)); } numberofconflicts = new status_bar_default({ props: { conflicts: ( /*$store*/ ctx[1].numberOfConflictingHotkeys ) } }); return { c() { div1 = element("div"); create_component(front.$$.fragment); t0 = space(); div0 = element("div"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } t1 = space(); create_component(numberofconflicts.$$.fragment); attr(div0, "class", "groups svelte-1kffelc"); attr(div1, "class", "lineage-modal lineage-modal--full-height"); }, m(target, anchor) { insert(target, div1, anchor); mount_component(front, div1, null); append(div1, t0); append(div1, div0); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(div0, null); } } append(div1, t1); mount_component(numberofconflicts, div1, null); current = true; }, p(ctx2, [dirty]) { if (dirty & /*Object, $store, labelState*/ 3) { each_value = ensure_array_like(Object.entries( /*$store*/ ctx2[1].hotkeys )); group_outros(); each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, div0, outro_and_destroy_block, create_each_block10, null, get_each_context10); check_outros(); } const numberofconflicts_changes = {}; if (dirty & /*$store*/ 2) numberofconflicts_changes.conflicts = /*$store*/ ctx2[1].numberOfConflictingHotkeys; numberofconflicts.$set(numberofconflicts_changes); }, i(local) { if (current) return; transition_in(front.$$.fragment, local); for (let i = 0; i < each_value.length; i += 1) { transition_in(each_blocks[i]); } transition_in(numberofconflicts.$$.fragment, local); current = true; }, o(local) { transition_out(front.$$.fragment, local); for (let i = 0; i < each_blocks.length; i += 1) { transition_out(each_blocks[i]); } transition_out(numberofconflicts.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(front); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].d(); } destroy_component(numberofconflicts); } }; } function instance85($$self, $$props, $$invalidate) { let $outlineMode; let $store; const view = getView(); const store = FilteredHotkeysStore(view); component_subscribe($$self, store, (value) => $$invalidate(1, $store = value)); const outlineMode = OutlineModeStore(view); component_subscribe($$self, outlineMode, (value) => $$invalidate(4, $outlineMode = value)); let labelState; $$self.$$.update = () => { if ($$self.$$.dirty & /*$outlineMode*/ 16) { $: { $$invalidate(0, labelState = { outlineMode: $outlineMode }); } } }; return [labelState, $store, store, outlineMode, $outlineMode]; } var Hotkeys = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance85, create_fragment88, safe_not_equal, {}, add_css30); } }; var hotkeys_default = Hotkeys; // src/view/actions/keyboard-shortcuts/helpers/keyboard-events/event-to-string.ts var eventToString = (event) => { let string = event.key.toUpperCase(); if (event.altKey) string += "Alt" /* Alt */; if (isMacLike) { if (event.ctrlKey) string += "Ctrl" /* Ctrl */; if (event.metaKey) string += "Mod" /* Mod */; } else { if (event.ctrlKey) string += "Mod" /* Mod */; } if (event.shiftKey) string += "Shift" /* Shift */; return string; }; // src/view/actions/on-escape/helpers/handle-escape-key.ts var handleEscapeKey = (view) => { const viewStore = view.viewStore; const value = viewStore.getValue(); const search2 = value.search; const controls = value.ui.controls; const selection = value.document.selectedNodes; if (controls.showHelpSidebar || controls.showHistorySidebar || controls.showSettingsSidebar || controls.showStyleRulesModal) { viewStore.dispatch({ type: "CLOSE_MODALS", payload: { closeAllModals: true } }); return true; } else if (search2.query) { viewStore.dispatch({ type: "SEARCH/SET_QUERY", payload: { query: "" } }); return true; } else if (value.document.pendingConfirmation.deleteNode.size > 0) { viewStore.dispatch({ type: "view/confirmation/reset/delete-node" }); return true; } else if (search2.showInput) { viewStore.dispatch({ type: "SEARCH/TOGGLE_INPUT" }); return true; } else if (selection.size > 1) { viewStore.dispatch({ type: "DOCUMENT/CLEAR_SELECTION" }); return true; } }; // src/lib/errors/errors.ts var SilentError = class extends Error { }; // src/lib/store/on-plugin-error.ts var import_obsidian20 = require("obsidian"); // src/helpers/logger.ts var __dev__ = true; var createLogger = () => { const debug = (...message) => { if (__dev__) { console.log(`[DEBUG]: `, ...message); } }; const info = (...message) => { if (__dev__) { console.log(`[INFO]: `, ...message); } }; const warn = (...message) => { if (__dev__) { console.warn(`[WARN]: `, ...message); } }; const error = (...message) => { console.error(`[ERROR]: `, ...message); }; return { debug, info, warn, error }; }; var logger = createLogger(); // src/lib/store/on-plugin-error.ts var onPluginError = (error, location, action) => { if (error instanceof SilentError && !__dev__) { return; } console.error(`[${location}] action: `, action); console.error(`[${location}]`, error); const message = error.message.replace(/Invariant failed(: )?/, ""); if (message) new import_obsidian20.Notice(message); else new import_obsidian20.Notice(lang.error_generic); }; // src/view/actions/keyboard-shortcuts/view-hotkeys-action.ts var viewHotkeysAction = (target, { view }) => { const state2 = { shift: false }; const keyboardEventHandler = (event) => { if (event.key === "Escape") { const contain = handleEscapeKey(view); if (contain) return; } if (event.target.localName === "input") return; const command = viewHotkeys.current[eventToString(event)]; if (command) { const allow = command.editorState === "editor-on" ? isEditing(view) : command.editorState === "editor-off" ? !isEditing(view) : true; if (allow) { try { command.callback(view, event); } catch (error) { onPluginError(error, "command", command); } } } if (event.shiftKey !== state2.shift) { state2.shift = event.shiftKey; view.viewStore.dispatch({ type: event.shiftKey ? "view/keyboard/shift/down" : "view/keyboard/shift/up" }); } }; const onKeyup = (event) => { if (event.shiftKey !== state2.shift) { state2.shift = event.shiftKey; view.viewStore.dispatch({ type: event.shiftKey ? "view/keyboard/shift/down" : "view/keyboard/shift/up" }); } }; target.addEventListener("keydown", keyboardEventHandler); target.addEventListener("keyup", onKeyup); return { destroy: () => { target.removeEventListener("keydown", keyboardEventHandler); target.removeEventListener("keyup", onKeyup); } }; }; // src/view/actions/mouse-wheel-zoom.ts var mouseWheelZoom = (element2, view) => { const listener = (e) => { const modKey2 = isMacLike ? e.metaKey : e.ctrlKey; if (!modKey2) return; const delta = e.deltaY; view.plugin.settings.dispatch({ type: "UI/CHANGE_ZOOM_LEVEL", payload: { direction: delta < 0 ? "in" : "out" } }); }; element2.addEventListener("wheel", listener); return { destroy: () => { element2.removeEventListener("wheel", listener); } }; }; // src/stores/minimap/subscriptions/effects/minimap-canvas/worker/consts/constants.ts var CANVAS_WIDTH_DPX = 176; var CANVAS_WIDTH_CPX = CANVAS_WIDTH_DPX * 2; var CHAR_WIDTH_CPX = 6; var LINE_HEIGHT_CPX = 10; var N_CHARS_PER_LINE = CANVAS_WIDTH_CPX / CHAR_WIDTH_CPX; var INDENT_BLOCK_WIDTH_CPX = CHAR_WIDTH_CPX; var INDENT_BLOCK_SPACE_WIDTH_CPX = CHAR_WIDTH_CPX; var INDENT_BLOCK_TOTAL_WIDTH_CPX = INDENT_BLOCK_WIDTH_CPX + INDENT_BLOCK_SPACE_WIDTH_CPX; // src/view/components/container/minimap/event-handlers/helpers/find-card-at-position.ts var findCardAtPosition = (y, ranges, margin = LINE_HEIGHT_CPX) => { const result = Object.values(ranges).find( (range) => y >= range.y_start - margin && y <= range.y_end + margin ); return result?.cardId; }; // src/view/components/container/minimap/event-handlers/on-canvas-click.ts var dpx_to_cpx = (px) => px * (CANVAS_WIDTH_CPX / CANVAS_WIDTH_DPX); var cpx_to_dpx = (px) => px * (CANVAS_WIDTH_DPX / CANVAS_WIDTH_CPX); var LINE_HEIGHT_DPX = cpx_to_dpx(LINE_HEIGHT_CPX); var onCanvasClick = (e, view) => { const minimapStore = view.getMinimapStore(); const dom = view.getMinimapDom(); const rect = dom.canvas.getBoundingClientRect(); const domY = e.clientY - rect.top; const y = dpx_to_cpx(domY); const ranges = minimapStore.getValue().ranges.cards; const cardId = findCardAtPosition(y, ranges); if (cardId) { view.viewStore.dispatch({ type: "view/set-active-node/mouse", payload: { id: cardId } }); focusContainer(view); } }; // src/stores/minimap/derived/minimap-ranges.ts var MinimapRangesStore = (view) => derived(view.getMinimapStore(), (state2) => state2.ranges.cards); // src/view/components/container/minimap/components/indicators.svelte function add_css31(target) { append_styles(target, "svelte-1be7f7d", ".active-card-indicator.svelte-1be7f7d{left:-3px;width:180px;position:absolute;background-color:var(--color-base-70);opacity:0.3;mix-blend-mode:lighten}.search-result-indicator.svelte-1be7f7d{left:-3px;width:180px;position:absolute;background-color:var(--color-yellow);opacity:0.3}"); } function get_each_context11(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[8] = list[i]; return child_ctx; } function create_each_block11(ctx) { let div; let div_style_value; return { c() { div = element("div"); attr(div, "class", "search-result-indicator svelte-1be7f7d"); attr(div, "style", div_style_value = `top:${/*searchResultRange*/ ctx[8].y_start}px; height:${/*searchResultRange*/ ctx[8].height}px`); }, m(target, anchor) { insert(target, div, anchor); }, p(ctx2, dirty) { if (dirty & /*$searchResultsRanges*/ 2 && div_style_value !== (div_style_value = `top:${/*searchResultRange*/ ctx2[8].y_start}px; height:${/*searchResultRange*/ ctx2[8].height}px`)) { attr(div, "style", div_style_value); } }, d(detaching) { if (detaching) { detach(div); } } }; } function create_fragment89(ctx) { let div1; let div0; let div0_style_value; let t; let each_value = ensure_array_like( /*$searchResultsRanges*/ ctx[1] ); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block11(get_each_context11(ctx, each_value, i)); } return { c() { div1 = element("div"); div0 = element("div"); t = space(); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } attr(div0, "class", "active-card-indicator svelte-1be7f7d"); attr(div0, "style", div0_style_value = `top:${/*$activeCardRange*/ ctx[0].y_start}px; height:${/*$activeCardRange*/ ctx[0].height}px`); attr(div1, "id", "indicators-container"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); append(div1, t); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(div1, null); } } }, p(ctx2, [dirty]) { if (dirty & /*$activeCardRange*/ 1 && div0_style_value !== (div0_style_value = `top:${/*$activeCardRange*/ ctx2[0].y_start}px; height:${/*$activeCardRange*/ ctx2[0].height}px`)) { attr(div0, "style", div0_style_value); } if (dirty & /*$searchResultsRanges*/ 2) { each_value = ensure_array_like( /*$searchResultsRanges*/ ctx2[1] ); let i; for (i = 0; i < each_value.length; i += 1) { const child_ctx = get_each_context11(ctx2, each_value, i); if (each_blocks[i]) { each_blocks[i].p(child_ctx, dirty); } else { each_blocks[i] = create_each_block11(child_ctx); each_blocks[i].c(); each_blocks[i].m(div1, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].d(1); } each_blocks.length = each_value.length; } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div1); } destroy_each(each_blocks, detaching); } }; } function instance86($$self, $$props, $$invalidate) { let $activeCardRange; let $searchResultsRanges; const view = getView(); const activeCard = activeNodeStore(view); const searchResults = searchStore(view); const ranges = MinimapRangesStore(view); const activeCardRange = derived2([activeCard, ranges], ([activeCard2, ranges2]) => { if (activeCard2) { const range = ranges2 === null || ranges2 === void 0 ? void 0 : ranges2[activeCard2]; if (range) { const y_start = cpx_to_dpx(range.y_start); const y_end = cpx_to_dpx(range.y_end); return { y_start: y_start + 2 - LINE_HEIGHT_DPX, height: LINE_HEIGHT_DPX + (y_end - y_start) - 1 }; } } return { y_start: 0, height: 0 }; }); component_subscribe($$self, activeCardRange, (value) => $$invalidate(0, $activeCardRange = value)); const searchResultsRanges = derived2([searchResults, ranges], ([searchResults2, ranges2]) => { if (searchResults2) { const searchResultsRanges2 = Array.from(searchResults2.results).map((searchResult) => { const range = ranges2 === null || ranges2 === void 0 ? void 0 : ranges2[searchResult]; if (range) { const y_start = cpx_to_dpx(range.y_start); const y_end = cpx_to_dpx(range.y_end); return { y_start: y_start + 2 - LINE_HEIGHT_DPX, height: LINE_HEIGHT_DPX + (y_end - y_start) - 1 }; } }).filter((x) => x); return searchResultsRanges2; } return []; }); component_subscribe($$self, searchResultsRanges, (value) => $$invalidate(1, $searchResultsRanges = value)); return [$activeCardRange, $searchResultsRanges, activeCardRange, searchResultsRanges]; } var Indicators = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance86, create_fragment89, safe_not_equal, {}, add_css31); } }; var indicators_default = Indicators; // src/view/components/container/minimap/event-handlers/on-canvas-wheel.ts var onCanvasWheel = (e, view) => { e.preventDefault(); const minimapStore = view.getMinimapStore(); const state2 = minimapStore.getValue().scrollInfo; const dom = view.getMinimapDom(); const minimapContainer = dom.canvasContainer.parentElement; invariant(minimapContainer); const scrollAmount_cpx = dpx_to_cpx(e.deltaY); const containerHeight_cpx = dpx_to_cpx(minimapContainer.clientHeight); minimapStore.dispatch({ type: "minimap/set-scroll-position", payload: { position_cpx: Math.max( 0, Math.min( state2.totalDrawnHeight_cpx - containerHeight_cpx, state2.scrollPosition_cpx + scrollAmount_cpx ) ) } }); }; // src/view/components/container/minimap/event-handlers/create-on-canvas-mousemove.ts var import_obsidian21 = require("obsidian"); var createOnCanvasMousemove = (view) => { let lastActiveCardId = null; let minimapStore; let dom; const hoverHandler = (0, import_obsidian21.debounce)((e) => { if (!(e.buttons === 1 || (isMacLike ? e.metaKey : e.ctrlKey))) return; if (!minimapStore) { minimapStore = view.getMinimapStore(); dom = view.getMinimapDom(); } const rect = dom.canvas.getBoundingClientRect(); const domY = e.clientY - rect.top; const y = dpx_to_cpx(domY); const ranges = minimapStore.getValue().ranges.cards; const cardId = findCardAtPosition(y, ranges, 0); if (cardId && cardId !== lastActiveCardId) { lastActiveCardId = cardId; view.viewStore.dispatch({ type: "view/set-active-node/mouse", payload: { id: cardId } }); focusContainer(view); } }, 100); return (e) => hoverHandler(e); }; // src/lib/store/store.ts var NO_UPDATE = Symbol("NO_UPDATE"); var Store = class { constructor(initialValue, reducer, onError) { this.subscribers = /* @__PURE__ */ new Set(); this.isProcessing = false; this.actionQueue = []; this.reducer = () => this.value; // eslint-disable-next-line no-console this.onError = (error) => console.error(error); this.value = initialValue; if (reducer) this.reducer = reducer; if (onError) this.onError = onError; } getValue() { return this.value; } dispatch(action) { this.actionQueue.push(action); if (!this.isProcessing) { this.processActionQueue(); } } set(value) { this.value = value; this.notifySubscribers(); } subscribe(run2) { this.subscribers.add(run2); try { run2(this.value, void 0, true); } catch (error) { this.onError(error, "subscriber"); } return () => { this.subscribers.delete(run2); }; } update(updater) { this.value = updater(this.value); this.notifySubscribers(); } processActionQueue() { this.isProcessing = true; while (this.actionQueue.length > 0) { const action = this.actionQueue.shift(); try { const newValue = this.reducer(this.value, action); if (newValue !== NO_UPDATE) { this.value = newValue; this.notifySubscribers(action); } } catch (error) { this.onError(error, "reducer", action); } } this.isProcessing = false; } notifySubscribers(action) { for (const subscriber of this.subscribers) { try { subscriber(this.value, action); } catch (error) { this.onError(error, "subscriber", action); } } } }; // src/stores/minimap/default-minimap-state.ts var defaultMinimapState = () => ({ canvasId: id.canvas(), activeCardId: "", scrollInfo: { totalDrawnHeight_cpx: 0, scrollPosition_cpx: 0 }, ranges: { cards: {} } }); // src/stores/minimap/minimap-reducer.ts var updateDocumentState = (state2, action) => { if (action.type === "minimap/set-card-ranges") { state2.ranges.cards = action.payload.ranges; state2.scrollInfo.totalDrawnHeight_cpx = action.payload.height_cpx; } else if (action.type === "minimap/set-active-node") { state2.activeCardId = action.payload.id; } else if (action.type === "minimap/set-scroll-position") { state2.scrollInfo.scrollPosition_cpx = action.payload.position_cpx; } }; var minimapReducer = (store, action) => { updateDocumentState(store, action); return store; }; // src/stores/minimap/subscriptions/effects/minimap-canvas/worker/shapes/helpers/chunk-positions-cache.ts var ChunkPositionsCache = class { constructor() { this.caches = {}; this.getCachedResult = (canvasId, nodeId, content, availableLineCharacters) => { const cache = this.caches[canvasId]; if (!cache) return; const cached = cache.get(nodeId); if (cached) { const valid = cached.availableLineCharacters === availableLineCharacters && cached.content === content; if (valid) { return cached.result; } else { cache.delete(nodeId); } } }; this.cacheResult = (canvasId, nodeId, content, availableLineCharacters, result) => { if (!this.caches[canvasId]) { this.caches[canvasId] = /* @__PURE__ */ new Map(); } const cache = this.caches[canvasId]; cache.set(nodeId, { availableLineCharacters, content, result }); }; this.deleteCanvasCache = (canvasId) => { delete this.caches[canvasId]; }; } }; var chunkPositionsCache = new ChunkPositionsCache(); // src/stores/minimap/subscriptions/effects/minimap-canvas/worker/consts/minimap-theme.ts var themes = { dark: { isLightTheme: false, card_active: "#a9a9a9a", card_searchResult: "#e0de7177", wordBlock: "#99999966", indentLine: "#ffffff55", chars: { ["highlight" /* highlight */]: "#e0de7177", // brighter yellow ["wikilink" /* wikilink */]: "#027aff77", // brighter blue ["bold_italic" /* bold_italic */]: "#fb464c66", // brighter red ["heading" /* heading */]: "#44cf6e77", // brighter green ["bullet" /* bullet */]: "#fa99cd66", // brighter pink ["tag" /* tag */]: "#e9973f77", // brighter orange ["period" /* period */]: "#ffffff88", // white ["strikethrough" /* strikethrough */]: "#a882ff66", // brighter purple ["task" /* task */]: "#17e7e077", // brighter cyan ["comma" /* comma */]: "#17e7e088" // white } }, light: { isLightTheme: true, wordBlock: "#70707088", card_active: "#aaaaaa", card_searchResult: "#e0ac0077", indentLine: "#777777aa", chars: { ["highlight" /* highlight */]: "#e0ac0077", // brighter yellow ["wikilink" /* wikilink */]: "#086ddd77", // brighter blue ["bold_italic" /* bold_italic */]: "#e9314777", // brighter red ["heading" /* heading */]: "#08b94e77", // brighter green ["bullet" /* bullet */]: "#d5398477", // brighter pink ["tag" /* tag */]: "#ec750077", // brighter orange ["period" /* period */]: "#777777ee", // original gray ["strikethrough" /* strikethrough */]: "#7852ee77", // brighter purple ["task" /* task */]: "#17e7e077", // brighter cyan ["comma" /* comma */]: "#11b3b3" // brighter cyan } } }; var minimapTheme = { current: themes.dark }; var refreshMinimapTheme = () => { minimapTheme.current = themes[getTheme()]; }; // src/helpers/debounce.ts var debounce2 = (func2, delay2) => { let timeoutId = null; return (...args) => { if (timeoutId) clearTimeout(timeoutId); timeoutId = setTimeout(() => { func2(...args); }, delay2); }; }; // inline-worker:__inline-worker function inlineWorker(scriptText) { let blob = new Blob([scriptText], { type: "text/javascript" }); let url = URL.createObjectURL(blob); let worker = new Worker(url); URL.revokeObjectURL(url); return worker; } // src/stores/minimap/subscriptions/effects/minimap-canvas/worker/minimap-renderer.worker.ts function Worker2() { return inlineWorker('var C=class{constructor(){this.caches={};this.getCachedResult=(t,i,r,s)=>{let c=this.caches[t];if(!c)return;let o=c.get(i);if(o){if(o.availableLineCharacters===s&&o.content===r)return o.result;c.delete(i)}};this.cacheResult=(t,i,r,s,c)=>{this.caches[t]||(this.caches[t]=new Map),this.caches[t].set(i,{availableLineCharacters:s,content:r,result:c})};this.deleteCanvasCache=t=>{delete this.caches[t]}}},d=new C;var A={"#":"heading","-":"bullet",".":"period","=":"highlight","*":"bold_italic",_:"bold_italic","[":"wikilink","]":"wikilink","~":"strikethrough",",":"comma"},X=/\\b(dr|mr|mrs|ms|e\\.g|e\\.i|sr|jr|st|ave|rd|no|vs|etc|vol|ed|pp)\\b/i,W=new Set(["^",".","!","`","*","%","?",\'"\',"~","@","\'","(",")","!","{","}","[","]","^","%","$","+","=","\\\\"]),v=(n,t,i,r)=>{let s=d.getCachedResult(r,i,n,t);if(s)return s;let c=!n.trim();c&&(n="empty");let o=[],e={chunk:{chunk:"",length_chars:-1,line:0,type:null,x_chars:0},x:0,line:0,type:null,previousType:null,previousLine:0,category:null,isSpace:!1,isAfterOpeningElement:!1,lineType:null};for(let a=0;at?(e.line++,e.x=0,e.lineType=null):!e.type&&e.lineType&&(e.type=e.lineType),e.line!==e.previousLine?(e.chunk.length_chars=e.chunk.chunk.length,e.chunk.length_chars>0&&o.push(e.chunk),e.chunk={chunk:l,line:e.line,x_chars:0,length_chars:-1,type:e.type},e.previousLine=e.line):e.isSpace?(e.chunk.length_chars=e.chunk.chunk.length,e.chunk.length_chars>0&&o.push(e.chunk),e.chunk={chunk:"",line:e.line,x_chars:e.x+1,length_chars:-1,type:e.type},e.isSpace=!1,e.category=null):e.type!==e.previousType||e.category==="single_character"?(e.chunk.length_chars=e.chunk.chunk.length,e.chunk.length_chars>0&&o.push(e.chunk),e.chunk={chunk:l,line:e.line,x_chars:e.x,length_chars:-1,type:e.type},e.category==="single_character"&&(e.type=null)):e.chunk.chunk+=l,e.x++,e.previousType=e.type}e.chunk.length_chars=e.chunk.chunk.length,e.chunk.length_chars>0&&o.push(e.chunk);let u={chunks:o,totalLines:e.line+1,empty:c};return d.cacheResult(r,i,n,t,u),u};var I=58.666666666666664,b=2;var T=6,B=6,m=T+B;var G=1,w=(n,t,i)=>{var u;let r=I-t.depth*b,s=v(n.content,r,n.id,i),c={indentationLines:[],lineNumber:t.nextLineOffset,wordBlocks:[],depth:t.depth,nodeId:n.id,y_px:10*t.nextLineOffset};t.lines.push(c);let o=((u=s.chunks[0])==null?void 0:u.line)||0;for(let a of s.chunks){let l=t.nextLineOffset+a.line;a.line>o&&(c={indentationLines:[],lineNumber:l,wordBlocks:[],depth:t.depth,nodeId:n.id,y_px:10*l},t.lines.push(c),o=a.line),c.wordBlocks.push({width_px:a.length_chars*6,x_px:t.depth*m+a.x_chars*6,empty:s.empty,chunkType:a.type})}t.nextLineOffset=t.nextLineOffset+s.totalLines+1;let e=t.depth;t.depth=e+1;for(let a of n.children)w(a,t,i);t.depth=e},R=(n,t)=>{let i={nextLineOffset:G,depth:0,lines:[]};for(let r of n)w(r,i,t);return{lines:i.lines,totalLines:i.nextLineOffset+1}};var E=n=>{for(let t=0;t({id:n,content:t.trim(),children:[]}),D=(n,t)=>{var s;let i={};for(let c of n)for(let o of c.groups)for(let e of o.nodes){let u=P(e,(s=t[e])==null?void 0:s.content),a=i[o.parentId];a||(a=P(o.parentId),i[o.parentId]=a),a.children.push(u),i[e]=u}let r=[];if(n[0])for(let c of n[0].groups)for(let o of c.nodes){let e=i[o];if(e)r.push(e);else throw new Error(`could not find node ${o}`)}return r};var H=n=>{let t={};for(let i of n){let r=i.y_px,s=i.y_px+10;t[i.nodeId]?t[i.nodeId]={y_start:Math.min(r,t[i.nodeId].y_start),y_end:Math.max(s,t[i.nodeId].y_end),cardId:i.nodeId}:t[i.nodeId]={y_start:r,y_end:s,cardId:i.nodeId}}return t};var g=class{constructor(){this.lines=[];this.totalLines=0;this.cardRanges={}}calculateDocument(t,i){let r=D(t.columns,t.content),s=R(r,i);return this.lines=s.lines,this.totalLines=s.totalLines,E(s.lines),this.cardRanges=H(this.lines),{totalLines:this.totalLines,totalDrawnHeight_cpx:this.totalLines*10,cardRanges:this.cardRanges}}getLines(){return this.lines}getTotalLines(){return this.totalLines}getCardRange(t){return this.cardRanges[t]}getCardRanges(){return this.cardRanges}};var K=6,M=(n,t,i)=>{let r="",s="";for(let c=0;c<=t.length-1;c++){let o=t[c];for(let e of o.wordBlocks)e.empty||(s=e.chunkType?i.chars[e.chunkType]:i.wordBlock,s!==r&&(r=s,n.fillStyle=s),n.fillRect(e.x_px,o.y_px,e.width_px,K));r="",n.fillStyle=i.indentLine;for(let e of o.indentationLines)n.fillRect(e.x_px,o.y_px,T,e.height_px)}};var f=class{constructor(t,i,r){this.drawDocument=t=>{let i=this.shapes.getTotalLines()*10;this.canvas.height=i,M(this.ctx,this.shapes.getLines(),t)};this.ctx=t,this.canvas=i,this.shapes=r}};var F={dark:{isLightTheme:!1,card_active:"#a9a9a9a",card_searchResult:"#e0de7177",wordBlock:"#99999966",indentLine:"#ffffff55",chars:{highlight:"#e0de7177",wikilink:"#027aff77",bold_italic:"#fb464c66",heading:"#44cf6e77",bullet:"#fa99cd66",tag:"#e9973f77",period:"#ffffff88",strikethrough:"#a882ff66",task:"#17e7e077",comma:"#17e7e088"}},light:{isLightTheme:!0,wordBlock:"#70707088",card_active:"#aaaaaa",card_searchResult:"#e0ac0077",indentLine:"#777777aa",chars:{highlight:"#e0ac0077",wikilink:"#086ddd77",bold_italic:"#e9314777",heading:"#08b94e77",bullet:"#d5398477",tag:"#ec750077",period:"#777777ee",strikethrough:"#7852ee77",task:"#17e7e077",comma:"#11b3b3"}}},O={current:F.dark};var _=class{constructor(t,i,r){this.state={theme:O.current};this.setTheme=t=>{this.state.theme=t};this.setDocument=(t,i)=>{let r=this.shapes.calculateDocument(t,i);return this.renderer.drawDocument(this.state.theme),{totalDrawnHeight_cpx:r.totalDrawnHeight_cpx,cardRanges:r.cardRanges}};this.shapes=new g,this.renderer=new f(t,i,this.shapes),this.state.theme=r}};var L={canvases:{}};self.onmessage=n=>{let t=n.data.payload,i=null;if(t.type==="worker/initialize"){let r=t.payload.canvas.getContext("2d");r&&(L.canvases[t.payload.canvasId]={minimap:new _(r,t.payload.canvas,t.payload.theme)})}else if(t.type==="worker/destroy")delete L.canvases[t.payload.canvasId],d.deleteCanvasCache(t.payload.canvasId);else{let r=L.canvases[t.payload.canvasId];if(!r)throw new Error("no canvas context");t.type==="minimap/update-theme"?r.minimap.setTheme(t.payload.theme):t.type==="minimap/set/document"&&(i=r.minimap.setDocument(t.payload.document,t.payload.canvasId))}self.postMessage({id:n.data.id,payload:i})};\n'); } // src/stores/view/subscriptions/effects/style-rules/workers/style-rules.worker.ts function Worker3() { return inlineWorker('var C=(r,u)=>{for(let e of r)for(let t of e.groups)if(t.parentId===u)return t};var y=(r,u)=>{var e,t;return(t=(e=C(r,u))==null?void 0:e.nodes.length)!=null?t:0};var g=r=>r.split(`\n`).filter(u=>u.trim().length>0).length;var N=/(?:[0-9]+(?:(?:,|.)[0-9]+)*|[-\'\u2019A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\u0B80-\u0BFF\uAC00-\uD7A3\uA960-\uA97C\uD7B0-\uD7C6])+|[\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u4E00-\\u9FD5\\uAC00-\\uD7A3\\uA960-\\uA97C\\uD7B0-\\uD7C6]/g,f=r=>{N.lastIndex=0;let u=r.match(N);return u?u.length:0};var I=/(?:[0-9]+(?:(?:,|.)[0-9]+)*|[-\'\u2019A-Za-z\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\u0B80-\u0BFF\uAC00-\uD7A3\uA960-\uA97C\uD7B0-\uD7C6])+|[\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u4E00-\\u9FD5\\uAC00-\\uD7A3\\uA960-\\uA97C\\uD7B0-\\uD7C6]/g,S=r=>r.length-r.replace(/--/g,"##").replace(I,"").length;var l=(r,u)=>{for(let e=0;en===u))return e}return-1};var D=(r,u)=>{let e=l(r,u),t=new Set([u]);for(let o=e+1;oD(r,u).length;var O=r=>{var e;return((e=r.match(/^#{1,6} .*/gm))!=null?e:[]).map(t=>t.replace(/^#{1,6} /,""))};var E=new Set(["HISTORY/APPLY_NEXT_SNAPSHOT","HISTORY/APPLY_PREVIOUS_SNAPSHOT","HISTORY/SELECT_SNAPSHOT","DOCUMENT/LOAD_FILE","RESET_STORE","DOCUMENT/MERGE_NODE","DOCUMENT/SPLIT_NODE","DOCUMENT/DELETE_NODE","DOCUMENT/EXTRACT_BRANCH","DOCUMENT/CUT_NODE"]);var p=new Set(["DOCUMENT/DROP_NODE","DOCUMENT/MOVE_NODE","DOCUMENT/INSERT_NODE","DOCUMENT/PASTE_NODE"]);var R=()=>({headings:{},content:{},"line-count":{},"character-count":{},"word-count":{},"headings-word-count":{},"direct-children-count":{},"total-children-count":{},depth:{}}),B=class{constructor(u,e){this.isEmpty=!0;this.resetCache=(u,e,t)=>{this.columns=e,this.content=t,!this.isEmpty&&(E.has(u.type)?(this.cache=R(),this.isEmpty=!0):p.has(u.type)?(this.cache.depth={},this.cache["direct-children-count"]={},this.cache["total-children-count"]={}):u.type==="DOCUMENT/SET_NODE_CONTENT"?(delete this.cache.headings[u.payload.nodeId],delete this.cache.content[u.payload.nodeId],delete this.cache["line-count"][u.payload.nodeId],delete this.cache["character-count"][u.payload.nodeId],delete this.cache["word-count"][u.payload.nodeId],delete this.cache["headings-word-count"][u.payload.nodeId]):u.type==="DOCUMENT/FORMAT_HEADINGS"&&(this.cache.headings={},this.cache.content={},this.cache["line-count"]={},this.cache["character-count"]={},this.cache["word-count"]={},this.cache["headings-word-count"]={}))};this.columns=u,this.content=e,this.cache=R()}cacheResult(u,e,t){this.isEmpty&&(this.isEmpty=!1),this.cache[e][u]=t}getProperty(u,e){var o,n,A,s;if(this.cache[e][u]!==void 0)return this.cache[e][u];let t;switch(e){case"direct-children-count":t=y(this.columns,u);break;case"total-children-count":t=T(this.columns,u);break;case"line-count":t=g((o=this.content[u])==null?void 0:o.content);break;case"word-count":t=f((n=this.content[u])==null?void 0:n.content);break;case"character-count":t=S((A=this.content[u])==null?void 0:A.content);break;case"depth":t=l(this.columns,u)+1;break;case"headings":t=O((s=this.content[u])==null?void 0:s.content).join(" ").toLowerCase();break;case"headings-word-count":t=f(this.getProperty(u,"headings"));break;default:throw new Error(`Unsupported property: ${e}`)}return this.cacheResult(u,e,t),t}};var v=(r,u)=>{for(let e of r)for(let t of e.groups)for(let o of t.nodes)if(o===u)return t};var w=(r,u)=>{for(let e=0;e{let e=[],t=w(r,u);if(!t)return e;let o=t[1],n=t[0];for(let A=n-1;A>=0&&o;A--){e.push(o);let s;for(let c of r[A].groups){for(let i of c.nodes)if(i===o){s=c.parentId;break}if(s)break}o=s}return e};var P=()=>({self:{},"direct-parent":{},"any-parent":{},"direct-children":{},"any-children":{}}),m=class{constructor(u){this.isEmpty=!0;this.resetCache=(u,e)=>{this.columns=e,!this.isEmpty&&(E.has(u.type)||p.has(u.type))&&(this.cache=P(),this.isEmpty=!0)};this.columns=u,this.cache=P()}cacheResult(u,e,t){this.isEmpty&&(this.isEmpty=!1),this.cache[e][u]=t}getTargetNodes(u,e){var o;if(this.cache[u][e]!==void 0)return this.cache[u][e];let t;switch(u){case"self":t=[e];break;case"direct-parent":{let n=v(this.columns,e);t=n?[n.parentId]:[];break}case"any-parent":t=b(this.columns,e);break;case"direct-children":{let n=C(this.columns,e);t=(o=n==null?void 0:n.nodes)!=null?o:[];break}case"any-children":t=D(this.columns,e);break;default:t=[]}return this.cacheResult(e,u,t),t}};var x=new Set(["equals","not-equals","empty","not-empty"]);var _=(r,u,e)=>{switch(u){case"equals":return r===e;case"not-equals":return r!==e;case"empty":return!r;case"not-empty":return!!r;case"contains":return r.includes(e);case"not-contains":return!r.includes(e);case"starts-with":return r.startsWith(e);case"not-starts-with":return!r.startsWith(e);case"ends-with":return r.endsWith(e);case"not-ends-with":return!r.endsWith(e);case"matches-regex":return new RegExp(e).test(r);case"not-matches-regex":return!new RegExp(e).test(r);default:return!1}};var M=(r,u,e,t)=>{switch(u){case"equals":return r===e;case"not-equals":return r!==e;case"empty":return r===0;case"not-empty":return r!==0;case"greater-than":return r>e;case"less-than":return r=e&&r<=t;case"not-between":return t!==void 0&&(rt);default:return!1}};var U=(r,u,e,t,o)=>{var A,s;if(!u.enabled)return!1;let n=t.getTargetNodes(u.scope,r);for(let c of n){let i=(s=(A=e[c])==null?void 0:A.content)!=null?s:"";if("value"in u){let a=!1;if(u.property==="content"||u.property==="headings"){let F=u.property==="content"?i.toLowerCase():o.getProperty(r,"headings");a=_(F,u.operator,u.value.toLowerCase())}else{let F=o.getProperty(c,u.property);if(F===null)throw new Error("Value is null:"+u.property+" - "+c);a=M(F,u.operator,u.value,u.valueB)}if(a)return!0}}return!1};var L=(r,u,e,t)=>{let o={nodeStyles:new Map,allMatches:new Map},n=[...u].sort((A,s)=>A.priority-s.priority);for(let A of r.columns)for(let s of A.groups)for(let c of s.nodes)for(let i of n){if(!i.enabled||typeof i.condition.value=="string"&&i.condition.value.length===0&&!x.has(i.condition.operator))continue;if(U(c,i.condition,r.content,t,e)){o.nodeStyles.has(c)||o.nodeStyles.set(c,i.style);let F=o.allMatches.get(i.id);F||(F=[],o.allMatches.set(i.id,F)),F.push(c)}}return o};var d=class{constructor(){this.processStyleRules=(u,e,t)=>(!this.propertyResolver||!this.targetResolver?this.initialize(u):t&&this.resetResolversCache(u,t),L(u,e,this.propertyResolver,this.targetResolver));this.resetResolversCache=(u,e)=>{this.targetResolver.resetCache(e,u.columns),this.propertyResolver.resetCache(e,u.columns,u.content)};this.initialize=u=>{this.targetResolver=new m(u.columns),this.propertyResolver=new B(u.columns,u.content)}}};var h={};self.onmessage=r=>{let u=r.data,{id:e,payload:t}=u,o=null;switch(t.type){case"destroy":{delete h[t.payload.viewId];break}case"process-rules":{h[t.payload.viewId]||(h[t.payload.viewId]=new d),o=h[t.payload.viewId].processStyleRules(t.payload.document,t.payload.rules,t.payload.action);break}default:throw new Error(`Unhandled event type: ${t.type}`)}self.postMessage({id:e,payload:o})};\n'); } // src/helpers/worker-promise.ts var WorkerPromise = class { constructor(worker) { this.id = 0; this.resolvers = {}; this.run = (payload, shared) => { return new Promise((resolve) => { if (this.id === 1e3) this.id = 0; const id2 = this.id++; this.resolvers[id2] = resolve; if (shared) { this.worker.postMessage({ id: id2, payload }, [shared]); } else this.worker.postMessage({ id: id2, payload }); }); }; this.terminate = () => { this.worker.terminate(); }; this.onMessage = (message) => { const id2 = message.data.id; const resolver = this.resolvers[id2]; if (resolver) { resolver(message.data.payload); delete this.resolvers[id2]; } }; this.worker = worker; this.worker.addEventListener("message", this.onMessage); } }; // src/obsidian/status-bar/helpers/status-bar.worker.ts function Worker4() { return inlineWorker('var i=(e,t="")=>({id:e,content:t.trim(),children:[]}),p=(e,t)=>{var r;let o={};for(let c of e)for(let s of c.groups)for(let d of s.nodes){let l=i(d,(r=t[d])==null?void 0:r.content),u=o[s.parentId];u||(u=i(s.parentId),o[s.parentId]=u),u.children.push(l),o[d]=l}let n=[];if(e[0])for(let c of e[0].groups)for(let s of c.nodes){let d=o[s];if(d)n.push(d);else throw new Error(`could not find node ${s}`)}return n};var a=(e,t=[])=>{for(let o of e)t.push(o),o.children.length>0&&a(o.children,t);return t},m=e=>e.reduce((t,o)=>t+o.content.length,0),f=e=>{let t=p(e.document.columns,e.document.content),o=a(t),n=m(o);if(n===0)return 0;let r=o.findIndex(d=>d.id===e.activeNode);if(r===-1)return 0;let c=o.slice(0,r+1),s=m(c);return Math.round(s/n*100)};var g=(e,t)=>{for(let o=0;oc===t))return o}return-1};var h=(e,t)=>{let o=g(e,t),n=new Set([t]);for(let r=o+1;rh(e,t).length;self.onmessage=e=>{let t=e.data.payload,o=f(t),r={totalChildCount:C(t.document.columns,t.activeNode),progress:o};self.postMessage({id:e.data.id,payload:r})};\n'); } // src/workers/worker-instances.ts var minimapWorker = new WorkerPromise(new Worker2()); var rulesWorker = new WorkerPromise(new Worker3()); var statusBarWorker = new WorkerPromise(new Worker4()); // src/stores/minimap/subscriptions/effects/draw-document.ts var drawDocument = async (view) => { const minimapStore = view.getMinimapStore(); const state2 = minimapStore.getValue(); const lineageDocument = view.documentStore.getValue().document; const canvasId = state2.canvasId; const activeCardId = state2.activeCardId; const payload = await minimapWorker.run({ type: "minimap/set/document", payload: { document: lineageDocument, canvasId, activeNodeId: activeCardId } }); invariant(payload); minimapStore.dispatch({ type: "minimap/set-card-ranges", payload: { ranges: payload.cardRanges, height_cpx: payload.totalDrawnHeight_cpx } }); }; var debouncedDrawDocument = debounce2(drawDocument, 100); // src/stores/minimap/subscriptions/effects/set-minimap-dom.ts var setMinimapDom = (view) => { const minimapContainer = view.contentEl.querySelector( ".minimap-container" ); if (!minimapContainer) throw new SilentError("minimapContainer is undefined"); const canvasContainer = minimapContainer.querySelector( ".canvas-container" ); invariant(canvasContainer); const scrollIndicator = minimapContainer.querySelector( "#scrollIndicator" ); const canvas = minimapContainer.querySelector("canvas"); invariant(scrollIndicator); invariant(canvas); canvas.width = CANVAS_WIDTH_CPX; const offscreen = canvas.transferControlToOffscreen(); const dom = { offscreen, canvas, scrollIndicator, canvasContainer }; view.setMinimapDom(dom); }; // src/stores/minimap/subscriptions/effects/initialize-minimap-worker.ts var initializeMinimapWorker = async (view) => { await minimapWorker.run( { type: "worker/initialize", payload: { canvas: view.getMinimapDom().offscreen, canvasId: view.getMinimapStore().getValue().canvasId, theme: minimapTheme.current } }, view.getMinimapDom().offscreen ); }; // src/stores/minimap/subscriptions/actions/set-minimap-active-node.ts var setMinimapActiveNode = (view) => { view.getMinimapStore().dispatch({ type: "minimap/set-active-node", payload: { id: view.viewStore.getValue().document.activeNode } }); }; // src/stores/minimap/subscriptions/effects/scroll-indicator/apply-scroll-position.ts var import_obsidian22 = require("obsidian"); var getContainerDimensions = (dom) => { const minimapContainer = dom.scrollIndicator.parentElement; if (!minimapContainer) return null; return { clientHeight_dpx: minimapContainer.clientHeight, containerHeight_cpx: dpx_to_cpx(minimapContainer.clientHeight) }; }; var calculateScrollDimensions = (state2, clientHeight_dpx, containerHeight_cpx) => { const indicatorHeight_cpx = containerHeight_cpx / state2.totalDrawnHeight_cpx * containerHeight_cpx; const maxScroll_cpx = state2.totalDrawnHeight_cpx - containerHeight_cpx; const scrollPercent = state2.scrollPosition_cpx / maxScroll_cpx; const indicatorHeight_dpx = cpx_to_dpx(indicatorHeight_cpx); const indicatorPosition_dpx = scrollPercent * (clientHeight_dpx - indicatorHeight_dpx); const scrollPosition_dpx = cpx_to_dpx(state2.scrollPosition_cpx); return { indicatorHeight_dpx, indicatorPosition_dpx, scrollPosition_dpx }; }; var applyDomUpdates = (dom, dimensions) => { requestAnimationFrame(() => { dom.scrollIndicator.style.height = `${dimensions.indicatorHeight_dpx}px`; dom.scrollIndicator.style.transform = `translateY(${dimensions.indicatorPosition_dpx}px)`; dom.canvasContainer.style.transform = `translateY(${-dimensions.scrollPosition_dpx}px)`; }); }; var applyScrollPosition = (state2, dom) => { const dimensions = getContainerDimensions(dom); if (!dimensions) return; const isScrollIndicatorHidden = state2.totalDrawnHeight_cpx <= dimensions.containerHeight_cpx; if (isScrollIndicatorHidden) { dom.scrollIndicator.style.display = "none"; dom.canvasContainer.style.transform = "translateY(0)"; return; } dom.scrollIndicator.style.display = "block"; const scrollDimensions = calculateScrollDimensions( state2, dimensions.clientHeight_dpx, dimensions.containerHeight_cpx ); applyDomUpdates(dom, scrollDimensions); }; var debouncedApplyScrollPosition = (0, import_obsidian22.debounce)(applyScrollPosition, 16); // src/stores/minimap/subscriptions/on-minimap-mount.ts var onMinimapMount = async (view) => { const minimapStore = view.minimapStore; invariant(minimapStore); refreshMinimapTheme(); setMinimapDom(view); initializeMinimapWorker(view); setMinimapActiveNode(view); await drawDocument(view); debouncedApplyScrollPosition( minimapStore.getValue().scrollInfo, view.getMinimapDom() ); }; // src/stores/minimap/subscriptions/actions/set-scrollbar-position/calculate-scroll-delta-to-active-card.ts var calculateScrollDeltaToActiveCard = (y_start_cpx, y_end_cpx, totalDrawnHeight_cpx, scrollPosition_cpx, clientHeight_dpx) => { const containerHeight_cpx = dpx_to_cpx(clientHeight_dpx); const contentFitsContainer = totalDrawnHeight_cpx <= containerHeight_cpx; if (contentFitsContainer) { return null; } const currentScroll_cpx = scrollPosition_cpx; const visibleStart_cpx = currentScroll_cpx; const visibleEnd_cpx = currentScroll_cpx + containerHeight_cpx; const startIsVisible = y_start_cpx > visibleStart_cpx && y_start_cpx < visibleEnd_cpx; const endIsVisible = y_end_cpx > visibleStart_cpx && y_end_cpx < visibleEnd_cpx; if (startIsVisible && endIsVisible) { return null; } let newScroll_cpx = 0; const range_height_cpx = y_end_cpx - y_start_cpx; const rangeIsTallerThanContainer = range_height_cpx > containerHeight_cpx; if (rangeIsTallerThanContainer) { newScroll_cpx = y_start_cpx; } else { if (!startIsVisible) { newScroll_cpx = y_start_cpx - 10; } else if (!endIsVisible) { newScroll_cpx = y_end_cpx - containerHeight_cpx + 10; } } const maxScroll_cpx = totalDrawnHeight_cpx - containerHeight_cpx; newScroll_cpx = Math.max(0, Math.min(newScroll_cpx, maxScroll_cpx)); return newScroll_cpx; }; // src/stores/minimap/subscriptions/actions/set-scrollbar-position/set-scrollbar-position.ts var setScrollbarPosition = debounce2((view) => { const minimapStore = view.getMinimapStore(); const state2 = minimapStore.getValue(); const activeCardRange = state2.ranges.cards[state2.activeCardId]; invariant(activeCardRange); const minimapContainer = view.getMinimapDom().canvasContainer.parentElement; invariant(minimapContainer); const delta_cpx = calculateScrollDeltaToActiveCard( activeCardRange.y_start, activeCardRange.y_end, state2.scrollInfo.totalDrawnHeight_cpx, state2.scrollInfo.scrollPosition_cpx, minimapContainer.clientHeight ); if (typeof delta_cpx === "number") { minimapStore.dispatch({ type: "minimap/set-scroll-position", payload: { position_cpx: Number(delta_cpx) } }); } }, 16); // src/stores/minimap/subscriptions/on-minimap-state-update.ts var onMinimapStateUpdate = (view, action, state2) => { const minimapStore = view.minimapStore; invariant(minimapStore); if (action.type === "minimap/set-card-ranges") { setScrollbarPosition(view); } else if (action.type === "minimap/set-active-node") { if (state2.ranges.cards[state2.activeCardId]) { setScrollbarPosition(view); } } else if (action.type === "minimap/set-scroll-position") { debouncedApplyScrollPosition(state2.scrollInfo, view.getMinimapDom()); } }; // src/stores/minimap/subscriptions/minimap-subscriptions.ts var minimapSubscriptions = (view) => { const unsub = view.minimapStore.subscribe( (viewState, action, initialRun) => { if (initialRun) { onMinimapMount(view); } else if (action) { onMinimapStateUpdate(view, action, viewState); } } ); return () => { unsub(); minimapWorker.run({ type: "worker/destroy", payload: { canvasId: view.minimapStore.getValue().canvasId } }); view.minimapStore = null; }; }; // src/view/components/container/minimap/minimap.svelte function add_css32(target) { append_styles(target, "svelte-lp1si7", ":root{--scroll-indicator-color:rgba(255, 255, 255, 0.2)}.minimap-container.svelte-lp1si7{position:relative;height:100%;width:184px;padding:4px;background:var(--background-primary);overflow:hidden;flex:0 0 auto}canvas.svelte-lp1si7{width:176px;margin-right:4px}.canvas-container.svelte-lp1si7{transition:transform 0.1s ease-out;width:176px}.scroll-indicator.svelte-lp1si7{position:absolute;right:0;top:0;width:4px;background:var(--color-base-50);border-radius:2px;transition:transform 0.1s ease-out}"); } function create_fragment90(ctx) { let div2; let div0; let indicators; let t0; let canvas; let t1; let div1; let current; let mounted; let dispose; indicators = new indicators_default({}); return { c() { div2 = element("div"); div0 = element("div"); create_component(indicators.$$.fragment); t0 = space(); canvas = element("canvas"); t1 = space(); div1 = element("div"); attr(canvas, "id", "minimap"); attr(canvas, "class", "svelte-lp1si7"); attr(div0, "class", "canvas-container svelte-lp1si7"); attr(div1, "class", "scroll-indicator svelte-lp1si7"); attr(div1, "id", "scrollIndicator"); attr(div2, "class", "minimap-container svelte-lp1si7"); }, m(target, anchor) { insert(target, div2, anchor); append(div2, div0); mount_component(indicators, div0, null); append(div0, t0); append(div0, canvas); append(div2, t1); append(div2, div1); current = true; if (!mounted) { dispose = [ listen( div0, "click", /*onClick*/ ctx[0] ), listen( div0, "mousemove", /*onMousemove*/ ctx[2] ), listen( div2, "wheel", /*onWheel*/ ctx[1] ) ]; mounted = true; } }, p: noop, i(local) { if (current) return; transition_in(indicators.$$.fragment, local); current = true; }, o(local) { transition_out(indicators.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div2); } destroy_component(indicators); mounted = false; run_all(dispose); } }; } function instance87($$self) { const view = getView(); view.minimapStore = new Store(defaultMinimapState(), minimapReducer, this.onViewStoreError); const onClick = (e) => onCanvasClick(e, view); const onWheel = (e) => onCanvasWheel(e, view); const onMousemove = createOnCanvasMousemove(view); onMount(() => { let unsub = null; setTimeout( () => { unsub = minimapSubscriptions(view); }, 300 ); return () => { if (unsub) unsub(); }; }); return [onClick, onWheel, onMousemove]; } var Minimap = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance87, create_fragment90, safe_not_equal, {}, add_css32); } }; var minimap_default = Minimap; // src/view/components/container/right-sidebar/right-sidebar.svelte function add_css33(target) { append_styles(target, "svelte-wtyjlq", ".lineage-right-sidebar.svelte-wtyjlq{--node-width:calc(var(--sidebar-width) - 40px);flex:0 0 auto;width:var(--animated-sidebar-width);position:relative;overflow:hidden;transition:width 0.3s ease}"); } function create_if_block22(ctx) { let minimap; let current; minimap = new minimap_default({}); return { c() { create_component(minimap.$$.fragment); }, m(target, anchor) { mount_component(minimap, target, anchor); current = true; }, i(local) { if (current) return; transition_in(minimap.$$.fragment, local); current = true; }, o(local) { transition_out(minimap.$$.fragment, local); current = false; }, d(detaching) { destroy_component(minimap, detaching); } }; } function create_fragment91(ctx) { let div; let div_class_value; let div_style_value; let current; let if_block = ( /*showMinimap*/ ctx[2] && create_if_block22(ctx) ); return { c() { div = element("div"); if (if_block) if_block.c(); attr(div, "class", div_class_value = null_to_empty("lineage-right-sidebar") + " svelte-wtyjlq"); attr(div, "style", div_style_value = "--animated-sidebar-width: " + /*animatedSidebarWidth*/ ctx[0] + "px; --sidebar-width: " + /*sidebarWidth*/ ctx[1] + "px; }"); }, m(target, anchor) { insert(target, div, anchor); if (if_block) if_block.m(div, null); current = true; }, p(ctx2, [dirty]) { if ( /*showMinimap*/ ctx2[2] ) { if (if_block) { if (dirty & /*showMinimap*/ 4) { transition_in(if_block, 1); } } else { if_block = create_if_block22(ctx2); if_block.c(); transition_in(if_block, 1); if_block.m(div, null); } } else if (if_block) { group_outros(); transition_out(if_block, 1, 1, () => { if_block = null; }); check_outros(); } if (!current || dirty & /*animatedSidebarWidth, sidebarWidth*/ 3 && div_style_value !== (div_style_value = "--animated-sidebar-width: " + /*animatedSidebarWidth*/ ctx2[0] + "px; --sidebar-width: " + /*sidebarWidth*/ ctx2[1] + "px; }")) { attr(div, "style", div_style_value); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div); } if (if_block) if_block.d(); } }; } var MIN_WIDTH = 184; function instance88($$self, $$props, $$invalidate) { let $showSidebarStore; let animatedSidebarWidth = 0; let sidebarWidth = MIN_WIDTH; let showMinimap = false; let showMinimapTimeout = null; const view = getView(); const showSidebarStore = showMinimapStore(view); component_subscribe($$self, showSidebarStore, (value) => $$invalidate(5, $showSidebarStore = value)); const toggleMinimap = (on) => { if (on) { $$invalidate(2, showMinimap = true); $$invalidate(4, showMinimapTimeout = setTimeout( () => { view.contentEl.addClass("lineage-view__content-el--minimap-on"); }, 150 )); } else { setTimeout( () => { view.contentEl.removeClass("lineage-view__content-el--minimap-on"); }, 150 ); $$invalidate(4, showMinimapTimeout = setTimeout( () => { $$invalidate(2, showMinimap = false); }, 400 )); } }; $$self.$$.update = () => { if ($$self.$$.dirty & /*showMinimapTimeout, $showSidebarStore*/ 48) { $: { if (showMinimapTimeout) clearTimeout(showMinimapTimeout); if ($showSidebarStore) { $$invalidate(0, animatedSidebarWidth = MIN_WIDTH); $$invalidate(1, sidebarWidth = MIN_WIDTH); toggleMinimap(true); } else { $$invalidate(0, animatedSidebarWidth = 0); toggleMinimap(false); } } } }; return [ animatedSidebarWidth, sidebarWidth, showMinimap, showSidebarStore, showMinimapTimeout, $showSidebarStore ]; } var Right_sidebar = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance88, create_fragment91, safe_not_equal, {}, add_css33); } }; var right_sidebar_default = Right_sidebar; // src/view/actions/click-and-drag/click-and-drag.ts var clickAndDrag = (element2, view) => { let pressed = false; let initializedValues = false; let container_startX = 0; let container_scrollLeft = 0; let container_rectLeft = 0; let zoomLevel = 1; const columns_startY = []; const columns_scrollTop = []; const columns_rectTop = []; let columns = []; const onMouseMove = (e) => { if (!pressed || e.buttons !== 1) return; if (!initializedValues) { const rect = view.container.getBoundingClientRect(); container_rectLeft = rect.left; container_startX = e.clientX - container_rectLeft; container_scrollLeft = view.container.scrollLeft; columns = Array.from(view.container.querySelectorAll(".column")); for (let i = 0; i < columns.length; i++) { const column = columns[i]; const rect2 = column.getBoundingClientRect(); columns_scrollTop[i] = column.scrollTop; columns_startY[i] = e.clientY - rect2.top; columns_rectTop[i] = rect2.top; } zoomLevel = view.plugin.settings.getValue().view.zoomLevel; initializedValues = true; } const _columns_rectTop = Array.from(columns_rectTop); const _columns_scrollTop = Array.from(columns_scrollTop); const _columns_startY = Array.from(columns_startY); requestAnimationFrame(() => { const dx = e.clientX - container_rectLeft - container_startX; view.container.scrollLeft = container_scrollLeft - dx; for (let i = 0; i < columns.length; i++) { const dy = e.clientY - _columns_rectTop[i] - _columns_startY[i]; const column = columns[i]; column.scrollTop = _columns_scrollTop[i] - dy / zoomLevel; } }); }; const onKeyDown = (e) => { if (e.key === " " && !pressed) { const enabled = !isEditing(view) && e.target.tagName !== "INPUT"; if (enabled) { pressed = true; view.container.style.cursor = "grab"; e.preventDefault(); } } }; const onKeyUp = (e) => { if (e.key === " " && pressed) { pressed = false; initializedValues = false; setTimeout(() => { view.container.style.cursor = "initial"; }, 50); } }; const onMouseDown = (e) => { if (pressed) { e.preventDefault(); e.stopPropagation(); } }; const onMouseUp = (e) => { if (pressed) { initializedValues = false; e.preventDefault(); e.stopPropagation(); } }; const hookEvents = () => { element2.addEventListener("mousemove", onMouseMove); element2.addEventListener("keydown", onKeyDown); element2.addEventListener("keyup", onKeyUp); element2.addEventListener("mouseup", onMouseUp); element2.addEventListener("mousedown", onMouseDown); }; const unhookEvents = () => { element2.removeEventListener("mousemove", onMouseMove); element2.removeEventListener("keydown", onKeyDown); element2.removeEventListener("keyup", onKeyUp); element2.removeEventListener("mouseup", onMouseUp); element2.removeEventListener("mousedown", onMouseDown); }; hookEvents(); return { destroy: () => { unhookEvents(); } }; }; // src/view/components/container/left-sidebar/components/tab-header/components/clickable-icon.svelte function add_css34(target) { append_styles(target, "svelte-1uy9r89", ".asterisk.svelte-1uy9r89{position:absolute;top:1px;right:1px;opacity:0.8}.theme-dark{& .clickable-icon {\n color: var(--color-base-60);\n };& .clickable-icon:active {\n color: var(--icon-color-active);\n }}.theme-light{& .lineage-view .sidebar-tabs-header .clickable-icon {\n color: var(--color-base-10);\n };& .lineage-view .sidebar-tabs-header .clickable-icon:active {\n color: var(--icon-color-active);\n }}.clickable-icon--active.svelte-1uy9r89{color:var(--icon-color-active);background-color:rgba(0, 0, 0, 0.3);background-blend-mode:multiply}"); } function create_if_block23(ctx) { let span; return { c() { span = element("span"); span.textContent = "*"; attr(span, "class", "asterisk svelte-1uy9r89"); }, m(target, anchor) { insert(target, span, anchor); }, d(detaching) { if (detaching) { detach(span); } } }; } function create_fragment92(ctx) { let button; let t; let button_class_value; let current; let mounted; let dispose; let if_block = ( /*hasEnabledItems*/ ctx[3] && create_if_block23(ctx) ); const default_slot_template = ( /*#slots*/ ctx[6].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[5], null ); return { c() { button = element("button"); if (if_block) if_block.c(); t = space(); if (default_slot) default_slot.c(); attr( button, "aria-label", /*label*/ ctx[1] ); attr(button, "class", button_class_value = null_to_empty("clickable-icon nav-action-button " + /*isActive*/ (ctx[2] ? "clickable-icon--active " : "")) + " svelte-1uy9r89"); button.disabled = /*disabled*/ ctx[4]; set_style(button, "position", "relative"); }, m(target, anchor) { insert(target, button, anchor); if (if_block) if_block.m(button, null); append(button, t); if (default_slot) { default_slot.m(button, null); } current = true; if (!mounted) { dispose = listen(button, "click", function() { if (is_function( /*onClick*/ ctx[0] )) ctx[0].apply(this, arguments); }); mounted = true; } }, p(new_ctx, [dirty]) { ctx = new_ctx; if ( /*hasEnabledItems*/ ctx[3] ) { if (if_block) { } else { if_block = create_if_block23(ctx); if_block.c(); if_block.m(button, t); } } else if (if_block) { if_block.d(1); if_block = null; } if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 32)) { update_slot_base( default_slot, default_slot_template, ctx, /*$$scope*/ ctx[5], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx[5] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx[5], dirty, null ), null ); } } if (!current || dirty & /*label*/ 2) { attr( button, "aria-label", /*label*/ ctx[1] ); } if (!current || dirty & /*isActive*/ 4 && button_class_value !== (button_class_value = null_to_empty("clickable-icon nav-action-button " + /*isActive*/ (ctx[2] ? "clickable-icon--active " : "")) + " svelte-1uy9r89")) { attr(button, "class", button_class_value); } if (!current || dirty & /*disabled*/ 16) { button.disabled = /*disabled*/ ctx[4]; } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(button); } if (if_block) if_block.d(); if (default_slot) default_slot.d(detaching); mounted = false; dispose(); } }; } function instance89($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; let { onClick } = $$props; let { label } = $$props; let { isActive = false } = $$props; let { hasEnabledItems = false } = $$props; let { disabled = false } = $$props; $$self.$$set = ($$props2) => { if ("onClick" in $$props2) $$invalidate(0, onClick = $$props2.onClick); if ("label" in $$props2) $$invalidate(1, label = $$props2.label); if ("isActive" in $$props2) $$invalidate(2, isActive = $$props2.isActive); if ("hasEnabledItems" in $$props2) $$invalidate(3, hasEnabledItems = $$props2.hasEnabledItems); if ("disabled" in $$props2) $$invalidate(4, disabled = $$props2.disabled); if ("$$scope" in $$props2) $$invalidate(5, $$scope = $$props2.$$scope); }; return [onClick, label, isActive, hasEnabledItems, disabled, $$scope, slots]; } var Clickable_icon = class extends SvelteComponent { constructor(options) { super(); init( this, options, instance89, create_fragment92, safe_not_equal, { onClick: 0, label: 1, isActive: 2, hasEnabledItems: 3, disabled: 4 }, add_css34 ); } }; var clickable_icon_default = Clickable_icon; // src/view/components/container/left-sidebar/components/tab-header/tab-header.svelte function add_css35(target) { append_styles(target, "svelte-rqh5hd", ".sidebar-tabs-header.svelte-rqh5hd{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;align-self:center;justify-self:center;box-sizing:border-box;height:auto}.tab-header-buttons.svelte-rqh5hd{display:flex;align-items:center;justify-content:center;gap:5px}"); } function create_default_slot_15(ctx) { let pin; let current; pin = new pin_default({ props: { class: "svg-icon" } }); return { c() { create_component(pin.$$.fragment); }, m(target, anchor) { mount_component(pin, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(pin.$$.fragment, local); current = true; }, o(local) { transition_out(pin.$$.fragment, local); current = false; }, d(detaching) { destroy_component(pin, detaching); } }; } function create_default_slot56(ctx) { let clock; let current; clock = new clock_default({ props: { class: "svg-icon" } }); return { c() { create_component(clock.$$.fragment); }, m(target, anchor) { mount_component(clock, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(clock.$$.fragment, local); current = true; }, o(local) { transition_out(clock.$$.fragment, local); current = false; }, d(detaching) { destroy_component(clock, detaching); } }; } function create_fragment93(ctx) { let div1; let div0; let clickableicon0; let t; let clickableicon1; let current; clickableicon0 = new clickable_icon_default({ props: { hasEnabledItems: false, isActive: ( /*$activeTab*/ ctx[0] === "pinned-cards" ), label: lang.sidebar_tab_pinned_cards, onClick: ( /*func*/ ctx[3] ), $$slots: { default: [create_default_slot_15] }, $$scope: { ctx } } }); clickableicon1 = new clickable_icon_default({ props: { hasEnabledItems: false, isActive: ( /*$activeTab*/ ctx[0] === "recent-cards" ), label: lang.sidebar_tab_recent_cards, onClick: ( /*func_1*/ ctx[4] ), $$slots: { default: [create_default_slot56] }, $$scope: { ctx } } }); return { c() { div1 = element("div"); div0 = element("div"); create_component(clickableicon0.$$.fragment); t = space(); create_component(clickableicon1.$$.fragment); attr(div0, "class", "tab-header-buttons svelte-rqh5hd"); attr(div1, "class", "sidebar-tabs-header svelte-rqh5hd"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); mount_component(clickableicon0, div0, null); append(div0, t); mount_component(clickableicon1, div0, null); current = true; }, p(ctx2, [dirty]) { const clickableicon0_changes = {}; if (dirty & /*$activeTab*/ 1) clickableicon0_changes.isActive = /*$activeTab*/ ctx2[0] === "pinned-cards"; if (dirty & /*$$scope*/ 64) { clickableicon0_changes.$$scope = { dirty, ctx: ctx2 }; } clickableicon0.$set(clickableicon0_changes); const clickableicon1_changes = {}; if (dirty & /*$activeTab*/ 1) clickableicon1_changes.isActive = /*$activeTab*/ ctx2[0] === "recent-cards"; if (dirty & /*$$scope*/ 64) { clickableicon1_changes.$$scope = { dirty, ctx: ctx2 }; } clickableicon1.$set(clickableicon1_changes); }, i(local) { if (current) return; transition_in(clickableicon0.$$.fragment, local); transition_in(clickableicon1.$$.fragment, local); current = true; }, o(local) { transition_out(clickableicon0.$$.fragment, local); transition_out(clickableicon1.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(clickableicon0); destroy_component(clickableicon1); } }; } function instance90($$self, $$props, $$invalidate) { let $activeTab; const view = getView(); const activeTab = LeftSidebarActiveTabStore(view); component_subscribe($$self, activeTab, (value) => $$invalidate(0, $activeTab = value)); const setActiveTab = (tab) => { view.plugin.settings.dispatch({ type: "view/left-sidebar/set-active-tab", payload: { tab } }); }; const func2 = () => setActiveTab("pinned-cards"); const func_1 = () => setActiveTab("recent-cards"); return [$activeTab, activeTab, setActiveTab, func2, func_1]; } var Tab_header = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance90, create_fragment93, safe_not_equal, {}, add_css35); } }; var tab_header_default = Tab_header; // src/stores/view/derived/pinned-cards-sidebar.ts var ActivePinnedCardStore = (view) => derived(view.viewStore, (state2) => state2.pinnedNodes.activeNode); // src/view/components/container/left-sidebar/components/no-items/no-items.svelte function create_fragment94(ctx) { let div; let t_value = ( /*variant*/ (ctx[0] === "pinned" ? lang.sidebar_no_pinned_cards : lang.sidebar_no_recent_cards) + "" ); let t; return { c() { div = element("div"); t = text(t_value); attr(div, "class", "pane-empty"); }, m(target, anchor) { insert(target, div, anchor); append(div, t); }, p(ctx2, [dirty]) { if (dirty & /*variant*/ 1 && t_value !== (t_value = /*variant*/ (ctx2[0] === "pinned" ? lang.sidebar_no_pinned_cards : lang.sidebar_no_recent_cards) + "")) set_data(t, t_value); }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div); } } }; } function instance91($$self, $$props, $$invalidate) { let { variant } = $$props; $$self.$$set = ($$props2) => { if ("variant" in $$props2) $$invalidate(0, variant = $$props2.variant); }; return [variant]; } var No_items = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance91, create_fragment94, safe_not_equal, { variant: 0 }); } }; var no_items_default = No_items; // src/view/components/container/left-sidebar/components/recent-cards/helpers/scroll-card-into-view.ts var scrollCardIntoView = (container, activeNodeId) => { const activeCard = container.querySelector( `#${activeNodeId}` ); if (activeCard) { activeCard.scrollIntoView({ behavior: "smooth", block: "nearest" }); } }; // src/view/components/container/left-sidebar/components/pinned-cards/actions/scroll-active-pinned-node.ts var scrollActivePinnedNode = (containerRef) => { const view = getView(); let timeout = null; const activePinnedCardStore = ActivePinnedCardStore(view); const activePinnedNodeSub = activePinnedCardStore.subscribe( (activeNodeId) => { if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { if (!containerRef) return; if (!activeNodeId) return; scrollCardIntoView(containerRef, activeNodeId); }, 200); } ); const pinnedNodesStore = PinnedNodesStore(view); const pinnedNodesSub = pinnedNodesStore.subscribe(() => { if (timeout) clearTimeout(timeout); timeout = setTimeout(() => { if (!containerRef) return; const activeNodeId = view.viewStore.getValue().pinnedNodes.activeNode; if (!activeNodeId) return; scrollCardIntoView(containerRef, activeNodeId); }, 200); }); return { destroy: () => { activePinnedNodeSub(); pinnedNodesSub(); } }; }; // src/view/components/container/left-sidebar/components/pinned-cards/pinned-cards-sidebar.svelte function add_css36(target) { append_styles(target, "svelte-1l2hv0v", ".pinned-cards-container.svelte-1l2hv0v{height:100%;width:100%;display:flex;flex-direction:column;align-items:center;gap:20px;flex:1 1 auto;padding-bottom:10px}"); } function get_each_context12(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[13] = list[i]; return child_ctx; } function create_else_block9(ctx) { let noitems; let current; noitems = new no_items_default({ props: { variant: "pinned" } }); return { c() { create_component(noitems.$$.fragment); }, m(target, anchor) { mount_component(noitems, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(noitems.$$.fragment, local); current = true; }, o(local) { transition_out(noitems.$$.fragment, local); current = false; }, d(detaching) { destroy_component(noitems, detaching); } }; } function create_if_block24(ctx) { let each_blocks = []; let each_1_lookup = /* @__PURE__ */ new Map(); let each_1_anchor; let current; let each_value = ensure_array_like( /*$pinnedNodesArray*/ ctx[0] ); const get_key = (ctx2) => ( /*node*/ ctx2[13] ); for (let i = 0; i < each_value.length; i += 1) { let child_ctx = get_each_context12(ctx, each_value, i); let key = get_key(child_ctx); each_1_lookup.set(key, each_blocks[i] = create_each_block12(key, child_ctx)); } return { c() { for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); }, m(target, anchor) { for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(target, anchor); } } insert(target, each_1_anchor, anchor); current = true; }, p(ctx2, dirty) { if (dirty & /*$pinnedNodesArray, $activePinnedCard, $editingStateStore, $pendingConfirmation, $idSection, $styleRules*/ 63) { each_value = ensure_array_like( /*$pinnedNodesArray*/ ctx2[0] ); group_outros(); each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block12, each_1_anchor, get_each_context12); check_outros(); } }, i(local) { if (current) return; for (let i = 0; i < each_value.length; i += 1) { transition_in(each_blocks[i]); } current = true; }, o(local) { for (let i = 0; i < each_blocks.length; i += 1) { transition_out(each_blocks[i]); } current = false; }, d(detaching) { if (detaching) { detach(each_1_anchor); } for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].d(detaching); } } }; } function create_each_block12(key_1, ctx) { let first; let node_1; let current; node_1 = new card_default({ props: { node: ( /*node*/ ctx[13] ), active: ( /*$activePinnedCard*/ ctx[1] === /*node*/ ctx[13] ? "node" /* node */ : "sibling" /* sibling */ ), editing: ( /*$editingStateStore*/ ctx[2].activeNodeId === /*node*/ ctx[13] && /*$editingStateStore*/ ctx[2].isInSidebar === true ), confirmDisableEdit: ( /*$editingStateStore*/ ctx[2].activeNodeId === /*node*/ ctx[13] && /*$pendingConfirmation*/ ctx[3].disableEdit === /*node*/ ctx[13] && /*$editingStateStore*/ ctx[2].isInSidebar === true ), confirmDelete: ( /*$pendingConfirmation*/ ctx[3].deleteNode.has( /*node*/ ctx[13] ) ), isInSidebar: true, firstColumn: true, section: ( /*$idSection*/ ctx[4][ /*node*/ ctx[13] ] ), hasActiveChildren: false, hasChildren: false, selected: false, pinned: false, style: ( /*$styleRules*/ ctx[5].get( /*node*/ ctx[13] ) ), outlineMode: false, collapsed: false, hidden: false, alwaysShowCardButtons: true } }); return { key: key_1, first: null, c() { first = empty(); create_component(node_1.$$.fragment); this.first = first; }, m(target, anchor) { insert(target, first, anchor); mount_component(node_1, target, anchor); current = true; }, p(new_ctx, dirty) { ctx = new_ctx; const node_1_changes = {}; if (dirty & /*$pinnedNodesArray*/ 1) node_1_changes.node = /*node*/ ctx[13]; if (dirty & /*$activePinnedCard, $pinnedNodesArray*/ 3) node_1_changes.active = /*$activePinnedCard*/ ctx[1] === /*node*/ ctx[13] ? "node" /* node */ : "sibling" /* sibling */; if (dirty & /*$editingStateStore, $pinnedNodesArray*/ 5) node_1_changes.editing = /*$editingStateStore*/ ctx[2].activeNodeId === /*node*/ ctx[13] && /*$editingStateStore*/ ctx[2].isInSidebar === true; if (dirty & /*$editingStateStore, $pinnedNodesArray, $pendingConfirmation*/ 13) node_1_changes.confirmDisableEdit = /*$editingStateStore*/ ctx[2].activeNodeId === /*node*/ ctx[13] && /*$pendingConfirmation*/ ctx[3].disableEdit === /*node*/ ctx[13] && /*$editingStateStore*/ ctx[2].isInSidebar === true; if (dirty & /*$pendingConfirmation, $pinnedNodesArray*/ 9) node_1_changes.confirmDelete = /*$pendingConfirmation*/ ctx[3].deleteNode.has( /*node*/ ctx[13] ); if (dirty & /*$idSection, $pinnedNodesArray*/ 17) node_1_changes.section = /*$idSection*/ ctx[4][ /*node*/ ctx[13] ]; if (dirty & /*$styleRules, $pinnedNodesArray*/ 33) node_1_changes.style = /*$styleRules*/ ctx[5].get( /*node*/ ctx[13] ); node_1.$set(node_1_changes); }, i(local) { if (current) return; transition_in(node_1.$$.fragment, local); current = true; }, o(local) { transition_out(node_1.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(first); } destroy_component(node_1, detaching); } }; } function create_fragment95(ctx) { let div; let current_block_type_index; let if_block; let scrollActivePinnedNode_action; let current; let mounted; let dispose; const if_block_creators = [create_if_block24, create_else_block9]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*$pinnedNodesArray*/ ctx2[0].length > 0 ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { div = element("div"); if_block.c(); attr(div, "class", "pinned-cards-container svelte-1l2hv0v"); }, m(target, anchor) { insert(target, div, anchor); if_blocks[current_block_type_index].m(div, null); current = true; if (!mounted) { dispose = action_destroyer(scrollActivePinnedNode_action = scrollActivePinnedNode.call(null, div)); mounted = true; } }, p(ctx2, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index === previous_block_index) { if_blocks[current_block_type_index].p(ctx2, dirty); } else { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { if_block.p(ctx2, dirty); } transition_in(if_block, 1); if_block.m(div, null); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div); } if_blocks[current_block_type_index].d(); mounted = false; dispose(); } }; } function instance92($$self, $$props, $$invalidate) { let $pinnedNodesArray; let $activePinnedCard; let $editingStateStore; let $pendingConfirmation; let $idSection; let $styleRules; const view = getView(); const pinnedNodesArray = PinnedNodesStore(view); component_subscribe($$self, pinnedNodesArray, (value) => $$invalidate(0, $pinnedNodesArray = value)); const idSection = IdSectionStore(view); component_subscribe($$self, idSection, (value) => $$invalidate(4, $idSection = value)); const editingStateStore = documentStateStore(view); component_subscribe($$self, editingStateStore, (value) => $$invalidate(2, $editingStateStore = value)); const activePinnedCard = ActivePinnedCardStore(view); component_subscribe($$self, activePinnedCard, (value) => $$invalidate(1, $activePinnedCard = value)); const pendingConfirmation = PendingConfirmationStore(view); component_subscribe($$self, pendingConfirmation, (value) => $$invalidate(3, $pendingConfirmation = value)); const styleRules = NodeStylesStore(view); component_subscribe($$self, styleRules, (value) => $$invalidate(5, $styleRules = value)); return [ $pinnedNodesArray, $activePinnedCard, $editingStateStore, $pendingConfirmation, $idSection, $styleRules, pinnedNodesArray, idSection, editingStateStore, activePinnedCard, pendingConfirmation, styleRules ]; } var Pinned_cards_sidebar = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance92, create_fragment95, safe_not_equal, {}, add_css36); } }; var pinned_cards_sidebar_default = Pinned_cards_sidebar; // src/stores/view/derived/recent-nodes.ts var ActiveRecentNodeStore = (view) => derived(view.viewStore, (state2) => state2.recentNodes.activeNode); // src/helpers/remove-duplicates-from-array.ts var removeDuplicatesFromArray = (array, reverse = false) => { const uniqueItems = /* @__PURE__ */ new Set(); const newArray = []; for (let i = array.length - 1; i >= 0; i--) { const item = array[i]; if (!uniqueItems.has(item)) { newArray.push(item); uniqueItems.add(item); } } return reverse ? newArray : newArray.reverse(); }; // src/view/components/container/left-sidebar/components/recent-cards/recent-cards.svelte function add_css37(target) { append_styles(target, "svelte-uest1q", ".recent-cards-container.svelte-uest1q{height:100%;width:100%;display:flex;flex-direction:column;align-items:center;gap:20px;flex:1 1 auto;padding-bottom:10px}"); } function get_each_context13(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[15] = list[i]; return child_ctx; } function create_else_block10(ctx) { let noitems; let current; noitems = new no_items_default({ props: { variant: "recent" } }); return { c() { create_component(noitems.$$.fragment); }, m(target, anchor) { mount_component(noitems, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(noitems.$$.fragment, local); current = true; }, o(local) { transition_out(noitems.$$.fragment, local); current = false; }, d(detaching) { destroy_component(noitems, detaching); } }; } function create_if_block25(ctx) { let each_blocks = []; let each_1_lookup = /* @__PURE__ */ new Map(); let each_1_anchor; let current; let each_value = ensure_array_like( /*recentNodes*/ ctx[0] ); const get_key = (ctx2) => ( /*node*/ ctx2[15] ); for (let i = 0; i < each_value.length; i += 1) { let child_ctx = get_each_context13(ctx, each_value, i); let key = get_key(child_ctx); each_1_lookup.set(key, each_blocks[i] = create_each_block13(key, child_ctx)); } return { c() { for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); }, m(target, anchor) { for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(target, anchor); } } insert(target, each_1_anchor, anchor); current = true; }, p(ctx2, dirty) { if (dirty & /*recentNodes, $activeRecentCard, $editingStateStore, $pendingConfirmation, $idSection, $styleRules*/ 125) { each_value = ensure_array_like( /*recentNodes*/ ctx2[0] ); group_outros(); each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block13, each_1_anchor, get_each_context13); check_outros(); } }, i(local) { if (current) return; for (let i = 0; i < each_value.length; i += 1) { transition_in(each_blocks[i]); } current = true; }, o(local) { for (let i = 0; i < each_blocks.length; i += 1) { transition_out(each_blocks[i]); } current = false; }, d(detaching) { if (detaching) { detach(each_1_anchor); } for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].d(detaching); } } }; } function create_each_block13(key_1, ctx) { let first; let node_1; let current; node_1 = new card_default({ props: { node: ( /*node*/ ctx[15] ), active: ( /*$activeRecentCard*/ ctx[2] === /*node*/ ctx[15] ? "node" /* node */ : "sibling" /* sibling */ ), editing: ( /*$editingStateStore*/ ctx[3].activeNodeId === /*node*/ ctx[15] && /*$editingStateStore*/ ctx[3].isInSidebar === true ), confirmDisableEdit: ( /*$editingStateStore*/ ctx[3].activeNodeId === /*node*/ ctx[15] && /*$pendingConfirmation*/ ctx[4].disableEdit === /*node*/ ctx[15] && /*$editingStateStore*/ ctx[3].isInSidebar === true ), confirmDelete: ( /*$pendingConfirmation*/ ctx[4].deleteNode.has( /*node*/ ctx[15] ) ), isInSidebar: true, firstColumn: true, section: ( /*$idSection*/ ctx[5][ /*node*/ ctx[15] ] ), hasActiveChildren: false, hasChildren: false, selected: false, pinned: false, style: ( /*$styleRules*/ ctx[6].get( /*node*/ ctx[15] ) ), outlineMode: false, collapsed: false, hidden: false, alwaysShowCardButtons: true } }); return { key: key_1, first: null, c() { first = empty(); create_component(node_1.$$.fragment); this.first = first; }, m(target, anchor) { insert(target, first, anchor); mount_component(node_1, target, anchor); current = true; }, p(new_ctx, dirty) { ctx = new_ctx; const node_1_changes = {}; if (dirty & /*recentNodes*/ 1) node_1_changes.node = /*node*/ ctx[15]; if (dirty & /*$activeRecentCard, recentNodes*/ 5) node_1_changes.active = /*$activeRecentCard*/ ctx[2] === /*node*/ ctx[15] ? "node" /* node */ : "sibling" /* sibling */; if (dirty & /*$editingStateStore, recentNodes*/ 9) node_1_changes.editing = /*$editingStateStore*/ ctx[3].activeNodeId === /*node*/ ctx[15] && /*$editingStateStore*/ ctx[3].isInSidebar === true; if (dirty & /*$editingStateStore, recentNodes, $pendingConfirmation*/ 25) node_1_changes.confirmDisableEdit = /*$editingStateStore*/ ctx[3].activeNodeId === /*node*/ ctx[15] && /*$pendingConfirmation*/ ctx[4].disableEdit === /*node*/ ctx[15] && /*$editingStateStore*/ ctx[3].isInSidebar === true; if (dirty & /*$pendingConfirmation, recentNodes*/ 17) node_1_changes.confirmDelete = /*$pendingConfirmation*/ ctx[4].deleteNode.has( /*node*/ ctx[15] ); if (dirty & /*$idSection, recentNodes*/ 33) node_1_changes.section = /*$idSection*/ ctx[5][ /*node*/ ctx[15] ]; if (dirty & /*$styleRules, recentNodes*/ 65) node_1_changes.style = /*$styleRules*/ ctx[6].get( /*node*/ ctx[15] ); node_1.$set(node_1_changes); }, i(local) { if (current) return; transition_in(node_1.$$.fragment, local); current = true; }, o(local) { transition_out(node_1.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(first); } destroy_component(node_1, detaching); } }; } function create_fragment96(ctx) { let div; let current_block_type_index; let if_block; let current; const if_block_creators = [create_if_block25, create_else_block10]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*recentNodes*/ ctx2[0].length > 0 ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { div = element("div"); if_block.c(); attr(div, "class", "recent-cards-container svelte-uest1q"); }, m(target, anchor) { insert(target, div, anchor); if_blocks[current_block_type_index].m(div, null); ctx[12](div); current = true; }, p(ctx2, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index === previous_block_index) { if_blocks[current_block_type_index].p(ctx2, dirty); } else { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { if_block.p(ctx2, dirty); } transition_in(if_block, 1); if_block.m(div, null); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div); } if_blocks[current_block_type_index].d(); ctx[12](null); } }; } var RECENT_NODES_LIMIT = 30; function instance93($$self, $$props, $$invalidate) { let $activeRecentCard; let $editingStateStore; let $pendingConfirmation; let $idSection; let $styleRules; const view = getView(); let recentNodes = []; let containerRef = null; const idSection = IdSectionStore(view); component_subscribe($$self, idSection, (value) => $$invalidate(5, $idSection = value)); const editingStateStore = documentStateStore(view); component_subscribe($$self, editingStateStore, (value) => $$invalidate(3, $editingStateStore = value)); const activeRecentCard = ActiveRecentNodeStore(view); component_subscribe($$self, activeRecentCard, (value) => $$invalidate(2, $activeRecentCard = value)); const pendingConfirmation = PendingConfirmationStore(view); component_subscribe($$self, pendingConfirmation, (value) => $$invalidate(4, $pendingConfirmation = value)); const styleRules = NodeStylesStore(view); component_subscribe($$self, styleRules, (value) => $$invalidate(6, $styleRules = value)); const subscriptions = []; subscriptions.push(ActiveRecentNodeStore(view).subscribe((activeNodeId) => { setTimeout( () => { if (!containerRef) return; if (!activeNodeId) return; scrollCardIntoView(containerRef, activeNodeId); }, 200 ); })); subscriptions.push(navigationHistoryStore(view).subscribe((state2) => { const items = state2.items; if (items.length > RECENT_NODES_LIMIT) { const itemsToRemove = items.length - RECENT_NODES_LIMIT + 1; items.splice(0, itemsToRemove); } $$invalidate(0, recentNodes = removeDuplicatesFromArray(items, true)); })); onDestroy(() => { for (const unsub of subscriptions) { unsub(); } }); function div_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { containerRef = $$value; $$invalidate(1, containerRef); }); } return [ recentNodes, containerRef, $activeRecentCard, $editingStateStore, $pendingConfirmation, $idSection, $styleRules, idSection, editingStateStore, activeRecentCard, pendingConfirmation, styleRules, div_binding ]; } var Recent_cards = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance93, create_fragment96, safe_not_equal, {}, add_css37); } }; var recent_cards_default = Recent_cards; // src/view/components/container/left-sidebar/left-sidebar.svelte function add_css38(target) { append_styles(target, "svelte-11s0o0n", ".sidebar.svelte-11s0o0n{--node-width:calc(var(--sidebar-width) - 40px);flex:0 0 auto;width:var(--animated-sidebar-width);position:relative;overflow:hidden;background-color:rgba(0, 0, 0, 0.2);background-blend-mode:multiply;display:flex;flex-direction:column;padding:10px 0;gap:10px}.width-transition.svelte-11s0o0n{transition:width 0.3s ease}.resizer.svelte-11s0o0n{position:absolute;top:0;height:100%;bottom:0;background-color:transparent;transition:background-color 0.2s;cursor:col-resize;right:0px;width:4px}.resizer.svelte-11s0o0n:hover{background-color:var(--color-accent)}.limit-card-height.svelte-11s0o0n{& .lng-prev {\n max-height: 65vh;\n };& .editor-container {\n max-height: 65vh;\n }}"); } function create_if_block_18(ctx) { let recentcards; let current; recentcards = new recent_cards_default({}); return { c() { create_component(recentcards.$$.fragment); }, m(target, anchor) { mount_component(recentcards, target, anchor); current = true; }, i(local) { if (current) return; transition_in(recentcards.$$.fragment, local); current = true; }, o(local) { transition_out(recentcards.$$.fragment, local); current = false; }, d(detaching) { destroy_component(recentcards, detaching); } }; } function create_if_block26(ctx) { let pinnedcards; let current; pinnedcards = new pinned_cards_sidebar_default({}); return { c() { create_component(pinnedcards.$$.fragment); }, m(target, anchor) { mount_component(pinnedcards, target, anchor); current = true; }, i(local) { if (current) return; transition_in(pinnedcards.$$.fragment, local); current = true; }, o(local) { transition_out(pinnedcards.$$.fragment, local); current = false; }, d(detaching) { destroy_component(pinnedcards, detaching); } }; } function create_fragment97(ctx) { let div1; let tabheader; let t0; let div0; let t1; let current_block_type_index; let if_block; let div1_class_value; let div1_style_value; let current; let mounted; let dispose; tabheader = new tab_header_default({}); const if_block_creators = [create_if_block26, create_if_block_18]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*$activeTab*/ ctx2[4] === "pinned-cards" ) return 0; if ( /*$activeTab*/ ctx2[4] === "recent-cards" ) return 1; return -1; } if (~(current_block_type_index = select_block_type(ctx, -1))) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); } return { c() { div1 = element("div"); create_component(tabheader.$$.fragment); t0 = space(); div0 = element("div"); t1 = space(); if (if_block) if_block.c(); attr(div0, "class", "resizer svelte-11s0o0n"); attr(div1, "class", div1_class_value = null_to_empty("sidebar" + /*isResizing*/ (ctx[2] ? "" : " width-transition") + /*$limitPreviewHeight*/ (ctx[3] ? " limit-card-height" : "")) + " svelte-11s0o0n"); attr(div1, "style", div1_style_value = "--animated-sidebar-width: " + /*animatedSidebarWidth*/ ctx[0] + "px; --sidebar-width: " + /*sidebarWidth*/ ctx[1] + "px; }"); }, m(target, anchor) { insert(target, div1, anchor); mount_component(tabheader, div1, null); append(div1, t0); append(div1, div0); append(div1, t1); if (~current_block_type_index) { if_blocks[current_block_type_index].m(div1, null); } current = true; if (!mounted) { dispose = listen( div0, "mousedown", /*onStartResize*/ ctx[6] ); mounted = true; } }, p(ctx2, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index !== previous_block_index) { if (if_block) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); } if (~current_block_type_index) { if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { } transition_in(if_block, 1); if_block.m(div1, null); } else { if_block = null; } } if (!current || dirty & /*isResizing, $limitPreviewHeight*/ 12 && div1_class_value !== (div1_class_value = null_to_empty("sidebar" + /*isResizing*/ (ctx2[2] ? "" : " width-transition") + /*$limitPreviewHeight*/ (ctx2[3] ? " limit-card-height" : "")) + " svelte-11s0o0n")) { attr(div1, "class", div1_class_value); } if (!current || dirty & /*animatedSidebarWidth, sidebarWidth*/ 3 && div1_style_value !== (div1_style_value = "--animated-sidebar-width: " + /*animatedSidebarWidth*/ ctx2[0] + "px; --sidebar-width: " + /*sidebarWidth*/ ctx2[1] + "px; }")) { attr(div1, "style", div1_style_value); } }, i(local) { if (current) return; transition_in(tabheader.$$.fragment, local); transition_in(if_block); current = true; }, o(local) { transition_out(tabheader.$$.fragment, local); transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(tabheader); if (~current_block_type_index) { if_blocks[current_block_type_index].d(); } mounted = false; dispose(); } }; } var MIN_WIDTH2 = 250; function instance94($$self, $$props, $$invalidate) { let $limitPreviewHeight; let $activeTab; let animatedSidebarWidth = 0; let sidebarWidth = MIN_WIDTH2; let isResizing = false; let startX = 0; const view = getView(); const limitPreviewHeight = limitPreviewHeightStore(view); component_subscribe($$self, limitPreviewHeight, (value) => $$invalidate(3, $limitPreviewHeight = value)); const showSidebarStore = ShowLeftSidebarStore(view); const unsub = showSidebarStore.subscribe((show) => { if (show) { $$invalidate(0, animatedSidebarWidth = view.plugin.settings.getValue().view.leftSidebarWidth); $$invalidate(1, sidebarWidth = animatedSidebarWidth); } else { $$invalidate(0, animatedSidebarWidth = 0); } }); onDestroy(() => { unsub(); }); const onStartResize = (event) => { $$invalidate(2, isResizing = true); startX = event.clientX; view.contentEl.addEventListener("mousemove", onResize); view.contentEl.addEventListener("mouseup", onStopResize); }; const onResize = (event) => { if (!isResizing) return; const dx = event.clientX - startX; $$invalidate(0, animatedSidebarWidth += dx); startX = event.clientX; if (animatedSidebarWidth > MIN_WIDTH2) { $$invalidate(1, sidebarWidth = animatedSidebarWidth); } }; const onStopResize = () => { $$invalidate(2, isResizing = false); view.contentEl.removeEventListener("mousemove", onResize); view.contentEl.removeEventListener("mouseup", onStopResize); if (animatedSidebarWidth < MIN_WIDTH2) { $$invalidate(0, animatedSidebarWidth = MIN_WIDTH2); } $$invalidate(1, sidebarWidth = animatedSidebarWidth); view.plugin.settings.dispatch({ type: "view/left-sidebar/set-width", payload: { width: animatedSidebarWidth } }); }; const activeTab = LeftSidebarActiveTabStore(view); component_subscribe($$self, activeTab, (value) => $$invalidate(4, $activeTab = value)); return [ animatedSidebarWidth, sidebarWidth, isResizing, $limitPreviewHeight, $activeTab, limitPreviewHeight, onStartResize, activeTab ]; } var Left_sidebar = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance94, create_fragment97, safe_not_equal, {}, add_css38); } }; var left_sidebar_default = Left_sidebar; // src/view/actions/context-menu/context-menu.ts var import_obsidian29 = require("obsidian"); // src/view/actions/context-menu/helpers/on-long-press.ts var onLongPress = (element2, callback, preventDefaultPredicate) => { const state2 = { timer: null, longPress: false }; const onTouchEnd = (e) => { if (state2.longPress) { state2.longPress = false; if (preventDefaultPredicate(e)) { e.stopPropagation(); e.preventDefault(); } } if (state2.timer) clearTimeout(state2.timer); }; const onTouchStart = (e) => { if (state2.timer) clearTimeout(state2.timer); state2.timer = setTimeout(() => { state2.longPress = true; callback(e); }, 500); }; element2.addEventListener("touchstart", onTouchStart); element2.addEventListener("touchend", onTouchEnd); element2.addEventListener("touchmove", onTouchEnd); return () => { element2.removeEventListener("touchstart", onTouchStart); element2.removeEventListener("touchend", onTouchEnd); element2.removeEventListener("touchmove", onTouchEnd); }; }; // src/obsidian/events/workspace/effects/create-new-file.ts var import_obsidian23 = require("obsidian"); // src/helpers/sanitize-file-name.ts var sanitizeFileName = (path, replacement = "-") => { const illegalCharacters = /[*"\\/<>:|?]/g; const unsafeCharactersForObsidianLinks = /[#^[\]|]/g; const dotAtTheStart = /^\./g; const controlRe = /[\x00-\x1f\x80-\x9f]/g; const reservedRe = /^\.+$/; const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i; const windowsTrailingRe = /[. ]+$/; let sanitized = path.replace(/"/g, "'").replace(illegalCharacters, replacement).replace(unsafeCharactersForObsidianLinks, replacement).replace(dotAtTheStart, replacement).replace(controlRe, replacement).replace(reservedRe, replacement).replace(windowsReservedRe, replacement).replace(windowsTrailingRe, replacement); if (replacement) sanitized = sanitized.replace(new RegExp(`${replacement}+`, "g"), replacement).replace( new RegExp(`^${replacement}(.)|(.)${replacement}$`, "g"), "$1$2" ); return sanitized.trim(); }; // src/obsidian/events/workspace/effects/get-unique-file-name.ts var getUniqueFileName = (folderPath, files, basename) => { basename = sanitizeFileName(basename); let index = 1; let newFileName = basename; while (files.includes(`${newFileName}`)) { newFileName = `${basename} (${index})`; index++; } return `${folderPath}/${newFileName}`; }; // src/obsidian/events/workspace/effects/create-new-file.ts var createNewFile = async (plugin, folder, data = "", basename = "Untitled") => { invariant(folder); const children2 = folder.children.map( (c) => c instanceof import_obsidian23.TFile && c.extension === "md" ? c.basename : null ).filter((f) => f); const path = getUniqueFileName(folder.path, children2, basename); const newFilePath = path + ".md"; const file = await plugin.app.vault.create(newFilePath, data); invariant(file); return file; }; // src/obsidian/events/workspace/effects/open-file.ts var openFile = async (plugin, file, newLeaf) => { const leaf = plugin.app.workspace.getLeaf(newLeaf); await leaf.openFile(file); return leaf; }; // src/obsidian/events/workspace/effects/toggle-obsidian-view-type.ts var toggleObsidianViewType = (plugin, leaf, type) => { setTimeout(() => { leaf.setViewState({ type, popstate: true, state: leaf.view.getState() }); const activeLeaf = plugin.app.workspace.getLeaf(); if (activeLeaf !== leaf) { plugin.app.workspace.revealLeaf(leaf); } plugin.app.workspace.setActiveLeaf(leaf); }, 0); }; // src/obsidian/events/workspace/actions/set-document-format.ts var setDocumentFormat = (plugin, path, type) => { plugin.settings.dispatch({ type: "SET_DOCUMENT_TYPE", payload: { path, format: type } }); }; // src/obsidian/events/workspace/effects/open-file-in-lineage.ts var openFileInLineage = async (plugin, file, type, newLeaf) => { const leaf = await openFile(plugin, file, newLeaf); toggleObsidianViewType(plugin, leaf, "lineage"); setDocumentFormat(plugin, file.path, type); }; // src/obsidian/commands/helpers/extract-branch/helpers/get-file-name-of-extracted-branch/get-file-name-from-content.ts var getFileNameFromContent = (text2) => { const lines = text2.split("\n").map((line) => line.trim().replace(/\s+/g, " ")).filter((line) => line); if (lines.length === 0) return; let result = void 0; const headingLine = lines.find((line) => /^(#+)\s(.+)/.test(line)); if (headingLine) { const headingMatch = headingLine.match(/^(#+)\s(.+)/); result = headingMatch[2]; } else if (lines[0].startsWith("- ")) { result = lines[0].replace(/^- /, ""); } else { result = lines.join(" "); } return result.substring(0, 100).trim(); }; // src/obsidian/commands/helpers/extract-branch/helpers/get-file-name-of-extracted-branch/get-file-name-of-extracted-branch.ts var getFileNameOfExtractedBranch = (nodeContent, currentFileName, sectionNumber) => { const name = getFileNameFromContent(nodeContent); if (name) return name; return `${currentFileName.trim()} - ${sectionNumber}`; }; // src/obsidian/commands/helpers/extract-branch/extract-branch.ts var extractBranch = async (view) => { try { invariant(view.file); invariant(view.file.parent); const viewState = view.viewStore.getValue(); const isEditing2 = Boolean(viewState.document.editing.activeNodeId); if (isEditing2) { saveNodeContent(view); setTimeout(() => { extractBranch(view); }, 100); return; } const documentState = view.documentStore.getValue(); const branch = getBranch( documentState.document.columns, documentState.document.content, viewState.document.activeNode, "copy" ); const format2 = getDocumentFormat(view); const text2 = format2 === "outline" ? branchToOutline([branch]) : format2 === "html-element" ? branchToHtmlElement([branch]) : branchToHtmlComment([branch]); const fileName = getFileNameOfExtractedBranch( branch.content[branch.nodeId].content, view.file.basename, documentState.sections.id_section[branch.nodeId] ); const newFile = await createNewFile( view.plugin, view.file.parent, text2, fileName ); await openFileInLineage(view.plugin, newFile, format2, "split"); view.documentStore.dispatch({ type: "DOCUMENT/EXTRACT_BRANCH", payload: { nodeId: branch.nodeId, documentName: newFile.basename } }); } catch (e) { onPluginError(e, "command", { type: "extract-branch" }); } }; // src/view/modals/split-node-modal/split-node-modal.ts var import_obsidian24 = require("obsidian"); // src/view/modals/split-node-modal/helpers/get-modal-state.ts var getModalState = () => { return getContext("modal-state"); }; // src/view/modals/split-node-modal/components/components/content-preview.svelte function add_css39(target) { append_styles(target, "svelte-20u69o", ".preview.svelte-20u69o{flex-grow:1;max-height:500px;overflow:auto}"); } function create_if_block27(ctx) { let p; return { c() { p = element("p"); p.textContent = "This card's content does not match any splitting pattern"; attr(p, "class", "mod-warning"); }, m(target, anchor) { insert(target, p, anchor); }, d(detaching) { if (detaching) { detach(p); } } }; } function create_fragment98(ctx) { let div0; let t; let div1; let if_block = !/*$mode*/ ctx[0] && create_if_block27(ctx); return { c() { div0 = element("div"); if (if_block) if_block.c(); t = space(); div1 = element("div"); attr(div1, "class", "preview svelte-20u69o"); }, m(target, anchor) { insert(target, div0, anchor); if (if_block) if_block.m(div0, null); insert(target, t, anchor); insert(target, div1, anchor); div1.innerHTML = /*$content*/ ctx[1]; }, p(ctx2, [dirty]) { if (!/*$mode*/ ctx2[0]) { if (if_block) { } else { if_block = create_if_block27(ctx2); if_block.c(); if_block.m(div0, null); } } else if (if_block) { if_block.d(1); if_block = null; } if (dirty & /*$content*/ 2) div1.innerHTML = /*$content*/ ctx2[1]; ; }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div0); detach(t); detach(div1); } if (if_block) if_block.d(); } }; } function instance95($$self, $$props, $$invalidate) { let $mode; let $content; const state2 = getModalState(); const mode = state2.mode; component_subscribe($$self, mode, (value) => $$invalidate(0, $mode = value)); const content = state2.content; component_subscribe($$self, content, (value) => $$invalidate(1, $content = value)); return [$mode, $content, mode, content]; } var Content_preview = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance95, create_fragment98, safe_not_equal, {}, add_css39); } }; var content_preview_default = Content_preview; // src/view/modals/split-node-modal/helpers/get-modal-props.ts var getModalProps = () => { return getContext("modal-props"); }; // src/view/modals/split-node-modal/components/components/modal-buttons.svelte function add_css40(target) { append_styles(target, "svelte-6fani8", ".split-content-footer.svelte-6fani8{display:flex;align-items:center;justify-content:space-between}.modes-container.svelte-6fani8{height:50px;display:flex;align-items:center}.buttons-container.svelte-6fani8{display:flex;gap:5px;width:fit-content}label.svelte-6fani8{display:block;text-transform:capitalize}label[data-disabled='true'].svelte-6fani8{opacity:0.6}"); } function get_each_context14(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[10] = list[i]; return child_ctx; } function create_each_block14(ctx) { let label; let input; let input_checked_value; let input_disabled_value; let input_value_value; let t0; let t1_value = ( /*_mode*/ ctx[10] + "" ); let t1; let t2; let label_data_disabled_value; let mounted; let dispose; return { c() { label = element("label"); input = element("input"); t0 = space(); t1 = text(t1_value); t2 = space(); input.checked = input_checked_value = /*$mode*/ ctx[0] === /*_mode*/ ctx[10]; input.disabled = input_disabled_value = /*disabledModes*/ ctx[4].has( /*_mode*/ ctx[10] ); attr(input, "name", "mode"); attr(input, "type", "radio"); input.value = input_value_value = /*_mode*/ ctx[10]; attr(input, "tabindex", "0"); attr(label, "data-disabled", label_data_disabled_value = /*disabledModes*/ ctx[4].has( /*_mode*/ ctx[10] )); attr(label, "class", "svelte-6fani8"); }, m(target, anchor) { insert(target, label, anchor); append(label, input); append(label, t0); append(label, t1); append(label, t2); if (!mounted) { dispose = listen( input, "change", /*change_handler*/ ctx[6] ); mounted = true; } }, p(ctx2, dirty) { if (dirty & /*$mode*/ 1 && input_checked_value !== (input_checked_value = /*$mode*/ ctx2[0] === /*_mode*/ ctx2[10])) { input.checked = input_checked_value; } }, d(detaching) { if (detaching) { detach(label); } mounted = false; dispose(); } }; } function create_fragment99(ctx) { let div2; let div0; let t0; let div1; let button0; let t1; let button0_disabled_value; let t2; let button1; let mounted; let dispose; let each_value = ensure_array_like( /*modes*/ ctx[5] ); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block14(get_each_context14(ctx, each_value, i)); } return { c() { div2 = element("div"); div0 = element("div"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } t0 = space(); div1 = element("div"); button0 = element("button"); t1 = text("Split"); t2 = space(); button1 = element("button"); button1.textContent = "Cancel"; attr(div0, "class", "modes-container svelte-6fani8"); attr(div0, "tabindex", "0"); attr(button0, "class", "mod-cta"); button0.disabled = button0_disabled_value = !/*$mode*/ ctx[0]; attr(div1, "class", "buttons-container svelte-6fani8"); attr(div2, "class", "split-content-footer svelte-6fani8"); attr(div2, "tabindex", "0"); }, m(target, anchor) { insert(target, div2, anchor); append(div2, div0); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(div0, null); } } append(div2, t0); append(div2, div1); append(div1, button0); append(button0, t1); append(div1, t2); append(div1, button1); if (!mounted) { dispose = [ listen( button0, "click", /*click_handler*/ ctx[7] ), listen( button1, "click", /*click_handler_1*/ ctx[8] ) ]; mounted = true; } }, p(ctx2, [dirty]) { if (dirty & /*disabledModes, modes, $mode, onModeChange*/ 53) { each_value = ensure_array_like( /*modes*/ ctx2[5] ); let i; for (i = 0; i < each_value.length; i += 1) { const child_ctx = get_each_context14(ctx2, each_value, i); if (each_blocks[i]) { each_blocks[i].p(child_ctx, dirty); } else { each_blocks[i] = create_each_block14(child_ctx); each_blocks[i].c(); each_blocks[i].m(div0, null); } } for (; i < each_blocks.length; i += 1) { each_blocks[i].d(1); } each_blocks.length = each_value.length; } if (dirty & /*$mode*/ 1 && button0_disabled_value !== (button0_disabled_value = !/*$mode*/ ctx2[0])) { button0.disabled = button0_disabled_value; } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div2); } destroy_each(each_blocks, detaching); mounted = false; run_all(dispose); } }; } function instance96($$self, $$props, $$invalidate) { let $mode; const state2 = getModalState(); const props = getModalProps(); const onModeChange = (value) => { state2.mode.set(value); }; const mode = state2.mode; component_subscribe($$self, mode, (value) => $$invalidate(0, $mode = value)); const disabledModes = state2.disabledModes; const modes = ["headings", "outline", "blocks"]; const change_handler = (e) => onModeChange(e.currentTarget.value); const click_handler = () => props.callbacks.accept(); const click_handler_1 = () => props.callbacks.reject(); return [ $mode, props, onModeChange, mode, disabledModes, modes, change_handler, click_handler, click_handler_1 ]; } var Modal_buttons = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance96, create_fragment99, safe_not_equal, {}, add_css40); } }; var modal_buttons_default = Modal_buttons; // src/view/modals/split-node-modal/components/modal-content.svelte function add_css41(target) { append_styles(target, "svelte-1axt1o3", ".split-content-modal.svelte-1axt1o3{display:flex;flex-direction:column}"); } function create_fragment100(ctx) { let div; let content; let t; let buttons; let current; content = new content_preview_default({}); buttons = new modal_buttons_default({}); return { c() { div = element("div"); create_component(content.$$.fragment); t = space(); create_component(buttons.$$.fragment); attr(div, "class", "split-content-modal svelte-1axt1o3"); }, m(target, anchor) { insert(target, div, anchor); mount_component(content, div, null); append(div, t); mount_component(buttons, div, null); current = true; }, p: noop, i(local) { if (current) return; transition_in(content.$$.fragment, local); transition_in(buttons.$$.fragment, local); current = true; }, o(local) { transition_out(content.$$.fragment, local); transition_out(buttons.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div); } destroy_component(content); destroy_component(buttons); } }; } function instance97($$self, $$props, $$invalidate) { let { state: state2 } = $$props; let { props } = $$props; setContext("modal-state", state2); setContext("modal-props", props); $$self.$$set = ($$props2) => { if ("state" in $$props2) $$invalidate(0, state2 = $$props2.state); if ("props" in $$props2) $$invalidate(1, props = $$props2.props); }; return [state2, props]; } var Modal_content = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance97, create_fragment100, safe_not_equal, { state: 0, props: 1 }, add_css41); } }; var modal_content_default = Modal_content; // src/lib/format-detection/has-n-headings.ts var hasNHeadings = (input, n = 2) => { const lines = input.split("\n"); let count = 0; for (const line of lines) { if (/^((\t*)- )?#+ +/.test(line)) { count++; if (count >= n) return true; } } return false; }; // src/lib/format-detection/is-outline.ts var isOutline = (text2) => { const lines = text2.split("\n").filter((x) => x.trim()); if (lines.length <= 1) return false; let level2 = 0; for (const line of lines) { if (!line) continue; const match = line.match(/^(\t*)- (.*)/); if (match) { const itemLevel = match[1].length + 1; if (itemLevel - level2 > 1) { return false; } level2 = itemLevel; } else { const match2 = line.match(/^(\t*) {2}/); if (match2) { const itemLevel = (match2[1] ? match2[1].length : 0) + 1; if (itemLevel !== level2) { return false; } } else { return false; } } } return true; }; // node_modules/diff/lib/index.mjs function Diff() { } Diff.prototype = { diff: function diff(oldString, newString) { var _options$timeout; var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; var callback = options.callback; if (typeof options === "function") { callback = options; options = {}; } this.options = options; var self = this; function done(value) { if (callback) { setTimeout(function() { callback(void 0, value); }, 0); return true; } else { return value; } } oldString = this.castInput(oldString); newString = this.castInput(newString); oldString = this.removeEmpty(this.tokenize(oldString)); newString = this.removeEmpty(this.tokenize(newString)); var newLen = newString.length, oldLen = oldString.length; var editLength = 1; var maxEditLength = newLen + oldLen; if (options.maxEditLength) { maxEditLength = Math.min(maxEditLength, options.maxEditLength); } var maxExecutionTime = (_options$timeout = options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity; var abortAfterTimestamp = Date.now() + maxExecutionTime; var bestPath = [{ oldPos: -1, lastComponent: void 0 }]; var newPos = this.extractCommon(bestPath[0], newString, oldString, 0); if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) { return done([{ value: this.join(newString), count: newString.length }]); } var minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity; function execEditLength() { for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) { var basePath = void 0; var removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1]; if (removePath) { bestPath[diagonalPath - 1] = void 0; } var canAdd = false; if (addPath) { var addPathNewPos = addPath.oldPos - diagonalPath; canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen; } var canRemove = removePath && removePath.oldPos + 1 < oldLen; if (!canAdd && !canRemove) { bestPath[diagonalPath] = void 0; continue; } if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) { basePath = self.addToPath(addPath, true, void 0, 0); } else { basePath = self.addToPath(removePath, void 0, true, 1); } newPos = self.extractCommon(basePath, newString, oldString, diagonalPath); if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) { return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken)); } else { bestPath[diagonalPath] = basePath; if (basePath.oldPos + 1 >= oldLen) { maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1); } if (newPos + 1 >= newLen) { minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1); } } } editLength++; } if (callback) { (function exec() { setTimeout(function() { if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) { return callback(); } if (!execEditLength()) { exec(); } }, 0); })(); } else { while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) { var ret = execEditLength(); if (ret) { return ret; } } } }, addToPath: function addToPath(path, added, removed, oldPosInc) { var last = path.lastComponent; if (last && last.added === added && last.removed === removed) { return { oldPos: path.oldPos + oldPosInc, lastComponent: { count: last.count + 1, added, removed, previousComponent: last.previousComponent } }; } else { return { oldPos: path.oldPos + oldPosInc, lastComponent: { count: 1, added, removed, previousComponent: last } }; } }, extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) { var newLen = newString.length, oldLen = oldString.length, oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0; while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) { newPos++; oldPos++; commonCount++; } if (commonCount) { basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent }; } basePath.oldPos = oldPos; return newPos; }, equals: function equals(left, right) { if (this.options.comparator) { return this.options.comparator(left, right); } else { return left === right || this.options.ignoreCase && left.toLowerCase() === right.toLowerCase(); } }, removeEmpty: function removeEmpty(array) { var ret = []; for (var i = 0; i < array.length; i++) { if (array[i]) { ret.push(array[i]); } } return ret; }, castInput: function castInput(value) { return value; }, tokenize: function tokenize(value) { return value.split(""); }, join: function join(chars) { return chars.join(""); } }; function buildValues(diff2, lastComponent, newString, oldString, useLongestToken) { var components = []; var nextComponent; while (lastComponent) { components.push(lastComponent); nextComponent = lastComponent.previousComponent; delete lastComponent.previousComponent; lastComponent = nextComponent; } components.reverse(); var componentPos = 0, componentLen = components.length, newPos = 0, oldPos = 0; for (; componentPos < componentLen; componentPos++) { var component = components[componentPos]; if (!component.removed) { if (!component.added && useLongestToken) { var value = newString.slice(newPos, newPos + component.count); value = value.map(function(value2, i) { var oldValue = oldString[oldPos + i]; return oldValue.length > value2.length ? oldValue : value2; }); component.value = diff2.join(value); } else { component.value = diff2.join(newString.slice(newPos, newPos + component.count)); } newPos += component.count; if (!component.added) { oldPos += component.count; } } else { component.value = diff2.join(oldString.slice(oldPos, oldPos + component.count)); oldPos += component.count; if (componentPos && components[componentPos - 1].added) { var tmp = components[componentPos - 1]; components[componentPos - 1] = components[componentPos]; components[componentPos] = tmp; } } } var finalComponent = components[componentLen - 1]; if (componentLen > 1 && typeof finalComponent.value === "string" && (finalComponent.added || finalComponent.removed) && diff2.equals("", finalComponent.value)) { components[componentLen - 2].value += finalComponent.value; components.pop(); } return components; } var characterDiff = new Diff(); function generateOptions(options, defaults) { if (typeof options === "function") { defaults.callback = options; } else if (options) { for (var name in options) { if (options.hasOwnProperty(name)) { defaults[name] = options[name]; } } } return defaults; } var extendedWordChars = /^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/; var reWhitespace = /\S/; var wordDiff = new Diff(); wordDiff.equals = function(left, right) { if (this.options.ignoreCase) { left = left.toLowerCase(); right = right.toLowerCase(); } return left === right || this.options.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right); }; wordDiff.tokenize = function(value) { var tokens = value.split(/([^\S\r\n]+|[()[\]{}'"\r\n]|\b)/); for (var i = 0; i < tokens.length - 1; i++) { if (!tokens[i + 1] && tokens[i + 2] && extendedWordChars.test(tokens[i]) && extendedWordChars.test(tokens[i + 2])) { tokens[i] += tokens[i + 2]; tokens.splice(i + 1, 2); i--; } } return tokens; }; function diffWords(oldStr, newStr, options) { options = generateOptions(options, { ignoreWhitespace: true }); return wordDiff.diff(oldStr, newStr, options); } var lineDiff = new Diff(); lineDiff.tokenize = function(value) { if (this.options.stripTrailingCr) { value = value.replace(/\r\n/g, "\n"); } var retLines = [], linesAndNewlines = value.split(/(\n|\r\n)/); if (!linesAndNewlines[linesAndNewlines.length - 1]) { linesAndNewlines.pop(); } for (var i = 0; i < linesAndNewlines.length; i++) { var line = linesAndNewlines[i]; if (i % 2 && !this.options.newlineIsToken) { retLines[retLines.length - 1] += line; } else { if (this.options.ignoreWhitespace) { line = line.trim(); } retLines.push(line); } } return retLines; }; var sentenceDiff = new Diff(); sentenceDiff.tokenize = function(value) { return value.split(/(\S.+?[.!?])(?=\s+|$)/); }; var cssDiff = new Diff(); cssDiff.tokenize = function(value) { return value.split(/([{}:;,]|\s+)/); }; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function(obj2) { return typeof obj2; }; } else { _typeof = function(obj2) { return obj2 && typeof Symbol === "function" && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; }; } return _typeof(obj); } var objectPrototypeToString = Object.prototype.toString; var jsonDiff = new Diff(); jsonDiff.useLongestToken = true; jsonDiff.tokenize = lineDiff.tokenize; jsonDiff.castInput = function(value) { var _this$options = this.options, undefinedReplacement = _this$options.undefinedReplacement, _this$options$stringi = _this$options.stringifyReplacer, stringifyReplacer = _this$options$stringi === void 0 ? function(k, v) { return typeof v === "undefined" ? undefinedReplacement : v; } : _this$options$stringi; return typeof value === "string" ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), stringifyReplacer, " "); }; jsonDiff.equals = function(left, right) { return Diff.prototype.equals.call(jsonDiff, left.replace(/,([\r\n])/g, "$1"), right.replace(/,([\r\n])/g, "$1")); }; function canonicalize(obj, stack, replacementStack, replacer, key) { stack = stack || []; replacementStack = replacementStack || []; if (replacer) { obj = replacer(key, obj); } var i; for (i = 0; i < stack.length; i += 1) { if (stack[i] === obj) { return replacementStack[i]; } } var canonicalizedObj; if ("[object Array]" === objectPrototypeToString.call(obj)) { stack.push(obj); canonicalizedObj = new Array(obj.length); replacementStack.push(canonicalizedObj); for (i = 0; i < obj.length; i += 1) { canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, key); } stack.pop(); replacementStack.pop(); return canonicalizedObj; } if (obj && obj.toJSON) { obj = obj.toJSON(); } if (_typeof(obj) === "object" && obj !== null) { stack.push(obj); canonicalizedObj = {}; replacementStack.push(canonicalizedObj); var sortedKeys = [], _key; for (_key in obj) { if (obj.hasOwnProperty(_key)) { sortedKeys.push(_key); } } sortedKeys.sort(); for (i = 0; i < sortedKeys.length; i += 1) { _key = sortedKeys[i]; canonicalizedObj[_key] = canonicalize(obj[_key], stack, replacementStack, replacer, _key); } stack.pop(); replacementStack.pop(); } else { canonicalizedObj = obj; } return canonicalizedObj; } var arrayDiff = new Diff(); arrayDiff.tokenize = function(value) { return value.slice(); }; arrayDiff.join = arrayDiff.removeEmpty = function(value) { return value; }; // src/lib/data-conversion/x-to-json/outline-to-json.ts var addNewNode = (state2, level2, text2, root = 1) => { state2.currentNode = { content: text2, children: [] }; for (const key of Object.keys(state2.currentParents)) { const parentLevel = +key; if (parentLevel >= level2) { delete state2.currentParents[key]; } } if (level2 === root) { state2.tree.push(state2.currentNode); } state2.currentParents[level2] = state2.currentNode; const parent = state2.currentParents[level2 - 1]; if (parent) { parent.children.push(state2.currentNode); } else if (level2 > root) throw new Error(`Item [${text2}] does not have a parent`); }; var updateCurrentNode = (state2, text2) => { if (state2.currentNode) { if (state2.currentNode.content) state2.currentNode.content += "\n"; state2.currentNode.content += text2; } else if (text2.trim()) { state2.currentNode = { content: text2, children: [] }; state2.tree.push(state2.currentNode); } }; var outlineToJson = (input) => { const lines = input.split("\n"); const state2 = { currentParents: {}, currentNode: null, tree: [] }; for (const line of lines) { if (parseHtmlCommentMarker(line)) throw new Error("Outline has a section annotation"); const outlineMatch = line.match(/^(\t*)- (.*)/); if (outlineMatch) { const level2 = outlineMatch[1].length + 1; addNewNode(state2, level2, outlineMatch[2]); } else { updateCurrentNode(state2, line.replace(/^\t* {2}|/g, "")); } } return state2.tree; }; // src/lib/data-conversion/helpers/find-highest-heading-level.ts var findHighestHeadingLevel = (lines) => { let isInCodeBlock = false; return lines.reduce((acc, val) => { if (val.startsWith("```")) { isInCodeBlock = !isInCodeBlock; } if (isInCodeBlock) return acc; const match = val.match(/^(#+) +(.*)$/); if (match) { const level2 = match[1].length; if (level2 < acc) acc = level2; } return acc; }, 6); }; // src/lib/data-conversion/x-to-json/headings-to-json.ts var headingsToJson = (input) => { const lines = input.split("\n"); const highestHeadingLevel = findHighestHeadingLevel(lines); const state2 = { currentParents: {}, currentNode: null, tree: [], isInCodeBlock: false }; for (const line of lines) { if (parseHtmlCommentMarker(line)) throw new Error("input has a section"); if (line.startsWith("```")) { state2.isInCodeBlock = !state2.isInCodeBlock; } const match = state2.isInCodeBlock ? null : line.match(/^(#+) (.+)/); if (match) { const level2 = match[1].length; addNewNode(state2, level2, line, highestHeadingLevel); } else { updateCurrentNode(state2, line); } } return state2.tree; }; // src/lib/data-conversion/helpers/correct-headings.ts var correctHeadings = (markdown) => { const lines = markdown.split("\n"); const headingRegex = /^(#+) +(.*)$/; const highestHeadingLevel = findHighestHeadingLevel(lines); const state2 = { previousLevel: 0, previousCorrectedLevel: 0, previousLevels: [], isInCodeBlock: false }; const updatedLines = []; for (const line of lines) { if (line.startsWith("```")) { state2.isInCodeBlock = !state2.isInCodeBlock; } const match = state2.isInCodeBlock ? null : line.match(headingRegex); let updatedLine = null; if (match) { const level2 = match[1].length; const text2 = match[2]; let correctedLevel; const parentIndex = state2.previousLevels.findLastIndex( (l) => l.level < level2 ); const parent = state2.previousLevels[parentIndex]; if (!parent) { correctedLevel = highestHeadingLevel; } else if (level2 > state2.previousLevel) { correctedLevel = state2.previousCorrectedLevel + 1; } else if (level2 < state2.previousLevel) { correctedLevel = Math.min( highestHeadingLevel, level2, state2.previousCorrectedLevel - 1 ); if (parent) { if (correctedLevel <= parent.level && level2 > parent.level) { correctedLevel = parent.correctedLevel + 1; } } } else if (level2 === state2.previousLevel) { correctedLevel = state2.previousCorrectedLevel; } else { correctedLevel = level2; } updatedLine = `${"#".repeat(correctedLevel)} ${text2}`; state2.previousLevel = level2; state2.previousCorrectedLevel = correctedLevel; state2.previousLevels.push({ level: level2, correctedLevel }); } if (updatedLine) updatedLines.push(updatedLine); else updatedLines.push(line); } return updatedLines.join("\n"); }; // src/lib/data-conversion/x-to-html-comment/headings-to-html-comment.ts var headingsToHtmlComment = (input) => { const tree = headingsToJson(correctHeadings(input)); if (tree.length === 1 && tree[0].children.length === 0) return input; return jsonToHtmlComment(tree); }; // src/lib/data-conversion/x-to-html-comment/paragraphs-to-html-comment.ts var splitByParagraph = (text2) => { const codeBlockRegex = /```[\s\S]*?```/g; const codeBlocks = []; const textWithPlaceholders = text2.replace(codeBlockRegex, (match) => { codeBlocks.push(match); return `__CODE_BLOCK_${codeBlocks.length - 1}__`; }); const paragraphs = textWithPlaceholders.split(/\n\s*\n/).map((paragraph) => { return paragraph.replace( /__CODE_BLOCK_(\d+)__/g, (_, index) => codeBlocks[+index] ); }); return paragraphs; }; var paragraphsToHtmlComment = (input) => { const paragraphs = splitByParagraph(input); if (paragraphs.length === 1) return input; const tree = paragraphs.map((p) => ({ content: p, children: [] })); return jsonToHtmlComment(tree); }; // src/lib/data-conversion/x-to-html-comment/outline-to-html-comment.ts var outlineToHtmlComment = (input) => { const tree = outlineToJson(input); if (tree.length === 1 && tree[0].children.length === 0) return input; return jsonToHtmlComment(tree); }; // src/stores/document/reducers/split-node/helpers/split-text.ts var splitText = (text2, mode) => { if (mode === "headings") { return headingsToHtmlComment(text2); } else if (mode === "blocks") { return paragraphsToHtmlComment(text2); } else { return outlineToHtmlComment(text2); } }; // src/view/modals/split-node-modal/helpers/map-content.ts var escapeHtmlComment = (text2) => { return text2.replace(//g, ">"); }; var makeTabsVisible = (text2) => { return text2.replace(/\t/g, "    "); }; var makeNewlinesVisible = (text2) => { return text2.replace(/\n/g, "
"); }; var mapContent = (text2, mode) => { let newContent = text2; if (mode) { try { newContent = splitText(text2, mode); } catch (e) { onPluginError(e, "command", { text: text2, mode }); } } const differences = diffWords(text2, newContent); return differences.map((part) => { const style = part.added ? "color:green; background-color:lightgreen" : part.removed ? "color:red; background-color:#ffdddd" : "color: grey"; const escapedComments = escapeHtmlComment(part.value); const visibleTabs = makeTabsVisible(escapedComments); const value = makeNewlinesVisible(visibleTabs); return `${value}`; }).join(""); }; // src/lib/format-detection/has-n-paragraph.ts var hasNParagraph = (text2, n = 2) => splitByParagraph(text2).length >= n; // src/view/modals/split-node-modal/split-node-modal.ts var SplitNodeModal = class extends import_obsidian24.Modal { constructor(props) { super(props.plugin.app); this.props = props; this.subscriptions = /* @__PURE__ */ new Set(); this.open = () => { this.setTitle("Choose how to split this card"); this.initState(); new modal_content_default({ target: this.contentEl, props: { state: this.state, props: this.props } }); const promise = new Promise((resolve) => { this.resolve = resolve; }); super.open(); return promise; }; this.close = () => { this.resolve(void 0); super.close(); for (const unsub of this.subscriptions) { unsub(); } }; this.initState = () => { const content = this.props.nodeContent; this.state = { content: writable(content), mode: writable(null), disabledModes: /* @__PURE__ */ new Set() }; const hasHeadings = hasNHeadings(content); const _isOutline = isOutline(content); const hasParagraphs = hasNParagraph(content); if (!hasHeadings) { this.state.disabledModes.add("headings"); } if (!_isOutline) { this.state.disabledModes.add("outline"); } if (!hasParagraphs) { this.state.disabledModes.add("blocks"); } if (hasHeadings) { this.state.mode.set("headings"); } else if (_isOutline) { this.state.mode.set("outline"); } else if (hasParagraphs) { this.state.mode.set("blocks"); } const unsubFromMod = this.state.mode.subscribe((mode) => { if (mode) this.state.content.set(mapContent(content, mode)); }); this.state.content.set(mapContent(content, get_store_value(this.state.mode))); this.subscriptions.add(unsubFromMod); }; } }; // src/view/modals/split-node-modal/open-split-node-modal.ts var openSplitNodeModal = async (view) => { const viewState = view.viewStore.getValue(); const activeNode = viewState.document.activeNode; if (!activeNode) return; const isEditing2 = Boolean(viewState.document.editing.activeNodeId); if (isEditing2) { saveNodeContent(view); setTimeout(() => { openSplitNodeModal(view); }, 100); return; } const documentState = view.documentStore.getValue(); const nodeContent = documentState.document.content[activeNode].content; const modal = new SplitNodeModal({ plugin: view.plugin, callbacks: { accept: () => { modal.close(); const newContent = get_store_value(modal.state.content); const mode = get_store_value(modal.state.mode); if (mode && newContent !== nodeContent) { view.documentStore.dispatch({ type: "DOCUMENT/SPLIT_NODE", payload: { target: activeNode, mode } }); } }, reject: () => { modal.close(); } }, nodeContent }); await modal.open(); }; // src/view/actions/context-menu/card-context-menu/helpers/insert-block-id.ts var getExistingBlockId = (lines) => { const reversed = [...lines].reverse(); for (let line of reversed) { line = line.trim(); const match = /\s+\^([a-zA-Z0-9]{4,})$/.exec(line); if (match) { return match[1]; } } }; var generateBlockId = () => Math.random().toString(36).substring(2, 8); var insertBlockId = (text2, __id__) => { const lines = text2.trimEnd().split("\n"); const existingId = getExistingBlockId(lines); if (existingId) { return { blockId: existingId, text: text2 }; } else { const lastLine = lines[lines.length - 1]; let blockId = null; if (lastLine) { blockId = __id__ || generateBlockId(); lines[lines.length - 1] = lines[lines.length - 1] + ` ^${blockId}`; return { blockId, text: lines.join("\n") }; } } }; // src/view/actions/context-menu/card-context-menu/helpers/copy-link-to-block.ts var import_obsidian25 = require("obsidian"); var copyLinkToBlock = async (view) => { const file = view.file; if (!file) return; const viewState = view.viewStore.getValue(); const activeNode = viewState.document.activeNode; const isEditing2 = Boolean(viewState.document.editing.activeNodeId); if (isEditing2) { saveNodeContent(view); setTimeout(() => { copyLinkToBlock(view); }, 100); return; } const documentState = view.documentStore.getValue(); const content = documentState.document.content[activeNode]; const text2 = content?.content; const output = insertBlockId(text2); if (output) { const fileName = file.basename; view.documentStore.dispatch({ type: "DOCUMENT/SET_NODE_CONTENT", payload: { content: output.text, nodeId: activeNode }, context: { isInSidebar: viewState.document.editing.isInSidebar } }); const link = `[[${fileName}#^${output.blockId}]]`; await navigator.clipboard.writeText(link); new import_obsidian25.Notice("Link copied to clipboard"); } else { new import_obsidian25.Notice("Could not copy link to clipboard"); } }; // src/view/actions/context-menu/card-context-menu/helpers/export-column.ts var import_obsidian26 = require("obsidian"); var exportColumn = async (view) => { const viewState = view.viewStore.getValue(); const isEditing2 = Boolean(viewState.document.editing.activeNodeId); if (isEditing2) { saveNodeContent(view); setTimeout(() => { exportColumn(view); }, 100); return; } const activeNode = viewState.document.activeNode; invariant(activeNode); const document2 = view.documentStore.getValue().document; const columnIndex = findNodeColumn(document2.columns, activeNode); const column = document2.columns[columnIndex]; invariant(column); const nodes = column.groups.map((g) => g.nodes).flat(); const content = nodes.map((n) => document2.content[n].content); const text2 = content.filter((c) => c.trim().length > 0).join("\n\n"); if (!text2.trim()) { new import_obsidian26.Notice("This column is empty"); return; } const file = view.file; invariant(file); invariant(file.parent); const newFile = await createNewFile( view.plugin, file.parent, text2, `${file.basename} - column ${columnIndex + 1}` ); await openFile(view.plugin, newFile, "split"); }; // src/obsidian/context-menu/render-context-menu.ts var import_obsidian27 = require("obsidian"); var addMenuItem = (menu, menuItem) => { if ("type" in menuItem && menuItem.type === "separator") { menu.addSeparator(); } else if ("title" in menuItem) { menu.addItem((item) => { item.setTitle(menuItem.title).setIcon(menuItem.icon).setDisabled(menuItem.disabled || false).setChecked(menuItem.checked || false); if ("submenu" in menuItem) { const subMenu = item.setSubmenu(); for (const subItem of menuItem.submenu) { addMenuItem(subMenu, subItem); } } else { item.onClick(menuItem.action); } }); } }; var renderContextMenu = (event, menuItems) => { const menu = new import_obsidian27.Menu(); for (const menuItem of menuItems) { addMenuItem(menu, menuItem); } menu.showAtMouseEvent(event); }; // src/obsidian/context-menu/select-inactive-card.ts var selectInactiveCard = (view, closestCardElement, isInSidebar, isInRecentCardsList) => { const id2 = closestCardElement?.id; if (!isInSidebar) { view.viewStore.dispatch({ type: "view/set-active-node/mouse-silent", payload: { id: id2 } }); } else if (isInRecentCardsList) { view.viewStore.dispatch({ type: "view/recent-nodes/set-active-node", payload: { id: id2 } }); } else { view.viewStore.dispatch({ type: "view/pinned-nodes/set-active-node", payload: { id: id2 } }); } }; // src/view/actions/context-menu/card-context-menu/show-card-context-menu.ts var import_obsidian28 = require("obsidian"); var showCardContextMenu = (event, view) => { const target = event.target; const closestCardElement = target.closest( ".lineage-card" ); if (!closestCardElement) return; if (textIsSelected()) return; const isInSidebar = Boolean(target.closest(".sidebar")); const isInRecentCardsList = isInSidebar && Boolean(target.closest(".recent-cards-container")); const targetIsActive = closestCardElement.hasClass("active-node"); if (!targetIsActive) { selectInactiveCard( view, closestCardElement, isInSidebar, isInRecentCardsList ); } const viewState = view.viewStore.getValue(); const multipleNodesAreSelected = !isInSidebar && viewState.document.selectedNodes.size > 1; const documentStore = view.documentStore; const documentState = documentStore.getValue(); const activeNode = viewState.document.activeNode; const isPinned = isInSidebar && !isInRecentCardsList || documentState.pinnedNodes.Ids.includes(activeNode); const hasChildren = documentState.meta.groupParentIds.has(activeNode); const menuItems = [ { title: lang.cm_split_card, icon: customIcons.split.name, action: () => { if (hasChildren) { new import_obsidian28.Notice(lang.error_cm_cant_split_card_that_has_children); } else { openSplitNodeModal(view); } }, disabled: multipleNodesAreSelected || isInSidebar }, { type: "separator" }, { title: lang.cm_merge_above, icon: "merge", action: () => mergeNode(view, "up"), disabled: multipleNodesAreSelected || isInSidebar }, { title: lang.cm_merge_below, icon: "merge", action: () => mergeNode(view, "down"), disabled: multipleNodesAreSelected || isInSidebar }, { type: "separator" }, { title: lang.cm_copy_link_to_block, icon: "links-coming-in", action: () => copyLinkToBlock(view), disabled: multipleNodesAreSelected }, { type: "separator" }, !multipleNodesAreSelected && !hasChildren ? { title: lang.cm_copy, icon: "documents", action: () => copyActiveNodesToClipboard(view) } : { title: lang.cm_copy, icon: "documents", submenu: [ { title: multipleNodesAreSelected ? lang.cm_copy_branches : lang.cm_copy_branch, icon: "lineage-cards", action: () => copyActiveBranchesToClipboard(view, true) }, { title: multipleNodesAreSelected ? lang.cm_copy_branches_wo_formatting : lang.cm_copy_branch_wo_formatting, icon: "file-text", action: () => copyActiveBranchesToClipboard(view, false) }, { title: multipleNodesAreSelected ? lang.cm_copy_section_wo_subitems : lang.cm_copy_sections_wo_subitems, icon: "file-text", action: () => copyActiveNodesToClipboard(view) } ] }, { title: lang.cm_cut, icon: "scissors", action: () => cutNode(view), disabled: isInSidebar }, { title: lang.cm_paste, icon: "paste", action: () => pasteNode(view), disabled: isInSidebar }, { type: "separator" }, { title: isPinned ? lang.cm_unpin_from_left_sidebar : lang.cm_pin_in_left_sidebar, icon: isPinned ? "pin-off" : "pin", action: () => { documentStore.dispatch({ type: isPinned ? "document/pinned-nodes/unpin" : "document/pinned-nodes/pin", payload: { id: activeNode } }); }, disabled: isInRecentCardsList || multipleNodesAreSelected }, { type: "separator" }, { title: lang.cm_extract_branch, icon: customIcons.cards.name, action: () => extractBranch(view), disabled: multipleNodesAreSelected || isInSidebar }, { title: lang.cm_export_column, icon: "file-text", action: () => exportColumn(view), disabled: multipleNodesAreSelected || isInSidebar } ]; renderContextMenu(event, menuItems); }; // src/view/actions/context-menu/card-context-menu/card-context-menu-predicate.ts var cardContextMenuPredicate = (e) => { const target = e.target; return !target.hasClass("drag-handle") && Boolean(target.closest(".lineage-card")); }; // src/view/actions/context-menu/view-context-menu/view-context-menu-predicate.ts var viewContextMenuPredicate = (e) => { const target = e.target; return target.hasClass("column-buffer") || target.hasClass("column") || target.hasClass("group") || target.hasClass("columns") || target.hasClass("columns-container"); }; // src/lib/data-conversion/x-to-json/html-comment-to-json.ts var getDepthLevel = (number) => { if (number.includes(".")) { return number.split(".").length; } else return /\d+/.test(number) ? 1 : 0; }; var trimCurrentNode = (node) => { if (node) { node.content = node.content.trim(); } }; var htmlCommentToJson = (text2) => { const lines = text2.split("\n"); const map = {}; const tree = []; let currentNode = null; let currentParentNumber = ""; for (const line of lines) { const sectionNumber = parseHtmlCommentMarker(line); if (sectionNumber) { const [parent, , full] = sectionNumber; const isASibling = parent === currentParentNumber; const newNode = { content: "", children: [] }; map[full] = newNode; if (isASibling) { if (currentNode) trimCurrentNode(currentNode); const parentNode = map[parent]; if (parentNode) { parentNode.children.push(newNode); } else { tree.push(newNode); } currentNode = newNode; } else { const isChild = getDepthLevel(parent) > getDepthLevel(currentParentNumber); if (isChild) { if (!currentNode) { throw new Error(lang.error_parent_not_found(full)); } trimCurrentNode(currentNode); currentNode.children.push(newNode); currentNode = newNode; } else { if (!parent) { if (currentNode) trimCurrentNode(currentNode); tree.push(newNode); currentNode = newNode; } else { const parentNode = map[parent]; if (!parentNode) { throw new Error(lang.error_parent_not_found(full)); } if (currentNode) trimCurrentNode(currentNode); parentNode.children.push(newNode); currentNode = newNode; } } } currentParentNumber = parent; } else { if (currentNode) { if (currentNode.content) currentNode.content += "\n"; currentNode.content += line; } else if (line.trim()) { currentNode = { content: line, children: [] }; tree.push(currentNode); } } } return tree; }; // src/lib/data-conversion/x-to-json/html-element-to-json.ts var htmlElementToJson = (text2) => { const lines = text2.split("\n"); const map = {}; const tree = []; let currentNode = null; let currentParentNumber = ""; for (const line of lines) { const sectionNumber = parseHtmlElementMarker(line); if (sectionNumber) { const [parent, , full] = sectionNumber; const isASibling = parent === currentParentNumber; const newNode = { content: line.replace(htmlCommentRegex2, ""), children: [] }; map[full] = newNode; if (isASibling) { if (currentNode) trimCurrentNode(currentNode); const parentNode = map[parent]; if (parentNode) { parentNode.children.push(newNode); } else { tree.push(newNode); } currentNode = newNode; } else { const isChild = getDepthLevel(parent) > getDepthLevel(currentParentNumber); if (isChild) { if (!currentNode) { throw new Error(lang.error_parent_not_found(full)); } trimCurrentNode(currentNode); currentNode.children.push(newNode); currentNode = newNode; } else { if (!parent) { if (currentNode) trimCurrentNode(currentNode); tree.push(newNode); currentNode = newNode; } else { const parentNode = map[parent]; if (!parentNode) { throw new Error(lang.error_parent_not_found(full)); } if (currentNode) trimCurrentNode(currentNode); parentNode.children.push(newNode); currentNode = newNode; } } } currentParentNumber = parent; } else { if (currentNode) { if (currentNode.content) currentNode.content += "\n"; currentNode.content += line; } else if (line.trim()) { currentNode = { content: line, children: [] }; tree.push(currentNode); } } } return tree; }; // src/obsidian/commands/helpers/export-document/map-document-to-text.ts var mapDocumentToText = (fileData, basename, format2) => { const { data, frontmatter } = extractFrontmatter(fileData); const tree = format2 === "outline" ? outlineToJson(data) : format2 === "html-element" ? htmlElementToJson(data) : htmlCommentToJson(data); return (frontmatter ? frontmatter + "\n" : "") + jsonToText(tree); }; // src/obsidian/commands/helpers/export-document/export-document.ts var exportDocument = async (view) => { try { const file = view.file; if (!file) return; if (!file.parent) return; const viewState = view.viewStore.getValue(); const isEditing2 = Boolean(viewState.document.editing.activeNodeId); if (isEditing2) { saveNodeContent(view); setTimeout(() => { exportDocument(view); }, 100); return; } const fileData = await view.plugin.app.vault.read(file); const format2 = getDocumentFormat(view); const output = mapDocumentToText(fileData, file.basename, format2); const newFile = await createNewFile( view.plugin, file.parent, output, file.basename ); if (newFile) { await openFile(view.plugin, newFile, "split"); } } catch (e) { onPluginError(e, "command", { type: "export-document" }); } }; // src/view/actions/context-menu/view-context-menu/show-view-context-menu.ts var showViewContextMenu = (event, view) => { const file = view.file; if (!file) return; const format2 = getDocumentFormat(view); const isOutline2 = format2 === "outline"; const isHtmlElement = format2 === "html-element"; const isHtmlComments = format2 === "sections"; const _hasHeading = hasNHeadings(view.data, 1); const menuItems = [ { title: lang.cm_format_headings, icon: "heading-1", action: () => { saveNodeContent(view); view.documentStore.dispatch({ type: "DOCUMENT/FORMAT_HEADINGS" }); }, disabled: !_hasHeading }, { type: "separator" }, { title: lang.cm_change_format_to_html_element, icon: "file-cog", action: () => { setDocumentFormat(view.plugin, file.path, "html-element"); }, checked: isHtmlElement }, { title: lang.cm_change_format_to_document, icon: "file-cog", action: () => { setDocumentFormat(view.plugin, file.path, "sections"); }, checked: isHtmlComments }, { title: lang.cm_change_format_to_outline, icon: "file-cog", action: () => { setDocumentFormat(view.plugin, file.path, "outline"); }, checked: isOutline2 }, { type: "separator" }, { title: lang.cm_export_document, icon: "file-text", action: () => { exportDocument(view); } } ]; renderContextMenu(event, menuItems); }; // src/view/actions/context-menu/context-menu.ts var contextMenu = (element2, view) => { const listener = (e) => { if (cardContextMenuPredicate(e)) { if (e.instanceOf(MouseEvent)) showCardContextMenu(e, view); else showCardContextMenu(new MouseEvent("contextmenu", e), view); } else if (viewContextMenuPredicate(e)) { if (e.instanceOf(MouseEvent)) showViewContextMenu(e, view); else showViewContextMenu(new MouseEvent("contextmenu", e), view); } }; element2.addEventListener("contextmenu", listener); let unsubFromLongPress = null; if (import_obsidian29.Platform.isMobile) { unsubFromLongPress = onLongPress( element2, listener, cardContextMenuPredicate ); } return { destroy: () => { element2.removeEventListener("contextmenu", listener); if (unsubFromLongPress) { unsubFromLongPress(); } } }; }; // src/view/components/container/dnd/dnd-edges.svelte function add_css42(target) { append_styles(target, "svelte-gs5nl7", ".hide.svelte-gs5nl7{display:none}#dnd-edge-top.svelte-gs5nl7,#dnd-edge-bottom.svelte-gs5nl7{height:40px;position:absolute;left:0;right:0;z-index:100;background-color:var(--color-base-20);opacity:0.1}#dnd-edge-top.svelte-gs5nl7{top:0}#dnd-edge-bottom.svelte-gs5nl7{bottom:0}#dnd-edge-left.svelte-gs5nl7,#dnd-edge-right.svelte-gs5nl7{width:40px;position:absolute;top:40px;bottom:40px;z-index:100;background-color:var(--color-base-20);opacity:0.1}#dnd-edge-left.svelte-gs5nl7{left:0}#dnd-edge-right.svelte-gs5nl7{right:0}"); } function create_fragment101(ctx) { let div0; let div0_class_value; let t0; let div1; let div1_class_value; let t1; let div2; let div2_class_value; let t2; let div3; let div3_class_value; return { c() { div0 = element("div"); t0 = space(); div1 = element("div"); t1 = space(); div2 = element("div"); t2 = space(); div3 = element("div"); attr(div0, "id", "dnd-edge-top"); attr(div0, "class", div0_class_value = null_to_empty( /*$dnd*/ ctx[0].node ? "" : "hide" ) + " svelte-gs5nl7"); attr(div1, "id", "dnd-edge-bottom"); attr(div1, "class", div1_class_value = null_to_empty( /*$dnd*/ ctx[0].node ? "" : "hide" ) + " svelte-gs5nl7"); attr(div2, "id", "dnd-edge-left"); attr(div2, "class", div2_class_value = null_to_empty( /*$dnd*/ ctx[0].node ? "" : "hide" ) + " svelte-gs5nl7"); attr(div3, "id", "dnd-edge-right"); attr(div3, "class", div3_class_value = null_to_empty( /*$dnd*/ ctx[0].node ? "" : "hide" ) + " svelte-gs5nl7"); }, m(target, anchor) { insert(target, div0, anchor); insert(target, t0, anchor); insert(target, div1, anchor); insert(target, t1, anchor); insert(target, div2, anchor); insert(target, t2, anchor); insert(target, div3, anchor); }, p(ctx2, [dirty]) { if (dirty & /*$dnd*/ 1 && div0_class_value !== (div0_class_value = null_to_empty( /*$dnd*/ ctx2[0].node ? "" : "hide" ) + " svelte-gs5nl7")) { attr(div0, "class", div0_class_value); } if (dirty & /*$dnd*/ 1 && div1_class_value !== (div1_class_value = null_to_empty( /*$dnd*/ ctx2[0].node ? "" : "hide" ) + " svelte-gs5nl7")) { attr(div1, "class", div1_class_value); } if (dirty & /*$dnd*/ 1 && div2_class_value !== (div2_class_value = null_to_empty( /*$dnd*/ ctx2[0].node ? "" : "hide" ) + " svelte-gs5nl7")) { attr(div2, "class", div2_class_value); } if (dirty & /*$dnd*/ 1 && div3_class_value !== (div3_class_value = null_to_empty( /*$dnd*/ ctx2[0].node ? "" : "hide" ) + " svelte-gs5nl7")) { attr(div3, "class", div3_class_value); } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div0); detach(t0); detach(div1); detach(t1); detach(div2); detach(t2); detach(div3); } } }; } function instance98($$self, $$props, $$invalidate) { let $dnd; const view = getView(); const dnd = dndStore(view); component_subscribe($$self, dnd, (value) => $$invalidate(0, $dnd = value)); return [$dnd, dnd]; } var Dnd_edges = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance98, create_fragment101, safe_not_equal, {}, add_css42); } }; var dnd_edges_default = Dnd_edges; // src/stores/settings/derived/style-rules.ts var DocumentStyleRulesStore = (view) => derived(view.plugin.settings, (state2) => { if (!view.file?.path) return []; return state2.styleRules.documents[view.file.path]?.rules || []; }); // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/components/rule-info.svelte function add_css43(target) { append_styles(target, "svelte-1pay5a3", ".rule-info.svelte-1pay5a3{width:fit-content;padding-top:4px;padding-bottom:4px;padding-right:8px;border-right:1px solid var(--text-faint);display:flex;align-items:center;justify-content:center}"); } function create_fragment102(ctx) { let div; let navigationbuttons; let current; navigationbuttons = new search_navigation_buttons_default({ props: { results: ( /*results*/ ctx[0] || [] ) } }); return { c() { div = element("div"); create_component(navigationbuttons.$$.fragment); attr(div, "class", "rule-info svelte-1pay5a3"); }, m(target, anchor) { insert(target, div, anchor); mount_component(navigationbuttons, div, null); current = true; }, p(ctx2, [dirty]) { const navigationbuttons_changes = {}; if (dirty & /*results*/ 1) navigationbuttons_changes.results = /*results*/ ctx2[0] || []; navigationbuttons.$set(navigationbuttons_changes); }, i(local) { if (current) return; transition_in(navigationbuttons.$$.fragment, local); current = true; }, o(local) { transition_out(navigationbuttons.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div); } destroy_component(navigationbuttons); } }; } function instance99($$self, $$props, $$invalidate) { let { rule } = $$props; let { results } = $$props; $$self.$$set = ($$props2) => { if ("rule" in $$props2) $$invalidate(1, rule = $$props2.rule); if ("results" in $$props2) $$invalidate(0, results = $$props2.results); }; return [results, rule]; } var Rule_info = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance99, create_fragment102, safe_not_equal, { rule: 1, results: 0 }, add_css43); } }; var rule_info_default = Rule_info; // src/view/components/container/style-rules/helpers/constants.ts var targets = [ "self", "direct-parent", "any-parent", "direct-children", "any-children" ]; var stringOperators = [ "contains", "not-contains", "equals", "not-equals", "empty", "not-empty", "starts-with", "not-starts-with", "ends-with", "not-ends-with", "matches-regex", "not-matches-regex" ]; var numericOperators = [ "equals", "not-equals", "empty", "not-empty", "greater-than", "less-than", "between", "not-between" ]; var properties = [ "content", "headings", "headings-word-count", "depth", "character-count", "word-count", "line-count", "direct-children-count", "total-children-count" ]; var styleVariants = [ "background-color", "left-border" ]; // src/view/components/container/style-rules/helpers/rule-editor-event-handlers.ts var ruleEditorEventHandlers = (view, ruleId) => { const documentPath = () => view.file?.path ?? ""; const updateCondition = (updates) => { view.plugin.settings.dispatch({ type: "settings/style-rules/update-condition", payload: { documentPath: documentPath(), ruleId, updates } }); }; const handleScopeChange = (e) => { const target = e.target; updateCondition({ scope: target.value }); }; const handlePropertyChange = (e) => { const target = e.target; updateCondition({ property: target.value }); }; const handleOperatorChange = (e) => { const target = e.target; updateCondition({ operator: target.value }); }; const handleValueChange = (e) => { const target = e.target; updateCondition({ value: target.value }); }; const handleValueBChange = (e) => { const target = e.target; updateCondition({ valueB: parseFloat(target.value) }); }; return { handleScopeChange, handlePropertyChange, handleOperatorChange, handleValueChange, handleValueBChange }; }; // src/lang/style-rules-lang.ts var styleRulesLang = { targets: { self: "Of card", "direct-parent": "Of immediate parent", "any-parent": "Of any parent", "direct-children": "Of immediate child", "any-children": "Of any child" }, operators: { contains: "Contains", "not-contains": "Does not contain", equals: "Equals", "not-equals": "Does not equal", empty: "Is empty", "not-empty": "is not empty", "greater-than": "Is greater than", "less-than": "Is less than", between: "Is between", "not-between": "Is not between", "starts-with": "Starts with", "not-starts-with": "Does not start with", "ends-with": "Ends with", "not-ends-with": "Does not end with", "matches-regex": "Matches regex", "not-matches-regex": "Does not match regex" }, properties: { depth: "Depth", "character-count": "Character count", "word-count": "Word count", "line-count": "Line count", "direct-children-count": "Direct children count", "total-children-count": "Total children count", content: "Content", headings: "Headings", "headings-word-count": "Headings word count" }, styleVariants: { "left-border": "Left border", "background-color": "Background color" } }; // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/components/rule-editor.svelte function add_css44(target) { append_styles(target, "svelte-1yba036", ".rule-editor.svelte-1yba036{display:flex;gap:8px;align-items:center;position:relative;width:90%;flex:1;flex-wrap:wrap}.select-elements.svelte-1yba036{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;& select {\n font-size: 12px;\n width: 130px;\n }}.input-elements.svelte-1yba036{width:130px;display:flex;gap:8px;align-items:center;justify-content:space-between;& input {\n font-size: 12px;\n width: 100%;\n }}"); } function get_each_context_1(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[5] = list[i]; return child_ctx; } function get_each_context15(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[5] = list[i]; return child_ctx; } function get_each_context_2(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[10] = list[i]; return child_ctx; } function get_each_context_3(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[13] = list[i]; return child_ctx; } function create_each_block_3(ctx) { let option; let option_value_value; return { c() { option = element("option"); option.textContent = `${styleRulesLang.properties[ /*property*/ ctx[13] ]}`; option.__value = option_value_value = /*property*/ ctx[13]; set_input_value(option, option.__value); }, m(target, anchor) { insert(target, option, anchor); }, p: noop, d(detaching) { if (detaching) { detach(option); } } }; } function create_each_block_2(ctx) { let option; let option_value_value; return { c() { option = element("option"); option.textContent = `${styleRulesLang.targets[ /*target*/ ctx[10] ]}`; option.__value = option_value_value = /*target*/ ctx[10]; set_input_value(option, option.__value); }, m(target, anchor) { insert(target, option, anchor); }, p: noop, d(detaching) { if (detaching) { detach(option); } } }; } function create_else_block11(ctx) { let each_1_anchor; let each_value_1 = ensure_array_like(numericOperators); let each_blocks = []; for (let i = 0; i < each_value_1.length; i += 1) { each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); } return { c() { for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); }, m(target, anchor) { for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(target, anchor); } } insert(target, each_1_anchor, anchor); }, d(detaching) { if (detaching) { detach(each_1_anchor); } destroy_each(each_blocks, detaching); } }; } function create_if_block_24(ctx) { let each_1_anchor; let each_value = ensure_array_like(stringOperators); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block15(get_each_context15(ctx, each_value, i)); } return { c() { for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); }, m(target, anchor) { for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(target, anchor); } } insert(target, each_1_anchor, anchor); }, d(detaching) { if (detaching) { detach(each_1_anchor); } destroy_each(each_blocks, detaching); } }; } function create_each_block_1(ctx) { let option; let option_value_value; return { c() { option = element("option"); option.textContent = `${styleRulesLang.operators[ /*operator*/ ctx[5] ]}`; option.__value = option_value_value = /*operator*/ ctx[5]; set_input_value(option, option.__value); }, m(target, anchor) { insert(target, option, anchor); }, p: noop, d(detaching) { if (detaching) { detach(option); } } }; } function create_each_block15(ctx) { let option; let option_value_value; return { c() { option = element("option"); option.textContent = `${styleRulesLang.operators[ /*operator*/ ctx[5] ]}`; option.__value = option_value_value = /*operator*/ ctx[5]; set_input_value(option, option.__value); }, m(target, anchor) { insert(target, option, anchor); }, p: noop, d(detaching) { if (detaching) { detach(option); } } }; } function create_if_block_19(ctx) { let input; let input_type_value; let input_value_value; let input_placeholder_value; let input_style_value; let input_aria_label_value; let mounted; let dispose; return { c() { input = element("input"); attr(input, "type", input_type_value = /*isStringCondition*/ ctx[1] ? "text" : "number"); input.value = input_value_value = /*rule*/ ctx[0].condition.value; attr(input, "placeholder", input_placeholder_value = /*isStringCondition*/ ctx[1] ? "Text" : "Number"); attr(input, "style", input_style_value = /*isStringCondition*/ ctx[1] ? "" : ( /*operatorIsBetween*/ ctx[2] ? "width: 50%" : "" )); attr(input, "aria-label", input_aria_label_value = /*operatorIsBetween*/ ctx[2] ? "Value 1" : "Value"); }, m(target, anchor) { insert(target, input, anchor); if (!mounted) { dispose = listen( input, "input", /*h*/ ctx[3].handleValueChange ); mounted = true; } }, p(ctx2, dirty) { if (dirty & /*isStringCondition*/ 2 && input_type_value !== (input_type_value = /*isStringCondition*/ ctx2[1] ? "text" : "number")) { attr(input, "type", input_type_value); } if (dirty & /*rule*/ 1 && input_value_value !== (input_value_value = /*rule*/ ctx2[0].condition.value) && input.value !== input_value_value) { input.value = input_value_value; } if (dirty & /*isStringCondition*/ 2 && input_placeholder_value !== (input_placeholder_value = /*isStringCondition*/ ctx2[1] ? "Text" : "Number")) { attr(input, "placeholder", input_placeholder_value); } if (dirty & /*isStringCondition, operatorIsBetween*/ 6 && input_style_value !== (input_style_value = /*isStringCondition*/ ctx2[1] ? "" : ( /*operatorIsBetween*/ ctx2[2] ? "width: 50%" : "" ))) { attr(input, "style", input_style_value); } if (dirty & /*operatorIsBetween*/ 4 && input_aria_label_value !== (input_aria_label_value = /*operatorIsBetween*/ ctx2[2] ? "Value 1" : "Value")) { attr(input, "aria-label", input_aria_label_value); } }, d(detaching) { if (detaching) { detach(input); } mounted = false; dispose(); } }; } function create_if_block28(ctx) { let input; let input_value_value; let input_placeholder_value; let input_style_value; let mounted; let dispose; return { c() { input = element("input"); attr(input, "type", "number"); input.value = input_value_value = "valueB" in /*rule*/ ctx[0].condition ? ( /*rule*/ ctx[0].condition.valueB ) : 0; attr(input, "placeholder", input_placeholder_value = "Number"); attr(input, "style", input_style_value = "width: 60px"); attr(input, "aria-label", "Value 2"); }, m(target, anchor) { insert(target, input, anchor); if (!mounted) { dispose = listen( input, "input", /*h*/ ctx[3].handleValueBChange ); mounted = true; } }, p(ctx2, dirty) { if (dirty & /*rule*/ 1 && input_value_value !== (input_value_value = "valueB" in /*rule*/ ctx2[0].condition ? ( /*rule*/ ctx2[0].condition.valueB ) : 0) && input.value !== input_value_value) { input.value = input_value_value; } }, d(detaching) { if (detaching) { detach(input); } mounted = false; dispose(); } }; } function create_fragment103(ctx) { let div2; let div0; let select0; let select0_value_value; let t0; let select1; let select1_value_value; let t1; let select2; let select2_value_value; let t2; let div1; let show_if = !["empty", "not-empty"].includes( /*rule*/ ctx[0].condition.operator ); let t3; let mounted; let dispose; let each_value_3 = ensure_array_like(properties); let each_blocks_1 = []; for (let i = 0; i < each_value_3.length; i += 1) { each_blocks_1[i] = create_each_block_3(get_each_context_3(ctx, each_value_3, i)); } let each_value_2 = ensure_array_like(targets); let each_blocks = []; for (let i = 0; i < each_value_2.length; i += 1) { each_blocks[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); } function select_block_type(ctx2, dirty) { if ( /*isStringCondition*/ ctx2[1] ) return create_if_block_24; return create_else_block11; } let current_block_type = select_block_type(ctx, -1); let if_block0 = current_block_type(ctx); let if_block1 = show_if && create_if_block_19(ctx); let if_block2 = ( /*operatorIsBetween*/ ctx[2] && create_if_block28(ctx) ); return { c() { div2 = element("div"); div0 = element("div"); select0 = element("select"); for (let i = 0; i < each_blocks_1.length; i += 1) { each_blocks_1[i].c(); } t0 = space(); select1 = element("select"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } t1 = space(); select2 = element("select"); if_block0.c(); t2 = space(); div1 = element("div"); if (if_block1) if_block1.c(); t3 = space(); if (if_block2) if_block2.c(); attr(select0, "aria-label", "Property"); attr(select1, "aria-label", "Scope"); attr(select2, "aria-label", "Operator"); attr(div0, "class", "select-elements svelte-1yba036"); attr(div1, "class", "input-elements svelte-1yba036"); attr(div2, "class", "rule-editor svelte-1yba036"); }, m(target, anchor) { insert(target, div2, anchor); append(div2, div0); append(div0, select0); for (let i = 0; i < each_blocks_1.length; i += 1) { if (each_blocks_1[i]) { each_blocks_1[i].m(select0, null); } } select_option( select0, /*rule*/ ctx[0].condition.property ); append(div0, t0); append(div0, select1); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(select1, null); } } select_option( select1, /*rule*/ ctx[0].condition.scope ); append(div0, t1); append(div0, select2); if_block0.m(select2, null); select_option( select2, /*rule*/ ctx[0].condition.operator ); append(div2, t2); append(div2, div1); if (if_block1) if_block1.m(div1, null); append(div1, t3); if (if_block2) if_block2.m(div1, null); if (!mounted) { dispose = [ listen( select0, "change", /*h*/ ctx[3].handlePropertyChange ), listen( select1, "change", /*h*/ ctx[3].handleScopeChange ), listen( select2, "change", /*h*/ ctx[3].handleOperatorChange ) ]; mounted = true; } }, p(ctx2, [dirty]) { if (dirty & /*rule*/ 1 && select0_value_value !== (select0_value_value = /*rule*/ ctx2[0].condition.property)) { select_option( select0, /*rule*/ ctx2[0].condition.property ); } if (dirty & /*rule*/ 1 && select1_value_value !== (select1_value_value = /*rule*/ ctx2[0].condition.scope)) { select_option( select1, /*rule*/ ctx2[0].condition.scope ); } if (current_block_type !== (current_block_type = select_block_type(ctx2, dirty))) { if_block0.d(1); if_block0 = current_block_type(ctx2); if (if_block0) { if_block0.c(); if_block0.m(select2, null); } } if (dirty & /*rule*/ 1 && select2_value_value !== (select2_value_value = /*rule*/ ctx2[0].condition.operator)) { select_option( select2, /*rule*/ ctx2[0].condition.operator ); } if (dirty & /*rule*/ 1) show_if = !["empty", "not-empty"].includes( /*rule*/ ctx2[0].condition.operator ); if (show_if) { if (if_block1) { if_block1.p(ctx2, dirty); } else { if_block1 = create_if_block_19(ctx2); if_block1.c(); if_block1.m(div1, t3); } } else if (if_block1) { if_block1.d(1); if_block1 = null; } if ( /*operatorIsBetween*/ ctx2[2] ) { if (if_block2) { if_block2.p(ctx2, dirty); } else { if_block2 = create_if_block28(ctx2); if_block2.c(); if_block2.m(div1, null); } } else if (if_block2) { if_block2.d(1); if_block2 = null; } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div2); } destroy_each(each_blocks_1, detaching); destroy_each(each_blocks, detaching); if_block0.d(); if (if_block1) if_block1.d(); if (if_block2) if_block2.d(); mounted = false; run_all(dispose); } }; } function instance100($$self, $$props, $$invalidate) { let operatorIsBetween; let isStringCondition; let { rule } = $$props; const view = getView(); const h = ruleEditorEventHandlers(view, rule.id); $$self.$$set = ($$props2) => { if ("rule" in $$props2) $$invalidate(0, rule = $$props2.rule); }; $$self.$$.update = () => { if ($$self.$$.dirty & /*rule*/ 1) { $: $$invalidate(2, operatorIsBetween = rule.condition.operator === "between" || rule.condition.operator === "not-between"); } if ($$self.$$.dirty & /*rule*/ 1) { $: $$invalidate(1, isStringCondition = rule.condition.property === "content" || rule.condition.property === "headings"); } }; return [rule, isStringCondition, operatorIsBetween, h]; } var Rule_editor = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance100, create_fragment103, safe_not_equal, { rule: 0 }, add_css44); } }; var rule_editor_default = Rule_editor; // src/view/components/container/style-rules/helpers/rule-style-editor-event-handlers.ts var ruleStyleEditorEventHandlers = (view, ruleId) => { const documentPath = () => view.file?.path ?? ""; const updateStyle = (id2, style) => { view.plugin.settings.dispatch({ type: "settings/style-rules/update-style", payload: { documentPath: documentPath(), id: id2, style } }); }; const handleColorChange = (e) => { const target = e.target; updateStyle(ruleId, { color: target.value }); }; const handleStyleVariantChange = (e) => { const target = e.target; updateStyle(ruleId, { styleVariant: target.value }); }; return { handleColorChange, handleStyleVariantChange }; }; // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/components/rule-style-editor.svelte function add_css45(target) { append_styles(target, "svelte-13w1xs", ".rule-style-config.svelte-13w1xs{width:fit-content;padding:4px;padding-right:0px;border-left:1px solid var(--text-faint);display:flex;align-items:center;gap:8px;justify-content:center}.select-elements.svelte-13w1xs{display:flex;gap:8px;align-items:center;justify-content:space-between;flex-wrap:wrap;& select {\n font-size: 12px;\n width: 130px;\n }}"); } function get_each_context16(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[3] = list[i]; return child_ctx; } function create_each_block16(ctx) { let option; let option_value_value; return { c() { option = element("option"); option.textContent = `${styleRulesLang.styleVariants[ /*styleType*/ ctx[3] ]}`; option.__value = option_value_value = /*styleType*/ ctx[3]; set_input_value(option, option.__value); }, m(target, anchor) { insert(target, option, anchor); }, p: noop, d(detaching) { if (detaching) { detach(option); } } }; } function create_fragment104(ctx) { let div1; let input; let input_value_value; let t; let div0; let select; let select_value_value; let mounted; let dispose; let each_value = ensure_array_like(styleVariants); let each_blocks = []; for (let i = 0; i < each_value.length; i += 1) { each_blocks[i] = create_each_block16(get_each_context16(ctx, each_value, i)); } return { c() { div1 = element("div"); input = element("input"); t = space(); div0 = element("div"); select = element("select"); for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } attr(input, "type", "color"); input.value = input_value_value = /*rule*/ ctx[0].style.color; attr(div0, "class", "select-elements svelte-13w1xs"); attr(div1, "class", "rule-style-config svelte-13w1xs"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, input); append(div1, t); append(div1, div0); append(div0, select); for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(select, null); } } select_option( select, /*rule*/ ctx[0].style.styleVariant ); if (!mounted) { dispose = [ listen( input, "input", /*h*/ ctx[1].handleColorChange ), listen( select, "change", /*h*/ ctx[1].handleStyleVariantChange ) ]; mounted = true; } }, p(ctx2, [dirty]) { if (dirty & /*rule*/ 1 && input_value_value !== (input_value_value = /*rule*/ ctx2[0].style.color)) { input.value = input_value_value; } if (dirty & /*rule*/ 1 && select_value_value !== (select_value_value = /*rule*/ ctx2[0].style.styleVariant)) { select_option( select, /*rule*/ ctx2[0].style.styleVariant ); } }, i: noop, o: noop, d(detaching) { if (detaching) { detach(div1); } destroy_each(each_blocks, detaching); mounted = false; run_all(dispose); } }; } function instance101($$self, $$props, $$invalidate) { let { rule } = $$props; const view = getView(); const h = ruleStyleEditorEventHandlers(view, rule.id); $$self.$$set = ($$props2) => { if ("rule" in $$props2) $$invalidate(0, rule = $$props2.rule); }; return [rule, h]; } var Rule_style_editor = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance101, create_fragment104, safe_not_equal, { rule: 0 }, add_css45); } }; var rule_style_editor_default = Rule_style_editor; // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/components/actions/rule-dnd.ts var ruleDndAction = (element2, { setDraggedRule, setDropTarget, resetDragState, rule, view }) => { const handleDragStart = (e) => { const target = e.currentTarget; const dragHandleRect = target.querySelector(".drag-handle")?.getBoundingClientRect(); const isWithinDragHandle = dragHandleRect && e.clientX >= dragHandleRect.left && e.clientX <= dragHandleRect.right && e.clientY >= dragHandleRect.top && e.clientY <= dragHandleRect.bottom; if (!isWithinDragHandle) { e.preventDefault(); return; } const rules = get_store_value(DocumentStyleRulesStore(view)); if (rules.length === 1) { e.preventDefault(); return; } if (!e.dataTransfer) return; e.dataTransfer.effectAllowed = "move"; const data = { id: rule.id }; e.dataTransfer.setData("text/plain", JSON.stringify(data)); setTimeout(() => { setDraggedRule(rule); }); }; const handleDragOver = (e) => { e.preventDefault(); const target = e.currentTarget; const rect = target.getBoundingClientRect(); const y = e.clientY - rect.top; const isAbove = y < rect.height / 2; setDropTarget(rule, isAbove ? "before" : "after"); }; const handleDrop = (e) => { e.preventDefault(); const target = e.currentTarget; const data = JSON.parse(e.dataTransfer?.getData("text/plain") || "{}"); if (!data.id) return; const rect = target.getBoundingClientRect(); const y = e.clientY - rect.top; const isAbove = y < rect.height / 2; view.plugin.settings.dispatch({ type: "settings/style-rules/move", payload: { documentPath: view.file?.path, droppedId: data.id, targetId: rule.id, position: isAbove ? "before" : "after" } }); setTimeout(() => { resetDragState(); }); }; const handleDragEnd = (e) => { e.preventDefault(); resetDragState(); }; element2.addEventListener("dragstart", handleDragStart); element2.addEventListener("dragover", handleDragOver); element2.addEventListener("drop", handleDrop); element2.addEventListener("dragend", handleDragEnd); return { destroy: () => { element2.removeEventListener("dragstart", handleDragStart); element2.removeEventListener("dragover", handleDragOver); element2.removeEventListener("drop", handleDrop); element2.removeEventListener("dragend", handleDragEnd); } }; }; // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/components/rule-actions.svelte function add_css46(target) { append_styles(target, "svelte-g9rst9", ".rule-actions.svelte-g9rst9{display:flex;align-items:center;gap:8px;padding-top:4px;padding-bottom:4px;padding-left:8px;border-left:1px solid var(--text-faint);justify-content:center}.delete-button.svelte-g9rst9{color:var(--color-red)\n }"); } function create_fragment105(ctx) { let div1; let input; let input_checked_value; let t; let div0; let trash; let current; let mounted; let dispose; trash = new trash_default({ props: { class: "svg-icon" } }); return { c() { div1 = element("div"); input = element("input"); t = space(); div0 = element("div"); create_component(trash.$$.fragment); attr(input, "type", "checkbox"); input.checked = input_checked_value = /*rule*/ ctx[0].enabled; attr(input, "aria-label", "Enable"); attr(div0, "class", "clickable-icon delete-button svelte-g9rst9"); attr(div0, "aria-label", "Delete"); attr(div1, "class", "rule-actions svelte-g9rst9"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, input); append(div1, t); append(div1, div0); mount_component(trash, div0, null); current = true; if (!mounted) { dispose = [ listen( input, "change", /*toggleRule*/ ctx[1] ), listen( div0, "click", /*deleteRule*/ ctx[2] ) ]; mounted = true; } }, p(ctx2, [dirty]) { if (!current || dirty & /*rule*/ 1 && input_checked_value !== (input_checked_value = /*rule*/ ctx2[0].enabled)) { input.checked = input_checked_value; } }, i(local) { if (current) return; transition_in(trash.$$.fragment, local); current = true; }, o(local) { transition_out(trash.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(trash); mounted = false; run_all(dispose); } }; } function instance102($$self, $$props, $$invalidate) { let { rule } = $$props; const view = getView(); const toggleRule = (e) => { const target = e.target; view.plugin.settings.dispatch({ type: target.checked ? "settings/style-rules/enable-rule" : "settings/style-rules/disable-rule", payload: { documentPath: view.file.path, id: rule.id } }); }; const deleteRule = () => { view.plugin.settings.dispatch({ type: "settings/style-rules/delete", payload: { documentPath: view.file.path, id: rule.id } }); }; $$self.$$set = ($$props2) => { if ("rule" in $$props2) $$invalidate(0, rule = $$props2.rule); }; return [rule, toggleRule, deleteRule]; } var Rule_actions = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance102, create_fragment105, safe_not_equal, { rule: 0 }, add_css46); } }; var rule_actions_default = Rule_actions; // src/view/components/container/style-rules/components/style-rules-list/components/style-rule/style-rule.svelte function add_css47(target) { append_styles(target, "svelte-13uscz", ".rule-container.svelte-13uscz{margin-top:10px;display:flex;border-radius:4px;overflow:hidden;background-color:var(--color-base-20);padding:12px;gap:8px;flex-wrap:wrap}.drag-handle.svelte-13uscz{cursor:grab;color:var(--text-muted);padding:4px;display:flex;align-items:center}.drag-handle.svelte-13uscz:hover{color:var(--text-normal)}.rule-container.svelte-13uscz:nth-child(-n + 1){margin-top:0}"); } function create_fragment106(ctx) { let div1; let div0; let gripvertical; let div0_aria_label_value; let t0; let ruleinfo; let t1; let ruleeditor; let t2; let rulestyleeditor; let t3; let ruleactions; let ruleDndAction_action; let current; let mounted; let dispose; gripvertical = new grip_vertical_default({ props: { class: "svg-icon" } }); ruleinfo = new rule_info_default({ props: { rule: ( /*rule*/ ctx[3] ), results: ( /*results*/ ctx[4] ) } }); ruleeditor = new rule_editor_default({ props: { rule: ( /*rule*/ ctx[3] ) } }); rulestyleeditor = new rule_style_editor_default({ props: { rule: ( /*rule*/ ctx[3] ) } }); ruleactions = new rule_actions_default({ props: { rule: ( /*rule*/ ctx[3] ) } }); return { c() { div1 = element("div"); div0 = element("div"); create_component(gripvertical.$$.fragment); t0 = space(); create_component(ruleinfo.$$.fragment); t1 = space(); create_component(ruleeditor.$$.fragment); t2 = space(); create_component(rulestyleeditor.$$.fragment); t3 = space(); create_component(ruleactions.$$.fragment); attr(div0, "class", "drag-handle svelte-13uscz"); attr(div0, "aria-label", div0_aria_label_value = lang.modals_rules_drag_handle); attr(div1, "class", "rule-container svelte-13uscz"); attr(div1, "draggable", "true"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); mount_component(gripvertical, div0, null); append(div1, t0); mount_component(ruleinfo, div1, null); append(div1, t1); mount_component(ruleeditor, div1, null); append(div1, t2); mount_component(rulestyleeditor, div1, null); append(div1, t3); mount_component(ruleactions, div1, null); current = true; if (!mounted) { dispose = action_destroyer(ruleDndAction_action = ruleDndAction.call(null, div1, { setDraggedRule: ( /*setDraggedRule*/ ctx[0] ), setDropTarget: ( /*setDropTarget*/ ctx[1] ), resetDragState: ( /*resetDragState*/ ctx[2] ), rule: ( /*rule*/ ctx[3] ), view: ( /*view*/ ctx[5] ) })); mounted = true; } }, p(ctx2, [dirty]) { const ruleinfo_changes = {}; if (dirty & /*rule*/ 8) ruleinfo_changes.rule = /*rule*/ ctx2[3]; if (dirty & /*results*/ 16) ruleinfo_changes.results = /*results*/ ctx2[4]; ruleinfo.$set(ruleinfo_changes); const ruleeditor_changes = {}; if (dirty & /*rule*/ 8) ruleeditor_changes.rule = /*rule*/ ctx2[3]; ruleeditor.$set(ruleeditor_changes); const rulestyleeditor_changes = {}; if (dirty & /*rule*/ 8) rulestyleeditor_changes.rule = /*rule*/ ctx2[3]; rulestyleeditor.$set(rulestyleeditor_changes); const ruleactions_changes = {}; if (dirty & /*rule*/ 8) ruleactions_changes.rule = /*rule*/ ctx2[3]; ruleactions.$set(ruleactions_changes); if (ruleDndAction_action && is_function(ruleDndAction_action.update) && dirty & /*setDraggedRule, setDropTarget, resetDragState, rule*/ 15) ruleDndAction_action.update.call(null, { setDraggedRule: ( /*setDraggedRule*/ ctx2[0] ), setDropTarget: ( /*setDropTarget*/ ctx2[1] ), resetDragState: ( /*resetDragState*/ ctx2[2] ), rule: ( /*rule*/ ctx2[3] ), view: ( /*view*/ ctx2[5] ) }); }, i(local) { if (current) return; transition_in(gripvertical.$$.fragment, local); transition_in(ruleinfo.$$.fragment, local); transition_in(ruleeditor.$$.fragment, local); transition_in(rulestyleeditor.$$.fragment, local); transition_in(ruleactions.$$.fragment, local); current = true; }, o(local) { transition_out(gripvertical.$$.fragment, local); transition_out(ruleinfo.$$.fragment, local); transition_out(ruleeditor.$$.fragment, local); transition_out(rulestyleeditor.$$.fragment, local); transition_out(ruleactions.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(gripvertical); destroy_component(ruleinfo); destroy_component(ruleeditor); destroy_component(rulestyleeditor); destroy_component(ruleactions); mounted = false; dispose(); } }; } function instance103($$self, $$props, $$invalidate) { let { setDraggedRule } = $$props; let { setDropTarget } = $$props; let { resetDragState } = $$props; let { rule } = $$props; let { results } = $$props; const view = getView(); $$self.$$set = ($$props2) => { if ("setDraggedRule" in $$props2) $$invalidate(0, setDraggedRule = $$props2.setDraggedRule); if ("setDropTarget" in $$props2) $$invalidate(1, setDropTarget = $$props2.setDropTarget); if ("resetDragState" in $$props2) $$invalidate(2, resetDragState = $$props2.resetDragState); if ("rule" in $$props2) $$invalidate(3, rule = $$props2.rule); if ("results" in $$props2) $$invalidate(4, results = $$props2.results); }; return [setDraggedRule, setDropTarget, resetDragState, rule, results, view]; } var Style_rule = class extends SvelteComponent { constructor(options) { super(); init( this, options, instance103, create_fragment106, safe_not_equal, { setDraggedRule: 0, setDropTarget: 1, resetDragState: 2, rule: 3, results: 4 }, add_css47 ); } }; var style_rule_default = Style_rule; // src/view/components/container/style-rules/components/style-rules-list/components/drop-target.svelte function add_css48(target) { append_styles(target, "svelte-1xjkxat", ".drop-target.svelte-1xjkxat{height:50px;background-color:var(--interactive-hover);border-radius:4px}"); } function create_if_block_110(ctx) { let div; let mounted; let dispose; return { c() { div = element("div"); attr(div, "class", "drop-target svelte-1xjkxat"); }, m(target, anchor) { insert(target, div, anchor); if (!mounted) { dispose = [ listen(div, "dragover", dragover_handler), listen( div, "drop", /*drop_handler*/ ctx[7] ) ]; mounted = true; } }, p: noop, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_if_block29(ctx) { let div; let mounted; let dispose; return { c() { div = element("div"); attr(div, "class", "drop-target svelte-1xjkxat"); }, m(target, anchor) { insert(target, div, anchor); if (!mounted) { dispose = [ listen(div, "dragover", dragover_handler_1), listen( div, "drop", /*drop_handler_1*/ ctx[8] ) ]; mounted = true; } }, p: noop, d(detaching) { if (detaching) { detach(div); } mounted = false; run_all(dispose); } }; } function create_fragment107(ctx) { let t0; let t1; let if_block1_anchor; let current; let if_block0 = ( /*dropPosition*/ ctx[0] === "before" && create_if_block_110(ctx) ); const default_slot_template = ( /*#slots*/ ctx[6].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[5], null ); let if_block1 = ( /*dropPosition*/ ctx[0] === "after" && create_if_block29(ctx) ); return { c() { if (if_block0) if_block0.c(); t0 = space(); if (default_slot) default_slot.c(); t1 = space(); if (if_block1) if_block1.c(); if_block1_anchor = empty(); }, m(target, anchor) { if (if_block0) if_block0.m(target, anchor); insert(target, t0, anchor); if (default_slot) { default_slot.m(target, anchor); } insert(target, t1, anchor); if (if_block1) if_block1.m(target, anchor); insert(target, if_block1_anchor, anchor); current = true; }, p(ctx2, [dirty]) { if ( /*dropPosition*/ ctx2[0] === "before" ) { if (if_block0) { if_block0.p(ctx2, dirty); } else { if_block0 = create_if_block_110(ctx2); if_block0.c(); if_block0.m(t0.parentNode, t0); } } else if (if_block0) { if_block0.d(1); if_block0 = null; } if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 32)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[5], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[5] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[5], dirty, null ), null ); } } if ( /*dropPosition*/ ctx2[0] === "after" ) { if (if_block1) { if_block1.p(ctx2, dirty); } else { if_block1 = create_if_block29(ctx2); if_block1.c(); if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); } } else if (if_block1) { if_block1.d(1); if_block1 = null; } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(t0); detach(t1); detach(if_block1_anchor); } if (if_block0) if_block0.d(detaching); if (default_slot) default_slot.d(detaching); if (if_block1) if_block1.d(detaching); } }; } var dragover_handler = (e) => e.preventDefault(); var dragover_handler_1 = (e) => e.preventDefault(); function instance104($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; var _a; let { rule } = $$props; let { resetDragState } = $$props; let { dropPosition } = $$props; let { draggedRule } = $$props; const view = getView(); const documentPath = (_a = view.file) === null || _a === void 0 ? void 0 : _a.path; const handleDrop = () => { if (draggedRule) { view.plugin.settings.dispatch({ type: "settings/style-rules/move", payload: { documentPath, droppedId: draggedRule.id, targetId: rule.id, position: dropPosition } }); } resetDragState(); }; const drop_handler = () => handleDrop(); const drop_handler_1 = () => handleDrop(); $$self.$$set = ($$props2) => { if ("rule" in $$props2) $$invalidate(2, rule = $$props2.rule); if ("resetDragState" in $$props2) $$invalidate(3, resetDragState = $$props2.resetDragState); if ("dropPosition" in $$props2) $$invalidate(0, dropPosition = $$props2.dropPosition); if ("draggedRule" in $$props2) $$invalidate(4, draggedRule = $$props2.draggedRule); if ("$$scope" in $$props2) $$invalidate(5, $$scope = $$props2.$$scope); }; return [ dropPosition, handleDrop, rule, resetDragState, draggedRule, $$scope, slots, drop_handler, drop_handler_1 ]; } var Drop_target = class extends SvelteComponent { constructor(options) { super(); init( this, options, instance104, create_fragment107, safe_not_equal, { rule: 2, resetDragState: 3, dropPosition: 0, draggedRule: 4 }, add_css48 ); } }; var drop_target_default = Drop_target; // src/view/components/container/style-rules/components/style-rules-list/components/empty-list.svelte function add_css49(target) { append_styles(target, "svelte-1tkjjmq", ".pane-empty.svelte-1tkjjmq{height:100%;flex:1;display:flex;align-items:center;justify-content:center}"); } function create_fragment108(ctx) { let div2; let div0; let stylerulecontainer; let t0; let div1; let current; stylerulecontainer = new style_rule_default({ props: { rule: ( /*rule*/ ctx[0] ), setDraggedRule: ( /*noop*/ ctx[1] ), setDropTarget: ( /*noop*/ ctx[1] ), resetDragState: ( /*noop*/ ctx[1] ), results: [] } }); return { c() { div2 = element("div"); div0 = element("div"); create_component(stylerulecontainer.$$.fragment); t0 = space(); div1 = element("div"); div1.textContent = `${lang.modals_rules_no_rules}`; set_style(div0, "height", "1px"); set_style(div0, "overflow", "hidden"); set_style(div0, "visibility", "hidden"); attr(div1, "class", "pane-empty svelte-1tkjjmq"); set_style(div2, "height", "95%"); }, m(target, anchor) { insert(target, div2, anchor); append(div2, div0); mount_component(stylerulecontainer, div0, null); append(div2, t0); append(div2, div1); current = true; }, p: noop, i(local) { if (current) return; transition_in(stylerulecontainer.$$.fragment, local); current = true; }, o(local) { transition_out(stylerulecontainer.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div2); } destroy_component(stylerulecontainer); } }; } function instance105($$self) { const rule = { style: { color: "", styleVariant: "left-border" }, enabled: false, condition: { value: 0, property: "character-count", enabled: false, operator: "greater-than", scope: "any-children", type: "condition" }, id: "", name: "", priority: 0 }; const noop4 = () => { }; return [rule, noop4]; } var Empty_list = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance105, create_fragment108, safe_not_equal, {}, add_css49); } }; var empty_list_default = Empty_list; // src/view/components/container/style-rules/components/style-rules-list/style-rules-list.svelte function add_css50(target) { append_styles(target, "svelte-1se33m3", ".rules-list.svelte-1se33m3{padding:10px;height:100%}.rules-list.dragging.svelte-1se33m3{background-color:var(--interactive-hover)}"); } function get_each_context17(ctx, list, i) { const child_ctx = ctx.slice(); child_ctx[9] = list[i]; return child_ctx; } function create_else_block12(ctx) { let each_blocks = []; let each_1_lookup = /* @__PURE__ */ new Map(); let each_1_anchor; let current; let each_value = ensure_array_like( /*rules*/ ctx[0] ); const get_key = (ctx2) => ( /*rule*/ ctx2[9].id ); for (let i = 0; i < each_value.length; i += 1) { let child_ctx = get_each_context17(ctx, each_value, i); let key = get_key(child_ctx); each_1_lookup.set(key, each_blocks[i] = create_each_block17(key, child_ctx)); } return { c() { for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].c(); } each_1_anchor = empty(); }, m(target, anchor) { for (let i = 0; i < each_blocks.length; i += 1) { if (each_blocks[i]) { each_blocks[i].m(target, anchor); } } insert(target, each_1_anchor, anchor); current = true; }, p(ctx2, dirty) { if (dirty & /*rules, resetDragState, $dragState, setDraggedRule, setDropTarget, $allMatches*/ 231) { each_value = ensure_array_like( /*rules*/ ctx2[0] ); group_outros(); each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block17, each_1_anchor, get_each_context17); check_outros(); } }, i(local) { if (current) return; for (let i = 0; i < each_value.length; i += 1) { transition_in(each_blocks[i]); } current = true; }, o(local) { for (let i = 0; i < each_blocks.length; i += 1) { transition_out(each_blocks[i]); } current = false; }, d(detaching) { if (detaching) { detach(each_1_anchor); } for (let i = 0; i < each_blocks.length; i += 1) { each_blocks[i].d(detaching); } } }; } function create_if_block30(ctx) { let emptylist; let current; emptylist = new empty_list_default({}); return { c() { create_component(emptylist.$$.fragment); }, m(target, anchor) { mount_component(emptylist, target, anchor); current = true; }, p: noop, i(local) { if (current) return; transition_in(emptylist.$$.fragment, local); current = true; }, o(local) { transition_out(emptylist.$$.fragment, local); current = false; }, d(detaching) { destroy_component(emptylist, detaching); } }; } function create_if_block_25(ctx) { let stylerulecontainer; let current; stylerulecontainer = new style_rule_default({ props: { rule: ( /*rule*/ ctx[9] ), setDraggedRule: ( /*setDraggedRule*/ ctx[5] ), setDropTarget: ( /*setDropTarget*/ ctx[6] ), resetDragState: ( /*resetDragState*/ ctx[7] ), results: ( /*$allMatches*/ ctx[2].get( /*rule*/ ctx[9].id ) ) } }); return { c() { create_component(stylerulecontainer.$$.fragment); }, m(target, anchor) { mount_component(stylerulecontainer, target, anchor); current = true; }, p(ctx2, dirty) { const stylerulecontainer_changes = {}; if (dirty & /*rules*/ 1) stylerulecontainer_changes.rule = /*rule*/ ctx2[9]; if (dirty & /*$allMatches, rules*/ 5) stylerulecontainer_changes.results = /*$allMatches*/ ctx2[2].get( /*rule*/ ctx2[9].id ); stylerulecontainer.$set(stylerulecontainer_changes); }, i(local) { if (current) return; transition_in(stylerulecontainer.$$.fragment, local); current = true; }, o(local) { transition_out(stylerulecontainer.$$.fragment, local); current = false; }, d(detaching) { destroy_component(stylerulecontainer, detaching); } }; } function create_if_block_111(ctx) { let droptarget; let current; droptarget = new drop_target_default({ props: { rule: ( /*rule*/ ctx[9] ), resetDragState: ( /*resetDragState*/ ctx[7] ), dropPosition: ( /*$dragState*/ ctx[1].dropPosition ), draggedRule: ( /*$dragState*/ ctx[1].draggedRule ), $$slots: { default: [create_default_slot57] }, $$scope: { ctx } } }); return { c() { create_component(droptarget.$$.fragment); }, m(target, anchor) { mount_component(droptarget, target, anchor); current = true; }, p(ctx2, dirty) { const droptarget_changes = {}; if (dirty & /*rules*/ 1) droptarget_changes.rule = /*rule*/ ctx2[9]; if (dirty & /*$dragState*/ 2) droptarget_changes.dropPosition = /*$dragState*/ ctx2[1].dropPosition; if (dirty & /*$dragState*/ 2) droptarget_changes.draggedRule = /*$dragState*/ ctx2[1].draggedRule; if (dirty & /*$$scope, rules, $allMatches*/ 4101) { droptarget_changes.$$scope = { dirty, ctx: ctx2 }; } droptarget.$set(droptarget_changes); }, i(local) { if (current) return; transition_in(droptarget.$$.fragment, local); current = true; }, o(local) { transition_out(droptarget.$$.fragment, local); current = false; }, d(detaching) { destroy_component(droptarget, detaching); } }; } function create_default_slot57(ctx) { let stylerulecontainer; let t; let current; stylerulecontainer = new style_rule_default({ props: { rule: ( /*rule*/ ctx[9] ), setDraggedRule: ( /*setDraggedRule*/ ctx[5] ), setDropTarget: ( /*setDropTarget*/ ctx[6] ), resetDragState: ( /*resetDragState*/ ctx[7] ), results: ( /*$allMatches*/ ctx[2].get( /*rule*/ ctx[9].id ) ) } }); return { c() { create_component(stylerulecontainer.$$.fragment); t = space(); }, m(target, anchor) { mount_component(stylerulecontainer, target, anchor); insert(target, t, anchor); current = true; }, p(ctx2, dirty) { const stylerulecontainer_changes = {}; if (dirty & /*rules*/ 1) stylerulecontainer_changes.rule = /*rule*/ ctx2[9]; if (dirty & /*$allMatches, rules*/ 5) stylerulecontainer_changes.results = /*$allMatches*/ ctx2[2].get( /*rule*/ ctx2[9].id ); stylerulecontainer.$set(stylerulecontainer_changes); }, i(local) { if (current) return; transition_in(stylerulecontainer.$$.fragment, local); current = true; }, o(local) { transition_out(stylerulecontainer.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(t); } destroy_component(stylerulecontainer, detaching); } }; } function create_each_block17(key_1, ctx) { let first; let current_block_type_index; let if_block; let if_block_anchor; let current; const if_block_creators = [create_if_block_111, create_if_block_25]; const if_blocks = []; function select_block_type_1(ctx2, dirty) { if ( /*$dragState*/ ctx2[1]?.dropTarget?.id === /*rule*/ ctx2[9].id ) return 0; if ( /*$dragState*/ ctx2[1]?.draggedRule !== /*rule*/ ctx2[9] ) return 1; return -1; } if (~(current_block_type_index = select_block_type_1(ctx, -1))) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); } return { key: key_1, first: null, c() { first = empty(); if (if_block) if_block.c(); if_block_anchor = empty(); this.first = first; }, m(target, anchor) { insert(target, first, anchor); if (~current_block_type_index) { if_blocks[current_block_type_index].m(target, anchor); } insert(target, if_block_anchor, anchor); current = true; }, p(new_ctx, dirty) { ctx = new_ctx; let previous_block_index = current_block_type_index; current_block_type_index = select_block_type_1(ctx, dirty); if (current_block_type_index === previous_block_index) { if (~current_block_type_index) { if_blocks[current_block_type_index].p(ctx, dirty); } } else { if (if_block) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); } if (~current_block_type_index) { if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); if_block.c(); } else { if_block.p(ctx, dirty); } transition_in(if_block, 1); if_block.m(if_block_anchor.parentNode, if_block_anchor); } else { if_block = null; } } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(first); detach(if_block_anchor); } if (~current_block_type_index) { if_blocks[current_block_type_index].d(detaching); } } }; } function create_fragment109(ctx) { let div; let current_block_type_index; let if_block; let div_class_value; let current; let mounted; let dispose; const if_block_creators = [create_if_block30, create_else_block12]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*rules*/ ctx2[0].length === 0 ) return 0; return 1; } current_block_type_index = select_block_type(ctx, -1); if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); return { c() { div = element("div"); if_block.c(); attr(div, "class", div_class_value = null_to_empty("rules-list" + /*$dragState*/ (ctx[1]?.draggedRule ? " dragging" : "")) + " svelte-1se33m3"); }, m(target, anchor) { insert(target, div, anchor); if_blocks[current_block_type_index].m(div, null); current = true; if (!mounted) { dispose = listen( div, "mouseleave", /*resetDragState*/ ctx[7] ); mounted = true; } }, p(ctx2, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index === previous_block_index) { if_blocks[current_block_type_index].p(ctx2, dirty); } else { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { if_block.p(ctx2, dirty); } transition_in(if_block, 1); if_block.m(div, null); } if (!current || dirty & /*$dragState*/ 2 && div_class_value !== (div_class_value = null_to_empty("rules-list" + /*$dragState*/ (ctx2[1]?.draggedRule ? " dragging" : "")) + " svelte-1se33m3")) { attr(div, "class", div_class_value); } }, i(local) { if (current) return; transition_in(if_block); current = true; }, o(local) { transition_out(if_block); current = false; }, d(detaching) { if (detaching) { detach(div); } if_blocks[current_block_type_index].d(); mounted = false; dispose(); } }; } function instance106($$self, $$props, $$invalidate) { let $dragState; let $allMatches; let { rules } = $$props; const view = getView(); const allMatches = AllRuleMatchesStore(view); component_subscribe($$self, allMatches, (value) => $$invalidate(2, $allMatches = value)); const dragState = writable(null); component_subscribe($$self, dragState, (value) => $$invalidate(1, $dragState = value)); const setDraggedRule = (rule) => { dragState.update((dragState2) => { return { dropTarget: (dragState2 === null || dragState2 === void 0 ? void 0 : dragState2.dropTarget) || null, dropPosition: (dragState2 === null || dragState2 === void 0 ? void 0 : dragState2.dropPosition) || "before", draggedRule: rule }; }); }; const setDropTarget = (rule, position) => { dragState.update((dragState2) => { return { draggedRule: (dragState2 === null || dragState2 === void 0 ? void 0 : dragState2.draggedRule) || null, dropTarget: rule, dropPosition: position }; }); }; const resetDragState = () => { dragState.set(null); }; $$self.$$set = ($$props2) => { if ("rules" in $$props2) $$invalidate(0, rules = $$props2.rules); }; return [ rules, $dragState, $allMatches, allMatches, dragState, setDraggedRule, setDropTarget, resetDragState ]; } var Style_rules_list = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance106, create_fragment109, safe_not_equal, { rules: 0 }, add_css50); } }; var style_rules_list_default = Style_rules_list; // src/view/components/container/style-rules/components/style-rules-footer.svelte function add_css51(target) { append_styles(target, "svelte-n13666", ".modal-footer.svelte-n13666{width:100%;padding-bottom:10px;display:flex;justify-content:end}.add-rule.svelte-n13666{border:none;border-radius:4px;cursor:pointer;align-self:end;margin-right:10px;padding:8px}"); } function create_fragment110(ctx) { let div; let button; let mounted; let dispose; return { c() { div = element("div"); button = element("button"); button.textContent = `${lang.modals_rules_add_rule}`; attr(button, "class", "add-rule svelte-n13666"); attr(div, "class", "modal-footer svelte-n13666"); }, m(target, anchor) { insert(target, div, anchor); append(div, button); if (!mounted) { dispose = listen( button, "click", /*addRule*/ ctx[0] ); mounted = true; } }, p: noop, i: noop, o: noop, d(detaching) { if (detaching) { detach(div); } mounted = false; dispose(); } }; } function instance107($$self) { const view = getView(); const addRule = () => { var _a; const documentPath = (_a = view.file) === null || _a === void 0 ? void 0 : _a.path; view.plugin.settings.dispatch({ type: "settings/style-rules/add", payload: { documentPath } }); }; return [addRule]; } var Style_rules_footer = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance107, create_fragment110, safe_not_equal, {}, add_css51); } }; var style_rules_footer_default = Style_rules_footer; // src/view/components/container/shared/draggable-modal/draggable-modal.svelte function add_css52(target) { append_styles(target, "svelte-1l68k51", ".drag-handle.svelte-1l68k51.svelte-1l68k51{position:absolute;left:0;top:0;bottom:0;width:8px;cursor:grab;background-color:transparent;z-index:1}.lineage-modal.svelte-1l68k51:hover .drag-handle.svelte-1l68k51{background-size:2px 4px;background-image:linear-gradient(\n 0deg,\n hsla(0, 0%, 60%, 0.35) 20%,\n transparent 40%\n )}.drag-handle.svelte-1l68k51.svelte-1l68k51:active{cursor:grabbing}"); } function create_fragment111(ctx) { let div1; let div0; let t; let current; let mounted; let dispose; const default_slot_template = ( /*#slots*/ ctx[3].default ); const default_slot = create_slot( default_slot_template, ctx, /*$$scope*/ ctx[2], null ); return { c() { div1 = element("div"); div0 = element("div"); t = space(); if (default_slot) default_slot.c(); attr(div0, "class", "drag-handle svelte-1l68k51"); attr(div1, "class", "lineage-modal svelte-1l68k51"); set_style(div1, "transform", "translate(0px, 0px)"); }, m(target, anchor) { insert(target, div1, anchor); append(div1, div0); append(div1, t); if (default_slot) { default_slot.m(div1, null); } ctx[4](div1); current = true; if (!mounted) { dispose = listen( div0, "mousedown", /*startDrag*/ ctx[1] ); mounted = true; } }, p(ctx2, [dirty]) { if (default_slot) { if (default_slot.p && (!current || dirty & /*$$scope*/ 4)) { update_slot_base( default_slot, default_slot_template, ctx2, /*$$scope*/ ctx2[2], !current ? get_all_dirty_from_scope( /*$$scope*/ ctx2[2] ) : get_slot_changes( default_slot_template, /*$$scope*/ ctx2[2], dirty, null ), null ); } } }, i(local) { if (current) return; transition_in(default_slot, local); current = true; }, o(local) { transition_out(default_slot, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } if (default_slot) default_slot.d(detaching); ctx[4](null); mounted = false; dispose(); } }; } function instance108($$self, $$props, $$invalidate) { let { $$slots: slots = {}, $$scope } = $$props; let modal; let startX; let startY; let modalX = 0; let modalY = 0; let isDragging = false; const view = getView(); const container = view.contentEl; const startDrag = (event) => { isDragging = true; startX = event.clientX; startY = event.clientY; const computedStyle = getComputedStyle(modal); const transform = computedStyle.transform; if (transform && transform !== "none") { const matrix = transform.match(/matrix.*\((.+)\)/); if (matrix) { const [x, y] = matrix[1].split(", ").slice(4, 6).map(Number); modalX = x || 0; modalY = y || 0; } } container.addEventListener("mousemove", onDrag); container.addEventListener("mouseup", stopDrag); }; const onDrag = (event) => { if (!isDragging) return; modalX += event.clientX - startX; modalY += event.clientY - startY; startX = event.clientX; startY = event.clientY; $$invalidate(0, modal.style.transform = `translate(${modalX}px, ${modalY}px)`, modal); }; const stopDrag = () => { isDragging = false; container.removeEventListener("mousemove", onDrag); container.removeEventListener("mouseup", stopDrag); }; function div1_binding($$value) { binding_callbacks[$$value ? "unshift" : "push"](() => { modal = $$value; $$invalidate(0, modal); }); } $$self.$$set = ($$props2) => { if ("$$scope" in $$props2) $$invalidate(2, $$scope = $$props2.$$scope); }; return [modal, startDrag, $$scope, slots, div1_binding]; } var Draggable_modal = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance108, create_fragment111, safe_not_equal, {}, add_css52); } }; var draggable_modal_default = Draggable_modal; // src/view/components/container/style-rules/style-rules.svelte function add_css53(target) { append_styles(target, "svelte-rft3in", ".modal-content.svelte-rft3in{max-width:100%;height:230px;overflow:auto}"); } function create_default_slot58(ctx) { let div; let styleruleslist; let t; let stylerulesfooter; let current; styleruleslist = new style_rules_list_default({ props: { rules: ( /*$rulesStore*/ ctx[0] ) } }); stylerulesfooter = new style_rules_footer_default({}); return { c() { div = element("div"); create_component(styleruleslist.$$.fragment); t = space(); create_component(stylerulesfooter.$$.fragment); attr(div, "class", "modal-content svelte-rft3in"); }, m(target, anchor) { insert(target, div, anchor); mount_component(styleruleslist, div, null); insert(target, t, anchor); mount_component(stylerulesfooter, target, anchor); current = true; }, p(ctx2, dirty) { const styleruleslist_changes = {}; if (dirty & /*$rulesStore*/ 1) styleruleslist_changes.rules = /*$rulesStore*/ ctx2[0]; styleruleslist.$set(styleruleslist_changes); }, i(local) { if (current) return; transition_in(styleruleslist.$$.fragment, local); transition_in(stylerulesfooter.$$.fragment, local); current = true; }, o(local) { transition_out(styleruleslist.$$.fragment, local); transition_out(stylerulesfooter.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div); detach(t); } destroy_component(styleruleslist); destroy_component(stylerulesfooter, detaching); } }; } function create_fragment112(ctx) { let draggablemodal; let current; draggablemodal = new draggable_modal_default({ props: { $$slots: { default: [create_default_slot58] }, $$scope: { ctx } } }); return { c() { create_component(draggablemodal.$$.fragment); }, m(target, anchor) { mount_component(draggablemodal, target, anchor); current = true; }, p(ctx2, [dirty]) { const draggablemodal_changes = {}; if (dirty & /*$$scope, $rulesStore*/ 9) { draggablemodal_changes.$$scope = { dirty, ctx: ctx2 }; } draggablemodal.$set(draggablemodal_changes); }, i(local) { if (current) return; transition_in(draggablemodal.$$.fragment, local); current = true; }, o(local) { transition_out(draggablemodal.$$.fragment, local); current = false; }, d(detaching) { destroy_component(draggablemodal, detaching); } }; } function instance109($$self, $$props, $$invalidate) { let $rulesStore; const view = getView(); const rulesStore = DocumentStyleRulesStore(view); component_subscribe($$self, rulesStore, (value) => $$invalidate(0, $rulesStore = value)); return [$rulesStore, rulesStore]; } var Style_rules = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance109, create_fragment112, safe_not_equal, {}, add_css53); } }; var style_rules_default = Style_rules; // src/view/components/container/main.svelte function add_css54(target) { append_styles(target, "svelte-1g9h6to", ".lineage-main.svelte-1g9h6to{--z-index-breadcrumbs:10;display:flex;height:100%;flex:1 1 auto;width:0;position:relative}.lineage-view.svelte-1g9h6to{background-color:var(--background-container);display:flex;height:100%;width:100%}"); } function create_if_block_32(ctx) { let stylerules; let current; stylerules = new style_rules_default({}); return { c() { create_component(stylerules.$$.fragment); }, m(target, anchor) { mount_component(stylerules, target, anchor); current = true; }, i(local) { if (current) return; transition_in(stylerules.$$.fragment, local); current = true; }, o(local) { transition_out(stylerules.$$.fragment, local); current = false; }, d(detaching) { destroy_component(stylerules, detaching); } }; } function create_if_block_26(ctx) { let settings; let current; settings = new settings_default2({}); return { c() { create_component(settings.$$.fragment); }, m(target, anchor) { mount_component(settings, target, anchor); current = true; }, i(local) { if (current) return; transition_in(settings.$$.fragment, local); current = true; }, o(local) { transition_out(settings.$$.fragment, local); current = false; }, d(detaching) { destroy_component(settings, detaching); } }; } function create_if_block_112(ctx) { let hotkeys; let current; hotkeys = new hotkeys_default({}); return { c() { create_component(hotkeys.$$.fragment); }, m(target, anchor) { mount_component(hotkeys, target, anchor); current = true; }, i(local) { if (current) return; transition_in(hotkeys.$$.fragment, local); current = true; }, o(local) { transition_out(hotkeys.$$.fragment, local); current = false; }, d(detaching) { destroy_component(hotkeys, detaching); } }; } function create_if_block31(ctx) { let filehistory; let current; filehistory = new file_histoy_default({}); return { c() { create_component(filehistory.$$.fragment); }, m(target, anchor) { mount_component(filehistory, target, anchor); current = true; }, i(local) { if (current) return; transition_in(filehistory.$$.fragment, local); current = true; }, o(local) { transition_out(filehistory.$$.fragment, local); current = false; }, d(detaching) { destroy_component(filehistory, detaching); } }; } function create_fragment113(ctx) { let div1; let leftsidebar; let t0; let div0; let container; let t1; let toolbar; let t2; let breadcrumbs; let t3; let controlsbar; let t4; let current_block_type_index; let if_block; let t5; let dndedges; let div0_class_value; let mouseWheelZoom_action; let clickAndDrag_action; let t6; let rightsidebar; let viewHotkeysAction_action; let contextMenu_action; let current; let mounted; let dispose; leftsidebar = new left_sidebar_default({}); container = new container_wrapper_default({}); toolbar = new toolbar_default({}); breadcrumbs = new breadcrumbs_default({}); controlsbar = new controls_container_default({}); const if_block_creators = [create_if_block31, create_if_block_112, create_if_block_26, create_if_block_32]; const if_blocks = []; function select_block_type(ctx2, dirty) { if ( /*$controls*/ ctx2[1].showHistorySidebar ) return 0; if ( /*$controls*/ ctx2[1].showHelpSidebar ) return 1; if ( /*$controls*/ ctx2[1].showSettingsSidebar ) return 2; if ( /*$controls*/ ctx2[1].showStyleRulesModal ) return 3; return -1; } if (~(current_block_type_index = select_block_type(ctx, -1))) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); } dndedges = new dnd_edges_default({}); rightsidebar = new right_sidebar_default({}); return { c() { div1 = element("div"); create_component(leftsidebar.$$.fragment); t0 = space(); div0 = element("div"); create_component(container.$$.fragment); t1 = space(); create_component(toolbar.$$.fragment); t2 = space(); create_component(breadcrumbs.$$.fragment); t3 = space(); create_component(controlsbar.$$.fragment); t4 = space(); if (if_block) if_block.c(); t5 = space(); create_component(dndedges.$$.fragment); t6 = space(); create_component(rightsidebar.$$.fragment); attr(div0, "class", div0_class_value = null_to_empty(`lineage-main`) + " svelte-1g9h6to"); attr(div1, "class", "lineage-view svelte-1g9h6to"); attr(div1, "tabindex", "0"); }, m(target, anchor) { insert(target, div1, anchor); mount_component(leftsidebar, div1, null); append(div1, t0); append(div1, div0); mount_component(container, div0, null); append(div0, t1); mount_component(toolbar, div0, null); append(div0, t2); mount_component(breadcrumbs, div0, null); append(div0, t3); mount_component(controlsbar, div0, null); append(div0, t4); if (~current_block_type_index) { if_blocks[current_block_type_index].m(div0, null); } append(div0, t5); mount_component(dndedges, div0, null); append(div1, t6); mount_component(rightsidebar, div1, null); current = true; if (!mounted) { dispose = [ action_destroyer(mouseWheelZoom_action = mouseWheelZoom.call( null, div0, /*view*/ ctx[0] )), action_destroyer(clickAndDrag_action = clickAndDrag.call( null, div0, /*view*/ ctx[0] )), action_destroyer(viewHotkeysAction_action = viewHotkeysAction.call(null, div1, { view: ( /*view*/ ctx[0] ) })), action_destroyer(contextMenu_action = contextMenu.call( null, div1, /*view*/ ctx[0] )) ]; mounted = true; } }, p(ctx2, [dirty]) { let previous_block_index = current_block_type_index; current_block_type_index = select_block_type(ctx2, dirty); if (current_block_type_index !== previous_block_index) { if (if_block) { group_outros(); transition_out(if_blocks[previous_block_index], 1, 1, () => { if_blocks[previous_block_index] = null; }); check_outros(); } if (~current_block_type_index) { if_block = if_blocks[current_block_type_index]; if (!if_block) { if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx2); if_block.c(); } else { } transition_in(if_block, 1); if_block.m(div0, t5); } else { if_block = null; } } if (mouseWheelZoom_action && is_function(mouseWheelZoom_action.update) && dirty & /*view*/ 1) mouseWheelZoom_action.update.call( null, /*view*/ ctx2[0] ); if (clickAndDrag_action && is_function(clickAndDrag_action.update) && dirty & /*view*/ 1) clickAndDrag_action.update.call( null, /*view*/ ctx2[0] ); if (viewHotkeysAction_action && is_function(viewHotkeysAction_action.update) && dirty & /*view*/ 1) viewHotkeysAction_action.update.call(null, { view: ( /*view*/ ctx2[0] ) }); if (contextMenu_action && is_function(contextMenu_action.update) && dirty & /*view*/ 1) contextMenu_action.update.call( null, /*view*/ ctx2[0] ); }, i(local) { if (current) return; transition_in(leftsidebar.$$.fragment, local); transition_in(container.$$.fragment, local); transition_in(toolbar.$$.fragment, local); transition_in(breadcrumbs.$$.fragment, local); transition_in(controlsbar.$$.fragment, local); transition_in(if_block); transition_in(dndedges.$$.fragment, local); transition_in(rightsidebar.$$.fragment, local); current = true; }, o(local) { transition_out(leftsidebar.$$.fragment, local); transition_out(container.$$.fragment, local); transition_out(toolbar.$$.fragment, local); transition_out(breadcrumbs.$$.fragment, local); transition_out(controlsbar.$$.fragment, local); transition_out(if_block); transition_out(dndedges.$$.fragment, local); transition_out(rightsidebar.$$.fragment, local); current = false; }, d(detaching) { if (detaching) { detach(div1); } destroy_component(leftsidebar); destroy_component(container); destroy_component(toolbar); destroy_component(breadcrumbs); destroy_component(controlsbar); if (~current_block_type_index) { if_blocks[current_block_type_index].d(); } destroy_component(dndedges); destroy_component(rightsidebar); mounted = false; run_all(dispose); } }; } function instance110($$self, $$props, $$invalidate) { let $controls; let { plugin } = $$props; let { view } = $$props; setContext("plugin", plugin); setContext("view", view); const controls = uiControlsStore(view); component_subscribe($$self, controls, (value) => $$invalidate(1, $controls = value)); $$self.$$set = ($$props2) => { if ("plugin" in $$props2) $$invalidate(3, plugin = $$props2.plugin); if ("view" in $$props2) $$invalidate(0, view = $$props2.view); }; return [view, $controls, controls, plugin]; } var Main = class extends SvelteComponent { constructor(options) { super(); init(this, options, instance110, create_fragment113, safe_not_equal, { plugin: 3, view: 0 }, add_css54); } }; var main_default = Main; // src/lib/tree-utils/sort/sort-groups.ts var sortGroups = (parents, children2) => { const parentsIndices = Object.fromEntries( parents.map((x) => x.nodes).flat().map((x, i) => [x, i]) ); return children2.sort((a, b) => { return parentsIndices[a.parentId] - parentsIndices[b.parentId]; }); }; // src/lib/tree-utils/insert/insert-child.ts var insertChild = (document2, nodeIdOfParent, newNodeId, insertChildAtTheStart) => { const parentColumnIndex = findNodeColumn(document2.columns, nodeIdOfParent); if (parentColumnIndex === -1) { throw new Error("could not find parent column"); } const childColumnIndex = parentColumnIndex + 1; const childColumn = document2.columns[childColumnIndex]; if (childColumn) { const childGroup = childColumn.groups.find( (g) => g.parentId === nodeIdOfParent ); if (childGroup) { if (insertChildAtTheStart) { childGroup.nodes = [newNodeId, ...childGroup.nodes]; } else { childGroup.nodes = [...childGroup.nodes, newNodeId]; } } else { childColumn.groups.push({ nodes: [newNodeId], parentId: nodeIdOfParent }); childColumn.groups = [...childColumn.groups]; } childColumn.groups = sortGroups( document2.columns[parentColumnIndex].groups, childColumn.groups ); } else { document2.columns.push({ id: id.column(), groups: [ { nodes: [newNodeId], parentId: nodeIdOfParent } ] }); document2.columns = [...document2.columns]; } }; // src/lib/tree-utils/find/find-group-by-node-id.ts var findGroupByNodeId = (columns, nodeId) => { for (const column of columns) { for (const group of column.groups) { for (const _nodeId2 of group.nodes) { if (_nodeId2 === nodeId) return group; } } } }; var findGroupByParentId = (columns, parentId) => { for (const column of columns) { for (const group of column.groups) { if (group.parentId === parentId) { return { group, column }; } } } }; // src/stores/document/reducers/insert-node/insert-node.ts var insertNode = (document2, action, newNodeId = id.node()) => { const payload = action.payload; invariant(payload.activeNodeId); if (payload.position === "right") { insertChild( document2, payload.activeNodeId, newNodeId, !!action.payload.content ); } else { const columnIndex = findNodeColumn( document2.columns, payload.activeNodeId ); const column = document2.columns[columnIndex]; invariant(column); const group = findGroupByNodeId([column], payload.activeNodeId); invariant(group, "could not find group of " + payload.activeNodeId); const groupIndex = group.nodes.findIndex( (c) => c === payload.activeNodeId ); const insertionIndex = action.payload.position === "up" ? groupIndex : groupIndex + 1; group.nodes.splice(insertionIndex, 0, newNodeId); group.nodes = [...group.nodes]; } document2.content[newNodeId] = { content: action.payload.content || "" }; return newNodeId; }; // src/lib/tree-utils/find/find-child-group.ts var findChildGroup = (columns, node) => { for (const column of columns) { for (const group of column.groups) { if (group.parentId === node) { return group; } } } }; // src/lib/tree-utils/move/move-node-as-child.ts var moveNodeAsChild = (document2, node, targetNode, moveToTheStart) => { const targetGroup = findChildGroup(document2.columns, targetNode); if (targetGroup) { if (moveToTheStart) { targetGroup.nodes = [node, ...targetGroup.nodes]; } else { targetGroup.nodes = [...targetGroup.nodes, node]; } } else { const currentColumnIndex = findNodeColumn(document2.columns, targetNode); let targetColumn; targetColumn = document2.columns[currentColumnIndex + 1]; if (!targetColumn) { const newColumn = createColumn(); document2.columns.push(newColumn); document2.columns = [...document2.columns]; targetColumn = newColumn; } const newGroup = createGroup(targetNode); newGroup.nodes.push(node); targetColumn.groups.push(newGroup); targetColumn.groups = [...targetColumn.groups]; } }; // src/lib/tree-utils/move/move-node-as-sibling.ts var moveNodeAsSibling = (columns, direction, node, targetNode, adjacentGroup) => { const targetGroup = findGroupByNodeId(columns, targetNode); if (targetGroup) { let insertionIndex; if (adjacentGroup && adjacentGroup.parentId !== targetGroup.parentId) { if (direction === "down") { targetGroup.nodes.splice(0, 0, node); targetGroup.nodes = [...targetGroup.nodes]; } else if (direction === "up") { targetGroup.nodes.push(node); targetGroup.nodes = [...targetGroup.nodes]; } } else { direction = direction === "left" ? "down" : direction; const index = targetGroup.nodes.findIndex((n) => n === targetNode); insertionIndex = direction === "up" ? index : index + 1; targetGroup.nodes.splice(insertionIndex, 0, node); targetGroup.nodes = [...targetGroup.nodes]; } } }; // src/lib/tree-utils/move/move-child-groups-next-to-their-parent.ts var moveChildGroupsNextToTheirParent = (document2, parentNode) => { const sortedChildGroups = getSortedChildGroups( document2.columns, parentNode, true ); const parentColumnIndex = findNodeColumn(document2.columns, parentNode); for (let i = 0; i < sortedChildGroups.length; i++) { const groups = sortedChildGroups[i]; for (const group of groups) { const targetColumnIndex = parentColumnIndex + 1 + i; if (!document2.columns[targetColumnIndex]) { document2.columns.push({ id: id.column(), groups: [] }); document2.columns = [...document2.columns]; } document2.columns[targetColumnIndex].groups.push(group); document2.columns[targetColumnIndex].groups = [ ...document2.columns[targetColumnIndex].groups ]; } } }; // src/lib/tree-utils/move/change-node-position.ts var changeNodePosition = (document2, node, targetNode, direction, type, moveChildToTheStart) => { const group = findGroupByNodeId(document2.columns, node); invariant(group); deleteNodeById(document2.columns, null, node); if (direction === "right") { moveNodeAsChild(document2, node, targetNode, moveChildToTheStart); } else { moveNodeAsSibling( document2.columns, direction, node, targetNode, type === "move" && direction !== "left" ? group : void 0 ); } moveChildGroupsNextToTheirParent(document2, node); }; // src/lib/tree-utils/sort/clean-and-sort-columns.ts var cleanAndSortColumns = (document2) => { const emptyColumns = /* @__PURE__ */ new Set(); for (let i = 1; i < document2.columns.length; i++) { const column = document2.columns[i]; column.groups = column.groups.filter((g) => g.nodes.length > 0); if (column.groups.length === 0) { emptyColumns.add(column.id); } } for (const emptyColumn of emptyColumns) { const i = document2.columns.findIndex((c) => c.id === emptyColumn); if (i > 0) { document2.columns.splice(i, 1); document2.columns = [...document2.columns]; } } for (let i = 1; i < document2.columns.length; i++) { const column = document2.columns[i]; if (column.groups.length) { const previousColumn = document2.columns[i - 1]; if (column.groups.length > 0) { column.groups = sortGroups( previousColumn.groups, column.groups ); } } } }; // src/stores/document/reducers/drop-node/drop-node.ts var dropNode = (document2, action) => { const droppedNode = action.payload.droppedNodeId; const targetNode = action.payload.targetNodeId; invariant(droppedNode); invariant(targetNode); changeNodePosition( document2, droppedNode, targetNode, action.payload.position, "drop", false ); cleanAndSortColumns(document2); }; // src/lib/data-conversion/json-to-x/json-to-columns.ts var groupsCache = {}; var findGroup2 = (column, parentId) => { if (!groupsCache[parentId]) { groupsCache[parentId] = column.groups.find( (g) => g.parentId === parentId ); } return groupsCache[parentId]; }; var jsonToColumns = (tree, parentId = id.rootNode(), columns = [], content = {}, level2 = 0) => { for (const treeNode of tree) { const node = id.node(); content[node] = { content: treeNode.content }; if (!columns[level2]) { columns.push(createColumn()); } const column = columns[level2]; let group; group = findGroup2(column, parentId); if (!group) { group = createGroup(parentId); column.groups.push(group); } group.nodes.push(node); if (treeNode.children.length > 0) { jsonToColumns(treeNode.children, node, columns, content, level2 + 1); } } return { content, columns }; }; // src/lib/tree-utils/insert/insert-first-node.ts var insertFirstNode = (columns, content) => { if (columns.length === 0) { const rootId = id.rootNode(); const createdNode = id.node(); content[createdNode] = { content: "" }; columns.push({ id: id.column(), groups: [ { parentId: rootId, nodes: [createdNode] } ] }); } }; // src/stores/document/reducers/load-document-from-file/load-document-from-file.ts var loadDocumentFromFile = (state2, action) => { const tree = action.payload.format === "outline" ? outlineToJson(action.payload.document.data) : action.payload.format === "html-element" ? htmlElementToJson(action.payload.document.data) : htmlCommentToJson(action.payload.document.data); const document2 = jsonToColumns(tree); state2.document.columns = document2.columns; state2.document.content = document2.content; const emptyTree = tree.length === 0; if (emptyTree) { insertFirstNode(state2.document.columns, state2.document.content); } if (action.type === "DOCUMENT/LOAD_FILE") state2.file.frontmatter = action.payload.document.frontmatter; const activeNode = state2.document.columns[0].groups[0].nodes[0]; invariant(activeNode); return activeNode; }; // src/stores/document/reducers/content/set-node-content.ts var setNodeContent = (content, action) => { const nodeContent = content[action.payload.nodeId]; const contentString = nodeContent?.content || ""; if (contentString === action.payload.content) return false; const nodeId = action.payload.nodeId; if (!nodeContent) content[nodeId] = { content: action.payload.content }; else nodeContent.content = action.payload.content; return true; }; // src/lib/tree-utils/delete/delete-groups-by-parent-id.ts var deleteGroupsByParentId = (columns, content, parentIds) => { for (const column of columns) { const groups = []; for (const group of column.groups) { if (parentIds.has(group.parentId)) { for (const node of group.nodes) { delete content[node]; } } else { groups.push(group); } } column.groups = groups; } }; // src/lib/tree-utils/delete/delete-child-nodes.ts var deleteChildNodes = (document2, node) => { const childGroups = traverseDown(document2.columns, node, false); if (childGroups.length > 0) deleteGroupsByParentId( document2.columns, document2.content, new Set(childGroups) ); }; // src/lib/tree-utils/assert/is-last-root-node.ts var isLastRootNode = (columns, node) => { const column = columns[0]; if (node && column.groups.length === 1) { const group = column.groups[0]; if (group.nodes.length === 1 && group.nodes[0] === node) return true; } return false; }; // src/lib/tree-utils/find/find-next-node-after-deletion.ts var findNextNodeAfterDeletion = (columns, node) => { let nextNode = null; const group = findGroupByNodeId(columns, node); const columnIndex = findNodeColumn(columns, node); const column = columns[columnIndex]; if (group) { const nodeIndex = group.nodes.findIndex((n) => n === node); if (nodeIndex === 0) nextNode = group.nodes[1]; else if (nodeIndex > 0) nextNode = group.nodes[nodeIndex - 1]; else nextNode = group.nodes[group.nodes.length - 1]; } if (!nextNode) { if (group && columnIndex > 0) nextNode = group?.parentId; else nextNode = column.groups[0].nodes[0]; } return nextNode; }; // src/lib/tree-utils/find/find-node-to-jump-to.ts var findNodeToJumpTo = (columns, node, target) => { const columnIndex = findNodeColumn(columns, node); const column = columns[columnIndex]; if (target === "start-of-column") { return column.groups[0].nodes[0]; } else if (target === "end-of-column") { const nodeGroup = column.groups[column.groups.length - 1]; return nodeGroup.nodes[nodeGroup.nodes.length - 1]; } else { const group = column.groups.find((g) => g.nodes.includes(node)); if (group) { if (target === "start-of-group") return group.nodes[0]; else if (target === "end-of-group") { return group.nodes[group.nodes.length - 1]; } } } }; // src/lib/tree-utils/find/find-next-active-node.ts var findNextActiveNode = (columns, node, action) => { if (action.type === "DOCUMENT/DELETE_NODE") { return findNextNodeAfterDeletion(columns, node); } else if (action.type === "DOCUMENT/JUMP_TO_NODE") { return findNodeToJumpTo(columns, node, action.payload.target); } }; // src/stores/document/reducers/delete-node/delete-node.ts var deleteNode2 = (document2, nodeId, selectedNodes) => { invariant(nodeId); const isSelection = selectedNodes && selectedNodes.size > 1; const nodes = isSelection ? [...selectedNodes] : [nodeId]; let nextNode = void 0; for (const nodeId2 of nodes) { const lastNode = isLastRootNode(document2.columns, nodeId2); if (lastNode) { if (isSelection) break; else throw new Error(lang.error_delete_last_node); } nextNode = findNextActiveNode(document2.columns, nodeId2, { type: "DOCUMENT/DELETE_NODE", payload: { activeNodeId: nodeId2 } }); invariant(nextNode); deleteChildNodes(document2, nodeId2); deleteNodeById(document2.columns, document2.content, nodeId2); cleanAndSortColumns(document2); } invariant(nextNode); return nextNode; }; // src/lib/tree-utils/find/find-sibling-node-in-group.ts var findSiblingNodeInGroup = (columns, node, direction) => { const group = findGroupByNodeId(columns, node); invariant(group); const nodeIndex = group.nodes.findIndex((n) => n === node); return group.nodes[nodeIndex + (direction === "up" ? -1 : 1)]; }; // src/lib/tree-utils/find/find-sibling-node.ts var findSiblingNode = (columns, node, direction) => { return findSiblingNodeInGroup( columns, node, direction === "right" ? "up" : direction ); }; // src/lib/tree-utils/find/find-adjacent-node.ts var findAdjacentNode = (columns, nodeToMove, direction) => { let targetNode = null; if (direction === "left") { const group = findGroupByNodeId(columns, nodeToMove); if (group && !group.parentId.startsWith("r")) targetNode = group.parentId; } else { targetNode = findSiblingNode(columns, nodeToMove, direction); } if (!targetNode && direction === "right") { const columnIndex = findNodeColumn(columns, nodeToMove); const isFirstNodeOfColumn = columns[columnIndex].groups[0]?.nodes[0] === nodeToMove; if (isFirstNodeOfColumn) { targetNode = findSiblingNode(columns, nodeToMove, "down"); } } return targetNode; }; // src/lib/tree-utils/find/find-adjacent-node-of-selection.ts var findAdjacentNodeOfSelection = (document2, activeNodeId, selectedNodes, direction) => { const searchColumns = clone(document2.columns); if (selectedNodes && selectedNodes.size > 1) { const column = searchColumns[findNodeColumn(searchColumns, activeNodeId)]; invariant(column); for (const group of column.groups) { group.nodes = group.nodes.filter( (n) => n === activeNodeId || !selectedNodes?.has(n) ); } } return findAdjacentNode(searchColumns, activeNodeId, direction); }; // src/lib/tree-utils/find/find-node-column-and-parent.ts var findNodeColumnAndParent = (columns, nodeId) => { for (let i = 0; i < columns.length; i++) { const column = columns[i]; for (const group of column.groups) { for (const node of group.nodes) { if (node === nodeId) { return [i, group.parentId]; } } } } return null; }; // src/lib/tree-utils/find/find-adjacent-parent.ts var findAdjacentParent = (columns, nodeToMove, direction) => { const [columnIndex, parentId] = findNodeColumnAndParent( columns, nodeToMove ); if (columnIndex > 0) { return findSiblingNode(columns, parentId, direction); } return null; }; // src/stores/document/reducers/move-node/move-node.ts var moveNode2 = (document2, action) => { const selectedNodes = action.payload.selectedNodes; const isSelection = selectedNodes && selectedNodes.size > 1; const nodes = isSelection ? [...selectedNodes] : [action.payload.activeNodeId]; let direction = action.payload.direction; const shouldReverseOrder = isSelection && (direction === "down" || direction === "left"); if (shouldReverseOrder) nodes.reverse(); invariant(action.payload.activeNodeId); let targetNode = isSelection ? findAdjacentNodeOfSelection( document2, action.payload.activeNodeId, selectedNodes, direction ) : findAdjacentNode( document2.columns, action.payload.activeNodeId, direction ); let moveNodeToTheStart = false; if (!targetNode && (direction === "down" || direction === "up")) { targetNode = findAdjacentParent( document2.columns, action.payload.activeNodeId, direction ); moveNodeToTheStart = direction === "down"; direction = "right"; } if (!targetNode) throw new SilentError("could not find adjacent node"); for (const nodeToMove of nodes) { changeNodePosition( document2, nodeToMove, targetNode, direction, "move", moveNodeToTheStart ); cleanAndSortColumns(document2); } }; // src/lib/tree-utils/find/find-sibling-node-in-column.ts var findSiblingNodeInColumn = (columns, node, direction) => { const columnIndex = findNodeColumn(columns, node); const column = columns[columnIndex]; const flatColumn = column.groups.map((g) => g.nodes).flat(); const nodeIndex = flatColumn.findIndex((n) => n === node); return flatColumn[nodeIndex + (direction === "up" ? -1 : 1)]; }; // src/lib/tree-utils/move/move-orphan-groups-to-a-new-parent.ts var moveOrphanGroupsToANewParent = (document2, currentParentNode, newParentNode, direction) => { const groupOfMergedNode = findGroupByParentId( document2.columns, currentParentNode ); if (!groupOfMergedNode) return; groupOfMergedNode.column.groups = groupOfMergedNode.column.groups.filter( (g) => g.parentId !== groupOfMergedNode.group.parentId ); const parentColumnIndex = findNodeColumn(document2.columns, newParentNode); const targetColumnIndex = parentColumnIndex + 1; const existingGroupOfNewParent = findGroupByParentId( document2.columns, newParentNode ); if (existingGroupOfNewParent) { if (direction === "up") existingGroupOfNewParent.group.nodes = [ ...existingGroupOfNewParent.group.nodes, ...groupOfMergedNode.group.nodes ]; else { existingGroupOfNewParent.group.nodes = [ ...groupOfMergedNode.group.nodes, ...existingGroupOfNewParent.group.nodes ]; } } else { if (!document2.columns[targetColumnIndex]) { document2.columns.push({ id: id.column(), groups: [] }); document2.columns = [...document2.columns]; } groupOfMergedNode.group.parentId = newParentNode; document2.columns[targetColumnIndex].groups.push( groupOfMergedNode.group ); document2.columns[targetColumnIndex].groups = [ ...document2.columns[targetColumnIndex].groups ]; } }; // src/stores/document/reducers/merge-node/merge-node.ts var mergeNode2 = (document2, action) => { const mergedNode = action.payload.activeNodeId; const adjacentNode = findSiblingNodeInColumn( document2.columns, mergedNode, action.payload.direction ); invariant(mergedNode, "merged node is undefined"); if (!adjacentNode) throw new SilentError("could not find adjacent node"); const mergedNodeContent = document2.content[mergedNode] || { content: "" }; const adjacentNodeContent = document2.content[adjacentNode] || { content: "" }; let newContent = ""; if (action.payload.direction === "up") { newContent = (adjacentNodeContent.content + "\n" + mergedNodeContent.content).trim(); } else if (action.payload.direction === "down") { newContent = (mergedNodeContent.content + "\n" + adjacentNodeContent.content).trim(); } if (newContent) { const adjacentNodeContentObject = document2.content[adjacentNode]; if (adjacentNodeContentObject) { adjacentNodeContentObject.content = newContent; } else { document2.content[adjacentNode] = { content: newContent }; } } moveOrphanGroupsToANewParent( document2, mergedNode, adjacentNode, action.payload.direction ); deleteNodeById(document2.columns, document2.content, mergedNode); cleanAndSortColumns(document2); return adjacentNode; }; // src/stores/document/reducers/history/helpers/update-navigation-state.ts var updateNavigationState = (document2) => { const activeIndex = document2.state.activeIndex; document2.state.canGoBack = activeIndex > 0; document2.state.canGoForward = activeIndex < document2.items.length - 1; }; // src/stores/document/reducers/history/helpers/create-snapshot.ts var createSnapshot = (document2, context) => { return { data: { columns: JSON.stringify(document2.columns), content: JSON.stringify(document2.content) }, context, created: Date.now(), id: id.snapshot() }; }; // src/stores/document/reducers/history/helpers/remove-old-history-items.ts var removeOldHistoryItems = (history, MAX_ITEMS) => { if (history.items.length >= MAX_ITEMS) { const numSnapshotsToRemove = history.items.length - MAX_ITEMS + 1; history.items.splice(0, numSnapshotsToRemove); const activeItem = history.items[history.state.activeIndex]; history.state.activeIndex = history.items.findIndex( (item) => item === activeItem ); } }; // src/stores/document/reducers/history/helpers/remove-obsolete-history-items.ts var removeObsoleteHistoryItems = (history) => { if (history.items.length > 0 && history.state.activeIndex !== history.items.length - 1) { history.items.splice(history.state.activeIndex + 1); } }; // src/stores/document/reducers/history/add-snapshot.ts var addSnapshot = (document2, history, context) => { const items = history.items; const activeIndex = history.state.activeIndex; const activeSnapshot = items[activeIndex]; removeObsoleteHistoryItems(history); removeOldHistoryItems(history, 50); if (activeSnapshot && context.action.type === "DOCUMENT/LOAD_FILE") { const snapshotContent = JSON.stringify( Object.values(JSON.parse(activeSnapshot.data.content)) ); const documentContent = JSON.stringify(Object.values(document2.content)); if (snapshotContent === documentContent) { history.items.splice(history.state.activeIndex, 1); } } const snapshot = createSnapshot(document2, context); items.push(snapshot); history.state.activeIndex = items.length - 1; history.context.activeSection = context.newActiveSection; updateNavigationState(history); }; // src/stores/document/reducers/history/helpers/find-snapshot-index.ts var findSnapshotIndex = (snapshots, id2) => { if (!id2) return -1; return snapshots.findIndex((snapshot) => snapshot.id === id2); }; // src/stores/document/reducers/history/helpers/load-document-from-snapshot.ts var loadDocumentFromSnapshot = (document2, snapshot, history) => { history.context.activeSection = snapshot.context.newActiveSection; document2.content = JSON.parse(snapshot.data.content); document2.columns = JSON.parse(snapshot.data.columns); }; // src/stores/document/reducers/history/select-snapshot.ts var selectSnapshot = (document2, history, action) => { const index = findSnapshotIndex(history.items, action.payload.snapshotId); if (index !== -1) { history.state.activeIndex = index; updateNavigationState(history); const snapshot = history.items[index]; loadDocumentFromSnapshot(document2, snapshot, history); } }; // src/stores/document/reducers/history/undo-action.ts var undoAction = (document2, history) => { const currentIndex = history.state.activeIndex; const newIndex = currentIndex - 1; const snapshot = history.items[newIndex]; if (!snapshot) return; history.state.activeIndex = newIndex; updateNavigationState(history); loadDocumentFromSnapshot(document2, snapshot, history); }; // src/stores/view/helpers/get-document-event-type.ts var contentEvents = /* @__PURE__ */ new Set([ "DOCUMENT/SET_NODE_CONTENT", "DOCUMENT/FORMAT_HEADINGS" ]); var createAndDelete = /* @__PURE__ */ new Set([ "DOCUMENT/INSERT_NODE", "DOCUMENT/DELETE_NODE", "DOCUMENT/MERGE_NODE", "DOCUMENT/LOAD_FILE", "DOCUMENT/EXTRACT_BRANCH", "DOCUMENT/SPLIT_NODE" ]); var dropAndMoveEvents = /* @__PURE__ */ new Set([ "DOCUMENT/DROP_NODE", "DOCUMENT/MOVE_NODE" ]); var historyEvents = /* @__PURE__ */ new Set([ "HISTORY/APPLY_NEXT_SNAPSHOT", "HISTORY/APPLY_PREVIOUS_SNAPSHOT", "HISTORY/SELECT_SNAPSHOT" ]); var clipboardEvents = /* @__PURE__ */ new Set([ "DOCUMENT/PASTE_NODE", "DOCUMENT/CUT_NODE" ]); var cachedResults = {}; var getDocumentEventType = (type) => { if (cachedResults[type]) { return cachedResults[type]; } let result = null; if (contentEvents.has(type)) result = { content: true }; else if (createAndDelete.has(type)) result = { createOrDelete: true }; else if (dropAndMoveEvents.has(type)) result = { dropOrMove: true }; else if (historyEvents.has(type)) result = { changeHistory: true }; else if (clipboardEvents.has(type)) result = { clipboard: true }; if (!result) result = {}; cachedResults[type] = result; return result; }; // src/stores/document/reducers/history/redo-action.ts var redoAction = (document2, history) => { const currentIndex = history.state.activeIndex; const nexIndex = currentIndex + 1; const snapshot = history.items[nexIndex]; if (!snapshot) return; history.state.activeIndex = nexIndex; updateNavigationState(history); loadDocumentFromSnapshot(document2, snapshot, history); }; // src/stores/document/default-document-state.ts var defaultDocumentState = () => ({ document: { columns: [], content: {} }, sections: { id_section: {}, section_id: {} }, file: { path: null, frontmatter: "" }, history: { items: [], state: { activeIndex: -1, canGoBack: false, canGoForward: false }, context: { activeSection: "" } }, pinnedNodes: { Ids: [] }, meta: { groupParentIds: /* @__PURE__ */ new Set() } }); // src/stores/document/reducers/content/format-content/helpers/format-headings.ts var formatHeadings = (content, treeIndexDict) => { for (const nodeId in content) { const currentContent = content[nodeId]?.content; if (!currentContent) continue; const sectionNumber = treeIndexDict[nodeId]; if (!sectionNumber) continue; const depth = sectionNumber.split(".").length; const symbol = `${"#".repeat(Math.min(depth, 6))} `; const lines = currentContent.split("\n"); const updatedLines = lines.map((line) => { const match = /^#+ /.exec(line); if (match) { return line.replace(match[0], symbol); } return line; }); content[nodeId] = { content: updatedLines.join("\n") }; } }; // src/stores/document/reducers/content/format-content/format-headings.ts var formatHeadings2 = (content, sections) => { formatHeadings(content, sections.id_section); }; // src/stores/document/reducers/clipboard/paste-node/helpers/past-child-groups.ts var pastChildGroups = (document2, branch) => { const parentColumnIndex = findNodeColumn(document2.columns, branch.nodeId); if (parentColumnIndex === -1) throw new Error("could not find cut node"); for (let i = 0; i < branch.sortedChildGroups.length; i++) { const groups = branch.sortedChildGroups[i]; for (const group of groups) { const targetColumnIndex = parentColumnIndex + 1 + i; if (!document2.columns[targetColumnIndex]) { document2.columns.push({ id: id.column(), groups: [] }); document2.columns = [...document2.columns]; } for (const node of group.nodes) { if (node in branch.content) { document2.content[node] = branch.content[node]; } } document2.columns[targetColumnIndex].groups.push(group); document2.columns[targetColumnIndex].groups = [ ...document2.columns[targetColumnIndex].groups ]; } } }; // src/lib/format-detection/has-n-html-comment-marker.ts var hasNHtmlCommentMarker = (input, n = 2) => { const lines = input.split("\n"); let count = 0; for (const line of lines) { if (parseHtmlCommentMarker(line)) { count++; if (count >= n) return true; } } return false; }; // src/lib/format-detection/has-n-bullet-list-items.ts var hasNBulletListItems = (input, n = 2) => { const lines = input.split("\n"); let count = 0; for (const line of lines) { if (/^(\t*)- (.+)/.test(line)) { count++; if (count >= n) return true; } } return false; }; // src/lib/format-detection/has-n-html-element-markers.ts var hasNHtmlElementMarker = (input, n = 2) => { const lines = input.split("\n"); let count = 0; for (const line of lines) { if (parseHtmlElementMarker(line)) { count++; if (count >= n) return true; } } return false; }; // src/lib/format-detection/detect-document-format.ts var detectDocumentFormat = (text2, strict = true) => { const { data } = extractFrontmatter(text2); if (hasNHtmlCommentMarker(data, 1)) return "sections"; if (hasNHtmlElementMarker(data, 1)) return "html-element"; if (isOutline(data)) return "outline"; if (!strict) { if (hasNBulletListItems(text2, 1)) return "outline"; } }; // src/stores/document/reducers/clipboard/paste-node/helpers/text-to-branches.ts var textToBranches = (text2) => { const detectedFormat = detectDocumentFormat(text2, false); const tree = text2.trim().length > 0 ? detectedFormat === "outline" ? outlineToJson(text2) : detectedFormat === "html-element" ? htmlElementToJson(text2) : htmlCommentToJson(text2) : [{ children: [], content: "" }]; const document2 = jsonToColumns(tree); const branches = []; for (const nodeId of document2.columns[0].groups[0].nodes) { const branch = getBranch( document2.columns, document2.content, nodeId, "copy" ); branches.push(branch); } return branches; }; // src/stores/document/reducers/clipboard/paste-node/paste-node.ts var pasteNode2 = (document2, action) => { const branches = textToBranches(action.payload.text); const nextNode = branches[branches.length - 1].nodeId; const targetNode = action.payload.targetNodeId; const position = action.payload.position || "down"; for (const branch of branches.reverse()) { insertNode( document2, { payload: { activeNodeId: targetNode, position, content: branch.content[branch.nodeId]?.content } }, branch.nodeId ); pastChildGroups(document2, branch); } cleanAndSortColumns(document2); invariant(nextNode); return { nextNode, rootNodes: branches.map((b) => b.nodeId) }; }; // src/stores/view/subscriptions/helpers/calculate-tree-index.ts var calculateColumnTreeIndexes = (columns) => { const sections = { id_section: {}, section_id: {} }; if (columns.length === 0) return sections; for (let nI = 0; nI < columns[0].groups[0].nodes.length; nI++) { const node = columns[0].groups[0].nodes[nI]; const section = String(nI + 1); sections.id_section[node] = section; sections.section_id[section] = node; } for (let cI = 1; cI < columns.length; cI++) { const column = columns[cI]; for (let gI = 0; gI < column.groups.length; gI++) { const group = column.groups[gI]; for (let nI = 0; nI < group.nodes.length; nI++) { const node = group.nodes[nI]; const section = sections.id_section[group.parentId] + "." + (nI + 1); sections.id_section[node] = section; sections.section_id[section] = node; } } } return sections; }; // src/stores/document/reducers/state/update-sections-dictionary.ts var updateSectionsDictionary = (state2) => { state2.sections = calculateColumnTreeIndexes(state2.document.columns); }; // src/stores/view/subscriptions/helpers/get-id-of-section.ts var getIdOfSection = (sections, section) => { const id2 = sections.section_id[section]; invariant(id2); return id2; }; // src/stores/document/reducers/extract-node/remove-extracted-branch.ts var removeExtractedBranch = (document2, action) => { invariant(action.payload.nodeId); invariant(action.payload.documentName); deleteChildNodes(document2, action.payload.nodeId); cleanAndSortColumns(document2); }; // src/stores/view/subscriptions/helpers/get-section-of-id.ts var getSectionOfId = (sections, nodeId) => { const section = sections.id_section[nodeId]; invariant(section); return section; }; // src/stores/document/reducers/split-node/split-node.ts var splitNode = (document2, action) => { const targetNode = action.payload.target; const content = document2.content[targetNode]; if (!content?.content) throw new SilentError("empty node"); const sections = splitText(content?.content, action.payload.mode); if (sections === content.content) throw new Error(lang.error_cm_cant_split_card_identical); const childGroup = findChildGroup(document2.columns, targetNode); if (childGroup) throw new Error(lang.error_cm_cant_split_card_that_has_children); const result = pasteNode2(document2, { payload: { position: "down", targetNodeId: targetNode, text: sections } }); deleteNode2(document2, targetNode); return result.nextNode; }; // src/stores/document/reducers/pinned-nodes/unpin-node.ts var unpinNode = (pinnedNodes, id2) => { pinnedNodes.Ids = pinnedNodes.Ids.filter((_id) => _id !== id2); }; // src/stores/document/reducers/pinned-nodes/remove-stale-pinned-nodes.ts var removeStalePinnedNodes = (pinnedNodes, sections) => { pinnedNodes.Ids = pinnedNodes.Ids.filter((id2) => sections.id_section[id2]); pinnedNodes.Ids = sortNodeIdsBySectionNumber(sections, pinnedNodes.Ids); }; // src/stores/document/reducers/pinned-nodes/load-pinned-nodes.ts var loadPinnedNodes = (pinnedNodes, sections, pinnedSections) => { pinnedNodes.Ids = pinnedSections.map((section) => sections.section_id[section]).filter((x) => x); }; // src/stores/document/reducers/meta/refresh-group-parent-ids.ts var refreshGroupParentIds = (columns, meta) => { const groupParentIds = /* @__PURE__ */ new Set(); for (const column of columns) { for (const group of column.groups) { groupParentIds.add(group.parentId); } } meta.groupParentIds = groupParentIds; }; // src/stores/document/reducers/load-document-from-file/load-document-from-json.ts var loadDocumentFromJSON = (state2, document2) => { state2.document.columns = document2.columns; state2.document.content = document2.content; const activeNode = state2.document.columns[0].groups[0].nodes[0]; invariant(activeNode); return activeNode; }; // src/stores/document/document-reducer.ts var updateDocumentState2 = (state2, action) => { let newActiveNodeId = null; let affectedNodeId = null; let affectedNodeContent = null; let affectedNodes = void 0; if (action.type === "DOCUMENT/SET_NODE_CONTENT") { const update2 = setNodeContent(state2.document.content, action); if (!update2) return NO_UPDATE; newActiveNodeId = action.payload.nodeId; } else if (action.type === "DOCUMENT/INSERT_NODE") { newActiveNodeId = insertNode(state2.document, action); } else if (action.type === "DOCUMENT/DELETE_NODE") { affectedNodeContent = state2.document.content[action.payload.activeNodeId]; newActiveNodeId = deleteNode2( state2.document, action.payload.activeNodeId, action.payload.selectedNodes ); affectedNodeId = action.payload.activeNodeId; } else if (action.type === "DOCUMENT/EXTRACT_BRANCH") { affectedNodeContent = state2.document.content[action.payload.nodeId]; const update2 = setNodeContent(state2.document.content, { payload: { nodeId: action.payload.nodeId, content: `[[${action.payload.documentName}]]` } }); if (!update2) return NO_UPDATE; removeExtractedBranch(state2.document, action); newActiveNodeId = action.payload.nodeId; } else if (action.type === "DOCUMENT/SPLIT_NODE") { affectedNodeId = action.payload.target; affectedNodeContent = state2.document.content[affectedNodeId]; newActiveNodeId = splitNode(state2.document, action); } else if (action.type === "DOCUMENT/DROP_NODE") { dropNode(state2.document, action); newActiveNodeId = action.payload.droppedNodeId; } else if (action.type === "DOCUMENT/MOVE_NODE") { moveNode2(state2.document, action); newActiveNodeId = action.payload.activeNodeId; affectedNodeId = newActiveNodeId; } else if (action.type === "DOCUMENT/MERGE_NODE") { affectedNodeContent = state2.document.content[action.payload.activeNodeId]; newActiveNodeId = mergeNode2(state2.document, action); affectedNodeId = action.payload.activeNodeId; } else if (action.type === "DOCUMENT/LOAD_FILE") { if (action.payload.__test_document__) { newActiveNodeId = loadDocumentFromJSON( state2, action.payload.__test_document__ ); } else { newActiveNodeId = loadDocumentFromFile(state2, action); } } else if (action.type === "RESET_STORE") { const newState = defaultDocumentState(); state2.document = newState.document; state2.history = newState.history; state2.file = newState.file; } else if (action.type === "HISTORY/SELECT_SNAPSHOT") { selectSnapshot(state2.document, state2.history, action); state2.history = { ...state2.history }; } else if (action.type === "HISTORY/APPLY_PREVIOUS_SNAPSHOT") { undoAction(state2.document, state2.history); state2.history = { ...state2.history }; } else if (action.type === "HISTORY/APPLY_NEXT_SNAPSHOT") { redoAction(state2.document, state2.history); state2.history = { ...state2.history }; } else if (action.type === "FS/SET_FILE_PATH") { state2.file.path = action.payload.path; } else if (action.type === "DOCUMENT/FORMAT_HEADINGS") { formatHeadings2(state2.document.content, state2.sections); newActiveNodeId = getIdOfSection( state2.sections, state2.history.context.activeSection ); } else if (action.type === "DOCUMENT/PASTE_NODE") { const result = pasteNode2(state2.document, action); newActiveNodeId = result.nextNode; affectedNodes = result.rootNodes; } else if (action.type === "DOCUMENT/CUT_NODE") { affectedNodeContent = state2.document.content[action.payload.nodeId]; newActiveNodeId = deleteNode2( state2.document, action.payload.nodeId, action.payload.selectedNodes ); affectedNodeId = action.payload.nodeId; } else if (action.type === "FILE/UPDATE_FRONTMATTER") { state2.file.frontmatter = action.payload.frontmatter; return; } else if (action.type === "document/pinned-nodes/pin") { pinNode(state2.sections, state2.pinnedNodes, action.payload.id); return; } else if (action.type === "document/pinned-nodes/unpin") { unpinNode(state2.pinnedNodes, action.payload.id); return; } else if (action.type === "document/pinned-nodes/remove-stale-nodes") { removeStalePinnedNodes(state2.pinnedNodes, state2.sections); return; } else if (action.type === "document/pinned-nodes/load-from-settings") { loadPinnedNodes( state2.pinnedNodes, state2.sections, action.payload.sections ); return; } else if (action.type === "META/REFRESH_GROUP_PARENT_IDS") { refreshGroupParentIds(state2.document.columns, state2.meta); return; } const e = getDocumentEventType(action.type); let affectedSection = null; if (affectedNodeId) { affectedSection = getSectionOfId(state2.sections, affectedNodeId); } if (e.dropOrMove || e.createOrDelete || e.changeHistory || e.clipboard) { updateSectionsDictionary(state2); } if (action.type === "DOCUMENT/LOAD_FILE") { const activeSection = action.payload.activeSection; if (activeSection) { const id2 = state2.sections.section_id[activeSection]; if (id2) { newActiveNodeId = id2; } } } const contentShapeCreation = e.content || e.dropOrMove || e.createOrDelete; if (newActiveNodeId && (contentShapeCreation || e.clipboard)) { const newActiveSection = getSectionOfId( state2.sections, newActiveNodeId ); affectedNodeId = affectedNodeId || newActiveNodeId; affectedNodeContent = affectedNodeContent || state2.document.content[affectedNodeId]; const context = { numberOfSections: Object.keys(state2.document.content).length, affectedSection: affectedSection || newActiveSection, newActiveSection, action, contentOfAffectedSection: affectedNodeContent?.content?.substring(0, 300) || "", numberOfCharacters: Object.values(state2.document.content).map((x) => x.content.length).reduce((acc, v) => acc + v), affectedSections: affectedNodes ? affectedNodes.map((id2) => state2.sections.id_section[id2]) : void 0 }; addSnapshot(state2.document, state2.history, context); state2.history = { ...state2.history }; } }; var documentReducer = (store, action) => { const result = updateDocumentState2(store, action); if (result === NO_UPDATE) return NO_UPDATE; return store; }; // src/stores/view/default-view-state.ts var defaultViewState = () => ({ search: { query: "", results: /* @__PURE__ */ new Set(), searching: false, showInput: false, fuzzySearch: false, showAllNodes: true }, ui: { controls: { showHistorySidebar: false, showHelpSidebar: false, showSettingsSidebar: false, showStyleRulesModal: false } }, document: { editing: { activeNodeId: "", isInSidebar: false }, activeBranch: { group: "", childGroups: /* @__PURE__ */ new Set(), sortedParentNodes: [], column: "", node: "" }, dnd: { node: "", childGroups: /* @__PURE__ */ new Set() }, activeNode: "", activeNodesOfColumn: {}, selectedNodes: /* @__PURE__ */ new Set(), pendingConfirmation: { disableEdit: null, deleteNode: /* @__PURE__ */ new Set() } }, navigationHistory: { items: [], state: { activeIndex: -1, canGoBack: false, canGoForward: false }, context: void 0 }, pinnedNodes: { activeNode: "" }, recentNodes: { activeNode: "" }, styleRules: { nodeStyles: /* @__PURE__ */ new Map(), allMatches: /* @__PURE__ */ new Map() }, keyboard: { shift: false }, hotkeys: { searchTerm: "", conflictingHotkeys: /* @__PURE__ */ new Map() }, outline: { collapsedParents: /* @__PURE__ */ new Set(), hiddenNodes: /* @__PURE__ */ new Set() } }); // src/stores/view/reducers/search/set-search-query.ts var setSearchQuery = (state2, query) => { state2.search.query = query; if (!query) state2.search.results = /* @__PURE__ */ new Set(); state2.search.searching = query.length > 0; state2.search = { ...state2.search }; }; // src/stores/view/reducers/search/set-search-results.ts var setSearchResults = (state2, results) => { state2.search.results = new Set(results); state2.search.searching = false; state2.search = { ...state2.search }; }; // src/stores/view/reducers/search/toggle-search-input.ts var toggleSearchInput = (state2) => { state2.search.showInput = !state2.search.showInput; if (!state2.search.showInput) { setSearchQuery(state2, ""); } state2.search = { ...state2.search }; }; // src/stores/view/reducers/document/reset-pending-confirmation.ts var resetPendingConfirmation = (state2) => { state2.pendingConfirmation = { disableEdit: null, deleteNode: /* @__PURE__ */ new Set() }; }; // src/stores/view/reducers/document/enable-edit-mode.ts var enableEditMode = (state2, nodeId, isInSidebar = false) => { if (state2.editing.activeNodeId) { if (state2.editing.activeNodeId === nodeId) { throw new Error( `This card is being edited in the ${state2.editing.isInSidebar ? "sidebar" : "main view"}` ); } } state2.editing = { activeNodeId: nodeId, isInSidebar }; resetPendingConfirmation(state2); }; // src/stores/view/reducers/document/disable-edit-mode.ts var disableEditMode = (state2) => { state2.editing = { activeNodeId: "", isInSidebar: false }; resetPendingConfirmation(state2); }; // src/stores/view/reducers/document/on-drag-start.ts var onDragStart = (state2, action) => { const node = action.payload.nodeId; if (node) { state2.dnd = { node: action.payload.nodeId, childGroups: new Set(action.payload.childGroups) }; } }; // src/stores/view/reducers/document/on-drag-end.ts var onDragEnd = (state2) => { state2.dnd = { node: "", childGroups: /* @__PURE__ */ new Set() }; }; // src/lib/tree-utils/get/traverse-up.ts var traverseUp = (columns, nodeId) => { const parentIds = []; const columnAndParent = findNodeColumnAndParent(columns, nodeId); if (!columnAndParent) return parentIds; let currentParentId = columnAndParent[1]; const nodeColumnIndex = columnAndParent[0]; for (let i = nodeColumnIndex - 1; i >= 0; i--) { if (!currentParentId) break; parentIds.push(currentParentId); let nextParentId; for (const group of columns[i].groups) { for (const node of group.nodes) { if (node === currentParentId) { nextParentId = group.parentId; break; } } if (nextParentId) break; } currentParentId = nextParentId; } return parentIds; }; // src/stores/view/reducers/document/helpers/remove-stale-active-nodes.ts var removeStaleActiveNodes = (columns, activeNodes) => { const result = {}; const columnMap = /* @__PURE__ */ new Map(); const groupMap = /* @__PURE__ */ new Map(); const nodeMap = /* @__PURE__ */ new Map(); for (const column of columns) { const groupSet = /* @__PURE__ */ new Set(); columnMap.set(column.id, column); for (const group of column.groups) { groupSet.add(group.parentId); nodeMap.set(group.parentId, new Set(group.nodes)); } groupMap.set(column.id, groupSet); } for (const [columnId, groupEntries] of Object.entries(activeNodes)) { if (!columnMap.has(columnId)) continue; const validGroups = groupMap.get(columnId); const cleanedGroups = {}; for (const [groupId, nodeId] of Object.entries(groupEntries)) { if (!validGroups.has(groupId)) continue; const validNodes = nodeMap.get(groupId); if (!validNodes?.has(nodeId)) continue; cleanedGroups[groupId] = nodeId; } if (Object.keys(cleanedGroups).length > 0) { result[columnId] = cleanedGroups; } } return result; }; // src/stores/view/reducers/document/helpers/update-active-branch.ts var updateActiveBranch = (state2, columns, changeType) => { if (!state2.activeNode) return; const sortedParents = traverseUp(columns, state2.activeNode).reverse(); const childGroups = traverseDown(columns, state2.activeNode, true); const group = findGroupByNodeId(columns, state2.activeNode); if (!group) throw new Error("could not find group for node " + state2.activeNode); const columnId = columns[findNodeColumn(columns, state2.activeNode)].id; const needsUpdate = state2.activeNode !== state2.activeBranch.node || childGroups.length !== state2.activeBranch.childGroups.size || sortedParents.length !== state2.activeBranch.sortedParentNodes.length || group.parentId !== state2.activeBranch.group || columnId !== state2.activeBranch.column || childGroups.some( (group2) => !state2.activeBranch.childGroups.has(group2) ) || sortedParents.some( (node, i) => node !== state2.activeBranch.sortedParentNodes[i] ); if (needsUpdate) { state2.activeBranch = { childGroups: new Set(childGroups), sortedParentNodes: sortedParents, group: group.parentId, column: columnId, node: state2.activeNode }; } if (!state2.activeNodesOfColumn[columnId]) state2.activeNodesOfColumn[columnId] = {}; state2.activeNodesOfColumn[columnId][group.parentId] = state2.activeNode; if (changeType === "structure") { state2.activeNodesOfColumn = removeStaleActiveNodes( columns, state2.activeNodesOfColumn ); } }; // src/stores/view/reducers/ui/helpers/add-navigation-history-item.ts var addNavigationHistoryItem = (state2, nodeId) => { if (!nodeId) return; removeObsoleteHistoryItems(state2.navigationHistory); removeOldHistoryItems(state2.navigationHistory, 100); const activeItem = state2.navigationHistory.items[state2.navigationHistory.items.length - 1]; if (activeItem !== nodeId) { state2.navigationHistory.items.push(nodeId); } state2.navigationHistory.state.activeIndex = state2.navigationHistory.items.length - 1; updateNavigationState(state2.navigationHistory); state2.navigationHistory = { ...state2.navigationHistory }; }; // src/stores/view/reducers/document/helpers/update-active-node.ts var updateActiveNode = (documentState, nodeId, state2) => { documentState.activeNode = nodeId; if (state2) addNavigationHistoryItem(state2, documentState.activeNode); const activeNodeId = documentState.editing.activeNodeId; if (activeNodeId !== nodeId || documentState.editing.isInSidebar) disableEditMode(documentState); resetPendingConfirmation(documentState); }; // src/lib/tree-utils/find/find-next-active-node-on-keyboard-navigation.ts var filterHiddenGroups = (columns, collapsedParents) => { return columns.map((c) => { return { groups: c.groups.filter((g) => { return !collapsedParents.has(g.parentId); }), id: c.id }; }); }; var findNextActiveNodeOnKeyboardNavigation = (columns, node, direction, activeNodeOfGroup, collapsedParents, isSelecting = false) => { if (!node) return; let nextNode = null; if (collapsedParents) { columns = filterHiddenGroups(columns, collapsedParents); } if (direction === "left") { const group = findGroupByNodeId(columns, node); if (group && !group.parentId.startsWith("r")) nextNode = group.parentId; } else if (direction === "right") { const group = findChildGroup(columns, node); if (group) { const columnIndex = findNodeColumn(columns, node); const nextColumn = columns[columnIndex + 1]; if (!nextColumn) return; const activeNode = activeNodeOfGroup[nextColumn.id]?.[group.parentId]; if (activeNode) nextNode = activeNode; else nextNode = group.nodes[0]; } } else { const columnIndex = findNodeColumn(columns, node); const column = columns[columnIndex]; if (!column) return; const outlineMode = Boolean(collapsedParents); const groupOfActiveNode = findGroupByNodeId(columns, node); const allNodes = outlineMode ? groupOfActiveNode.nodes : column.groups.map((g) => g.nodes).flat(); const nodeIndex = allNodes.findIndex((n) => n === node); const parentId = columnIndex > 0 ? groupOfActiveNode.parentId : null; if (outlineMode) { if (direction === "up") { if (nodeIndex > 0) { nextNode = allNodes[nodeIndex - 1]; } else if (nodeIndex === 0 && !isSelecting) { return parentId; } } else if (direction === "down") { if (nodeIndex < allNodes.length - 1) { nextNode = allNodes[nodeIndex + 1]; } else if (nodeIndex === allNodes.length - 1 && parentId && !isSelecting) { const groupOfParentNode = findGroupByNodeId( columns, parentId ); if (groupOfParentNode) { const parentIndex = groupOfParentNode.nodes.findIndex( (n) => n === parentId ); nextNode = groupOfParentNode.nodes[parentIndex + 1]; } } } } else { if (direction === "up") { if (nodeIndex > 0) { nextNode = allNodes[nodeIndex - 1]; } } else if (direction === "down") { if (nodeIndex < allNodes.length - 1) { nextNode = allNodes[nodeIndex + 1]; } } } } return nextNode; }; // src/stores/view/reducers/document/helpers/update-selected-nodes.ts var updateSelectedNodes = (column, selectedNodes, previousActiveNode, newActiveNode) => { const allNodeIds = column.groups.flatMap((group) => group.nodes); const previousActiveNodeIndex = allNodeIds.indexOf(previousActiveNode); if (previousActiveNodeIndex === -1) return; const currentSelectionIsEmpty = selectedNodes.size === 0; const lowestSelectedNodeIndex = currentSelectionIsEmpty ? previousActiveNodeIndex : allNodeIds.findIndex((nodeId) => selectedNodes.has(nodeId)); const highestSelectedNodeIndex = currentSelectionIsEmpty ? previousActiveNodeIndex : allNodeIds.findLastIndex((nodeId) => selectedNodes.has(nodeId)); const newActiveNodeIndex = allNodeIds.indexOf(newActiveNode); if (newActiveNodeIndex === -1) return; let mode = null; if (newActiveNodeIndex - previousActiveNodeIndex > 1) { mode = "jump_down" /* jump_down */; } else if (previousActiveNodeIndex - newActiveNodeIndex > 1) { mode = "jump_up" /* jump_up */; } else if (previousActiveNodeIndex === lowestSelectedNodeIndex) mode = "step_from_top" /* step_from_top */; else if (previousActiveNodeIndex === highestSelectedNodeIndex) mode = "step_from_bottom" /* step_from_bottom */; const goingUp = previousActiveNodeIndex > newActiveNodeIndex; selectedNodes.clear(); if (!mode) return; let startIndex = 0, endIndex = 0; if (currentSelectionIsEmpty) { if (goingUp) { startIndex = newActiveNodeIndex; endIndex = previousActiveNodeIndex; } else { startIndex = previousActiveNodeIndex; endIndex = newActiveNodeIndex; } } else if (mode === "jump_down" /* jump_down */) { startIndex = previousActiveNodeIndex; endIndex = newActiveNodeIndex; } else if (mode === "jump_up" /* jump_up */) { startIndex = newActiveNodeIndex; endIndex = previousActiveNodeIndex; } else if (mode === "step_from_top" /* step_from_top */) { startIndex = newActiveNodeIndex; endIndex = highestSelectedNodeIndex; } else if (mode === "step_from_bottom" /* step_from_bottom */) { startIndex = lowestSelectedNodeIndex; endIndex = newActiveNodeIndex; } if (startIndex === endIndex) return; for (let i = startIndex; i <= endIndex; i++) { selectedNodes.add(allNodeIds[i]); } }; // src/stores/view/reducers/document/helpers/reset-selection-state.ts var resetSelectionState = (documentState) => { documentState.selectedNodes = /* @__PURE__ */ new Set(); }; // src/stores/view/reducers/document/helpers/update-selection-state.ts var updateSelectionState = (documentState, nextNode, action) => { const isJump = action.type === "DOCUMENT/JUMP_TO_NODE"; const isVerticalStep = action.type === "DOCUMENT/NAVIGATE_USING_KEYBOARD" && (action.payload.direction === "up" || action.payload.direction === "down"); if (action.context?.shiftKey && (isJump || isVerticalStep)) { const columnIndex = findNodeColumn(action.payload.columns, nextNode); const column = action.payload.columns[columnIndex]; invariant(column); updateSelectedNodes( column, documentState.selectedNodes, documentState.activeNode, nextNode ); documentState.selectedNodes = new Set(documentState.selectedNodes); } else { resetSelectionState(documentState); } }; // src/stores/view/reducers/document/navigate-using-keyboard.ts var navigateUsingKeyboard = (documentState, state2, action) => { const nextNode = findNextActiveNodeOnKeyboardNavigation( action.payload.columns, documentState.activeNode, action.payload.direction, documentState.activeNodesOfColumn, action.context.outlineMode ? state2.outline.collapsedParents : null, action.context.shiftKey ); if (nextNode) { updateSelectionState(documentState, nextNode, action); updateActiveNode(documentState, nextNode, state2); } }; // src/stores/view/reducers/ui/navigate-active-node-history.ts var navigateActiveNodeHistory = (documentState, state2, forward = false) => { const activeIndex = state2.navigationHistory.state.activeIndex; const newIndex = forward ? activeIndex + 1 : activeIndex - 1; const newItem = state2.navigationHistory.items[newIndex]; if (newItem) { state2.navigationHistory.state.activeIndex = newIndex; updateNavigationState(state2.navigationHistory); state2.navigationHistory = { ...state2.navigationHistory }; updateActiveNode(documentState, newItem, null); state2.recentNodes.activeNode = newItem; } }; // src/stores/view/reducers/document/jump-to-node.ts var jumpToNode = (documentViewState, state2, action) => { const nextNode = findNextActiveNode( action.payload.columns, documentViewState.activeNode, action ); if (nextNode) { updateSelectionState(documentViewState, nextNode, action); updateActiveNode(documentViewState, nextNode, state2); } }; // src/stores/view/reducers/ui/helpers/remove-deleted-navigation-items.ts var removeDeletedNavigationItems = (state2, content) => { const items = []; let previous = null; for (const item of state2.navigationHistory.items) { if (content.hasOwnProperty(item) && item !== previous) { items.push(item); previous = item; } } state2.navigationHistory.items = items; state2.navigationHistory.state.activeIndex = state2.navigationHistory.items.length - 1; updateNavigationState(state2.navigationHistory); state2.navigationHistory = { ...state2.navigationHistory }; }; // src/stores/view/reducers/search/toggle-fuzzy-search.ts var toggleFuzzySearch = (state2) => { state2.search.fuzzySearch = !state2.search.fuzzySearch; state2.search = { ...state2.search }; }; // src/lib/tree-utils/find/find-next-node.ts var findNextNode = (sections, node, direction, hiddenNodes) => { let sortedSections = sortSections(Object.keys(sections.section_id)); if (hiddenNodes) { sortedSections = sortedSections.filter( (section) => !hiddenNodes.has(sections.section_id[section]) ); } const currentSection = sections.id_section[node]; const currentSectionIndex = sortedSections.findIndex( (section) => currentSection === section ); if (currentSectionIndex === -1) return node; const nextSectionIndex = currentSectionIndex + (direction === "back" ? -1 : 1); const nextSection = sortedSections[nextSectionIndex]; return sections.section_id[nextSection] || node; }; // src/stores/view/reducers/ui/navigate-active-node.ts var navigateActiveNode = (documentState, state2, action) => { const nextNode = findNextNode( action.payload.sections, documentState.activeNode, action.payload.direction, action.context.outlineMode ? state2.outline.hiddenNodes : null ); if (nextNode && nextNode !== documentState.activeNode) updateActiveNode(documentState, nextNode, state2); }; // src/stores/view/reducers/pinned-cards/set-active-pinned-node.ts var setActivePinnedNode = (documentState, state2, id2) => { state2.activeNode = id2; const activePinnedNodeIsBeingEdited = documentState.editing.activeNodeId === id2; const editedNodeIsInSidebar = documentState.editing.isInSidebar; if (!(activePinnedNodeIsBeingEdited && editedNodeIsInSidebar)) { disableEditMode(documentState); } }; // src/stores/view/reducers/recent-nodes/set-active-recent-node.ts var setActiveRecentNode = (documentState, state2, id2) => { state2.activeNode = id2; const activeNodeIsBeingEdited = documentState.editing.activeNodeId === id2; const editedNodeIsInSidebar = documentState.editing.isInSidebar; if (!(activeNodeIsBeingEdited && editedNodeIsInSidebar)) { disableEditMode(documentState); } }; // src/stores/view/reducers/search/toggle-show-all-nodes.ts var toggleShowAllNodes = (state2) => { state2.search.showAllNodes = !state2.search.showAllNodes; state2.search = { ...state2.search }; }; // src/stores/view/reducers/outline/helpers/collapse-node.ts var collapseNode = (state2, columns, id2) => { const children2 = getAllChildren(columns, id2); state2.outline.collapsedParents.add(id2); for (const child of children2) { state2.outline.hiddenNodes.add(child); } }; // src/stores/view/reducers/outline/helpers/expand-node.ts var expandNode = (state2, columns, id2) => { state2.outline.collapsedParents.delete(id2); const children2 = getAllChildren(columns, id2); if (children2.length > 0) { for (const child of children2) { state2.outline.hiddenNodes.delete(child); } const childrenSet = new Set(children2); const collapsedParents = Array.from( state2.outline.collapsedParents ).filter((id3) => childrenSet.has(id3)); for (const collapsedParent of collapsedParents) { const children3 = getAllChildren(columns, collapsedParent); for (const child of children3) { state2.outline.hiddenNodes.add(child); } } } }; // src/stores/view/reducers/outline/toggle-collapse-node.ts var toggleCollapseNode = (state2, columns, id2) => { const isCollapsed = state2.outline.collapsedParents.has(id2); if (isCollapsed) { expandNode(state2, columns, id2); } else { collapseNode(state2, columns, id2); } state2.outline = { ...state2.outline }; }; // src/stores/view/reducers/outline/expand-parents-of-active-node.ts var expandParentsOfActiveNode = (state2, columns) => { const parents = state2.document.activeBranch.sortedParentNodes; for (const parent of parents) { if (state2.outline.collapsedParents.has(parent)) { expandNode(state2, columns, parent); } } }; // src/stores/view/reducers/outline/refresh-collapsed-nodes.ts var refreshCollapsedNodes = (state2, columns) => { const collapsedParents = Array.from(state2.outline.collapsedParents); state2.outline.collapsedParents.clear(); state2.outline.hiddenNodes.clear(); for (const id2 of collapsedParents) { expandNode(state2, columns, id2); collapseNode(state2, columns, id2); } expandParentsOfActiveNode(state2, columns); state2.outline = { ...state2.outline }; }; // src/stores/view/reducers/outline/toggle-collapse-all-nodes.ts var toggleCollapseAllNodes = (state2, columns) => { const column = columns[0]; if (!column) return; const rootNode = column.groups[0].parentId; const parents = traverseDown(columns, rootNode, true).filter( (id2) => id2 !== rootNode ); const hasCollapsedNodes = state2.outline.hiddenNodes.size > 0; state2.outline.collapsedParents.clear(); state2.outline.hiddenNodes.clear(); if (hasCollapsedNodes) { for (const id2 of parents) { expandNode(state2, columns, id2); } } else { for (const id2 of parents) { collapseNode(state2, columns, id2); } } state2.outline = { ...state2.outline }; }; // src/stores/view/view-reducer.ts var updateDocumentState3 = (state2, action) => { if (action.type === "view/set-active-node/mouse" || action.type === "view/set-active-node/mouse-silent" || action.type === "view/set-active-node/document" || action.type === "view/set-active-node/search") { updateActiveNode(state2.document, action.payload.id, state2); } else if (action.type === "DOCUMENT/NAVIGATE_USING_KEYBOARD") { navigateUsingKeyboard(state2.document, state2, action); } else if (action.type === "SEARCH/SET_QUERY") { setSearchQuery(state2, action.payload.query); } else if (action.type === "SEARCH/SET_RESULTS") { setSearchResults(state2, action.payload.results); } else if (action.type === "SEARCH/TOGGLE_INPUT") { toggleSearchInput(state2); } else if (action.type === "UI/TOGGLE_HISTORY_SIDEBAR") { const showHistorySidebar = state2.ui.controls.showHistorySidebar; state2.ui.controls = { showHistorySidebar: !showHistorySidebar, showHelpSidebar: false, showSettingsSidebar: false, showStyleRulesModal: false }; } else if (action.type === "UI/TOGGLE_HELP_SIDEBAR") { const showHelpSidebar = state2.ui.controls.showHelpSidebar; state2.ui.controls = { showHistorySidebar: false, showHelpSidebar: !showHelpSidebar, showSettingsSidebar: false, showStyleRulesModal: false }; } else if (action.type === "UI/TOGGLE_SETTINGS_SIDEBAR") { const showSettingsSidebar = state2.ui.controls.showSettingsSidebar; state2.ui.controls = { showHistorySidebar: false, showHelpSidebar: false, showSettingsSidebar: !showSettingsSidebar, showStyleRulesModal: false }; } else if (action.type === "CLOSE_MODALS") { state2.ui.controls = { showHistorySidebar: false, showHelpSidebar: action.payload?.closeAllModals ? false : state2.ui.controls.showHelpSidebar, showSettingsSidebar: false, showStyleRulesModal: false }; } else if (action.type === "view/main/enable-edit") { if (state2.document.activeNode !== action.payload.nodeId) { updateActiveNode(state2.document, action.payload.nodeId, state2); } enableEditMode(state2.document, action.payload.nodeId); } else if (action.type === "view/sidebar/enable-edit") { if (action.context.activeSidebarTab === "pinned-cards") { if (state2.pinnedNodes.activeNode !== action.payload.id) { setActivePinnedNode( state2.document, state2.pinnedNodes, action.payload.id ); } } else if (action.context.activeSidebarTab === "recent-cards") { if (state2.recentNodes.activeNode !== action.payload.id) { setActiveRecentNode( state2.document, state2.recentNodes, action.payload.id ); } } enableEditMode(state2.document, action.payload.id, true); } else if (action.type === "view/confirmation/reset/disable-edit") { resetPendingConfirmation(state2.document); } else if (action.type === "view/confirmation/reset/delete-node") { resetPendingConfirmation(state2.document); } else if (action.type === "view/confirmation/confirm/delete-node") { state2.document.pendingConfirmation = { ...state2.document.pendingConfirmation, deleteNode: action.payload.includeSelection && state2.document.selectedNodes.size > 1 ? new Set(state2.document.selectedNodes) : /* @__PURE__ */ new Set([action.payload.id]) }; } else if (action.type === "view/confirmation/confirm/disable-edit") { state2.document.pendingConfirmation = { ...state2.document.pendingConfirmation, disableEdit: action.payload.id }; } else if (action.type === "view/main/disable-edit" || action.type === "view/sidebar/disable-edit") { disableEditMode(state2.document); } else if (action.type === "SET_DRAG_STARTED") { onDragStart(state2.document, action); } else if (action.type === "DOCUMENT/SET_DRAG_ENDED") { onDragEnd(state2.document); } else if (action.type === "UPDATE_ACTIVE_BRANCH") { updateActiveBranch( state2.document, action.payload.columns, action.context.changeType ); } else if (action.type === "NAVIGATION/NAVIGATE_FORWARD") { navigateActiveNodeHistory(state2.document, state2, true); } else if (action.type === "NAVIGATION/NAVIGATE_BACK") { navigateActiveNodeHistory(state2.document, state2); } else if (action.type === "DOCUMENT/JUMP_TO_NODE") { jumpToNode(state2.document, state2, action); } else if (action.type === "NAVIGATION/REMOVE_OBSOLETE") { removeDeletedNavigationItems(state2, action.payload.content); } else if (action.type === "SEARCH/TOGGLE_FUZZY_MODE") { toggleFuzzySearch(state2); } else if (action.type === "DOCUMENT/CLEAR_SELECTION") { resetSelectionState(state2.document); } else if (action.type === "NAVIGATION/SELECT_NEXT_NODE") { navigateActiveNode(state2.document, state2, action); } else if (action.type === "view/pinned-nodes/set-active-node") { setActivePinnedNode( state2.document, state2.pinnedNodes, action.payload.id ); } else if (action.type === "view/recent-nodes/set-active-node") { setActiveRecentNode( state2.document, state2.recentNodes, action.payload.id ); } else if (action.type === "search/toggle-show-all-nodes") { toggleShowAllNodes(state2); } else if (action.type === "view/modals/toggle-style-rules") { const showStyleRulesModal = state2.ui.controls.showStyleRulesModal; state2.ui.controls = { showHistorySidebar: false, showStyleRulesModal: !showStyleRulesModal, showSettingsSidebar: false, showHelpSidebar: false }; } else if (action.type === "view/style-rules/update-results") { if (!action.payload.results) { state2.styleRules.nodeStyles = /* @__PURE__ */ new Map(); state2.styleRules.allMatches = /* @__PURE__ */ new Map(); } else { state2.styleRules.nodeStyles = action.payload.results.nodeStyles; state2.styleRules.allMatches = action.payload.results.allMatches; } } else if (action.type === "view/keyboard/shift/up") { state2.keyboard.shift = false; state2.keyboard = { ...state2.keyboard }; } else if (action.type === "view/keyboard/shift/down") { state2.keyboard.shift = true; state2.keyboard = { ...state2.keyboard }; } else if (action.type === "view/hotkeys/set-search-term") { state2.hotkeys.searchTerm = action.payload.searchTerm.toLowerCase(); } else if (action.type === "view/hotkeys/update-conflicts") { state2.hotkeys.conflictingHotkeys = action.payload.conflicts; } else if (action.type === "view/outline/toggle-collapse-node") { toggleCollapseNode(state2, action.payload.columns, action.payload.id); } else if (action.type === "view/outline/refresh-collapsed-nodes") { refreshCollapsedNodes(state2, action.payload.columns); } else if (action.type === "view/outline/toggle-collapse-all") { toggleCollapseAllNodes(state2, action.payload.columns); } else if (action.type === "view/selection/set-selection") { state2.document.selectedNodes = new Set(action.payload.ids); } else if (action.type === "view/persisted-state/load-persisted-collapsed-parents") { for (const id2 of action.payload.collapsedIds) { collapseNode(state2, action.context.columns, id2); } expandParentsOfActiveNode(state2, action.context.columns); state2.outline = { ...state2.outline }; } }; var viewReducer = (store, action) => { updateDocumentState3(store, action); return store; }; // src/stores/view/subscriptions/actions/update-active-branch.ts var updateActiveBranch2 = (viewStore, documentState, changeType) => { viewStore.dispatch({ type: "UPDATE_ACTIVE_BRANCH", payload: { columns: documentState.document.columns }, context: { changeType } }); }; // src/stores/view/subscriptions/helpers/is-empty-document.ts var isEmptyDocument = (content) => { const values = Object.values(content); return values.length === 1 && values[0].content === ""; }; // src/stores/view/subscriptions/actions/enable-edit-mode.ts var enableEditMode2 = (viewStore, documentState) => { viewStore.dispatch({ type: "view/main/enable-edit", payload: { nodeId: getIdOfSection( documentState.sections, documentState.history.context.activeSection ) } }); }; // src/stores/view/subscriptions/effects/css-variables/apply-font-size.ts var applyFontSize = (view, fontSize) => { if (fontSize) view.containerEl.style.setProperty("--font-text-size", `${fontSize}px`); else view.containerEl.style.removeProperty("--font-text-size"); }; // src/stores/view/subscriptions/effects/css-variables/helpers/css-variables.ts var cssVariables = { colors: { activeBranchBg: "--background-active-parent", activeBranchColor: "--color-active-parent", containerBg: "--background-container" }, cardWidth: "--node-width", cardIndentationWidth: "--node-indentation-width", nodeGap: "--node-gap-setting", minCardHeight: "--min-node-height", zoomLevel: "--zoom-level", viewWidth: "--view-width", viewHeight: "--view-height", inactiveCardOpacity: "--inactive-card-opacity" }; // src/stores/view/subscriptions/effects/css-variables/apply-css-color.ts var applyCssColor = (view, name) => { const target = view.contentEl; const settings = view.plugin.settings.getValue(); const color = settings.view.theme[name]; if (color) { target.style.setProperty(cssVariables.colors[name], color); } else { target.style.removeProperty(cssVariables.colors[name]); } }; // src/stores/view/subscriptions/effects/css-variables/apply-card-width.ts var BORDER_WIDTH = 5; var applyCardWidth = (view, width) => { invariant(width); view.containerEl.style.setProperty( cssVariables.cardWidth, `${width - BORDER_WIDTH}px` ); }; // src/stores/view/subscriptions/effects/css-variables/apply-zoom-level.ts var applyZoomLevel = (view, value) => { if (typeof value !== "number") return; view.containerEl.style.setProperty(cssVariables.zoomLevel, `${value}`); }; // src/stores/view/subscriptions/helpers/maybe-get-id-of-section.ts var maybeGetIdOfSection = (sections, section) => { return sections.section_id[section] || null; }; // src/stores/view/subscriptions/actions/view/set-initial-active-node.ts var setInitialActiveNode = (view) => { let id2 = null; const viewStore = view.viewStore; const documentState = view.documentStore.getValue(); const settings = view.plugin.settings.getValue(); const path = view.file.path; const persistedSection = settings.documents[path]?.activeSection; const sections = documentState.sections; if (persistedSection) { id2 = maybeGetIdOfSection(sections, persistedSection); } const mostRecentActiveSection = documentState.history.context.activeSection; if (!id2 && mostRecentActiveSection) { id2 = maybeGetIdOfSection(sections, mostRecentActiveSection); } if (!id2) return; viewStore.dispatch({ type: "view/set-active-node/document", payload: { id: id2 } }); }; // src/stores/view/subscriptions/effects/mark-unresolved-links/mark-unresolved-links.ts var import_obsidian30 = require("obsidian"); // src/stores/view/subscriptions/effects/mark-unresolved-links/helpers/filter-non-existent-links.ts var filterNonExistentLinks = (plugin, links, filePath) => { return links.map((link) => link.link.split("#")[0]).filter( (link) => !plugin.app.metadataCache.getFirstLinkpathDest(link, filePath) ); }; // src/stores/view/subscriptions/effects/mark-unresolved-links/helpers/get-non-existent-links.ts var getNonExistentLinks = (plugin, file) => { const cache = plugin.app.metadataCache.getFileCache(file); if (!cache?.links) { return /* @__PURE__ */ new Set(); } const nonExistentLinks = filterNonExistentLinks( plugin, cache.links, file.path ); return new Set(nonExistentLinks); }; // src/stores/view/subscriptions/effects/mark-unresolved-links/helpers/get-file-link-elements.ts var getFileLinkElements = (view) => { return Array.from( view.contentEl.querySelectorAll(".internal-link") ); }; // src/stores/view/subscriptions/effects/mark-unresolved-links/mark-unresolved-links.ts var markUnresolvedLinks = (view) => { const file = view.file; if (!file) return; const nonExistentLinks = getNonExistentLinks(view.plugin, file); const links = getFileLinkElements(view); for (const link of links) { const isUnresolved = link.dataset.href && nonExistentLinks.has(link.dataset.href.split("#")[0]); const hasUnresolvedClass = link.hasClass("is-unresolved" /* unresolved */); if (isUnresolved) { if (!hasUnresolvedClass) { link.addClass("is-unresolved" /* unresolved */); } } else if (hasUnresolvedClass) { link.removeClass("is-unresolved" /* unresolved */); } } }; var debounced = (0, import_obsidian30.debounce)(markUnresolvedLinks, 100); // src/stores/view/subscriptions/event-listeners/attach-hover-preview-listener.ts var getLink = (el) => { return el.getAttr("data-href") || el.getAttr("href"); }; var attachHoverPreviewListener = (view) => { view.plugin.registerDomEvent(view.contentEl, "mouseover", (evt) => { if (!(isMacLike ? evt.metaKey : evt.ctrlKey)) return; const targetEl = evt.target; if (targetEl.tagName !== "A") return; if (!targetEl.hasClass("internal-link")) return; const href = getLink(targetEl); if (!href) return; view.plugin.app.workspace.trigger("hover-link", { event: evt, source: "preview", hoverParent: view, targetEl, linktext: href, sourcePath: view.file.path }); }); }; // src/stores/view/subscriptions/event-listeners/attach-wheel-scroll-listener.ts var attachWheelScrollListener = (view) => { view.plugin.registerDomEvent(view.contentEl, "wheel", (evt) => { if (!evt.altKey) return; if (evt.deltaY === 0) return; const target = evt.target; const targetIsACard = target.hasClass("lng-prev") || target.closest(".lng-prev"); if (!targetIsACard) return; const column = target.closest(".column"); if (!column) return; evt.preventDefault(); evt.stopPropagation(); requestAnimationFrame(() => { column.scrollBy({ top: evt.deltaY * 2.5, behavior: "smooth" }); }); }); }; // src/stores/view/subscriptions/effects/css-variables/apply-cards-gap.ts var applyCardsGap = (view, value) => { if (typeof value !== "number") return; view.containerEl.style.setProperty(cssVariables.nodeGap, `${value}px`); }; // src/stores/view/subscriptions/actions/set-active-pinned-node.ts var setActivePinnedNode2 = (view, id2) => { view.viewStore.dispatch({ type: "view/pinned-nodes/set-active-node", payload: { id: id2 } }); }; // src/stores/view/subscriptions/actions/load-pinned-nodes-to-document.ts var loadPinnedNodesToDocument = (view) => { const documentStore = view.documentStore; const documentState = documentStore.getValue(); const settingsStore = view.plugin.settings; const settingsState = settingsStore.getValue(); const persistedDocuments = settingsState.documents; const persistedDocument = persistedDocuments[documentState.file.path]; if (!persistedDocument?.pinnedSections) return; if (persistedDocument.pinnedSections.sections.length === 0) { const activeLeftSideTab = settingsState.view.leftSidebarActiveTab; const showLeftSidebarStore = settingsState.view.showLeftSidebar; if (showLeftSidebarStore && activeLeftSideTab === "pinned-cards") { settingsStore.dispatch({ type: "view/left-sidebar/toggle" }); } return; } if (documentState.pinnedNodes.Ids.length === 0) { documentStore.dispatch({ type: "document/pinned-nodes/load-from-settings", payload: { sections: persistedDocument.pinnedSections.sections } }); } const activeSection = persistedDocument.pinnedSections.activeSection; if (activeSection) { const id2 = documentState.sections.section_id[activeSection]; if (id2) { setActivePinnedNode2(view, id2); } } }; // src/stores/view/subscriptions/attach-close-modals-listener.ts var attachCloseModalsListener = (view) => { const listener = (e) => { const target = e.target; const isInsideModal = target.closest(".lineage-modal"); const isInsideControlsBar = !isInsideModal && target.closest(".controls-container"); if (e.button === 0 && !(isInsideModal || isInsideControlsBar)) { view.viewStore.dispatch({ type: "CLOSE_MODALS" }); view.contentEl.removeEventListener("click", listener); } }; const controls = uiControlsStore(view); const unsub = controls.subscribe((controls2) => { if ( /*controls.showHelpSidebar ||*/ controls2.showHistorySidebar || controls2.showSettingsSidebar ) { setTimeout(() => { view.contentEl.addEventListener("click", listener); }, 0); } }); return () => { view.contentEl.removeEventListener("click", listener); unsub(); }; }; // src/stores/view/subscriptions/effects/css-variables/apply-card-indentation-width.ts var applyCardIndentationWidth = (view, width) => { if (typeof width !== "number") return; view.containerEl.style.setProperty( cssVariables.cardIndentationWidth, `${width}px` ); }; // src/stores/view/subscriptions/effects/checkbox-listener/helpers/update-checkbox/find-task-line-index.ts var findTaskLineIndex = (lines, taskIndex) => { let currentTaskIndex = -1; return lines.findIndex((line) => { if (line.match(/^\s*[-*+]\s*\[[ x]\]/i)) { currentTaskIndex++; return currentTaskIndex === taskIndex; } return false; }); }; // src/stores/view/subscriptions/effects/checkbox-listener/helpers/update-checkbox/update-task-line.ts var updateTaskLine = (line, checked) => { return line.replace( /^([-*+]\s*\[)[ x](\].*)$/i, `$1${checked ? "x" : " "}$2` ); }; // src/stores/view/subscriptions/effects/checkbox-listener/helpers/update-checkbox/update-checkbox.ts var updateCheckbox = (taskIndex, content, checked) => { const lines = content.split("\n"); const taskLineIndex = findTaskLineIndex(lines, taskIndex); if (taskLineIndex === -1) { return; } const task = lines[taskLineIndex]; lines[taskLineIndex] = updateTaskLine(task, checked); return { task: task.replace(/^\s*([-*+]\s*\[)[ x](\]) /i, ""), content: lines.join("\n") }; }; // src/stores/view/subscriptions/effects/checkbox-listener/attach-checkbox-listener.ts var import_obsidian31 = require("obsidian"); var handleCheckboxChange = (event, view) => { const checkbox = event.target; if (!checkbox?.classList.contains("task-list-item-checkbox")) { return; } const listItem = checkbox.closest(".task-list-item"); const card = checkbox.closest(".lineage-card"); if (!listItem || !card) { return; } const documentState = view.documentStore.getValue(); const cardId = card.id; const existingContent = documentState.document.content[cardId]; if (!cardId || !existingContent) { return; } const allItems = Array.from( card.querySelectorAll(".lng-prev .task-list-item") ); const taskIndex = allItems.indexOf(listItem); const content = updateCheckbox( taskIndex, existingContent.content, checkbox.checked ); if (content) { view.documentStore.dispatch({ type: "DOCUMENT/SET_NODE_CONTENT", payload: { nodeId: cardId, content: content.content }, context: { isInSidebar: !!card.closest(".sidebar") } }); new import_obsidian31.Notice( `"${content.task}" has been ${checkbox.checked ? "checked" : "unchecked"}` ); } }; var attachCheckboxListener = (view) => { const container = view.contentEl; invariant(container); const listener = (event) => { handleCheckboxChange(event, view); }; container.addEventListener("change", listener); return () => { container.removeEventListener("change", listener); }; }; // src/stores/view/subscriptions/effects/css-variables/apply-view-size.ts var PADDING_H = 8 * 4 + 34 * 2; var PADDING_V = 8 * 2; var applyViewSize = (view) => { const viewElement = view.contentEl.querySelector( ".lineage-main" ); if (!viewElement) return; view.containerEl.style.setProperty( cssVariables.viewWidth, `${viewElement.innerWidth - PADDING_H}px` ); view.containerEl.style.setProperty( cssVariables.viewHeight, `${viewElement.innerHeight - PADDING_V}px` ); }; // src/stores/view/subscriptions/effects/view-size/watch-view-size.ts var watchViewSize = (view) => { const element2 = view.contentEl.querySelector(".lineage-main"); invariant(element2); const observer = new ResizeObserver(() => { applyViewSize(view); }); observer.observe(element2); return () => { observer.disconnect(); }; }; // src/stores/view/subscriptions/effects/css-variables/apply-inactive-node-opacity.ts var applyInactiveNodeOpacity = (view, value) => { if (typeof value !== "number") return; view.containerEl.style.setProperty( cssVariables.inactiveCardOpacity, `${value / 100}` ); }; // src/stores/view/subscriptions/actions/view/load-collapsed-sections-from-settings.ts var loadCollapsedSectionsFromSettings = (view) => { const settings = view.plugin.settings.getValue(); const path = view.file.path; const collapsedSections = settings.documents[path]?.outline?.collapsedSections; if (!collapsedSections) return; const viewStore = view.viewStore; const documentState = view.documentStore.getValue(); const collapsedIds = collapsedSections.map((section) => { return documentState.sections.section_id[section]; }).filter((x) => x); if (collapsedIds.length > 0) { viewStore.dispatch({ type: "view/persisted-state/load-persisted-collapsed-parents", payload: { collapsedIds }, context: { columns: documentState.document.columns } }); } }; // src/stores/view/subscriptions/on-view-mount.ts var applySettingsToView = (view) => { const state2 = view.plugin.settings.getValue(); applyFontSize(view, state2.view.fontSize); applyInactiveNodeOpacity(view, state2.view.theme.inactiveNodeOpacity); applyCssColor(view, "containerBg"); applyCssColor(view, "activeBranchBg"); applyCssColor(view, "activeBranchColor"); applyCardWidth(view, state2.view.cardWidth); applyCardIndentationWidth(view, state2.view.nodeIndentationWidth); applyCardsGap(view, state2.view.cardsGap); if (!view.container) return; applyZoomLevel(view, state2.view.zoomLevel); attachCheckboxListener(view); }; var onViewMount = (view) => { const subscriptions = /* @__PURE__ */ new Set(); const documentStore = view.documentStore; const documentState = documentStore.getValue(); const viewStore = view.viewStore; if (!view.file) return subscriptions; setInitialActiveNode(view); loadCollapsedSectionsFromSettings(view); updateActiveBranch2(viewStore, documentState, "none"); if (view.isActive && isEmptyDocument(documentState.document.content)) { enableEditMode2(viewStore, documentState); } view.plugin.statusBar.updateAll(view); if (view.isActive) focusContainer(view); loadPinnedNodesToDocument(view); debounced(view); applySettingsToView(view); attachHoverPreviewListener(view); attachWheelScrollListener(view); documentStore.dispatch({ type: "META/REFRESH_GROUP_PARENT_IDS" }); attachCloseModalsListener(view); view.rulesProcessor.onRulesUpdate(); view.zoomFactor = view.plugin.settings.getValue().view.zoomLevel; view.alignBranch.align({ type: "view/life-cycle/mount" }); subscriptions.add(watchViewSize(view)); return subscriptions; }; // src/stores/view/helpers/get-view-event-type.ts var navigationEvents = /* @__PURE__ */ new Set([ "NAVIGATION/NAVIGATE_BACK", "NAVIGATION/NAVIGATE_FORWARD", "NAVIGATION/SELECT_NEXT_NODE" ]); var searchEvents = /* @__PURE__ */ new Set([ "SEARCH/SET_QUERY", "SEARCH/SET_RESULTS", "SEARCH/TOGGLE_INPUT" ]); var stateEvents = /* @__PURE__ */ new Set([ "view/set-active-node/document", "view/set-active-node/mouse", "view/set-active-node/mouse-silent", "view/set-active-node/search", "DOCUMENT/NAVIGATE_USING_KEYBOARD", "DOCUMENT/JUMP_TO_NODE" ]); var editMainSplitEvents = /* @__PURE__ */ new Set([ "view/main/enable-edit", "view/main/disable-edit" ]); var editSidebarEvents = /* @__PURE__ */ new Set([ "view/sidebar/enable-edit", "view/sidebar/disable-edit" ]); var cachedResults2 = {}; var getViewEventType = (type) => { if (cachedResults2[type]) { return cachedResults2[type]; } let result = null; if (navigationEvents.has(type)) result = { activeNodeHistory: true }; else if (stateEvents.has(type)) result = { activeNode: true }; else if (searchEvents.has(type)) result = { search: true }; else if (editMainSplitEvents.has(type)) result = { editMainSplit: true }; else if (editSidebarEvents.has(type)) result = { editSidebar: true }; if (!result) result = {}; cachedResults2[type] = result; return result; }; // src/stores/view/subscriptions/actions/clear-selected-nodes.ts var clearSelectedNodes = (view) => { view.viewStore.dispatch({ type: "DOCUMENT/CLEAR_SELECTION" }); }; // src/stores/view/subscriptions/actions/maybe-clear-selection.ts var maybeClearSelection = (view, action) => { const selectedNodes = view.viewStore.getValue().document.selectedNodes; if (selectedNodes.size > 1) { const selectedNodeIsWithinSelection = action.type.startsWith("view/set-active-node") && // @ts-ignore selectedNodes.has(action.payload.id); if (!selectedNodeIsWithinSelection) { clearSelectedNodes(view); } } }; // src/stores/view/subscriptions/actions/update-search-results.ts var updateActiveNodeAfterSearch = (view, results) => { const shouldUpdateActiveNode = results.length > 0 && !results.find( (r) => r.item.id === view.viewStore.getValue().document.activeNode ); if (shouldUpdateActiveNode) { view.viewStore.dispatch({ type: "view/set-active-node/search", payload: { id: results[0].item.id } }); } }; var updateSearchResults = (view) => { const viewState = view.viewStore.getValue(); const query = viewState.search.query; if (!query) return; const search2 = view.documentSearch.search(query); const results = search2.map((r) => r.item.id); view.viewStore.dispatch({ type: "SEARCH/SET_RESULTS", payload: { results } }); const newSearchResults = Array.from(results).sort().join(""); const previousSearchResults = Array.from(viewState.search.results).sort().join(""); if (previousSearchResults !== newSearchResults) { updateActiveNodeAfterSearch(view, search2); } }; // src/stores/view/subscriptions/actions/persist-active-node-in-plugin-settings.ts var state = {}; var persistActiveNodeInPluginSettings = (view) => { if (!view.file) return; const documentState = view.documentStore.getValue(); const viewState = view.viewStore.getValue(); const sectionNumber = getSectionOfId( documentState.sections, viewState.document.activeNode ); const path = view.file?.path; if (state[path] === sectionNumber) return; state[path] = sectionNumber; view.plugin.settings.dispatch({ type: "settings/document/persist-active-section", payload: { sectionNumber, path } }); }; // src/stores/view/subscriptions/actions/persist-active-pinned-node.ts var persistActivePinnedNode = (view) => { const documentState = view.documentStore.getValue(); if (!documentState.file.path) return; const sections = documentState.sections; const viewState = view.viewStore.getValue(); const section = sections.id_section[viewState.pinnedNodes.activeNode]; view.plugin.settings.dispatch({ type: "settings/pinned-nodes/persist-active-node", payload: { filePath: documentState.file.path, section } }); }; // src/stores/view/subscriptions/effects/show-search-results-in-minimap.ts var showSearchResultsInMinimap = (view) => { const viewStore = view.viewStore; const viewState = viewStore.getValue(); const settingsStore = view.plugin.settings; const settingsState = settingsStore.getValue(); if (viewState.search.showInput) { if (!settingsState.view.showMinimap) { if (viewState.search.results.size > 0) { settingsStore.dispatch({ type: "VIEW/TOGGLE_MINIMAP" }); view.documentSearch.searchTriggeredMinimap = true; } } } else if (view.documentSearch.searchTriggeredMinimap) { settingsStore.dispatch({ type: "VIEW/TOGGLE_MINIMAP" }); view.documentSearch.searchTriggeredMinimap = false; } }; // src/obsidian/helpers/get-used-hotkeys.ts var getUsedHotkeys = (plugin) => { const app = plugin.app; const conflicting = /* @__PURE__ */ new Map(); const allCommands = { ...app.commands.commands, ...app.commands.editorCommands }; const customHotkeys = Object.fromEntries( Object.entries(app.hotkeyManager.customKeys).map( ([name, hotkeys]) => [ name, { hotkeys, name: allCommands[name]?.name || name } ] ) ); const commands = { ...allCommands, ...customHotkeys }; for (const command of Object.values(commands)) { if (command.hotkeys?.length) { for (const hotkey of command.hotkeys) { const hotkey_string = hotkeyToString(hotkey); conflicting.set(hotkey_string, command.name); } } } return conflicting; }; // src/stores/view/subscriptions/actions/settings/persist-collapsed-sections.ts var persistCollapsedSections = (view) => { const viewState = view.viewStore.getValue(); const documentState = view.documentStore.getValue(); const collapsedParents = Array.from(viewState.outline.collapsedParents); const collapsedSections = collapsedParents.map((id2) => { return documentState.sections.id_section[id2]; }).filter((x) => x); view.plugin.settings.dispatch({ type: "settings/document/persist-collapsed-sections", payload: { path: view.file.path, sections: collapsedSections } }); }; // src/stores/view/subscriptions/on-view-state-update.ts var onViewStateUpdate = (view, action, localState) => { const documentStore = view.documentStore; const documentState = documentStore.getValue(); const viewStore = view.viewStore; const viewState = viewStore.getValue(); const container = view.container; const type = action.type; const e = getViewEventType( type ); const activeNodeChange = e.activeNode || e.activeNodeHistory; const activeNodeHasChanged = localState.previousActiveNode !== viewState.document.activeNode; if (activeNodeHasChanged) { localState.previousActiveNode = viewState.document.activeNode; } if (activeNodeChange && activeNodeHasChanged) { updateActiveBranch2(viewStore, documentState, "none"); persistActiveNodeInPluginSettings(view); view.plugin.statusBar.updateProgressIndicatorAndChildCount(view); } if (activeNodeChange) { if (view.minimapStore) { view.minimapStore.dispatch({ type: "minimap/set-active-node", payload: { id: viewState.document.activeNode } }); } } if (activeNodeChange && activeNodeHasChanged && type !== "DOCUMENT/NAVIGATE_USING_KEYBOARD" && type !== "DOCUMENT/JUMP_TO_NODE") { maybeClearSelection(view, action); } if (action.type === "SEARCH/SET_QUERY") { updateSearchResults(view); } if (activeNodeChange || e.search || e.editMainSplit) { view.alignBranch.align(action); } if (!container || !view.isViewOfFile) return; if (type === "SEARCH/TOGGLE_FUZZY_MODE") { view.documentSearch.resetIndex(); } if (action.type === "view/main/disable-edit" || action.type === "view/sidebar/disable-edit" || action.type === "NAVIGATION/NAVIGATE_FORWARD" || action.type === "NAVIGATION/NAVIGATE_BACK") { focusContainer(view); } if (action.type === "SEARCH/TOGGLE_INPUT") { if (!viewState.search.showInput) { focusContainer(view); } } if (action.type === "SEARCH/SET_RESULTS" || action.type === "SEARCH/TOGGLE_INPUT" || action.type === "SEARCH/SET_QUERY") { showSearchResultsInMinimap(view); } if (type === "view/pinned-nodes/set-active-node") { persistActivePinnedNode(view); } if (action.type === "UI/TOGGLE_HELP_SIDEBAR") { if (viewState.ui.controls.showHelpSidebar) { view.viewStore.dispatch({ type: "view/hotkeys/update-conflicts", payload: { conflicts: getUsedHotkeys(view.plugin) } }); } } if (action.type === "view/outline/toggle-collapse-all" || action.type === "view/outline/toggle-collapse-node" || action.type === "view/outline/refresh-collapsed-nodes") { persistCollapsedSections(view); } }; // src/stores/view/subscriptions/actions/set-active-node.ts var setActiveNode = (view, action) => { const documentState = view.documentStore.getValue(); const viewState = view.viewStore.getValue(); const activeNodeOfView = viewState.document.activeNode; const id_section = documentState.sections.id_section; const section_id = documentState.sections.section_id; const activeSectionOfView = id_section[activeNodeOfView]; const activeNodeExists = !!activeSectionOfView; let newActiveSection = documentState.history.context.activeSection; let shouldSetActiveNode = true; if (activeNodeExists) { if (action.type === "HISTORY/APPLY_PREVIOUS_SNAPSHOT") { const state2 = documentState.history.state; const previousSnapshot = documentState.history.items[state2.activeIndex + 1]; const affectedSection = previousSnapshot.context.affectedSection; if (section_id[affectedSection]) { newActiveSection = affectedSection; } } else if (view.isViewOfFile && (action.type === "DOCUMENT/DROP_NODE" || action.type === "DOCUMENT/MOVE_NODE")) { shouldSetActiveNode = false; } else if (!view.isActive) { shouldSetActiveNode = false; } } if (shouldSetActiveNode) { view.viewStore.dispatch({ type: "view/set-active-node/document", payload: { id: getIdOfSection(documentState.sections, newActiveSection) } }); } }; // src/stores/view/subscriptions/actions/remove-obsolete-navigation-items.ts var removeObsoleteNavigationItems = (viewStore, documentState) => { viewStore.dispatch({ type: "NAVIGATION/REMOVE_OBSOLETE", payload: { content: documentState.document.content } }); }; // src/stores/view/subscriptions/actions/persist-pinned-nodes.ts var persistPinnedNodes = (view) => { const documentState = view.documentStore.getValue(); if (!documentState.file.path) return; const viewState = view.viewStore.getValue(); const pinnedNodes = documentState.pinnedNodes; const sections = documentState.sections; const pinnedSections = pinnedNodes.Ids.map((id2) => sections.id_section[id2]); const section = sections.id_section[viewState.pinnedNodes.activeNode]; view.plugin.settings.dispatch({ type: "settings/pinned-nodes/persist", payload: { sections: pinnedSections, filePath: documentState.file.path, section } }); }; // src/stores/view/subscriptions/actions/update-stale-active-pinned-node.ts var updateStaleActivePinnedNode = (view) => { const viewStore = view.viewStore; const pinnedNodes = view.documentStore.getValue().pinnedNodes.Ids; if (pinnedNodes.length > 0) { const activePinnedNode = viewStore.getValue().pinnedNodes.activeNode; if (!activePinnedNode || !pinnedNodes.includes(activePinnedNode)) { setActivePinnedNode2(view, pinnedNodes[pinnedNodes.length - 1]); } } }; // src/stores/view/subscriptions/actions/update-selected-nodes.ts var updateSelectedNodes2 = (view, action, changeHistory) => { const documentState = view.documentStore.getValue(); let clear = true; if (action.type === "DOCUMENT/PASTE_NODE" || changeHistory) { const history = documentState.history; const snapshot = history.items[history.state.activeIndex]; if (snapshot.context.affectedSections) { clear = false; const ids = snapshot.context.affectedSections.map( (section) => getIdOfSection(documentState.sections, section) ); view.viewStore.dispatch({ type: "view/selection/set-selection", payload: { ids } }); } } if (clear) { clearSelectedNodes(view); } }; // src/stores/view/subscriptions/on-document-state-update.ts var onDocumentStateUpdate = (view, action) => { const documentStore = view.documentStore; const documentState = documentStore.getValue(); const viewStore = view.viewStore; const container = view.container; const type = action.type; const e = getDocumentEventType( type ); if (type === "DOCUMENT/LOAD_FILE") { view.inlineEditor.unloadNode(); } const structuralChange = e.createOrDelete || e.dropOrMove || e.changeHistory || e.clipboard; if (structuralChange) { setActiveNode(view, action); updateActiveBranch2(viewStore, documentState, "structure"); viewStore.dispatch({ type: "view/outline/refresh-collapsed-nodes", payload: { columns: documentState.document.columns } }); documentStore.dispatch({ type: "document/pinned-nodes/remove-stale-nodes" }); documentStore.dispatch({ type: "META/REFRESH_GROUP_PARENT_IDS" }); } if (structuralChange && type !== "DOCUMENT/MOVE_NODE") { updateSelectedNodes2(view, action, e.changeHistory); } if (type === "DOCUMENT/INSERT_NODE" && view.isActive) { enableEditMode2(viewStore, documentState); } if (type === "DOCUMENT/DELETE_NODE" || type === "DOCUMENT/CUT_NODE" || e.changeHistory || type === "DOCUMENT/EXTRACT_BRANCH" || type === "DOCUMENT/LOAD_FILE" || type === "DOCUMENT/SPLIT_NODE") { removeObsoleteNavigationItems(viewStore, documentState); } if (structuralChange || e.content) { view.alignBranch.align(action); view.rulesProcessor.onDocumentUpdate(action); } if (!container || !view.isViewOfFile) return; if (e.content || structuralChange) { const maybeViewIsClosing = !view.isActive; view.saveDocument(maybeViewIsClosing); } if (e.content || structuralChange) { if (view.minimapStore) { debouncedDrawDocument(view); } view.documentSearch.resetIndex(); const query = viewStore.getValue().search.query; if (query) { view.viewStore.dispatch({ type: "SEARCH/SET_QUERY", payload: { query } }); } } if (structuralChange) { view.plugin.statusBar.updateAll(view); } if (e.content || structuralChange) { if (view.isActive) focusContainer(view); } const pinnedNodesUpdate = type === "document/pinned-nodes/remove-stale-nodes" || type === "document/pinned-nodes/pin" || type === "document/pinned-nodes/unpin"; if (pinnedNodesUpdate) { persistPinnedNodes(view); } if (pinnedNodesUpdate || type === "document/pinned-nodes/load-from-settings") { if (type === "document/pinned-nodes/pin") { setActivePinnedNode2(view, action.payload.id); } else { updateStaleActivePinnedNode(view); } } }; // src/stores/view/subscriptions/on-plugin-settings-update.ts var onPluginSettingsUpdate = (view, state2, action) => { if (!view.container) return; const type = action.type; if (type === "SET_FONT_SIZE") { applyFontSize(view, state2.view.fontSize); } else if (type === "SET_CONTAINER_BG") { applyCssColor(view, "containerBg"); } else if (type === "SET_ACTIVE_BRANCH_BG") { applyCssColor(view, "activeBranchBg"); } else if (type === "SET_CARD_WIDTH") { applyCardWidth(view, state2.view.cardWidth); } else if (type === "SET_CARDS_GAP") { applyCardsGap(view, state2.view.cardsGap); } else if (action.type === "UI/CHANGE_ZOOM_LEVEL") { applyZoomLevel(view, state2.view.zoomLevel); view.zoomFactor = state2.view.zoomLevel; } else if (action.type === "SET_DOCUMENT_TYPE") { view.saveDocument(); } else if (type === "settings/view/set-node-indentation-width") { applyCardIndentationWidth(view, state2.view.nodeIndentationWidth); } else if (type === "settings/view/theme/set-inactive-node-opacity") { applyInactiveNodeOpacity(view, state2.view.theme.inactiveNodeOpacity); } else if (type === "settings/view/theme/set-active-branch-color") { applyCssColor(view, "activeBranchColor"); } else if (type === "settings/hotkeys/reset-all" || type === "settings/hotkeys/apply-preset" || type === "settings/hotkeys/reset-custom-hotkey" || type === "settings/hotkeys/set-custom-hotkey" || type === "settings/hotkeys/set-blank") { view.viewStore.dispatch({ type: "view/hotkeys/update-conflicts", payload: { conflicts: getUsedHotkeys(view.plugin) } }); } else if (type === "settings/view/modes/toggle-outline-mode") { if (state2.view.outlineMode) { const columns = view.documentStore.getValue().document.columns; view.viewStore.dispatch({ type: "view/outline/refresh-collapsed-nodes", payload: { columns } }); } } const shouldAlign = type === "view/left-sidebar/toggle" || type === "view/left-sidebar/set-width" || type === "UI/CHANGE_ZOOM_LEVEL" || type === "SET_CARD_WIDTH" || type === "SET_LIMIT_PREVIEW_HEIGHT" || type === "VIEW/TOGGLE_MINIMAP" || type === "VIEW/SCROLLING/TOGGLE_SCROLLING_MODE" || type === "settings/view/scrolling/toggle-vertical-scrolling-mode" || type === "SET_CARDS_GAP" || type === "view/modes/gap-between-cards/toggle" || type === "settings/view/set-node-indentation-width"; if (shouldAlign) { view.alignBranch.align(action); } if (view.isActive && type === "UI/CHANGE_ZOOM_LEVEL") { focusContainer(view); } const shouldUpdateStyleRules = type === "settings/style-rules/add" || type === "settings/style-rules/update" || type === "settings/style-rules/delete" || type === "settings/style-rules/update-condition" || type === "settings/style-rules/enable-rule" || type === "settings/style-rules/disable-rule" || type === "settings/style-rules/move" || type === "settings/style-rules/update-style"; if (shouldUpdateStyleRules) { view.rulesProcessor.onRulesUpdate(); } }; // src/stores/view/subscriptions/on-documents-state-update.ts var onDocumentsStateUpdate = (view, action) => { if (!view.container) return; if (action.type === "WORKSPACE/ACTIVE_LEAF_CHANGE") { if (view.viewStore.getValue().document.editing.activeNodeId) { saveNodeContent(view); } } if (action.type === "WORKSPACE/SET_ACTIVE_LINEAGE_VIEW" || action.type === "WORKSPACE/RESIZE") { if (view.isActive) { focusContainer(view); view.plugin.statusBar.updateAll(view); } view.alignBranch.align(action); } }; // src/stores/view/subscriptions/on-metadata-cache.ts var import_obsidian32 = require("obsidian"); var metadataCallback = (view, updatedFile) => { const viewFile = view.file; if (!viewFile) return; if (updatedFile === viewFile) { debounced(view); } }; var vaultCallback = (view, affectedFile) => { if (!(affectedFile instanceof import_obsidian32.TFile)) return; const viewFile = view.file; if (!viewFile) return; const viewFileLinks = view.plugin.app.metadataCache.getFileCache(viewFile)?.links; if (!viewFileLinks) return; let affectedFileIsALink = false; for (const link of viewFileLinks) { const linkBasename = link.link.split("#")[0]; if (affectedFile.basename === linkBasename) { affectedFileIsALink = true; break; } } if (affectedFileIsALink) { debounced(view); } }; var onMetadataCache = (view) => { const app = view.plugin.app; const metadataRef = app.metadataCache.on( "changed", (file) => metadataCallback(view, file) ); const createRef = app.vault.on( "create", (file) => vaultCallback(view, file) ); const deleteRef = app.vault.on( "delete", (file) => vaultCallback(view, file) ); return () => { app.metadataCache.offref(metadataRef); app.vault.offref(createRef); app.vault.offref(deleteRef); }; }; // src/stores/view/subscriptions/view-subscriptions.ts var viewSubscriptions = (view) => { const unsubFromDocument = view.documentStore.subscribe( (documentState, action) => { if (!action) return; onDocumentStateUpdate(view, action); } ); const localState = { previousActiveNode: "" }; let onMountSubscriptions = /* @__PURE__ */ new Set(); const unsubFromView = view.viewStore.subscribe( (viewState, action, initialRun) => { if (initialRun) { onMountSubscriptions = onViewMount(view); } else if (action) { onViewStateUpdate(view, action, localState); } } ); const unsubFromDocuments = view.plugin.documents.subscribe((_, action) => { if (!action) return; onDocumentsStateUpdate(view, action); }); const unsubFromSettings = view.plugin.settings.subscribe( (state2, action) => { if (!action) return; onPluginSettingsUpdate(view, state2, action); } ); const unsubFromCache = onMetadataCache(view); return () => { unsubFromDocument(); unsubFromCache(); unsubFromView(); unsubFromSettings(); unsubFromDocuments(); view.rulesProcessor.onViewUnmount(); for (const unsub of onMountSubscriptions) { unsub(); } }; }; // src/obsidian/helpers/inline-editor/inline-editor.ts var import_obsidian35 = require("obsidian"); // src/obsidian/helpers/inline-editor/helpers/vim-enter-insert-mode.ts var vimEnterInsertMode = (plugin, view) => { const config = plugin.app.vault.config; if (config?.vimMode) { try { activeWindow.CodeMirrorAdapter?.Vim.enterInsertMode( // @ts-ignore view.editMode?.editor?.cm?.cm ); } catch { logger.warn("could not enter insert mode"); } } }; // src/obsidian/helpers/inline-editor/helpers/fix-vim-cursor-when-zooming.ts var fixVimCursorWhenZooming = (view) => { if (view.zoomFactor === 1) return null; const config = view.plugin.app.vault.config; if (!config?.vimMode) return null; const inlineEditor = view.inlineEditor.target; if (!inlineEditor) return null; const previousValues = { top: -1, lineHeight: -1, left: -1 }; let animationFrame; const adjustCursorPosition = () => { const cursor2 = inlineEditor.querySelector( ".cm-cursor-primary" ); if (!cursor2) { animationFrame = requestAnimationFrame(adjustCursorPosition); return; } const top = parseFloat(cursor2.style.top); const left = parseFloat(cursor2.style.left); const lineHeight = parseFloat(cursor2.style.lineHeight); if (top !== previousValues.top) { cursor2.style.top = `${(top + 1) / view.zoomFactor}px`; previousValues.top = parseFloat(cursor2.style.top); } if (left !== previousValues.left) { cursor2.style.left = `${left / view.zoomFactor}px`; previousValues.left = parseFloat(cursor2.style.left); } if (lineHeight !== previousValues.lineHeight) { cursor2.style.lineHeight = `${lineHeight / view.zoomFactor}px`; previousValues.lineHeight = parseFloat(cursor2.style.lineHeight); } animationFrame = requestAnimationFrame(adjustCursorPosition); }; animationFrame = requestAnimationFrame(adjustCursorPosition); return () => { cancelAnimationFrame(animationFrame); }; }; // src/obsidian/helpers/inline-editor/helpers/lock-file.ts var import_obsidian33 = require("obsidian"); var noop2 = async () => { }; var lockFile = (view) => { view.plugin.app.workspace.iterateAllLeaves((e) => { const leafView = e.view; if (leafView instanceof import_obsidian33.MarkdownView) { if (leafView.file === view.file) { leafView.__setViewData__ = leafView.setViewData; leafView.setViewData = noop2; } } }); }; // src/obsidian/helpers/inline-editor/helpers/unlock-file.ts var import_obsidian34 = require("obsidian"); var unlockFile = (view) => { view.plugin.app.workspace.iterateAllLeaves((e) => { const leafView = e.view; if (leafView instanceof import_obsidian34.MarkdownView) { if (leafView.file === view.file) { if ("__setViewData__" in leafView) { leafView.setViewData = leafView.__setViewData__; delete leafView.__setViewData__; } } } }); }; // src/obsidian/helpers/inline-editor/inline-editor.ts var noop3 = async () => { }; var _nodeId; var InlineEditor = class { constructor(view) { this.view = view; __privateAdd(this, _nodeId, null); this.target = null; this.onChangeSubscriptions = /* @__PURE__ */ new Set(); this.subscriptions = /* @__PURE__ */ new Set(); this.cursorPositions = /* @__PURE__ */ new Map(); this.focus = () => { this.inlineView.editor.focus(); }; this.isCursorInRange = (cursor2) => { const docStart = { line: 0, ch: 0 }; const lastLine = this.inlineView.editor.lastLine(); const docEnd = { line: lastLine, ch: this.inlineView.editor.getLine(lastLine).length }; const isLineInRange = cursor2.line >= docStart.line && cursor2.line <= docEnd.line; const isChInRange = (cursor2.line === docStart.line ? cursor2.ch >= docStart.ch : true) && (cursor2.line === docEnd.line ? cursor2.ch <= docEnd.ch : true); return isLineInRange && isChInRange; }; this.restoreCursor = () => { const existingCursor = this.cursorPositions.get(this.nodeId); if (existingCursor && this.isCursorInRange(existingCursor)) { this.setCursor(existingCursor); } else { const lastLine = this.inlineView.editor.lastLine(); const ch = this.inlineView.editor.getLine(lastLine).length; this.setCursor({ line: lastLine, ch }); } }; this.setActiveEditor = () => { this.view.plugin.app.workspace.activeEditor = this.inlineView; }; this.invokeAndDeleteOnChangeSubscriptions = () => { if (this.onChangeSubscriptions.size) for (const subscription of this.onChangeSubscriptions) { subscription(); this.onChangeSubscriptions.delete(subscription); } }; this.saveContent = () => { const nodeId = this.nodeId; if (!nodeId) return; const content = this.getContent(); const viewState = this.view.viewStore.getValue(); this.view.documentStore.dispatch({ type: "DOCUMENT/SET_NODE_CONTENT", payload: { nodeId, content }, context: { isInSidebar: viewState.document.editing.isInSidebar } }); }; this.fixVimWhenZooming = () => { const unsub = fixVimCursorWhenZooming(this.view); if (unsub) { this.subscriptions.add(unsub); } }; } get nodeId() { return __privateGet(this, _nodeId); } set nodeId(value) { __privateSet(this, _nodeId, value); } getContent() { return this.inlineView.editor.getValue(); } getCursor() { return this.inlineView.editor.getCursor(); } deleteNodeCursor(nodeId) { this.cursorPositions.delete(nodeId); } setNodeCursor(nodeId, cursor2) { if (this.nodeId && nodeId === this.nodeId) this.setCursor(cursor2); else this.cursorPositions.set(nodeId, cursor2); } setContent(content) { this.inlineView.__setViewData__(content, true); } loadNode(target, nodeId) { if (!this.view.file) return; if (this.nodeId) { this.unloadNode(); } const content = this.view.documentStore.getValue().document.content[nodeId]?.content; this.setContent(content); target.append(this.containerEl); this.focus(); AdjustHeight(this.view, target)(); this.target = target; if (!content) { vimEnterInsertMode(this.view.plugin, this.inlineView); } this.target.addEventListener("focusin", this.setActiveEditor); this.setActiveEditor(); this.nodeId = nodeId; this.restoreCursor(); this.lockFile(); this.fixVimWhenZooming(); } unloadNode(nodeId, discardChanges = false) { const currentNodeId = this.nodeId; if (nodeId && nodeId !== currentNodeId) return; if (currentNodeId && !discardChanges) { this.saveContent(); const cursor2 = this.getCursor(); this.cursorPositions.set(currentNodeId, cursor2); } this.nodeId = null; if (this.target) { this.view.plugin.app.workspace.activeEditor = null; this.target.removeEventListener("focusin", this.setActiveEditor); this.target.empty(); this.target = null; } for (const subscription of this.subscriptions) { subscription(); this.subscriptions.delete(subscription); } this.unlockFile(); } async onload() { const workspace = this.view.plugin.app.workspace; this.containerEl = document.createElement("div"); this.containerEl.addClasses(["lineage-inline-editor"]); this.inlineView = new import_obsidian35.MarkdownView({ containerEl: this.containerEl, app: this.view.plugin.app, workspace }); this.inlineView.save = noop3; this.inlineView.requestSave = this.invokeAndDeleteOnChangeSubscriptions; this.inlineView.__setViewData__ = this.inlineView.setViewData; this.inlineView.setViewData = noop3; if (this.inlineView.getMode() === "preview") { await this.inlineView.setState( { mode: "source" }, { history: false } ); } } onNextChange(subscription) { this.onChangeSubscriptions.add(subscription); return () => { this.onChangeSubscriptions.delete(subscription); }; } async loadFile(file) { this.inlineView.file = file; await this.inlineView.onLoadFile(file); } async unloadFile() { const file = this.inlineView.file; if (file) { this.inlineView.file = null; await this.inlineView.onUnloadFile(file); } this.unloadNode(); } setCursor(cursor2) { this.inlineView.editor.setCursor(cursor2); } /* prevents obsidian from replacing file.data with card.data when the card editor and file editor share the same file*/ lockFile() { lockFile(this.view); } unlockFile() { unlockFile(this.view); } }; _nodeId = new WeakMap(); // src/view/helpers/stringify-document.ts var stringifyDocument = (document2, format2) => { const json = columnsToJson(document2.columns, document2.content); if (format2 === "outline") { return jsonToOutline(json); } else if (format2 === "html-element") { return jsonToHtmlElement(json); } else { return jsonToHtmlComment(json); } }; // src/obsidian/events/workspace/helpers/maybe-get-document-format.ts var maybeGetDocumentFormat = (view) => { invariant(view.file); return view.plugin.settings.getValue().documents[view.file.path]?.documentFormat; }; // src/obsidian/events/workspace/helpers/get-or-detect-document-format.ts var getOrDetectDocumentFormat = (view, data) => { const format2 = maybeGetDocumentFormat(view); if (format2) { return format2; } const detected = detectDocumentFormat(view.data); if (detected) return detected; const defaultFormat = view.plugin.settings.getValue().general.defaultDocumentFormat; if (defaultFormat === "outline") { if (!data.trim()) return "outline"; try { const tree = outlineToJson(data); if (tree.length <= 1 && tree[0]?.children?.length === 0) return "outline"; } catch { } } return defaultFormat; }; // node_modules/fuse.js/dist/fuse.mjs function isArray(value) { return !Array.isArray ? getTag(value) === "[object Array]" : Array.isArray(value); } var INFINITY = 1 / 0; function baseToString(value) { if (typeof value == "string") { return value; } let result = value + ""; return result == "0" && 1 / value == -INFINITY ? "-0" : result; } function toString(value) { return value == null ? "" : baseToString(value); } function isString(value) { return typeof value === "string"; } function isNumber(value) { return typeof value === "number"; } function isBoolean(value) { return value === true || value === false || isObjectLike(value) && getTag(value) == "[object Boolean]"; } function isObject(value) { return typeof value === "object"; } function isObjectLike(value) { return isObject(value) && value !== null; } function isDefined(value) { return value !== void 0 && value !== null; } function isBlank(value) { return !value.trim().length; } function getTag(value) { return value == null ? value === void 0 ? "[object Undefined]" : "[object Null]" : Object.prototype.toString.call(value); } var INCORRECT_INDEX_TYPE = "Incorrect 'index' type"; var LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) => `Invalid value for key ${key}`; var PATTERN_LENGTH_TOO_LARGE = (max) => `Pattern length exceeds max of ${max}.`; var MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`; var INVALID_KEY_WEIGHT_VALUE = (key) => `Property 'weight' in key '${key}' must be a positive integer`; var hasOwn = Object.prototype.hasOwnProperty; var KeyStore = class { constructor(keys) { this._keys = []; this._keyMap = {}; let totalWeight = 0; keys.forEach((key) => { let obj = createKey(key); this._keys.push(obj); this._keyMap[obj.id] = obj; totalWeight += obj.weight; }); this._keys.forEach((key) => { key.weight /= totalWeight; }); } get(keyId) { return this._keyMap[keyId]; } keys() { return this._keys; } toJSON() { return JSON.stringify(this._keys); } }; function createKey(key) { let path = null; let id2 = null; let src = null; let weight = 1; let getFn = null; if (isString(key) || isArray(key)) { src = key; path = createKeyPath(key); id2 = createKeyId(key); } else { if (!hasOwn.call(key, "name")) { throw new Error(MISSING_KEY_PROPERTY("name")); } const name = key.name; src = name; if (hasOwn.call(key, "weight")) { weight = key.weight; if (weight <= 0) { throw new Error(INVALID_KEY_WEIGHT_VALUE(name)); } } path = createKeyPath(name); id2 = createKeyId(name); getFn = key.getFn; } return { path, id: id2, weight, src, getFn }; } function createKeyPath(key) { return isArray(key) ? key : key.split("."); } function createKeyId(key) { return isArray(key) ? key.join(".") : key; } function get(obj, path) { let list = []; let arr = false; const deepGet = (obj2, path2, index) => { if (!isDefined(obj2)) { return; } if (!path2[index]) { list.push(obj2); } else { let key = path2[index]; const value = obj2[key]; if (!isDefined(value)) { return; } if (index === path2.length - 1 && (isString(value) || isNumber(value) || isBoolean(value))) { list.push(toString(value)); } else if (isArray(value)) { arr = true; for (let i = 0, len = value.length; i < len; i += 1) { deepGet(value[i], path2, index + 1); } } else if (path2.length) { deepGet(value, path2, index + 1); } } }; deepGet(obj, isString(path) ? path.split(".") : path, 0); return arr ? list : list[0]; } var MatchOptions = { // Whether the matches should be included in the result set. When `true`, each record in the result // set will include the indices of the matched characters. // These can consequently be used for highlighting purposes. includeMatches: false, // When `true`, the matching function will continue to the end of a search pattern even if // a perfect match has already been located in the string. findAllMatches: false, // Minimum number of characters that must be matched before a result is considered a match minMatchCharLength: 1 }; var BasicOptions = { // When `true`, the algorithm continues searching to the end of the input even if a perfect // match is found before the end of the same input. isCaseSensitive: false, // When true, the matching function will continue to the end of a search pattern even if includeScore: false, // List of properties that will be searched. This also supports nested properties. keys: [], // Whether to sort the result list, by score shouldSort: true, // Default sort function: sort by ascending score, ascending index sortFn: (a, b) => a.score === b.score ? a.idx < b.idx ? -1 : 1 : a.score < b.score ? -1 : 1 }; var FuzzyOptions = { // Approximately where in the text is the pattern expected to be found? location: 0, // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match // (of both letters and location), a threshold of '1.0' would match anything. threshold: 0.6, // Determines how close the match must be to the fuzzy location (specified above). // An exact letter match which is 'distance' characters away from the fuzzy location // would score as a complete mismatch. A distance of '0' requires the match be at // the exact location specified, a threshold of '1000' would require a perfect match // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold. distance: 100 }; var AdvancedOptions = { // When `true`, it enables the use of unix-like search commands useExtendedSearch: false, // The get function to use when fetching an object's properties. // The default will search nested paths *ie foo.bar.baz* getFn: get, // When `true`, search will ignore `location` and `distance`, so it won't matter // where in the string the pattern appears. // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score ignoreLocation: false, // When `true`, the calculation for the relevance score (used for sorting) will // ignore the field-length norm. // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm ignoreFieldNorm: false, // The weight to determine how much field length norm effects scoring. fieldNormWeight: 1 }; var Config = { ...BasicOptions, ...MatchOptions, ...FuzzyOptions, ...AdvancedOptions }; var SPACE = /[^ ]+/g; function norm(weight = 1, mantissa = 3) { const cache = /* @__PURE__ */ new Map(); const m = Math.pow(10, mantissa); return { get(value) { const numTokens = value.match(SPACE).length; if (cache.has(numTokens)) { return cache.get(numTokens); } const norm2 = 1 / Math.pow(numTokens, 0.5 * weight); const n = parseFloat(Math.round(norm2 * m) / m); cache.set(numTokens, n); return n; }, clear() { cache.clear(); } }; } var FuseIndex = class { constructor({ getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { this.norm = norm(fieldNormWeight, 3); this.getFn = getFn; this.isCreated = false; this.setIndexRecords(); } setSources(docs = []) { this.docs = docs; } setIndexRecords(records = []) { this.records = records; } setKeys(keys = []) { this.keys = keys; this._keysMap = {}; keys.forEach((key, idx) => { this._keysMap[key.id] = idx; }); } create() { if (this.isCreated || !this.docs.length) { return; } this.isCreated = true; if (isString(this.docs[0])) { this.docs.forEach((doc, docIndex) => { this._addString(doc, docIndex); }); } else { this.docs.forEach((doc, docIndex) => { this._addObject(doc, docIndex); }); } this.norm.clear(); } // Adds a doc to the end of the index add(doc) { const idx = this.size(); if (isString(doc)) { this._addString(doc, idx); } else { this._addObject(doc, idx); } } // Removes the doc at the specified index of the index removeAt(idx) { this.records.splice(idx, 1); for (let i = idx, len = this.size(); i < len; i += 1) { this.records[i].i -= 1; } } getValueForItemAtKeyId(item, keyId) { return item[this._keysMap[keyId]]; } size() { return this.records.length; } _addString(doc, docIndex) { if (!isDefined(doc) || isBlank(doc)) { return; } let record = { v: doc, i: docIndex, n: this.norm.get(doc) }; this.records.push(record); } _addObject(doc, docIndex) { let record = { i: docIndex, $: {} }; this.keys.forEach((key, keyIndex) => { let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path); if (!isDefined(value)) { return; } if (isArray(value)) { let subRecords = []; const stack = [{ nestedArrIndex: -1, value }]; while (stack.length) { const { nestedArrIndex, value: value2 } = stack.pop(); if (!isDefined(value2)) { continue; } if (isString(value2) && !isBlank(value2)) { let subRecord = { v: value2, i: nestedArrIndex, n: this.norm.get(value2) }; subRecords.push(subRecord); } else if (isArray(value2)) { value2.forEach((item, k) => { stack.push({ nestedArrIndex: k, value: item }); }); } else ; } record.$[keyIndex] = subRecords; } else if (isString(value) && !isBlank(value)) { let subRecord = { v: value, n: this.norm.get(value) }; record.$[keyIndex] = subRecord; } }); this.records.push(record); } toJSON() { return { keys: this.keys, records: this.records }; } }; function createIndex(keys, docs, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { const myIndex = new FuseIndex({ getFn, fieldNormWeight }); myIndex.setKeys(keys.map(createKey)); myIndex.setSources(docs); myIndex.create(); return myIndex; } function parseIndex(data, { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}) { const { keys, records } = data; const myIndex = new FuseIndex({ getFn, fieldNormWeight }); myIndex.setKeys(keys); myIndex.setIndexRecords(records); return myIndex; } function computeScore$1(pattern, { errors = 0, currentLocation = 0, expectedLocation = 0, distance = Config.distance, ignoreLocation = Config.ignoreLocation } = {}) { const accuracy = errors / pattern.length; if (ignoreLocation) { return accuracy; } const proximity = Math.abs(expectedLocation - currentLocation); if (!distance) { return proximity ? 1 : accuracy; } return accuracy + proximity / distance; } function convertMaskToIndices(matchmask = [], minMatchCharLength = Config.minMatchCharLength) { let indices = []; let start = -1; let end = -1; let i = 0; for (let len = matchmask.length; i < len; i += 1) { let match = matchmask[i]; if (match && start === -1) { start = i; } else if (!match && start !== -1) { end = i - 1; if (end - start + 1 >= minMatchCharLength) { indices.push([start, end]); } start = -1; } } if (matchmask[i - 1] && i - start >= minMatchCharLength) { indices.push([start, i - 1]); } return indices; } var MAX_BITS = 32; function search(text2, pattern, patternAlphabet, { location = Config.location, distance = Config.distance, threshold = Config.threshold, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, includeMatches = Config.includeMatches, ignoreLocation = Config.ignoreLocation } = {}) { if (pattern.length > MAX_BITS) { throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS)); } const patternLen = pattern.length; const textLen = text2.length; const expectedLocation = Math.max(0, Math.min(location, textLen)); let currentThreshold = threshold; let bestLocation = expectedLocation; const computeMatches = minMatchCharLength > 1 || includeMatches; const matchMask = computeMatches ? Array(textLen) : []; let index; while ((index = text2.indexOf(pattern, bestLocation)) > -1) { let score = computeScore$1(pattern, { currentLocation: index, expectedLocation, distance, ignoreLocation }); currentThreshold = Math.min(score, currentThreshold); bestLocation = index + patternLen; if (computeMatches) { let i = 0; while (i < patternLen) { matchMask[index + i] = 1; i += 1; } } } bestLocation = -1; let lastBitArr = []; let finalScore = 1; let binMax = patternLen + textLen; const mask = 1 << patternLen - 1; for (let i = 0; i < patternLen; i += 1) { let binMin = 0; let binMid = binMax; while (binMin < binMid) { const score2 = computeScore$1(pattern, { errors: i, currentLocation: expectedLocation + binMid, expectedLocation, distance, ignoreLocation }); if (score2 <= currentThreshold) { binMin = binMid; } else { binMax = binMid; } binMid = Math.floor((binMax - binMin) / 2 + binMin); } binMax = binMid; let start = Math.max(1, expectedLocation - binMid + 1); let finish = findAllMatches ? textLen : Math.min(expectedLocation + binMid, textLen) + patternLen; let bitArr = Array(finish + 2); bitArr[finish + 1] = (1 << i) - 1; for (let j = finish; j >= start; j -= 1) { let currentLocation = j - 1; let charMatch = patternAlphabet[text2.charAt(currentLocation)]; if (computeMatches) { matchMask[currentLocation] = +!!charMatch; } bitArr[j] = (bitArr[j + 1] << 1 | 1) & charMatch; if (i) { bitArr[j] |= (lastBitArr[j + 1] | lastBitArr[j]) << 1 | 1 | lastBitArr[j + 1]; } if (bitArr[j] & mask) { finalScore = computeScore$1(pattern, { errors: i, currentLocation, expectedLocation, distance, ignoreLocation }); if (finalScore <= currentThreshold) { currentThreshold = finalScore; bestLocation = currentLocation; if (bestLocation <= expectedLocation) { break; } start = Math.max(1, 2 * expectedLocation - bestLocation); } } } const score = computeScore$1(pattern, { errors: i + 1, currentLocation: expectedLocation, expectedLocation, distance, ignoreLocation }); if (score > currentThreshold) { break; } lastBitArr = bitArr; } const result = { isMatch: bestLocation >= 0, // Count exact matches (those with a score of 0) to be "almost" exact score: Math.max(1e-3, finalScore) }; if (computeMatches) { const indices = convertMaskToIndices(matchMask, minMatchCharLength); if (!indices.length) { result.isMatch = false; } else if (includeMatches) { result.indices = indices; } } return result; } function createPatternAlphabet(pattern) { let mask = {}; for (let i = 0, len = pattern.length; i < len; i += 1) { const char = pattern.charAt(i); mask[char] = (mask[char] || 0) | 1 << len - i - 1; } return mask; } var BitapSearch = class { constructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreLocation = Config.ignoreLocation } = {}) { this.options = { location, threshold, distance, includeMatches, findAllMatches, minMatchCharLength, isCaseSensitive, ignoreLocation }; this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); this.chunks = []; if (!this.pattern.length) { return; } const addChunk = (pattern2, startIndex) => { this.chunks.push({ pattern: pattern2, alphabet: createPatternAlphabet(pattern2), startIndex }); }; const len = this.pattern.length; if (len > MAX_BITS) { let i = 0; const remainder = len % MAX_BITS; const end = len - remainder; while (i < end) { addChunk(this.pattern.substr(i, MAX_BITS), i); i += MAX_BITS; } if (remainder) { const startIndex = len - MAX_BITS; addChunk(this.pattern.substr(startIndex), startIndex); } } else { addChunk(this.pattern, 0); } } searchIn(text2) { const { isCaseSensitive, includeMatches } = this.options; if (!isCaseSensitive) { text2 = text2.toLowerCase(); } if (this.pattern === text2) { let result2 = { isMatch: true, score: 0 }; if (includeMatches) { result2.indices = [[0, text2.length - 1]]; } return result2; } const { location, distance, threshold, findAllMatches, minMatchCharLength, ignoreLocation } = this.options; let allIndices = []; let totalScore = 0; let hasMatches = false; this.chunks.forEach(({ pattern, alphabet, startIndex }) => { const { isMatch, score, indices } = search(text2, pattern, alphabet, { location: location + startIndex, distance, threshold, findAllMatches, minMatchCharLength, includeMatches, ignoreLocation }); if (isMatch) { hasMatches = true; } totalScore += score; if (isMatch && indices) { allIndices = [...allIndices, ...indices]; } }); let result = { isMatch: hasMatches, score: hasMatches ? totalScore / this.chunks.length : 1 }; if (hasMatches && includeMatches) { result.indices = allIndices; } return result; } }; var BaseMatch = class { constructor(pattern) { this.pattern = pattern; } static isMultiMatch(pattern) { return getMatch(pattern, this.multiRegex); } static isSingleMatch(pattern) { return getMatch(pattern, this.singleRegex); } search() { } }; function getMatch(pattern, exp) { const matches = pattern.match(exp); return matches ? matches[1] : null; } var ExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "exact"; } static get multiRegex() { return /^="(.*)"$/; } static get singleRegex() { return /^=(.*)$/; } search(text2) { const isMatch = text2 === this.pattern; return { isMatch, score: isMatch ? 0 : 1, indices: [0, this.pattern.length - 1] }; } }; var InverseExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-exact"; } static get multiRegex() { return /^!"(.*)"$/; } static get singleRegex() { return /^!(.*)$/; } search(text2) { const index = text2.indexOf(this.pattern); const isMatch = index === -1; return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } }; var PrefixExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "prefix-exact"; } static get multiRegex() { return /^\^"(.*)"$/; } static get singleRegex() { return /^\^(.*)$/; } search(text2) { const isMatch = text2.startsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, this.pattern.length - 1] }; } }; var InversePrefixExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-prefix-exact"; } static get multiRegex() { return /^!\^"(.*)"$/; } static get singleRegex() { return /^!\^(.*)$/; } search(text2) { const isMatch = !text2.startsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } }; var SuffixExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "suffix-exact"; } static get multiRegex() { return /^"(.*)"\$$/; } static get singleRegex() { return /^(.*)\$$/; } search(text2) { const isMatch = text2.endsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [text2.length - this.pattern.length, text2.length - 1] }; } }; var InverseSuffixExactMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "inverse-suffix-exact"; } static get multiRegex() { return /^!"(.*)"\$$/; } static get singleRegex() { return /^!(.*)\$$/; } search(text2) { const isMatch = !text2.endsWith(this.pattern); return { isMatch, score: isMatch ? 0 : 1, indices: [0, text2.length - 1] }; } }; var FuzzyMatch = class extends BaseMatch { constructor(pattern, { location = Config.location, threshold = Config.threshold, distance = Config.distance, includeMatches = Config.includeMatches, findAllMatches = Config.findAllMatches, minMatchCharLength = Config.minMatchCharLength, isCaseSensitive = Config.isCaseSensitive, ignoreLocation = Config.ignoreLocation } = {}) { super(pattern); this._bitapSearch = new BitapSearch(pattern, { location, threshold, distance, includeMatches, findAllMatches, minMatchCharLength, isCaseSensitive, ignoreLocation }); } static get type() { return "fuzzy"; } static get multiRegex() { return /^"(.*)"$/; } static get singleRegex() { return /^(.*)$/; } search(text2) { return this._bitapSearch.searchIn(text2); } }; var IncludeMatch = class extends BaseMatch { constructor(pattern) { super(pattern); } static get type() { return "include"; } static get multiRegex() { return /^'"(.*)"$/; } static get singleRegex() { return /^'(.*)$/; } search(text2) { let location = 0; let index; const indices = []; const patternLen = this.pattern.length; while ((index = text2.indexOf(this.pattern, location)) > -1) { location = index + patternLen; indices.push([index, location - 1]); } const isMatch = !!indices.length; return { isMatch, score: isMatch ? 0 : 1, indices }; } }; var searchers = [ ExactMatch, IncludeMatch, PrefixExactMatch, InversePrefixExactMatch, InverseSuffixExactMatch, SuffixExactMatch, InverseExactMatch, FuzzyMatch ]; var searchersLen = searchers.length; var SPACE_RE = / +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/; var OR_TOKEN = "|"; function parseQuery(pattern, options = {}) { return pattern.split(OR_TOKEN).map((item) => { let query = item.trim().split(SPACE_RE).filter((item2) => item2 && !!item2.trim()); let results = []; for (let i = 0, len = query.length; i < len; i += 1) { const queryItem = query[i]; let found = false; let idx = -1; while (!found && ++idx < searchersLen) { const searcher = searchers[idx]; let token = searcher.isMultiMatch(queryItem); if (token) { results.push(new searcher(token, options)); found = true; } } if (found) { continue; } idx = -1; while (++idx < searchersLen) { const searcher = searchers[idx]; let token = searcher.isSingleMatch(queryItem); if (token) { results.push(new searcher(token, options)); break; } } } return results; }); } var MultiMatchSet = /* @__PURE__ */ new Set([FuzzyMatch.type, IncludeMatch.type]); var ExtendedSearch = class { constructor(pattern, { isCaseSensitive = Config.isCaseSensitive, includeMatches = Config.includeMatches, minMatchCharLength = Config.minMatchCharLength, ignoreLocation = Config.ignoreLocation, findAllMatches = Config.findAllMatches, location = Config.location, threshold = Config.threshold, distance = Config.distance } = {}) { this.query = null; this.options = { isCaseSensitive, includeMatches, minMatchCharLength, findAllMatches, ignoreLocation, location, threshold, distance }; this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase(); this.query = parseQuery(this.pattern, this.options); } static condition(_, options) { return options.useExtendedSearch; } searchIn(text2) { const query = this.query; if (!query) { return { isMatch: false, score: 1 }; } const { includeMatches, isCaseSensitive } = this.options; text2 = isCaseSensitive ? text2 : text2.toLowerCase(); let numMatches = 0; let allIndices = []; let totalScore = 0; for (let i = 0, qLen = query.length; i < qLen; i += 1) { const searchers2 = query[i]; allIndices.length = 0; numMatches = 0; for (let j = 0, pLen = searchers2.length; j < pLen; j += 1) { const searcher = searchers2[j]; const { isMatch, indices, score } = searcher.search(text2); if (isMatch) { numMatches += 1; totalScore += score; if (includeMatches) { const type = searcher.constructor.type; if (MultiMatchSet.has(type)) { allIndices = [...allIndices, ...indices]; } else { allIndices.push(indices); } } } else { totalScore = 0; numMatches = 0; allIndices.length = 0; break; } } if (numMatches) { let result = { isMatch: true, score: totalScore / numMatches }; if (includeMatches) { result.indices = allIndices; } return result; } } return { isMatch: false, score: 1 }; } }; var registeredSearchers = []; function register(...args) { registeredSearchers.push(...args); } function createSearcher(pattern, options) { for (let i = 0, len = registeredSearchers.length; i < len; i += 1) { let searcherClass = registeredSearchers[i]; if (searcherClass.condition(pattern, options)) { return new searcherClass(pattern, options); } } return new BitapSearch(pattern, options); } var LogicalOperator = { AND: "$and", OR: "$or" }; var KeyType = { PATH: "$path", PATTERN: "$val" }; var isExpression = (query) => !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]); var isPath = (query) => !!query[KeyType.PATH]; var isLeaf = (query) => !isArray(query) && isObject(query) && !isExpression(query); var convertToExplicit = (query) => ({ [LogicalOperator.AND]: Object.keys(query).map((key) => ({ [key]: query[key] })) }); function parse(query, options, { auto = true } = {}) { const next = (query2) => { let keys = Object.keys(query2); const isQueryPath = isPath(query2); if (!isQueryPath && keys.length > 1 && !isExpression(query2)) { return next(convertToExplicit(query2)); } if (isLeaf(query2)) { const key = isQueryPath ? query2[KeyType.PATH] : keys[0]; const pattern = isQueryPath ? query2[KeyType.PATTERN] : query2[key]; if (!isString(pattern)) { throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key)); } const obj = { keyId: createKeyId(key), pattern }; if (auto) { obj.searcher = createSearcher(pattern, options); } return obj; } let node = { children: [], operator: keys[0] }; keys.forEach((key) => { const value = query2[key]; if (isArray(value)) { value.forEach((item) => { node.children.push(next(item)); }); } }); return node; }; if (!isExpression(query)) { query = convertToExplicit(query); } return next(query); } function computeScore(results, { ignoreFieldNorm = Config.ignoreFieldNorm }) { results.forEach((result) => { let totalScore = 1; result.matches.forEach(({ key, norm: norm2, score }) => { const weight = key ? key.weight : null; totalScore *= Math.pow( score === 0 && weight ? Number.EPSILON : score, (weight || 1) * (ignoreFieldNorm ? 1 : norm2) ); }); result.score = totalScore; }); } function transformMatches(result, data) { const matches = result.matches; data.matches = []; if (!isDefined(matches)) { return; } matches.forEach((match) => { if (!isDefined(match.indices) || !match.indices.length) { return; } const { indices, value } = match; let obj = { indices, value }; if (match.key) { obj.key = match.key.src; } if (match.idx > -1) { obj.refIndex = match.idx; } data.matches.push(obj); }); } function transformScore(result, data) { data.score = result.score; } function format(results, docs, { includeMatches = Config.includeMatches, includeScore = Config.includeScore } = {}) { const transformers = []; if (includeMatches) transformers.push(transformMatches); if (includeScore) transformers.push(transformScore); return results.map((result) => { const { idx } = result; const data = { item: docs[idx], refIndex: idx }; if (transformers.length) { transformers.forEach((transformer) => { transformer(result, data); }); } return data; }); } var Fuse = class { constructor(docs, options = {}, index) { this.options = { ...Config, ...options }; if (this.options.useExtendedSearch && false) { throw new Error(EXTENDED_SEARCH_UNAVAILABLE); } this._keyStore = new KeyStore(this.options.keys); this.setCollection(docs, index); } setCollection(docs, index) { this._docs = docs; if (index && !(index instanceof FuseIndex)) { throw new Error(INCORRECT_INDEX_TYPE); } this._myIndex = index || createIndex(this.options.keys, this._docs, { getFn: this.options.getFn, fieldNormWeight: this.options.fieldNormWeight }); } add(doc) { if (!isDefined(doc)) { return; } this._docs.push(doc); this._myIndex.add(doc); } remove(predicate = () => false) { const results = []; for (let i = 0, len = this._docs.length; i < len; i += 1) { const doc = this._docs[i]; if (predicate(doc, i)) { this.removeAt(i); i -= 1; len -= 1; results.push(doc); } } return results; } removeAt(idx) { this._docs.splice(idx, 1); this._myIndex.removeAt(idx); } getIndex() { return this._myIndex; } search(query, { limit = -1 } = {}) { const { includeMatches, includeScore, shouldSort, sortFn, ignoreFieldNorm } = this.options; let results = isString(query) ? isString(this._docs[0]) ? this._searchStringList(query) : this._searchObjectList(query) : this._searchLogical(query); computeScore(results, { ignoreFieldNorm }); if (shouldSort) { results.sort(sortFn); } if (isNumber(limit) && limit > -1) { results = results.slice(0, limit); } return format(results, this._docs, { includeMatches, includeScore }); } _searchStringList(query) { const searcher = createSearcher(query, this.options); const { records } = this._myIndex; const results = []; records.forEach(({ v: text2, i: idx, n: norm2 }) => { if (!isDefined(text2)) { return; } const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { results.push({ item: text2, idx, matches: [{ score, value: text2, norm: norm2, indices }] }); } }); return results; } _searchLogical(query) { const expression = parse(query, this.options); const evaluate = (node, item, idx) => { if (!node.children) { const { keyId, searcher } = node; const matches = this._findMatches({ key: this._keyStore.get(keyId), value: this._myIndex.getValueForItemAtKeyId(item, keyId), searcher }); if (matches && matches.length) { return [ { idx, item, matches } ]; } return []; } const res = []; for (let i = 0, len = node.children.length; i < len; i += 1) { const child = node.children[i]; const result = evaluate(child, item, idx); if (result.length) { res.push(...result); } else if (node.operator === LogicalOperator.AND) { return []; } } return res; }; const records = this._myIndex.records; const resultMap = {}; const results = []; records.forEach(({ $: item, i: idx }) => { if (isDefined(item)) { let expResults = evaluate(expression, item, idx); if (expResults.length) { if (!resultMap[idx]) { resultMap[idx] = { idx, item, matches: [] }; results.push(resultMap[idx]); } expResults.forEach(({ matches }) => { resultMap[idx].matches.push(...matches); }); } } }); return results; } _searchObjectList(query) { const searcher = createSearcher(query, this.options); const { keys, records } = this._myIndex; const results = []; records.forEach(({ $: item, i: idx }) => { if (!isDefined(item)) { return; } let matches = []; keys.forEach((key, keyIndex) => { matches.push( ...this._findMatches({ key, value: item[keyIndex], searcher }) ); }); if (matches.length) { results.push({ idx, item, matches }); } }); return results; } _findMatches({ key, value, searcher }) { if (!isDefined(value)) { return []; } let matches = []; if (isArray(value)) { value.forEach(({ v: text2, i: idx, n: norm2 }) => { if (!isDefined(text2)) { return; } const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { matches.push({ score, key, value: text2, idx, norm: norm2, indices }); } }); } else { const { v: text2, n: norm2 } = value; const { isMatch, score, indices } = searcher.searchIn(text2); if (isMatch) { matches.push({ score, key, value: text2, norm: norm2, indices }); } } return matches; } }; Fuse.version = "7.0.0"; Fuse.createIndex = createIndex; Fuse.parseIndex = parseIndex; Fuse.config = Config; { Fuse.parseQuery = parse; } { register(ExtendedSearch); } // src/view/helpers/document-search.ts var _searchTriggeredMinimap; var DocumentSearch = class { constructor(view) { this.view = view; __privateAdd(this, _searchTriggeredMinimap, void 0); this.updateIndex = () => { const documentState = this.view.documentStore.getValue(); const viewState = this.view.viewStore.getValue(); const items = []; for (const id2 of Object.keys(documentState.document.content)) { const content = documentState.document.content[id2]?.content; if (content) { items.push({ id: id2, content }); } } this.fuse = new Fuse(items, { keys: ["content"], threshold: viewState.search.fuzzySearch ? 0.4 : 0.1, shouldSort: true, isCaseSensitive: false, ignoreLocation: true }); }; this.resetIndex = () => { this.fuse = null; }; this.search = (query) => { if (!this.fuse) { this.updateIndex(); } return this.fuse.search(query); }; } get searchTriggeredMinimap() { return __privateGet(this, _searchTriggeredMinimap); } set searchTriggeredMinimap(value) { __privateSet(this, _searchTriggeredMinimap, value); } }; _searchTriggeredMinimap = new WeakMap(); // src/stores/view/subscriptions/effects/style-rules/style-rules-processor.ts var import_obsidian36 = require("obsidian"); var StyleRulesProcessor = class { constructor(view) { this.rules = []; this.onViewMount = async () => { this.setRules(); this.processRules(null); }; this.onDocumentUpdate = async (action) => { this.processRules(action); }; this.onRulesUpdate = async () => { this.setRules(); this.processRules(null); }; this.onViewUnmount = async () => { await rulesWorker.run({ type: "destroy", payload: { viewId: this.view.id } }); this.rules = []; }; this.processRules = (0, import_obsidian36.debounce)( async (action) => { let results = null; if (this.rules.length > 0) { const document2 = this.view.documentStore.getValue().document; results = await rulesWorker.run({ type: "process-rules", payload: { document: document2, rules: this.rules, action, viewId: this.view.id } }); } this.view.viewStore.dispatch({ type: "view/style-rules/update-results", payload: { results } }); }, 500 ); this.setRules = () => { const path = this.view.file?.path; invariant(path); const rules = this.view.plugin.settings.getValue().styleRules.documents[path]; this.rules = rules?.rules ?? []; }; this.view = view; } }; // src/helpers/delay.ts var delay = async (milliseconds) => { return new Promise((resolve) => setTimeout(resolve, milliseconds)); }; // src/stores/view/subscriptions/effects/align-branch/helpers/delay-align.ts var delayAlign = (action) => { let delay2 = 0; if (action.type === "view/left-sidebar/toggle" || action.type === "VIEW/TOGGLE_MINIMAP") { delay2 = 300; } else if (action.type === "DOCUMENT/DROP_NODE") { delay2 = 32; } return delay2; }; // src/stores/view/subscriptions/effects/align-branch/helpers/adjust-scroll-behavior.ts var adjustScrollBehavior = (action) => { let behavior = "smooth"; if (action?.type === "DOCUMENT/MOVE_NODE") { const verticalMove = action.payload.direction === "down" || action.payload.direction === "up"; if (verticalMove) behavior = "instant"; } else if (action.type === "DOCUMENT/LOAD_FILE") { behavior = "instant"; } else if (action.type === "UI/CHANGE_ZOOM_LEVEL") { behavior = "instant"; } return behavior; }; // src/stores/view/subscriptions/effects/align-branch/create-align-branch-actions/force-center-active-node-v.ts var forceCenterActiveNodeV = (action) => { let centerActiveNodeV = false; centerActiveNodeV = action.type === "view/life-cycle/mount" || action.type === "DOCUMENT/LOAD_FILE"; if (!centerActiveNodeV) { const type = getDocumentEventType(action.type); centerActiveNodeV = !!type.dropOrMove || !!type.changeHistory || !!type.createOrDelete && action.type !== "DOCUMENT/INSERT_NODE"; } return centerActiveNodeV; }; // src/stores/view/subscriptions/effects/align-branch/create-align-branch-actions/lazy-vertical-scrolling-mode.ts var lazyVerticalScrollingMode = (context, action) => { const actions = []; if (action.type === "DOCUMENT/INSERT_NODE") { if (action.payload.position === "right") { actions.push({ action: "20/active-node/vertical/align-with-parent" }); } else { actions.push({ action: "20/active-node/vertical/reveal" }); } } else { actions.push({ action: "20/active-node/vertical/reveal" }); const previousActiveBranch = context.previousActiveBranch; const activeBranch = context.activeBranch; if (previousActiveBranch) { const isChildOfPreviousNode = previousActiveBranch.group === activeBranch.group || previousActiveBranch.node === activeBranch.group; const isParentOfPreviousNode = previousActiveBranch.group === activeBranch.node; const isMovingLeft = isParentOfPreviousNode || !isChildOfPreviousNode && activeBranch.sortedParentNodes.every((p, i) => { return previousActiveBranch.sortedParentNodes[i] === p; }); if (!(isChildOfPreviousNode || isMovingLeft)) { actions.push({ action: "30/parents/vertical/align-with-active-node" }); } if (!isParentOfPreviousNode) { actions.push({ action: "40/children/vertical/align-with-active-node" }); } } } return actions; }; // src/stores/view/subscriptions/effects/align-branch/create-align-branch-actions/outline-scrolling-actions.ts var outlineScrollingActions = (context, action) => { const actions = []; const settings = context.alignBranchSettings; const forceCenterActiveNodeV2 = action.type === "view/life-cycle/mount" || action.type === "DOCUMENT/LOAD_FILE"; if (forceCenterActiveNodeV2) { actions.push({ action: "20/active-node/horizontal/center" }); actions.push({ action: "20/active-node/vertical/center" }); } else { if (settings.centerActiveNodeH) { actions.push({ action: "20/active-node/horizontal/center" }); } else { actions.push({ action: "20/active-node/horizontal/reveal" }); } if (settings.centerActiveNodeV) { actions.push({ action: "20/active-node/vertical/center" }); } else { actions.push({ action: "20/active-node/vertical/reveal" }); } } if (action.type === "view/life-cycle/mount") { actions.push({ action: "10/first-column/horizontal/move-to-the-left" }); } return actions; }; // src/stores/view/subscriptions/effects/align-branch/create-align-branch-actions/force-center-active-node-h.ts var forceCenterActiveNodeH = (context, action) => { if (action.type === "view/life-cycle/mount") { return context.activeBranch.sortedParentNodes.length < 2; } }; // src/stores/view/subscriptions/effects/align-branch/create-align-branch-actions/create-align-branch-actions.ts var createAlignBranchActions = (context, action) => { const actions = []; if (action.type === "view/align-branch/reveal-node") { actions.push({ action: "20/active-node/vertical/reveal" }); actions.push({ action: "20/active-node/horizontal/reveal" }); return actions; } else if (action.type === "view/align-branch/center-node") { actions.push({ action: "20/active-node/vertical/center" }); actions.push({ action: "20/active-node/horizontal/center" }); if (!context.outlineMode) { actions.push({ action: "30/parents/vertical/center" }); actions.push({ action: "40/children/vertical/center" }); } return actions; } if (context.outlineMode) { return outlineScrollingActions(context, action); } const settings = context.alignBranchSettings; if (settings.centerActiveNodeH || forceCenterActiveNodeH(context, action)) { actions.push({ action: "20/active-node/horizontal/center" }); } else { actions.push({ action: "20/active-node/horizontal/reveal" }); } if (settings.centerActiveNodeV || forceCenterActiveNodeV(action)) { actions.push({ action: "20/active-node/vertical/center" }); actions.push({ action: "30/parents/vertical/center" }); actions.push({ action: "40/children/vertical/center" }); } else { actions.push(...lazyVerticalScrollingMode(context, action)); } if (action.type === "view/life-cycle/mount" || action.type === "DOCUMENT/SPLIT_NODE" || action.type === "DOCUMENT/LOAD_FILE") { actions.push({ action: "50/inactive-columns/vertical/move-up" }); } if (!settings.centerActiveNodeH && (action.type === "view/life-cycle/mount" || action.type === "UI/CHANGE_ZOOM_LEVEL")) { actions.push({ action: "10/first-column/horizontal/move-to-the-left" }); } return actions; }; // src/lib/align-element/constants.ts var LEFT_PADDING = 15; var CONTROLS_BAR_WIDTH = 60; var BREADCRUMBS_HEIGHT = 50; var TOOLBAR_HEIGHT = 50; var THRESHOLD = 5; // src/lib/align-element/helpers/calculate-scroll-left.ts var calculateScrollLeft = (elementRect, containerRect, center, scrollToTheLeft = false) => { const viewPortIsWideEnough = containerRect.width > elementRect.width; const deltaRight = containerRect.right - CONTROLS_BAR_WIDTH - elementRect.right; const deltaLeft = containerRect.left + LEFT_PADDING - elementRect.left; const leftSideIsVisible = deltaLeft < 0; const rightSideIsVisible = deltaRight > 0; let scrollLeft = 0; if (!viewPortIsWideEnough) { scrollLeft = deltaLeft; } else if (center) { const horizontalMiddle = containerRect.left + containerRect.width / 2; const elementMiddle = elementRect.left + elementRect.width / 2; scrollLeft = horizontalMiddle - elementMiddle; } else if (!leftSideIsVisible || scrollToTheLeft) { scrollLeft = deltaLeft; } else if (!rightSideIsVisible) { scrollLeft = deltaRight; } return scrollLeft; }; // src/lib/align-element/align-element-horizontally.ts var alignElementHorizontally = (context, id2, center, scrollToTheLeft = false) => { const element2 = getElementById(context.container, id2); if (!element2) return; const column = element2.matchParent(".column"); if (!column) return; const elementRect = element2.getBoundingClientRect(); const scrollLeft = calculateScrollLeft( elementRect, context.containerRect, center, scrollToTheLeft ); if (Math.abs(scrollLeft) > THRESHOLD) context.container.scrollBy({ left: scrollLeft * -1, behavior: scrollToTheLeft ? "instant" : context.alignBranchSettings.behavior }); else { context.container.scrollBy({ left: 0, behavior: "instant" }); } return column.id; }; // src/stores/view/subscriptions/effects/align-branch/run-align-branch-actions/actions/scroll-first-column-to-the-left.ts var scrollFirstColumnToTheLeft = (context) => { const firstColumnId = context.columns[0]?.id; if (!firstColumnId) return; alignElementHorizontally(context, firstColumnId, false, true); }; // src/lib/align-element/helpers/calculate-scroll-top.ts var calculateScrollTop = (elementRect, containerRect, center) => { const viewPortIsTallEnough = containerRect.height >= elementRect.height; const deltaTop = containerRect.top + TOOLBAR_HEIGHT - elementRect.top; const deltaBottom = containerRect.bottom - BREADCRUMBS_HEIGHT - elementRect.bottom; const bottomIsVisible = deltaBottom > 0; const topIsVisible = deltaTop < 0; let scrollTop = 0; if (!viewPortIsTallEnough) { scrollTop = deltaTop; } else if (center) { const verticalMiddle = containerRect.height / 2; scrollTop = verticalMiddle - (elementRect.top - containerRect.top + elementRect.height / 2); } else { if (!topIsVisible) { scrollTop = deltaTop; } else if (!bottomIsVisible) { scrollTop = deltaBottom; } } return scrollTop; }; // src/lib/align-element/helpers/calculate-scroll-top-relative.ts var calculateScrollTopRelative = (elementRect, containerRect, activeCardRect) => { const viewPortIsTallEnough = containerRect.height >= elementRect.height; const deltaTop = containerRect.top + TOOLBAR_HEIGHT - elementRect.top; let scrollTop = 0; if (!viewPortIsTallEnough) { scrollTop = deltaTop; } else { const verticalMiddle = activeCardRect.top + activeCardRect.height / 2; scrollTop = verticalMiddle - (elementRect.top + elementRect.height / 2); const elementTopVisible = elementRect.top + scrollTop >= containerRect.top + TOOLBAR_HEIGHT; const elementBottomVisible = elementRect.bottom + scrollTop <= containerRect.bottom - BREADCRUMBS_HEIGHT; if (!elementTopVisible) { scrollTop += containerRect.top + TOOLBAR_HEIGHT - (elementRect.top + scrollTop); } else if (!elementBottomVisible) { scrollTop += containerRect.bottom - BREADCRUMBS_HEIGHT - (elementRect.bottom + scrollTop); } } return scrollTop; }; // src/lib/align-element/align-element-vertically.ts var alignVertically = (context, column, elementRect, relativeId, center) => { let relativeRect = null; if (relativeId && context.state.rects.has(relativeId)) { relativeRect = context.state.rects.get(relativeId); } else if (relativeId) { const relativeElement = getElementById(context.container, relativeId); if (relativeElement) { relativeRect = relativeElement.getBoundingClientRect(); } } const scrollTop = relativeRect ? calculateScrollTopRelative( elementRect, context.containerRect, relativeRect ) : calculateScrollTop(elementRect, context.containerRect, center); if (Math.abs(scrollTop) > THRESHOLD) { column.scrollBy({ top: scrollTop * -1 / context.alignBranchSettings.zoomLevel, behavior: context.alignBranchSettings.behavior }); } else { column.scrollBy({ top: 0, behavior: "instant" }); } return { height: elementRect.height, top: elementRect.top + scrollTop }; }; var alignElementVertically = (context, id2, relativeId, center) => { const element2 = getElementById(context.container, id2); if (!element2) return; const column = element2.matchParent(".column"); if (!column) return; const elementRect = element2.getBoundingClientRect(); const rect = alignVertically( context, column, elementRect, relativeId, center ); if (!center && (id2 === context.activeBranch.group || id2 === context.activeBranch.node)) { context.state.rects.set(id2, rect); } }; // src/stores/view/subscriptions/effects/align-branch/run-align-branch-actions/actions/align-parents-nodes.ts var alignParentsNodes = (context, relativeId) => { for (const id2 of context.activeBranch.sortedParentNodes) { alignElementVertically(context, id2, relativeId, true); } }; // src/lib/align-element/align-group-of-elements-vertically.ts var alignGroupOfElementsVertically = (context, column, ids, relativeId, center = true) => { const elements = ids.map((id2) => getElementById(context.container, id2)).filter((x) => x); const elementRect = getCombinedBoundingClientRect(elements); alignVertically(context, column, elementRect, relativeId, center); }; // src/stores/view/subscriptions/effects/align-branch/helpers/align-child-columns/align-child-group-of-column.ts var alignChildGroupOfColumn = (context, column, relativeId, center) => { const columnElement = getElementById(context.container, column.id); if (!columnElement) return; const childGroups = context.activeBranch.childGroups; const childGroupsOfColumn = column.groups.filter((g) => childGroups.has(g.parentId)).map((g) => "group-" + g.parentId); alignGroupOfElementsVertically( context, columnElement, childGroupsOfColumn, relativeId, center ); }; // src/stores/view/subscriptions/effects/align-branch/helpers/align-child-columns/align-child-columns.ts var getActiveNodeOfGroup = (context, column, previousActiveNode) => { const activeNodesOfColumn = context.activeNodesOfColumn; return activeNodesOfColumn[column] && previousActiveNode ? activeNodesOfColumn[column][previousActiveNode] : null; }; var alignChildColumns = (context, relativeId, center) => { const columns = context.columns; const activeNode = context.activeBranch.node; let previousActiveNode = activeNode; const activeNodeColumn = findNodeColumn(columns, activeNode); for (let i = activeNodeColumn + 1; i < columns.length; i++) { const column = columns[i]; const activeNodeOfGroup = getActiveNodeOfGroup( context, column.id, previousActiveNode ); previousActiveNode = activeNodeOfGroup; if (activeNodeOfGroup) { alignElementVertically( context, activeNodeOfGroup, relativeId, center ); } else { const childGroups = context.activeBranch.childGroups; const columnHasChildGroup = !!column.groups.find( (g) => childGroups.has(g.parentId) ); if (columnHasChildGroup) { alignChildGroupOfColumn(context, column, relativeId, center); } } } }; // src/stores/view/subscriptions/effects/align-branch/helpers/align-child-columns/align-inactive-columns.ts var alignInactiveColumns = (context) => { const activeNodeColumn = findNodeColumn( context.columns, context.activeBranch.node ); const inactiveColumns = context.columns.filter((c, i) => { return i > activeNodeColumn && !c.groups.some( (g) => context.activeBranch.childGroups.has(g.parentId) && g.nodes.length > 0 ); }); for (const column of inactiveColumns) { const nodes = column.groups.map((g) => g.nodes).flat(); alignElementVertically(context, nodes[nodes.length - 1], null, true); } }; // src/stores/view/subscriptions/effects/align-branch/run-align-branch-actions/run-align-branch-actions.ts var runAlignBranchActions = (context, actions) => { actions = actions.sort((a, b) => a.action.localeCompare(b.action)); const activeNode = context.activeBranch.node; for (const action of actions) { const type = action.action; if (type === "10/first-column/horizontal/move-to-the-left") { scrollFirstColumnToTheLeft(context); } else if (type === "20/active-node/horizontal/center") { alignElementHorizontally(context, activeNode, true, false); } else if (type === "20/active-node/horizontal/reveal") { alignElementHorizontally(context, activeNode, false, false); } else if (type === "20/active-node/vertical/center") { alignElementVertically(context, activeNode, null, true); } else if (type === "20/active-node/vertical/reveal") { alignElementVertically(context, activeNode, null, false); } else if (type === "20/active-node/vertical/align-with-parent") { alignElementVertically( context, activeNode, context.activeBranch.group, false ); } else if (type === "30/parents/vertical/center") { alignParentsNodes(context, null); } else if (type === "30/parents/vertical/align-with-active-node") { alignParentsNodes(context, activeNode); } else if (type === "40/children/vertical/center") { alignChildColumns(context, null, true); } else if (type === "40/children/vertical/align-with-active-node") { alignChildColumns(context, activeNode, false); } else if (type === "50/inactive-columns/vertical/move-up") { alignInactiveColumns(context); } } }; // src/stores/view/subscriptions/effects/align-branch/helpers/skip-align.ts var skipAlign = (view, action) => { if (action.type === "DOCUMENT/SET_NODE_CONTENT" && action.context.isInSidebar) return true; if (action.type === "view/set-active-node/mouse-silent") return true; const outlineMode = view.plugin.settings.getValue().view.outlineMode; if (outlineMode) { const viewState = view.viewStore.getValue(); const activeNode = viewState.document.activeNode; if (viewState.outline.hiddenNodes.has(activeNode) && outlineMode) return true; } }; // src/stores/view/subscriptions/effects/align-branch/constants/action-category.ts var actionCategoryDict = { "view/align-branch/center-node": "manual", "view/align-branch/reveal-node": "manual", "DOCUMENT/LOAD_FILE": "document/reset", RESET_STORE: "document/reset", "DOCUMENT/INSERT_NODE": "document/structure", "DOCUMENT/DROP_NODE": "document/structure", "DOCUMENT/DELETE_NODE": "document/structure", "DOCUMENT/MERGE_NODE": "document/structure", "DOCUMENT/MOVE_NODE": "document/structure", "DOCUMENT/SPLIT_NODE": "document/structure", "DOCUMENT/PASTE_NODE": "document/structure", "DOCUMENT/EXTRACT_BRANCH": "document/structure", "DOCUMENT/CUT_NODE": "document/structure", "HISTORY/APPLY_PREVIOUS_SNAPSHOT": "document/structure", "HISTORY/APPLY_NEXT_SNAPSHOT": "document/structure", "HISTORY/SELECT_SNAPSHOT": "document/structure", "DOCUMENT/SET_NODE_CONTENT": "document/content", "DOCUMENT/FORMAT_HEADINGS": "document/content", "view/main/disable-edit": "view/editor", "view/main/enable-edit": "view/editor", "DOCUMENT/JUMP_TO_NODE": "view/active-node/keyboard", "DOCUMENT/NAVIGATE_USING_KEYBOARD": "view/active-node/keyboard", "NAVIGATION/SELECT_NEXT_NODE": "view/active-node/mouse", "NAVIGATION/NAVIGATE_BACK": "view/active-node/mouse", "NAVIGATION/NAVIGATE_FORWARD": "view/active-node/mouse", "view/outline/toggle-collapse-node": "view/outline", "view/outline/refresh-collapsed-nodes": "view/outline", "view/outline/toggle-collapse-all": "view/outline", // todo: add a separate event for effect source "view/set-active-node/mouse": "view/active-node/mouse", "view/set-active-node/mouse-silent": "other", "view/set-active-node/document": "view/active-node/document", "view/set-active-node/search": "view/active-node/search", "view/left-sidebar/set-width": "settings/layout", "WORKSPACE/ACTIVE_LEAF_CHANGE": "view/life-cycle", "WORKSPACE/RESIZE": "view/resize", "WORKSPACE/LAYOUT_READY": "view/life-cycle", "WORKSPACE/SET_ACTIVE_LINEAGE_VIEW": "view/life-cycle", "view/life-cycle/mount": "view/life-cycle", "VIEW/TOGGLE_MINIMAP": "settings/layout", "view/left-sidebar/toggle": "settings/layout", SET_CARD_WIDTH: "settings/layout", SET_CARDS_GAP: "settings/layout", SET_MIN_CARD_HEIGHT: "settings/layout", "VIEW/SCROLLING/TOGGLE_SCROLLING_MODE": "settings/scrolling", "settings/view/scrolling/toggle-vertical-scrolling-mode": "settings/scrolling", SET_LIMIT_PREVIEW_HEIGHT: "settings/layout", "UI/CHANGE_ZOOM_LEVEL": "settings/zoom", "view/modes/gap-between-cards/toggle": "settings/layout", "settings/view/modes/toggle-outline-mode": "settings/layout", "settings/view/set-node-indentation-width": "settings/layout", "SEARCH/SET_RESULTS": "view/active-node/search", "search/toggle-show-all-nodes": "view/active-node/search", "SEARCH/SET_QUERY": "view/active-node/search", "SEARCH/TOGGLE_INPUT": "view/active-node/search", "SEARCH/TOGGLE_FUZZY_MODE": "view/active-node/search", "FS/SET_FILE_PATH": "other", "DOCUMENT/COPY_NODE": "other", "FILE/UPDATE_FRONTMATTER": "other", "document/pinned-nodes/pin": "other", "document/pinned-nodes/unpin": "other", "document/pinned-nodes/remove-stale-nodes": "other", "document/pinned-nodes/load-from-settings": "other", "META/REFRESH_GROUP_PARENT_IDS": "other", SET_DRAG_STARTED: "other", "DOCUMENT/SET_DRAG_ENDED": "other", UPDATE_ACTIVE_BRANCH: "other", "view/confirmation/reset/disable-edit": "other", "view/confirmation/reset/delete-node": "other", "view/confirmation/confirm/delete-node": "other", "view/confirmation/confirm/disable-edit": "other", "DOCUMENT/CLEAR_SELECTION": "other", "UI/TOGGLE_HELP_SIDEBAR": "other", "UI/TOGGLE_HISTORY_SIDEBAR": "other", "UI/TOGGLE_SETTINGS_SIDEBAR": "other", CLOSE_MODALS: "other", "view/modals/toggle-style-rules": "other", "NAVIGATION/REMOVE_OBSOLETE": "other", "view/pinned-nodes/set-active-node": "other", "view/recent-nodes/set-active-node": "other", "view/sidebar/enable-edit": "other", "view/sidebar/disable-edit": "other", "view/style-rules/update-results": "other", "view/keyboard/shift/down": "other", "view/keyboard/shift/up": "other", "view/hotkeys/set-search-term": "other", "view/hotkeys/update-conflicts": "other", "view/selection/set-selection": "other", SET_DOCUMENT_TYPE: "other", SET_VIEW_TYPE: "other", DELETE_DOCUMENT_PREFERENCES: "other", "HISTORY/UPDATE_DOCUMENT_PATH": "other", SET_CUSTOM_HOTKEYS: "other", SET_FONT_SIZE: "other", SET_CONTAINER_BG: "other", SET_ACTIVE_BRANCH_BG: "other", UPDATE_DOCUMENTS_DICTIONARY: "other", "settings/document/persist-active-section": "other", "GENERAL/SET_DEFAULT_DOCUMENT_FORMAT": "other", "view/left-sidebar/set-active-tab": "other", "settings/pinned-nodes/persist": "other", "settings/pinned-nodes/persist-active-node": "other", "settings/style-rules/add": "other", "settings/style-rules/update": "other", "settings/style-rules/delete": "other", "settings/style-rules/move": "other", "settings/style-rules/update-condition": "other", "settings/style-rules/enable-rule": "other", "settings/style-rules/disable-rule": "other", "settings/view/set-maintain-edit-mode": "other", "settings/view/theme/set-inactive-node-opacity": "other", "settings/view/theme/set-active-branch-color": "other", "settings/hotkeys/set-custom-hotkey": "other", "settings/hotkeys/reset-custom-hotkey": "other", "settings/hotkeys/reset-all": "other", "settings/hotkeys/apply-preset": "other", "settings/hotkeys/toggle-editor-state": "other", "settings/hotkeys/set-blank": "other", "DOCUMENTS/DELETE_DOCUMENT": "other", "DOCUMENTS/UPDATE_DOCUMENT_PATH": "other", "DOCUMENTS/ADD_DOCUMENT": "other" }; var actionCategory = new Map( Object.entries(actionCategoryDict) ); var actionCategoryPriorityDict = { "document/reset": 100, "view/life-cycle": 100, "view/active-node/keyboard": 90, "view/active-node/mouse": 90, "document/structure": 80, "document/content": 70, "view/active-node/document": 30, "view/active-node/search": 30, "view/resize": 20, "view/editor": 20, "view/outline": 20, "settings/zoom": 20, "settings/layout": 20, "settings/scrolling": 20, manual: 10, other: 0 }; var actionCategoryPriority = new Map( Object.entries(actionCategoryPriorityDict) ); // src/lib/align-element/helpers/wait-for-active-node-to-stop-moving.ts var LOOP_DELAY_MS = 10; var MAX_ATTEMPTS = 100; var REQUIRED_MATCHES = 5; var waitForActiveNodeToStopMoving = async (view) => { const activeBranch = view.viewStore.getValue().document.activeBranch; let columnEl; let retries = 0; let hits = 0; let lastScrollTop = -1; let lastScrollLeft = -1; const container = view.container; while (retries < MAX_ATTEMPTS) { if (!columnEl) { columnEl = getElementById(container, activeBranch.column); } else { const isStill = lastScrollTop === columnEl.scrollTop && lastScrollLeft === container.scrollLeft; if (isStill) { hits++; if (hits === REQUIRED_MATCHES) return; } else { hits = 0; } lastScrollTop = columnEl.scrollTop; lastScrollLeft = container.scrollLeft; } retries++; await delay(LOOP_DELAY_MS); } }; // src/stores/view/subscriptions/effects/align-branch/align-branch.ts var AlignBranch = class { constructor(view) { this.view = view; this.previousActiveBranch = null; this.previousEvent = null; this.align = async (action) => { if (skipAlign(this.view, action)) return; const delay_ms = delayAlign(action); if (delay_ms > 0) await delay(delay_ms); await this.waitForPreviousEvent(action); const context = this.createContext(action); const actions = createAlignBranchActions(context, action); requestAnimationFrame(() => { runAlignBranchActions(context, actions); }); this.saveActiveBranch(context); }; this.createContext = (action) => { const settings = this.view.plugin.settings.getValue(); const container = this.view.container; const documentState = this.view.documentStore.getValue(); const viewState = this.view.viewStore.getValue(); const activeBranch = viewState.document.activeBranch; const behavior = adjustScrollBehavior(action); const context = { previousActiveBranch: this.previousActiveBranch, activeBranch, columns: documentState.document.columns, container, activeNodesOfColumn: viewState.document.activeNodesOfColumn, containerRect: container.getBoundingClientRect(), outlineMode: settings.view.outlineMode, alignBranchSettings: { centerActiveNodeH: settings.view.scrolling.centerActiveNodeH, centerActiveNodeV: settings.view.scrolling.centerActiveNodeV, zoomLevel: settings.view.zoomLevel, behavior }, state: { rects: /* @__PURE__ */ new Map() } }; return context; }; this.waitForPreviousEvent = async (action) => { const category = actionCategory.get(action.type); if (category === "other") { throw new SilentError("unsupported event: " + action.type); } const event = { action: action.type, category, priority: actionCategoryPriority.get(category), ts: Date.now() }; if (this.previousEvent) { if (event.priority < this.previousEvent.priority) { if (event.ts - this.previousEvent.ts < 500) { await waitForActiveNodeToStopMoving(this.view); } } } this.previousEvent = event; }; } saveActiveBranch(context) { this.previousActiveBranch = context.activeBranch; } }; // src/view/view.ts var LINEAGE_VIEW_TYPE = "lineage"; var LineageView = class _LineageView extends import_obsidian37.TextFileView { constructor(leaf, plugin) { super(leaf); this.plugin = plugin; this.minimapDom = null; this.onDestroyCallbacks = /* @__PURE__ */ new Set(); this.onViewStoreError = (error, location, action) => { if (action && action.type === "DOCUMENT/LOAD_FILE") { if (this.file) { this.plugin.documents.dispatch({ type: "DOCUMENTS/DELETE_DOCUMENT", payload: { path: this.file.path } }); setViewType(this.plugin, this.file.path, "markdown"); toggleObsidianViewType( this.plugin, this.plugin.app.workspace.getLeaf(), "markdown" ); } } onPluginError(error, location, action); }; this.saveDocument = async (immediate = false) => { invariant(this.file); const state2 = clone(this.documentStore.getValue()); const data = state2.file.frontmatter + stringifyDocument(state2.document, getDocumentFormat(this)); if (data !== this.data) { if (data.trim().length === 0) { throw new Error(lang.error_save_empty_data); } this.data = data; if (immediate) await this.save(); else this.requestSave(); } }; this.loadInitialData = async () => { invariant(this.file); const fileHasAStore = this.plugin.documents.getValue().documents[this.file.path]; if (fileHasAStore) { this.useExistingStore(); } else { this.createStore(); } this.loadDocumentToStore(true); if (!this.inlineEditor) { this.inlineEditor = new InlineEditor(this); await this.inlineEditor.onload(); } await this.inlineEditor.loadFile(this.file); this.component = new main_default({ target: this.contentEl, props: { plugin: this.plugin, view: this } }); invariant(this.container); this.onDestroyCallbacks.add(viewSubscriptions(this)); }; this.createStore = () => { invariant(this.file); this.plugin.documents.dispatch({ type: "DOCUMENTS/ADD_DOCUMENT", payload: { path: this.file.path, documentStore: this.documentStore, viewId: this.id } }); this.documentStore.dispatch({ type: "FS/SET_FILE_PATH", payload: { path: this.file.path } }); }; this.useExistingStore = () => { if (!this.file) return; this.documentStore = this.plugin.documents.getValue().documents[this.file.path].documentStore; }; this.loadDocumentToStore = (isInitialLoad = false) => { const { data, frontmatter } = extractFrontmatter(this.data); const state2 = this.documentStore.getValue(); const format2 = getOrDetectDocumentFormat(this, data); const existingData = stringifyDocument(state2.document, format2); const bodyHasChanged = existingData !== data; const frontmatterHasChanged = !bodyHasChanged && frontmatter !== state2.file.frontmatter; if (!existingData || bodyHasChanged || frontmatterHasChanged) { const isEditing2 = this.viewStore.getValue().document.editing.activeNodeId; if (frontmatterHasChanged && !isInitialLoad) { this.documentStore.dispatch({ type: "FILE/UPDATE_FRONTMATTER", payload: { frontmatter } }); } else if (!isEditing2) { const activeNode = this.viewStore.getValue().document.activeNode; const activeSection = activeNode ? this.documentStore.getValue().sections.id_section[activeNode] : null; this.documentStore.dispatch({ payload: { document: { data, frontmatter, position: null }, format: format2, activeSection }, type: "DOCUMENT/LOAD_FILE" }); if (this.isActive && !isInitialLoad && existingData && bodyHasChanged) { new import_obsidian37.Notice("Document reloaded due to external changes"); } if (!maybeGetDocumentFormat(this)) { invariant(this.file); setDocumentFormat(this.plugin, this.file.path, format2); } } } }; this.debouncedLoadDocumentToStore = (0, import_obsidian37.debounce)( this.loadDocumentToStore, 250 ); this.documentStore = new Store( defaultDocumentState(), documentReducer, this.onViewStoreError ); this.viewStore = new Store( defaultViewState(), viewReducer, this.onViewStoreError ); this.id = id.view(); this.documentSearch = new DocumentSearch(this); this.rulesProcessor = new StyleRulesProcessor(this); this.alignBranch = new AlignBranch(this); } get isActive() { return this === this.plugin.app.workspace.getActiveViewOfType(_LineageView); } get isViewOfFile() { const path = this.file?.path; return path ? this.id === this.plugin.documents.getValue().documents[path]?.viewId : false; } getViewData() { return this.data; } setViewData(data) { if (!this.activeFilePath && this.file) { this.activeFilePath = this.file?.path; this.loadInitialData(); } else if (this.file && data.trim().length === 0) { this.plugin.app.vault.adapter.read(this.file.path).then((content) => { if (content.trim().length !== 0) { throw new Error(lang.error_set_empty_data); } else { this.data = data; this.debouncedLoadDocumentToStore(); } }).catch((error) => { logger.error("Error reading file:", error); }); } else { this.data = data; this.debouncedLoadDocumentToStore(); } } async onUnloadFile() { if (this.component) { this.component.$destroy(); } this.activeFilePath = null; this.contentEl.empty(); this.documentStore = new Store( defaultDocumentState(), documentReducer, this.onViewStoreError ); if (this.inlineEditor) await this.inlineEditor.unloadFile(); for (const s of this.onDestroyCallbacks) { s(); } } clear() { this.data = ""; } getViewType() { return LINEAGE_VIEW_TYPE; } getIcon() { return customIcons.cards.name; } getDisplayText() { return this.file ? this.file.basename : ""; } async onOpen() { } /*private destroyStore = () => { const leavesOfType = this.plugin.app.workspace .getLeavesOfType(FILE_VIEW_TYPE) .filter( (l) => l.view instanceof LineageView && l.view.file?.path === this.activeFilePath && l.view !== this, ); if (leavesOfType.length === 0) { this.store.dispatch({ type: 'RESET_STORE' }); if (this.file) delete stores[this.file.path]; } };*/ async onClose() { return this.onUnloadFile(); } setMinimapDom(dom) { this.minimapDom = dom; } getMinimapDom() { invariant(this.minimapDom); return this.minimapDom; } getMinimapStore() { invariant(this.minimapStore); return this.minimapStore; } }; // src/stores/settings/subscriptions/effects/update-file-view-type-cache.ts var fileViewTypeCache = {}; var updateFileViewTypeCache = (state2) => { fileViewTypeCache = state2; }; // src/obsidian/patches/set-view-state.ts function setViewState(next) { return function(state2, ...rest) { const isMarkdownView = state2.type === "markdown"; const path = state2?.state?.file; if (isMarkdownView && // @ts-ignore fileViewTypeCache[path]?.viewType === LINEAGE_VIEW_TYPE && // @ts-ignore !state2.state.inlineEditor) { const newState = { ...state2, type: LINEAGE_VIEW_TYPE }; return next.apply(this, [newState, ...rest]); } else { return next.apply(this, [state2, ...rest]); } }; } // node_modules/monkey-around/dist/index.mjs function around(obj, factories) { const removers = Object.keys(factories).map((key) => around1(obj, key, factories[key])); return removers.length === 1 ? removers[0] : function() { removers.forEach((r) => r()); }; } function around1(obj, method, createWrapper) { const inherited = obj[method], hadOwn = obj.hasOwnProperty(method), original = hadOwn ? inherited : function() { return Object.getPrototypeOf(obj)[method].apply(this, arguments); }; let current = createWrapper(original); if (inherited) Object.setPrototypeOf(current, inherited); Object.setPrototypeOf(wrapper, current); obj[method] = wrapper; return remove; function wrapper(...args) { if (current === original && obj[method] === wrapper) remove(); return current.apply(this, args); } function remove() { if (obj[method] === wrapper) { if (hadOwn) obj[method] = original; else delete obj[method]; } if (current === original) return; current = original; Object.setPrototypeOf(wrapper, inherited || Function); } } // src/stores/settings/reducers/update-style-rules/helpers/fix-condition-types.ts var fixConditionTypes = (rule) => { if (rule.condition.type === "condition") { const cnd = rule.condition; const isStringCondition = cnd.property === "headings" || cnd.property === "content"; if (isStringCondition) { if (cnd.value === null || cnd.value === void 0) { cnd.value = ""; } else if (typeof cnd.value === "number") { cnd.value = String(cnd.value); } } else { if (cnd.value && typeof cnd.value === "string") { cnd.value = parseFloat(cnd.value); } if ("valueB" in cnd && typeof cnd.valueB === "string") { cnd.valueB = parseFloat(cnd.valueB); } } } }; // src/helpers/move-array-item.ts var moveArrayItem = (array, fromIndex, toIndex) => { const newArray = array.slice(); const element2 = newArray[fromIndex]; newArray.splice(fromIndex, 1); newArray.splice(toIndex, 0, element2); return newArray; }; // src/stores/settings/reducers/update-style-rules/handle-dnd.ts var handleDND = (rules, payload) => { const { droppedId, targetId, position } = payload; const fromIndex = rules.findIndex((r) => r.id === droppedId); let toIndex = rules.findIndex((r) => r.id === targetId); if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) { return rules; } const droppedWasAboveTarget = fromIndex < toIndex; if (droppedWasAboveTarget) { toIndex--; } if (position === "before") { rules = moveArrayItem(rules, fromIndex, toIndex); } else { rules = moveArrayItem(rules, fromIndex, toIndex + 1); } return rules; }; // src/stores/settings/reducers/update-style-rules/update-style-rules.ts var updateStyleRules = (settings, action) => { let state2; state2 = settings.styleRules.documents[action.payload.documentPath]; if (!state2) { if (action.type !== "settings/style-rules/add") { throw new Error("Document does not have any style rules"); } settings.styleRules.documents[action.payload.documentPath] = { rules: [] }; state2 = settings.styleRules.documents[action.payload.documentPath]; } if (action.type === "settings/style-rules/add") { const newRule = { id: id.styleRule(), name: "", enabled: true, condition: { type: "condition", scope: "self", property: "content", operator: "contains", value: "", enabled: true }, style: { color: "#fff", styleVariant: "left-border" }, priority: 0 }; state2.rules = [...state2.rules, newRule]; } else if (action.type === "settings/style-rules/update") { const { id: id2, rule } = action.payload; const index = state2.rules.findIndex((r) => r.id === id2); if (index !== -1) { state2.rules[index] = { ...state2.rules[index], ...rule }; fixConditionTypes(state2.rules[index]); state2.rules = [...state2.rules]; } } else if (action.type === "settings/style-rules/delete") { state2.rules = state2.rules.filter( (rule) => rule.id !== action.payload.id ); } else if (action.type === "settings/style-rules/move") { state2.rules = handleDND(state2.rules, action.payload); } else if (action.type === "settings/style-rules/update-style") { const index = state2.rules.findIndex((r) => r.id === action.payload.id); if (index !== -1) { state2.rules[index] = { ...state2.rules[index], // @ts-ignore style: { ...state2.rules[index].style, ...action.payload.style } }; state2.rules = [...state2.rules]; } } else if (action.type === "settings/style-rules/update-condition") { const { ruleId, updates } = action.payload; const index = state2.rules.findIndex((r) => r.id === ruleId); if (index !== -1) { state2.rules[index] = { ...state2.rules[index], // @ts-ignore condition: { ...state2.rules[index].condition, ...updates } }; fixConditionTypes(state2.rules[index]); state2.rules = [...state2.rules]; } } else if (action.type === "settings/style-rules/enable-rule") { const index = state2.rules.findIndex((r) => r.id === action.payload.id); if (index !== -1) { state2.rules[index].enabled = true; state2.rules = [...state2.rules]; } } else if (action.type === "settings/style-rules/disable-rule") { const index = state2.rules.findIndex((r) => r.id === action.payload.id); if (index !== -1) { state2.rules[index].enabled = false; state2.rules = [...state2.rules]; } } }; // src/stores/settings/reducers/toggle-editor-state.ts var getDefaultHotkey = (command, type) => { const defaultCommand = defaultViewHotkeys().find( (hk) => hk.name === command ); const defaultHotkey = type === "primary" ? defaultCommand?.hotkeys[0] : defaultCommand?.hotkeys[1]; invariant(defaultHotkey); return defaultHotkey; }; var editorStateValues = [ "editor-on", "editor-off", "both" ]; var rotateEditorState = (editorState) => { const index = editorStateValues.indexOf(editorState); return editorStateValues[(index + 1) % editorStateValues.length]; }; var toggleEditorState = (state2, action) => { let persistedHotkey; const fullPersistedHotkey = state2.hotkeys.customHotkeys[action.payload.command] || {}; if (fullPersistedHotkey[action.payload.type]) { persistedHotkey = fullPersistedHotkey[action.payload.type]; } if (!persistedHotkey || !("editorState" in persistedHotkey)) { const defaultHotkey = getDefaultHotkey( action.payload.command, action.payload.type ); persistedHotkey = { ...persistedHotkey || {}, editorState: defaultHotkey.editorState }; } persistedHotkey.editorState = rotateEditorState( persistedHotkey.editorState ); state2.hotkeys.customHotkeys = { ...state2.hotkeys.customHotkeys, [action.payload.command]: { ...fullPersistedHotkey, [action.payload.type]: persistedHotkey } }; }; // src/stores/settings/reducers/set-hotkey-as-blank.ts var setHotkeyAsBlank = (state2, action) => { let persistedHotkey; const fullPersistedHotkey = state2.hotkeys.customHotkeys[action.payload.command] || {}; if (fullPersistedHotkey[action.payload.type]) { persistedHotkey = fullPersistedHotkey[action.payload.type]; } persistedHotkey = { ...persistedHotkey || {}, key: "", modifiers: [] }; state2.hotkeys.customHotkeys = { ...state2.hotkeys.customHotkeys, [action.payload.command]: { ...fullPersistedHotkey, [action.payload.type]: persistedHotkey } }; }; // src/stores/settings/reducers/persist-collapsed-sections.ts var persistCollapsedSections2 = (state2, action) => { const documentPreferences = state2.documents[action.payload.path]; if (!documentPreferences) return; if (!documentPreferences.outline) { documentPreferences.outline = { collapsedSections: action.payload.sections }; } else { documentPreferences.outline.collapsedSections = action.payload.sections; } }; // src/stores/settings/settings-reducer.ts var updateState = (store, action) => { if (action.type === "DELETE_DOCUMENT_PREFERENCES") { delete store.documents[action.payload.path]; delete store.styleRules.documents[action.payload.path]; } else if (action.type === "SET_DOCUMENT_TYPE") { if (!store.documents[action.payload.path]) { store.documents[action.payload.path] = { documentFormat: action.payload.format, viewType: "lineage", activeSection: null, pinnedSections: { sections: [], activeSection: null }, outline: { collapsedSections: [] } }; } else { store.documents[action.payload.path].documentFormat = action.payload.format; } } else if (action.type === "SET_VIEW_TYPE") { if (store.documents[action.payload.path]) { store.documents[action.payload.path].viewType = action.payload.type; } } else if (action.type === "settings/document/persist-active-section") { if (store.documents[action.payload.path]) { store.documents[action.payload.path].activeSection = action.payload.sectionNumber; } } else if (action.type === "HISTORY/UPDATE_DOCUMENT_PATH") { const preferences = store.documents[action.payload.oldPath]; delete store.documents[action.payload.oldPath]; store.documents[action.payload.newPath] = preferences; if (store.styleRules.documents[action.payload.oldPath]) { const rules = store.styleRules.documents[action.payload.oldPath]; delete store.styleRules.documents[action.payload.oldPath]; store.styleRules.documents[action.payload.newPath] = rules; } } else if (action.type === "SET_CUSTOM_HOTKEYS") { store.hotkeys.customHotkeys = action.payload.customHotkeys; } else if (action.type === "SET_FONT_SIZE") { store.view.fontSize = action.payload.fontSize; } else if (action.type === "SET_CONTAINER_BG") { store.view.theme.containerBg = action.payload.backgroundColor; } else if (action.type === "SET_ACTIVE_BRANCH_BG") { store.view.theme.activeBranchBg = action.payload.backgroundColor; } else if (action.type === "SET_CARD_WIDTH") { store.view.cardWidth = action.payload.width; } else if (action.type === "SET_MIN_CARD_HEIGHT") { store.view.minimumCardHeight = action.payload.height; } else if (action.type === "SET_LIMIT_PREVIEW_HEIGHT") { store.view.limitPreviewHeight = action.payload.limit; } else if (action.type === "UPDATE_DOCUMENTS_DICTIONARY") { store.documents = action.payload.documents; } else if (action.type === "UI/CHANGE_ZOOM_LEVEL") { changeZoomLevel(store, action.payload); } else if (action.type === "GENERAL/SET_DEFAULT_DOCUMENT_FORMAT") { store.general.defaultDocumentFormat = action.payload.format; } else if (action.type === "VIEW/TOGGLE_MINIMAP") { store.view.showMinimap = !store.view.showMinimap; } else if (action.type === "view/left-sidebar/toggle") { store.view.showLeftSidebar = !store.view.showLeftSidebar; } else if (action.type === "settings/pinned-nodes/persist") { const document2 = store.documents[action.payload.filePath]; if (!document2.pinnedSections) { document2.pinnedSections = { sections: [], activeSection: null }; } document2.pinnedSections.sections = action.payload.sections; document2.pinnedSections.activeSection = action.payload.section; } else if (action.type === "settings/pinned-nodes/persist-active-node") { const document2 = store.documents[action.payload.filePath]; if (!document2.pinnedSections) { document2.pinnedSections = { sections: [], activeSection: null }; } document2.pinnedSections.activeSection = action.payload.section; } else if (action.type === "VIEW/SCROLLING/TOGGLE_SCROLLING_MODE") { store.view.scrolling.centerActiveNodeH = !store.view.scrolling.centerActiveNodeH; store.view.scrolling = { ...store.view.scrolling }; } else if (action.type === "settings/view/scrolling/toggle-vertical-scrolling-mode") { store.view.scrolling.centerActiveNodeV = !store.view.scrolling.centerActiveNodeV; store.view.scrolling = { ...store.view.scrolling }; } else if (action.type === "SET_CARDS_GAP") { store.view.cardsGap = action.payload.gap; } else if (action.type === "view/left-sidebar/set-width") { if (action.payload.width > 0) { store.view.leftSidebarWidth = action.payload.width; } } else if (action.type === "view/left-sidebar/set-active-tab") { store.view.leftSidebarActiveTab = action.payload.tab; } else if (action.type === "view/modes/gap-between-cards/toggle") { store.view.applyGapBetweenCards = !store.view.applyGapBetweenCards; } else if (action.type === "settings/view/modes/toggle-outline-mode") { store.view.outlineMode = !store.view.outlineMode; if (store.view.outlineMode) { store.view.scrolling.centerActiveNodeH = false; store.view.scrolling = { ...store.view.scrolling }; } } else if (action.type === "settings/view/set-node-indentation-width") { store.view.nodeIndentationWidth = action.payload.width; } else if (action.type === "settings/view/set-maintain-edit-mode") { store.view.maintainEditMode = action.payload.maintain; } else if (action.type === "settings/view/theme/set-inactive-node-opacity") { store.view.theme.inactiveNodeOpacity = action.payload.opacity; } else if (action.type === "settings/view/theme/set-active-branch-color") { if (action.payload.color) { store.view.theme.activeBranchColor = action.payload.color; } else { delete store.view.theme.activeBranchColor; } } else if (action.type === "settings/hotkeys/set-custom-hotkey") { const customHotkey = store.hotkeys.customHotkeys[action.payload.command]; if (!customHotkey) { store.hotkeys.customHotkeys[action.payload.command] = { [action.payload.type]: action.payload.hotkey }; } else { customHotkey[action.payload.type] = { ...customHotkey[action.payload.type], ...action.payload.hotkey }; } store.hotkeys.customHotkeys = { ...store.hotkeys.customHotkeys }; } else if (action.type === "settings/hotkeys/reset-custom-hotkey") { const customHotkey = store.hotkeys.customHotkeys[action.payload.command]; if (customHotkey) { delete customHotkey[action.payload.type]; } store.hotkeys.customHotkeys = { ...store.hotkeys.customHotkeys }; } else if (action.type === "settings/hotkeys/apply-preset") { const entries = Object.entries(action.payload.preset); for (const [command, customHotkeys] of entries) { if (!store.hotkeys.customHotkeys[command]) { store.hotkeys.customHotkeys[command] = {}; } if (customHotkeys.primary) { store.hotkeys.customHotkeys[command].primary = customHotkeys.primary; } if (customHotkeys.secondary) { store.hotkeys.customHotkeys[command].secondary = customHotkeys.secondary; } } store.hotkeys.customHotkeys = { ...store.hotkeys.customHotkeys }; } else if (action.type === "settings/hotkeys/reset-all") { store.hotkeys.customHotkeys = {}; } else if (action.type === "settings/hotkeys/toggle-editor-state") { toggleEditorState(store, action); } else if (action.type === "settings/hotkeys/set-blank") { setHotkeyAsBlank(store, action); } else if (action.type === "settings/document/persist-collapsed-sections") { persistCollapsedSections2(store, action); } else if (action.type === "settings/view/set-always-show-card-buttons") { store.view.alwaysShowCardButtons = action.payload.show; } else if (action.type.startsWith("settings/style-rules")) { updateStyleRules(store, action); } }; var settingsReducer = (store, action) => { updateState(store, action); return store; }; // src/helpers/deep-merge.ts var isObject2 = (item) => item && typeof item === "object" && !Array.isArray(item); var deepMerge = (target, ...sources) => { if (!sources.length) return target; const source = sources.shift(); if (isObject2(target) && isObject2(source)) { for (const key in source) { if (isObject2(source[key])) { if (!target[key]) Object.assign(target, { [key]: {} }); deepMerge(target[key], source[key]); } else { if (typeof target[key] === "undefined") Object.assign(target, { [key]: source[key] }); } } } return deepMerge(target, ...sources); }; // src/obsidian/events/workspace/register-file-menu-event.ts var import_obsidian40 = require("obsidian"); // src/obsidian/events/workspace/helpers/get-leaf-of-file.ts var getLeafOfFile = (plugin, file, viewType) => { const leaves = plugin.app.workspace.getLeavesOfType(viewType); return leaves.find( (l) => l.view?.file?.path === file.path ); }; // src/obsidian/events/workspace/effects/toggle-file-view-type.ts var toggleFileViewType = async (plugin, file, leaf) => { const documents = plugin.settings.getValue().documents; const preferences = documents[file.path] ? documents[file.path] : null; const currentViewType = preferences ? preferences.viewType : "markdown"; let fileLeaf = leaf || getLeafOfFile(plugin, file, currentViewType); if (!fileLeaf) fileLeaf = await openFile(plugin, file, "tab"); const newViewType = currentViewType === "markdown" ? "lineage" : "markdown"; toggleObsidianViewType(plugin, fileLeaf, newViewType); setViewType(plugin, file.path, newViewType); }; // src/obsidian/events/workspace/context-menu-itetms/add-toggle-view-menu-item.ts var addToggleViewMenuItem = (menu, plugin, file, leaf) => { if (file.extension !== "md") return; menu.addItem((item) => { if (!leaf) { leaf = getLeafOfFile(plugin, file, "lineage"); } const isTree = leaf && leaf.view.getViewType() === LINEAGE_VIEW_TYPE; item.setTitle( isTree ? lang.ocm_open_in_editor : lang.ocm_open_in_lineage ); item.setIcon(isTree ? "file-text" : customIcons.cards.name); item.onClick(async () => { toggleFileViewType(plugin, file, leaf); }); }); }; // src/obsidian/events/workspace/effects/create-lineage-file-in-folder.ts var createLineageFileInFolder = async (plugin, folder) => { const newFile = await createNewFile(plugin, folder); if (newFile) { const format2 = plugin.settings.getValue().general.defaultDocumentFormat; await openFileInLineage(plugin, newFile, format2, "tab"); } }; // src/obsidian/events/workspace/context-menu-itetms/add-folder-context-menu-items.ts var addFolderContextMenuItems = (menu, plugin, folder) => { menu.addItem((item) => { item.setTitle(lang.ocm_new_document); item.setIcon(customIcons.cards.name); item.onClick(() => createLineageFileInFolder(plugin, folder)); }); }; // src/obsidian/events/workspace/effects/import-from-gingko/import-from-gingko.ts var import_obsidian39 = require("obsidian"); // src/obsidian/events/workspace/effects/import-from-gingko/helpers/verify-json-file.ts var verifyJsonFile = (tree) => { for (const treeNode of tree) { if (!treeNode) return false; if (typeof treeNode !== "object") return false; if (!("content" in treeNode)) return false; if (!("children" in treeNode)) return false; if (typeof treeNode.content !== "string") return false; if (!Array.isArray(treeNode.children)) return false; if (!verifyJsonFile(treeNode.children)) return false; } return true; }; // src/obsidian/events/workspace/effects/import-from-gingko/helpers/map-files-to-gingko-files.ts var mapFilesToGingkoFiles = async (plugin, files) => { const gingkoFiles = []; for (const file of files) { const content = await plugin.app.vault.read(file); const tree = JSON.parse(content); const isValid = verifyJsonFile(tree); if (!isValid) throw new Error( `File "${file.basename}" does not seem to be valid a Gingko file` ); gingkoFiles.push({ basename: file.basename, tree }); } return gingkoFiles; }; // src/obsidian/events/workspace/effects/create-new-folder.ts var import_obsidian38 = require("obsidian"); var createNewFolder = async (plugin, folder, basename) => { invariant(folder); const children2 = folder.children.map((c) => c instanceof import_obsidian38.TFolder ? c.name : null).filter((f) => f); const path = getUniqueFileName(folder.path, children2, basename); const createdFolder = await plugin.app.vault.createFolder(path); invariant(createdFolder); return createdFolder; }; // src/obsidian/events/workspace/effects/import-from-gingko/helpers/create-lineage-documents-from-gingko-files.ts var createLineageDocumentsFromGingkoFiles = async (plugin, files, folderPath) => { const parentFolder = plugin.app.vault.getFolderByPath(folderPath); invariant(parentFolder); let destinationFolder; if (files.length === 1) { destinationFolder = parentFolder; } else { destinationFolder = await createNewFolder( plugin, parentFolder, "imported from gingko" ); } if (!destinationFolder) throw new Error("Could not get destination folder"); for (const file of files) { const sections = jsonToHtmlComment(file.tree); const createdFile = await createNewFile( plugin, destinationFolder, sections, file.basename ); setDocumentFormat(plugin, createdFile.path, "sections"); setViewType(plugin, createdFile.path, "lineage"); } }; // src/obsidian/events/workspace/effects/import-from-gingko/import-from-gingko.ts var importFromGingko = async (plugin, files) => { try { const parentFolder = files[0].parent?.path; if (!parentFolder) return; const gingkoFiles = await mapFilesToGingkoFiles(plugin, files); await createLineageDocumentsFromGingkoFiles( plugin, gingkoFiles, parentFolder ); new import_obsidian39.Notice( `Imported ${gingkoFiles.length} Gingko file${gingkoFiles.length === 1 ? "" : "s"}` ); } catch (e) { onPluginError(e, "command", { files }); } }; // src/obsidian/events/workspace/context-menu-itetms/add-import-ginkgo-menu-item.ts var addImportGinkgoMenuItem = (menu, plugin, files) => { const allJson = files.every((file) => file.extension === "json"); if (!allJson) return; menu.addItem((item) => { item.setTitle(lang.ocm_import_from_gingko); item.setIcon(customIcons.cards.name); item.onClick(async () => { importFromGingko(plugin, files); }); }); }; // src/obsidian/events/workspace/register-file-menu-event.ts var registerFileMenuEvent = (plugin) => { plugin.registerEvent( plugin.app.workspace.on( "file-menu", (menu, abstractFile, source, leaf) => { if (abstractFile instanceof import_obsidian40.TFile) { addToggleViewMenuItem(menu, plugin, abstractFile, leaf); addImportGinkgoMenuItem(menu, plugin, [abstractFile]); } else if (abstractFile instanceof import_obsidian40.TFolder) { addFolderContextMenuItems(menu, plugin, abstractFile); } } ) ); }; // src/obsidian/events/vault/register-file-move-event.ts var import_obsidian41 = require("obsidian"); var registerFileRenameEvent = (plugin) => { plugin.registerEvent( plugin.app.vault.on("rename", (file, oldPath) => { if (file instanceof import_obsidian41.TFile) { if (fileViewTypeCache[oldPath]) { plugin.documents.dispatch({ type: "DOCUMENTS/UPDATE_DOCUMENT_PATH", payload: { newPath: file.path, oldPath } }); plugin.settings.dispatch({ type: "HISTORY/UPDATE_DOCUMENT_PATH", payload: { newPath: file.path, oldPath } }); } } }) ); }; // src/obsidian/events/vault/register-file-delete-event.ts var import_obsidian42 = require("obsidian"); var registerFileDeleteEvent = (plugin) => { plugin.registerEvent( plugin.app.vault.on("delete", (file) => { if (file instanceof import_obsidian42.TFile) { if (fileViewTypeCache[file.path]) { plugin.documents.dispatch({ type: "DOCUMENTS/DELETE_DOCUMENT", payload: { path: file.path } }); plugin.settings.dispatch({ type: "DELETE_DOCUMENT_PREFERENCES", payload: { path: file.path } }); } } }) ); }; // src/helpers/slugify.ts var slugify = (inputString) => { return inputString.toLowerCase().replace(/[^a-z0-9]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, ""); }; // src/obsidian/commands/helpers/get-active-file.ts var getActiveFile = (plugin) => { const activeFile = plugin.app.workspace.getActiveFile(); if (activeFile && activeFile.extension === "md") return activeFile; }; // src/obsidian/events/workspace/effects/create-lineage-document.ts var createLineageDocument = async (plugin) => { try { const format2 = plugin.settings.getValue().general.defaultDocumentFormat; const file = getActiveFile(plugin); let folder = null; if (file) { folder = file.parent; } else { folder = plugin.app.vault.getRoot(); } if (folder) { const newFile = await createNewFile(plugin, folder); if (newFile) { await openFileInLineage(plugin, newFile, format2, "tab"); } } } catch (e) { onPluginError(e, "command", lang.cmd_create_new_document); } }; // src/obsidian/commands/helpers/get-active-lineage-view.ts var getActiveLineageView = (plugin) => { return plugin.app.workspace.getActiveViewOfType(LineageView); }; // src/obsidian/commands/add-commands.ts var createCommands2 = (plugin) => { const commands = []; commands.push({ name: lang.cmd_toggle_lineage_view, icon: customIcons.cards.name, checkCallback: (checking) => { const file = getActiveFile(plugin); if (file) { if (checking) return true; else { toggleFileViewType(plugin, file, void 0); } } } }); commands.push({ name: lang.cmd_create_new_document, icon: customIcons.cards.name, checkCallback: (checking) => { if (checking) return true; createLineageDocument(plugin); } }); commands.push({ name: lang.cmd_toggle_horizontal_scrolling_mode, icon: customIcons.alignH.name, checkCallback: (checking) => { if (checking) { return Boolean(getActiveLineageView(plugin)); } plugin.settings.dispatch({ type: "VIEW/SCROLLING/TOGGLE_SCROLLING_MODE" }); } }); commands.push({ name: lang.cmd_toggle_vertical_scrolling_mode, icon: customIcons.alignV.name, checkCallback: (checking) => { if (checking) { return Boolean(getActiveLineageView(plugin)); } plugin.settings.dispatch({ type: "settings/view/scrolling/toggle-vertical-scrolling-mode" }); } }); commands.push({ name: lang.cm_split_card, icon: customIcons.split.name, checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } openSplitNodeModal(view); } }); commands.push({ name: lang.cm_copy_link_to_block, icon: "links-coming-in", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } copyLinkToBlock(view); } }); commands.push({ name: lang.cmd_toggle_pin_in_left_sidebar, icon: "pin", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return view ? isEditing(view) : false; } if (!view) return; const viewState = view.viewStore.getValue(); const documentStore = view.documentStore; const documentState = documentStore.getValue(); const activeNode = viewState.document.activeNode; const isPinned = documentState.pinnedNodes.Ids.includes(activeNode); documentStore.dispatch({ type: isPinned ? "document/pinned-nodes/unpin" : "document/pinned-nodes/pin", payload: { id: activeNode } }); } }); commands.push({ name: lang.cmd_extract_branch, icon: customIcons.cards.name, checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } extractBranch(view); } }); commands.push({ name: lang.cm_export_column, icon: "file-text", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } exportColumn(view); } }); commands.push({ name: lang.cm_export_document, icon: "file-text", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } exportDocument(view); } }); commands.push({ name: lang.cmd_toggle_minimap, icon: "panel-right", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } plugin.settings.dispatch({ type: "VIEW/TOGGLE_MINIMAP" }); } }); commands.push({ name: lang.cmd_toggle_left_sidebar, icon: "panel-left", checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } plugin.settings.dispatch({ type: "view/left-sidebar/toggle" }); } }); commands.push({ name: lang.cmd_space_between_cards, icon: customIcons.gap.name, checkCallback: (checking) => { const view = getActiveLineageView(plugin); if (checking) { return Boolean(view); } view.plugin.settings.dispatch({ type: "view/modes/gap-between-cards/toggle" }); } }); return commands; }; var addCommands = (plugin) => { const commands = createCommands2(plugin); for (const command of commands) { plugin.addCommand({ ...command, checkCallback: (checking) => { try { return command.checkCallback(checking); } catch (e) { onPluginError(e, "command", command.name); return false; } }, id: slugify(command.name) }); } }; // src/stores/settings/subscriptions/settings-subscriptions.ts var settingsSubscriptions = (plugin) => { return plugin.settings.subscribe((state2, action, initialRun) => { updateFileViewTypeCache(state2.documents); if (initialRun) { updateViewHotkeysDictionary(get_store_value(ViewHotkeysStore(plugin))); } else if (action) { if (action.type === "settings/hotkeys/reset-all" || action.type === "settings/hotkeys/apply-preset" || action.type === "settings/hotkeys/reset-custom-hotkey" || action.type === "settings/hotkeys/set-custom-hotkey" || action.type === "settings/hotkeys/toggle-editor-state" || action.type === "settings/hotkeys/set-blank") { updateViewHotkeysDictionary(get_store_value(ViewHotkeysStore(plugin))); } } }); }; // src/stores/documents/documents-reducer.ts var updateDocumentsState = (state2, action) => { if (action.type === "DOCUMENTS/DELETE_DOCUMENT") { const path = action.payload.path; if (path in state2.documents) { const oldEntry = state2.documents[path]; oldEntry.documentStore.dispatch({ type: "RESET_STORE" }); delete state2.documents[path]; } } else if (action.type === "DOCUMENTS/UPDATE_DOCUMENT_PATH") { const oldPath = action.payload.oldPath; const newPath = action.payload.newPath; if (oldPath in state2.documents) { const oldEntry = state2.documents[oldPath]; delete state2.documents[oldPath]; state2.documents[newPath] = oldEntry; oldEntry.documentStore.dispatch({ type: "FS/SET_FILE_PATH", payload: { path: newPath } }); } } else if (action.type === "DOCUMENTS/ADD_DOCUMENT") { state2.documents[action.payload.path] = { documentStore: action.payload.documentStore, viewId: action.payload.viewId }; } else if (action.type === "WORKSPACE/SET_ACTIVE_LINEAGE_VIEW") { if (state2.documents[action.payload.path]) { state2.documents[action.payload.path].viewId = action.payload.viewId; } } }; var documentsReducer = (store, action) => { updateDocumentsState(store, action); return store; }; // src/stores/documents/default-documents-state.ts var DefaultDocumentsState = () => ({ documents: {} }); // src/obsidian/status-bar/status-bar.ts var StatusBar = class { constructor(plugin) { this.plugin = plugin; this.updateAll = (view) => { this.updateCardsNumber(view); this.updateProgressIndicatorAndChildCount(view); }; this.updateCardsNumber = (view) => { const cards2 = Object.keys( view.documentStore.getValue().document.content ).length; this.elements.numberOfCards.setText( cards2 + " card" + (cards2 === 1 ? "" : "s") ); }; this.updateProgressIndicatorAndChildCount = async (view) => { const document2 = view.documentStore.getValue().document; const activeNode = view.viewStore.getValue().document.activeNode; const result = await statusBarWorker.run({ document: document2, activeNode }); this.elements.documentProgress.setText(result.progress + " %"); const totalChildCount = result.totalChildCount; if (totalChildCount > 0) { this.elements.numberOfChildren.setText( totalChildCount + " child card" + (totalChildCount === 1 ? "" : "s") ); this.setElementVisibility(this.elements.numberOfChildren, true); } else { this.setElementVisibility(this.elements.numberOfChildren, false); } }; this.onload(); } onload() { this.container = this.plugin.addStatusBarItem(); this.elements = { numberOfCards: this.container.createDiv(), numberOfChildren: this.container.createDiv(), documentProgress: this.container.createDiv() }; this.elements.numberOfCards.style.marginRight = "5px"; this.elements.numberOfChildren.style.marginRight = "5px"; this.elements.documentProgress.ariaLabel = "Progress through the document"; this.elements.documentProgress.ariaLabel = "Total number of child cards"; this.plugin.registerEvent( this.plugin.app.workspace.on("active-leaf-change", (x) => { const visible = Boolean(x && x.view instanceof LineageView); this.setVisibility(visible); }) ); } setVisibility(visible) { this.container.toggleClass("lineage__hidden-element", !visible); } setElementVisibility(element2, visible) { element2.toggleClass("lineage__hidden-element", !visible); } }; // src/stores/documents/subscriptions/effects/remove-stale-documents/helpers/filter-stale-documents.ts var filterStaleDocuments = (settings, allFiles) => { if (allFiles.size === 0) return 0; const paths = Object.keys(settings.documents); const deletedPaths = /* @__PURE__ */ new Set(); for (const path of paths) { if (!allFiles.has(path)) { deletedPaths.add(path); delete settings.documents[path]; delete settings.styleRules.documents[path]; } } return deletedPaths.size; }; // src/stores/documents/subscriptions/effects/remove-stale-documents/helpers/get-all-loaded-files.ts var import_obsidian43 = require("obsidian"); var getAllLoadedFiles = (plugin) => { const allFiles = plugin.app.vault.getAllLoadedFiles(); const allPaths = /* @__PURE__ */ new Set(); for (const maybeFile of allFiles) { if (maybeFile instanceof import_obsidian43.TFile) { allPaths.add(maybeFile.path); } } return allPaths; }; // src/stores/documents/subscriptions/effects/remove-stale-documents/remove-stale-documents.ts var processStaleDocuments = (plugin) => { const settings = plugin.settings.getValue(); const allLoadedFiles = getAllLoadedFiles(plugin); const deleted = filterStaleDocuments(settings, allLoadedFiles); if (deleted === 0) return; logger.debug(`[lineage] removed ${deleted} stale documents`); plugin.settings.dispatch({ type: "UPDATE_DOCUMENTS_DICTIONARY", payload: { documents: settings.documents } }); }; var removeStaleDocuments = (plugin) => { plugin.registerTimeout( setTimeout(() => processStaleDocuments(plugin), 1e3 * 60 * 5) ); }; // src/obsidian/events/workspace/actions/set-active-lineage-view.ts var setActiveLineageView = (view) => { invariant(view.file); view.plugin.documents.dispatch({ type: "WORKSPACE/SET_ACTIVE_LINEAGE_VIEW", payload: { path: view.file?.path, viewId: view.id } }); }; // src/obsidian/events/workspace/actions/set-active-leaf-changed.ts var setActiveLeafChanged = (plugin) => { plugin.documents.dispatch({ type: "WORKSPACE/ACTIVE_LEAF_CHANGE" }); }; // src/obsidian/events/workspace/register-active-leaf-change.ts var registerActiveLeafChange = (plugin) => { plugin.registerEvent( plugin.app.workspace.on("active-leaf-change", (leaf) => { if (leaf?.view instanceof LineageView && leaf.view.file?.path) { setActiveLineageView(leaf.view); } setActiveLeafChanged(plugin); }) ); }; // src/obsidian/events/workspace/actions/on-workspace-resize.ts var onWorkspaceResize = (plugin) => { plugin.documents.dispatch({ type: "WORKSPACE/RESIZE" }); }; // src/obsidian/events/workspace/register-workspace-resize.ts var registerWorkspaceResize = (plugin) => { plugin.registerEvent( plugin.app.workspace.on("resize", () => { onWorkspaceResize(plugin); }) ); }; // src/obsidian/events/workspace/actions/set-workspace-layout-ready.ts var setWorkspaceLayoutReady = (plugin) => { plugin.documents.dispatch({ type: "WORKSPACE/LAYOUT_READY" }); }; // src/obsidian/events/workspace/register-layout-ready.ts var registerLayoutReady = (plugin) => { plugin.app.workspace.onLayoutReady(() => { setWorkspaceLayoutReady(plugin); }); }; // src/obsidian/patches/set-active-leaf.ts function setActiveLeaf(next) { return function(leaf, param) { const isLineageViewAndIsEditing = leaf.view && leaf.view instanceof LineageView && leaf.view.inlineEditor?.nodeId; if (isLineageViewAndIsEditing) return; return next.call(this, leaf, param); }; } // src/stores/settings/migrations/migrate-settings.ts var migrateSettings = (settings) => { for (const [path, pref] of Object.entries(settings.documents)) { if (typeof pref === "boolean") { settings.documents[path] = { documentFormat: "sections", viewType: "lineage", activeSection: null, pinnedSections: null, outline: null }; } } if ("backup" in settings) { delete settings.backup; } }; // src/obsidian/events/workspace/register-files-menu-event.ts var import_obsidian44 = require("obsidian"); var registerFilesMenuEvent = (plugin) => { plugin.registerEvent( plugin.app.workspace.on("files-menu", (menu, abstractFile) => { const allFiles = abstractFile.every((af) => af instanceof import_obsidian44.TFile); if (allFiles) addImportGinkgoMenuItem(menu, plugin, abstractFile); }) ); }; // src/obsidian/markdown-post-processors/remove-html-element-marker-in-preview-mode.ts var removeHtmlElementMarkerInPreviewMode = (el) => { if (el.classList.contains("lng-prev")) return; const spans = el.querySelectorAll("span[data-section]"); for (let i = 0; i < spans.length; i++) { const span = spans[i]; const parent = span.parentElement; if (!parent) continue; const contents = span.childNodes; for (let j = 0; j < contents.length; j++) { const content = contents[j]; parent.insertBefore( content, span.nextSibling ? span.nextSibling : span ); } } }; // src/main.ts var Lineage = class extends import_obsidian45.Plugin { constructor() { super(...arguments); this.timeoutReferences = /* @__PURE__ */ new Set(); } async onload() { await this.loadSettings(); this.documents = new Store( DefaultDocumentsState(), documentsReducer, onPluginError ); loadCustomIcons(); this.registerView( LINEAGE_VIEW_TYPE, (leaf) => new LineageView(leaf, this) ); addCommands(this); this.registerPatches(); this.registerEffects(); this.registerEvents(); this.statusBar = new StatusBar(this); this.loadRibbonIcon(); this.registerMarkdownPostProcessor( removeHtmlElementMarkerInPreviewMode ); } async saveSettings() { await this.saveData(this.settings.getValue()); } async loadSettings() { const rawSettings = await this.loadData() || {}; const settings = deepMerge(rawSettings, DEFAULT_SETTINGS()); migrateSettings(settings); this.settings = new Store( settings, settingsReducer, onPluginError ); this.settings.subscribe(() => { this.saveSettings(); }); settingsSubscriptions(this); } registerEvents() { registerFileMenuEvent(this); registerFilesMenuEvent(this); registerFileRenameEvent(this); registerFileDeleteEvent(this); registerActiveLeafChange(this); registerWorkspaceResize(this); registerLayoutReady(this); } registerTimeout(timeout) { this.timeoutReferences.add(timeout); } registerEffects() { removeStaleDocuments(this); } registerPatches() { this.register(around(this.app.workspace, { setActiveLeaf })); this.register(around(import_obsidian45.WorkspaceLeaf.prototype, { setViewState })); } loadRibbonIcon() { this.addRibbonIcon( customIcons.cards.name, "Toggle Lineage view", () => { const file = getActiveFile(this); if (file) toggleFileViewType(this, file, void 0); else createLineageDocument(this); } ); } onunload() { super.onunload(); for (const timeout of this.timeoutReferences) { clearTimeout(timeout); } minimapWorker.terminate(); rulesWorker.terminate(); statusBarWorker.terminate(); } }; /*! Bundled license information: classnames/index.js: (*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames *) lucide-svelte/dist/defaultAttributes.js: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/arrow-left.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/arrow-right.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/chevron-down.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/chevron-right.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/chevron-up.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/clipboard-paste.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/clock.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/eye.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-minus.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-output.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-pen.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-plus.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-symlink.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/file-up.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/focus.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/grip-vertical.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/heading-1.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/history.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/info.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/keyboard.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/merge.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/minus.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/more-vertical.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/palette.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/panel-left-dashed.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/panel-right-dashed.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/pen.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/pencil.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/pin.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/plus.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/redo-2.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/rotate-ccw.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/rotate-cw.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/save.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/scan-search.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/scissors.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/search.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/settings.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/split.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/text.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/trash.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/undo-2.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/x.svelte: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/icons/index.js: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) lucide-svelte/dist/aliases.js: (** * @license lucide-svelte v0.344.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. *) */ /* nosourcemap */