S1 Reaction 帖子回应服务(离线版)

用麻将脸回应泥潭吧!

// ==UserScript==
// @name         S1 Reaction 帖子回应服务(离线版)
// @namespace    https://github.com/rkanuj/s1-reaction
// @version      0.1.1
// @author       rkanuj
// @description  用麻将脸回应泥潭吧!
// @license      MIT
// @icon         https://bbs.saraba1st.com/favicon.ico
// @match        https://*.saraba1st.com/2b/thread-*
// @match        https://*.saraba1st.com/2b/forum.php?*tid=*
// @match        https://*.saraba1st.com/2b/space-*
// @match        https://*.stage1st.com/2b/thread-*
// @match        https://*.stage1st.com/2b/forum.php?*tid=*
// @match        https://*.stage1st.com/2b/space-*
// @grant        GM_addStyle
// ==/UserScript==

(e=>{if(typeof GM_addStyle=="function"){GM_addStyle(e);return}const t=document.createElement("style");t.textContent=e,document.head.append(t)})(" .login.svelte-18l8ze5 .re-login-btn.svelte-18l8ze5.svelte-18l8ze5{width:240px}.login.svelte-18l8ze5 .re-login-btn.svelte-18l8ze5.svelte-18l8ze5:not(:last-child){margin-bottom:8px}.login.svelte-18l8ze5 .login-form.svelte-18l8ze5.svelte-18l8ze5{display:flex;flex-direction:column;width:240px}.login.svelte-18l8ze5 .login-form.svelte-18l8ze5>.svelte-18l8ze5:not(:last-child){margin-bottom:8px}.login.svelte-18l8ze5 .login-form.svelte-18l8ze5>input.svelte-18l8ze5,.login.svelte-18l8ze5 .login-form select.svelte-18l8ze5.svelte-18l8ze5{padding:4px;border:1px solid lightgray}.login.svelte-18l8ze5 .login-form .tips.svelte-18l8ze5.svelte-18l8ze5{font-size:.8em;color:#696969}.login.svelte-18l8ze5 .login-form .error-message.svelte-18l8ze5.svelte-18l8ze5{font-size:.8em;color:red}.modal-dialog.svelte-6la91r.svelte-6la91r{position:fixed;z-index:1001;top:50%;left:50%;overflow:auto;margin:0;padding:0;transform:translate(-50%,-50%);border:none;border-radius:8px;box-shadow:0 0 20px #696969}.modal-dialog.only-login-form.svelte-6la91r.svelte-6la91r{width:270px}.modal-dialog.svelte-6la91r.svelte-6la91r:not(.only-login-form){width:500px;height:80vh;max-height:580px}.modal-dialog.offline.svelte-6la91r.svelte-6la91r{max-height:350px}.modal-dialog.svelte-6la91r .dialog-header.svelte-6la91r{position:sticky;top:0;align-content:center;height:40px;padding:0 12px;border-bottom:1px solid lightgray;background-color:#fff}.modal-dialog.svelte-6la91r .dialog-header .dialog-title.svelte-6la91r{font-size:16px}.modal-dialog.svelte-6la91r .dialog-header .close-btn.svelte-6la91r{padding:0;cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;font-size:24px;position:absolute;top:0;right:16px;transition:color .3s ease;color:gray}.modal-dialog.svelte-6la91r .dialog-header .close-btn.svelte-6la91r:hover{color:#000}.modal-dialog.svelte-6la91r .dialog-content.svelte-6la91r{display:flex;align-items:center;flex-direction:column;padding:12px}.modal-backdrop.svelte-6la91r.svelte-6la91r{position:fixed;z-index:1000;top:0;left:0;width:100%;height:100%;background:#0000004d}.smiles.svelte-5twxn6 .remark.svelte-5twxn6{width:100%;margin-bottom:8px}.smiles.svelte-5twxn6 .smiles-type-btn.svelte-5twxn6{cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;padding:4px;border-top:1px dashed #022c80;border-right:1px dashed #022c80;background-color:buttonface}.smiles.svelte-5twxn6 .smiles-type-btn.svelte-5twxn6:first-child{border-left:1px dashed #022c80}.smiles.svelte-5twxn6 .smiles-type-btn.active.svelte-5twxn6{background-color:#fff}.smiles.svelte-5twxn6 .smiles-table.svelte-5twxn6{overflow:auto;width:440px;height:200px;border:1px dashed #022c80}.smiles.svelte-5twxn6 .smiles-table td.svelte-5twxn6{padding:2px}.smiles.svelte-5twxn6 .smiles-table td img.svelte-5twxn6{width:32px}.user-info.svelte-12lgkya.svelte-12lgkya.svelte-12lgkya{font-size:14px;width:100%}.user-info.svelte-12lgkya .user.svelte-12lgkya.svelte-12lgkya:not(:last-child){margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #022c80}.user-info.svelte-12lgkya .user.svelte-12lgkya>.svelte-12lgkya:not(:last-child){margin-bottom:8px}.user-info.svelte-12lgkya .user .remove-user-btn.svelte-12lgkya.svelte-12lgkya{padding:0;cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;font-weight:700;transition:color .3s ease;color:#ff4500}.user-info.svelte-12lgkya .user .remove-user-btn.svelte-12lgkya.svelte-12lgkya:hover{color:#8b0000}.user-info.svelte-12lgkya .user .token.svelte-12lgkya.svelte-12lgkya{color:#696969}.user-info.svelte-12lgkya .user .date.svelte-12lgkya.svelte-12lgkya{display:inline}.user-info.svelte-12lgkya .user .date.svelte-12lgkya>.svelte-12lgkya{color:green}.user-info.svelte-12lgkya .user .date.svelte-12lgkya>*.expired.svelte-12lgkya{color:red}.user-info.svelte-12lgkya .tips.svelte-12lgkya.svelte-12lgkya{font-size:.8em;color:#696969}.modal.svelte-81eduz .dialog-content>*:not(:last-child){margin-bottom:12px}.reacts.svelte-1kvsz55.svelte-1kvsz55{font-size:14px;display:grid;height:62px;padding:4px;border:1px dashed #022c80;grid-template-columns:repeat(auto-fill,minmax(56px,1fr))}.reacts.offline.svelte-1kvsz55.svelte-1kvsz55{display:flex;flex-wrap:wrap}.reacts.offline.svelte-1kvsz55 .react.svelte-1kvsz55{flex-direction:row}.reacts.svelte-1kvsz55 .react.svelte-1kvsz55{position:relative;display:flex;align-items:center;flex-direction:column;justify-content:space-between;padding:4px}.reacts.svelte-1kvsz55 .react img.svelte-1kvsz55{width:32px}table.plhin .po.hin{border-top:none}.post-reacts.svelte-1hkey2g .action-btn.svelte-1hkey2g{padding:0;cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;font-weight:700;position:absolute;top:0;right:0;transition:color .3s ease}.post-reacts.svelte-1hkey2g .action-btn.remove-react-btn.svelte-1hkey2g{color:#ff4500}.post-reacts.svelte-1hkey2g .action-btn.remove-react-btn.svelte-1hkey2g:hover{color:#8b0000}.post-reacts.svelte-1hkey2g .action-btn.plus-react-btn.svelte-1hkey2g{color:#32cd32}.post-reacts.svelte-1hkey2g .action-btn.plus-react-btn.svelte-1hkey2g:hover{color:#006400}.post-reacts.svelte-1hkey2g .add-react.svelte-1hkey2g{position:relative;align-content:center;padding:8px}.post-reacts.svelte-1hkey2g .add-react .add-react-btn.svelte-1hkey2g{cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;width:100%;padding:4px;transition:background-color .3s ease;border-radius:8px;background-color:#d1d9c1}.post-reacts.svelte-1hkey2g .add-react .add-react-btn.svelte-1hkey2g:hover{background-color:#c2cdb5}.post-reacts.svelte-1hkey2g .add-react .add-react-btn.svelte-1hkey2g:active{background-color:#c3c5ae}.user-reacts.svelte-1mwqdh0.svelte-1mwqdh0{margin-top:8px;border-top:1px dashed #022c80}.user-reacts.svelte-1mwqdh0 .action-btn.svelte-1mwqdh0{padding:0;cursor:pointer;border:none;background:none;font-size:12px;font-family:sans-serif;font-weight:700;position:absolute;top:0;right:0;transition:color .3s ease}.user-reacts.svelte-1mwqdh0 .action-btn.remove-react-btn.svelte-1mwqdh0{color:#ff4500}.user-reacts.svelte-1mwqdh0 .action-btn.remove-react-btn.svelte-1mwqdh0:hover{color:#8b0000}.user-reacts.svelte-1mwqdh0 .mbn.svelte-1mwqdh0{margin-top:8px;margin-bottom:8px!important} ");

(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);
    return value;
  };
  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";
  }
  let src_url_equal_anchor;
  function src_url_equal(element_src, url) {
    if (element_src === url)
      return true;
    if (!src_url_equal_anchor) {
      src_url_equal_anchor = document.createElement("a");
    }
    src_url_equal_anchor.href = url;
    return element_src === src_url_equal_anchor.href;
  }
  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 set_store_value(store, ret, value) {
    store.set(value);
    return ret;
  }
  function append(target, node) {
    target.appendChild(node);
  }
  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 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 to_number(value) {
    return value === "" ? null : +value;
  }
  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 select_value(select) {
    const selected_option = select.querySelector(":checked");
    return selected_option && selected_option.__value;
  }
  function toggle_class(element2, name, toggle) {
    element2.classList.toggle(name, !!toggle);
  }
  let current_component;
  function set_current_component(component) {
    current_component = component;
  }
  const dirty_components = [];
  const binding_callbacks = [];
  let render_callbacks = [];
  const flush_callbacks = [];
  const resolved_promise = /* @__PURE__ */ Promise.resolve();
  let 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);
  }
  const seen_callbacks = /* @__PURE__ */ new Set();
  let 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 targets = [];
    render_callbacks.forEach((c) => fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c));
    targets.forEach((c) => c());
    render_callbacks = filtered;
  }
  const outroing = /* @__PURE__ */ new Set();
  let 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();
    }
  }
  function ensure_array_like(array_like_or_iterator) {
    return (array_like_or_iterator == null ? void 0 : array_like_or_iterator.length) !== void 0 ? array_like_or_iterator : Array.from(array_like_or_iterator);
  }
  function destroy_block(block, lookup) {
    block.d(1);
    lookup.delete(block.key);
  }
  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_block2, 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_block2(key, child_ctx);
        block.c();
      } else {
        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;
  }
  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, instance2, create_fragment2, not_equal, props, append_styles = 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_styles && append_styles($$.root);
    let ready = false;
    $$.ctx = instance2 ? instance2(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_fragment2 ? create_fragment2($$.ctx) : false;
    if (options.target) {
      if (options.hydrate) {
        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);
      flush();
    }
    set_current_component(parent_component);
  }
  class SvelteComponent {
    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<keyof Events, string>} 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>} props
     * @returns {void}
     */
    $set(props) {
      if (this.$$set && !is_empty(props)) {
        this.$$.skip_bound = true;
        this.$$set(props);
        this.$$.skip_bound = false;
      }
    }
  }
  const PUBLIC_VERSION = "4";
  if (typeof window !== "undefined")
    (window.__svelte || (window.__svelte = { v: /* @__PURE__ */ new Set() })).v.add(PUBLIC_VERSION);
  const BASE_PATH = "http://localhost".replace(/\/+$/, "");
  class Configuration {
    constructor(configuration = {}) {
      this.configuration = configuration;
    }
    set config(configuration) {
      this.configuration = configuration;
    }
    get basePath() {
      return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH;
    }
    get fetchApi() {
      return this.configuration.fetchApi;
    }
    get middleware() {
      return this.configuration.middleware || [];
    }
    get queryParamsStringify() {
      return this.configuration.queryParamsStringify || querystring;
    }
    get username() {
      return this.configuration.username;
    }
    get password() {
      return this.configuration.password;
    }
    get apiKey() {
      const apiKey = this.configuration.apiKey;
      if (apiKey) {
        return typeof apiKey === "function" ? apiKey : () => apiKey;
      }
      return void 0;
    }
    get accessToken() {
      const accessToken = this.configuration.accessToken;
      if (accessToken) {
        return typeof accessToken === "function" ? accessToken : async () => accessToken;
      }
      return void 0;
    }
    get headers() {
      return this.configuration.headers;
    }
    get credentials() {
      return this.configuration.credentials;
    }
  }
  const DefaultConfig = new Configuration();
  const _BaseAPI = class _BaseAPI {
    constructor(configuration = DefaultConfig) {
      __publicField(this, "middleware");
      __publicField(this, "fetchApi", async (url, init2) => {
        let fetchParams = { url, init: init2 };
        for (const middleware of this.middleware) {
          if (middleware.pre) {
            fetchParams = await middleware.pre({
              fetch: this.fetchApi,
              ...fetchParams
            }) || fetchParams;
          }
        }
        let response = void 0;
        try {
          response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init);
        } catch (e) {
          for (const middleware of this.middleware) {
            if (middleware.onError) {
              response = await middleware.onError({
                fetch: this.fetchApi,
                url: fetchParams.url,
                init: fetchParams.init,
                error: e,
                response: response ? response.clone() : void 0
              }) || response;
            }
          }
          if (response === void 0) {
            if (e instanceof Error) {
              throw new FetchError(e, "The request failed and the interceptors did not return an alternative response");
            } else {
              throw e;
            }
          }
        }
        for (const middleware of this.middleware) {
          if (middleware.post) {
            response = await middleware.post({
              fetch: this.fetchApi,
              url: fetchParams.url,
              init: fetchParams.init,
              response: response.clone()
            }) || response;
          }
        }
        return response;
      });
      this.configuration = configuration;
      this.middleware = configuration.middleware;
    }
    withMiddleware(...middlewares) {
      const next = this.clone();
      next.middleware = next.middleware.concat(...middlewares);
      return next;
    }
    withPreMiddleware(...preMiddlewares) {
      const middlewares = preMiddlewares.map((pre) => ({ pre }));
      return this.withMiddleware(...middlewares);
    }
    withPostMiddleware(...postMiddlewares) {
      const middlewares = postMiddlewares.map((post) => ({ post }));
      return this.withMiddleware(...middlewares);
    }
    /**
     * Check if the given MIME is a JSON MIME.
     * JSON MIME examples:
     *   application/json
     *   application/json; charset=UTF8
     *   APPLICATION/JSON
     *   application/vnd.company+json
     * @param mime - MIME (Multipurpose Internet Mail Extensions)
     * @return True if the given MIME is JSON, false otherwise.
     */
    isJsonMime(mime) {
      if (!mime) {
        return false;
      }
      return _BaseAPI.jsonRegex.test(mime);
    }
    async request(context, initOverrides) {
      const { url, init: init2 } = await this.createFetchParams(context, initOverrides);
      const response = await this.fetchApi(url, init2);
      if (response && (response.status >= 200 && response.status < 300)) {
        return response;
      }
      throw new ResponseError(response, "Response returned an error code");
    }
    async createFetchParams(context, initOverrides) {
      let url = this.configuration.basePath + context.path;
      if (context.query !== void 0 && Object.keys(context.query).length !== 0) {
        url += "?" + this.configuration.queryParamsStringify(context.query);
      }
      const headers = Object.assign({}, this.configuration.headers, context.headers);
      Object.keys(headers).forEach((key) => headers[key] === void 0 ? delete headers[key] : {});
      const initOverrideFn = typeof initOverrides === "function" ? initOverrides : async () => initOverrides;
      const initParams = {
        method: context.method,
        headers,
        body: context.body,
        credentials: this.configuration.credentials
      };
      const overriddenInit = {
        ...initParams,
        ...await initOverrideFn({
          init: initParams,
          context
        })
      };
      let body;
      if (isFormData(overriddenInit.body) || overriddenInit.body instanceof URLSearchParams || isBlob(overriddenInit.body)) {
        body = overriddenInit.body;
      } else if (this.isJsonMime(headers["Content-Type"])) {
        body = JSON.stringify(overriddenInit.body);
      } else {
        body = overriddenInit.body;
      }
      const init2 = {
        ...overriddenInit,
        body
      };
      return { url, init: init2 };
    }
    /**
     * Create a shallow clone of `this` by constructing a new instance
     * and then shallow cloning data members.
     */
    clone() {
      const constructor = this.constructor;
      const next = new constructor(this.configuration);
      next.middleware = this.middleware.slice();
      return next;
    }
  };
  __publicField(_BaseAPI, "jsonRegex", new RegExp("^(:?application/json|[^;/ 	]+/[^;/ 	]+[+]json)[ 	]*(:?;.*)?$", "i"));
  let BaseAPI = _BaseAPI;
  function isBlob(value) {
    return typeof Blob !== "undefined" && value instanceof Blob;
  }
  function isFormData(value) {
    return typeof FormData !== "undefined" && value instanceof FormData;
  }
  class ResponseError extends Error {
    constructor(response, msg) {
      super(msg);
      __publicField(this, "name", "ResponseError");
      this.response = response;
    }
  }
  class FetchError extends Error {
    constructor(cause, msg) {
      super(msg);
      __publicField(this, "name", "FetchError");
      this.cause = cause;
    }
  }
  function querystring(params, prefix = "") {
    return Object.keys(params).map((key) => querystringSingleKey(key, params[key], prefix)).filter((part) => part.length > 0).join("&");
  }
  function querystringSingleKey(key, value, keyPrefix = "") {
    const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key);
    if (value instanceof Array) {
      const multiValue = value.map((singleValue) => encodeURIComponent(String(singleValue))).join(`&${encodeURIComponent(fullKey)}=`);
      return `${encodeURIComponent(fullKey)}=${multiValue}`;
    }
    if (value instanceof Set) {
      const valueAsArray = Array.from(value);
      return querystringSingleKey(key, valueAsArray, keyPrefix);
    }
    if (value instanceof Date) {
      return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`;
    }
    if (value instanceof Object) {
      return querystring(value, fullKey);
    }
    return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`;
  }
  class JSONApiResponse {
    constructor(raw, transformer = (jsonValue) => jsonValue) {
      this.raw = raw;
      this.transformer = transformer;
    }
    async value() {
      return this.transformer(await this.raw.json());
    }
  }
  const 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 };
  }
  class LocalStorage {
    static setUserInfoDict(value) {
      this.setItem("users", value);
    }
    static getUserInfoDict() {
      return this.getItem("users");
    }
    static setSelectedUID(value) {
      this.setItem("users.selected", value);
    }
    static getSelectedUID() {
      return this.getItem("users.selected");
    }
    static setSmilesList(value) {
      this.setItem("smiles", value);
    }
    static getSmilesList() {
      return this.getItem("smiles");
    }
    static setReactList(value) {
      this.setItem("reacts", value);
    }
    static getReactList() {
      return this.getItem("reacts");
    }
    static setItem(key, value) {
      localStorage.setItem(`${this.prefix}.${key}`, JSON.stringify(value));
    }
    static getItem(key) {
      const item = localStorage.getItem(`${this.prefix}.${key}`);
      if (!item) {
        return null;
      }
      return JSON.parse(item);
    }
  }
  __publicField(LocalStorage, "prefix", "s1-reaction");
  const userInfoDict = writable(LocalStorage.getUserInfoDict() || {});
  userInfoDict.subscribe((value) => {
    LocalStorage.setUserInfoDict(value);
  });
  const userInfoList = readable([], (set) => {
    return userInfoDict.subscribe((value) => {
      set(Object.values(value).toSorted((a, b) => a.uid - b.uid));
    });
  });
  const needLogin = readable(true, (set) => {
    return userInfoList.subscribe((value) => {
      set(value.length === 0);
    });
  });
  const selectedUID = writable(LocalStorage.getSelectedUID());
  selectedUID.subscribe((value) => {
    LocalStorage.setSelectedUID(value);
  });
  const selectedUserInfo = readable(null, (set) => {
    return selectedUID.subscribe((value) => {
      if (value === null) {
        set(null);
        return;
      }
      const selected = get_store_value(userInfoDict)[value];
      set(selected);
    });
  });
  const reactsDict = writable({});
  const reactsOfflineDict = writable({});
  const smilesList = writable(LocalStorage.getSmilesList() || []);
  smilesList.subscribe((value) => {
    LocalStorage.setSmilesList(value);
  });
  const smilesTable = readable([], (set) => {
    return smilesList.subscribe((value) => {
      const table = value.map((smiles) => {
        const list = [];
        smiles.list.forEach((item, i) => {
          if (i % 12 === 0) {
            list.push([]);
          }
          list[list.length - 1].push(item);
        });
        return {
          typeid: smiles.typeid,
          type: smiles.type,
          list
        };
      });
      set(table);
    });
  });
  const smileyDict = readable({}, (set) => {
    return smilesList.subscribe((value) => {
      const dict = {};
      value.map((item) => {
        return item.list;
      }).flat().forEach((item) => {
        dict[item.code] = item.url;
      });
      set(dict);
    });
  });
  const showModal = writable(false);
  const selectedPost = writable(null);
  function currentTimestamp(date = /* @__PURE__ */ new Date()) {
    return Math.floor(date.getTime() / 1e3);
  }
  function formatTimestamp(timestamp = currentTimestamp(), toLocal = false) {
    const date = new Date(timestamp * 1e3);
    if (toLocal) {
      return date.toLocaleString();
    }
    return date.toISOString();
  }
  function responseErrorHandle(e) {
    const response = (() => {
      if (e instanceof Response) {
        return e;
      }
      if (e.response && e.response instanceof Response) {
        return e.response;
      }
    })();
    if (response) {
      return response.json();
    }
    return {
      success: false,
      message: e instanceof Error ? e.message : String(e)
    };
  }
  function deepCopy(value) {
    return JSON.parse(JSON.stringify(value));
  }
  class ReactApiOffline {
    constructor() {
      __publicField(this, "dataSource", LocalStorage.getReactList() || []);
    }
    saveDataSource(dataSource) {
      this.dataSource = dataSource;
      LocalStorage.setReactList(dataSource);
    }
    postQueryPostReacts(requestData) {
      const { pids } = requestData;
      const dataSource = deepCopy(this.dataSource);
      const result = {};
      for (let i = 0; i < dataSource.length; i++) {
        const dataItem = dataSource[i];
        if (!pids.includes(dataItem.pid)) {
          continue;
        }
        result[dataItem.pid] = {
          pid: dataItem.pid,
          react: {
            smiley: dataItem.smiley,
            remark: dataItem.remark,
            pid: dataItem.pid,
            uid2: dataItem.uid2
          }
        };
      }
      return Object.values(result);
    }
    postQueryUserReacts(requestData) {
      const { uid2 } = requestData;
      const dataSource = deepCopy(this.dataSource);
      const result = [];
      for (let i = 0; i < dataSource.length; i++) {
        const dataItem = dataSource[i];
        if (dataItem.uid2 === uid2) {
          result.push({
            smiley: dataItem.smiley,
            remark: dataItem.remark,
            pid: dataItem.pid,
            uid2: dataItem.uid2
          });
        }
      }
      return result;
    }
    postUpdatePostReact(requestData) {
      const { pid, uid2, smiley, remark } = requestData;
      const dataSource = deepCopy(this.dataSource);
      const index = dataSource.findIndex((item) => {
        return item.pid === pid;
      });
      if (index !== -1) {
        dataSource.splice(index, 1);
      }
      if (smiley !== null) {
        dataSource.push({
          pid,
          uid2,
          smiley,
          remark,
          created_at: formatTimestamp()
        });
      }
      this.saveDataSource(dataSource);
      return this.postQueryPostReacts({
        pids: [pid]
      });
    }
  }
  function extractId(str, regexp) {
    var _a;
    const idStr = ((_a = str.match(regexp)) == null ? void 0 : _a[1]) ?? "";
    if (!idStr) {
      return null;
    }
    const id = parseInt(idStr, 10);
    if (isNaN(id)) {
      return null;
    }
    return id;
  }
  function justAlert(message) {
    alert(`[S1 Reaction]: ${message}`);
  }
  function justLogError(message) {
    console.error("[S1 Reaction]: ", message);
  }
  async function checkSmiles() {
    {
      const smiles = get_store_value(smilesList);
      if (smiles.length > 0) {
        return true;
      }
    }
    const response = await API.s1ApiOffline.getSmiles().catch(responseErrorHandle);
    if (!response.success) {
      justAlert("通过 S1 接口获取麻将脸表情列表失败");
      if (response.message) {
        justLogError(response.message);
      }
      return false;
    }
    smilesList.set(response.data.slice(0, 6));
    return true;
  }
  class S1ApiOffline extends BaseAPI {
    async getSmiles(initOverrides) {
      const response = await this.getSmilesRaw(initOverrides);
      return await response.value();
    }
    async getSmilesRaw(initOverrides) {
      const queryParameters = {};
      const headerParameters = {};
      const response = await this.request({
        path: "/post/smiles",
        method: "GET",
        headers: headerParameters,
        query: queryParameters
      }, initOverrides);
      return new JSONApiResponse(response);
    }
  }
  class API {
    static init() {
      const configS1Api = new Configuration({
        basePath: "https://app.saraba1st.com/2b/api/app"
      });
      {
        this.reactApiOffline = new ReactApiOffline();
        this.s1ApiOffline = new S1ApiOffline(configS1Api);
      }
    }
  }
  __publicField(API, "authApi");
  __publicField(API, "reactApi");
  __publicField(API, "reactApiOffline");
  __publicField(API, "s1Api");
  __publicField(API, "s1ApiOffline");
  API.init();
  function reactApiOfflineUpdatePostReacts(post, smiley, remark = "", deleteFromUser = false) {
    const result = API.reactApiOffline.postUpdatePostReact({
      pid: post.pid,
      uid2: post.uid2,
      smiley,
      remark
    });
    if (deleteFromUser) {
      const result2 = API.reactApiOffline.postQueryUserReacts({
        uid2: post.uid2
      });
      reactsOfflineDict.set({
        received: result2
      });
      return true;
    }
    reactsOfflineDict.update((dict) => {
      const newDict = deepCopy(dict);
      if (result.length === 0) {
        newDict[`pid${post.pid}`] = [];
      } else {
        newDict[`pid${post.pid}`] = [result[0].react];
      }
      return newDict;
    });
    return true;
  }
  function create_fragment$7(ctx) {
    let if_block_anchor;
    return {
      c() {
        if_block_anchor = empty();
      },
      m(target, anchor) {
        insert(target, if_block_anchor, anchor);
      },
      p(ctx2, [dirty]) {
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
      }
    };
  }
  function instance$7($$self, $$props, $$invalidate) {
    let $needLogin;
    component_subscribe($$self, selectedUID, ($$value) => $$invalidate(18, $$value));
    component_subscribe($$self, needLogin, ($$value) => $$invalidate(0, $needLogin = $$value));
    let username = "";
    let password = "";
    let questionid = "0";
    let answer = "";
    let exp;
    let errorMessage = "";
    let needReLogin = $needLogin;
    const resetForm = () => {
      $$invalidate(1, username = "");
      $$invalidate(2, password = "");
      $$invalidate(3, questionid = "0");
      $$invalidate(4, answer = "");
      $$invalidate(5, exp = void 0);
      $$invalidate(6, errorMessage = "");
    };
    const onLoginBtnClick = async () => {
      {
        return;
      }
    };
    const click_handler = () => {
      $$invalidate(7, needReLogin = true);
    };
    const click_handler_1 = () => {
      $$invalidate(7, needReLogin = false);
      resetForm();
    };
    function input0_input_handler() {
      username = this.value;
      $$invalidate(1, username);
    }
    function input1_input_handler() {
      password = this.value;
      $$invalidate(2, password);
    }
    function select_change_handler() {
      questionid = select_value(this);
      $$invalidate(3, questionid);
    }
    const change_handler = () => {
      $$invalidate(4, answer = "");
    };
    function input_input_handler() {
      answer = this.value;
      $$invalidate(4, answer);
    }
    function input2_input_handler() {
      exp = to_number(this.value);
      $$invalidate(5, exp);
    }
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*$needLogin*/
      1) {
        $$invalidate(7, needReLogin = $needLogin);
      }
    };
    return [
      $needLogin,
      username,
      password,
      questionid,
      answer,
      exp,
      errorMessage,
      needReLogin,
      resetForm,
      onLoginBtnClick,
      click_handler,
      click_handler_1,
      input0_input_handler,
      input1_input_handler,
      select_change_handler,
      change_handler,
      input_input_handler,
      input2_input_handler
    ];
  }
  class Login extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$7, create_fragment$7, safe_not_equal, {});
    }
  }
  function create_if_block$5(ctx) {
    let div;
    let mounted;
    let dispose;
    return {
      c() {
        div = element("div");
        attr(div, "class", "modal-backdrop svelte-6la91r");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (!mounted) {
          dispose = listen(
            div,
            "click",
            /*onBackdropClick*/
            ctx[4]
          );
          mounted = true;
        }
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment$6(ctx) {
    let dialog_1;
    let div1;
    let div0;
    let t1;
    let button;
    let t3;
    let div2;
    let t4;
    let if_block_anchor;
    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
    );
    let if_block = (
      /*$showModal*/
      ctx[1] && create_if_block$5(ctx)
    );
    return {
      c() {
        dialog_1 = element("dialog");
        div1 = element("div");
        div0 = element("div");
        div0.textContent = "S1 Reaction";
        t1 = space();
        button = element("button");
        button.textContent = "×";
        t3 = space();
        div2 = element("div");
        if (default_slot)
          default_slot.c();
        t4 = space();
        if (if_block)
          if_block.c();
        if_block_anchor = empty();
        attr(div0, "class", "dialog-title svelte-6la91r");
        attr(button, "class", "close-btn svelte-6la91r");
        attr(div1, "class", "dialog-header svelte-6la91r");
        attr(div2, "class", "dialog-content svelte-6la91r");
        attr(dialog_1, "class", "modal-dialog svelte-6la91r");
        toggle_class(dialog_1, "offline", true);
        toggle_class(dialog_1, "only-login-form", false);
      },
      m(target, anchor) {
        insert(target, dialog_1, anchor);
        append(dialog_1, div1);
        append(div1, div0);
        append(div1, t1);
        append(div1, button);
        append(dialog_1, t3);
        append(dialog_1, div2);
        if (default_slot) {
          default_slot.m(div2, null);
        }
        ctx[7](dialog_1);
        insert(target, t4, anchor);
        if (if_block)
          if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
        current = true;
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*onCloseBtnClick*/
            ctx[3]
          );
          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 & /*$needLogin*/
        4) {
          toggle_class(dialog_1, "only-login-form", false);
        }
        if (
          /*$showModal*/
          ctx2[1]
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
          } else {
            if_block = create_if_block$5(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;
        }
      },
      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(dialog_1);
          detach(t4);
          detach(if_block_anchor);
        }
        if (default_slot)
          default_slot.d(detaching);
        ctx[7](null);
        if (if_block)
          if_block.d(detaching);
        mounted = false;
        dispose();
      }
    };
  }
  function instance$6($$self, $$props, $$invalidate) {
    let $showModal;
    let $selectedPost;
    let $needLogin;
    component_subscribe($$self, showModal, ($$value) => $$invalidate(1, $showModal = $$value));
    component_subscribe($$self, selectedPost, ($$value) => $$invalidate(8, $selectedPost = $$value));
    component_subscribe($$self, needLogin, ($$value) => $$invalidate(2, $needLogin = $$value));
    let { $$slots: slots = {}, $$scope } = $$props;
    let dialog;
    const onCloseBtnClick = () => {
      set_store_value(showModal, $showModal = false, $showModal);
    };
    const onBackdropClick = () => {
      set_store_value(showModal, $showModal = false, $showModal);
    };
    function dialog_1_binding($$value) {
      binding_callbacks[$$value ? "unshift" : "push"](() => {
        dialog = $$value;
        $$invalidate(0, dialog);
      });
    }
    $$self.$$set = ($$props2) => {
      if ("$$scope" in $$props2)
        $$invalidate(5, $$scope = $$props2.$$scope);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*dialog, $showModal*/
      3) {
        if (dialog) {
          if ($showModal) {
            document.body.style.overflow = "hidden";
            dialog.show();
          } else {
            document.body.style.overflow = "";
            dialog.close();
            set_store_value(selectedPost, $selectedPost = null, $selectedPost);
          }
        }
      }
      if ($$self.$$.dirty & /*dialog, $showModal*/
      3)
        ;
    };
    return [
      dialog,
      $showModal,
      $needLogin,
      onCloseBtnClick,
      onBackdropClick,
      $$scope,
      slots,
      dialog_1_binding
    ];
  }
  class ModalDialog extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$6, create_fragment$6, safe_not_equal, {});
    }
  }
  function get_each_context$1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[10] = list[i];
    return child_ctx;
  }
  function get_each_context_1$1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[13] = list[i];
    return child_ctx;
  }
  function get_each_context_2(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[16] = list[i];
    return child_ctx;
  }
  function get_each_context_3(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[10] = list[i];
    return child_ctx;
  }
  function create_if_block_1$3(ctx) {
    let input;
    let mounted;
    let dispose;
    return {
      c() {
        input = element("input");
        attr(input, "class", "remark svelte-5twxn6");
        attr(input, "placeholder", "输入可选文本标记,然后点击表情一起保存");
        attr(input, "type", "text");
      },
      m(target, anchor) {
        insert(target, input, anchor);
        set_input_value(
          input,
          /*remark*/
          ctx[1]
        );
        if (!mounted) {
          dispose = listen(
            input,
            "input",
            /*input_input_handler*/
            ctx[4]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty & /*remark*/
        2 && input.value !== /*remark*/
        ctx2[1]) {
          set_input_value(
            input,
            /*remark*/
            ctx2[1]
          );
        }
      },
      d(detaching) {
        if (detaching) {
          detach(input);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_each_block_3(key_1, ctx) {
    let button;
    let t0_value = (
      /*smiles*/
      ctx[10].type + ""
    );
    let t0;
    let t1;
    let mounted;
    let dispose;
    function click_handler() {
      return (
        /*click_handler*/
        ctx[5](
          /*smiles*/
          ctx[10]
        )
      );
    }
    return {
      key: key_1,
      first: null,
      c() {
        button = element("button");
        t0 = text(t0_value);
        t1 = space();
        attr(button, "class", "smiles-type-btn svelte-5twxn6");
        toggle_class(
          button,
          "active",
          /*activeTypeId*/
          ctx[0] === /*smiles*/
          ctx[10].typeid
        );
        this.first = button;
      },
      m(target, anchor) {
        insert(target, button, anchor);
        append(button, t0);
        append(button, t1);
        if (!mounted) {
          dispose = listen(button, "click", click_handler);
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty & /*$smilesTable*/
        4 && t0_value !== (t0_value = /*smiles*/
        ctx[10].type + ""))
          set_data(t0, t0_value);
        if (dirty & /*activeTypeId, $smilesTable*/
        5) {
          toggle_class(
            button,
            "active",
            /*activeTypeId*/
            ctx[0] === /*smiles*/
            ctx[10].typeid
          );
        }
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_if_block$4(ctx) {
    let table;
    let t;
    let each_value_1 = ensure_array_like(
      /*smiles*/
      ctx[10].list
    );
    let each_blocks = [];
    for (let i = 0; i < each_value_1.length; i += 1) {
      each_blocks[i] = create_each_block_1$1(get_each_context_1$1(ctx, each_value_1, i));
    }
    return {
      c() {
        table = element("table");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        t = space();
      },
      m(target, anchor) {
        insert(target, table, anchor);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(table, null);
          }
        }
        append(table, t);
      },
      p(ctx2, dirty) {
        if (dirty & /*$smilesTable, onSmileyClick*/
        12) {
          each_value_1 = ensure_array_like(
            /*smiles*/
            ctx2[10].list
          );
          let i;
          for (i = 0; i < each_value_1.length; i += 1) {
            const child_ctx = get_each_context_1$1(ctx2, each_value_1, i);
            if (each_blocks[i]) {
              each_blocks[i].p(child_ctx, dirty);
            } else {
              each_blocks[i] = create_each_block_1$1(child_ctx);
              each_blocks[i].c();
              each_blocks[i].m(table, t);
            }
          }
          for (; i < each_blocks.length; i += 1) {
            each_blocks[i].d(1);
          }
          each_blocks.length = each_value_1.length;
        }
      },
      d(detaching) {
        if (detaching) {
          detach(table);
        }
        destroy_each(each_blocks, detaching);
      }
    };
  }
  function create_each_block_2(key_1, ctx) {
    let td;
    let img;
    let img_src_value;
    let img_alt_value;
    let mounted;
    let dispose;
    function click_handler_1() {
      return (
        /*click_handler_1*/
        ctx[6](
          /*smiley*/
          ctx[16]
        )
      );
    }
    return {
      key: key_1,
      first: null,
      c() {
        td = element("td");
        img = element("img");
        if (!src_url_equal(img.src, img_src_value = /*smiley*/
        ctx[16].url))
          attr(img, "src", img_src_value);
        attr(img, "alt", img_alt_value = /*smiley*/
        ctx[16].code);
        attr(img, "class", "svelte-5twxn6");
        attr(td, "class", "svelte-5twxn6");
        this.first = td;
      },
      m(target, anchor) {
        insert(target, td, anchor);
        append(td, img);
        if (!mounted) {
          dispose = listen(td, "click", click_handler_1);
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (dirty & /*$smilesTable*/
        4 && !src_url_equal(img.src, img_src_value = /*smiley*/
        ctx[16].url)) {
          attr(img, "src", img_src_value);
        }
        if (dirty & /*$smilesTable*/
        4 && img_alt_value !== (img_alt_value = /*smiley*/
        ctx[16].code)) {
          attr(img, "alt", img_alt_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(td);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_each_block_1$1(ctx) {
    let tr;
    let each_blocks = [];
    let each_1_lookup = /* @__PURE__ */ new Map();
    let each_value_2 = ensure_array_like(
      /*smilesRow*/
      ctx[13]
    );
    const get_key = (ctx2) => (
      /*smiley*/
      ctx2[16].code
    );
    for (let i = 0; i < each_value_2.length; i += 1) {
      let child_ctx = get_each_context_2(ctx, each_value_2, i);
      let key = get_key(child_ctx);
      each_1_lookup.set(key, each_blocks[i] = create_each_block_2(key, child_ctx));
    }
    return {
      c() {
        tr = element("tr");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
      },
      m(target, anchor) {
        insert(target, tr, anchor);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(tr, null);
          }
        }
      },
      p(ctx2, dirty) {
        if (dirty & /*onSmileyClick, $smilesTable*/
        12) {
          each_value_2 = ensure_array_like(
            /*smilesRow*/
            ctx2[13]
          );
          each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value_2, each_1_lookup, tr, destroy_block, create_each_block_2, null, get_each_context_2);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(tr);
        }
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].d();
        }
      }
    };
  }
  function create_each_block$1(key_1, ctx) {
    let first;
    let if_block_anchor;
    let if_block = (
      /*activeTypeId*/
      ctx[0] === /*smiles*/
      ctx[10].typeid && create_if_block$4(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 (if_block)
          if_block.m(target, anchor);
        insert(target, if_block_anchor, anchor);
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (
          /*activeTypeId*/
          ctx[0] === /*smiles*/
          ctx[10].typeid
        ) {
          if (if_block) {
            if_block.p(ctx, dirty);
          } else {
            if_block = create_if_block$4(ctx);
            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(first);
          detach(if_block_anchor);
        }
        if (if_block)
          if_block.d(detaching);
      }
    };
  }
  function create_fragment$5(ctx) {
    let div2;
    let t0;
    let div0;
    let each_blocks_1 = [];
    let each0_lookup = /* @__PURE__ */ new Map();
    let t1;
    let div1;
    let each_blocks = [];
    let each1_lookup = /* @__PURE__ */ new Map();
    let if_block = create_if_block_1$3(ctx);
    let each_value_3 = ensure_array_like(
      /*$smilesTable*/
      ctx[2]
    );
    const get_key = (ctx2) => (
      /*smiles*/
      ctx2[10].typeid
    );
    for (let i = 0; i < each_value_3.length; i += 1) {
      let child_ctx = get_each_context_3(ctx, each_value_3, i);
      let key = get_key(child_ctx);
      each0_lookup.set(key, each_blocks_1[i] = create_each_block_3(key, child_ctx));
    }
    let each_value = ensure_array_like(
      /*$smilesTable*/
      ctx[2]
    );
    const get_key_1 = (ctx2) => (
      /*smiles*/
      ctx2[10].typeid
    );
    for (let i = 0; i < each_value.length; i += 1) {
      let child_ctx = get_each_context$1(ctx, each_value, i);
      let key = get_key_1(child_ctx);
      each1_lookup.set(key, each_blocks[i] = create_each_block$1(key, child_ctx));
    }
    return {
      c() {
        div2 = element("div");
        if (if_block)
          if_block.c();
        t0 = space();
        div0 = element("div");
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          each_blocks_1[i].c();
        }
        t1 = space();
        div1 = element("div");
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].c();
        }
        attr(div1, "class", "smiles-table svelte-5twxn6");
        attr(div2, "class", "smiles svelte-5twxn6");
      },
      m(target, anchor) {
        insert(target, div2, anchor);
        if (if_block)
          if_block.m(div2, null);
        append(div2, t0);
        append(div2, div0);
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          if (each_blocks_1[i]) {
            each_blocks_1[i].m(div0, null);
          }
        }
        append(div2, t1);
        append(div2, div1);
        for (let i = 0; i < each_blocks.length; i += 1) {
          if (each_blocks[i]) {
            each_blocks[i].m(div1, null);
          }
        }
      },
      p(ctx2, [dirty]) {
        if_block.p(ctx2, dirty);
        if (dirty & /*activeTypeId, $smilesTable*/
        5) {
          each_value_3 = ensure_array_like(
            /*$smilesTable*/
            ctx2[2]
          );
          each_blocks_1 = update_keyed_each(each_blocks_1, dirty, get_key, 1, ctx2, each_value_3, each0_lookup, div0, destroy_block, create_each_block_3, null, get_each_context_3);
        }
        if (dirty & /*$smilesTable, onSmileyClick, activeTypeId*/
        13) {
          each_value = ensure_array_like(
            /*$smilesTable*/
            ctx2[2]
          );
          each_blocks = update_keyed_each(each_blocks, dirty, get_key_1, 1, ctx2, each_value, each1_lookup, div1, destroy_block, create_each_block$1, null, get_each_context$1);
        }
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(div2);
        }
        if (if_block)
          if_block.d();
        for (let i = 0; i < each_blocks_1.length; i += 1) {
          each_blocks_1[i].d();
        }
        for (let i = 0; i < each_blocks.length; i += 1) {
          each_blocks[i].d();
        }
      }
    };
  }
  function instance$5($$self, $$props, $$invalidate) {
    let $showModal;
    let $selectedPost;
    let $smilesTable;
    component_subscribe($$self, showModal, ($$value) => $$invalidate(7, $showModal = $$value));
    component_subscribe($$self, selectedUserInfo, ($$value) => $$invalidate(8, $$value));
    component_subscribe($$self, selectedPost, ($$value) => $$invalidate(9, $selectedPost = $$value));
    component_subscribe($$self, smilesTable, ($$value) => $$invalidate(2, $smilesTable = $$value));
    let activeTypeId = $smilesTable.length > 0 ? $smilesTable[0].typeid : null;
    let remark = "";
    const onSmileyClick = async (smiley) => {
      if (!$selectedPost) {
        justAlert("请先选择帖子");
        return;
      }
      const result = await (async () => {
        {
          return reactApiOfflineUpdatePostReacts($selectedPost, smiley, remark);
        }
      })();
      if (result) {
        set_store_value(showModal, $showModal = false, $showModal);
        $$invalidate(1, remark = "");
      }
    };
    function input_input_handler() {
      remark = this.value;
      $$invalidate(1, remark);
    }
    const click_handler = (smiles) => {
      $$invalidate(0, activeTypeId = smiles.typeid);
    };
    const click_handler_1 = (smiley) => {
      onSmileyClick(smiley.code);
    };
    return [
      activeTypeId,
      remark,
      $smilesTable,
      onSmileyClick,
      input_input_handler,
      click_handler,
      click_handler_1
    ];
  }
  class Smiles extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$5, create_fragment$5, safe_not_equal, {});
    }
  }
  function create_fragment$4(ctx) {
    let if_block_anchor;
    return {
      c() {
        if_block_anchor = empty();
      },
      m(target, anchor) {
        insert(target, if_block_anchor, anchor);
      },
      p(ctx2, [dirty]) {
      },
      i: noop,
      o: noop,
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
      }
    };
  }
  function instance$4($$self, $$props, $$invalidate) {
    let $selectedUID;
    let $userInfoList;
    component_subscribe($$self, selectedUID, ($$value) => $$invalidate(0, $selectedUID = $$value));
    component_subscribe($$self, userInfoList, ($$value) => $$invalidate(1, $userInfoList = $$value));
    const onRemoveBtnClick = (uid) => {
      {
        return;
      }
    };
    const $$binding_groups = [[]];
    function input_change_handler() {
      $selectedUID = this.__value;
      selectedUID.set($selectedUID);
    }
    const click_handler = (userInfo) => {
      onRemoveBtnClick(userInfo.uid);
    };
    return [
      $selectedUID,
      $userInfoList,
      onRemoveBtnClick,
      input_change_handler,
      $$binding_groups,
      click_handler
    ];
  }
  class UserInfo extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$4, create_fragment$4, safe_not_equal, {});
    }
  }
  function create_else_block$1(ctx) {
    let t0;
    let login;
    let t1;
    let if_block1_anchor;
    let current;
    let if_block0 = !/*$needLogin*/
    ctx[0] && create_if_block_2$2();
    login = new Login({});
    let if_block1 = !/*$needLogin*/
    ctx[0] && create_if_block_1$2();
    return {
      c() {
        if (if_block0)
          if_block0.c();
        t0 = space();
        create_component(login.$$.fragment);
        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);
        mount_component(login, 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 (!/*$needLogin*/
        ctx2[0]) {
          if (if_block0) {
            if (dirty & /*$needLogin*/
            1) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_2$2();
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(t0.parentNode, t0);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (!/*$needLogin*/
        ctx2[0]) {
          if (if_block1) {
            if (dirty & /*$needLogin*/
            1) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_1$2();
            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(login.$$.fragment, local);
        transition_in(if_block1);
        current = true;
      },
      o(local) {
        transition_out(if_block0);
        transition_out(login.$$.fragment, local);
        transition_out(if_block1);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(t0);
          detach(t1);
          detach(if_block1_anchor);
        }
        if (if_block0)
          if_block0.d(detaching);
        destroy_component(login, detaching);
        if (if_block1)
          if_block1.d(detaching);
      }
    };
  }
  function create_if_block$3(ctx) {
    let smiles;
    let current;
    smiles = new Smiles({});
    return {
      c() {
        create_component(smiles.$$.fragment);
      },
      m(target, anchor) {
        mount_component(smiles, target, anchor);
        current = true;
      },
      p: noop,
      i(local) {
        if (current)
          return;
        transition_in(smiles.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(smiles.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(smiles, detaching);
      }
    };
  }
  function create_if_block_2$2(ctx) {
    let smiles;
    let current;
    smiles = new Smiles({});
    return {
      c() {
        create_component(smiles.$$.fragment);
      },
      m(target, anchor) {
        mount_component(smiles, target, anchor);
        current = true;
      },
      i(local) {
        if (current)
          return;
        transition_in(smiles.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(smiles.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(smiles, detaching);
      }
    };
  }
  function create_if_block_1$2(ctx) {
    let userinfo;
    let current;
    userinfo = new UserInfo({});
    return {
      c() {
        create_component(userinfo.$$.fragment);
      },
      m(target, anchor) {
        mount_component(userinfo, target, anchor);
        current = true;
      },
      i(local) {
        if (current)
          return;
        transition_in(userinfo.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(userinfo.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        destroy_component(userinfo, detaching);
      }
    };
  }
  function create_default_slot(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_block$1];
    const if_blocks = [];
    function select_block_type(ctx2, dirty) {
      return 0;
    }
    current_block_type_index = select_block_type();
    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) {
        if_block.p(ctx2, dirty);
      },
      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_fragment$3(ctx) {
    let div;
    let modaldialog;
    let current;
    modaldialog = new ModalDialog({
      props: {
        $$slots: { default: [create_default_slot] },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        div = element("div");
        create_component(modaldialog.$$.fragment);
        attr(div, "class", "modal svelte-81eduz");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(modaldialog, div, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        const modaldialog_changes = {};
        if (dirty & /*$$scope, $needLogin*/
        3) {
          modaldialog_changes.$$scope = { dirty, ctx: ctx2 };
        }
        modaldialog.$set(modaldialog_changes);
      },
      i(local) {
        if (current)
          return;
        transition_in(modaldialog.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(modaldialog.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(modaldialog);
      }
    };
  }
  function instance$3($$self, $$props, $$invalidate) {
    let $needLogin;
    component_subscribe($$self, needLogin, ($$value) => $$invalidate(0, $needLogin = $$value));
    return [$needLogin];
  }
  class Modal extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$3, create_fragment$3, safe_not_equal, {});
    }
  }
  const get_addButton_slot_changes = (dirty) => ({});
  const get_addButton_slot_context = (ctx) => ({});
  function get_each_context_1(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[6] = list[i];
    return child_ctx;
  }
  const get_actionButton_slot_changes_1 = (dirty) => ({ react: dirty & /*reacts*/
  1 });
  const get_actionButton_slot_context_1 = (ctx) => ({ react: (
    /*react*/
    ctx[6]
  ) });
  function get_each_context(ctx, list, i) {
    const child_ctx = ctx.slice();
    child_ctx[6] = list[i];
    return child_ctx;
  }
  const get_actionButton_slot_changes = (dirty) => ({ react: dirty & /*reactsOffline*/
  2 });
  const get_actionButton_slot_context = (ctx) => ({ react: (
    /*react*/
    ctx[6]
  ) });
  function create_else_block(ctx) {
    let each_blocks = [];
    let each_1_lookup = /* @__PURE__ */ new Map();
    let each_1_anchor;
    let current;
    let each_value_1 = ensure_array_like(
      /*reacts*/
      ctx[0]
    );
    const get_key = (ctx2) => (
      /*react*/
      ctx2[6].smiley
    );
    for (let i = 0; i < each_value_1.length; i += 1) {
      let child_ctx = get_each_context_1(ctx, each_value_1, i);
      let key = get_key(child_ctx);
      each_1_lookup.set(key, each_blocks[i] = create_each_block_1(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 & /*$$scope, reacts, $smileyDict*/
        25) {
          each_value_1 = ensure_array_like(
            /*reacts*/
            ctx2[0]
          );
          group_outros();
          each_blocks = update_keyed_each(each_blocks, dirty, get_key, 1, ctx2, each_value_1, each_1_lookup, each_1_anchor.parentNode, outro_and_destroy_block, create_each_block_1, each_1_anchor, get_each_context_1);
          check_outros();
        }
      },
      i(local) {
        if (current)
          return;
        for (let i = 0; i < each_value_1.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_block$2(ctx) {
    let each_blocks = [];
    let each_1_lookup = /* @__PURE__ */ new Map();
    let each_1_anchor;
    let current;
    let each_value = ensure_array_like(
      /*reactsOffline*/
      ctx[1]
    );
    const get_key = (ctx2) => (
      /*react*/
      ctx2[6].smiley
    );
    for (let i = 0; i < each_value.length; i += 1) {
      let child_ctx = get_each_context(ctx, each_value, i);
      let key = get_key(child_ctx);
      each_1_lookup.set(key, each_blocks[i] = create_each_block(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 & /*$$scope, reactsOffline, fromUser, $smileyDict*/
        30) {
          each_value = ensure_array_like(
            /*reactsOffline*/
            ctx2[1]
          );
          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_block, each_1_anchor, get_each_context);
          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_block_1(key_1, ctx) {
    let div;
    let img;
    let img_src_value;
    let img_alt_value;
    let t0;
    let span;
    let t1;
    let t2_value = (
      /*react*/
      ctx[6].count + ""
    );
    let t2;
    let t3;
    let t4;
    let current;
    const actionButton_slot_template = (
      /*#slots*/
      ctx[5].actionButton
    );
    const actionButton_slot = create_slot(
      actionButton_slot_template,
      ctx,
      /*$$scope*/
      ctx[4],
      get_actionButton_slot_context_1
    );
    return {
      key: key_1,
      first: null,
      c() {
        div = element("div");
        img = element("img");
        t0 = space();
        span = element("span");
        t1 = text("+");
        t2 = text(t2_value);
        t3 = space();
        if (actionButton_slot)
          actionButton_slot.c();
        t4 = space();
        if (!src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx[3][
          /*react*/
          ctx[6].smiley
        ]))
          attr(img, "src", img_src_value);
        attr(img, "alt", img_alt_value = /*react*/
        ctx[6].smiley);
        attr(img, "class", "svelte-1kvsz55");
        attr(div, "class", "react svelte-1kvsz55");
        this.first = div;
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, img);
        append(div, t0);
        append(div, span);
        append(span, t1);
        append(span, t2);
        append(div, t3);
        if (actionButton_slot) {
          actionButton_slot.m(div, null);
        }
        append(div, t4);
        current = true;
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (!current || dirty & /*$smileyDict, reacts*/
        9 && !src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx[3][
          /*react*/
          ctx[6].smiley
        ])) {
          attr(img, "src", img_src_value);
        }
        if (!current || dirty & /*reacts*/
        1 && img_alt_value !== (img_alt_value = /*react*/
        ctx[6].smiley)) {
          attr(img, "alt", img_alt_value);
        }
        if ((!current || dirty & /*reacts*/
        1) && t2_value !== (t2_value = /*react*/
        ctx[6].count + ""))
          set_data(t2, t2_value);
        if (actionButton_slot) {
          if (actionButton_slot.p && (!current || dirty & /*$$scope, reacts*/
          17)) {
            update_slot_base(
              actionButton_slot,
              actionButton_slot_template,
              ctx,
              /*$$scope*/
              ctx[4],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx[4]
              ) : get_slot_changes(
                actionButton_slot_template,
                /*$$scope*/
                ctx[4],
                dirty,
                get_actionButton_slot_changes_1
              ),
              get_actionButton_slot_context_1
            );
          }
        }
      },
      i(local) {
        if (current)
          return;
        transition_in(actionButton_slot, local);
        current = true;
      },
      o(local) {
        transition_out(actionButton_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (actionButton_slot)
          actionButton_slot.d(detaching);
      }
    };
  }
  function create_if_block_2$1(ctx) {
    let span;
    let t_value = (
      /*react*/
      ctx[6].remark + ""
    );
    let t;
    return {
      c() {
        span = element("span");
        t = text(t_value);
      },
      m(target, anchor) {
        insert(target, span, anchor);
        append(span, t);
      },
      p(ctx2, dirty) {
        if (dirty & /*reactsOffline*/
        2 && t_value !== (t_value = /*react*/
        ctx2[6].remark + ""))
          set_data(t, t_value);
      },
      d(detaching) {
        if (detaching) {
          detach(span);
        }
      }
    };
  }
  function create_if_block_1$1(ctx) {
    let a;
    let t;
    let a_href_value;
    return {
      c() {
        a = element("a");
        t = text("#");
        attr(a, "href", a_href_value = `forum.php?mod=redirect&goto=findpost&pid=${/*react*/
      ctx[6].pid}`);
        attr(a, "target", "_blank");
      },
      m(target, anchor) {
        insert(target, a, anchor);
        append(a, t);
      },
      p(ctx2, dirty) {
        if (dirty & /*reactsOffline*/
        2 && a_href_value !== (a_href_value = `forum.php?mod=redirect&goto=findpost&pid=${/*react*/
      ctx2[6].pid}`)) {
          attr(a, "href", a_href_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(a);
        }
      }
    };
  }
  function create_each_block(key_1, ctx) {
    let div;
    let img;
    let img_src_value;
    let img_alt_value;
    let t0;
    let t1;
    let t2;
    let t3;
    let current;
    let if_block0 = (
      /*react*/
      ctx[6].remark && create_if_block_2$1(ctx)
    );
    let if_block1 = (
      /*fromUser*/
      ctx[2] && create_if_block_1$1(ctx)
    );
    const actionButton_slot_template = (
      /*#slots*/
      ctx[5].actionButton
    );
    const actionButton_slot = create_slot(
      actionButton_slot_template,
      ctx,
      /*$$scope*/
      ctx[4],
      get_actionButton_slot_context
    );
    return {
      key: key_1,
      first: null,
      c() {
        div = element("div");
        img = element("img");
        t0 = space();
        if (if_block0)
          if_block0.c();
        t1 = space();
        if (if_block1)
          if_block1.c();
        t2 = space();
        if (actionButton_slot)
          actionButton_slot.c();
        t3 = space();
        if (!src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx[3][
          /*react*/
          ctx[6].smiley
        ]))
          attr(img, "src", img_src_value);
        attr(img, "alt", img_alt_value = /*react*/
        ctx[6].smiley);
        attr(img, "class", "svelte-1kvsz55");
        attr(div, "class", "react svelte-1kvsz55");
        this.first = div;
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, img);
        append(div, t0);
        if (if_block0)
          if_block0.m(div, null);
        append(div, t1);
        if (if_block1)
          if_block1.m(div, null);
        append(div, t2);
        if (actionButton_slot) {
          actionButton_slot.m(div, null);
        }
        append(div, t3);
        current = true;
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
        if (!current || dirty & /*$smileyDict, reactsOffline*/
        10 && !src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx[3][
          /*react*/
          ctx[6].smiley
        ])) {
          attr(img, "src", img_src_value);
        }
        if (!current || dirty & /*reactsOffline*/
        2 && img_alt_value !== (img_alt_value = /*react*/
        ctx[6].smiley)) {
          attr(img, "alt", img_alt_value);
        }
        if (
          /*react*/
          ctx[6].remark
        ) {
          if (if_block0) {
            if_block0.p(ctx, dirty);
          } else {
            if_block0 = create_if_block_2$1(ctx);
            if_block0.c();
            if_block0.m(div, t1);
          }
        } else if (if_block0) {
          if_block0.d(1);
          if_block0 = null;
        }
        if (
          /*fromUser*/
          ctx[2]
        ) {
          if (if_block1) {
            if_block1.p(ctx, dirty);
          } else {
            if_block1 = create_if_block_1$1(ctx);
            if_block1.c();
            if_block1.m(div, t2);
          }
        } else if (if_block1) {
          if_block1.d(1);
          if_block1 = null;
        }
        if (actionButton_slot) {
          if (actionButton_slot.p && (!current || dirty & /*$$scope, reactsOffline*/
          18)) {
            update_slot_base(
              actionButton_slot,
              actionButton_slot_template,
              ctx,
              /*$$scope*/
              ctx[4],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx[4]
              ) : get_slot_changes(
                actionButton_slot_template,
                /*$$scope*/
                ctx[4],
                dirty,
                get_actionButton_slot_changes
              ),
              get_actionButton_slot_context
            );
          }
        }
      },
      i(local) {
        if (current)
          return;
        transition_in(actionButton_slot, local);
        current = true;
      },
      o(local) {
        transition_out(actionButton_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if (if_block0)
          if_block0.d();
        if (if_block1)
          if_block1.d();
        if (actionButton_slot)
          actionButton_slot.d(detaching);
      }
    };
  }
  function create_fragment$2(ctx) {
    let div;
    let current_block_type_index;
    let if_block;
    let t;
    let current;
    const if_block_creators = [create_if_block$2, create_else_block];
    const if_blocks = [];
    function select_block_type(ctx2, dirty) {
      return 0;
    }
    current_block_type_index = select_block_type();
    if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    const addButton_slot_template = (
      /*#slots*/
      ctx[5].addButton
    );
    const addButton_slot = create_slot(
      addButton_slot_template,
      ctx,
      /*$$scope*/
      ctx[4],
      get_addButton_slot_context
    );
    return {
      c() {
        div = element("div");
        if_block.c();
        t = space();
        if (addButton_slot)
          addButton_slot.c();
        attr(div, "class", "reacts svelte-1kvsz55");
        toggle_class(div, "offline", true);
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if_blocks[current_block_type_index].m(div, null);
        append(div, t);
        if (addButton_slot) {
          addButton_slot.m(div, null);
        }
        current = true;
      },
      p(ctx2, [dirty]) {
        if_block.p(ctx2, dirty);
        if (addButton_slot) {
          if (addButton_slot.p && (!current || dirty & /*$$scope*/
          16)) {
            update_slot_base(
              addButton_slot,
              addButton_slot_template,
              ctx2,
              /*$$scope*/
              ctx2[4],
              !current ? get_all_dirty_from_scope(
                /*$$scope*/
                ctx2[4]
              ) : get_slot_changes(
                addButton_slot_template,
                /*$$scope*/
                ctx2[4],
                dirty,
                get_addButton_slot_changes
              ),
              get_addButton_slot_context
            );
          }
        }
      },
      i(local) {
        if (current)
          return;
        transition_in(if_block);
        transition_in(addButton_slot, local);
        current = true;
      },
      o(local) {
        transition_out(if_block);
        transition_out(addButton_slot, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        if_blocks[current_block_type_index].d();
        if (addButton_slot)
          addButton_slot.d(detaching);
      }
    };
  }
  function instance$2($$self, $$props, $$invalidate) {
    let $smileyDict;
    component_subscribe($$self, smileyDict, ($$value) => $$invalidate(3, $smileyDict = $$value));
    let { $$slots: slots = {}, $$scope } = $$props;
    let { reacts } = $$props;
    let { reactsOffline } = $$props;
    let { fromUser = false } = $$props;
    $$self.$$set = ($$props2) => {
      if ("reacts" in $$props2)
        $$invalidate(0, reacts = $$props2.reacts);
      if ("reactsOffline" in $$props2)
        $$invalidate(1, reactsOffline = $$props2.reactsOffline);
      if ("fromUser" in $$props2)
        $$invalidate(2, fromUser = $$props2.fromUser);
      if ("$$scope" in $$props2)
        $$invalidate(4, $$scope = $$props2.$$scope);
    };
    return [reacts, reactsOffline, fromUser, $smileyDict, $$scope, slots];
  }
  class Reacts extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$2, create_fragment$2, safe_not_equal, { reacts: 0, reactsOffline: 1, fromUser: 2 });
    }
  }
  function create_if_block$1(ctx) {
    let button;
    let mounted;
    let dispose;
    return {
      c() {
        button = element("button");
        button.textContent = "×";
        attr(button, "class", "action-btn remove-react-btn svelte-1hkey2g");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*onRemoveBtnClick*/
            ctx[5]
          );
          mounted = true;
        }
      },
      p: noop,
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_actionButton_slot$1(ctx) {
    let if_block_anchor;
    function select_block_type(ctx2, dirty) {
      return create_if_block$1;
    }
    let current_block_type = select_block_type();
    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()) && 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);
          }
        }
      },
      d(detaching) {
        if (detaching) {
          detach(if_block_anchor);
        }
        if (if_block) {
          if_block.d(detaching);
        }
      }
    };
  }
  function create_addButton_slot(ctx) {
    let div;
    let button;
    let img;
    let img_src_value;
    let mounted;
    let dispose;
    return {
      c() {
        div = element("div");
        button = element("button");
        img = element("img");
        attr(img, "alt", "+1");
        if (!src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx[3]["[f:253]"]))
          attr(img, "src", img_src_value);
        attr(button, "class", "add-react-btn svelte-1hkey2g");
        attr(div, "class", "add-react svelte-1hkey2g");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, button);
        append(button, img);
        if (!mounted) {
          dispose = listen(
            button,
            "click",
            /*onAddBtnClick*/
            ctx[4]
          );
          mounted = true;
        }
      },
      p(ctx2, dirty) {
        if (dirty & /*$smileyDict*/
        8 && !src_url_equal(img.src, img_src_value = /*$smileyDict*/
        ctx2[3]["[f:253]"])) {
          attr(img, "src", img_src_value);
        }
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment$1(ctx) {
    let div;
    let reacts_1;
    let current;
    reacts_1 = new Reacts({
      props: {
        reacts: (
          /*reacts*/
          ctx[0]
        ),
        reactsOffline: (
          /*reactsOffline*/
          ctx[1]
        ),
        $$slots: {
          addButton: [create_addButton_slot],
          actionButton: [
            create_actionButton_slot$1,
            ({ react }) => ({ 14: react }),
            ({ react }) => react ? 16384 : 0
          ]
        },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        div = element("div");
        create_component(reacts_1.$$.fragment);
        attr(div, "class", "post-reacts svelte-1hkey2g");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        mount_component(reacts_1, div, null);
        current = true;
      },
      p(ctx2, [dirty]) {
        const reacts_1_changes = {};
        if (dirty & /*reacts*/
        1)
          reacts_1_changes.reacts = /*reacts*/
          ctx2[0];
        if (dirty & /*reactsOffline*/
        2)
          reacts_1_changes.reactsOffline = /*reactsOffline*/
          ctx2[1];
        if (dirty & /*$$scope, $smileyDict, react, $selectedUserInfo*/
        49164) {
          reacts_1_changes.$$scope = { dirty, ctx: ctx2 };
        }
        reacts_1.$set(reacts_1_changes);
      },
      i(local) {
        if (current)
          return;
        transition_in(reacts_1.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(reacts_1.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(reacts_1);
      }
    };
  }
  function instance$1($$self, $$props, $$invalidate) {
    let $selectedUserInfo;
    let $selectedPost;
    let $showModal;
    let $reactsOfflineDict;
    let $reactsDict;
    let $smileyDict;
    component_subscribe($$self, selectedUserInfo, ($$value) => $$invalidate(2, $selectedUserInfo = $$value));
    component_subscribe($$self, selectedPost, ($$value) => $$invalidate(12, $selectedPost = $$value));
    component_subscribe($$self, showModal, ($$value) => $$invalidate(13, $showModal = $$value));
    component_subscribe($$self, reactsOfflineDict, ($$value) => $$invalidate(9, $reactsOfflineDict = $$value));
    component_subscribe($$self, reactsDict, ($$value) => $$invalidate(10, $reactsDict = $$value));
    component_subscribe($$self, smileyDict, ($$value) => $$invalidate(3, $smileyDict = $$value));
    let { pid } = $$props;
    let { uid2 } = $$props;
    let reacts = [];
    let reactsOffline = [];
    const onAddBtnClick = () => {
      set_store_value(showModal, $showModal = true, $showModal);
      set_store_value(selectedPost, $selectedPost = { pid, uid2 }, $selectedPost);
    };
    const onRemoveBtnClick = async () => {
      {
        reactApiOfflineUpdatePostReacts({ pid, uid2 }, null);
        return;
      }
    };
    const onPlusBtnClick = async (smiley) => {
      {
        return;
      }
    };
    const click_handler = (react) => {
      onPlusBtnClick(react.smiley);
    };
    $$self.$$set = ($$props2) => {
      if ("pid" in $$props2)
        $$invalidate(7, pid = $$props2.pid);
      if ("uid2" in $$props2)
        $$invalidate(8, uid2 = $$props2.uid2);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*$reactsDict, pid*/
      1152)
        ;
      if ($$self.$$.dirty & /*$reactsOfflineDict, pid*/
      640) {
        {
          const postReacts = $reactsOfflineDict[`pid${pid}`];
          $$invalidate(1, reactsOffline = postReacts || []);
        }
      }
    };
    return [
      reacts,
      reactsOffline,
      $selectedUserInfo,
      $smileyDict,
      onAddBtnClick,
      onRemoveBtnClick,
      onPlusBtnClick,
      pid,
      uid2,
      $reactsOfflineDict,
      $reactsDict,
      click_handler
    ];
  }
  class PostReacts extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance$1, create_fragment$1, safe_not_equal, { pid: 7, uid2: 8 });
    }
  }
  function create_if_block_2(ctx) {
    let div;
    let t;
    let current;
    let if_block0 = (
      /*receivedReacts*/
      ctx[1].length > 0 && create_if_block_4(ctx)
    );
    let if_block1 = (
      /*sentReacts*/
      ctx[0].length > 0 && create_if_block_3(ctx)
    );
    return {
      c() {
        div = element("div");
        if (if_block0)
          if_block0.c();
        t = space();
        if (if_block1)
          if_block1.c();
        attr(div, "class", "user-reacts svelte-1mwqdh0");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        if (if_block0)
          if_block0.m(div, null);
        append(div, t);
        if (if_block1)
          if_block1.m(div, null);
        current = true;
      },
      p(ctx2, dirty) {
        if (
          /*receivedReacts*/
          ctx2[1].length > 0
        ) {
          if (if_block0) {
            if_block0.p(ctx2, dirty);
            if (dirty & /*receivedReacts*/
            2) {
              transition_in(if_block0, 1);
            }
          } else {
            if_block0 = create_if_block_4(ctx2);
            if_block0.c();
            transition_in(if_block0, 1);
            if_block0.m(div, t);
          }
        } else if (if_block0) {
          group_outros();
          transition_out(if_block0, 1, 1, () => {
            if_block0 = null;
          });
          check_outros();
        }
        if (
          /*sentReacts*/
          ctx2[0].length > 0
        ) {
          if (if_block1) {
            if_block1.p(ctx2, dirty);
            if (dirty & /*sentReacts*/
            1) {
              transition_in(if_block1, 1);
            }
          } else {
            if_block1 = create_if_block_3(ctx2);
            if_block1.c();
            transition_in(if_block1, 1);
            if_block1.m(div, null);
          }
        } 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(div);
        }
        if (if_block0)
          if_block0.d();
        if (if_block1)
          if_block1.d();
      }
    };
  }
  function create_if_block(ctx) {
    let if_block_anchor;
    let current;
    let if_block = (
      /*receivedReactsOffline*/
      ctx[2].length > 0 && create_if_block_1(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);
        current = true;
      },
      p(ctx2, dirty) {
        if (
          /*receivedReactsOffline*/
          ctx2[2].length > 0
        ) {
          if (if_block) {
            if_block.p(ctx2, dirty);
            if (dirty & /*receivedReactsOffline*/
            4) {
              transition_in(if_block, 1);
            }
          } else {
            if_block = create_if_block_1(ctx2);
            if_block.c();
            transition_in(if_block, 1);
            if_block.m(if_block_anchor.parentNode, if_block_anchor);
          }
        } else if (if_block) {
          group_outros();
          transition_out(if_block, 1, 1, () => {
            if_block = null;
          });
          check_outros();
        }
      },
      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 (if_block)
          if_block.d(detaching);
      }
    };
  }
  function create_if_block_4(ctx) {
    let h2;
    let t1;
    let reacts;
    let current;
    reacts = new Reacts({
      props: {
        reacts: (
          /*receivedReacts*/
          ctx[1]
        ),
        reactsOffline: []
      }
    });
    return {
      c() {
        h2 = element("h2");
        h2.textContent = "收到回应";
        t1 = space();
        create_component(reacts.$$.fragment);
        attr(h2, "class", "mbn svelte-1mwqdh0");
      },
      m(target, anchor) {
        insert(target, h2, anchor);
        insert(target, t1, anchor);
        mount_component(reacts, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const reacts_changes = {};
        if (dirty & /*receivedReacts*/
        2)
          reacts_changes.reacts = /*receivedReacts*/
          ctx2[1];
        reacts.$set(reacts_changes);
      },
      i(local) {
        if (current)
          return;
        transition_in(reacts.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(reacts.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(h2);
          detach(t1);
        }
        destroy_component(reacts, detaching);
      }
    };
  }
  function create_if_block_3(ctx) {
    let h2;
    let t1;
    let reacts;
    let current;
    reacts = new Reacts({
      props: {
        reacts: (
          /*sentReacts*/
          ctx[0]
        ),
        reactsOffline: []
      }
    });
    return {
      c() {
        h2 = element("h2");
        h2.textContent = "送出回应";
        t1 = space();
        create_component(reacts.$$.fragment);
        attr(h2, "class", "mbn svelte-1mwqdh0");
      },
      m(target, anchor) {
        insert(target, h2, anchor);
        insert(target, t1, anchor);
        mount_component(reacts, target, anchor);
        current = true;
      },
      p(ctx2, dirty) {
        const reacts_changes = {};
        if (dirty & /*sentReacts*/
        1)
          reacts_changes.reacts = /*sentReacts*/
          ctx2[0];
        reacts.$set(reacts_changes);
      },
      i(local) {
        if (current)
          return;
        transition_in(reacts.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(reacts.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(h2);
          detach(t1);
        }
        destroy_component(reacts, detaching);
      }
    };
  }
  function create_if_block_1(ctx) {
    let div;
    let h2;
    let t1;
    let reacts;
    let current;
    reacts = new Reacts({
      props: {
        reacts: (
          /*receivedReacts*/
          ctx[1]
        ),
        reactsOffline: (
          /*receivedReactsOffline*/
          ctx[2]
        ),
        fromUser: true,
        $$slots: {
          actionButton: [
            create_actionButton_slot,
            ({ react }) => ({ 7: react }),
            ({ react }) => react ? 128 : 0
          ]
        },
        $$scope: { ctx }
      }
    });
    return {
      c() {
        div = element("div");
        h2 = element("h2");
        h2.textContent = "收到回应及标记";
        t1 = space();
        create_component(reacts.$$.fragment);
        attr(h2, "class", "mbn svelte-1mwqdh0");
        attr(div, "class", "user-reacts svelte-1mwqdh0");
      },
      m(target, anchor) {
        insert(target, div, anchor);
        append(div, h2);
        append(div, t1);
        mount_component(reacts, div, null);
        current = true;
      },
      p(ctx2, dirty) {
        const reacts_changes = {};
        if (dirty & /*receivedReacts*/
        2)
          reacts_changes.reacts = /*receivedReacts*/
          ctx2[1];
        if (dirty & /*receivedReactsOffline*/
        4)
          reacts_changes.reactsOffline = /*receivedReactsOffline*/
          ctx2[2];
        if (dirty & /*$$scope, react*/
        384) {
          reacts_changes.$$scope = { dirty, ctx: ctx2 };
        }
        reacts.$set(reacts_changes);
      },
      i(local) {
        if (current)
          return;
        transition_in(reacts.$$.fragment, local);
        current = true;
      },
      o(local) {
        transition_out(reacts.$$.fragment, local);
        current = false;
      },
      d(detaching) {
        if (detaching) {
          detach(div);
        }
        destroy_component(reacts);
      }
    };
  }
  function create_actionButton_slot(ctx) {
    let button;
    let mounted;
    let dispose;
    function click_handler() {
      return (
        /*click_handler*/
        ctx[6](
          /*react*/
          ctx[7]
        )
      );
    }
    return {
      c() {
        button = element("button");
        button.textContent = "×";
        attr(button, "class", "action-btn remove-react-btn svelte-1mwqdh0");
      },
      m(target, anchor) {
        insert(target, button, anchor);
        if (!mounted) {
          dispose = listen(button, "click", click_handler);
          mounted = true;
        }
      },
      p(new_ctx, dirty) {
        ctx = new_ctx;
      },
      d(detaching) {
        if (detaching) {
          detach(button);
        }
        mounted = false;
        dispose();
      }
    };
  }
  function create_fragment(ctx) {
    let current_block_type_index;
    let if_block;
    let if_block_anchor;
    let current;
    const if_block_creators = [create_if_block, create_if_block_2];
    const if_blocks = [];
    function select_block_type(ctx2, dirty) {
      return 0;
    }
    if (~(current_block_type_index = select_block_type())) {
      if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx);
    }
    return {
      c() {
        if (if_block)
          if_block.c();
        if_block_anchor = empty();
      },
      m(target, anchor) {
        if (~current_block_type_index) {
          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();
        if (current_block_type_index === previous_block_index) {
          if (~current_block_type_index) {
            if_blocks[current_block_type_index].p(ctx2, 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](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);
          } 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(if_block_anchor);
        }
        if (~current_block_type_index) {
          if_blocks[current_block_type_index].d(detaching);
        }
      }
    };
  }
  function instance($$self, $$props, $$invalidate) {
    let $reactsOfflineDict;
    let $reactsDict;
    component_subscribe($$self, reactsOfflineDict, ($$value) => $$invalidate(4, $reactsOfflineDict = $$value));
    component_subscribe($$self, reactsDict, ($$value) => $$invalidate(5, $reactsDict = $$value));
    let sentReacts = [];
    let receivedReacts = [];
    let receivedReactsOffline = [];
    const onRemoveBtnClick = (react) => {
      const { pid, uid2 } = react;
      reactApiOfflineUpdatePostReacts({ pid, uid2 }, null, "", true);
    };
    const click_handler = (react) => {
      onRemoveBtnClick(react);
    };
    $$self.$$.update = () => {
      if ($$self.$$.dirty & /*$reactsDict*/
      32)
        ;
      if ($$self.$$.dirty & /*$reactsDict*/
      32)
        ;
      if ($$self.$$.dirty & /*$reactsOfflineDict*/
      16) {
        {
          const userReceivedReacts = $reactsOfflineDict.received;
          $$invalidate(2, receivedReactsOffline = userReceivedReacts || []);
        }
      }
    };
    return [
      sentReacts,
      receivedReacts,
      receivedReactsOffline,
      onRemoveBtnClick,
      $reactsOfflineDict,
      $reactsDict,
      click_handler
    ];
  }
  class UserReacts extends SvelteComponent {
    constructor(options) {
      super();
      init(this, options, instance, create_fragment, safe_not_equal, {});
    }
  }
  async function postMode() {
    const postDataList = [];
    const postElements = document.querySelectorAll("table[id^=pid]");
    postElements.forEach((postElement) => {
      const pid = extractId(postElement.id, /^pid(\d+)$/);
      if (pid === null) {
        return;
      }
      const userLinkElement = postElement.querySelector("a[href^=space-uid-]");
      if (!userLinkElement) {
        return;
      }
      const uid2 = extractId(userLinkElement.getAttribute("href") || "", /^space-uid-(\d+)\.html$/);
      if (uid2 === null) {
        return;
      }
      const positionElement = postElement.querySelector(`tr[id=_postposition${pid}]`);
      if (!positionElement) {
        return;
      }
      const avatarElement = postElement.querySelector('td.pls[rowspan="2"]');
      if (!avatarElement) {
        return;
      }
      avatarElement.setAttribute("rowspan", "3");
      const containerElement = document.createElement("tr");
      containerElement.classList.add("s1-reaction");
      containerElement.classList.add("s1-reaction-post");
      containerElement.setAttribute("data-id", String(pid));
      const mountElement = document.createElement("td");
      mountElement.classList.add("plc");
      mountElement.classList.add("plm");
      containerElement.append(mountElement);
      positionElement.before(containerElement);
      postDataList.push({
        pid,
        uid2,
        target: mountElement
      });
    });
    if (postDataList.length === 0) {
      return;
    }
    postDataList.forEach((data) => {
      new PostReacts({
        target: data.target,
        props: {
          pid: data.pid,
          uid2: data.uid2
        }
      });
    });
    new Modal({
      target: document.body
    });
    {
      const result = API.reactApiOffline.postQueryPostReacts({
        pids: postDataList.map((item) => item.pid)
      });
      const dict2 = {};
      result.forEach((item) => {
        dict2[`pid${item.pid}`] = [item.react];
      });
      reactsOfflineDict.set(dict2);
      return;
    }
  }
  async function userMode() {
    const uid2 = extractId(location.href, /\/space-uid-(\d+)\.html$/);
    if (uid2 === null) {
      return;
    }
    const positionElement = document.querySelector("div[id=psts]");
    if (!positionElement) {
      return;
    }
    const mountElement = document.createElement("div");
    mountElement.classList.add("s1-reaction");
    mountElement.classList.add("s1-reaction-user");
    mountElement.setAttribute("data-id", String(uid2));
    positionElement.parentElement.append(mountElement);
    new UserReacts({
      target: mountElement
    });
    {
      const result = API.reactApiOffline.postQueryUserReacts({
        uid2
      });
      reactsOfflineDict.set({
        received: result
      });
      return;
    }
  }
  (async () => {
    if (!await checkSmiles()) {
      return;
    }
    if (location.pathname.startsWith("/2b/space-uid-")) {
      await userMode();
    } else {
      await postMode();
    }
  })();

})();