honkoku-toolbox

日本の古典籍を翻刻する際の便利ツール

目前為 2024-10-12 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name       honkoku-toolbox
// @namespace  https://mkpo.li/
// @version    0.1.0
// @author     monkey
// @icon       data:image/png;base64,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
// @match      https://honkoku.org/app/
// @match      https://ja.wikisource.org/w/index.php?title=*&action=*
// @grant      GM_addStyle
// @description 日本の古典籍を翻刻する際の便利ツール
// ==/UserScript==

(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .CodeMirror.display-variant-highlight .highlight-variant,.editor-wrapper.display-variant-highlight .token .char.highlight-variant{color:#ff9800;font-weight:700}button.svelte-1xqxm3o{padding:.5em .1em;border:1px solid #bbb;background-color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;white-space:nowrap}button.svelte-1xqxm3o:hover{background-color:#eee}[data-color=black].svelte-1xqxm3o{color:#000}[data-color=green].svelte-1xqxm3o{color:#00a800}[data-color=blue].svelte-1xqxm3o{color:#009dff}[data-color=red].svelte-1xqxm3o{color:#ff3e00}[data-color=pink].svelte-1xqxm3o{color:#f0d}[data-color=gray].svelte-1xqxm3o{color:#888}.float-menu.svelte-sa4v07{writing-mode:vertical-rl;position:fixed;bottom:0;left:50%;transform:translate(-50%);background-color:#fbfbfb;z-index:100;padding:.5em;font-size:.85rem;border-radius:.5em;box-shadow:4px 4px 1em #0003;display:grid;grid-template-columns:auto 1fr;-webkit-user-select:none;user-select:none}.float-menu.svelte-sa4v07 .dragger:where(.svelte-sa4v07){padding:.25em;font-size:1.5em;cursor:move}.panel.svelte-sa4v07{border:1px solid #ccc;padding:.5em .25em;border-radius:5px;display:flex;gap:0;flex-wrap:wrap;border:none}.panel.svelte-sa4v07>h3:where(.svelte-sa4v07){background-color:#f5f5f5;padding:.25em 0;border:1px solid #ccc;margin:.25em 0}.dragger.svelte-sa4v07{vertical-align:middle;text-align:center;display:flex;align-items:center}.dragger.svelte-sa4v07:hover{background-color:#f5f5f5}.show-button.svelte-sa4v07{position:fixed;right:0;top:50%;transform:translateY(-50%);background-color:#fff;padding:.5em;border-radius:.5em 0 0 .5em;display:flex;align-items:center;justify-content:center;box-shadow:0 0 1em #0003;transition:transform .1s ease-in-out;border:1px solid #ccc}.show-button.svelte-sa4v07:hover{transform:translateY(-50%) scale(1.1)}.show-button.svelte-sa4v07 img:where(.svelte-sa4v07){width:2em;height:2em}h3.svelte-sa4v07 button:where(.svelte-sa4v07){background-color:transparent;border:none;cursor:pointer;font-weight:inherit;font-family:inherit;font-size:inherit;padding:0}h3.svelte-sa4v07 button:where(.svelte-sa4v07):hover{text-decoration:underline} ");

(function () {
  'use strict';

  var __defProp = Object.defineProperty;
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
  const DEV = false;
  var is_array = Array.isArray;
  var array_from = Array.from;
  var define_property = Object.defineProperty;
  var get_descriptor = Object.getOwnPropertyDescriptor;
  var get_descriptors = Object.getOwnPropertyDescriptors;
  var object_prototype = Object.prototype;
  var array_prototype = Array.prototype;
  var get_prototype_of = Object.getPrototypeOf;
  const DERIVED = 1 << 1;
  const EFFECT = 1 << 2;
  const RENDER_EFFECT = 1 << 3;
  const BLOCK_EFFECT = 1 << 4;
  const BRANCH_EFFECT = 1 << 5;
  const ROOT_EFFECT = 1 << 6;
  const UNOWNED = 1 << 7;
  const DISCONNECTED = 1 << 8;
  const CLEAN = 1 << 9;
  const DIRTY = 1 << 10;
  const MAYBE_DIRTY = 1 << 11;
  const INERT = 1 << 12;
  const DESTROYED = 1 << 13;
  const EFFECT_RAN = 1 << 14;
  const EFFECT_TRANSPARENT = 1 << 15;
  const LEGACY_DERIVED_PROP = 1 << 16;
  const HEAD_EFFECT = 1 << 18;
  const EFFECT_HAS_DERIVED = 1 << 19;
  const STATE_SYMBOL = Symbol("$state");
  const LOADING_ATTR_SYMBOL = Symbol("");
  function equals(value) {
    return value === this.v;
  }
  function safe_not_equal(a2, b) {
    return a2 != a2 ? b == b : a2 !== b || a2 !== null && typeof a2 === "object" || typeof a2 === "function";
  }
  function safe_equals(value) {
    return !safe_not_equal(value, this.v);
  }
  function effect_in_teardown(rune) {
    {
      throw new Error("effect_in_teardown");
    }
  }
  function effect_in_unowned_derived() {
    {
      throw new Error("effect_in_unowned_derived");
    }
  }
  function effect_orphan(rune) {
    {
      throw new Error("effect_orphan");
    }
  }
  function effect_update_depth_exceeded() {
    {
      throw new Error("effect_update_depth_exceeded");
    }
  }
  function props_invalid_value(key) {
    {
      throw new Error("props_invalid_value");
    }
  }
  function state_descriptors_fixed() {
    {
      throw new Error("state_descriptors_fixed");
    }
  }
  function state_prototype_fixed() {
    {
      throw new Error("state_prototype_fixed");
    }
  }
  function state_unsafe_local_read() {
    {
      throw new Error("state_unsafe_local_read");
    }
  }
  function state_unsafe_mutation() {
    {
      throw new Error("state_unsafe_mutation");
    }
  }
  function source(v) {
    return {
      f: 0,
      // TODO ideally we could skip this altogether, but it causes type errors
      v,
      reactions: null,
      equals,
      version: 0
    };
  }
  function state(v) {
    return /* @__PURE__ */ push_derived_source(source(v));
  }
  // @__NO_SIDE_EFFECTS__
  function mutable_source(initial_value, immutable = false) {
    var _a;
    const s2 = source(initial_value);
    if (!immutable) {
      s2.equals = safe_equals;
    }
    if (component_context !== null && component_context.l !== null) {
      ((_a = component_context.l).s ?? (_a.s = [])).push(s2);
    }
    return s2;
  }
  // @__NO_SIDE_EFFECTS__
  function push_derived_source(source2) {
    if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {
      if (derived_sources === null) {
        set_derived_sources([source2]);
      } else {
        derived_sources.push(source2);
      }
    }
    return source2;
  }
  function set(source2, value) {
    if (active_reaction !== null && is_runes() && (active_reaction.f & DERIVED) !== 0 && // If the source was created locally within the current derived, then
    // we allow the mutation.
    (derived_sources === null || !derived_sources.includes(source2))) {
      state_unsafe_mutation();
    }
    if (!source2.equals(value)) {
      source2.v = value;
      source2.version = increment_version();
      mark_reactions(source2, DIRTY);
      if (is_runes() && active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & BRANCH_EFFECT) === 0) {
        if (new_deps !== null && new_deps.includes(source2)) {
          set_signal_status(active_effect, DIRTY);
          schedule_effect(active_effect);
        } else {
          if (untracked_writes === null) {
            set_untracked_writes([source2]);
          } else {
            untracked_writes.push(source2);
          }
        }
      }
    }
    return value;
  }
  function mark_reactions(signal, status) {
    var reactions = signal.reactions;
    if (reactions === null) return;
    var runes = is_runes();
    var length = reactions.length;
    for (var i2 = 0; i2 < length; i2++) {
      var reaction = reactions[i2];
      var flags = reaction.f;
      if ((flags & DIRTY) !== 0) continue;
      if (!runes && reaction === active_effect) continue;
      set_signal_status(reaction, status);
      if ((flags & (CLEAN | UNOWNED)) !== 0) {
        if ((flags & DERIVED) !== 0) {
          mark_reactions(
            /** @type {Derived} */
            reaction,
            MAYBE_DIRTY
          );
        } else {
          schedule_effect(
            /** @type {Effect} */
            reaction
          );
        }
      }
    }
  }
  const EACH_ITEM_REACTIVE = 1;
  const EACH_INDEX_REACTIVE = 1 << 1;
  const EACH_ITEM_IMMUTABLE = 1 << 4;
  const PROPS_IS_IMMUTABLE = 1;
  const PROPS_IS_RUNES = 1 << 1;
  const PROPS_IS_UPDATED = 1 << 2;
  const PROPS_IS_BINDABLE = 1 << 3;
  const PROPS_IS_LAZY_INITIAL = 1 << 4;
  const TEMPLATE_FRAGMENT = 1;
  const TEMPLATE_USE_IMPORT_NODE = 1 << 1;
  const UNINITIALIZED = Symbol();
  let hydrating = false;
  function proxy(value, parent = null, prev) {
    if (typeof value !== "object" || value === null || STATE_SYMBOL in value) {
      return value;
    }
    const prototype = get_prototype_of(value);
    if (prototype !== object_prototype && prototype !== array_prototype) {
      return value;
    }
    var sources = /* @__PURE__ */ new Map();
    var is_proxied_array = is_array(value);
    var version = source(0);
    if (is_proxied_array) {
      sources.set("length", source(
        /** @type {any[]} */
        value.length
      ));
    }
    var metadata;
    return new Proxy(
      /** @type {any} */
      value,
      {
        defineProperty(_, prop2, descriptor) {
          if (!("value" in descriptor) || descriptor.configurable === false || descriptor.enumerable === false || descriptor.writable === false) {
            state_descriptors_fixed();
          }
          var s2 = sources.get(prop2);
          if (s2 === void 0) {
            s2 = source(descriptor.value);
            sources.set(prop2, s2);
          } else {
            set(s2, proxy(descriptor.value, metadata));
          }
          return true;
        },
        deleteProperty(target, prop2) {
          var s2 = sources.get(prop2);
          if (s2 === void 0) {
            if (prop2 in target) {
              sources.set(prop2, source(UNINITIALIZED));
            }
          } else {
            set(s2, UNINITIALIZED);
            update_version(version);
          }
          return true;
        },
        get(target, prop2, receiver) {
          var _a;
          if (prop2 === STATE_SYMBOL) {
            return value;
          }
          var s2 = sources.get(prop2);
          var exists = prop2 in target;
          if (s2 === void 0 && (!exists || ((_a = get_descriptor(target, prop2)) == null ? void 0 : _a.writable))) {
            s2 = source(proxy(exists ? target[prop2] : UNINITIALIZED, metadata));
            sources.set(prop2, s2);
          }
          if (s2 !== void 0) {
            var v = get(s2);
            return v === UNINITIALIZED ? void 0 : v;
          }
          return Reflect.get(target, prop2, receiver);
        },
        getOwnPropertyDescriptor(target, prop2) {
          var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
          if (descriptor && "value" in descriptor) {
            var s2 = sources.get(prop2);
            if (s2) descriptor.value = get(s2);
          } else if (descriptor === void 0) {
            var source2 = sources.get(prop2);
            var value2 = source2 == null ? void 0 : source2.v;
            if (source2 !== void 0 && value2 !== UNINITIALIZED) {
              return {
                enumerable: true,
                configurable: true,
                value: value2,
                writable: true
              };
            }
          }
          return descriptor;
        },
        has(target, prop2) {
          var _a;
          if (prop2 === STATE_SYMBOL) {
            return true;
          }
          var s2 = sources.get(prop2);
          var has = s2 !== void 0 && s2.v !== UNINITIALIZED || Reflect.has(target, prop2);
          if (s2 !== void 0 || active_effect !== null && (!has || ((_a = get_descriptor(target, prop2)) == null ? void 0 : _a.writable))) {
            if (s2 === void 0) {
              s2 = source(has ? proxy(target[prop2], metadata) : UNINITIALIZED);
              sources.set(prop2, s2);
            }
            var value2 = get(s2);
            if (value2 === UNINITIALIZED) {
              return false;
            }
          }
          return has;
        },
        set(target, prop2, value2, receiver) {
          var _a;
          var s2 = sources.get(prop2);
          var has = prop2 in target;
          if (is_proxied_array && prop2 === "length") {
            for (var i2 = value2; i2 < /** @type {Source<number>} */
            s2.v; i2 += 1) {
              var other_s = sources.get(i2 + "");
              if (other_s !== void 0) {
                set(other_s, UNINITIALIZED);
              } else if (i2 in target) {
                other_s = source(UNINITIALIZED);
                sources.set(i2 + "", other_s);
              }
            }
          }
          if (s2 === void 0) {
            if (!has || ((_a = get_descriptor(target, prop2)) == null ? void 0 : _a.writable)) {
              s2 = source(void 0);
              set(s2, proxy(value2, metadata));
              sources.set(prop2, s2);
            }
          } else {
            has = s2.v !== UNINITIALIZED;
            set(s2, proxy(value2, metadata));
          }
          var descriptor = Reflect.getOwnPropertyDescriptor(target, prop2);
          if (descriptor == null ? void 0 : descriptor.set) {
            descriptor.set.call(receiver, value2);
          }
          if (!has) {
            if (is_proxied_array && typeof prop2 === "string") {
              var ls = (
                /** @type {Source<number>} */
                sources.get("length")
              );
              var n2 = Number(prop2);
              if (Number.isInteger(n2) && n2 >= ls.v) {
                set(ls, n2 + 1);
              }
            }
            update_version(version);
          }
          return true;
        },
        ownKeys(target) {
          get(version);
          var own_keys = Reflect.ownKeys(target).filter((key2) => {
            var source3 = sources.get(key2);
            return source3 === void 0 || source3.v !== UNINITIALIZED;
          });
          for (var [key, source2] of sources) {
            if (source2.v !== UNINITIALIZED && !(key in target)) {
              own_keys.push(key);
            }
          }
          return own_keys;
        },
        setPrototypeOf() {
          state_prototype_fixed();
        }
      }
    );
  }
  function update_version(signal, d2 = 1) {
    set(signal, signal.v + d2);
  }
  var $window;
  var first_child_getter;
  var next_sibling_getter;
  function init_operations() {
    if ($window !== void 0) {
      return;
    }
    $window = window;
    var element_prototype = Element.prototype;
    var node_prototype = Node.prototype;
    first_child_getter = get_descriptor(node_prototype, "firstChild").get;
    next_sibling_getter = get_descriptor(node_prototype, "nextSibling").get;
    element_prototype.__click = void 0;
    element_prototype.__className = "";
    element_prototype.__attributes = null;
    element_prototype.__e = void 0;
    Text.prototype.__t = void 0;
  }
  function create_text(value = "") {
    return document.createTextNode(value);
  }
  // @__NO_SIDE_EFFECTS__
  function get_first_child(node) {
    return first_child_getter.call(node);
  }
  // @__NO_SIDE_EFFECTS__
  function get_next_sibling(node) {
    return next_sibling_getter.call(node);
  }
  function child(node) {
    {
      return /* @__PURE__ */ get_first_child(node);
    }
  }
  function first_child(fragment, is_text) {
    {
      var first = (
        /** @type {DocumentFragment} */
        /* @__PURE__ */ get_first_child(
          /** @type {Node} */
          fragment
        )
      );
      if (first instanceof Comment && first.data === "") return /* @__PURE__ */ get_next_sibling(first);
      return first;
    }
  }
  function sibling(node, count = 1, is_text = false) {
    let next_sibling = node;
    while (count--) {
      next_sibling = /** @type {TemplateNode} */
      /* @__PURE__ */ get_next_sibling(next_sibling);
    }
    {
      return next_sibling;
    }
  }
  function clear_text_content(node) {
    node.textContent = "";
  }
  function validate_effect(rune) {
    if (active_effect === null && active_reaction === null) {
      effect_orphan();
    }
    if (active_reaction !== null && (active_reaction.f & UNOWNED) !== 0) {
      effect_in_unowned_derived();
    }
    if (is_destroying_effect) {
      effect_in_teardown();
    }
  }
  function push_effect(effect2, parent_effect) {
    var parent_last = parent_effect.last;
    if (parent_last === null) {
      parent_effect.last = parent_effect.first = effect2;
    } else {
      parent_last.next = effect2;
      effect2.prev = parent_last;
      parent_effect.last = effect2;
    }
  }
  function create_effect(type, fn, sync, push2 = true) {
    var is_root = (type & ROOT_EFFECT) !== 0;
    var parent_effect = active_effect;
    var effect2 = {
      ctx: component_context,
      deps: null,
      nodes_start: null,
      nodes_end: null,
      f: type | DIRTY,
      first: null,
      fn,
      last: null,
      next: null,
      parent: is_root ? null : parent_effect,
      prev: null,
      teardown: null,
      transitions: null,
      version: 0
    };
    if (sync) {
      var previously_flushing_effect = is_flushing_effect;
      try {
        set_is_flushing_effect(true);
        update_effect(effect2);
        effect2.f |= EFFECT_RAN;
      } catch (e2) {
        destroy_effect(effect2);
        throw e2;
      } finally {
        set_is_flushing_effect(previously_flushing_effect);
      }
    } else if (fn !== null) {
      schedule_effect(effect2);
    }
    var inert = sync && effect2.deps === null && effect2.first === null && effect2.nodes_start === null && effect2.teardown === null && (effect2.f & EFFECT_HAS_DERIVED) === 0;
    if (!inert && !is_root && push2) {
      if (parent_effect !== null) {
        push_effect(effect2, parent_effect);
      }
      if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {
        var derived2 = (
          /** @type {Derived} */
          active_reaction
        );
        (derived2.children ?? (derived2.children = [])).push(effect2);
      }
    }
    return effect2;
  }
  function user_effect(fn) {
    validate_effect();
    var defer = active_effect !== null && (active_effect.f & RENDER_EFFECT) !== 0 && // TODO do we actually need this? removing them changes nothing
    component_context !== null && !component_context.m;
    if (defer) {
      var context = (
        /** @type {ComponentContext} */
        component_context
      );
      (context.e ?? (context.e = [])).push({
        fn,
        effect: active_effect,
        reaction: active_reaction
      });
    } else {
      var signal = effect(fn);
      return signal;
    }
  }
  function effect_root(fn) {
    const effect2 = create_effect(ROOT_EFFECT, fn, true);
    return () => {
      destroy_effect(effect2);
    };
  }
  function effect(fn) {
    return create_effect(EFFECT, fn, false);
  }
  function render_effect(fn) {
    return create_effect(RENDER_EFFECT, fn, true);
  }
  function template_effect(fn) {
    return render_effect(fn);
  }
  function block(fn, flags = 0) {
    return create_effect(RENDER_EFFECT | BLOCK_EFFECT | flags, fn, true);
  }
  function branch(fn, push2 = true) {
    return create_effect(RENDER_EFFECT | BRANCH_EFFECT, fn, true, push2);
  }
  function execute_effect_teardown(effect2) {
    var teardown = effect2.teardown;
    if (teardown !== null) {
      const previously_destroying_effect = is_destroying_effect;
      const previous_reaction = active_reaction;
      set_is_destroying_effect(true);
      set_active_reaction(null);
      try {
        teardown.call(null);
      } finally {
        set_is_destroying_effect(previously_destroying_effect);
        set_active_reaction(previous_reaction);
      }
    }
  }
  function destroy_effect(effect2, remove_dom = true) {
    var removed = false;
    if ((remove_dom || (effect2.f & HEAD_EFFECT) !== 0) && effect2.nodes_start !== null) {
      var node = effect2.nodes_start;
      var end = effect2.nodes_end;
      while (node !== null) {
        var next = node === end ? null : (
          /** @type {TemplateNode} */
          /* @__PURE__ */ get_next_sibling(node)
        );
        node.remove();
        node = next;
      }
      removed = true;
    }
    destroy_effect_children(effect2, remove_dom && !removed);
    remove_reactions(effect2, 0);
    set_signal_status(effect2, DESTROYED);
    var transitions = effect2.transitions;
    if (transitions !== null) {
      for (const transition of transitions) {
        transition.stop();
      }
    }
    execute_effect_teardown(effect2);
    var parent = effect2.parent;
    if (parent !== null && parent.first !== null) {
      unlink_effect(effect2);
    }
    effect2.next = effect2.prev = effect2.teardown = effect2.ctx = effect2.deps = effect2.parent = effect2.fn = effect2.nodes_start = effect2.nodes_end = null;
  }
  function unlink_effect(effect2) {
    var parent = effect2.parent;
    var prev = effect2.prev;
    var next = effect2.next;
    if (prev !== null) prev.next = next;
    if (next !== null) next.prev = prev;
    if (parent !== null) {
      if (parent.first === effect2) parent.first = next;
      if (parent.last === effect2) parent.last = prev;
    }
  }
  function pause_effect(effect2, callback) {
    var transitions = [];
    pause_children(effect2, transitions, true);
    run_out_transitions(transitions, () => {
      destroy_effect(effect2);
      if (callback) callback();
    });
  }
  function run_out_transitions(transitions, fn) {
    var remaining = transitions.length;
    if (remaining > 0) {
      var check = () => --remaining || fn();
      for (var transition of transitions) {
        transition.out(check);
      }
    } else {
      fn();
    }
  }
  function pause_children(effect2, transitions, local) {
    if ((effect2.f & INERT) !== 0) return;
    effect2.f ^= INERT;
    if (effect2.transitions !== null) {
      for (const transition of effect2.transitions) {
        if (transition.is_global || local) {
          transitions.push(transition);
        }
      }
    }
    var child2 = effect2.first;
    while (child2 !== null) {
      var sibling2 = child2.next;
      var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
      pause_children(child2, transitions, transparent ? local : false);
      child2 = sibling2;
    }
  }
  function resume_effect(effect2) {
    resume_children(effect2, true);
  }
  function resume_children(effect2, local) {
    if ((effect2.f & INERT) === 0) return;
    effect2.f ^= INERT;
    if (check_dirtiness(effect2)) {
      update_effect(effect2);
    }
    var child2 = effect2.first;
    while (child2 !== null) {
      var sibling2 = child2.next;
      var transparent = (child2.f & EFFECT_TRANSPARENT) !== 0 || (child2.f & BRANCH_EFFECT) !== 0;
      resume_children(child2, transparent ? local : false);
      child2 = sibling2;
    }
    if (effect2.transitions !== null) {
      for (const transition of effect2.transitions) {
        if (transition.is_global || local) {
          transition.in();
        }
      }
    }
  }
  // @__NO_SIDE_EFFECTS__
  function derived(fn) {
    let flags = DERIVED | DIRTY;
    if (active_effect === null) {
      flags |= UNOWNED;
    } else {
      active_effect.f |= EFFECT_HAS_DERIVED;
    }
    const signal = {
      children: null,
      deps: null,
      equals,
      f: flags,
      fn,
      reactions: null,
      v: (
        /** @type {V} */
        null
      ),
      version: 0,
      parent: active_effect
    };
    if (active_reaction !== null && (active_reaction.f & DERIVED) !== 0) {
      var derived2 = (
        /** @type {Derived} */
        active_reaction
      );
      (derived2.children ?? (derived2.children = [])).push(signal);
    }
    return signal;
  }
  // @__NO_SIDE_EFFECTS__
  function derived_safe_equal(fn) {
    const signal = /* @__PURE__ */ derived(fn);
    signal.equals = safe_equals;
    return signal;
  }
  function destroy_derived_children(derived2) {
    var children = derived2.children;
    if (children !== null) {
      derived2.children = null;
      for (var i2 = 0; i2 < children.length; i2 += 1) {
        var child2 = children[i2];
        if ((child2.f & DERIVED) !== 0) {
          destroy_derived(
            /** @type {Derived} */
            child2
          );
        } else {
          destroy_effect(
            /** @type {Effect} */
            child2
          );
        }
      }
    }
  }
  function update_derived(derived2) {
    var value;
    var prev_active_effect = active_effect;
    set_active_effect(derived2.parent);
    {
      try {
        destroy_derived_children(derived2);
        value = update_reaction(derived2);
      } finally {
        set_active_effect(prev_active_effect);
      }
    }
    var status = (skip_reaction || (derived2.f & UNOWNED) !== 0) && derived2.deps !== null ? MAYBE_DIRTY : CLEAN;
    set_signal_status(derived2, status);
    if (!derived2.equals(value)) {
      derived2.v = value;
      derived2.version = increment_version();
    }
  }
  function destroy_derived(signal) {
    destroy_derived_children(signal);
    remove_reactions(signal, 0);
    set_signal_status(signal, DESTROYED);
    signal.children = signal.deps = signal.reactions = // @ts-expect-error `signal.fn` cannot be `null` while the signal is alive
    signal.fn = null;
  }
  function lifecycle_outside_component(name) {
    {
      throw new Error("lifecycle_outside_component");
    }
  }
  let is_micro_task_queued = false;
  let is_flushing_effect = false;
  let is_destroying_effect = false;
  function set_is_flushing_effect(value) {
    is_flushing_effect = value;
  }
  function set_is_destroying_effect(value) {
    is_destroying_effect = value;
  }
  let queued_root_effects = [];
  let flush_count = 0;
  let active_reaction = null;
  function set_active_reaction(reaction) {
    active_reaction = reaction;
  }
  let active_effect = null;
  function set_active_effect(effect2) {
    active_effect = effect2;
  }
  let derived_sources = null;
  function set_derived_sources(sources) {
    derived_sources = sources;
  }
  let new_deps = null;
  let skipped_deps = 0;
  let untracked_writes = null;
  function set_untracked_writes(value) {
    untracked_writes = value;
  }
  let current_version = 0;
  let skip_reaction = false;
  let component_context = null;
  function increment_version() {
    return ++current_version;
  }
  function is_runes() {
    return component_context !== null && component_context.l === null;
  }
  function check_dirtiness(reaction) {
    var _a, _b;
    var flags = reaction.f;
    if ((flags & DIRTY) !== 0) {
      return true;
    }
    if ((flags & MAYBE_DIRTY) !== 0) {
      var dependencies = reaction.deps;
      var is_unowned = (flags & UNOWNED) !== 0;
      if (dependencies !== null) {
        var i2;
        if ((flags & DISCONNECTED) !== 0) {
          for (i2 = 0; i2 < dependencies.length; i2++) {
            ((_a = dependencies[i2]).reactions ?? (_a.reactions = [])).push(reaction);
          }
          reaction.f ^= DISCONNECTED;
        }
        for (i2 = 0; i2 < dependencies.length; i2++) {
          var dependency = dependencies[i2];
          if (check_dirtiness(
            /** @type {Derived} */
            dependency
          )) {
            update_derived(
              /** @type {Derived} */
              dependency
            );
          }
          if (is_unowned && active_effect !== null && !skip_reaction && !((_b = dependency == null ? void 0 : dependency.reactions) == null ? void 0 : _b.includes(reaction))) {
            (dependency.reactions ?? (dependency.reactions = [])).push(reaction);
          }
          if (dependency.version > reaction.version) {
            return true;
          }
        }
      }
      if (!is_unowned) {
        set_signal_status(reaction, CLEAN);
      }
    }
    return false;
  }
  function handle_error(error, effect2, component_context2) {
    {
      throw error;
    }
  }
  function update_reaction(reaction) {
    var _a;
    var previous_deps = new_deps;
    var previous_skipped_deps = skipped_deps;
    var previous_untracked_writes = untracked_writes;
    var previous_reaction = active_reaction;
    var previous_skip_reaction = skip_reaction;
    var prev_derived_sources = derived_sources;
    new_deps = /** @type {null | Value[]} */
    null;
    skipped_deps = 0;
    untracked_writes = null;
    active_reaction = (reaction.f & (BRANCH_EFFECT | ROOT_EFFECT)) === 0 ? reaction : null;
    skip_reaction = !is_flushing_effect && (reaction.f & UNOWNED) !== 0;
    derived_sources = null;
    try {
      var result = (
        /** @type {Function} */
        (0, reaction.fn)()
      );
      var deps = reaction.deps;
      if (new_deps !== null) {
        var i2;
        remove_reactions(reaction, skipped_deps);
        if (deps !== null && skipped_deps > 0) {
          deps.length = skipped_deps + new_deps.length;
          for (i2 = 0; i2 < new_deps.length; i2++) {
            deps[skipped_deps + i2] = new_deps[i2];
          }
        } else {
          reaction.deps = deps = new_deps;
        }
        if (!skip_reaction) {
          for (i2 = skipped_deps; i2 < deps.length; i2++) {
            ((_a = deps[i2]).reactions ?? (_a.reactions = [])).push(reaction);
          }
        }
      } else if (deps !== null && skipped_deps < deps.length) {
        remove_reactions(reaction, skipped_deps);
        deps.length = skipped_deps;
      }
      return result;
    } finally {
      new_deps = previous_deps;
      skipped_deps = previous_skipped_deps;
      untracked_writes = previous_untracked_writes;
      active_reaction = previous_reaction;
      skip_reaction = previous_skip_reaction;
      derived_sources = prev_derived_sources;
    }
  }
  function remove_reaction(signal, dependency) {
    let reactions = dependency.reactions;
    if (reactions !== null) {
      var index2 = reactions.indexOf(signal);
      if (index2 !== -1) {
        var new_length = reactions.length - 1;
        if (new_length === 0) {
          reactions = dependency.reactions = null;
        } else {
          reactions[index2] = reactions[new_length];
          reactions.pop();
        }
      }
    }
    if (reactions === null && (dependency.f & DERIVED) !== 0 && // Destroying a child effect while updating a parent effect can cause a dependency to appear
    // to be unused, when in fact it is used by the currently-updating parent. Checking `new_deps`
    // allows us to skip the expensive work of disconnecting and immediately reconnecting it
    (new_deps === null || !new_deps.includes(dependency))) {
      set_signal_status(dependency, MAYBE_DIRTY);
      if ((dependency.f & (UNOWNED | DISCONNECTED)) === 0) {
        dependency.f ^= DISCONNECTED;
      }
      remove_reactions(
        /** @type {Derived} **/
        dependency,
        0
      );
    }
  }
  function remove_reactions(signal, start_index) {
    var dependencies = signal.deps;
    if (dependencies === null) return;
    for (var i2 = start_index; i2 < dependencies.length; i2++) {
      remove_reaction(signal, dependencies[i2]);
    }
  }
  function destroy_effect_children(signal, remove_dom = false) {
    var effect2 = signal.first;
    signal.first = signal.last = null;
    while (effect2 !== null) {
      var next = effect2.next;
      destroy_effect(effect2, remove_dom);
      effect2 = next;
    }
  }
  function update_effect(effect2) {
    var flags = effect2.f;
    if ((flags & DESTROYED) !== 0) {
      return;
    }
    set_signal_status(effect2, CLEAN);
    var previous_effect = active_effect;
    var previous_component_context = component_context;
    active_effect = effect2;
    component_context = effect2.ctx;
    try {
      if ((flags & BLOCK_EFFECT) === 0) {
        destroy_effect_children(effect2);
      }
      execute_effect_teardown(effect2);
      var teardown = update_reaction(effect2);
      effect2.teardown = typeof teardown === "function" ? teardown : null;
      effect2.version = current_version;
      if (DEV) ;
    } catch (error) {
      handle_error(
        /** @type {Error} */
        error
      );
    } finally {
      active_effect = previous_effect;
      component_context = previous_component_context;
    }
  }
  function infinite_loop_guard() {
    if (flush_count > 1e3) {
      flush_count = 0;
      {
        effect_update_depth_exceeded();
      }
    }
    flush_count++;
  }
  function flush_queued_root_effects(root_effects) {
    var length = root_effects.length;
    if (length === 0) {
      return;
    }
    infinite_loop_guard();
    var previously_flushing_effect = is_flushing_effect;
    is_flushing_effect = true;
    try {
      for (var i2 = 0; i2 < length; i2++) {
        var effect2 = root_effects[i2];
        if ((effect2.f & CLEAN) === 0) {
          effect2.f ^= CLEAN;
        }
        var collected_effects = [];
        process_effects(effect2, collected_effects);
        flush_queued_effects(collected_effects);
      }
    } finally {
      is_flushing_effect = previously_flushing_effect;
    }
  }
  function flush_queued_effects(effects) {
    var length = effects.length;
    if (length === 0) return;
    for (var i2 = 0; i2 < length; i2++) {
      var effect2 = effects[i2];
      if ((effect2.f & (DESTROYED | INERT)) === 0 && check_dirtiness(effect2)) {
        update_effect(effect2);
        if (effect2.deps === null && effect2.first === null && effect2.nodes_start === null) {
          if (effect2.teardown === null) {
            unlink_effect(effect2);
          } else {
            effect2.fn = null;
          }
        }
      }
    }
  }
  function process_deferred() {
    is_micro_task_queued = false;
    if (flush_count > 1001) {
      return;
    }
    const previous_queued_root_effects = queued_root_effects;
    queued_root_effects = [];
    flush_queued_root_effects(previous_queued_root_effects);
    if (!is_micro_task_queued) {
      flush_count = 0;
    }
  }
  function schedule_effect(signal) {
    {
      if (!is_micro_task_queued) {
        is_micro_task_queued = true;
        queueMicrotask(process_deferred);
      }
    }
    var effect2 = signal;
    while (effect2.parent !== null) {
      effect2 = effect2.parent;
      var flags = effect2.f;
      if ((flags & (ROOT_EFFECT | BRANCH_EFFECT)) !== 0) {
        if ((flags & CLEAN) === 0) return;
        effect2.f ^= CLEAN;
      }
    }
    queued_root_effects.push(effect2);
  }
  function process_effects(effect2, collected_effects) {
    var current_effect = effect2.first;
    var effects = [];
    main_loop: while (current_effect !== null) {
      var flags = current_effect.f;
      var is_branch = (flags & BRANCH_EFFECT) !== 0;
      var is_skippable_branch = is_branch && (flags & CLEAN) !== 0;
      if (!is_skippable_branch && (flags & INERT) === 0) {
        if ((flags & RENDER_EFFECT) !== 0) {
          if (is_branch) {
            current_effect.f ^= CLEAN;
          } else if (check_dirtiness(current_effect)) {
            update_effect(current_effect);
          }
          var child2 = current_effect.first;
          if (child2 !== null) {
            current_effect = child2;
            continue;
          }
        } else if ((flags & EFFECT) !== 0) {
          effects.push(current_effect);
        }
      }
      var sibling2 = current_effect.next;
      if (sibling2 === null) {
        let parent = current_effect.parent;
        while (parent !== null) {
          if (effect2 === parent) {
            break main_loop;
          }
          var parent_sibling = parent.next;
          if (parent_sibling !== null) {
            current_effect = parent_sibling;
            continue main_loop;
          }
          parent = parent.parent;
        }
      }
      current_effect = sibling2;
    }
    for (var i2 = 0; i2 < effects.length; i2++) {
      child2 = effects[i2];
      collected_effects.push(child2);
      process_effects(child2, collected_effects);
    }
  }
  function get(signal) {
    var flags = signal.f;
    if ((flags & DESTROYED) !== 0) {
      return signal.v;
    }
    if (active_reaction !== null) {
      if (derived_sources !== null && derived_sources.includes(signal)) {
        state_unsafe_local_read();
      }
      var deps = active_reaction.deps;
      if (new_deps === null && deps !== null && deps[skipped_deps] === signal) {
        skipped_deps++;
      } else if (new_deps === null) {
        new_deps = [signal];
      } else {
        new_deps.push(signal);
      }
      if (untracked_writes !== null && active_effect !== null && (active_effect.f & CLEAN) !== 0 && (active_effect.f & BRANCH_EFFECT) === 0 && untracked_writes.includes(signal)) {
        set_signal_status(active_effect, DIRTY);
        schedule_effect(active_effect);
      }
    }
    if ((flags & DERIVED) !== 0) {
      var derived2 = (
        /** @type {Derived} */
        signal
      );
      if (check_dirtiness(derived2)) {
        update_derived(derived2);
      }
    }
    return signal.v;
  }
  function untrack(fn) {
    const previous_reaction = active_reaction;
    try {
      active_reaction = null;
      return fn();
    } finally {
      active_reaction = previous_reaction;
    }
  }
  const STATUS_MASK = ~(DIRTY | MAYBE_DIRTY | CLEAN);
  function set_signal_status(signal, status) {
    signal.f = signal.f & STATUS_MASK | status;
  }
  function getContext(key) {
    const context_map = get_or_init_context_map();
    const result = (
      /** @type {T} */
      context_map.get(key)
    );
    return result;
  }
  function setContext(key, context) {
    const context_map = get_or_init_context_map();
    context_map.set(key, context);
    return context;
  }
  function get_or_init_context_map(name) {
    if (component_context === null) {
      lifecycle_outside_component();
    }
    return component_context.c ?? (component_context.c = new Map(get_parent_context(component_context) || void 0));
  }
  function get_parent_context(component_context2) {
    let parent = component_context2.p;
    while (parent !== null) {
      const context_map = parent.c;
      if (context_map !== null) {
        return context_map;
      }
      parent = parent.p;
    }
    return null;
  }
  function push(props, runes = false, fn) {
    component_context = {
      p: component_context,
      c: null,
      e: null,
      m: false,
      s: props,
      x: null,
      l: null
    };
    if (!runes) {
      component_context.l = {
        s: null,
        u: null,
        r1: [],
        r2: source(false)
      };
    }
  }
  function pop(component) {
    const context_stack_item = component_context;
    if (context_stack_item !== null) {
      const component_effects = context_stack_item.e;
      if (component_effects !== null) {
        var previous_effect = active_effect;
        var previous_reaction = active_reaction;
        context_stack_item.e = null;
        try {
          for (var i2 = 0; i2 < component_effects.length; i2++) {
            var component_effect = component_effects[i2];
            set_active_effect(component_effect.effect);
            set_active_reaction(component_effect.reaction);
            effect(component_effect.fn);
          }
        } finally {
          set_active_effect(previous_effect);
          set_active_reaction(previous_reaction);
        }
      }
      component_context = context_stack_item.p;
      context_stack_item.m = true;
    }
    return (
      /** @type {T} */
      {}
    );
  }
  function deep_read_state(value) {
    if (typeof value !== "object" || !value || value instanceof EventTarget) {
      return;
    }
    if (STATE_SYMBOL in value) {
      deep_read(value);
    } else if (!Array.isArray(value)) {
      for (let key in value) {
        const prop2 = value[key];
        if (typeof prop2 === "object" && prop2 && STATE_SYMBOL in prop2) {
          deep_read(prop2);
        }
      }
    }
  }
  function deep_read(value, visited = /* @__PURE__ */ new Set()) {
    if (typeof value === "object" && value !== null && // We don't want to traverse DOM elements
    !(value instanceof EventTarget) && !visited.has(value)) {
      visited.add(value);
      if (value instanceof Date) {
        value.getTime();
      }
      for (let key in value) {
        try {
          deep_read(value[key], visited);
        } catch (e2) {
        }
      }
      const proto = get_prototype_of(value);
      if (proto !== Object.prototype && proto !== Array.prototype && proto !== Map.prototype && proto !== Set.prototype && proto !== Date.prototype) {
        const descriptors = get_descriptors(proto);
        for (let key in descriptors) {
          const get2 = descriptors[key].get;
          if (get2) {
            try {
              get2.call(value);
            } catch (e2) {
            }
          }
        }
      }
    }
  }
  const all_registered_events = /* @__PURE__ */ new Set();
  const root_event_handles = /* @__PURE__ */ new Set();
  function delegate(events) {
    for (var i2 = 0; i2 < events.length; i2++) {
      all_registered_events.add(events[i2]);
    }
    for (var fn of root_event_handles) {
      fn(events);
    }
  }
  function handle_event_propagation(event) {
    var _a;
    var handler_element = this;
    var owner_document = (
      /** @type {Node} */
      handler_element.ownerDocument
    );
    var event_name = event.type;
    var path = ((_a = event.composedPath) == null ? void 0 : _a.call(event)) || [];
    var current_target = (
      /** @type {null | Element} */
      path[0] || event.target
    );
    var path_idx = 0;
    var handled_at = event.__root;
    if (handled_at) {
      var at_idx = path.indexOf(handled_at);
      if (at_idx !== -1 && (handler_element === document || handler_element === /** @type {any} */
      window)) {
        event.__root = handler_element;
        return;
      }
      var handler_idx = path.indexOf(handler_element);
      if (handler_idx === -1) {
        return;
      }
      if (at_idx <= handler_idx) {
        path_idx = at_idx;
      }
    }
    current_target = /** @type {Element} */
    path[path_idx] || event.target;
    if (current_target === handler_element) return;
    define_property(event, "currentTarget", {
      configurable: true,
      get() {
        return current_target || owner_document;
      }
    });
    try {
      var throw_error;
      var other_errors = [];
      while (current_target !== null) {
        var parent_element = current_target.assignedSlot || current_target.parentNode || /** @type {any} */
        current_target.host || null;
        try {
          var delegated = current_target["__" + event_name];
          if (delegated !== void 0 && !/** @type {any} */
          current_target.disabled) {
            if (is_array(delegated)) {
              var [fn, ...data] = delegated;
              fn.apply(current_target, [event, ...data]);
            } else {
              delegated.call(current_target, event);
            }
          }
        } catch (error) {
          if (throw_error) {
            other_errors.push(error);
          } else {
            throw_error = error;
          }
        }
        if (event.cancelBubble || parent_element === handler_element || parent_element === null) {
          break;
        }
        current_target = parent_element;
      }
      if (throw_error) {
        for (let error of other_errors) {
          queueMicrotask(() => {
            throw error;
          });
        }
        throw throw_error;
      }
    } finally {
      event.__root = handler_element;
      delete event.currentTarget;
    }
  }
  function create_fragment_from_html(html) {
    var elem = document.createElement("template");
    elem.innerHTML = html;
    return elem.content;
  }
  function assign_nodes(start, end) {
    var effect2 = (
      /** @type {Effect} */
      active_effect
    );
    if (effect2.nodes_start === null) {
      effect2.nodes_start = start;
      effect2.nodes_end = end;
    }
  }
  // @__NO_SIDE_EFFECTS__
  function template(content, flags) {
    var is_fragment = (flags & TEMPLATE_FRAGMENT) !== 0;
    var use_import_node = (flags & TEMPLATE_USE_IMPORT_NODE) !== 0;
    var node;
    var has_start = !content.startsWith("<!>");
    return () => {
      if (node === void 0) {
        node = create_fragment_from_html(has_start ? content : "<!>" + content);
        if (!is_fragment) node = /** @type {Node} */
        /* @__PURE__ */ get_first_child(node);
      }
      var clone = (
        /** @type {TemplateNode} */
        use_import_node ? document.importNode(node, true) : node.cloneNode(true)
      );
      if (is_fragment) {
        var start = (
          /** @type {TemplateNode} */
          /* @__PURE__ */ get_first_child(clone)
        );
        var end = (
          /** @type {TemplateNode} */
          clone.lastChild
        );
        assign_nodes(start, end);
      } else {
        assign_nodes(clone, clone);
      }
      return clone;
    };
  }
  function comment() {
    var frag = document.createDocumentFragment();
    var start = document.createComment("");
    var anchor = create_text();
    frag.append(start, anchor);
    assign_nodes(start, anchor);
    return frag;
  }
  function append(anchor, dom) {
    if (anchor === null) {
      return;
    }
    anchor.before(
      /** @type {Node} */
      dom
    );
  }
  const PASSIVE_EVENTS = ["touchstart", "touchmove"];
  function is_passive_event(name) {
    return PASSIVE_EVENTS.includes(name);
  }
  function set_text(text, value) {
    var str = value == null ? "" : typeof value === "object" ? value + "" : value;
    if (str !== (text.__t ?? (text.__t = text.nodeValue))) {
      text.__t = str;
      text.nodeValue = str == null ? "" : str + "";
    }
  }
  function mount(component, options) {
    return _mount(component, options);
  }
  const document_listeners = /* @__PURE__ */ new Map();
  function _mount(Component, { target, anchor, props = {}, events, context, intro = true }) {
    init_operations();
    var registered_events = /* @__PURE__ */ new Set();
    var event_handle = (events2) => {
      for (var i2 = 0; i2 < events2.length; i2++) {
        var event_name = events2[i2];
        if (registered_events.has(event_name)) continue;
        registered_events.add(event_name);
        var passive = is_passive_event(event_name);
        target.addEventListener(event_name, handle_event_propagation, { passive });
        var n2 = document_listeners.get(event_name);
        if (n2 === void 0) {
          document.addEventListener(event_name, handle_event_propagation, { passive });
          document_listeners.set(event_name, 1);
        } else {
          document_listeners.set(event_name, n2 + 1);
        }
      }
    };
    event_handle(array_from(all_registered_events));
    root_event_handles.add(event_handle);
    var component = void 0;
    var unmount = effect_root(() => {
      var anchor_node = anchor ?? target.appendChild(create_text());
      branch(() => {
        if (context) {
          push({});
          var ctx = (
            /** @type {ComponentContext} */
            component_context
          );
          ctx.c = context;
        }
        if (events) {
          props.$$events = events;
        }
        component = Component(anchor_node, props) || {};
        if (context) {
          pop();
        }
      });
      return () => {
        var _a;
        for (var event_name of registered_events) {
          target.removeEventListener(event_name, handle_event_propagation);
          var n2 = (
            /** @type {number} */
            document_listeners.get(event_name)
          );
          if (--n2 === 0) {
            document.removeEventListener(event_name, handle_event_propagation);
            document_listeners.delete(event_name);
          } else {
            document_listeners.set(event_name, n2);
          }
        }
        root_event_handles.delete(event_handle);
        mounted_components.delete(component);
        if (anchor_node !== anchor) {
          (_a = anchor_node.parentNode) == null ? void 0 : _a.removeChild(anchor_node);
        }
      };
    });
    mounted_components.set(component, unmount);
    return component;
  }
  let mounted_components = /* @__PURE__ */ new WeakMap();
  function if_block(node, get_condition, consequent_fn, alternate_fn = null, elseif = false) {
    var anchor = node;
    var consequent_effect = null;
    var alternate_effect = null;
    var condition = null;
    var flags = elseif ? EFFECT_TRANSPARENT : 0;
    block(() => {
      if (condition === (condition = !!get_condition())) return;
      if (condition) {
        if (consequent_effect) {
          resume_effect(consequent_effect);
        } else {
          consequent_effect = branch(() => consequent_fn(anchor));
        }
        if (alternate_effect) {
          pause_effect(alternate_effect, () => {
            alternate_effect = null;
          });
        }
      } else {
        if (alternate_effect) {
          resume_effect(alternate_effect);
        } else if (alternate_fn) {
          alternate_effect = branch(() => alternate_fn(anchor));
        }
        if (consequent_effect) {
          pause_effect(consequent_effect, () => {
            consequent_effect = null;
          });
        }
      }
    }, flags);
  }
  let current_each_item = null;
  function index(_, i2) {
    return i2;
  }
  function pause_effects(state2, items, controlled_anchor, items_map) {
    var transitions = [];
    var length = items.length;
    for (var i2 = 0; i2 < length; i2++) {
      pause_children(items[i2].e, transitions, true);
    }
    var is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null;
    if (is_controlled) {
      var parent_node = (
        /** @type {Element} */
        /** @type {Element} */
        controlled_anchor.parentNode
      );
      clear_text_content(parent_node);
      parent_node.append(
        /** @type {Element} */
        controlled_anchor
      );
      items_map.clear();
      link(state2, items[0].prev, items[length - 1].next);
    }
    run_out_transitions(transitions, () => {
      for (var i3 = 0; i3 < length; i3++) {
        var item = items[i3];
        if (!is_controlled) {
          items_map.delete(item.k);
          link(state2, item.prev, item.next);
        }
        destroy_effect(item.e, !is_controlled);
      }
    });
  }
  function each(node, flags, get_collection, get_key, render_fn, fallback_fn = null) {
    var anchor = node;
    var state2 = { flags, items: /* @__PURE__ */ new Map(), first: null };
    var fallback = null;
    block(() => {
      var collection = get_collection();
      var array = is_array(collection) ? collection : collection == null ? [] : array_from(collection);
      var length = array.length;
      {
        reconcile(array, state2, anchor, render_fn, flags, get_key);
      }
      if (fallback_fn !== null) {
        if (length === 0) {
          if (fallback) {
            resume_effect(fallback);
          } else {
            fallback = branch(() => fallback_fn(anchor));
          }
        } else if (fallback !== null) {
          pause_effect(fallback, () => {
            fallback = null;
          });
        }
      }
    });
  }
  function reconcile(array, state2, anchor, render_fn, flags, get_key) {
    var length = array.length;
    var items = state2.items;
    var first = state2.first;
    var current = first;
    var seen;
    var prev = null;
    var matched = [];
    var stashed = [];
    var value;
    var key;
    var item;
    var i2;
    for (i2 = 0; i2 < length; i2 += 1) {
      value = array[i2];
      key = get_key(value, i2);
      item = items.get(key);
      if (item === void 0) {
        var child_anchor = current ? (
          /** @type {TemplateNode} */
          current.e.nodes_start
        ) : anchor;
        prev = create_item(
          child_anchor,
          state2,
          prev,
          prev === null ? state2.first : prev.next,
          value,
          key,
          i2,
          render_fn,
          flags
        );
        items.set(key, prev);
        matched = [];
        stashed = [];
        current = prev.next;
        continue;
      }
      {
        update_item(item, value, i2);
      }
      if ((item.e.f & INERT) !== 0) {
        resume_effect(item.e);
      }
      if (item !== current) {
        if (seen !== void 0 && seen.has(item)) {
          if (matched.length < stashed.length) {
            var start = stashed[0];
            var j;
            prev = start.prev;
            var a2 = matched[0];
            var b = matched[matched.length - 1];
            for (j = 0; j < matched.length; j += 1) {
              move(matched[j], start, anchor);
            }
            for (j = 0; j < stashed.length; j += 1) {
              seen.delete(stashed[j]);
            }
            link(state2, a2.prev, b.next);
            link(state2, prev, a2);
            link(state2, b, start);
            current = start;
            prev = b;
            i2 -= 1;
            matched = [];
            stashed = [];
          } else {
            seen.delete(item);
            move(item, current, anchor);
            link(state2, item.prev, item.next);
            link(state2, item, prev === null ? state2.first : prev.next);
            link(state2, prev, item);
            prev = item;
          }
          continue;
        }
        matched = [];
        stashed = [];
        while (current !== null && current.k !== key) {
          if ((current.e.f & INERT) === 0) {
            (seen ?? (seen = /* @__PURE__ */ new Set())).add(current);
          }
          stashed.push(current);
          current = current.next;
        }
        if (current === null) {
          continue;
        }
        item = current;
      }
      matched.push(item);
      prev = item;
      current = item.next;
    }
    if (current !== null || seen !== void 0) {
      var to_destroy = seen === void 0 ? [] : array_from(seen);
      while (current !== null) {
        if ((current.e.f & INERT) === 0) {
          to_destroy.push(current);
        }
        current = current.next;
      }
      var destroy_length = to_destroy.length;
      if (destroy_length > 0) {
        var controlled_anchor = null;
        pause_effects(state2, to_destroy, controlled_anchor, items);
      }
    }
    active_effect.first = state2.first && state2.first.e;
    active_effect.last = prev && prev.e;
  }
  function update_item(item, value, index2, type) {
    {
      set(item.v, value);
    }
    {
      item.i = index2;
    }
  }
  function create_item(anchor, state2, prev, next, value, key, index2, render_fn, flags) {
    var previous_each_item = current_each_item;
    try {
      var reactive = (flags & EACH_ITEM_REACTIVE) !== 0;
      var mutable = (flags & EACH_ITEM_IMMUTABLE) === 0;
      var v = reactive ? mutable ? /* @__PURE__ */ mutable_source(value) : source(value) : value;
      var i2 = (flags & EACH_INDEX_REACTIVE) === 0 ? index2 : source(index2);
      var item = {
        i: i2,
        v,
        k: key,
        a: null,
        // @ts-expect-error
        e: null,
        prev,
        next
      };
      current_each_item = item;
      item.e = branch(() => render_fn(anchor, v, i2), hydrating);
      item.e.prev = prev && prev.e;
      item.e.next = next && next.e;
      if (prev === null) {
        state2.first = item;
      } else {
        prev.next = item;
        prev.e.next = item.e;
      }
      if (next !== null) {
        next.prev = item;
        next.e.prev = item.e;
      }
      return item;
    } finally {
      current_each_item = previous_each_item;
    }
  }
  function move(item, next, anchor) {
    var end = item.next ? (
      /** @type {TemplateNode} */
      item.next.e.nodes_start
    ) : anchor;
    var dest = next ? (
      /** @type {TemplateNode} */
      next.e.nodes_start
    ) : anchor;
    var node = (
      /** @type {TemplateNode} */
      item.e.nodes_start
    );
    while (node !== end) {
      var next_node = (
        /** @type {TemplateNode} */
        /* @__PURE__ */ get_next_sibling(node)
      );
      dest.before(node);
      node = next_node;
    }
  }
  function link(state2, prev, next) {
    if (prev === null) {
      state2.first = next;
    } else {
      prev.next = next;
      prev.e.next = next && next.e;
    }
    if (next !== null) {
      next.prev = prev;
      next.e.prev = prev && prev.e;
    }
  }
  function action(dom, action2, get_value) {
    effect(() => {
      var payload = untrack(() => action2(dom, get_value == null ? void 0 : get_value()) || {});
      if (get_value && (payload == null ? void 0 : payload.update)) {
        var inited = false;
        var prev = (
          /** @type {any} */
          {}
        );
        render_effect(() => {
          var value = get_value();
          deep_read_state(value);
          if (inited && safe_not_equal(prev, value)) {
            prev = value;
            payload.update(value);
          }
        });
        inited = true;
      }
      if (payload == null ? void 0 : payload.destroy) {
        return () => (
          /** @type {Function} */
          payload.destroy()
        );
      }
    });
  }
  function set_attribute(element, attribute, value, skip_warning) {
    var attributes = element.__attributes ?? (element.__attributes = {});
    if (attributes[attribute] === (attributes[attribute] = value)) return;
    if (attribute === "loading") {
      element[LOADING_ATTR_SYMBOL] = value;
    }
    if (value == null) {
      element.removeAttribute(attribute);
    } else if (typeof value !== "string" && get_setters(element).includes(attribute)) {
      element[attribute] = value;
    } else {
      element.setAttribute(attribute, value);
    }
  }
  var setters_cache = /* @__PURE__ */ new Map();
  function get_setters(element) {
    var setters = setters_cache.get(element.nodeName);
    if (setters) return setters;
    setters_cache.set(element.nodeName, setters = []);
    var descriptors;
    var proto = get_prototype_of(element);
    while (proto.constructor.name !== "Element") {
      descriptors = get_descriptors(proto);
      for (var key in descriptors) {
        if (descriptors[key].set) {
          setters.push(key);
        }
      }
      proto = get_prototype_of(proto);
    }
    return setters;
  }
  function prop(props, key, flags, fallback) {
    var _a;
    var immutable = (flags & PROPS_IS_IMMUTABLE) !== 0;
    var runes = (flags & PROPS_IS_RUNES) !== 0;
    var bindable = (flags & PROPS_IS_BINDABLE) !== 0;
    var lazy = (flags & PROPS_IS_LAZY_INITIAL) !== 0;
    var prop_value = (
      /** @type {V} */
      props[key]
    );
    var setter = (_a = get_descriptor(props, key)) == null ? void 0 : _a.set;
    var fallback_value = (
      /** @type {V} */
      fallback
    );
    var fallback_dirty = true;
    var fallback_used = false;
    var get_fallback = () => {
      fallback_used = true;
      if (fallback_dirty) {
        fallback_dirty = false;
        if (lazy) {
          fallback_value = untrack(
            /** @type {() => V} */
            fallback
          );
        } else {
          fallback_value = /** @type {V} */
          fallback;
        }
      }
      return fallback_value;
    };
    if (prop_value === void 0 && fallback !== void 0) {
      if (setter && runes) {
        props_invalid_value();
      }
      prop_value = get_fallback();
      if (setter) setter(prop_value);
    }
    var getter;
    if (runes) {
      getter = () => {
        var value = (
          /** @type {V} */
          props[key]
        );
        if (value === void 0) return get_fallback();
        fallback_dirty = true;
        fallback_used = false;
        return value;
      };
    } else {
      var derived_getter = (immutable ? derived : derived_safe_equal)(
        () => (
          /** @type {V} */
          props[key]
        )
      );
      derived_getter.f |= LEGACY_DERIVED_PROP;
      getter = () => {
        var value = get(derived_getter);
        if (value !== void 0) fallback_value = /** @type {V} */
        void 0;
        return value === void 0 ? fallback_value : value;
      };
    }
    if ((flags & PROPS_IS_UPDATED) === 0) {
      return getter;
    }
    if (setter) {
      var legacy_parent = props.$$legacy;
      return function(value, mutation) {
        if (arguments.length > 0) {
          if (!runes || !mutation || legacy_parent) {
            setter(mutation ? getter() : value);
          }
          return value;
        } else {
          return getter();
        }
      };
    }
    var from_child = false;
    var inner_current_value = /* @__PURE__ */ mutable_source(prop_value);
    var current_value = /* @__PURE__ */ derived(() => {
      var parent_value = getter();
      var child_value = get(inner_current_value);
      if (from_child) {
        from_child = false;
        return child_value;
      }
      return inner_current_value.v = parent_value;
    });
    if (!immutable) current_value.equals = safe_equals;
    return function(value, mutation) {
      var current = get(current_value);
      if (arguments.length > 0) {
        const new_value = mutation ? get(current_value) : runes && bindable ? proxy(value) : value;
        if (!current_value.equals(new_value)) {
          from_child = true;
          set(inner_current_value, new_value);
          if (fallback_used && fallback_value !== void 0) {
            fallback_value = new_value;
          }
          get(current_value);
        }
        return value;
      }
      return current;
    };
  }
  const PUBLIC_VERSION = "5";
  if (typeof window !== "undefined")
    (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION);
  class KojiEditor {
    constructor(wrapper) {
      __publicField(this, "wrapper");
      __publicField(this, "editor");
      this.wrapper = wrapper;
      if (!this.wrapper.__vue__) {
        throw new Error("KojiEditor: wrapper is not a Vue component");
      }
      this.editor = this.wrapper.__vue__.editor;
    }
    insertAtCursor(textToInsert) {
      this.editor.insertOrReplace(textToInsert);
    }
    replaceSelection(replacer) {
      const { start, end } = this.editor.selection;
      const substr = this.text.substring(start, end);
      this.editor.insertOrReplace(replacer(substr));
    }
    markText(text) {
      const allChars = this.wrapper.querySelectorAll(".token .char");
      for (const char of allChars) {
        if (char.textContent === text) {
          char.classList.add("highlight-variant");
        }
      }
    }
    get text() {
      return this.editor.value;
    }
    onchange(callback) {
      this.editor.watch("requestedSrc", callback);
    }
    toggleClass(className) {
      this.wrapper.classList.toggle(className);
    }
  }
  class CodeMirrorEditor {
    constructor(codeMirror) {
      this.codeMirror = codeMirror;
      this.codeMirror = codeMirror;
    }
    insertAtCursor(textToInsert) {
      if (this.codeMirror.somethingSelected()) {
        this.replaceSelection((_) => textToInsert);
      } else {
        const cursor = this.codeMirror.getCursor();
        this.codeMirror.replaceRange(textToInsert, cursor);
      }
    }
    replaceSelection(replacer) {
      const selection = this.codeMirror.getSelection();
      const replacedText = replacer(selection);
      this.codeMirror.replaceSelection(replacedText);
    }
    markText(substr) {
      if (!substr || !this.text.includes(substr)) return;
      const occurrences = [];
      let index2 = this.text.indexOf(substr);
      while (index2 !== -1) {
        occurrences.push(index2);
        index2 = this.text.indexOf(substr, index2 + 1);
      }
      for (const index22 of occurrences) {
        const textPos = this.codeMirror.posFromIndex(index22);
        this.codeMirror.markText(
          textPos,
          this.codeMirror.posFromIndex(index22 + substr.length),
          {
            className: "highlight-variant"
          }
        );
      }
    }
    get text() {
      return this.codeMirror.getValue();
    }
    onchange(callback) {
      this.codeMirror.on("change", callback);
    }
    toggleClass(className) {
      this.codeMirror.getWrapperElement().classList.toggle(className);
    }
  }
  var e = { dragStart: true }, t = (e2, t2, n2) => Math.min(Math.max(e2, t2), n2), n = (e2) => "string" == typeof e2, r = ([e2, t2], n2, r2) => {
    const o2 = (e3, t3) => 0 === t3 ? 0 : Math.ceil(e3 / t3) * t3;
    return [o2(n2, e2), o2(r2, t2)];
  };
  var o = (e2, t2) => e2.some((e3) => t2.some((t3) => e3.contains(t3)));
  function i(e2, t2) {
    if (void 0 === e2) return;
    if (s(e2)) return e2.getBoundingClientRect();
    if ("object" == typeof e2) {
      const { top: t3 = 0, left: n3 = 0, right: r2 = 0, bottom: o2 = 0 } = e2;
      return { top: t3, right: window.innerWidth - r2, bottom: window.innerHeight - o2, left: n3 };
    }
    if ("parent" === e2) return t2.parentNode.getBoundingClientRect();
    const n2 = document.querySelector(e2);
    if (null === n2) throw new Error("The selector provided for bound doesn't exists in the document.");
    return n2.getBoundingClientRect();
  }
  var a = (e2, t2, n2) => e2.style.setProperty(t2, n2), s = (e2) => e2 instanceof HTMLElement, d = (d2, l = {}) => {
    let c, u, { bounds: f, axis: g = "both", gpuAcceleration: h = true, legacyTranslate: p = true, transform: m, applyUserSelectHack: w = true, disabled: y = false, ignoreMultitouch: b = false, recomputeBounds: v = e, grid: x, position: E, cancel: S, handle: A, defaultClass: C = "neodrag", defaultClassDragging: N = "neodrag-dragging", defaultClassDragged: D = "neodrag-dragged", defaultPosition: M = { x: 0, y: 0 }, onDragStart: B, onDrag: $, onDragEnd: R } = l, H = false, L = 0, T = 0, X = 0, Y = 0, q = 0, P = 0, { x: k, y: z } = E ? { x: (E == null ? void 0 : E.x) ?? 0, y: (E == null ? void 0 : E.y) ?? 0 } : M;
    V(k, z);
    let I, U, W, j, F, G = "", J = !!E;
    v = { ...e, ...v };
    let K = /* @__PURE__ */ new Set();
    const O = document.body.style, Q = d2.classList;
    function V(e2 = L, t2 = T) {
      if (!m) {
        if (p) {
          let n2 = `${+e2}px, ${+t2}px`;
          return a(d2, "transform", h ? `translate3d(${n2}, 0)` : `translate(${n2})`);
        }
        return a(d2, "translate", `${+e2}px ${+t2}px ${h ? "1px" : ""}`);
      }
      const r2 = m({ offsetX: e2, offsetY: t2, rootNode: d2 });
      n(r2) && a(d2, "transform", r2);
    }
    const Z = (e2, t2) => {
      const n2 = { offsetX: L, offsetY: T, rootNode: d2, currentNode: F };
      d2.dispatchEvent(new CustomEvent(e2, { detail: n2 })), t2 == null ? void 0 : t2(n2);
    };
    const _ = addEventListener;
    _("pointerdown", te, false), _("pointerup", ne, false), _("pointermove", re, false), a(d2, "touch-action", "none");
    const ee = () => {
      let e2 = d2.offsetWidth / U.width;
      return isNaN(e2) && (e2 = 1), e2;
    };
    function te(e2) {
      if (y) return;
      if (2 === e2.button) return;
      if (K.add(e2.pointerId), b && K.size > 1) return e2.preventDefault();
      if (v.dragStart && (I = i(f, d2)), n(A) && n(S) && A === S) throw new Error("`handle` selector can't be same as `cancel` selector");
      if (Q.add(C), W = function(e3, t3) {
        if (!e3) return [t3];
        if (s(e3)) return [e3];
        if (Array.isArray(e3)) return e3;
        const n2 = t3.querySelectorAll(e3);
        if (null === n2) throw new Error("Selector passed for `handle` option should be child of the element on which the action is applied");
        return Array.from(n2.values());
      }(A, d2), j = function(e3, t3) {
        if (!e3) return [];
        if (s(e3)) return [e3];
        if (Array.isArray(e3)) return e3;
        const n2 = t3.querySelectorAll(e3);
        if (null === n2) throw new Error("Selector passed for `cancel` option should be child of the element on which the action is applied");
        return Array.from(n2.values());
      }(S, d2), c = /(both|x)/.test(g), u = /(both|y)/.test(g), o(j, W)) throw new Error("Element being dragged can't be a child of the element on which `cancel` is applied");
      const t2 = e2.composedPath()[0];
      if (!W.some((e3) => {
        var _a;
        return e3.contains(t2) || ((_a = e3.shadowRoot) == null ? void 0 : _a.contains(t2));
      }) || o(j, [t2])) return;
      F = 1 === W.length ? d2 : W.find((e3) => e3.contains(t2)), H = true, U = d2.getBoundingClientRect(), w && (G = O.userSelect, O.userSelect = "none"), Z("neodrag:start", B);
      const { clientX: r2, clientY: a2 } = e2, l2 = ee();
      c && (X = r2 - k / l2), u && (Y = a2 - z / l2), I && (q = r2 - U.left, P = a2 - U.top);
    }
    function ne(e2) {
      K.delete(e2.pointerId), H && (v.dragEnd && (I = i(f, d2)), Q.remove(N), Q.add(D), w && (O.userSelect = G), Z("neodrag:end", R), c && (X = L), u && (Y = T), H = false);
    }
    function re(e2) {
      if (!H || b && K.size > 1) return;
      v.drag && (I = i(f, d2)), Q.add(N), e2.preventDefault(), U = d2.getBoundingClientRect();
      let n2 = e2.clientX, o2 = e2.clientY;
      const a2 = ee();
      if (I) {
        const e3 = { left: I.left + q, top: I.top + P, right: I.right + q - U.width, bottom: I.bottom + P - U.height };
        n2 = t(n2, e3.left, e3.right), o2 = t(o2, e3.top, e3.bottom);
      }
      if (Array.isArray(x)) {
        let [e3, t2] = x;
        if (isNaN(+e3) || e3 < 0) throw new Error("1st argument of `grid` must be a valid positive number");
        if (isNaN(+t2) || t2 < 0) throw new Error("2nd argument of `grid` must be a valid positive number");
        let i2 = n2 - X, s2 = o2 - Y;
        [i2, s2] = r([e3 / a2, t2 / a2], i2, s2), n2 = X + i2, o2 = Y + s2;
      }
      c && (L = Math.round((n2 - X) * a2)), u && (T = Math.round((o2 - Y) * a2)), k = L, z = T, Z("neodrag", $), V();
    }
    return { destroy: () => {
      const e2 = removeEventListener;
      e2("pointerdown", te, false), e2("pointerup", ne, false), e2("pointermove", re, false);
    }, update: (t2) => {
      var _a, _b;
      g = t2.axis || "both", y = t2.disabled ?? false, b = t2.ignoreMultitouch ?? false, A = t2.handle, f = t2.bounds, v = t2.recomputeBounds ?? e, S = t2.cancel, w = t2.applyUserSelectHack ?? true, x = t2.grid, h = t2.gpuAcceleration ?? true, p = t2.legacyTranslate ?? true, m = t2.transform;
      const n2 = Q.contains(D);
      Q.remove(C, D), C = t2.defaultClass ?? "neodrag", N = t2.defaultClassDragging ?? "neodrag-dragging", D = t2.defaultClassDragged ?? "neodrag-dragged", Q.add(C), n2 && Q.add(D), J && (k = L = ((_a = t2.position) == null ? void 0 : _a.x) ?? L, z = T = ((_b = t2.position) == null ? void 0 : _b.y) ?? T, V());
    } };
  };
  var on_click$1 = (_, editor, $$props) => {
    if (editor) {
      if ($$props.text instanceof Function) {
        editor.replaceSelection($$props.text);
      } else {
        editor.insertAtCursor($$props.text);
      }
    }
  };
  var root = /* @__PURE__ */ template(`<button class="svelte-1xqxm3o"> </button>`);
  function InsertButton($$anchor, $$props) {
    push($$props, true);
    let color = prop($$props, "color", 3, "black"), display = prop($$props, "display", 19, () => $$props.text instanceof Function ? $$props.text("…") : $$props.text);
    const editor = getContext("editor");
    var button = root();
    button.__click = [on_click$1, editor, $$props];
    var text_1 = child(button);
    template_effect(() => {
      set_attribute(button, "data-color", color());
      set_text(text_1, display());
    });
    append($$anchor, button);
    pop();
  }
  delegate(["click"]);
  var on_dblclick = (_, shown) => set(shown, false);
  var root_2 = /* @__PURE__ */ template(`<div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">頁注</h3> <!> <!> <!> <!> <!> <!> <!></div> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">音注</h3> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!></div> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">返点</h3> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!></div> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">註釋</h3> <!> <!> <!> <!> <!> <!> <!> <!></div>`, 1);
  var on_click = (_, $$props) => {
    $$props.editor.toggleClass("display-variant-highlight");
  };
  var root_1 = /* @__PURE__ */ template(`<div class="float-menu svelte-sa4v07"><button class="dragger svelte-sa4v07" title="ドラッグして移動、ダブルクリックして隠す">⠿</button> <div class="panels"><!> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">踊字</h3> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <h3 class="svelte-sa4v07">合字</h3> <!> <!> <!> <!> <!> <!> <!> <!></div> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07"><button class="svelte-sa4v07">異體</button></h3> <!></div> <div class="panel svelte-sa4v07"><h3 class="svelte-sa4v07">其他</h3> <!> <!></div></div></div>`);
  var on_click_1 = (_, shown) => set(shown, true);
  var root_4 = /* @__PURE__ */ template(`<button class="show-button svelte-sa4v07" title="翻刻ツールボックスを開く"><img alt="Honkoku" class="svelte-sa4v07"></button>`);
  function FloatMenu($$anchor, $$props) {
    push($$props, true);
    setContext("editor", $$props.editor);
    let shown = state(false);
    const VARIANTS = [
      {
        traditional: "卽",
        simplified: "即",
        color: "green"
      },
      {
        traditional: "旣",
        simplified: "既",
        color: "green"
      },
      {
        traditional: "槪",
        simplified: "概",
        color: "green"
      },
      {
        traditional: "者",
        simplified: "者",
        color: "red"
      },
      {
        traditional: "諸",
        simplified: "諸",
        color: "red"
      },
      {
        traditional: "著",
        simplified: "著",
        color: "red"
      },
      {
        traditional: "緖",
        simplified: "緒",
        color: "red"
      },
      {
        traditional: "眞",
        simplified: "真",
        color: "blue"
      },
      {
        traditional: "顚",
        simplified: "顛",
        color: "blue"
      },
      {
        traditional: "敎",
        simplified: "教",
        color: "blue"
      },
      {
        traditional: "神",
        simplified: "神",
        color: "blue"
      },
      {
        traditional: "硏",
        simplified: "研",
        color: "blue"
      }
    ];
    let text = state(proxy($$props.editor.text));
    $$props.editor.onchange(() => {
      set(text, proxy($$props.editor.text));
    });
    user_effect(() => {
      for (const { simplified } of VARIANTS) {
        if (get(text).includes(simplified)) {
          $$props.editor.markText(simplified);
        }
      }
    });
    var fragment = comment();
    var node = first_child(fragment);
    if_block(
      node,
      () => get(shown),
      ($$anchor2) => {
        var div = root_1();
        var button = child(div);
        button.__dblclick = [on_dblclick, shown];
        var div_1 = sibling(button, 2);
        var node_1 = child(div_1);
        if_block(node_1, () => $$props.platform === "honkoku", ($$anchor3) => {
          var fragment_1 = root_2();
          var div_2 = first_child(fragment_1);
          var node_2 = sibling(child(div_2), 2);
          InsertButton(node_2, { color: "green", text: "【左頁】" });
          var node_3 = sibling(node_2, 2);
          InsertButton(node_3, { color: "green", text: "【左丁】" });
          var node_4 = sibling(node_3, 2);
          InsertButton(node_4, { color: "green", text: "【右頁】" });
          var node_5 = sibling(node_4, 2);
          InsertButton(node_5, { color: "green", text: "【右丁】" });
          var node_6 = sibling(node_5, 2);
          InsertButton(node_6, { color: "red", text: "【上段】" });
          var node_7 = sibling(node_6, 2);
          InsertButton(node_7, { color: "red", text: "【中段】" });
          var node_8 = sibling(node_7, 2);
          InsertButton(node_8, { color: "red", text: "【下段】" });
          var div_3 = sibling(div_2, 2);
          var node_9 = sibling(child(div_3), 2);
          InsertButton(node_9, { color: "gray", text: (t2) => ` ̄${t2}` });
          var node_10 = sibling(node_9, 2);
          InsertButton(node_10, { color: "green", text: " ̄ハ", display: "ハ" });
          var node_11 = sibling(node_10, 2);
          InsertButton(node_11, { color: "green", text: " ̄モ", display: "モ" });
          var node_12 = sibling(node_11, 2);
          InsertButton(node_12, { color: "green", text: " ̄ヲ", display: "ヲ" });
          var node_13 = sibling(node_12, 2);
          InsertButton(node_13, { color: "green", text: " ̄ヲバ", display: "ヲバ" });
          var node_14 = sibling(node_13, 2);
          InsertButton(node_14, { color: "green", text: " ̄カ", display: "カ" });
          var node_15 = sibling(node_14, 2);
          InsertButton(node_15, { color: "green", text: " ̄ガ", display: "ガ" });
          var node_16 = sibling(node_15, 2);
          InsertButton(node_16, { color: "green", text: " ̄ノ", display: "ノ" });
          var node_17 = sibling(node_16, 2);
          InsertButton(node_17, { color: "green", text: " ̄ニ", display: "ニ" });
          var node_18 = sibling(node_17, 2);
          InsertButton(node_18, { color: "green", text: " ̄ヘ", display: "ヘ" });
          var node_19 = sibling(node_18, 2);
          InsertButton(node_19, { color: "green", text: " ̄ノミ", display: "ノミ" });
          var node_20 = sibling(node_19, 2);
          InsertButton(node_20, { color: "green", text: " ̄ト", display: "ト" });
          var node_21 = sibling(node_20, 2);
          InsertButton(node_21, { color: "blue", text: " ̄ス", display: "ス" });
          var node_22 = sibling(node_21, 2);
          InsertButton(node_22, { color: "blue", text: " ̄スル", display: "ス" });
          var node_23 = sibling(node_22, 2);
          InsertButton(node_23, { color: "blue", text: " ̄タル", display: "タル" });
          var node_24 = sibling(node_23, 2);
          InsertButton(node_24, { color: "blue", text: " ̄タリ", display: "タリ" });
          var node_25 = sibling(node_24, 2);
          InsertButton(node_25, { color: "blue", text: " ̄ナリ", display: "ナリ" });
          var node_26 = sibling(node_25, 2);
          InsertButton(node_26, { color: "blue", text: " ̄ナル", display: "ナル" });
          var node_27 = sibling(node_26, 2);
          InsertButton(node_27, { color: "red", text: " ̄レバ", display: "レバ" });
          var div_4 = sibling(div_3, 2);
          var node_28 = sibling(child(div_4), 2);
          InsertButton(node_28, { color: "red", text: "_レ", display: "レ" });
          var node_29 = sibling(node_28, 2);
          InsertButton(node_29, { color: "blue", text: "_一", display: "一" });
          var node_30 = sibling(node_29, 2);
          InsertButton(node_30, { color: "blue", text: "_二", display: "二" });
          var node_31 = sibling(node_30, 2);
          InsertButton(node_31, { color: "blue", text: "_三", display: "三" });
          var node_32 = sibling(node_31, 2);
          InsertButton(node_32, { color: "blue", text: "_四", display: "四" });
          var node_33 = sibling(node_32, 2);
          InsertButton(node_33, { color: "green", text: "_上", display: "上" });
          var node_34 = sibling(node_33, 2);
          InsertButton(node_34, { color: "green", text: "_中", display: "中" });
          var node_35 = sibling(node_34, 2);
          InsertButton(node_35, { color: "green", text: "_下", display: "下" });
          var node_36 = sibling(node_35, 2);
          InsertButton(node_36, { color: "pink", text: "_甲", display: "甲" });
          var node_37 = sibling(node_36, 2);
          InsertButton(node_37, { color: "pink", text: "_乙", display: "乙" });
          var node_38 = sibling(node_37, 2);
          InsertButton(node_38, { color: "pink", text: "_丙", display: "丙" });
          var node_39 = sibling(node_38, 2);
          InsertButton(node_39, { color: "pink", text: "_丁", display: "丁" });
          var node_40 = sibling(node_39, 2);
          InsertButton(node_40, { color: "pink", text: "_天", display: "天" });
          var node_41 = sibling(node_40, 2);
          InsertButton(node_41, { color: "pink", text: "_地", display: "地" });
          var node_42 = sibling(node_41, 2);
          InsertButton(node_42, { color: "pink", text: "_人", display: "人" });
          var node_43 = sibling(node_42, 2);
          InsertButton(node_43, { color: "red", text: "_一レ", display: "一レ" });
          var node_44 = sibling(node_43, 2);
          InsertButton(node_44, { color: "red", text: "_二レ", display: "二レ" });
          var node_45 = sibling(node_44, 2);
          InsertButton(node_45, { color: "red", text: "_三レ", display: "三レ" });
          var node_46 = sibling(node_45, 2);
          InsertButton(node_46, { color: "red", text: "_四レ", display: "四レ" });
          var node_47 = sibling(node_46, 2);
          InsertButton(node_47, { color: "red", text: "_上レ", display: "上レ" });
          var div_5 = sibling(div_4, 2);
          var node_48 = sibling(child(div_5), 2);
          InsertButton(node_48, {
            color: "pink",
            text: (t2) => `/${t2}()`,
            display: "ルビー"
          });
          var node_49 = sibling(node_48, 2);
          InsertButton(node_49, { color: "green", text: "。" });
          var node_50 = sibling(node_49, 2);
          InsertButton(node_50, { color: "green", text: "-" });
          var node_51 = sibling(node_50, 2);
          InsertButton(node_51, { color: "green", text: " ", display: "␣" });
          var node_52 = sibling(node_51, 2);
          InsertButton(node_52, { color: "green", text: " ", display: "▢" });
          var node_53 = sibling(node_52, 2);
          InsertButton(node_53, { color: "green", text: "◯" });
          var node_54 = sibling(node_53, 2);
          InsertButton(node_54, {
            color: "blue",
            text: (t2) => `《割書:${t2}|》`,
            display: "割注"
          });
          var node_55 = sibling(node_54, 2);
          InsertButton(node_55, {
            color: "red",
            text: (t2) => `【${t2}】`,
            display: "注釈"
          });
          append($$anchor3, fragment_1);
        });
        var div_6 = sibling(node_1, 2);
        var node_56 = sibling(child(div_6), 2);
        InsertButton(node_56, { color: "green", text: "々" });
        var node_57 = sibling(node_56, 2);
        InsertButton(node_57, { color: "green", text: "ゝ" });
        var node_58 = sibling(node_57, 2);
        InsertButton(node_58, { color: "green", text: "ゞ" });
        var node_59 = sibling(node_58, 2);
        InsertButton(node_59, { color: "green", text: "ヽ" });
        var node_60 = sibling(node_59, 2);
        InsertButton(node_60, { color: "green", text: "ヾ" });
        var node_61 = sibling(node_60, 2);
        InsertButton(node_61, { color: "green", text: "〻" });
        var node_62 = sibling(node_61, 2);
        InsertButton(node_62, { color: "green", text: "〳" });
        var node_63 = sibling(node_62, 2);
        InsertButton(node_63, { color: "green", text: "〴" });
        var node_64 = sibling(node_63, 2);
        InsertButton(node_64, { color: "green", text: "〵" });
        var node_65 = sibling(node_64, 2);
        InsertButton(node_65, { color: "green", text: "〱" });
        var node_66 = sibling(node_65, 2);
        InsertButton(node_66, { color: "green", text: "〲" });
        var node_67 = sibling(node_66, 4);
        InsertButton(node_67, { color: "green", text: "〆" });
        var node_68 = sibling(node_67, 2);
        InsertButton(node_68, { color: "green", text: " ͡と" });
        var node_69 = sibling(node_68, 2);
        InsertButton(node_69, { color: "green", text: "ゟ" });
        var node_70 = sibling(node_69, 2);
        InsertButton(node_70, { color: "green", text: "𬼂" });
        var node_71 = sibling(node_70, 2);
        InsertButton(node_71, { color: "green", text: "𬻿" });
        var node_72 = sibling(node_71, 2);
        InsertButton(node_72, { color: "green", text: "ヿ" });
        var node_73 = sibling(node_72, 2);
        InsertButton(node_73, { color: "green", text: "𪜈" });
        var node_74 = sibling(node_73, 2);
        InsertButton(node_74, { color: "green", text: "𬼀" });
        var div_7 = sibling(div_6, 2);
        var h3 = child(div_7);
        var button_1 = child(h3);
        button_1.__click = [on_click, $$props];
        var node_75 = sibling(h3, 2);
        each(node_75, 17, () => VARIANTS, index, ($$anchor3, $$item) => {
          let traditional = () => get($$item).traditional;
          let simplified = () => get($$item).simplified;
          let color = () => get($$item).color;
          var display = /* @__PURE__ */ derived(() => `${traditional()}=${simplified()}`);
          InsertButton($$anchor3, {
            get color() {
              return color();
            },
            get text() {
              return traditional();
            },
            get display() {
              return get(display);
            }
          });
        });
        var div_8 = sibling(div_7, 2);
        var node_76 = sibling(child(div_8), 2);
        InsertButton(node_76, { color: "green", display: "◌゙", text: "゙" });
        var node_77 = sibling(node_76, 2);
        InsertButton(node_77, { color: "green", display: "◌゚", text: "゚" });
        action(div, ($$node, $$action_arg) => d($$node, $$action_arg), () => ({ handle: ".dragger", bounds: "body" }));
        append($$anchor2, div);
      },
      ($$anchor2) => {
        var button_2 = root_4();
        button_2.__click = [on_click_1, shown];
        var img = child(button_2);
        set_attribute(img, "src", "data:image/png;base64,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");
        append($$anchor2, button_2);
      }
    );
    append($$anchor, fragment);
    pop();
  }
  delegate(["dblclick", "click"]);
  function App($$anchor, $$props) {
    push($$props, true);
    const url = new URL(window.location.href);
    const platform = (() => {
      if (url.host.includes("honkoku.org")) return "honkoku";
      if (url.host.includes("wikisource.org")) return "wikisource";
      return void 0;
    })();
    console.info("[honkoku-toolbox] platform: ", platform);
    let editor = state(void 0);
    const MAX_RETRIES = 10;
    setTimeout(
      () => {
        if (!platform) {
          throw new Error("[honkoku-toolbox] Unsupported platform");
        }
        if (platform === "honkoku") {
          let kojiWrapper;
          const wrappers = document.getElementsByClassName("editor-wrapper");
          if (wrappers.length > 0) {
            kojiWrapper = wrappers[0];
          }
          if (!kojiWrapper) {
            let retries = 0;
            const interval = setInterval(
              () => {
                const wrappers2 = document.getElementsByClassName("editor-wrapper");
                if (wrappers2.length > 0) {
                  kojiWrapper = wrappers2[0];
                  set(editor, proxy(new KojiEditor(kojiWrapper)));
                  clearInterval(interval);
                }
                if (retries > MAX_RETRIES) {
                  clearInterval(interval);
                }
                retries += 1;
              },
              500
            );
          } else {
            set(editor, proxy(new KojiEditor(kojiWrapper)));
          }
          return;
        }
        if (platform === "wikisource") {
          let cm;
          const codeMirrorDivs = document.getElementsByClassName("CodeMirror");
          if (codeMirrorDivs.length > 0) {
            const codeMirror = codeMirrorDivs[0];
            cm = codeMirror.CodeMirror;
            set(editor, proxy(new CodeMirrorEditor(cm)));
          } else {
            const interval = setInterval(
              () => {
                const codeMirrorDivs2 = document.getElementsByClassName("CodeMirror");
                if (codeMirrorDivs2.length > 0) {
                  const codeMirror = codeMirrorDivs2[0];
                  cm = codeMirror.CodeMirror;
                  set(editor, proxy(new CodeMirrorEditor(cm)));
                  clearInterval(interval);
                }
              },
              500
            );
          }
        }
      },
      500
    );
    var fragment = comment();
    var node = first_child(fragment);
    if_block(node, () => get(editor) && platform, ($$anchor2) => {
      FloatMenu($$anchor2, {
        get editor() {
          return get(editor);
        },
        platform
      });
    });
    append($$anchor, fragment);
    pop();
  }
  mount(App, {
    target: (() => {
      const app2 = document.createElement("div");
      document.body.append(app2);
      return app2;
    })()
  });

})();