4446 lines
		
	
	
		
			140 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			4446 lines
		
	
	
		
			140 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*
 | 
						|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
 | 
						|
if you want to view the source, please visit the github repository of this plugin
 | 
						|
*/
 | 
						|
 | 
						|
var __create = Object.create;
 | 
						|
var __defProp = Object.defineProperty;
 | 
						|
var __defProps = Object.defineProperties;
 | 
						|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
 | 
						|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
 | 
						|
var __getOwnPropNames = Object.getOwnPropertyNames;
 | 
						|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
 | 
						|
var __getProtoOf = Object.getPrototypeOf;
 | 
						|
var __hasOwnProp = Object.prototype.hasOwnProperty;
 | 
						|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
 | 
						|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
 | 
						|
var __spreadValues = (a, b) => {
 | 
						|
  for (var prop in b || (b = {}))
 | 
						|
    if (__hasOwnProp.call(b, prop))
 | 
						|
      __defNormalProp(a, prop, b[prop]);
 | 
						|
  if (__getOwnPropSymbols)
 | 
						|
    for (var prop of __getOwnPropSymbols(b)) {
 | 
						|
      if (__propIsEnum.call(b, prop))
 | 
						|
        __defNormalProp(a, prop, b[prop]);
 | 
						|
    }
 | 
						|
  return a;
 | 
						|
};
 | 
						|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
 | 
						|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
 | 
						|
var __commonJS = (cb, mod) => function __require() {
 | 
						|
  return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
 | 
						|
};
 | 
						|
var __export = (target, all) => {
 | 
						|
  __markAsModule(target);
 | 
						|
  for (var name in all)
 | 
						|
    __defProp(target, name, { get: all[name], enumerable: true });
 | 
						|
};
 | 
						|
var __reExport = (target, module2, desc) => {
 | 
						|
  if (module2 && typeof module2 === "object" || typeof module2 === "function") {
 | 
						|
    for (let key of __getOwnPropNames(module2))
 | 
						|
      if (!__hasOwnProp.call(target, key) && key !== "default")
 | 
						|
        __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
 | 
						|
  }
 | 
						|
  return target;
 | 
						|
};
 | 
						|
var __toModule = (module2) => {
 | 
						|
  return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
 | 
						|
};
 | 
						|
var __async = (__this, __arguments, generator) => {
 | 
						|
  return new Promise((resolve, reject) => {
 | 
						|
    var fulfilled = (value) => {
 | 
						|
      try {
 | 
						|
        step(generator.next(value));
 | 
						|
      } catch (e) {
 | 
						|
        reject(e);
 | 
						|
      }
 | 
						|
    };
 | 
						|
    var rejected = (value) => {
 | 
						|
      try {
 | 
						|
        step(generator.throw(value));
 | 
						|
      } catch (e) {
 | 
						|
        reject(e);
 | 
						|
      }
 | 
						|
    };
 | 
						|
    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
 | 
						|
    step((generator = generator.apply(__this, __arguments)).next());
 | 
						|
  });
 | 
						|
};
 | 
						|
 | 
						|
// node_modules/tslib/tslib.js
 | 
						|
var require_tslib = __commonJS({
 | 
						|
  "node_modules/tslib/tslib.js"(exports, module2) {
 | 
						|
    var __extends2;
 | 
						|
    var __assign2;
 | 
						|
    var __rest2;
 | 
						|
    var __decorate2;
 | 
						|
    var __param2;
 | 
						|
    var __metadata2;
 | 
						|
    var __awaiter2;
 | 
						|
    var __generator2;
 | 
						|
    var __exportStar2;
 | 
						|
    var __values2;
 | 
						|
    var __read2;
 | 
						|
    var __spread2;
 | 
						|
    var __spreadArrays2;
 | 
						|
    var __spreadArray2;
 | 
						|
    var __await2;
 | 
						|
    var __asyncGenerator2;
 | 
						|
    var __asyncDelegator2;
 | 
						|
    var __asyncValues2;
 | 
						|
    var __makeTemplateObject2;
 | 
						|
    var __importStar2;
 | 
						|
    var __importDefault2;
 | 
						|
    var __classPrivateFieldGet2;
 | 
						|
    var __classPrivateFieldSet2;
 | 
						|
    var __createBinding2;
 | 
						|
    (function(factory) {
 | 
						|
      var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
 | 
						|
      if (typeof define === "function" && define.amd) {
 | 
						|
        define("tslib", ["exports"], function(exports2) {
 | 
						|
          factory(createExporter(root, createExporter(exports2)));
 | 
						|
        });
 | 
						|
      } else if (typeof module2 === "object" && typeof module2.exports === "object") {
 | 
						|
        factory(createExporter(root, createExporter(module2.exports)));
 | 
						|
      } else {
 | 
						|
        factory(createExporter(root));
 | 
						|
      }
 | 
						|
      function createExporter(exports2, previous) {
 | 
						|
        if (exports2 !== root) {
 | 
						|
          if (typeof Object.create === "function") {
 | 
						|
            Object.defineProperty(exports2, "__esModule", { value: true });
 | 
						|
          } else {
 | 
						|
            exports2.__esModule = true;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        return function(id, v) {
 | 
						|
          return exports2[id] = previous ? previous(id, v) : v;
 | 
						|
        };
 | 
						|
      }
 | 
						|
    })(function(exporter) {
 | 
						|
      var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
 | 
						|
        d.__proto__ = b;
 | 
						|
      } || function(d, b) {
 | 
						|
        for (var p in b)
 | 
						|
          if (Object.prototype.hasOwnProperty.call(b, p))
 | 
						|
            d[p] = b[p];
 | 
						|
      };
 | 
						|
      __extends2 = function(d, b) {
 | 
						|
        if (typeof b !== "function" && b !== null)
 | 
						|
          throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
 | 
						|
        extendStatics(d, b);
 | 
						|
        function __() {
 | 
						|
          this.constructor = d;
 | 
						|
        }
 | 
						|
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 | 
						|
      };
 | 
						|
      __assign2 = Object.assign || function(t) {
 | 
						|
        for (var s, i = 1, n = arguments.length; i < n; i++) {
 | 
						|
          s = arguments[i];
 | 
						|
          for (var p in s)
 | 
						|
            if (Object.prototype.hasOwnProperty.call(s, p))
 | 
						|
              t[p] = s[p];
 | 
						|
        }
 | 
						|
        return t;
 | 
						|
      };
 | 
						|
      __rest2 = function(s, e) {
 | 
						|
        var t = {};
 | 
						|
        for (var p in s)
 | 
						|
          if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
 | 
						|
            t[p] = s[p];
 | 
						|
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
 | 
						|
          for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
 | 
						|
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
 | 
						|
              t[p[i]] = s[p[i]];
 | 
						|
          }
 | 
						|
        return t;
 | 
						|
      };
 | 
						|
      __decorate2 = function(decorators, target, key, desc) {
 | 
						|
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
						|
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
 | 
						|
          r = Reflect.decorate(decorators, target, key, desc);
 | 
						|
        else
 | 
						|
          for (var i = decorators.length - 1; i >= 0; i--)
 | 
						|
            if (d = decorators[i])
 | 
						|
              r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
						|
        return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
						|
      };
 | 
						|
      __param2 = function(paramIndex, decorator) {
 | 
						|
        return function(target, key) {
 | 
						|
          decorator(target, key, paramIndex);
 | 
						|
        };
 | 
						|
      };
 | 
						|
      __metadata2 = function(metadataKey, metadataValue) {
 | 
						|
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
 | 
						|
          return Reflect.metadata(metadataKey, metadataValue);
 | 
						|
      };
 | 
						|
      __awaiter2 = function(thisArg, _arguments, P, generator) {
 | 
						|
        function adopt(value) {
 | 
						|
          return value instanceof P ? value : new P(function(resolve) {
 | 
						|
            resolve(value);
 | 
						|
          });
 | 
						|
        }
 | 
						|
        return new (P || (P = Promise))(function(resolve, reject) {
 | 
						|
          function fulfilled(value) {
 | 
						|
            try {
 | 
						|
              step(generator.next(value));
 | 
						|
            } catch (e) {
 | 
						|
              reject(e);
 | 
						|
            }
 | 
						|
          }
 | 
						|
          function rejected(value) {
 | 
						|
            try {
 | 
						|
              step(generator["throw"](value));
 | 
						|
            } catch (e) {
 | 
						|
              reject(e);
 | 
						|
            }
 | 
						|
          }
 | 
						|
          function step(result) {
 | 
						|
            result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
 | 
						|
          }
 | 
						|
          step((generator = generator.apply(thisArg, _arguments || [])).next());
 | 
						|
        });
 | 
						|
      };
 | 
						|
      __generator2 = function(thisArg, body) {
 | 
						|
        var _ = { label: 0, sent: function() {
 | 
						|
          if (t[0] & 1)
 | 
						|
            throw t[1];
 | 
						|
          return t[1];
 | 
						|
        }, trys: [], ops: [] }, f, y, t, g;
 | 
						|
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
 | 
						|
          return this;
 | 
						|
        }), g;
 | 
						|
        function verb(n) {
 | 
						|
          return function(v) {
 | 
						|
            return step([n, v]);
 | 
						|
          };
 | 
						|
        }
 | 
						|
        function step(op) {
 | 
						|
          if (f)
 | 
						|
            throw new TypeError("Generator is already executing.");
 | 
						|
          while (_)
 | 
						|
            try {
 | 
						|
              if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
 | 
						|
                return t;
 | 
						|
              if (y = 0, t)
 | 
						|
                op = [op[0] & 2, t.value];
 | 
						|
              switch (op[0]) {
 | 
						|
                case 0:
 | 
						|
                case 1:
 | 
						|
                  t = op;
 | 
						|
                  break;
 | 
						|
                case 4:
 | 
						|
                  _.label++;
 | 
						|
                  return { value: op[1], done: false };
 | 
						|
                case 5:
 | 
						|
                  _.label++;
 | 
						|
                  y = op[1];
 | 
						|
                  op = [0];
 | 
						|
                  continue;
 | 
						|
                case 7:
 | 
						|
                  op = _.ops.pop();
 | 
						|
                  _.trys.pop();
 | 
						|
                  continue;
 | 
						|
                default:
 | 
						|
                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
 | 
						|
                    _ = 0;
 | 
						|
                    continue;
 | 
						|
                  }
 | 
						|
                  if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
 | 
						|
                    _.label = op[1];
 | 
						|
                    break;
 | 
						|
                  }
 | 
						|
                  if (op[0] === 6 && _.label < t[1]) {
 | 
						|
                    _.label = t[1];
 | 
						|
                    t = op;
 | 
						|
                    break;
 | 
						|
                  }
 | 
						|
                  if (t && _.label < t[2]) {
 | 
						|
                    _.label = t[2];
 | 
						|
                    _.ops.push(op);
 | 
						|
                    break;
 | 
						|
                  }
 | 
						|
                  if (t[2])
 | 
						|
                    _.ops.pop();
 | 
						|
                  _.trys.pop();
 | 
						|
                  continue;
 | 
						|
              }
 | 
						|
              op = body.call(thisArg, _);
 | 
						|
            } catch (e) {
 | 
						|
              op = [6, e];
 | 
						|
              y = 0;
 | 
						|
            } finally {
 | 
						|
              f = t = 0;
 | 
						|
            }
 | 
						|
          if (op[0] & 5)
 | 
						|
            throw op[1];
 | 
						|
          return { value: op[0] ? op[1] : void 0, done: true };
 | 
						|
        }
 | 
						|
      };
 | 
						|
      __exportStar2 = function(m, o) {
 | 
						|
        for (var p in m)
 | 
						|
          if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
 | 
						|
            __createBinding2(o, m, p);
 | 
						|
      };
 | 
						|
      __createBinding2 = Object.create ? function(o, m, k, k2) {
 | 
						|
        if (k2 === void 0)
 | 
						|
          k2 = k;
 | 
						|
        Object.defineProperty(o, k2, { enumerable: true, get: function() {
 | 
						|
          return m[k];
 | 
						|
        } });
 | 
						|
      } : function(o, m, k, k2) {
 | 
						|
        if (k2 === void 0)
 | 
						|
          k2 = k;
 | 
						|
        o[k2] = m[k];
 | 
						|
      };
 | 
						|
      __values2 = function(o) {
 | 
						|
        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
 | 
						|
        if (m)
 | 
						|
          return m.call(o);
 | 
						|
        if (o && typeof o.length === "number")
 | 
						|
          return {
 | 
						|
            next: function() {
 | 
						|
              if (o && i >= o.length)
 | 
						|
                o = void 0;
 | 
						|
              return { value: o && o[i++], done: !o };
 | 
						|
            }
 | 
						|
          };
 | 
						|
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
 | 
						|
      };
 | 
						|
      __read2 = function(o, n) {
 | 
						|
        var m = typeof Symbol === "function" && o[Symbol.iterator];
 | 
						|
        if (!m)
 | 
						|
          return o;
 | 
						|
        var i = m.call(o), r, ar = [], e;
 | 
						|
        try {
 | 
						|
          while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
 | 
						|
            ar.push(r.value);
 | 
						|
        } catch (error) {
 | 
						|
          e = { error };
 | 
						|
        } finally {
 | 
						|
          try {
 | 
						|
            if (r && !r.done && (m = i["return"]))
 | 
						|
              m.call(i);
 | 
						|
          } finally {
 | 
						|
            if (e)
 | 
						|
              throw e.error;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        return ar;
 | 
						|
      };
 | 
						|
      __spread2 = function() {
 | 
						|
        for (var ar = [], i = 0; i < arguments.length; i++)
 | 
						|
          ar = ar.concat(__read2(arguments[i]));
 | 
						|
        return ar;
 | 
						|
      };
 | 
						|
      __spreadArrays2 = function() {
 | 
						|
        for (var s = 0, i = 0, il = arguments.length; i < il; i++)
 | 
						|
          s += arguments[i].length;
 | 
						|
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
 | 
						|
          for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
 | 
						|
            r[k] = a[j];
 | 
						|
        return r;
 | 
						|
      };
 | 
						|
      __spreadArray2 = function(to, from, pack) {
 | 
						|
        if (pack || arguments.length === 2)
 | 
						|
          for (var i = 0, l = from.length, ar; i < l; i++) {
 | 
						|
            if (ar || !(i in from)) {
 | 
						|
              if (!ar)
 | 
						|
                ar = Array.prototype.slice.call(from, 0, i);
 | 
						|
              ar[i] = from[i];
 | 
						|
            }
 | 
						|
          }
 | 
						|
        return to.concat(ar || Array.prototype.slice.call(from));
 | 
						|
      };
 | 
						|
      __await2 = function(v) {
 | 
						|
        return this instanceof __await2 ? (this.v = v, this) : new __await2(v);
 | 
						|
      };
 | 
						|
      __asyncGenerator2 = function(thisArg, _arguments, generator) {
 | 
						|
        if (!Symbol.asyncIterator)
 | 
						|
          throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
						|
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
 | 
						|
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
 | 
						|
          return this;
 | 
						|
        }, i;
 | 
						|
        function verb(n) {
 | 
						|
          if (g[n])
 | 
						|
            i[n] = function(v) {
 | 
						|
              return new Promise(function(a, b) {
 | 
						|
                q.push([n, v, a, b]) > 1 || resume(n, v);
 | 
						|
              });
 | 
						|
            };
 | 
						|
        }
 | 
						|
        function resume(n, v) {
 | 
						|
          try {
 | 
						|
            step(g[n](v));
 | 
						|
          } catch (e) {
 | 
						|
            settle(q[0][3], e);
 | 
						|
          }
 | 
						|
        }
 | 
						|
        function step(r) {
 | 
						|
          r.value instanceof __await2 ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
 | 
						|
        }
 | 
						|
        function fulfill(value) {
 | 
						|
          resume("next", value);
 | 
						|
        }
 | 
						|
        function reject(value) {
 | 
						|
          resume("throw", value);
 | 
						|
        }
 | 
						|
        function settle(f, v) {
 | 
						|
          if (f(v), q.shift(), q.length)
 | 
						|
            resume(q[0][0], q[0][1]);
 | 
						|
        }
 | 
						|
      };
 | 
						|
      __asyncDelegator2 = function(o) {
 | 
						|
        var i, p;
 | 
						|
        return i = {}, verb("next"), verb("throw", function(e) {
 | 
						|
          throw e;
 | 
						|
        }), verb("return"), i[Symbol.iterator] = function() {
 | 
						|
          return this;
 | 
						|
        }, i;
 | 
						|
        function verb(n, f) {
 | 
						|
          i[n] = o[n] ? function(v) {
 | 
						|
            return (p = !p) ? { value: __await2(o[n](v)), done: n === "return" } : f ? f(v) : v;
 | 
						|
          } : f;
 | 
						|
        }
 | 
						|
      };
 | 
						|
      __asyncValues2 = function(o) {
 | 
						|
        if (!Symbol.asyncIterator)
 | 
						|
          throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
						|
        var m = o[Symbol.asyncIterator], i;
 | 
						|
        return m ? m.call(o) : (o = typeof __values2 === "function" ? __values2(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
 | 
						|
          return this;
 | 
						|
        }, i);
 | 
						|
        function verb(n) {
 | 
						|
          i[n] = o[n] && function(v) {
 | 
						|
            return new Promise(function(resolve, reject) {
 | 
						|
              v = o[n](v), settle(resolve, reject, v.done, v.value);
 | 
						|
            });
 | 
						|
          };
 | 
						|
        }
 | 
						|
        function settle(resolve, reject, d, v) {
 | 
						|
          Promise.resolve(v).then(function(v2) {
 | 
						|
            resolve({ value: v2, done: d });
 | 
						|
          }, reject);
 | 
						|
        }
 | 
						|
      };
 | 
						|
      __makeTemplateObject2 = function(cooked, raw) {
 | 
						|
        if (Object.defineProperty) {
 | 
						|
          Object.defineProperty(cooked, "raw", { value: raw });
 | 
						|
        } else {
 | 
						|
          cooked.raw = raw;
 | 
						|
        }
 | 
						|
        return cooked;
 | 
						|
      };
 | 
						|
      var __setModuleDefault = Object.create ? function(o, v) {
 | 
						|
        Object.defineProperty(o, "default", { enumerable: true, value: v });
 | 
						|
      } : function(o, v) {
 | 
						|
        o["default"] = v;
 | 
						|
      };
 | 
						|
      __importStar2 = function(mod) {
 | 
						|
        if (mod && mod.__esModule)
 | 
						|
          return mod;
 | 
						|
        var result = {};
 | 
						|
        if (mod != null) {
 | 
						|
          for (var k in mod)
 | 
						|
            if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
 | 
						|
              __createBinding2(result, mod, k);
 | 
						|
        }
 | 
						|
        __setModuleDefault(result, mod);
 | 
						|
        return result;
 | 
						|
      };
 | 
						|
      __importDefault2 = function(mod) {
 | 
						|
        return mod && mod.__esModule ? mod : { "default": mod };
 | 
						|
      };
 | 
						|
      __classPrivateFieldGet2 = function(receiver, state, kind, f) {
 | 
						|
        if (kind === "a" && !f)
 | 
						|
          throw new TypeError("Private accessor was defined without a getter");
 | 
						|
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
 | 
						|
          throw new TypeError("Cannot read private member from an object whose class did not declare it");
 | 
						|
        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
 | 
						|
      };
 | 
						|
      __classPrivateFieldSet2 = function(receiver, state, value, kind, f) {
 | 
						|
        if (kind === "m")
 | 
						|
          throw new TypeError("Private method is not writable");
 | 
						|
        if (kind === "a" && !f)
 | 
						|
          throw new TypeError("Private accessor was defined without a setter");
 | 
						|
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
 | 
						|
          throw new TypeError("Cannot write private member to an object whose class did not declare it");
 | 
						|
        return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
 | 
						|
      };
 | 
						|
      exporter("__extends", __extends2);
 | 
						|
      exporter("__assign", __assign2);
 | 
						|
      exporter("__rest", __rest2);
 | 
						|
      exporter("__decorate", __decorate2);
 | 
						|
      exporter("__param", __param2);
 | 
						|
      exporter("__metadata", __metadata2);
 | 
						|
      exporter("__awaiter", __awaiter2);
 | 
						|
      exporter("__generator", __generator2);
 | 
						|
      exporter("__exportStar", __exportStar2);
 | 
						|
      exporter("__createBinding", __createBinding2);
 | 
						|
      exporter("__values", __values2);
 | 
						|
      exporter("__read", __read2);
 | 
						|
      exporter("__spread", __spread2);
 | 
						|
      exporter("__spreadArrays", __spreadArrays2);
 | 
						|
      exporter("__spreadArray", __spreadArray2);
 | 
						|
      exporter("__await", __await2);
 | 
						|
      exporter("__asyncGenerator", __asyncGenerator2);
 | 
						|
      exporter("__asyncDelegator", __asyncDelegator2);
 | 
						|
      exporter("__asyncValues", __asyncValues2);
 | 
						|
      exporter("__makeTemplateObject", __makeTemplateObject2);
 | 
						|
      exporter("__importStar", __importStar2);
 | 
						|
      exporter("__importDefault", __importDefault2);
 | 
						|
      exporter("__classPrivateFieldGet", __classPrivateFieldGet2);
 | 
						|
      exporter("__classPrivateFieldSet", __classPrivateFieldSet2);
 | 
						|
    });
 | 
						|
  }
 | 
						|
});
 | 
						|
 | 
						|
// src/main.ts
 | 
						|
__export(exports, {
 | 
						|
  default: () => CoreSearchAssistantPlugin
 | 
						|
});
 | 
						|
 | 
						|
// src/Events.ts
 | 
						|
var import_obsidian = __toModule(require("obsidian"));
 | 
						|
var EVENT_SEARCH_RESULT_ITEM_DETECTED = "search-result-item-detected";
 | 
						|
var EVENT_SORT_ORDER_CHANGED = "sort-order-changed";
 | 
						|
var CoreSearchAssistantEvents = class extends import_obsidian.Events {
 | 
						|
  trigger(name, ...data) {
 | 
						|
    super.trigger(name, ...data);
 | 
						|
  }
 | 
						|
  on(name, callback, ctx) {
 | 
						|
    return super.on(name, callback, ctx);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/Controller.ts
 | 
						|
var obsidian = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/components/OptionModal.ts
 | 
						|
var import_obsidian2 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/types/Option.ts
 | 
						|
var searchOptions = {
 | 
						|
  matchingCase: {
 | 
						|
    iconId: "uppercase-lowercase-a",
 | 
						|
    description: "Toggle matching case"
 | 
						|
  },
 | 
						|
  explainSearch: {
 | 
						|
    iconId: "info",
 | 
						|
    description: "Toggle explanation of search term"
 | 
						|
  },
 | 
						|
  collapseAll: {
 | 
						|
    iconId: "bullet-list",
 | 
						|
    description: "Toggle collapsing results"
 | 
						|
  },
 | 
						|
  extraContext: {
 | 
						|
    iconId: "expand-vertically",
 | 
						|
    description: "Toggle showing more context"
 | 
						|
  },
 | 
						|
  alphabetical: {
 | 
						|
    iconId: "down-arrow-with-tail",
 | 
						|
    description: "Sort by file name (A \u2192 Z)"
 | 
						|
  },
 | 
						|
  alphabeticalReverse: {
 | 
						|
    iconId: "up-arrow-with-tail",
 | 
						|
    description: "Sort by file name (Z \u2192 A)"
 | 
						|
  },
 | 
						|
  byModifiedTime: {
 | 
						|
    iconId: "down-arrow-with-tail",
 | 
						|
    description: "Sort by modified time (new \u2192 old)"
 | 
						|
  },
 | 
						|
  byModifiedTimeReverse: {
 | 
						|
    iconId: "up-arrow-with-tail",
 | 
						|
    description: "Sort by modified time (old \u2192 new)"
 | 
						|
  },
 | 
						|
  byCreatedTime: {
 | 
						|
    iconId: "down-arrow-with-tail",
 | 
						|
    description: "Sort by created time (new \u2192 old)"
 | 
						|
  },
 | 
						|
  byCreatedTimeReverse: {
 | 
						|
    iconId: "up-arrow-with-tail",
 | 
						|
    description: "Sort by created time (old \u2192 new)"
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/components/OptionModal.ts
 | 
						|
var OptionModal = class extends import_obsidian2.Modal {
 | 
						|
  constructor(app2, plugin2, modeScope) {
 | 
						|
    super(app2);
 | 
						|
    this.plugin = plugin2;
 | 
						|
    this.modeScope = modeScope;
 | 
						|
    this.items = [
 | 
						|
      {
 | 
						|
        id: "matchingCase",
 | 
						|
        key: "a",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          (_a = this.plugin.searchInterface) == null ? void 0 : _a.toggleMatchingCase();
 | 
						|
          (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
          (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "explainSearch",
 | 
						|
        key: "s",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a;
 | 
						|
          (_a = this.plugin.searchInterface) == null ? void 0 : _a.toggleExplainSearch();
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "collapseAll",
 | 
						|
        key: "d",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a;
 | 
						|
          (_a = this.plugin.searchInterface) == null ? void 0 : _a.toggleCollapseAll();
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "extraContext",
 | 
						|
        key: "f",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a;
 | 
						|
          (_a = this.plugin.searchInterface) == null ? void 0 : _a.toggleExtraContext();
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "alphabetical",
 | 
						|
        key: "g",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("alphabetical");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "alphabeticalReverse",
 | 
						|
        key: "h",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("alphabeticalReverse");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "byModifiedTime",
 | 
						|
        key: "j",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("byModifiedTime");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "byModifiedTimeReverse",
 | 
						|
        key: "k",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("byModifiedTimeReverse");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "byCreatedTime",
 | 
						|
        key: "l",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("byCreatedTime");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        id: "byCreatedTimeReverse",
 | 
						|
        key: ";",
 | 
						|
        onChoose: () => {
 | 
						|
          var _a, _b, _c;
 | 
						|
          const changed = (_a = this.plugin.searchInterface) == null ? void 0 : _a.setSortOrder("byCreatedTimeReverse");
 | 
						|
          if (changed) {
 | 
						|
            (_b = this.plugin.searchInterface) == null ? void 0 : _b.renewSortOrderInfo();
 | 
						|
            (_c = this.plugin.controller) == null ? void 0 : _c.reset();
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    ];
 | 
						|
  }
 | 
						|
  onOpen() {
 | 
						|
    this.modeScope.push();
 | 
						|
    this.items.forEach((item) => {
 | 
						|
      this.scope.register([], item.key, item.onChoose);
 | 
						|
    });
 | 
						|
    this.renderOptions();
 | 
						|
  }
 | 
						|
  onClose() {
 | 
						|
    const { containerEl } = this;
 | 
						|
    containerEl.empty();
 | 
						|
    setTimeout(() => this.modeScope.pop(), 100);
 | 
						|
  }
 | 
						|
  renderOptions() {
 | 
						|
    const { contentEl } = this;
 | 
						|
    contentEl.empty();
 | 
						|
    this.containerEl.addClass("core-search-assistant_option-modal");
 | 
						|
    this.items.forEach((item) => {
 | 
						|
      const entryEl = contentEl.createEl("div", {
 | 
						|
        cls: "suggestion-item"
 | 
						|
      });
 | 
						|
      const iconEl = entryEl.createEl("span", {
 | 
						|
        cls: "suggestion-icon"
 | 
						|
      });
 | 
						|
      (0, import_obsidian2.setIcon)(iconEl, searchOptions[item.id].iconId);
 | 
						|
      entryEl.createEl("span", {
 | 
						|
        text: searchOptions[item.id].description,
 | 
						|
        cls: "suggestion-content"
 | 
						|
      });
 | 
						|
      entryEl.createEl("kbd", {
 | 
						|
        text: item.key.toUpperCase(),
 | 
						|
        cls: "suggestion-hotkey"
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/Setting.ts
 | 
						|
var import_obsidian7 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/ui/HotkeySetter.ts
 | 
						|
var import_obsidian6 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// node_modules/svelte/internal/index.mjs
 | 
						|
function noop() {
 | 
						|
}
 | 
						|
function run(fn) {
 | 
						|
  return fn();
 | 
						|
}
 | 
						|
function blank_object() {
 | 
						|
  return Object.create(null);
 | 
						|
}
 | 
						|
function run_all(fns) {
 | 
						|
  fns.forEach(run);
 | 
						|
}
 | 
						|
function is_function(thing) {
 | 
						|
  return typeof thing === "function";
 | 
						|
}
 | 
						|
function safe_not_equal(a, b) {
 | 
						|
  return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
 | 
						|
}
 | 
						|
function is_empty(obj) {
 | 
						|
  return Object.keys(obj).length === 0;
 | 
						|
}
 | 
						|
function subscribe(store2, ...callbacks) {
 | 
						|
  if (store2 == null) {
 | 
						|
    return noop;
 | 
						|
  }
 | 
						|
  const unsub = store2.subscribe(...callbacks);
 | 
						|
  return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
 | 
						|
}
 | 
						|
function component_subscribe(component, store2, callback) {
 | 
						|
  component.$$.on_destroy.push(subscribe(store2, callback));
 | 
						|
}
 | 
						|
var tasks = new Set();
 | 
						|
var is_hydrating = false;
 | 
						|
function start_hydrating() {
 | 
						|
  is_hydrating = true;
 | 
						|
}
 | 
						|
function end_hydrating() {
 | 
						|
  is_hydrating = false;
 | 
						|
}
 | 
						|
function append(target, node) {
 | 
						|
  target.appendChild(node);
 | 
						|
}
 | 
						|
function append_styles(target, style_sheet_id, styles) {
 | 
						|
  const append_styles_to = get_root_for_style(target);
 | 
						|
  if (!append_styles_to.getElementById(style_sheet_id)) {
 | 
						|
    const style = element("style");
 | 
						|
    style.id = style_sheet_id;
 | 
						|
    style.textContent = styles;
 | 
						|
    append_stylesheet(append_styles_to, style);
 | 
						|
  }
 | 
						|
}
 | 
						|
function get_root_for_style(node) {
 | 
						|
  if (!node)
 | 
						|
    return document;
 | 
						|
  const root = node.getRootNode ? node.getRootNode() : node.ownerDocument;
 | 
						|
  if (root && root.host) {
 | 
						|
    return root;
 | 
						|
  }
 | 
						|
  return node.ownerDocument;
 | 
						|
}
 | 
						|
function append_stylesheet(node, style) {
 | 
						|
  append(node.head || node, style);
 | 
						|
}
 | 
						|
function insert(target, node, anchor) {
 | 
						|
  target.insertBefore(node, anchor || null);
 | 
						|
}
 | 
						|
function detach(node) {
 | 
						|
  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 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 children(element2) {
 | 
						|
  return Array.from(element2.childNodes);
 | 
						|
}
 | 
						|
function set_data(text2, data) {
 | 
						|
  data = "" + data;
 | 
						|
  if (text2.wholeText !== data)
 | 
						|
    text2.data = data;
 | 
						|
}
 | 
						|
function toggle_class(element2, name, toggle) {
 | 
						|
  element2.classList[toggle ? "add" : "remove"](name);
 | 
						|
}
 | 
						|
function custom_event(type, detail, bubbles = false) {
 | 
						|
  const e = document.createEvent("CustomEvent");
 | 
						|
  e.initCustomEvent(type, bubbles, false, detail);
 | 
						|
  return e;
 | 
						|
}
 | 
						|
var managed_styles = new Map();
 | 
						|
var current_component;
 | 
						|
function set_current_component(component) {
 | 
						|
  current_component = component;
 | 
						|
}
 | 
						|
function get_current_component() {
 | 
						|
  if (!current_component)
 | 
						|
    throw new Error("Function called outside component initialization");
 | 
						|
  return current_component;
 | 
						|
}
 | 
						|
function onMount(fn) {
 | 
						|
  get_current_component().$$.on_mount.push(fn);
 | 
						|
}
 | 
						|
function onDestroy(fn) {
 | 
						|
  get_current_component().$$.on_destroy.push(fn);
 | 
						|
}
 | 
						|
function createEventDispatcher() {
 | 
						|
  const component = get_current_component();
 | 
						|
  return (type, detail) => {
 | 
						|
    const callbacks = component.$$.callbacks[type];
 | 
						|
    if (callbacks) {
 | 
						|
      const event = custom_event(type, detail);
 | 
						|
      callbacks.slice().forEach((fn) => {
 | 
						|
        fn.call(component, event);
 | 
						|
      });
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
var dirty_components = [];
 | 
						|
var binding_callbacks = [];
 | 
						|
var render_callbacks = [];
 | 
						|
var flush_callbacks = [];
 | 
						|
var resolved_promise = Promise.resolve();
 | 
						|
var update_scheduled = false;
 | 
						|
function schedule_update() {
 | 
						|
  if (!update_scheduled) {
 | 
						|
    update_scheduled = true;
 | 
						|
    resolved_promise.then(flush);
 | 
						|
  }
 | 
						|
}
 | 
						|
function add_render_callback(fn) {
 | 
						|
  render_callbacks.push(fn);
 | 
						|
}
 | 
						|
var seen_callbacks = new Set();
 | 
						|
var flushidx = 0;
 | 
						|
function flush() {
 | 
						|
  const saved_component = current_component;
 | 
						|
  do {
 | 
						|
    while (flushidx < dirty_components.length) {
 | 
						|
      const component = dirty_components[flushidx];
 | 
						|
      flushidx++;
 | 
						|
      set_current_component(component);
 | 
						|
      update(component.$$);
 | 
						|
    }
 | 
						|
    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);
 | 
						|
  }
 | 
						|
}
 | 
						|
var outroing = new Set();
 | 
						|
var outros;
 | 
						|
function group_outros() {
 | 
						|
  outros = {
 | 
						|
    r: 0,
 | 
						|
    c: [],
 | 
						|
    p: outros
 | 
						|
  };
 | 
						|
}
 | 
						|
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);
 | 
						|
  }
 | 
						|
}
 | 
						|
var globals = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : global;
 | 
						|
var boolean_attributes = new Set([
 | 
						|
  "allowfullscreen",
 | 
						|
  "allowpaymentrequest",
 | 
						|
  "async",
 | 
						|
  "autofocus",
 | 
						|
  "autoplay",
 | 
						|
  "checked",
 | 
						|
  "controls",
 | 
						|
  "default",
 | 
						|
  "defer",
 | 
						|
  "disabled",
 | 
						|
  "formnovalidate",
 | 
						|
  "hidden",
 | 
						|
  "ismap",
 | 
						|
  "loop",
 | 
						|
  "multiple",
 | 
						|
  "muted",
 | 
						|
  "nomodule",
 | 
						|
  "novalidate",
 | 
						|
  "open",
 | 
						|
  "playsinline",
 | 
						|
  "readonly",
 | 
						|
  "required",
 | 
						|
  "reversed",
 | 
						|
  "selected"
 | 
						|
]);
 | 
						|
function create_component(block) {
 | 
						|
  block && block.c();
 | 
						|
}
 | 
						|
function mount_component(component, target, anchor, customElement) {
 | 
						|
  const { fragment, on_mount, on_destroy, after_update } = component.$$;
 | 
						|
  fragment && fragment.m(target, anchor);
 | 
						|
  if (!customElement) {
 | 
						|
    add_render_callback(() => {
 | 
						|
      const new_on_destroy = on_mount.map(run).filter(is_function);
 | 
						|
      if (on_destroy) {
 | 
						|
        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) {
 | 
						|
    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, instance8, create_fragment8, not_equal, props, append_styles2, dirty = [-1]) {
 | 
						|
  const parent_component = current_component;
 | 
						|
  set_current_component(component);
 | 
						|
  const $$ = component.$$ = {
 | 
						|
    fragment: null,
 | 
						|
    ctx: null,
 | 
						|
    props,
 | 
						|
    update: noop,
 | 
						|
    not_equal,
 | 
						|
    bound: blank_object(),
 | 
						|
    on_mount: [],
 | 
						|
    on_destroy: [],
 | 
						|
    on_disconnect: [],
 | 
						|
    before_update: [],
 | 
						|
    after_update: [],
 | 
						|
    context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
 | 
						|
    callbacks: blank_object(),
 | 
						|
    dirty,
 | 
						|
    skip_bound: false,
 | 
						|
    root: options.target || parent_component.$$.root
 | 
						|
  };
 | 
						|
  append_styles2 && append_styles2($$.root);
 | 
						|
  let ready = false;
 | 
						|
  $$.ctx = instance8 ? instance8(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_fragment8 ? create_fragment8($$.ctx) : false;
 | 
						|
  if (options.target) {
 | 
						|
    if (options.hydrate) {
 | 
						|
      start_hydrating();
 | 
						|
      const nodes = children(options.target);
 | 
						|
      $$.fragment && $$.fragment.l(nodes);
 | 
						|
      nodes.forEach(detach);
 | 
						|
    } else {
 | 
						|
      $$.fragment && $$.fragment.c();
 | 
						|
    }
 | 
						|
    if (options.intro)
 | 
						|
      transition_in(component.$$.fragment);
 | 
						|
    mount_component(component, options.target, options.anchor, options.customElement);
 | 
						|
    end_hydrating();
 | 
						|
    flush();
 | 
						|
  }
 | 
						|
  set_current_component(parent_component);
 | 
						|
}
 | 
						|
var SvelteElement;
 | 
						|
if (typeof HTMLElement === "function") {
 | 
						|
  SvelteElement = class extends HTMLElement {
 | 
						|
    constructor() {
 | 
						|
      super();
 | 
						|
      this.attachShadow({ mode: "open" });
 | 
						|
    }
 | 
						|
    connectedCallback() {
 | 
						|
      const { on_mount } = this.$$;
 | 
						|
      this.$$.on_disconnect = on_mount.map(run).filter(is_function);
 | 
						|
      for (const key in this.$$.slotted) {
 | 
						|
        this.appendChild(this.$$.slotted[key]);
 | 
						|
      }
 | 
						|
    }
 | 
						|
    attributeChangedCallback(attr2, _oldValue, newValue) {
 | 
						|
      this[attr2] = newValue;
 | 
						|
    }
 | 
						|
    disconnectedCallback() {
 | 
						|
      run_all(this.$$.on_disconnect);
 | 
						|
    }
 | 
						|
    $destroy() {
 | 
						|
      destroy_component(this, 1);
 | 
						|
      this.$destroy = noop;
 | 
						|
    }
 | 
						|
    $on(type, callback) {
 | 
						|
      const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
 | 
						|
      callbacks.push(callback);
 | 
						|
      return () => {
 | 
						|
        const index = callbacks.indexOf(callback);
 | 
						|
        if (index !== -1)
 | 
						|
          callbacks.splice(index, 1);
 | 
						|
      };
 | 
						|
    }
 | 
						|
    $set($$props) {
 | 
						|
      if (this.$$set && !is_empty($$props)) {
 | 
						|
        this.$$.skip_bound = true;
 | 
						|
        this.$$set($$props);
 | 
						|
        this.$$.skip_bound = false;
 | 
						|
      }
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
var SvelteComponent = class {
 | 
						|
  $destroy() {
 | 
						|
    destroy_component(this, 1);
 | 
						|
    this.$destroy = noop;
 | 
						|
  }
 | 
						|
  $on(type, callback) {
 | 
						|
    const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
 | 
						|
    callbacks.push(callback);
 | 
						|
    return () => {
 | 
						|
      const index = callbacks.indexOf(callback);
 | 
						|
      if (index !== -1)
 | 
						|
        callbacks.splice(index, 1);
 | 
						|
    };
 | 
						|
  }
 | 
						|
  $set($$props) {
 | 
						|
    if (this.$$set && !is_empty($$props)) {
 | 
						|
      this.$$.skip_bound = true;
 | 
						|
      this.$$set($$props);
 | 
						|
      this.$$.skip_bound = false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/ui/HotkeyEntry.svelte
 | 
						|
var import_obsidian5 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/ui/HotkeySetting.svelte
 | 
						|
var import_obsidian4 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/utils/Keymap.ts
 | 
						|
var import_obsidian3 = __toModule(require("obsidian"));
 | 
						|
var CODE_KEY_MAP = {
 | 
						|
  Semicolon: ";",
 | 
						|
  Quote: "'",
 | 
						|
  Comma: ",",
 | 
						|
  Period: ".",
 | 
						|
  Slash: "/",
 | 
						|
  BracketLeft: "[",
 | 
						|
  BracketRight: "]",
 | 
						|
  BackSlash: "\\",
 | 
						|
  Backquote: "`",
 | 
						|
  Space: " ",
 | 
						|
  Minus: "-",
 | 
						|
  Equal: "="
 | 
						|
};
 | 
						|
for (let i = 0; i < 10; i++) {
 | 
						|
  CODE_KEY_MAP[`Digit${i}`] = i.toString();
 | 
						|
}
 | 
						|
for (let i = 65; i < 91; i++) {
 | 
						|
  const char = String.fromCharCode(i);
 | 
						|
  const upChar = char.toUpperCase();
 | 
						|
  CODE_KEY_MAP[`Key${upChar}`] = char;
 | 
						|
}
 | 
						|
function convertCodeToKey(code) {
 | 
						|
  var _a;
 | 
						|
  return (_a = CODE_KEY_MAP[code]) != null ? _a : code;
 | 
						|
}
 | 
						|
function convertKeyToText(key) {
 | 
						|
  switch (key) {
 | 
						|
    case "ArrowLeft":
 | 
						|
      return "\u2190";
 | 
						|
    case "ArrowRight":
 | 
						|
      return "\u2192";
 | 
						|
    case "ArrowUp":
 | 
						|
      return "\u2191";
 | 
						|
    case "ArrowDown":
 | 
						|
      return "\u2193";
 | 
						|
    case "Mod":
 | 
						|
      return import_obsidian3.Platform.isMacOS ? "\u2318" : "Ctrl";
 | 
						|
    case "Ctrl":
 | 
						|
      return import_obsidian3.Platform.isMacOS ? "\u2303" : "Ctrl";
 | 
						|
    case "Meta":
 | 
						|
      return import_obsidian3.Platform.isMacOS ? "\u2318" : "Win";
 | 
						|
    case "Alt":
 | 
						|
      return import_obsidian3.Platform.isMacOS ? "\u2325" : "Alt";
 | 
						|
    case "Shift":
 | 
						|
      return import_obsidian3.Platform.isMacOS ? "\u21E7" : "Shift";
 | 
						|
    case " ":
 | 
						|
      return "Space";
 | 
						|
    case "Enter":
 | 
						|
      return "\u21B5";
 | 
						|
    default:
 | 
						|
      return key.charAt(0).toUpperCase() + key.slice(1);
 | 
						|
  }
 | 
						|
}
 | 
						|
function convertHotkeyToText(hotkey) {
 | 
						|
  const parts = [];
 | 
						|
  hotkey.modifiers.forEach((mod) => {
 | 
						|
    parts.push(convertKeyToText(mod));
 | 
						|
  });
 | 
						|
  const modifierPart = parts.join(" ");
 | 
						|
  const keyPart = convertKeyToText(hotkey.key);
 | 
						|
  return ` ${modifierPart} ${keyPart} `;
 | 
						|
}
 | 
						|
function compileModifiers(modifiers) {
 | 
						|
  return modifiers.map((modifier) => {
 | 
						|
    return modifier === "Mod" ? import_obsidian3.Platform.isMacOS ? "Meta" : "Ctrl" : modifier;
 | 
						|
  }).sort().join(",");
 | 
						|
}
 | 
						|
function decompileModifiers(modifiersId) {
 | 
						|
  const modifiers = [];
 | 
						|
  const parts = modifiersId.split(",");
 | 
						|
  parts.forEach((s) => {
 | 
						|
    if (import_obsidian3.Platform.isMacOS && s === "Meta" || !import_obsidian3.Platform.isMacOS && s === "Ctrl") {
 | 
						|
      modifiers.push("Mod");
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    if (s === "Alt" || s === "Shift" || s === "Meta" || s === "Ctrl") {
 | 
						|
      modifiers.push(s);
 | 
						|
      return;
 | 
						|
    }
 | 
						|
  });
 | 
						|
  return modifiers;
 | 
						|
}
 | 
						|
function getModifiers(evt) {
 | 
						|
  const modifiers = [];
 | 
						|
  evt.ctrlKey && modifiers.push("Ctrl");
 | 
						|
  evt.metaKey && modifiers.push("Meta");
 | 
						|
  evt.altKey && modifiers.push("Alt");
 | 
						|
  evt.shiftKey && modifiers.push("Shift");
 | 
						|
  return compileModifiers(modifiers);
 | 
						|
}
 | 
						|
function getHotkey(evt) {
 | 
						|
  const modifiers = decompileModifiers(getModifiers(evt));
 | 
						|
  const key = convertCodeToKey(evt.code);
 | 
						|
  return {
 | 
						|
    modifiers,
 | 
						|
    key
 | 
						|
  };
 | 
						|
}
 | 
						|
function contain(hotkeys, hotkey) {
 | 
						|
  const hotkeyId = convertHotkeyToText(hotkey);
 | 
						|
  return hotkeys.some((key) => {
 | 
						|
    return hotkeyId === convertHotkeyToText(key);
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
// src/ui/HotkeySetting.svelte
 | 
						|
function add_css(target) {
 | 
						|
  append_styles(target, "svelte-2wacg2", ".icon-container.svelte-2wacg2{display:inline-block;cursor:pointer;width:16px;height:16px;border-radius:10px;line-height:16px;text-align:center}.icon-container.svelte-2wacg2:hover{background-color:var(--background-modifier-error);color:var(--text-on-accent)}.setting-hotkey.svelte-2wacg2{font-size:12px;background-color:var(--background-secondary-alt);border-radius:4px;padding:0 10px;min-height:24px;align-self:flex-end;position:relative}");
 | 
						|
}
 | 
						|
function create_fragment(ctx) {
 | 
						|
  let span1;
 | 
						|
  let t0_value = convertHotkeyToText(ctx[0]) + "";
 | 
						|
  let t0;
 | 
						|
  let t1;
 | 
						|
  let span0;
 | 
						|
  let mounted;
 | 
						|
  let dispose;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      span1 = element("span");
 | 
						|
      t0 = text(t0_value);
 | 
						|
      t1 = space();
 | 
						|
      span0 = element("span");
 | 
						|
      attr(span0, "class", "icon-container svelte-2wacg2");
 | 
						|
      attr(span1, "class", "setting-hotkey svelte-2wacg2");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, span1, anchor);
 | 
						|
      append(span1, t0);
 | 
						|
      append(span1, t1);
 | 
						|
      append(span1, span0);
 | 
						|
      ctx[3](span0);
 | 
						|
      if (!mounted) {
 | 
						|
        dispose = listen(span0, "click", ctx[2]);
 | 
						|
        mounted = true;
 | 
						|
      }
 | 
						|
    },
 | 
						|
    p(ctx2, [dirty]) {
 | 
						|
      if (dirty & 1 && t0_value !== (t0_value = convertHotkeyToText(ctx2[0]) + ""))
 | 
						|
        set_data(t0, t0_value);
 | 
						|
    },
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(span1);
 | 
						|
      ctx[3](null);
 | 
						|
      mounted = false;
 | 
						|
      dispose();
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function instance($$self, $$props, $$invalidate) {
 | 
						|
  let { hotkey } = $$props;
 | 
						|
  let iconContainerEl;
 | 
						|
  const dispatcher = createEventDispatcher();
 | 
						|
  onMount(() => {
 | 
						|
    if (iconContainerEl instanceof HTMLSpanElement) {
 | 
						|
      (0, import_obsidian4.setIcon)(iconContainerEl, "cross", 8);
 | 
						|
    }
 | 
						|
  });
 | 
						|
  function onIconClicked() {
 | 
						|
    dispatcher("removed");
 | 
						|
  }
 | 
						|
  function span0_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      iconContainerEl = $$value;
 | 
						|
      $$invalidate(1, iconContainerEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("hotkey" in $$props2)
 | 
						|
      $$invalidate(0, hotkey = $$props2.hotkey);
 | 
						|
  };
 | 
						|
  return [hotkey, iconContainerEl, onIconClicked, span0_binding];
 | 
						|
}
 | 
						|
var HotkeySetting = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance, create_fragment, safe_not_equal, { hotkey: 0 }, add_css);
 | 
						|
  }
 | 
						|
};
 | 
						|
var HotkeySetting_default = HotkeySetting;
 | 
						|
 | 
						|
// src/ui/HotkeyEntry.svelte
 | 
						|
function add_css2(target) {
 | 
						|
  append_styles(target, "svelte-1my40ui", ".item-container.svelte-1my40ui{display:flex;align-items:center;padding:18px 0 18px 0;border-top:1px solid var(--background-modifier-border)}.info-container.svelte-1my40ui{flex:1 1 auto;flex-grow:1;margin-right:20px}.control-container.svelte-1my40ui{flex:1 1 auto;text-align:right;display:flex;justify-content:flex-end;align-items:center}.hotkeys-container.svelte-1my40ui{display:flex;flex-direction:column;margin-right:6px}.setting-hotkey.svelte-1my40ui{font-size:12px;background-color:var(--interactive-accent);border-radius:4px;padding:0 10px;min-height:24px;align-self:flex-end;position:relative;color:var(--text-on-accent)}.icon-container.svelte-1my40ui{padding:4px 6px;border-radius:4px;color:var(--text-faint);cursor:pointer;height:26px}.icon-container.svelte-1my40ui:hover{background-color:var(--background-secondary-alt);color:var(--text-normal)}.icon-container.svelte-1my40ui .clickable-icon{color:unset;cursor:unset;margin:unset}.icon-container.svelte-1my40ui .setting-editor-extra-setting-button{line-height:0}.icon-container.svelte-1my40ui .clickable-icon svg{position:relative;bottom:2px}");
 | 
						|
}
 | 
						|
function get_each_context(ctx, list, i) {
 | 
						|
  const child_ctx = ctx.slice();
 | 
						|
  child_ctx[13] = list[i];
 | 
						|
  return child_ctx;
 | 
						|
}
 | 
						|
function create_each_block(ctx) {
 | 
						|
  let hotkeysetting;
 | 
						|
  let current;
 | 
						|
  function removed_handler() {
 | 
						|
    return ctx[8](ctx[13]);
 | 
						|
  }
 | 
						|
  hotkeysetting = new HotkeySetting_default({ props: { hotkey: ctx[13] } });
 | 
						|
  hotkeysetting.$on("removed", removed_handler);
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      create_component(hotkeysetting.$$.fragment);
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      mount_component(hotkeysetting, target, anchor);
 | 
						|
      current = true;
 | 
						|
    },
 | 
						|
    p(new_ctx, dirty) {
 | 
						|
      ctx = new_ctx;
 | 
						|
      const hotkeysetting_changes = {};
 | 
						|
      if (dirty & 16)
 | 
						|
        hotkeysetting_changes.hotkey = ctx[13];
 | 
						|
      hotkeysetting.$set(hotkeysetting_changes);
 | 
						|
    },
 | 
						|
    i(local) {
 | 
						|
      if (current)
 | 
						|
        return;
 | 
						|
      transition_in(hotkeysetting.$$.fragment, local);
 | 
						|
      current = true;
 | 
						|
    },
 | 
						|
    o(local) {
 | 
						|
      transition_out(hotkeysetting.$$.fragment, local);
 | 
						|
      current = false;
 | 
						|
    },
 | 
						|
    d(detaching) {
 | 
						|
      destroy_component(hotkeysetting, detaching);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function create_if_block(ctx) {
 | 
						|
  let div;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div = element("div");
 | 
						|
      div.textContent = "Press hotkey...";
 | 
						|
      attr(div, "class", "setting-hotkey svelte-1my40ui");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div, anchor);
 | 
						|
    },
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function create_fragment2(ctx) {
 | 
						|
  var _a;
 | 
						|
  let div3;
 | 
						|
  let div0;
 | 
						|
  let t0;
 | 
						|
  let t1;
 | 
						|
  let div2;
 | 
						|
  let div1;
 | 
						|
  let t2;
 | 
						|
  let t3;
 | 
						|
  let span0;
 | 
						|
  let t4;
 | 
						|
  let span1;
 | 
						|
  let current;
 | 
						|
  let mounted;
 | 
						|
  let dispose;
 | 
						|
  let each_value = (_a = ctx[4]) != null ? _a : [];
 | 
						|
  let each_blocks = [];
 | 
						|
  for (let i = 0; i < each_value.length; i += 1) {
 | 
						|
    each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i));
 | 
						|
  }
 | 
						|
  const out = (i) => transition_out(each_blocks[i], 1, 1, () => {
 | 
						|
    each_blocks[i] = null;
 | 
						|
  });
 | 
						|
  let if_block = ctx[3] && create_if_block(ctx);
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div3 = element("div");
 | 
						|
      div0 = element("div");
 | 
						|
      t0 = text(ctx[0]);
 | 
						|
      t1 = space();
 | 
						|
      div2 = element("div");
 | 
						|
      div1 = element("div");
 | 
						|
      for (let i = 0; i < each_blocks.length; i += 1) {
 | 
						|
        each_blocks[i].c();
 | 
						|
      }
 | 
						|
      t2 = space();
 | 
						|
      if (if_block)
 | 
						|
        if_block.c();
 | 
						|
      t3 = space();
 | 
						|
      span0 = element("span");
 | 
						|
      t4 = space();
 | 
						|
      span1 = element("span");
 | 
						|
      attr(div0, "class", "info-container svelte-1my40ui");
 | 
						|
      attr(div1, "class", "hotkeys-container svelte-1my40ui");
 | 
						|
      attr(span0, "class", "icon-container svelte-1my40ui");
 | 
						|
      attr(span1, "class", "icon-container svelte-1my40ui");
 | 
						|
      attr(div2, "class", "control-container svelte-1my40ui");
 | 
						|
      attr(div3, "class", "item-container svelte-1my40ui");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div3, anchor);
 | 
						|
      append(div3, div0);
 | 
						|
      append(div0, t0);
 | 
						|
      append(div3, t1);
 | 
						|
      append(div3, div2);
 | 
						|
      append(div2, div1);
 | 
						|
      for (let i = 0; i < each_blocks.length; i += 1) {
 | 
						|
        each_blocks[i].m(div1, null);
 | 
						|
      }
 | 
						|
      append(div1, t2);
 | 
						|
      if (if_block)
 | 
						|
        if_block.m(div1, null);
 | 
						|
      append(div2, t3);
 | 
						|
      append(div2, span0);
 | 
						|
      ctx[9](span0);
 | 
						|
      append(div2, t4);
 | 
						|
      append(div2, span1);
 | 
						|
      ctx[11](span1);
 | 
						|
      current = true;
 | 
						|
      if (!mounted) {
 | 
						|
        dispose = [
 | 
						|
          listen(span0, "click", ctx[10]),
 | 
						|
          listen(span1, "click", ctx[12])
 | 
						|
        ];
 | 
						|
        mounted = true;
 | 
						|
      }
 | 
						|
    },
 | 
						|
    p(ctx2, [dirty]) {
 | 
						|
      var _a2;
 | 
						|
      if (!current || dirty & 1)
 | 
						|
        set_data(t0, ctx2[0]);
 | 
						|
      if (dirty & 48) {
 | 
						|
        each_value = (_a2 = ctx2[4]) != null ? _a2 : [];
 | 
						|
        let i;
 | 
						|
        for (i = 0; i < each_value.length; i += 1) {
 | 
						|
          const child_ctx = get_each_context(ctx2, each_value, i);
 | 
						|
          if (each_blocks[i]) {
 | 
						|
            each_blocks[i].p(child_ctx, dirty);
 | 
						|
            transition_in(each_blocks[i], 1);
 | 
						|
          } else {
 | 
						|
            each_blocks[i] = create_each_block(child_ctx);
 | 
						|
            each_blocks[i].c();
 | 
						|
            transition_in(each_blocks[i], 1);
 | 
						|
            each_blocks[i].m(div1, t2);
 | 
						|
          }
 | 
						|
        }
 | 
						|
        group_outros();
 | 
						|
        for (i = each_value.length; i < each_blocks.length; i += 1) {
 | 
						|
          out(i);
 | 
						|
        }
 | 
						|
        check_outros();
 | 
						|
      }
 | 
						|
      if (ctx2[3]) {
 | 
						|
        if (if_block) {
 | 
						|
        } else {
 | 
						|
          if_block = create_if_block(ctx2);
 | 
						|
          if_block.c();
 | 
						|
          if_block.m(div1, null);
 | 
						|
        }
 | 
						|
      } else if (if_block) {
 | 
						|
        if_block.d(1);
 | 
						|
        if_block = null;
 | 
						|
      }
 | 
						|
    },
 | 
						|
    i(local) {
 | 
						|
      if (current)
 | 
						|
        return;
 | 
						|
      for (let i = 0; i < each_value.length; i += 1) {
 | 
						|
        transition_in(each_blocks[i]);
 | 
						|
      }
 | 
						|
      current = true;
 | 
						|
    },
 | 
						|
    o(local) {
 | 
						|
      each_blocks = each_blocks.filter(Boolean);
 | 
						|
      for (let i = 0; i < each_blocks.length; i += 1) {
 | 
						|
        transition_out(each_blocks[i]);
 | 
						|
      }
 | 
						|
      current = false;
 | 
						|
    },
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div3);
 | 
						|
      destroy_each(each_blocks, detaching);
 | 
						|
      if (if_block)
 | 
						|
        if_block.d();
 | 
						|
      ctx[9](null);
 | 
						|
      ctx[11](null);
 | 
						|
      mounted = false;
 | 
						|
      run_all(dispose);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
var ICON_SIZE = 22;
 | 
						|
function instance2($$self, $$props, $$invalidate) {
 | 
						|
  let _hotkeys;
 | 
						|
  let _listening;
 | 
						|
  let { actionName } = $$props;
 | 
						|
  let { hotkeys } = $$props;
 | 
						|
  let { listening = false } = $$props;
 | 
						|
  let restoreButtonEl;
 | 
						|
  let addHotkeyButtonEl;
 | 
						|
  const dispatcher = createEventDispatcher();
 | 
						|
  onMount(() => {
 | 
						|
    if (restoreButtonEl) {
 | 
						|
      const component = new import_obsidian5.ExtraButtonComponent(restoreButtonEl).setTooltip("Restore default");
 | 
						|
      (0, import_obsidian5.setIcon)(component.extraSettingsEl, "reset", ICON_SIZE);
 | 
						|
    }
 | 
						|
    if (addHotkeyButtonEl) {
 | 
						|
      const component = new import_obsidian5.ExtraButtonComponent(addHotkeyButtonEl).setTooltip("Customize this action");
 | 
						|
      (0, import_obsidian5.setIcon)(component.extraSettingsEl, "any-key", ICON_SIZE);
 | 
						|
    }
 | 
						|
  });
 | 
						|
  const removed_handler = (hotkey) => {
 | 
						|
    dispatcher("removed", { removed: hotkey });
 | 
						|
  };
 | 
						|
  function span0_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      restoreButtonEl = $$value;
 | 
						|
      $$invalidate(1, restoreButtonEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  const click_handler = () => {
 | 
						|
    dispatcher("restored");
 | 
						|
  };
 | 
						|
  function span1_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      addHotkeyButtonEl = $$value;
 | 
						|
      $$invalidate(2, addHotkeyButtonEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  const click_handler_1 = () => {
 | 
						|
    dispatcher("start-listening-keys");
 | 
						|
  };
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("actionName" in $$props2)
 | 
						|
      $$invalidate(0, actionName = $$props2.actionName);
 | 
						|
    if ("hotkeys" in $$props2)
 | 
						|
      $$invalidate(6, hotkeys = $$props2.hotkeys);
 | 
						|
    if ("listening" in $$props2)
 | 
						|
      $$invalidate(7, listening = $$props2.listening);
 | 
						|
  };
 | 
						|
  $$self.$$.update = () => {
 | 
						|
    if ($$self.$$.dirty & 64) {
 | 
						|
      $:
 | 
						|
        $$invalidate(4, _hotkeys = [...hotkeys !== null && hotkeys !== void 0 ? hotkeys : []]);
 | 
						|
    }
 | 
						|
    if ($$self.$$.dirty & 128) {
 | 
						|
      $:
 | 
						|
        $$invalidate(3, _listening = listening);
 | 
						|
    }
 | 
						|
  };
 | 
						|
  return [
 | 
						|
    actionName,
 | 
						|
    restoreButtonEl,
 | 
						|
    addHotkeyButtonEl,
 | 
						|
    _listening,
 | 
						|
    _hotkeys,
 | 
						|
    dispatcher,
 | 
						|
    hotkeys,
 | 
						|
    listening,
 | 
						|
    removed_handler,
 | 
						|
    span0_binding,
 | 
						|
    click_handler,
 | 
						|
    span1_binding,
 | 
						|
    click_handler_1
 | 
						|
  ];
 | 
						|
}
 | 
						|
var HotkeyEntry = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance2, create_fragment2, safe_not_equal, { actionName: 0, hotkeys: 6, listening: 7 }, add_css2);
 | 
						|
  }
 | 
						|
};
 | 
						|
var HotkeyEntry_default = HotkeyEntry;
 | 
						|
 | 
						|
// src/ui/HotkeySetter.ts
 | 
						|
var HotkeySetter = class {
 | 
						|
  constructor(app2, containerEl, text2, currentHotkeys, defaultHotkeys) {
 | 
						|
    this.shouldReflect = (_) => true;
 | 
						|
    this.onRestored = () => {
 | 
						|
      const { component } = this;
 | 
						|
      if (!component)
 | 
						|
        return;
 | 
						|
      const renewed = [...this.defaultHotkeys];
 | 
						|
      if (this.shouldReflect(renewed)) {
 | 
						|
        this.currentHotkeys = renewed;
 | 
						|
        component.$set({
 | 
						|
          hotkeys: renewed
 | 
						|
        });
 | 
						|
      }
 | 
						|
    };
 | 
						|
    this.onRemoved = (evt) => {
 | 
						|
      const { component } = this;
 | 
						|
      if (!component)
 | 
						|
        return;
 | 
						|
      if (!(evt instanceof CustomEvent))
 | 
						|
        return;
 | 
						|
      const removed = evt.detail.removed;
 | 
						|
      const renewed = [...this.currentHotkeys];
 | 
						|
      renewed.remove(removed);
 | 
						|
      if (this.shouldReflect(renewed)) {
 | 
						|
        this.currentHotkeys = renewed;
 | 
						|
        component.$set({
 | 
						|
          hotkeys: renewed
 | 
						|
        });
 | 
						|
      }
 | 
						|
    };
 | 
						|
    this.onStartListening = () => {
 | 
						|
      const { component } = this;
 | 
						|
      if (!component)
 | 
						|
        return;
 | 
						|
      component.$set({
 | 
						|
        listening: true
 | 
						|
      });
 | 
						|
      this.scope = new import_obsidian6.Scope();
 | 
						|
      this.app.keymap.pushScope(this.scope);
 | 
						|
      this.scope.register(null, null, (evt) => {
 | 
						|
        evt.preventDefault();
 | 
						|
        if (evt.key === "Escape") {
 | 
						|
          component.$set({
 | 
						|
            listening: false
 | 
						|
          });
 | 
						|
          if (this.scope)
 | 
						|
            this.app.keymap.popScope(this.scope);
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        const hotkey = getHotkey(evt);
 | 
						|
        const collision = contain(this.currentHotkeys, hotkey);
 | 
						|
        if (collision)
 | 
						|
          return;
 | 
						|
        const renewed = [...this.currentHotkeys];
 | 
						|
        renewed.push(hotkey);
 | 
						|
        if (!this.shouldReflect(renewed, hotkey))
 | 
						|
          return;
 | 
						|
        this.currentHotkeys = renewed;
 | 
						|
        component.$set({
 | 
						|
          hotkeys: renewed
 | 
						|
        });
 | 
						|
        component.$set({
 | 
						|
          listening: false
 | 
						|
        });
 | 
						|
        if (this.scope)
 | 
						|
          this.app.keymap.popScope(this.scope);
 | 
						|
      });
 | 
						|
    };
 | 
						|
    this.app = app2;
 | 
						|
    this.containerEl = containerEl;
 | 
						|
    this.text = text2;
 | 
						|
    this.currentHotkeys = [...currentHotkeys];
 | 
						|
    this.defaultHotkeys = [...defaultHotkeys];
 | 
						|
    this.component = this.attachComponent();
 | 
						|
  }
 | 
						|
  unload() {
 | 
						|
    this.onunload();
 | 
						|
  }
 | 
						|
  onChanged(cb) {
 | 
						|
    this.shouldReflect = cb;
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
  attachComponent() {
 | 
						|
    const component = new HotkeyEntry_default({
 | 
						|
      target: this.containerEl,
 | 
						|
      props: {
 | 
						|
        actionName: this.text,
 | 
						|
        hotkeys: this.currentHotkeys
 | 
						|
      }
 | 
						|
    });
 | 
						|
    component.$on("removed", this.onRemoved);
 | 
						|
    component.$on("restored", this.onRestored);
 | 
						|
    component.$on("start-listening-keys", this.onStartListening);
 | 
						|
    return component;
 | 
						|
  }
 | 
						|
  onunload() {
 | 
						|
    var _a;
 | 
						|
    (_a = this.component) == null ? void 0 : _a.$destroy();
 | 
						|
    if (this.scope) {
 | 
						|
      this.app.keymap.popScope(this.scope);
 | 
						|
    }
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/Setting.ts
 | 
						|
var AVAILABLE_OUTLINE_WIDTHS = [0, 3, 5, 7, 10];
 | 
						|
var AUTO_PREVIEW_MODE_IDS = ["none", "singleView", "cardView"];
 | 
						|
var autoPreviewModeInfos = {
 | 
						|
  none: "none",
 | 
						|
  singleView: "single view",
 | 
						|
  cardView: "card view"
 | 
						|
};
 | 
						|
var AVAILABLE_CARD_LAYOUT = ["2x2", "2x3", "3x2", "3x3"];
 | 
						|
var DEFAULT_SETTINGS = {
 | 
						|
  keepSelectedItemsCentered: false,
 | 
						|
  outlineWidth: 5,
 | 
						|
  autoPreviewMode: "cardView",
 | 
						|
  cardViewLayout: "2x3",
 | 
						|
  splitDirection: "horizontal",
 | 
						|
  autoToggleSidebar: false,
 | 
						|
  renderCardsManually: false,
 | 
						|
  searchModeHotkeys: {
 | 
						|
    selectNext: [
 | 
						|
      { modifiers: ["Ctrl"], key: "n" },
 | 
						|
      { modifiers: [], key: "ArrowDown" }
 | 
						|
    ],
 | 
						|
    selectPrevious: [
 | 
						|
      { modifiers: ["Ctrl"], key: "p" },
 | 
						|
      { modifiers: [], key: "ArrowUp" }
 | 
						|
    ],
 | 
						|
    previewModal: [{ modifiers: ["Ctrl"], key: " " }],
 | 
						|
    open: [{ modifiers: ["Ctrl"], key: "Enter" }],
 | 
						|
    openInNewPane: [{ modifiers: ["Ctrl", "Shift"], key: "Enter" }],
 | 
						|
    showOptions: [{ modifiers: ["Shift"], key: " " }],
 | 
						|
    nextPage: [{ modifiers: ["Ctrl"], key: "]" }],
 | 
						|
    previousPage: [{ modifiers: ["Ctrl"], key: "[" }],
 | 
						|
    copyLink: [{ modifiers: ["Ctrl"], key: "i" }]
 | 
						|
  },
 | 
						|
  previewModalHotkeys: {
 | 
						|
    scrollDown: [
 | 
						|
      { modifiers: ["Ctrl"], key: "n" },
 | 
						|
      { modifiers: [], key: "ArrowDown" }
 | 
						|
    ],
 | 
						|
    scrollUp: [
 | 
						|
      { modifiers: ["Ctrl"], key: "p" },
 | 
						|
      { modifiers: [], key: "ArrowUp" }
 | 
						|
    ],
 | 
						|
    bigScrollDown: [{ modifiers: [], key: " " }],
 | 
						|
    bigScrollUp: [{ modifiers: ["Shift"], key: " " }],
 | 
						|
    open: [{ modifiers: ["Ctrl"], key: "Enter" }],
 | 
						|
    openInNewPage: [{ modifiers: ["Ctrl", "Shift"], key: "Enter" }],
 | 
						|
    closeModal: [{ modifiers: ["Ctrl"], key: " " }],
 | 
						|
    focusNext: [{ modifiers: [], key: "Tab" }],
 | 
						|
    focusPrevious: [{ modifiers: ["Shift"], key: "Tab" }],
 | 
						|
    togglePreviewMode: [{ modifiers: ["Ctrl"], key: "e" }],
 | 
						|
    copyLink: [{ modifiers: ["Ctrl"], key: "i" }]
 | 
						|
  }
 | 
						|
};
 | 
						|
var CoreSearchAssistantSettingTab = class extends import_obsidian7.PluginSettingTab {
 | 
						|
  constructor(app2, plugin2) {
 | 
						|
    super(app2, plugin2);
 | 
						|
    this.plugin = plugin2;
 | 
						|
    this.hotkeySetters = [];
 | 
						|
  }
 | 
						|
  display() {
 | 
						|
    this.hide();
 | 
						|
    const { containerEl } = this;
 | 
						|
    containerEl.empty();
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Keep selected item centered").addToggle((component) => {
 | 
						|
      var _a, _b;
 | 
						|
      component.setValue((_b = (_a = this.plugin.settings) == null ? void 0 : _a.keepSelectedItemsCentered) != null ? _b : DEFAULT_SETTINGS.keepSelectedItemsCentered).onChange((value) => {
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.plugin.settings.keepSelectedItemsCentered = value;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Outline width (px)").setDesc("An outline appears when you enter search mode.").addDropdown((component) => {
 | 
						|
      var _a;
 | 
						|
      AVAILABLE_OUTLINE_WIDTHS.forEach((width) => {
 | 
						|
        const text2 = width.toString();
 | 
						|
        component.addOption(text2, text2);
 | 
						|
      });
 | 
						|
      component.setValue(validOutlineWidth((_a = this.plugin.settings) == null ? void 0 : _a.outlineWidth).toString()).onChange((value) => {
 | 
						|
        const width = Number.parseInt(value);
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (!AVAILABLE_OUTLINE_WIDTHS.includes(width)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.plugin.settings.outlineWidth = width;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Auto preview mode").addDropdown((component) => {
 | 
						|
      var _a, _b;
 | 
						|
      component.addOptions(autoPreviewModeInfos).setValue((_b = (_a = this.plugin.settings) == null ? void 0 : _a.autoPreviewMode) != null ? _b : "cardView").onChange((id) => {
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (!AUTO_PREVIEW_MODE_IDS.includes(id)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.plugin.settings.autoPreviewMode = id;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Default layout of card view").addDropdown((component) => {
 | 
						|
      var _a, _b;
 | 
						|
      AVAILABLE_CARD_LAYOUT.forEach((layout) => {
 | 
						|
        component.addOption(layout, layout);
 | 
						|
      });
 | 
						|
      component.setValue((_b = (_a = this.plugin.settings) == null ? void 0 : _a.cardViewLayout) != null ? _b : DEFAULT_SETTINGS.cardViewLayout).onChange((value) => {
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (!AVAILABLE_CARD_LAYOUT.includes(value)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.plugin.settings.cardViewLayout = value;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Default split direction").setDesc("This applies when you open a file in a new pane").addDropdown((component) => {
 | 
						|
      if (!this.plugin.settings) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      component.addOptions({
 | 
						|
        horizontal: "horizontal",
 | 
						|
        vertical: "vertical"
 | 
						|
      }).setValue(this.plugin.settings.splitDirection).onChange((direction) => __async(this, null, function* () {
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (direction == "horizontal" || direction == "vertical") {
 | 
						|
          this.plugin.settings.splitDirection = direction;
 | 
						|
          yield this.plugin.saveSettings();
 | 
						|
        }
 | 
						|
      }));
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Toggle sidebars automatically").setDesc("Automatically collapse the other sidebar when entering the search mode and the search panel when exiting the search mode").addToggle((component) => {
 | 
						|
      if (!this.plugin.settings) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      component.setValue(this.plugin.settings.autoToggleSidebar).onChange((value) => {
 | 
						|
        if (!this.plugin.settings) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.plugin.settings.autoToggleSidebar = value;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    new import_obsidian7.Setting(containerEl).setName("Render cards manually").setDesc("If enabled, you must hit the enter key to render cards.").addToggle((component) => {
 | 
						|
      if (!this.plugin.settings)
 | 
						|
        return;
 | 
						|
      component.setValue(this.plugin.settings.renderCardsManually).onChange((value) => {
 | 
						|
        if (!this.plugin.settings)
 | 
						|
          return;
 | 
						|
        this.plugin.settings.renderCardsManually = value;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    containerEl.createEl("h2", { text: "Hotkeys" });
 | 
						|
    const { settings } = this.plugin;
 | 
						|
    containerEl.createEl("h3", { text: "Search mode" });
 | 
						|
    if (!settings)
 | 
						|
      return;
 | 
						|
    SEARCH_MODE_HOTKEY_ACTION_IDS.forEach((actionId) => {
 | 
						|
      const hotkeys = settings.searchModeHotkeys[actionId];
 | 
						|
      const defaultHotkeys = DEFAULT_SETTINGS.searchModeHotkeys[actionId];
 | 
						|
      const description = SEARCH_MODE_HOTKEY_ACTION_INFO[actionId];
 | 
						|
      const hotkeySetter = new HotkeySetter(this.app, containerEl, description, hotkeys, defaultHotkeys).onChanged((renewed, added) => {
 | 
						|
        if (added) {
 | 
						|
          if (added.modifiers.length === 0)
 | 
						|
            return false;
 | 
						|
          const collision = SEARCH_MODE_HOTKEY_ACTION_IDS.some((actionId2) => {
 | 
						|
            const hotkeys2 = settings.searchModeHotkeys[actionId2];
 | 
						|
            return contain(hotkeys2, added);
 | 
						|
          });
 | 
						|
          if (collision) {
 | 
						|
            new import_obsidian7.Notice("Hotkeys are conflicting!");
 | 
						|
            return false;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        settings.searchModeHotkeys[actionId] = renewed;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
        return true;
 | 
						|
      });
 | 
						|
      this.hotkeySetters.push(hotkeySetter);
 | 
						|
    });
 | 
						|
    containerEl.createEl("h3", { text: "Preview Modal" });
 | 
						|
    PREVIEW_MODAL_HOTKEY_ACTION_IDS.forEach((actionId) => {
 | 
						|
      const hotkeys = settings.previewModalHotkeys[actionId];
 | 
						|
      const defaultHotkeys = DEFAULT_SETTINGS.previewModalHotkeys[actionId];
 | 
						|
      const description = PREVIEW_MODAL_HOTKEY_ACTION_INFO[actionId];
 | 
						|
      DEFAULT_SETTINGS.previewModalHotkeys[actionId];
 | 
						|
      const hotkeySetter = new HotkeySetter(this.app, containerEl, description, hotkeys, defaultHotkeys).onChanged((renewed, added) => {
 | 
						|
        if (added) {
 | 
						|
          const collision = PREVIEW_MODAL_HOTKEY_ACTION_IDS.some((actionId2) => {
 | 
						|
            const hotkeys2 = settings.previewModalHotkeys[actionId2];
 | 
						|
            return contain(hotkeys2, added);
 | 
						|
          });
 | 
						|
          if (collision) {
 | 
						|
            new import_obsidian7.Notice("Hotkeys are conflicting!");
 | 
						|
            return false;
 | 
						|
          }
 | 
						|
        }
 | 
						|
        settings.previewModalHotkeys[actionId] = renewed;
 | 
						|
        this.plugin.saveSettings();
 | 
						|
        return true;
 | 
						|
      });
 | 
						|
      this.hotkeySetters.push(hotkeySetter);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  hide() {
 | 
						|
    super.hide();
 | 
						|
    this.hotkeySetters.forEach((s) => s.unload());
 | 
						|
    this.hotkeySetters = [];
 | 
						|
  }
 | 
						|
};
 | 
						|
function validOutlineWidth(width) {
 | 
						|
  if (typeof width !== "number") {
 | 
						|
    return DEFAULT_SETTINGS.outlineWidth;
 | 
						|
  }
 | 
						|
  if (!Number.isInteger(width)) {
 | 
						|
    return DEFAULT_SETTINGS.outlineWidth;
 | 
						|
  }
 | 
						|
  if (!AVAILABLE_OUTLINE_WIDTHS.includes(width)) {
 | 
						|
    return DEFAULT_SETTINGS.outlineWidth;
 | 
						|
  }
 | 
						|
  return width;
 | 
						|
}
 | 
						|
function parseCardLayout(layout) {
 | 
						|
  const [row, column] = layout.split("x");
 | 
						|
  return [Number.parseInt(row != null ? row : "0"), Number.parseInt(column != null ? column : "0")];
 | 
						|
}
 | 
						|
var SEARCH_MODE_HOTKEY_ACTION_IDS = [
 | 
						|
  "selectNext",
 | 
						|
  "selectPrevious",
 | 
						|
  "previewModal",
 | 
						|
  "open",
 | 
						|
  "openInNewPane",
 | 
						|
  "showOptions",
 | 
						|
  "nextPage",
 | 
						|
  "previousPage",
 | 
						|
  "copyLink"
 | 
						|
];
 | 
						|
var SEARCH_MODE_HOTKEY_ACTION_INFO = {
 | 
						|
  selectNext: "Select the next item",
 | 
						|
  selectPrevious: "Select the previous item",
 | 
						|
  previewModal: "Preview the selected item",
 | 
						|
  open: "Open the selected item",
 | 
						|
  openInNewPane: "Open the selected item in a new pane",
 | 
						|
  showOptions: "Set search options",
 | 
						|
  nextPage: "Move to the next set of cards",
 | 
						|
  previousPage: "Move to the previous set of cards",
 | 
						|
  copyLink: "Copy wiki link of the selected item"
 | 
						|
};
 | 
						|
var PREVIEW_MODAL_HOTKEY_ACTION_IDS = [
 | 
						|
  "scrollDown",
 | 
						|
  "scrollUp",
 | 
						|
  "bigScrollDown",
 | 
						|
  "bigScrollUp",
 | 
						|
  "open",
 | 
						|
  "openInNewPage",
 | 
						|
  "closeModal",
 | 
						|
  "focusNext",
 | 
						|
  "focusPrevious",
 | 
						|
  "togglePreviewMode",
 | 
						|
  "copyLink"
 | 
						|
];
 | 
						|
var PREVIEW_MODAL_HOTKEY_ACTION_INFO = {
 | 
						|
  scrollDown: "Scroll down a bit",
 | 
						|
  scrollUp: "Scroll up a bit",
 | 
						|
  bigScrollDown: "Scroll down a lot",
 | 
						|
  bigScrollUp: "Scroll up a lot",
 | 
						|
  open: "Open the selected item",
 | 
						|
  openInNewPage: "Open the selected item in a new pane",
 | 
						|
  closeModal: "Close the modal",
 | 
						|
  focusNext: "Focus on the next match",
 | 
						|
  focusPrevious: "Focus on the previous match",
 | 
						|
  togglePreviewMode: "Toggle preview mode",
 | 
						|
  copyLink: "Copy wiki link of the selected item"
 | 
						|
};
 | 
						|
 | 
						|
// src/components/PreviewModal.ts
 | 
						|
var import_obsidian13 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/utils/Util.ts
 | 
						|
function delay(millisecond) {
 | 
						|
  return __async(this, null, function* () {
 | 
						|
    yield new Promise((resolve) => setTimeout(resolve, millisecond));
 | 
						|
  });
 | 
						|
}
 | 
						|
function scrollIteration(editor) {
 | 
						|
  const line = lineCount(editor);
 | 
						|
  if (line === void 0) {
 | 
						|
    return void 0;
 | 
						|
  }
 | 
						|
  return Math.max(Math.floor(line / 1e3), 1);
 | 
						|
}
 | 
						|
function lineCount(editor) {
 | 
						|
  var _a, _b, _c;
 | 
						|
  const line = (_c = (_b = (_a = editor == null ? void 0 : editor["cm"]) == null ? void 0 : _a["state"]) == null ? void 0 : _b["doc"]) == null ? void 0 : _c.length;
 | 
						|
  return typeof line === "number" ? line : void 0;
 | 
						|
}
 | 
						|
function retry(cb, interval, trials, check = (got) => got !== void 0) {
 | 
						|
  return __async(this, null, function* () {
 | 
						|
    for (let i = 0; i < trials; i++) {
 | 
						|
      const got = cb();
 | 
						|
      if (check(got)) {
 | 
						|
        return got;
 | 
						|
      }
 | 
						|
      yield delay(interval);
 | 
						|
    }
 | 
						|
    return void 0;
 | 
						|
  });
 | 
						|
}
 | 
						|
function shallowClone(obj) {
 | 
						|
  return Object.assign({}, obj);
 | 
						|
}
 | 
						|
function deepClone(obj) {
 | 
						|
  if (obj === null)
 | 
						|
    return obj;
 | 
						|
  if (typeof obj !== "object")
 | 
						|
    return obj;
 | 
						|
  if (obj instanceof Array) {
 | 
						|
    const clone2 = new Array(obj.length);
 | 
						|
    obj.forEach((value, id) => {
 | 
						|
      clone2[id] = deepClone(value);
 | 
						|
    });
 | 
						|
    return clone2;
 | 
						|
  }
 | 
						|
  const clone = shallowClone(obj);
 | 
						|
  for (const key in clone) {
 | 
						|
    const value = clone[key];
 | 
						|
    clone[key] = deepClone(value);
 | 
						|
  }
 | 
						|
  return clone;
 | 
						|
}
 | 
						|
function deepMerge(a, b) {
 | 
						|
  if (b === void 0) {
 | 
						|
    return deepClone(a);
 | 
						|
  } else if (a === void 0) {
 | 
						|
    return deepClone(b);
 | 
						|
  }
 | 
						|
  if (typeof a !== typeof b) {
 | 
						|
    throw new Error(`failed to deepMerge ${a} and ${b}`);
 | 
						|
  }
 | 
						|
  if (typeof b !== "object")
 | 
						|
    return deepClone(b);
 | 
						|
  if (b === null) {
 | 
						|
    return deepClone(a);
 | 
						|
  } else if (a === null) {
 | 
						|
    return deepClone(b);
 | 
						|
  }
 | 
						|
  if (b instanceof Array) {
 | 
						|
    if (a instanceof Array) {
 | 
						|
      return deepClone(b);
 | 
						|
    } else {
 | 
						|
      throw new Error(`failed to deepMerge ${a} and ${b}`);
 | 
						|
    }
 | 
						|
  } else if (a instanceof Array) {
 | 
						|
    throw new Error(`failed to deepMerge ${a} and ${b}`);
 | 
						|
  }
 | 
						|
  const clone = shallowClone(a);
 | 
						|
  for (const key in a) {
 | 
						|
    clone[key] = deepMerge(a[key], b[key]);
 | 
						|
  }
 | 
						|
  for (const key in b) {
 | 
						|
    clone[key] = deepMerge(a[key], b[key]);
 | 
						|
  }
 | 
						|
  return clone;
 | 
						|
}
 | 
						|
 | 
						|
// src/utils/Link.ts
 | 
						|
function generateInternalLinkFrom(app2, file) {
 | 
						|
  const text2 = getDisplayText(app2.metadataCache, file);
 | 
						|
  return app2.fileManager.generateMarkdownLink(file, "", void 0, text2);
 | 
						|
}
 | 
						|
function getDisplayText(metadataCache, file) {
 | 
						|
  const cache = metadataCache.getFileCache(file);
 | 
						|
  if (!cache)
 | 
						|
    return void 0;
 | 
						|
  const title = getTitle(cache.frontmatter);
 | 
						|
  if (title !== void 0) {
 | 
						|
    return title;
 | 
						|
  }
 | 
						|
  const h1 = getFirstH1(cache.headings);
 | 
						|
  if (h1 !== void 0) {
 | 
						|
    return h1;
 | 
						|
  }
 | 
						|
  return void 0;
 | 
						|
}
 | 
						|
function getTitle(frontmatter) {
 | 
						|
  return frontmatter == null ? void 0 : frontmatter["title"];
 | 
						|
}
 | 
						|
function getFirstH1(headings) {
 | 
						|
  if (!headings)
 | 
						|
    return void 0;
 | 
						|
  for (const heading of headings) {
 | 
						|
    if (heading.level !== 1)
 | 
						|
      continue;
 | 
						|
    return heading.heading;
 | 
						|
  }
 | 
						|
  return void 0;
 | 
						|
}
 | 
						|
 | 
						|
// node_modules/tslib/modules/index.js
 | 
						|
var import_tslib = __toModule(require_tslib());
 | 
						|
var {
 | 
						|
  __extends,
 | 
						|
  __assign,
 | 
						|
  __rest,
 | 
						|
  __decorate,
 | 
						|
  __param,
 | 
						|
  __metadata,
 | 
						|
  __awaiter,
 | 
						|
  __generator,
 | 
						|
  __exportStar,
 | 
						|
  __createBinding,
 | 
						|
  __values,
 | 
						|
  __read,
 | 
						|
  __spread,
 | 
						|
  __spreadArrays,
 | 
						|
  __spreadArray,
 | 
						|
  __await,
 | 
						|
  __asyncGenerator,
 | 
						|
  __asyncDelegator,
 | 
						|
  __asyncValues,
 | 
						|
  __makeTemplateObject,
 | 
						|
  __importStar,
 | 
						|
  __importDefault,
 | 
						|
  __classPrivateFieldGet,
 | 
						|
  __classPrivateFieldSet
 | 
						|
} = import_tslib.default;
 | 
						|
 | 
						|
// src/interfaces/ViewGenerator.ts
 | 
						|
var import_obsidian8 = __toModule(require("obsidian"));
 | 
						|
var ViewGenerator = class {
 | 
						|
  constructor(app2, containerEl, file) {
 | 
						|
    this.extensions = [];
 | 
						|
    this.app = app2;
 | 
						|
    this.containerEl = containerEl;
 | 
						|
    this.leaf = new import_obsidian8.WorkspaceLeaf(this.app);
 | 
						|
    this.file = file;
 | 
						|
  }
 | 
						|
  load(mode) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      yield this.onload(mode);
 | 
						|
      return this;
 | 
						|
    });
 | 
						|
  }
 | 
						|
  unload() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      this.onunload();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  toggleViewMode() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      for (const ext of this.extensions) {
 | 
						|
        if (!(yield ext.isMine(this.leaf)))
 | 
						|
          continue;
 | 
						|
        yield ext.toggleViewMode(this.leaf);
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  onload(mode) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const fileType = fileTypeMap[this.file.extension];
 | 
						|
      if (!fileType)
 | 
						|
        return;
 | 
						|
      this.containerEl.appendChild(this.leaf.containerEl);
 | 
						|
      yield this.openFile();
 | 
						|
      for (const ext of this.extensions) {
 | 
						|
        if (!(yield ext.isMine(this.leaf)))
 | 
						|
          continue;
 | 
						|
        yield ext.setViewMode(this.leaf, mode != null ? mode : "preview");
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  onunload() {
 | 
						|
    this.leaf.detach();
 | 
						|
  }
 | 
						|
  openFile() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { leaf, file } = this;
 | 
						|
      yield leaf.openFile(file);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  highlightMatches(matches, cls) {
 | 
						|
    const view = this.leaf.view;
 | 
						|
    if (!(view instanceof import_obsidian8.MarkdownView)) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const editor = view.editor;
 | 
						|
    const ranges = [];
 | 
						|
    matches.forEach((match) => {
 | 
						|
      const range = {
 | 
						|
        from: editor.offsetToPos(match[0]),
 | 
						|
        to: editor.offsetToPos(match[1])
 | 
						|
      };
 | 
						|
      ranges.push(range);
 | 
						|
    });
 | 
						|
    editor.addHighlights(ranges, cls);
 | 
						|
  }
 | 
						|
  scrollIntoView(match, center) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const view = this.leaf.view;
 | 
						|
      if (!(view instanceof import_obsidian8.MarkdownView)) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (view.getMode() !== "source") {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      const editor = view.editor;
 | 
						|
      const range = {
 | 
						|
        from: editor.offsetToPos(match[0]),
 | 
						|
        to: editor.offsetToPos(match[1])
 | 
						|
      };
 | 
						|
      const iter = scrollIteration(editor);
 | 
						|
      if (iter === void 0) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      for (let i = 0; i < iter; i++) {
 | 
						|
        editor.scrollIntoView(range, center);
 | 
						|
        yield delay(1);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  focusOn(match, cls, center) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const view = this.leaf.view;
 | 
						|
      if (!(view instanceof import_obsidian8.MarkdownView)) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (view.getMode() !== "source") {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      yield this.scrollIntoView(match, center);
 | 
						|
      const { editor } = view;
 | 
						|
      editor.removeHighlights(cls);
 | 
						|
      const range = {
 | 
						|
        from: editor.offsetToPos(match[0]),
 | 
						|
        to: editor.offsetToPos(match[1])
 | 
						|
      };
 | 
						|
      editor.addHighlights([range], cls);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  registerExtension(ext) {
 | 
						|
    this.extensions.push(ext);
 | 
						|
    return this;
 | 
						|
  }
 | 
						|
};
 | 
						|
var fileTypeMap = {
 | 
						|
  md: "md",
 | 
						|
  png: "image",
 | 
						|
  jpg: "image",
 | 
						|
  jpeg: "image",
 | 
						|
  gif: "image",
 | 
						|
  bmp: "image",
 | 
						|
  svg: "image",
 | 
						|
  webp: "image",
 | 
						|
  mp3: "audio",
 | 
						|
  webm: "audio",
 | 
						|
  wav: "audio",
 | 
						|
  m4a: "audio",
 | 
						|
  ogg: "audio",
 | 
						|
  "3gp": "audio",
 | 
						|
  flac: "audio",
 | 
						|
  mp4: "movie",
 | 
						|
  ogv: "movie",
 | 
						|
  pdf: "pdf"
 | 
						|
};
 | 
						|
 | 
						|
// src/interfaces/viewGeneratorExtensions/Excalidraw.ts
 | 
						|
var import_obsidian9 = __toModule(require("obsidian"));
 | 
						|
var excalidrawPluginId = "obsidian-excalidraw-plugin";
 | 
						|
var excalidrawViewType = "excalidraw";
 | 
						|
var ExcalidrawViewGeneratorExtension = class {
 | 
						|
  constructor(app2) {
 | 
						|
    this.app = app2;
 | 
						|
    const excalidraw = this.app.plugins.plugins[excalidrawPluginId];
 | 
						|
    if (!isExcalidrawPlugin(excalidraw)) {
 | 
						|
      this.excalidraw = void 0;
 | 
						|
    } else {
 | 
						|
      this.excalidraw = excalidraw;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  isMine(leaf) {
 | 
						|
    return leaf.view.getViewType() === excalidrawViewType;
 | 
						|
  }
 | 
						|
  setViewMode(leaf, mode) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { excalidraw } = this;
 | 
						|
      if (!excalidraw)
 | 
						|
        return;
 | 
						|
      excalidraw.excalidrawFileModes[leaf.id] = "markdown";
 | 
						|
      yield excalidraw.setMarkdownView(leaf);
 | 
						|
      if (!(leaf.view instanceof import_obsidian9.MarkdownView))
 | 
						|
        return;
 | 
						|
      yield leaf.view.setState(__spreadProps(__spreadValues({}, leaf.view.getState()), {
 | 
						|
        mode
 | 
						|
      }), {});
 | 
						|
      leaf.view.editor.blur();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  toggleViewMode(leaf) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { excalidraw } = this;
 | 
						|
      if (!excalidraw)
 | 
						|
        return;
 | 
						|
      excalidraw.excalidrawFileModes[leaf.id] = "markdown";
 | 
						|
      yield excalidraw.setMarkdownView(leaf);
 | 
						|
      if (!(leaf.view instanceof import_obsidian9.MarkdownView))
 | 
						|
        return;
 | 
						|
      const mode = leaf.view.getMode();
 | 
						|
      yield leaf.view.setState(__spreadProps(__spreadValues({}, leaf.view.getState()), {
 | 
						|
        mode: mode === "preview" ? "source" : "preview"
 | 
						|
      }), {});
 | 
						|
      leaf.view.editor.blur();
 | 
						|
    });
 | 
						|
  }
 | 
						|
};
 | 
						|
function isExcalidrawPlugin(plugin2) {
 | 
						|
  if (!(plugin2 instanceof import_obsidian9.Plugin))
 | 
						|
    return false;
 | 
						|
  const { excalidrawFileModes, setMarkdownView } = plugin2;
 | 
						|
  if (typeof excalidrawFileModes !== "object")
 | 
						|
    return false;
 | 
						|
  if (typeof setMarkdownView !== "function")
 | 
						|
    return false;
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
// src/interfaces/viewGeneratorExtensions/Kanban.ts
 | 
						|
var import_obsidian10 = __toModule(require("obsidian"));
 | 
						|
var kanbanPluginId = "obsidian-kanban";
 | 
						|
var frontMatterKey = "kanban-plugin";
 | 
						|
var kanbanViewType = "kanban";
 | 
						|
var KanbanViewGeneratorExtension = class {
 | 
						|
  constructor(app2) {
 | 
						|
    this.app = app2;
 | 
						|
    const kanban = this.app.plugins.plugins[kanbanPluginId];
 | 
						|
    if (IsKanbanPlugin(kanban)) {
 | 
						|
      this.kanban = kanban;
 | 
						|
    }
 | 
						|
    if (kanban === void 0) {
 | 
						|
      this.kanban = void 0;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  isMine(leaf) {
 | 
						|
    const { view } = leaf;
 | 
						|
    if (view.getViewType() == kanbanViewType)
 | 
						|
      return true;
 | 
						|
    if (!(view instanceof import_obsidian10.TextFileView))
 | 
						|
      return false;
 | 
						|
    const fileCache = this.app.metadataCache.getFileCache(view.file);
 | 
						|
    const fileIsKanban = !!(fileCache == null ? void 0 : fileCache.frontmatter) && !!fileCache.frontmatter[frontMatterKey];
 | 
						|
    return fileIsKanban;
 | 
						|
  }
 | 
						|
  setViewMode(leaf, mode) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { kanban } = this;
 | 
						|
      if (!kanban)
 | 
						|
        return;
 | 
						|
      if (mode === "source") {
 | 
						|
        kanban.kanbanFileModes[leaf.id] = "markdown";
 | 
						|
        yield kanban.setMarkdownView(leaf);
 | 
						|
        yield leaf.view.setState(__spreadProps(__spreadValues({}, leaf.view.getState()), {
 | 
						|
          mode: "source"
 | 
						|
        }), {});
 | 
						|
        if (leaf.view instanceof import_obsidian10.MarkdownView) {
 | 
						|
          leaf.view.editor.blur();
 | 
						|
        }
 | 
						|
      } else {
 | 
						|
        kanban.kanbanFileModes[leaf.id] = kanbanViewType;
 | 
						|
        yield kanban.setKanbanView(leaf);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  toggleViewMode(leaf) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { kanban } = this;
 | 
						|
      if (!kanban)
 | 
						|
        return;
 | 
						|
      const mode = kanban.kanbanFileModes[leaf.id];
 | 
						|
      yield this.setViewMode(leaf, mode === "markdown" ? "preview" : "source");
 | 
						|
    });
 | 
						|
  }
 | 
						|
};
 | 
						|
function IsKanbanPlugin(plugin2) {
 | 
						|
  if (!(plugin2 instanceof import_obsidian10.Plugin))
 | 
						|
    return false;
 | 
						|
  const { kanbanFileModes, setKanbanView, setMarkdownView } = plugin2;
 | 
						|
  if (typeof kanbanFileModes !== "object")
 | 
						|
    return false;
 | 
						|
  if (typeof setMarkdownView !== "function")
 | 
						|
    return false;
 | 
						|
  if (typeof setKanbanView !== "function")
 | 
						|
    return false;
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
// src/interfaces/viewGeneratorExtensions/Markdown.ts
 | 
						|
var import_obsidian11 = __toModule(require("obsidian"));
 | 
						|
var MarkdownViewGeneratorExtension = class {
 | 
						|
  isMine(leaf) {
 | 
						|
    return leaf.view instanceof import_obsidian11.MarkdownView;
 | 
						|
  }
 | 
						|
  setViewMode(leaf, mode) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      yield leaf.view.setState(__spreadProps(__spreadValues({}, leaf.view.getState()), {
 | 
						|
        mode
 | 
						|
      }), {});
 | 
						|
    });
 | 
						|
  }
 | 
						|
  toggleViewMode(leaf) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      if (!(leaf.view instanceof import_obsidian11.MarkdownView))
 | 
						|
        return;
 | 
						|
      yield this.setViewMode(leaf, leaf.view.getMode() === "preview" ? "source" : "preview");
 | 
						|
    });
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/interfaces/viewGeneratorExtensions/NonMarkdown.ts
 | 
						|
var import_obsidian12 = __toModule(require("obsidian"));
 | 
						|
var NON_MARKDOWN_FILE_TYPES = ["image", "audio", "pdf", "video"];
 | 
						|
var NonMarkdownViewGeneratorExtension = class {
 | 
						|
  isMine(leaf) {
 | 
						|
    if (!(leaf.view instanceof import_obsidian12.FileView))
 | 
						|
      return false;
 | 
						|
    return NON_MARKDOWN_FILE_TYPES.includes(leaf.view.getViewType());
 | 
						|
  }
 | 
						|
  setViewMode(_leaf, _mode) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  toggleViewMode(_) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// node_modules/svelte/store/index.mjs
 | 
						|
var subscriber_queue = [];
 | 
						|
function writable(value, start = noop) {
 | 
						|
  let stop;
 | 
						|
  const subscribers = 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) || noop;
 | 
						|
    }
 | 
						|
    run2(value);
 | 
						|
    return () => {
 | 
						|
      subscribers.delete(subscriber);
 | 
						|
      if (subscribers.size === 0) {
 | 
						|
        stop();
 | 
						|
        stop = null;
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
  return { set, update: update2, subscribe: subscribe2 };
 | 
						|
}
 | 
						|
 | 
						|
// src/ui/store.ts
 | 
						|
var app = writable();
 | 
						|
var plugin = writable();
 | 
						|
 | 
						|
// src/ui/PreviewModalContent.svelte
 | 
						|
function add_css3(target) {
 | 
						|
  append_styles(target, "svelte-6cqu2r", ".core-search-assistant_preview-modal_view-container.svelte-6cqu2r{min-width:700px}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .highlight-search-match{color:var(--highlight-search-match);background-color:var(--highlight-search-match-bg)}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .focus-search-match{background-color:var(--focus-search-match-bg)}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .workspace-leaf{contain:initial !important}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .view-content{overflow:unset}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-preview-view{overflow:unset}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .workspace-leaf-content{overflow:unset}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .workspace-leaf-resize-handle{display:none}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .view-header{display:none}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-preview-view{padding:0}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-source-view{pointer-events:none}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .workspace-leaf-content[data-type='pdf']{height:990px}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-source-view.mod-cm6 .cm-editor{flex:initial;display:initial}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-source-view.mod-cm6{display:initial}.core-search-assistant_preview-modal_view-container.svelte-6cqu2r .markdown-source-view.mod-cm6 .cm-scroller{padding:0}");
 | 
						|
}
 | 
						|
function create_fragment3(ctx) {
 | 
						|
  let div;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div = element("div");
 | 
						|
      attr(div, "class", "core-search-assistant_preview-modal_view-container svelte-6cqu2r");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div, anchor);
 | 
						|
      ctx[5](div);
 | 
						|
    },
 | 
						|
    p: noop,
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div);
 | 
						|
      ctx[5](null);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function instance3($$self, $$props, $$invalidate) {
 | 
						|
  let $app;
 | 
						|
  component_subscribe($$self, app, ($$value) => $$invalidate(7, $app = $$value));
 | 
						|
  let { file } = $$props;
 | 
						|
  let { matches } = $$props;
 | 
						|
  let contentContainerEl;
 | 
						|
  let renderer;
 | 
						|
  onMount(() => __awaiter(void 0, void 0, void 0, function* () {
 | 
						|
    if (!file) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    if (!contentContainerEl) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const fileType = fileTypeMap[file.extension];
 | 
						|
    if (fileType !== void 0) {
 | 
						|
      contentContainerEl.empty();
 | 
						|
      renderer = yield new ViewGenerator($app, contentContainerEl, file).registerExtension(new ExcalidrawViewGeneratorExtension($app)).registerExtension(new KanbanViewGeneratorExtension($app)).registerExtension(new MarkdownViewGeneratorExtension()).registerExtension(new NonMarkdownViewGeneratorExtension()).load("source");
 | 
						|
      highlightMatches();
 | 
						|
    }
 | 
						|
  }));
 | 
						|
  onDestroy(() => {
 | 
						|
    setTimeout(() => renderer === null || renderer === void 0 ? void 0 : renderer.unload(), 1e3);
 | 
						|
  });
 | 
						|
  function toggleViewMode() {
 | 
						|
    return __awaiter(this, void 0, void 0, function* () {
 | 
						|
      yield renderer === null || renderer === void 0 ? void 0 : renderer.toggleViewMode();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function focusOn(matchId, center) {
 | 
						|
    if (!matches)
 | 
						|
      return;
 | 
						|
    const match = matches[matchId];
 | 
						|
    if (match === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    renderer === null || renderer === void 0 ? void 0 : renderer.focusOn(match, "focus-search-match", center);
 | 
						|
  }
 | 
						|
  function highlightMatches() {
 | 
						|
    renderer === null || renderer === void 0 ? void 0 : renderer.highlightMatches(matches !== null && matches !== void 0 ? matches : [], "highlight-search-match");
 | 
						|
  }
 | 
						|
  function div_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      contentContainerEl = $$value;
 | 
						|
      $$invalidate(0, contentContainerEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("file" in $$props2)
 | 
						|
      $$invalidate(1, file = $$props2.file);
 | 
						|
    if ("matches" in $$props2)
 | 
						|
      $$invalidate(2, matches = $$props2.matches);
 | 
						|
  };
 | 
						|
  return [contentContainerEl, file, matches, toggleViewMode, focusOn, div_binding];
 | 
						|
}
 | 
						|
var PreviewModalContent = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance3, create_fragment3, safe_not_equal, {
 | 
						|
      file: 1,
 | 
						|
      matches: 2,
 | 
						|
      toggleViewMode: 3,
 | 
						|
      focusOn: 4
 | 
						|
    }, add_css3);
 | 
						|
  }
 | 
						|
  get toggleViewMode() {
 | 
						|
    return this.$$.ctx[3];
 | 
						|
  }
 | 
						|
  get focusOn() {
 | 
						|
    return this.$$.ctx[4];
 | 
						|
  }
 | 
						|
};
 | 
						|
var PreviewModalContent_default = PreviewModalContent;
 | 
						|
 | 
						|
// src/components/PreviewModal.ts
 | 
						|
var SCROLL_AMOUNT = 70;
 | 
						|
var PreviewModal = class extends import_obsidian13.Modal {
 | 
						|
  constructor(app2, plugin2, modeScope, item) {
 | 
						|
    super(app2);
 | 
						|
    this.plugin = plugin2;
 | 
						|
    this.modeScope = modeScope;
 | 
						|
    this.item = item;
 | 
						|
    this.currentFocus = -1;
 | 
						|
  }
 | 
						|
  onOpen() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      var _a;
 | 
						|
      yield this.renderView();
 | 
						|
      this.modeScope.push();
 | 
						|
      const hotkeyMap = (_a = this.plugin.settings) == null ? void 0 : _a.previewModalHotkeys;
 | 
						|
      if (!hotkeyMap)
 | 
						|
        return;
 | 
						|
      hotkeyMap.closeModal.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          this.shouldRestoreSelection = true;
 | 
						|
          this.close();
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.open.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          var _a2;
 | 
						|
          this.openAndFocus(this.currentFocus);
 | 
						|
          (_a2 = this.plugin.controller) == null ? void 0 : _a2.exit();
 | 
						|
          this.shouldRestoreSelection = false;
 | 
						|
          this.close();
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.openInNewPage.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          var _a2, _b;
 | 
						|
          this.openAndFocus(this.currentFocus, (_a2 = this.plugin.settings) == null ? void 0 : _a2.splitDirection);
 | 
						|
          (_b = this.plugin.controller) == null ? void 0 : _b.exit();
 | 
						|
          this.shouldRestoreSelection = false;
 | 
						|
          this.close();
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.bigScrollDown.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          this.scroll("down");
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.bigScrollUp.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          this.scroll("up");
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.scrollDown.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          this.scroll("down", SCROLL_AMOUNT);
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.scrollUp.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          this.scroll("up", SCROLL_AMOUNT);
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.focusNext.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
          var _a2;
 | 
						|
          evt.preventDefault();
 | 
						|
          const numMatches = this.countMatches();
 | 
						|
          if (numMatches === void 0 || numMatches === 0) {
 | 
						|
            return;
 | 
						|
          }
 | 
						|
          this.currentFocus = cyclicId(++this.currentFocus, numMatches);
 | 
						|
          (_a2 = this.previewContent) == null ? void 0 : _a2.focusOn(this.currentFocus, true);
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.focusPrevious.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
          var _a2;
 | 
						|
          evt.preventDefault();
 | 
						|
          const numMatches = this.countMatches();
 | 
						|
          if (numMatches === void 0 || numMatches === 0) {
 | 
						|
            return;
 | 
						|
          }
 | 
						|
          this.currentFocus = cyclicId(--this.currentFocus, numMatches);
 | 
						|
          (_a2 = this.previewContent) == null ? void 0 : _a2.focusOn(this.currentFocus, true);
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.togglePreviewMode.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
          (() => __async(this, null, function* () {
 | 
						|
            var _a2;
 | 
						|
            evt.preventDefault();
 | 
						|
            yield (_a2 = this.previewContent) == null ? void 0 : _a2.toggleViewMode();
 | 
						|
          }))();
 | 
						|
        });
 | 
						|
      });
 | 
						|
      hotkeyMap.copyLink.forEach((hotkey) => {
 | 
						|
        this.scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
          const { file } = this.item;
 | 
						|
          const internalLink = generateInternalLinkFrom(this.app, file);
 | 
						|
          navigator.clipboard.writeText(internalLink);
 | 
						|
          new import_obsidian13.Notice("Copy wiki link!");
 | 
						|
        });
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
  onClose() {
 | 
						|
    var _a;
 | 
						|
    (_a = this.previewContent) == null ? void 0 : _a.$destroy();
 | 
						|
    setTimeout(() => {
 | 
						|
      if (this.modeScope.depth > 1) {
 | 
						|
        this.modeScope.pop();
 | 
						|
      }
 | 
						|
    }, 100);
 | 
						|
  }
 | 
						|
  renderView() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const { contentEl } = this;
 | 
						|
      contentEl.empty();
 | 
						|
      contentEl.hide();
 | 
						|
      this.previewContent = new PreviewModalContent_default({
 | 
						|
        target: contentEl,
 | 
						|
        props: {
 | 
						|
          file: this.item.file,
 | 
						|
          matches: this.item.result.content
 | 
						|
        }
 | 
						|
      });
 | 
						|
      contentEl.show();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  countMatches() {
 | 
						|
    var _a;
 | 
						|
    return (_a = this.item.result.content) == null ? void 0 : _a.length;
 | 
						|
  }
 | 
						|
  scroll(direction, px) {
 | 
						|
    const { containerEl, contentEl } = this;
 | 
						|
    const move = (px != null ? px : containerEl.clientHeight / 2) * (direction === "up" ? -1 : 1);
 | 
						|
    contentEl.scrollBy({
 | 
						|
      top: move,
 | 
						|
      behavior: "smooth"
 | 
						|
    });
 | 
						|
  }
 | 
						|
  openAndFocus(matchId, direction) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      var _a, _b;
 | 
						|
      const { item } = this;
 | 
						|
      const leaf = direction === void 0 ? this.app.workspace.getMostRecentLeaf() : this.app.workspace.splitActiveLeaf(direction);
 | 
						|
      yield leaf.openFile(item.file);
 | 
						|
      this.app.workspace.setActiveLeaf(leaf, true, true);
 | 
						|
      const match = (_b = (_a = item == null ? void 0 : item.result) == null ? void 0 : _a.content) == null ? void 0 : _b[matchId];
 | 
						|
      if (!match) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      const { view } = leaf;
 | 
						|
      if (!(view instanceof import_obsidian13.MarkdownView)) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      const editor = view.editor;
 | 
						|
      const range = {
 | 
						|
        from: editor.offsetToPos(match[0]),
 | 
						|
        to: editor.offsetToPos(match[1])
 | 
						|
      };
 | 
						|
      editor.addHighlights([range], "obsidian-search-match-highlight");
 | 
						|
      const iter = scrollIteration(editor);
 | 
						|
      if (iter === void 0) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      for (let i = 0; i < iter; i++) {
 | 
						|
        editor.scrollIntoView(range, true);
 | 
						|
      }
 | 
						|
      editor.setCursor(range.from);
 | 
						|
    });
 | 
						|
  }
 | 
						|
};
 | 
						|
function cyclicId(id, total) {
 | 
						|
  return (id % total + total) % total;
 | 
						|
}
 | 
						|
 | 
						|
// src/ModeScope.ts
 | 
						|
var ModeScope = class {
 | 
						|
  constructor() {
 | 
						|
    this._depth = 0;
 | 
						|
  }
 | 
						|
  get inSearchMode() {
 | 
						|
    return this._depth > 0;
 | 
						|
  }
 | 
						|
  get depth() {
 | 
						|
    return this._depth;
 | 
						|
  }
 | 
						|
  push() {
 | 
						|
    this._depth++;
 | 
						|
  }
 | 
						|
  pop() {
 | 
						|
    this._depth--;
 | 
						|
    if (this.depth < 0) {
 | 
						|
      throw "[ERROR in Core Search Assistant] ModeScope.depth < 0";
 | 
						|
    }
 | 
						|
  }
 | 
						|
  reset() {
 | 
						|
    this._depth = 0;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/Controller.ts
 | 
						|
var import_obsidian14 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/ui/CardContainer.svelte
 | 
						|
function add_css4(target) {
 | 
						|
  append_styles(target, "svelte-1g7kfgn", ".core-search-assistant_card-container.svelte-1g7kfgn.svelte-1g7kfgn{overflow:hidden;display:flex;flex-direction:column;height:100%;position:relative;box-shadow:0 2px 5px rgba(0, 0, 0, 0.2);border-radius:10px;cursor:pointer;background-color:var(--background-primary);box-sizing:content-box}.core-search-assistant_card-container.svelte-1g7kfgn.svelte-1g7kfgn:hover{border:5px solid var(--interactive-accent);margin:-5px}.core-search-assistant_card-container.is-selected.svelte-1g7kfgn.svelte-1g7kfgn{border:5px solid var(--interactive-accent);margin:-5px}.card-container-header.svelte-1g7kfgn.svelte-1g7kfgn{padding:5px 10px;background-color:var(--background-secondary);display:flex;color:var(--text-muted)}.file-name-container.svelte-1g7kfgn.svelte-1g7kfgn{font-size:1rem;line-height:1.2rem;overflow-wrap:break-word;min-width:0;flex:1}.file-name-container.svelte-1g7kfgn span.matched-in-path{color:var(--text-normal);font-weight:bold}.content-container-wrapper.svelte-1g7kfgn.svelte-1g7kfgn{padding:5px;flex:1;height:100%;min-height:0}.content-container.svelte-1g7kfgn.svelte-1g7kfgn{overflow:hidden;height:100%;font-size:0.8rem;line-height:1.2}.content-container.svelte-1g7kfgn div.content-not-supported-file-format.svelte-1g7kfgn{font-size:1rem;color:var(--text-muted)}.content-container.svelte-1g7kfgn p{font-size:0.8rem;line-height:1.2}.content-container.svelte-1g7kfgn code{font-size:0.8rem;line-height:1.2}.content-container.svelte-1g7kfgn div{font-size:0.8rem}.content-container.svelte-1g7kfgn li{font-size:0.8rem;line-height:1.2}.content-container.svelte-1g7kfgn h1{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn h2{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn h3{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn h4{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn h5{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn h6{font-size:1rem;line-height:1.2;margin:5px}.content-container.svelte-1g7kfgn a{pointer-events:none}.content-container.svelte-1g7kfgn .workspace-leaf{contain:initial !important;height:100%}.content-container.svelte-1g7kfgn .workspace-leaf-resize-handle{display:none}.content-container.svelte-1g7kfgn .view-header{display:none}.content-container.svelte-1g7kfgn .view-content{flex:1;overflow:hidden}.content-container.svelte-1g7kfgn .markdown-preview-view{padding:0;overflow:hidden}.content-container.svelte-1g7kfgn .modal-content{margin:0}");
 | 
						|
}
 | 
						|
function create_fragment4(ctx) {
 | 
						|
  let div5;
 | 
						|
  let div1;
 | 
						|
  let div0;
 | 
						|
  let t0;
 | 
						|
  let div4;
 | 
						|
  let div3;
 | 
						|
  let div2;
 | 
						|
  let t1_value = `${ctx[1].extension.toUpperCase()} file`;
 | 
						|
  let t1;
 | 
						|
  let div5_data_path_value;
 | 
						|
  let mounted;
 | 
						|
  let dispose;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div5 = element("div");
 | 
						|
      div1 = element("div");
 | 
						|
      div0 = element("div");
 | 
						|
      t0 = space();
 | 
						|
      div4 = element("div");
 | 
						|
      div3 = element("div");
 | 
						|
      div2 = element("div");
 | 
						|
      t1 = text(t1_value);
 | 
						|
      attr(div0, "class", "file-name-container svelte-1g7kfgn");
 | 
						|
      attr(div1, "class", "card-container-header svelte-1g7kfgn");
 | 
						|
      attr(div2, "class", "content-not-supported-file-format svelte-1g7kfgn");
 | 
						|
      attr(div3, "class", "content-container svelte-1g7kfgn");
 | 
						|
      attr(div4, "class", "content-container-wrapper svelte-1g7kfgn");
 | 
						|
      attr(div5, "class", "core-search-assistant_card-container svelte-1g7kfgn");
 | 
						|
      attr(div5, "data-id", ctx[0]);
 | 
						|
      attr(div5, "data-path", div5_data_path_value = ctx[1].path);
 | 
						|
      toggle_class(div5, "is-selected", ctx[2]);
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div5, anchor);
 | 
						|
      append(div5, div1);
 | 
						|
      append(div1, div0);
 | 
						|
      ctx[8](div0);
 | 
						|
      append(div5, t0);
 | 
						|
      append(div5, div4);
 | 
						|
      append(div4, div3);
 | 
						|
      append(div3, div2);
 | 
						|
      append(div2, t1);
 | 
						|
      ctx[9](div3);
 | 
						|
      if (!mounted) {
 | 
						|
        dispose = listen(div5, "click", ctx[5]);
 | 
						|
        mounted = true;
 | 
						|
      }
 | 
						|
    },
 | 
						|
    p(ctx2, [dirty]) {
 | 
						|
      if (dirty & 2 && t1_value !== (t1_value = `${ctx2[1].extension.toUpperCase()} file`))
 | 
						|
        set_data(t1, t1_value);
 | 
						|
      if (dirty & 1) {
 | 
						|
        attr(div5, "data-id", ctx2[0]);
 | 
						|
      }
 | 
						|
      if (dirty & 2 && div5_data_path_value !== (div5_data_path_value = ctx2[1].path)) {
 | 
						|
        attr(div5, "data-path", div5_data_path_value);
 | 
						|
      }
 | 
						|
      if (dirty & 4) {
 | 
						|
        toggle_class(div5, "is-selected", ctx2[2]);
 | 
						|
      }
 | 
						|
    },
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div5);
 | 
						|
      ctx[8](null);
 | 
						|
      ctx[9](null);
 | 
						|
      mounted = false;
 | 
						|
      dispose();
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function renderFileName(fileName, containerEl) {
 | 
						|
  containerEl.appendText(fileName);
 | 
						|
}
 | 
						|
function instance4($$self, $$props, $$invalidate) {
 | 
						|
  let $app;
 | 
						|
  component_subscribe($$self, app, ($$value) => $$invalidate(11, $app = $$value));
 | 
						|
  let { id } = $$props;
 | 
						|
  let { file } = $$props;
 | 
						|
  let { selected } = $$props;
 | 
						|
  let { focusEl } = $$props;
 | 
						|
  let contentContainerEl;
 | 
						|
  let fileNameContainerEl;
 | 
						|
  let renderer;
 | 
						|
  const dispatch = createEventDispatcher();
 | 
						|
  function path() {
 | 
						|
    return file.path;
 | 
						|
  }
 | 
						|
  onMount(() => __awaiter(void 0, void 0, void 0, function* () {
 | 
						|
    if (!fileNameContainerEl) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    renderFileName(file.name, fileNameContainerEl);
 | 
						|
    if (!contentContainerEl) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const fileType = fileTypeMap[file.extension];
 | 
						|
    if (fileType !== void 0) {
 | 
						|
      contentContainerEl.empty();
 | 
						|
      renderer = yield new ViewGenerator($app, contentContainerEl, file).registerExtension(new ExcalidrawViewGeneratorExtension($app)).registerExtension(new KanbanViewGeneratorExtension($app)).registerExtension(new MarkdownViewGeneratorExtension()).registerExtension(new NonMarkdownViewGeneratorExtension()).load("preview");
 | 
						|
    }
 | 
						|
    focusEl === null || focusEl === void 0 ? void 0 : focusEl.focus();
 | 
						|
  }));
 | 
						|
  onDestroy(() => {
 | 
						|
    setTimeout(() => renderer === null || renderer === void 0 ? void 0 : renderer.unload(), 1e3);
 | 
						|
  });
 | 
						|
  function onClicked() {
 | 
						|
    return __awaiter(this, void 0, void 0, function* () {
 | 
						|
      yield openFile();
 | 
						|
      dispatch("click");
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function openFile() {
 | 
						|
    return __awaiter(this, void 0, void 0, function* () {
 | 
						|
      const leaf = $app.workspace.getMostRecentLeaf();
 | 
						|
      yield leaf.openFile(file);
 | 
						|
      $app.workspace.setActiveLeaf(leaf, true, true);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function div0_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      fileNameContainerEl = $$value;
 | 
						|
      $$invalidate(4, fileNameContainerEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function div3_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      contentContainerEl = $$value;
 | 
						|
      $$invalidate(3, contentContainerEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("id" in $$props2)
 | 
						|
      $$invalidate(0, id = $$props2.id);
 | 
						|
    if ("file" in $$props2)
 | 
						|
      $$invalidate(1, file = $$props2.file);
 | 
						|
    if ("selected" in $$props2)
 | 
						|
      $$invalidate(2, selected = $$props2.selected);
 | 
						|
    if ("focusEl" in $$props2)
 | 
						|
      $$invalidate(6, focusEl = $$props2.focusEl);
 | 
						|
  };
 | 
						|
  return [
 | 
						|
    id,
 | 
						|
    file,
 | 
						|
    selected,
 | 
						|
    contentContainerEl,
 | 
						|
    fileNameContainerEl,
 | 
						|
    onClicked,
 | 
						|
    focusEl,
 | 
						|
    path,
 | 
						|
    div0_binding,
 | 
						|
    div3_binding
 | 
						|
  ];
 | 
						|
}
 | 
						|
var CardContainer = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance4, create_fragment4, safe_not_equal, {
 | 
						|
      id: 0,
 | 
						|
      file: 1,
 | 
						|
      selected: 2,
 | 
						|
      focusEl: 6,
 | 
						|
      path: 7
 | 
						|
    }, add_css4);
 | 
						|
  }
 | 
						|
  get path() {
 | 
						|
    return this.$$.ctx[7];
 | 
						|
  }
 | 
						|
};
 | 
						|
var CardContainer_default = CardContainer;
 | 
						|
 | 
						|
// src/ui/CardViewComponent.svelte
 | 
						|
function add_css5(target) {
 | 
						|
  append_styles(target, "svelte-pwex1j", ".card-view-container.svelte-pwex1j{position:absolute;top:0;left:0;width:100%;height:100%;z-index:var(--layer-modal);padding:20px 30px;display:flex;justify-content:center}.card-view-background.svelte-pwex1j{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--background-modifier-cover)}.cards-container.svelte-pwex1j{display:grid;grid-gap:20px;height:100%;width:100%;min-height:0}");
 | 
						|
}
 | 
						|
function create_fragment5(ctx) {
 | 
						|
  let div2;
 | 
						|
  let div0;
 | 
						|
  let t;
 | 
						|
  let div1;
 | 
						|
  let mounted;
 | 
						|
  let dispose;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div2 = element("div");
 | 
						|
      div0 = element("div");
 | 
						|
      t = space();
 | 
						|
      div1 = element("div");
 | 
						|
      attr(div0, "class", "card-view-background svelte-pwex1j");
 | 
						|
      attr(div1, "class", "cards-container svelte-pwex1j");
 | 
						|
      attr(div2, "class", "card-view-container svelte-pwex1j");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div2, anchor);
 | 
						|
      append(div2, div0);
 | 
						|
      append(div2, t);
 | 
						|
      append(div2, div1);
 | 
						|
      ctx[10](div1);
 | 
						|
      if (!mounted) {
 | 
						|
        dispose = listen(div0, "click", ctx[9]);
 | 
						|
        mounted = true;
 | 
						|
      }
 | 
						|
    },
 | 
						|
    p: noop,
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div2);
 | 
						|
      ctx[10](null);
 | 
						|
      mounted = false;
 | 
						|
      dispose();
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function cardsPerPage(layout) {
 | 
						|
  if (!checkLayout(layout))
 | 
						|
    return 0;
 | 
						|
  return layout[0] * layout[1];
 | 
						|
}
 | 
						|
function setLayout(contentEl, layout) {
 | 
						|
  if (!contentEl)
 | 
						|
    return;
 | 
						|
  if (!checkLayout(layout))
 | 
						|
    return;
 | 
						|
  contentEl.style.gridTemplateColumns = `repeat(${layout[1]}, minmax(0, 1fr))`;
 | 
						|
  contentEl.style.gridTemplateRows = `repeat(${layout[0]}, 1fr)`;
 | 
						|
}
 | 
						|
function checkLayout(layout) {
 | 
						|
  const check = (x) => Number.isInteger(x) && x > 0;
 | 
						|
  return check(layout[0]) && check(layout[1]);
 | 
						|
}
 | 
						|
function instance5($$self, $$props, $$invalidate) {
 | 
						|
  let { layout } = $$props;
 | 
						|
  let { focusEl } = $$props;
 | 
						|
  let contentEl;
 | 
						|
  let cards = [];
 | 
						|
  const dispatcher = createEventDispatcher();
 | 
						|
  function addCard(file) {
 | 
						|
    if (!contentEl)
 | 
						|
      return;
 | 
						|
    if (!focusEl)
 | 
						|
      return;
 | 
						|
    if (cards.length >= cardsPerPage(layout))
 | 
						|
      return;
 | 
						|
    const card = new CardContainer_default({
 | 
						|
      target: contentEl,
 | 
						|
      props: {
 | 
						|
        file,
 | 
						|
        id: cards.length,
 | 
						|
        selected: false,
 | 
						|
        focusEl
 | 
						|
      }
 | 
						|
    });
 | 
						|
    cards.push(card);
 | 
						|
  }
 | 
						|
  function renderPage(files) {
 | 
						|
    files.forEach((file) => {
 | 
						|
      addCard(file);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function focusOn(id) {
 | 
						|
    const pos = id % cardsPerPage(layout);
 | 
						|
    [-1, 0, 1].forEach((i) => {
 | 
						|
      const card = cards[pos + i];
 | 
						|
      if (!card)
 | 
						|
        return;
 | 
						|
      if (i == 0) {
 | 
						|
        card.$set({ selected: true });
 | 
						|
      } else {
 | 
						|
        card.$set({ selected: false });
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  function detachCards() {
 | 
						|
    cards.forEach((card) => {
 | 
						|
      card.$destroy();
 | 
						|
    });
 | 
						|
    cards = [];
 | 
						|
  }
 | 
						|
  function checkCardsRenderedCorrectly(files) {
 | 
						|
    if (!checkLayout(layout))
 | 
						|
      return false;
 | 
						|
    for (let i = 0; i < cardsPerPage(layout); i++) {
 | 
						|
      const file = files[i];
 | 
						|
      const card = cards[i];
 | 
						|
      if ((file === null || file === void 0 ? void 0 : file.path) !== (card === null || card === void 0 ? void 0 : card.path())) {
 | 
						|
        return false;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
  onMount(() => {
 | 
						|
    setLayout(contentEl, layout);
 | 
						|
  });
 | 
						|
  onDestroy(() => {
 | 
						|
    detachCards();
 | 
						|
  });
 | 
						|
  const click_handler = () => {
 | 
						|
    dispatcher("should-destroy");
 | 
						|
  };
 | 
						|
  function div1_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      contentEl = $$value;
 | 
						|
      $$invalidate(0, contentEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("layout" in $$props2)
 | 
						|
      $$invalidate(2, layout = $$props2.layout);
 | 
						|
    if ("focusEl" in $$props2)
 | 
						|
      $$invalidate(3, focusEl = $$props2.focusEl);
 | 
						|
  };
 | 
						|
  return [
 | 
						|
    contentEl,
 | 
						|
    dispatcher,
 | 
						|
    layout,
 | 
						|
    focusEl,
 | 
						|
    addCard,
 | 
						|
    renderPage,
 | 
						|
    focusOn,
 | 
						|
    detachCards,
 | 
						|
    checkCardsRenderedCorrectly,
 | 
						|
    click_handler,
 | 
						|
    div1_binding
 | 
						|
  ];
 | 
						|
}
 | 
						|
var CardViewComponent = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance5, create_fragment5, safe_not_equal, {
 | 
						|
      layout: 2,
 | 
						|
      focusEl: 3,
 | 
						|
      addCard: 4,
 | 
						|
      renderPage: 5,
 | 
						|
      focusOn: 6,
 | 
						|
      detachCards: 7,
 | 
						|
      checkCardsRenderedCorrectly: 8
 | 
						|
    }, add_css5);
 | 
						|
  }
 | 
						|
  get addCard() {
 | 
						|
    return this.$$.ctx[4];
 | 
						|
  }
 | 
						|
  get renderPage() {
 | 
						|
    return this.$$.ctx[5];
 | 
						|
  }
 | 
						|
  get focusOn() {
 | 
						|
    return this.$$.ctx[6];
 | 
						|
  }
 | 
						|
  get detachCards() {
 | 
						|
    return this.$$.ctx[7];
 | 
						|
  }
 | 
						|
  get checkCardsRenderedCorrectly() {
 | 
						|
    return this.$$.ctx[8];
 | 
						|
  }
 | 
						|
};
 | 
						|
var CardViewComponent_default = CardViewComponent;
 | 
						|
 | 
						|
// src/ui/WorkspacePreview.svelte
 | 
						|
function add_css6(target) {
 | 
						|
  append_styles(target, "svelte-1fata0e", ".core-search-assistant_workspace-preview_container.svelte-1fata0e{position:absolute;top:0;left:0;width:100%;height:100%;z-index:var(--layer-modal);background-color:var(--background-primary);padding:20px 30px;overflow:auto}.core-search-assistant_workspace-preview_container.svelte-1fata0e .highlight-search-match{color:var(--highlight-search-match);background-color:var(--highlight-search-match-bg)}.core-search-assistant_workspace-preview_container.svelte-1fata0e .focus-search-match{background-color:var(--focus-search-match-bg)}.core-search-assistant_workspace-preview_container.svelte-1fata0e .workspace-leaf{contain:initial !important;height:100%}.core-search-assistant_workspace-preview_container.svelte-1fata0e .workspace-leaf-resize-handle{display:none}.core-search-assistant_workspace-preview_container.svelte-1fata0e .view-header{display:none}.core-search-assistant_workspace-preview_container.svelte-1fata0e .view-content{overflow:hidden}.core-search-assistant_workspace-preview_container.svelte-1fata0e .markdown-preview-view{padding:0}.core-search-assistant_workspace-preview_container.svelte-1fata0e .modal-content{margin:0}.core-search-assistant_workspace-preview_container.svelte-1fata0e .markdown-source-view.mod-cm6 .cm-editor{flex:initial;display:initial}.core-search-assistant_workspace-preview_container.svelte-1fata0e .markdown-source-view.mod-cm6{display:initial}.core-search-assistant_workspace-preview_container.svelte-1fata0e .markdown-source-view{pointer-events:none}.core-search-assistant_workspace-preview_container.svelte-1fata0e .markdown-source-view.mod-cm6 .cm-scroller{padding:0}");
 | 
						|
}
 | 
						|
function create_fragment6(ctx) {
 | 
						|
  let div1;
 | 
						|
  let div0;
 | 
						|
  let t_value = `${ctx[0].extension.toUpperCase()} file`;
 | 
						|
  let t;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div1 = element("div");
 | 
						|
      div0 = element("div");
 | 
						|
      t = text(t_value);
 | 
						|
      attr(div0, "class", "content-not-supported-file-format");
 | 
						|
      attr(div1, "class", "core-search-assistant_workspace-preview_container svelte-1fata0e");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div1, anchor);
 | 
						|
      append(div1, div0);
 | 
						|
      append(div0, t);
 | 
						|
      ctx[4](div1);
 | 
						|
    },
 | 
						|
    p(ctx2, [dirty]) {
 | 
						|
      if (dirty & 1 && t_value !== (t_value = `${ctx2[0].extension.toUpperCase()} file`))
 | 
						|
        set_data(t, t_value);
 | 
						|
    },
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div1);
 | 
						|
      ctx[4](null);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
function instance6($$self, $$props, $$invalidate) {
 | 
						|
  let $app;
 | 
						|
  component_subscribe($$self, app, ($$value) => $$invalidate(6, $app = $$value));
 | 
						|
  let { file } = $$props;
 | 
						|
  let { matches } = $$props;
 | 
						|
  let { focusEl } = $$props;
 | 
						|
  let containerEl;
 | 
						|
  let renderer;
 | 
						|
  onMount(() => __awaiter(void 0, void 0, void 0, function* () {
 | 
						|
    if (!containerEl)
 | 
						|
      return;
 | 
						|
    const fileType = fileTypeMap[file.extension];
 | 
						|
    if (fileType !== void 0) {
 | 
						|
      containerEl.empty();
 | 
						|
      renderer = yield new ViewGenerator($app, containerEl, file).registerExtension(new ExcalidrawViewGeneratorExtension($app)).registerExtension(new KanbanViewGeneratorExtension($app)).registerExtension(new MarkdownViewGeneratorExtension()).registerExtension(new NonMarkdownViewGeneratorExtension()).load("source");
 | 
						|
      highlightMatches();
 | 
						|
    }
 | 
						|
    focusEl === null || focusEl === void 0 ? void 0 : focusEl.focus();
 | 
						|
  }));
 | 
						|
  onDestroy(() => {
 | 
						|
    setTimeout(() => renderer === null || renderer === void 0 ? void 0 : renderer.unload(), 1e3);
 | 
						|
  });
 | 
						|
  function highlightMatches() {
 | 
						|
    renderer === null || renderer === void 0 ? void 0 : renderer.highlightMatches(matches !== null && matches !== void 0 ? matches : [], "highlight-search-match");
 | 
						|
  }
 | 
						|
  function div1_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      containerEl = $$value;
 | 
						|
      $$invalidate(1, containerEl);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("file" in $$props2)
 | 
						|
      $$invalidate(0, file = $$props2.file);
 | 
						|
    if ("matches" in $$props2)
 | 
						|
      $$invalidate(2, matches = $$props2.matches);
 | 
						|
    if ("focusEl" in $$props2)
 | 
						|
      $$invalidate(3, focusEl = $$props2.focusEl);
 | 
						|
  };
 | 
						|
  return [file, containerEl, matches, focusEl, div1_binding];
 | 
						|
}
 | 
						|
var WorkspacePreview = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance6, create_fragment6, safe_not_equal, { file: 0, matches: 2, focusEl: 3 }, add_css6);
 | 
						|
  }
 | 
						|
};
 | 
						|
var WorkspacePreview_default = WorkspacePreview;
 | 
						|
 | 
						|
// src/ui/Outline.svelte
 | 
						|
function add_css7(target) {
 | 
						|
  append_styles(target, "svelte-f5i2qg", ".outline-container.svelte-f5i2qg{position:absolute;top:0;left:0;width:100%;height:100%;z-index:var(--layer-modal);pointer-events:none}");
 | 
						|
}
 | 
						|
function create_fragment7(ctx) {
 | 
						|
  let div;
 | 
						|
  return {
 | 
						|
    c() {
 | 
						|
      div = element("div");
 | 
						|
      attr(div, "class", "outline-container svelte-f5i2qg");
 | 
						|
    },
 | 
						|
    m(target, anchor) {
 | 
						|
      insert(target, div, anchor);
 | 
						|
      ctx[2](div);
 | 
						|
    },
 | 
						|
    p: noop,
 | 
						|
    i: noop,
 | 
						|
    o: noop,
 | 
						|
    d(detaching) {
 | 
						|
      if (detaching)
 | 
						|
        detach(div);
 | 
						|
      ctx[2](null);
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
var STYLE_VAR_COLOR_SEARCH_MODE_OUTLINE = "--search-mode-outline";
 | 
						|
function instance7($$self, $$props, $$invalidate) {
 | 
						|
  let { lineWidth } = $$props;
 | 
						|
  let el;
 | 
						|
  onMount(() => {
 | 
						|
    if (!el)
 | 
						|
      return;
 | 
						|
    $$invalidate(0, el.style.outline = `${lineWidth}px solid var(${STYLE_VAR_COLOR_SEARCH_MODE_OUTLINE})`, el);
 | 
						|
    $$invalidate(0, el.style.outlineOffset = `-${lineWidth}px`, el);
 | 
						|
  });
 | 
						|
  function div_binding($$value) {
 | 
						|
    binding_callbacks[$$value ? "unshift" : "push"](() => {
 | 
						|
      el = $$value;
 | 
						|
      $$invalidate(0, el);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  $$self.$$set = ($$props2) => {
 | 
						|
    if ("lineWidth" in $$props2)
 | 
						|
      $$invalidate(1, lineWidth = $$props2.lineWidth);
 | 
						|
  };
 | 
						|
  return [el, lineWidth, div_binding];
 | 
						|
}
 | 
						|
var Outline = class extends SvelteComponent {
 | 
						|
  constructor(options) {
 | 
						|
    super();
 | 
						|
    init(this, options, instance7, create_fragment7, safe_not_equal, { lineWidth: 1 }, add_css7);
 | 
						|
  }
 | 
						|
};
 | 
						|
var Outline_default = Outline;
 | 
						|
 | 
						|
// src/Controller.ts
 | 
						|
var DELAY_TO_RELOAD_IN_MILLISECOND = 1e3;
 | 
						|
var RETRY_INTERVAL = 1;
 | 
						|
var RETRY_TRIALS = 1e3;
 | 
						|
var DELAY_TO_RENDER_CARD_VIEW_ON_ENTRY_IN_MILLISECOND = 100;
 | 
						|
var Controller = class extends obsidian.Component {
 | 
						|
  constructor(app2, plugin2, events, searchInterface) {
 | 
						|
    super();
 | 
						|
    this.app = app2;
 | 
						|
    this.plugin = plugin2;
 | 
						|
    this.events = events;
 | 
						|
    this.searchInterface = searchInterface;
 | 
						|
    this.modeScope = new ModeScope();
 | 
						|
    this.cardViewCheckDebouncer = (0, import_obsidian14.debounce)(this.onCheckCardView, DELAY_TO_RELOAD_IN_MILLISECOND, true);
 | 
						|
    this.countSearchItemDetected = 0;
 | 
						|
  }
 | 
						|
  onunload() {
 | 
						|
    this.exit();
 | 
						|
  }
 | 
						|
  onload() {
 | 
						|
    this.saveLayout();
 | 
						|
    this.setSearchModeTriggers();
 | 
						|
  }
 | 
						|
  enter() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      var _a, _b;
 | 
						|
      if (this.modeScope.inSearchMode) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      this.setHotkeys();
 | 
						|
      this.addChildren();
 | 
						|
      if ((_a = this.plugin.settings) == null ? void 0 : _a.autoToggleSidebar) {
 | 
						|
        this.collapseOppositeSidedock();
 | 
						|
      }
 | 
						|
      const shouldDetectSearchItems = ((_b = this.plugin.settings) == null ? void 0 : _b.autoPreviewMode) === "cardView" && this.plugin.settings.renderCardsManually === false;
 | 
						|
      if (shouldDetectSearchItems) {
 | 
						|
        this.searchInterface.startWatching(this.events);
 | 
						|
        yield delay(DELAY_TO_RENDER_CARD_VIEW_ON_ENTRY_IN_MILLISECOND);
 | 
						|
        this.renewCardViewPage();
 | 
						|
        this.cardViewCheckDebouncer();
 | 
						|
      }
 | 
						|
      this.modeScope.push();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  reset() {
 | 
						|
    var _a;
 | 
						|
    if (!this.modeScope.inSearchMode) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.forget();
 | 
						|
    this.unfocus();
 | 
						|
    (_a = this.cardViewComponent) == null ? void 0 : _a.detachCards();
 | 
						|
    this.countSearchItemDetected = 0;
 | 
						|
  }
 | 
						|
  exit(reason) {
 | 
						|
    var _a;
 | 
						|
    if (!this.modeScope.inSearchMode) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.reset();
 | 
						|
    this.detachHotkeys();
 | 
						|
    this.removeChildren();
 | 
						|
    if (this.shouldCollapseSidedock(reason)) {
 | 
						|
      this.collapseSidedock();
 | 
						|
    }
 | 
						|
    if ((_a = this.plugin.settings) == null ? void 0 : _a.autoToggleSidebar) {
 | 
						|
      this.restoreOppositeSidedock();
 | 
						|
    }
 | 
						|
    this.countSearchItemDetected = 0;
 | 
						|
    this.searchInterface.stopWatching();
 | 
						|
    this.unfocus();
 | 
						|
    this.modeScope.reset();
 | 
						|
  }
 | 
						|
  focus() {
 | 
						|
    var _a;
 | 
						|
    if (this.currentFocusId === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.searchInterface.focusOn(this.currentFocusId);
 | 
						|
    (_a = this.cardViewComponent) == null ? void 0 : _a.focusOn(this.currentFocusId);
 | 
						|
  }
 | 
						|
  open(direction) {
 | 
						|
    if (this.currentFocusId === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    this.searchInterface.open(this.currentFocusId, direction);
 | 
						|
  }
 | 
						|
  renewCardViewPage() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      var _a, _b, _c, _d, _e;
 | 
						|
      if (((_a = this.plugin.settings) == null ? void 0 : _a.autoPreviewMode) !== "cardView")
 | 
						|
        return;
 | 
						|
      (_b = this.cardViewComponent) == null ? void 0 : _b.detachCards();
 | 
						|
      (_c = this.cardViewComponent) == null ? void 0 : _c.renderPage(this.filesToBeRendered());
 | 
						|
      if (this.currentFocusId !== void 0) {
 | 
						|
        (_e = this.cardViewComponent) == null ? void 0 : _e.focusOn((_d = this.currentFocusId) != null ? _d : 0);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
  filesToBeRendered() {
 | 
						|
    var _a, _b;
 | 
						|
    const cardsPerPage2 = this.cardsPerPage();
 | 
						|
    if (cardsPerPage2 === void 0) {
 | 
						|
      return [];
 | 
						|
    }
 | 
						|
    const pageId = Math.floor(((_a = this.currentFocusId) != null ? _a : 0) / cardsPerPage2);
 | 
						|
    const items = (_b = this.plugin.searchInterface) == null ? void 0 : _b.resultItems;
 | 
						|
    if (!items)
 | 
						|
      return [];
 | 
						|
    return items.slice(pageId * cardsPerPage2).map((item) => item.file);
 | 
						|
  }
 | 
						|
  collapseSidedock() {
 | 
						|
    var _a;
 | 
						|
    (_a = this.plugin.searchInterface) == null ? void 0 : _a.collapseSidedock();
 | 
						|
  }
 | 
						|
  collapseOppositeSidedock() {
 | 
						|
    var _a, _b, _c;
 | 
						|
    const collapsed = (_b = (_a = this.plugin.searchInterface) == null ? void 0 : _a.oppositeSidedock) == null ? void 0 : _b.collapsed;
 | 
						|
    (_c = this.plugin.searchInterface) == null ? void 0 : _c.collapseOppositeSidedock();
 | 
						|
    this._restoreOppositeSidedock = () => {
 | 
						|
      var _a2;
 | 
						|
      if (collapsed === false) {
 | 
						|
        (_a2 = this.plugin.searchInterface) == null ? void 0 : _a2.expandOppositeSidedock();
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
  restoreOppositeSidedock() {
 | 
						|
    const restoreOppositeSidedock = this._restoreOppositeSidedock;
 | 
						|
    if (restoreOppositeSidedock === void 0) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    return restoreOppositeSidedock();
 | 
						|
  }
 | 
						|
  addChildren() {
 | 
						|
    this.removeChildren();
 | 
						|
    const { settings } = this.plugin;
 | 
						|
    if (settings === void 0) {
 | 
						|
      throw "[ERROR in Core Search Assistant] failed to addChildren: failed to read setting";
 | 
						|
    }
 | 
						|
    this.outline = new Outline_default({
 | 
						|
      target: document.body,
 | 
						|
      props: {
 | 
						|
        lineWidth: settings.outlineWidth
 | 
						|
      }
 | 
						|
    });
 | 
						|
    if (settings.autoPreviewMode === "cardView") {
 | 
						|
      this.renewCardViewComponent();
 | 
						|
    }
 | 
						|
  }
 | 
						|
  removeChildren() {
 | 
						|
    var _a, _b, _c;
 | 
						|
    (_a = this.outline) == null ? void 0 : _a.$destroy();
 | 
						|
    this.outline = void 0;
 | 
						|
    (_b = this.cardViewComponent) == null ? void 0 : _b.$destroy();
 | 
						|
    this.cardViewComponent = void 0;
 | 
						|
    (_c = this.workspacePreviewComponent) == null ? void 0 : _c.$destroy();
 | 
						|
    this.workspacePreviewComponent = void 0;
 | 
						|
  }
 | 
						|
  forget() {
 | 
						|
    this.currentFocusId = void 0;
 | 
						|
    this.countSearchItemDetected = 0;
 | 
						|
  }
 | 
						|
  navigateForward() {
 | 
						|
    var _a;
 | 
						|
    let updated = true;
 | 
						|
    const numResults = (_a = this.searchInterface.count()) != null ? _a : 0;
 | 
						|
    if (this.currentFocusId === void 0) {
 | 
						|
      this.currentFocusId = 0;
 | 
						|
    } else {
 | 
						|
      this.currentFocusId++;
 | 
						|
      if (this.currentFocusId >= numResults) {
 | 
						|
        this.currentFocusId = numResults - 1;
 | 
						|
        updated = false;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    if (!updated)
 | 
						|
      return;
 | 
						|
    const { settings } = this.plugin;
 | 
						|
    if (!settings)
 | 
						|
      return;
 | 
						|
    if (settings.autoPreviewMode === "cardView" && this.shouldTransitNextPageInCardView()) {
 | 
						|
      this.renewCardViewPage();
 | 
						|
    } else if (settings.autoPreviewMode === "singleView") {
 | 
						|
      this.renewWorkspacePreviewComponent();
 | 
						|
    }
 | 
						|
    this.focus();
 | 
						|
  }
 | 
						|
  navigateBack() {
 | 
						|
    if (this.currentFocusId === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    let updated = true;
 | 
						|
    this.currentFocusId--;
 | 
						|
    if (this.currentFocusId < 0) {
 | 
						|
      this.currentFocusId = 0;
 | 
						|
      updated = false;
 | 
						|
    }
 | 
						|
    if (!updated)
 | 
						|
      return;
 | 
						|
    const { settings } = this.plugin;
 | 
						|
    if (!settings)
 | 
						|
      return;
 | 
						|
    if (settings.autoPreviewMode === "cardView" && this.shouldTransitPreviousPageInCardView()) {
 | 
						|
      this.renewCardViewPage();
 | 
						|
    } else if (settings.autoPreviewMode === "singleView") {
 | 
						|
      this.renewWorkspacePreviewComponent();
 | 
						|
    }
 | 
						|
    this.focus();
 | 
						|
  }
 | 
						|
  moveToNextPage() {
 | 
						|
    const pageId = this.pageId;
 | 
						|
    if (pageId === void 0)
 | 
						|
      return;
 | 
						|
    const pageCount = this.pageCount;
 | 
						|
    if (pageCount === void 0)
 | 
						|
      return;
 | 
						|
    if (pageId >= pageCount - 1)
 | 
						|
      return;
 | 
						|
    const cardsPerPage2 = this.cardsPerPage();
 | 
						|
    if (cardsPerPage2 === void 0)
 | 
						|
      return;
 | 
						|
    this.currentFocusId = cardsPerPage2 * (pageId + 1);
 | 
						|
    this.renewCardViewPage();
 | 
						|
    this.focus();
 | 
						|
  }
 | 
						|
  moveToPreviousPage() {
 | 
						|
    const pageId = this.pageId;
 | 
						|
    if (pageId === void 0)
 | 
						|
      return;
 | 
						|
    const pageCount = this.pageCount;
 | 
						|
    if (pageCount === void 0)
 | 
						|
      return;
 | 
						|
    if (pageId <= 0)
 | 
						|
      return;
 | 
						|
    const cardsPerPage2 = this.cardsPerPage();
 | 
						|
    if (cardsPerPage2 === void 0)
 | 
						|
      return;
 | 
						|
    this.currentFocusId = cardsPerPage2 * (pageId - 1);
 | 
						|
    this.renewCardViewPage();
 | 
						|
    this.focus();
 | 
						|
  }
 | 
						|
  unfocus() {
 | 
						|
    this.searchInterface.unfocus();
 | 
						|
  }
 | 
						|
  openPreviewModal() {
 | 
						|
    const { currentFocusId } = this;
 | 
						|
    if (currentFocusId === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const item = this.searchInterface.getResultItemAt(currentFocusId);
 | 
						|
    if (!item) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    new PreviewModal(this.app, this.plugin, this.modeScope, item).open();
 | 
						|
  }
 | 
						|
  shouldTransitNextPageInCardView() {
 | 
						|
    if (this.currentFocusId === void 0 || this.currentFocusId === 0) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    if (!this.plugin.settings) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    const [row, column] = parseCardLayout(this.plugin.settings.cardViewLayout);
 | 
						|
    const cardsPerPage2 = row * column;
 | 
						|
    return this.currentFocusId % cardsPerPage2 === 0;
 | 
						|
  }
 | 
						|
  shouldTransitPreviousPageInCardView() {
 | 
						|
    if (!this.plugin.settings) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    const [row, column] = parseCardLayout(this.plugin.settings.cardViewLayout);
 | 
						|
    const cardsPerPage2 = row * column;
 | 
						|
    if (this.currentFocusId === void 0) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    return (this.currentFocusId + 1) % cardsPerPage2 === 0;
 | 
						|
  }
 | 
						|
  get pageId() {
 | 
						|
    if (this.currentFocusId === void 0)
 | 
						|
      return void 0;
 | 
						|
    const cardsPerPage2 = this.cardsPerPage();
 | 
						|
    if (cardsPerPage2 === void 0)
 | 
						|
      return void 0;
 | 
						|
    const pageId = Math.floor(this.currentFocusId / cardsPerPage2);
 | 
						|
    return pageId;
 | 
						|
  }
 | 
						|
  get pageCount() {
 | 
						|
    var _a;
 | 
						|
    const numResults = (_a = this.plugin.searchInterface) == null ? void 0 : _a.count();
 | 
						|
    const cardsPerPage2 = this.cardsPerPage();
 | 
						|
    if (cardsPerPage2 === void 0)
 | 
						|
      return void 0;
 | 
						|
    const pageCount = Math.ceil((numResults != null ? numResults : 0) / cardsPerPage2);
 | 
						|
    return pageCount;
 | 
						|
  }
 | 
						|
  cardsPerPage() {
 | 
						|
    if (!this.plugin.settings) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    const [row, column] = parseCardLayout(this.plugin.settings.cardViewLayout);
 | 
						|
    return row * column;
 | 
						|
  }
 | 
						|
  saveLayout() {
 | 
						|
    this.app.workspace.onLayoutReady(() => __async(this, null, function* () {
 | 
						|
      const inputEl = yield retry(() => this.searchInterface.searchInputEl, RETRY_INTERVAL, RETRY_TRIALS);
 | 
						|
      this._layoutChanged = () => __async(this, null, function* () {
 | 
						|
        return inputEl !== (yield retry(() => this.searchInterface.searchInputEl, RETRY_INTERVAL, RETRY_TRIALS));
 | 
						|
      });
 | 
						|
    }));
 | 
						|
  }
 | 
						|
  layoutChanged() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      var _a;
 | 
						|
      const shouldRenewController = yield (_a = this._layoutChanged) == null ? void 0 : _a.call(this);
 | 
						|
      if (shouldRenewController === void 0) {
 | 
						|
        throw "[ERROR in Core Search Assistant] failed to renewRequired: saveLayout was not called.";
 | 
						|
      }
 | 
						|
      return shouldRenewController;
 | 
						|
    });
 | 
						|
  }
 | 
						|
  setSearchModeTriggers() {
 | 
						|
    this.registerEvent(this.events.on(EVENT_SEARCH_RESULT_ITEM_DETECTED, this.onSearchResultItemDetected));
 | 
						|
    this.registerEvent(this.events.on(EVENT_SORT_ORDER_CHANGED, this.onSortOrderChanged));
 | 
						|
    this.app.workspace.onLayoutReady(() => __async(this, null, function* () {
 | 
						|
      const appContainerEl = yield retry(() => this.app.dom.appContainerEl, RETRY_INTERVAL, RETRY_TRIALS);
 | 
						|
      if (appContainerEl === void 0) {
 | 
						|
        throw "[ERROR in Core Search Assistant] failed to find the app container element";
 | 
						|
      }
 | 
						|
      const inputEl = yield retry(() => {
 | 
						|
        var _a;
 | 
						|
        return (_a = this.plugin.searchInterface) == null ? void 0 : _a.searchInputEl;
 | 
						|
      }, RETRY_INTERVAL, RETRY_TRIALS);
 | 
						|
      if (inputEl === void 0) {
 | 
						|
        throw "[ERROR in Core Search Assistant] failed to find the search input form.";
 | 
						|
      }
 | 
						|
      const matchingCaseButtonEl = yield retry(() => {
 | 
						|
        var _a;
 | 
						|
        return (_a = this.plugin.searchInterface) == null ? void 0 : _a.matchingCaseButtonEl;
 | 
						|
      }, RETRY_INTERVAL, RETRY_TRIALS);
 | 
						|
      if (matchingCaseButtonEl === void 0) {
 | 
						|
        throw "[ERROR in Core Search Assistant] failed to find the matching case button.";
 | 
						|
      }
 | 
						|
      this.registerDomEvent(appContainerEl, "click", (evt) => {
 | 
						|
        var _a, _b, _c, _d, _e;
 | 
						|
        const targetEl = evt.target;
 | 
						|
        if (!(targetEl instanceof HTMLElement)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if ((_b = (_a = this.plugin.searchInterface) == null ? void 0 : _a.searchLeaf) == null ? void 0 : _b.containerEl.contains(targetEl)) {
 | 
						|
          if (!this.plugin.searchInterface.isBuiltInElementToOpenFile(targetEl))
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        if ((_d = (_c = this.plugin.searchInterface) == null ? void 0 : _c.tabHeaderEl) == null ? void 0 : _d.contains(targetEl)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if ((_e = this.plugin.searchInterface) == null ? void 0 : _e.isShowMoreContextButton(targetEl)) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (this.modeScope.depth === 1) {
 | 
						|
          this.exit({ id: "mouse", event: evt });
 | 
						|
        }
 | 
						|
      });
 | 
						|
      this.registerDomEvent(matchingCaseButtonEl, "click", () => {
 | 
						|
        if (this.modeScope.inSearchMode) {
 | 
						|
          this.reset();
 | 
						|
        }
 | 
						|
      });
 | 
						|
      this.registerDomEvent(inputEl, "input", () => {
 | 
						|
        if (!this.modeScope.inSearchMode) {
 | 
						|
          this.enter();
 | 
						|
        }
 | 
						|
        this.reset();
 | 
						|
      });
 | 
						|
      this.registerDomEvent(inputEl, "keypress", (evt) => {
 | 
						|
        if (evt.key !== "Enter") {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        if (!this.modeScope.inSearchMode) {
 | 
						|
          this.enter();
 | 
						|
        }
 | 
						|
        this.reset();
 | 
						|
      });
 | 
						|
      this.registerDomEvent(inputEl, "focus", () => {
 | 
						|
        if (!this.modeScope.inSearchMode) {
 | 
						|
          this.enter();
 | 
						|
        }
 | 
						|
      });
 | 
						|
    }));
 | 
						|
  }
 | 
						|
  setHotkeys() {
 | 
						|
    var _a;
 | 
						|
    const hotkeyMap = (_a = this.plugin.settings) == null ? void 0 : _a.searchModeHotkeys;
 | 
						|
    if (!hotkeyMap)
 | 
						|
      return;
 | 
						|
    const scope = new obsidian.Scope();
 | 
						|
    this.app.keymap.pushScope(scope);
 | 
						|
    hotkeyMap.selectNext.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
        evt.preventDefault();
 | 
						|
        this.navigateForward();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.selectPrevious.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
        evt.preventDefault();
 | 
						|
        this.navigateBack();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.open.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
        evt.preventDefault();
 | 
						|
        this.open();
 | 
						|
        this.exit();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.openInNewPane.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, (evt) => {
 | 
						|
        var _a2;
 | 
						|
        evt.preventDefault();
 | 
						|
        this.open((_a2 = this.plugin.settings) == null ? void 0 : _a2.splitDirection);
 | 
						|
        this.exit();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.previewModal.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
        if (this.app.vault.config.legacyEditor) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
        this.openPreviewModal();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.showOptions.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
        new OptionModal(this.app, this.plugin, this.modeScope).open();
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.nextPage.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
        var _a2;
 | 
						|
        if (((_a2 = this.plugin.settings) == null ? void 0 : _a2.autoPreviewMode) === "cardView") {
 | 
						|
          this.moveToNextPage();
 | 
						|
        }
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.previousPage.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
        var _a2;
 | 
						|
        if (((_a2 = this.plugin.settings) == null ? void 0 : _a2.autoPreviewMode) === "cardView") {
 | 
						|
          this.moveToPreviousPage();
 | 
						|
        }
 | 
						|
      });
 | 
						|
    });
 | 
						|
    hotkeyMap.copyLink.forEach((hotkey) => {
 | 
						|
      scope.register(hotkey.modifiers, hotkey.key, () => {
 | 
						|
        var _a2;
 | 
						|
        const item = this.searchInterface.getResultItemAt((_a2 = this.currentFocusId) != null ? _a2 : 0);
 | 
						|
        if (!item)
 | 
						|
          return;
 | 
						|
        const { file } = item;
 | 
						|
        const internalLink = generateInternalLinkFrom(this.app, file);
 | 
						|
        navigator.clipboard.writeText(internalLink);
 | 
						|
        new import_obsidian14.Notice("Copy wiki link!");
 | 
						|
      });
 | 
						|
    });
 | 
						|
    scope.register([], "Escape", (evt) => {
 | 
						|
      evt.preventDefault();
 | 
						|
      this.exit();
 | 
						|
    });
 | 
						|
    scope.register([], "Enter", (evt) => {
 | 
						|
      var _a2;
 | 
						|
      setTimeout(this.focusOnInput, 100);
 | 
						|
      const shouldRenderCardsManually = ((_a2 = this.plugin.settings) == null ? void 0 : _a2.autoPreviewMode) === "cardView" && this.plugin.settings.renderCardsManually;
 | 
						|
      if (shouldRenderCardsManually) {
 | 
						|
        evt.preventDefault();
 | 
						|
        this.reset();
 | 
						|
        this.renewCardViewPage();
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this._detachHotkeys = () => {
 | 
						|
      this.app.keymap.popScope(scope);
 | 
						|
    };
 | 
						|
  }
 | 
						|
  detachHotkeys() {
 | 
						|
    const detachHotkeys = this._detachHotkeys;
 | 
						|
    if (detachHotkeys === void 0) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    detachHotkeys();
 | 
						|
  }
 | 
						|
  get onSearchResultItemDetected() {
 | 
						|
    return () => {
 | 
						|
      var _a, _b, _c;
 | 
						|
      if (((_a = this.plugin.settings) == null ? void 0 : _a.autoPreviewMode) !== "cardView") {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (this.currentFocusId !== void 0) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      if (this.countSearchItemDetected === 0) {
 | 
						|
        (_b = this.cardViewComponent) == null ? void 0 : _b.detachCards();
 | 
						|
      }
 | 
						|
      const item = this.searchInterface.getResultItemAt(this.countSearchItemDetected);
 | 
						|
      if (!item)
 | 
						|
        return;
 | 
						|
      (_c = this.cardViewComponent) == null ? void 0 : _c.addCard(item.file);
 | 
						|
      this.cardViewCheckDebouncer();
 | 
						|
      this.countSearchItemDetected++;
 | 
						|
    };
 | 
						|
  }
 | 
						|
  renewCardViewComponent() {
 | 
						|
    var _a;
 | 
						|
    (_a = this.cardViewComponent) == null ? void 0 : _a.$destroy();
 | 
						|
    const { settings } = this.plugin;
 | 
						|
    if (!settings)
 | 
						|
      return;
 | 
						|
    const focusEl = this.searchInterface.searchInputEl;
 | 
						|
    if (!focusEl)
 | 
						|
      return;
 | 
						|
    const layout = parseCardLayout(settings.cardViewLayout);
 | 
						|
    this.app.workspace.onLayoutReady(() => {
 | 
						|
      const containerEl = this.app.workspace.rootSplit.containerEl;
 | 
						|
      const cardViewComponent = new CardViewComponent_default({
 | 
						|
        target: containerEl,
 | 
						|
        props: {
 | 
						|
          layout,
 | 
						|
          focusEl
 | 
						|
        }
 | 
						|
      });
 | 
						|
      this.cardViewComponent = cardViewComponent;
 | 
						|
    });
 | 
						|
  }
 | 
						|
  renewWorkspacePreviewComponent() {
 | 
						|
    var _a;
 | 
						|
    (_a = this.workspacePreviewComponent) == null ? void 0 : _a.$destroy();
 | 
						|
    if (this.currentFocusId === void 0)
 | 
						|
      return;
 | 
						|
    const focusEl = this.searchInterface.searchInputEl;
 | 
						|
    if (!focusEl)
 | 
						|
      return;
 | 
						|
    const item = this.searchInterface.getResultItemAt(this.currentFocusId);
 | 
						|
    if (!item)
 | 
						|
      return;
 | 
						|
    this.app.workspace.onLayoutReady(() => {
 | 
						|
      var _a2;
 | 
						|
      const containerEl = this.app.workspace.rootSplit.containerEl;
 | 
						|
      const workspacePreviewComponent = new WorkspacePreview_default({
 | 
						|
        target: containerEl,
 | 
						|
        props: {
 | 
						|
          file: item.file,
 | 
						|
          matches: (_a2 = item.result.content) != null ? _a2 : [],
 | 
						|
          focusEl
 | 
						|
        }
 | 
						|
      });
 | 
						|
      this.workspacePreviewComponent = workspacePreviewComponent;
 | 
						|
    });
 | 
						|
  }
 | 
						|
  get focusOnInput() {
 | 
						|
    return () => __async(this, null, function* () {
 | 
						|
      const inputEl = yield retry(() => {
 | 
						|
        var _a;
 | 
						|
        return (_a = this.plugin.searchInterface) == null ? void 0 : _a.searchInputEl;
 | 
						|
      }, RETRY_INTERVAL, RETRY_TRIALS);
 | 
						|
      if (inputEl === void 0) {
 | 
						|
        throw "[ERROR in Core Search Assistant] failed to find the search input form.";
 | 
						|
      }
 | 
						|
      inputEl.focus();
 | 
						|
    });
 | 
						|
  }
 | 
						|
  get onSortOrderChanged() {
 | 
						|
    return () => {
 | 
						|
      var _a;
 | 
						|
      this.reset();
 | 
						|
      if (((_a = this.plugin.settings) == null ? void 0 : _a.autoPreviewMode) === "cardView") {
 | 
						|
        this.renewCardViewPage();
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
  shouldCollapseSidedock(reason) {
 | 
						|
    var _a, _b;
 | 
						|
    if (!((_a = this.plugin.settings) == null ? void 0 : _a.autoToggleSidebar)) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
    if (reason === void 0) {
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    if (reason.id !== "mouse") {
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    const targetEl = reason.event.target;
 | 
						|
    if (!(targetEl instanceof HTMLElement)) {
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    return !((_b = this.searchInterface.sideDock) == null ? void 0 : _b.containerEl.contains(targetEl));
 | 
						|
  }
 | 
						|
  get onCheckCardView() {
 | 
						|
    return () => {
 | 
						|
      const { cardViewComponent } = this;
 | 
						|
      if (!cardViewComponent)
 | 
						|
        return;
 | 
						|
      const ok = cardViewComponent.checkCardsRenderedCorrectly(this.filesToBeRendered());
 | 
						|
      if (!ok) {
 | 
						|
        this.reset();
 | 
						|
        this.renewCardViewPage();
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/interfaces/SearchComponentInterface.ts
 | 
						|
var import_obsidian16 = __toModule(require("obsidian"));
 | 
						|
 | 
						|
// src/types/Guards.ts
 | 
						|
var import_obsidian15 = __toModule(require("obsidian"));
 | 
						|
var SORT_ORDER_IN_SEARCH = [
 | 
						|
  "alphabeticalReverse",
 | 
						|
  "alphabetical",
 | 
						|
  "byModifiedTime",
 | 
						|
  "byModifiedTimeReverse",
 | 
						|
  "byCreatedTime",
 | 
						|
  "byCreatedTimeReverse"
 | 
						|
];
 | 
						|
function isSearchView(view) {
 | 
						|
  if (typeof view !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (view === null) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  const {
 | 
						|
    matchingCase,
 | 
						|
    explainSearch,
 | 
						|
    dom,
 | 
						|
    setCollapseAll,
 | 
						|
    setExplainSearch,
 | 
						|
    setExtraContext,
 | 
						|
    setMatchingCase,
 | 
						|
    setSortOrder,
 | 
						|
    searchInfoEl,
 | 
						|
    searchComponent
 | 
						|
  } = view;
 | 
						|
  if (typeof matchingCase !== "boolean") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof explainSearch !== "boolean") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!isSearchDom(dom)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof searchComponent !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof searchInfoEl !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(searchInfoEl instanceof HTMLDivElement)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(setCollapseAll instanceof Function)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(setExplainSearch instanceof Function)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(setExtraContext instanceof Function)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(setMatchingCase instanceof Function)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(setSortOrder instanceof Function)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
function isSearchDom(obj) {
 | 
						|
  if (typeof obj !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (obj === null) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  const { extraContext, collapseAll, sortOrder, vChildren, childrenEl } = obj;
 | 
						|
  if (typeof extraContext !== "boolean") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof collapseAll !== "boolean") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof sortOrder !== "string") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!SORT_ORDER_IN_SEARCH.includes(sortOrder)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!isSearchResultItemGroup(vChildren)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (typeof childrenEl !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(childrenEl instanceof HTMLElement)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
function isSearchResultItemGroup(obj) {
 | 
						|
  if (typeof obj !== "object" || obj === null) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  const { _children: children2 } = obj;
 | 
						|
  if (typeof children2 !== "object") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(children2 instanceof Array)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  for (const child of children2) {
 | 
						|
    if (!isSearchResultItem(child)) {
 | 
						|
      return false;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
function isSearchResultItem(obj) {
 | 
						|
  if (typeof obj !== "object" || obj === null) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  const { file, containerEl } = obj;
 | 
						|
  if (!(file instanceof import_obsidian15.TFile)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  if (!(containerEl instanceof HTMLElement)) {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
}
 | 
						|
 | 
						|
// src/utils/LinkedList.ts
 | 
						|
var LinkedList = class {
 | 
						|
  constructor(events, eventId) {
 | 
						|
    this.unlinkedPool = new Map();
 | 
						|
    this.events = events;
 | 
						|
    this.eventId = eventId;
 | 
						|
  }
 | 
						|
  structure(cur, pre) {
 | 
						|
    let linked = false;
 | 
						|
    if (pre === void 0) {
 | 
						|
      this.setRoot(cur);
 | 
						|
      linked = true;
 | 
						|
      this.signal();
 | 
						|
    } else if (this.tail !== void 0 && pre === this.tail.entity) {
 | 
						|
      this.link(cur);
 | 
						|
      linked = true;
 | 
						|
      this.unlinkedPool.delete(cur);
 | 
						|
      this.signal();
 | 
						|
    }
 | 
						|
    if (linked) {
 | 
						|
      if (!this.unlinkedPool.has(cur)) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      const next = this.unlinkedPool.get(cur);
 | 
						|
      if (next === void 0) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      this.structure(next, cur);
 | 
						|
    } else {
 | 
						|
      if (pre) {
 | 
						|
        this.unlinkedPool.set(pre, cur);
 | 
						|
      }
 | 
						|
    }
 | 
						|
  }
 | 
						|
  setRoot(entity) {
 | 
						|
    const rootNode = {
 | 
						|
      entity,
 | 
						|
      pre: void 0,
 | 
						|
      next: void 0
 | 
						|
    };
 | 
						|
    this.head = rootNode;
 | 
						|
    this.tail = rootNode;
 | 
						|
  }
 | 
						|
  link(cur) {
 | 
						|
    if (!this.tail) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const currentTail = this.tail;
 | 
						|
    currentTail.next = {
 | 
						|
      entity: cur,
 | 
						|
      pre: currentTail,
 | 
						|
      next: void 0
 | 
						|
    };
 | 
						|
    this.tail = currentTail.next;
 | 
						|
  }
 | 
						|
  clean() {
 | 
						|
    this.head = void 0;
 | 
						|
    this.tail = void 0;
 | 
						|
    this.unlinkedPool = new Map();
 | 
						|
  }
 | 
						|
  signal() {
 | 
						|
    this.events.trigger(this.eventId);
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/interfaces/SearchComponentInterface.ts
 | 
						|
var SearchComponentInterface = class extends import_obsidian16.Component {
 | 
						|
  constructor(app2, plugin2, events) {
 | 
						|
    super();
 | 
						|
    this.observationConfig = {
 | 
						|
      childList: true
 | 
						|
    };
 | 
						|
    this.onObservedCallback = (mutations, _observer) => __async(this, null, function* () {
 | 
						|
      for (const mutation of mutations) {
 | 
						|
        if (mutation.addedNodes.length === 0) {
 | 
						|
          continue;
 | 
						|
        }
 | 
						|
        const pre = mutation.previousSibling;
 | 
						|
        if (!(pre instanceof HTMLElement)) {
 | 
						|
          continue;
 | 
						|
        }
 | 
						|
        for (const node of Array.from(mutation.addedNodes)) {
 | 
						|
          if (!(node instanceof HTMLElement)) {
 | 
						|
            continue;
 | 
						|
          }
 | 
						|
          const isSearchResultItem2 = node.tagName === "DIV" && node.hasClass("tree-item") && node.hasClass("search-result");
 | 
						|
          if (!isSearchResultItem2) {
 | 
						|
            continue;
 | 
						|
          }
 | 
						|
          if (!this.linkedList) {
 | 
						|
            return;
 | 
						|
          }
 | 
						|
          this.linkedList.structure(node, this.isRootSearchResult(pre) ? void 0 : pre);
 | 
						|
        }
 | 
						|
      }
 | 
						|
    });
 | 
						|
    this.app = app2;
 | 
						|
    this.plugin = plugin2;
 | 
						|
    this.events = events;
 | 
						|
    this.observer = new MutationObserver(this.onObservedCallback.bind(this));
 | 
						|
  }
 | 
						|
  onload() {
 | 
						|
    this.app.workspace.onLayoutReady(() => {
 | 
						|
      this.renewSortOrderInfo();
 | 
						|
      this.registerDomEvent(document, "click", () => {
 | 
						|
        this.renewSortOrderInfo(this.events);
 | 
						|
      });
 | 
						|
    });
 | 
						|
  }
 | 
						|
  onunload() {
 | 
						|
    var _a, _b;
 | 
						|
    (_a = this.sortOrderContainerEl) == null ? void 0 : _a.empty();
 | 
						|
    (_b = this.sortOrderContainerEl) == null ? void 0 : _b.remove();
 | 
						|
    this.observer.disconnect();
 | 
						|
  }
 | 
						|
  toggleMatchingCase() {
 | 
						|
    const view = this.searchView;
 | 
						|
    view == null ? void 0 : view.setMatchingCase(!view.matchingCase);
 | 
						|
  }
 | 
						|
  toggleExplainSearch() {
 | 
						|
    const view = this.searchView;
 | 
						|
    view == null ? void 0 : view.setExplainSearch(!view.explainSearch);
 | 
						|
  }
 | 
						|
  toggleCollapseAll() {
 | 
						|
    const view = this.searchView;
 | 
						|
    view == null ? void 0 : view.setCollapseAll(!view.dom.collapseAll);
 | 
						|
  }
 | 
						|
  toggleExtraContext() {
 | 
						|
    const view = this.searchView;
 | 
						|
    view == null ? void 0 : view.setExtraContext(!view.dom.extraContext);
 | 
						|
  }
 | 
						|
  setSortOrder(sortOrder) {
 | 
						|
    const view = this.searchView;
 | 
						|
    const originalOrder = view == null ? void 0 : view.dom.sortOrder;
 | 
						|
    view == null ? void 0 : view.setSortOrder(sortOrder);
 | 
						|
    return sortOrder !== originalOrder;
 | 
						|
  }
 | 
						|
  focusOn(pos) {
 | 
						|
    var _a;
 | 
						|
    this.unfocus();
 | 
						|
    const item = this.getResultItemAt(pos);
 | 
						|
    if (!item) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    item.containerEl.addClass("core-search-assistant_search-result-items-focus");
 | 
						|
    item.containerEl.scrollIntoView(((_a = this.plugin.settings) == null ? void 0 : _a.keepSelectedItemsCentered) ? { block: "center" } : { block: "nearest" });
 | 
						|
  }
 | 
						|
  unfocus() {
 | 
						|
    const items = this.resultItems;
 | 
						|
    items.forEach((item) => {
 | 
						|
      item.containerEl.removeClass("core-search-assistant_search-result-items-focus");
 | 
						|
    });
 | 
						|
  }
 | 
						|
  open(pos, direction) {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      const item = this.getResultItemAt(pos);
 | 
						|
      if (!item) {
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      const { file } = item;
 | 
						|
      const leaf = direction === void 0 ? this.app.workspace.getMostRecentLeaf() : this.app.workspace.splitActiveLeaf(direction);
 | 
						|
      yield leaf.openFile(file);
 | 
						|
      this.app.workspace.setActiveLeaf(leaf, true, true);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  renewSortOrderInfo(events) {
 | 
						|
    if (!this.sortOrderContainerEl) {
 | 
						|
      this.createSortOrderEls();
 | 
						|
    }
 | 
						|
    const view = this.searchView;
 | 
						|
    if (!view) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const sortOrder = view.dom.sortOrder;
 | 
						|
    if (!this.sortOrderContentEl) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const originalContent = this.sortOrderContentEl.textContent;
 | 
						|
    this.sortOrderContentEl.textContent = searchOptions[sortOrder].description;
 | 
						|
    if (events !== void 0 && originalContent !== this.sortOrderContentEl.textContent) {
 | 
						|
      events.trigger(EVENT_SORT_ORDER_CHANGED);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  count() {
 | 
						|
    var _a;
 | 
						|
    const results = (_a = this.searchView) == null ? void 0 : _a.dom.vChildren._children;
 | 
						|
    if (!results) {
 | 
						|
      return 0;
 | 
						|
    }
 | 
						|
    return results.length;
 | 
						|
  }
 | 
						|
  get resultItems() {
 | 
						|
    var _a, _b;
 | 
						|
    return (_b = (_a = this.searchView) == null ? void 0 : _a.dom.vChildren._children) != null ? _b : [];
 | 
						|
  }
 | 
						|
  getResultItemAt(pos) {
 | 
						|
    var _a;
 | 
						|
    return (_a = this.searchView) == null ? void 0 : _a.dom.vChildren._children[pos];
 | 
						|
  }
 | 
						|
  get searchInputEl() {
 | 
						|
    var _a;
 | 
						|
    return (_a = this.searchView) == null ? void 0 : _a.searchComponent.inputEl;
 | 
						|
  }
 | 
						|
  startWatching(events) {
 | 
						|
    var _a;
 | 
						|
    this.linkedList = new LinkedList(events, EVENT_SEARCH_RESULT_ITEM_DETECTED);
 | 
						|
    const childrenContainerEl = (_a = this.searchView) == null ? void 0 : _a.dom.childrenEl;
 | 
						|
    if (!(childrenContainerEl instanceof HTMLElement)) {
 | 
						|
      throw "[ERROR in Core Search Assistant] failed to SearchComponentInterface#startWatching: childrenContainerEl is not an instance of HTMLElement";
 | 
						|
    }
 | 
						|
    this.observer.observe(childrenContainerEl, this.observationConfig);
 | 
						|
  }
 | 
						|
  stopWatching() {
 | 
						|
    this.observer.disconnect();
 | 
						|
  }
 | 
						|
  collapseOppositeSidedock() {
 | 
						|
    const sideDock = this.oppositeSidedock;
 | 
						|
    if (sideDock === void 0) {
 | 
						|
      throw "[ERROR in Core Search Assistant] failed to collapseOppositeSidedock: failed to fetch the opposite sidedock";
 | 
						|
    }
 | 
						|
    sideDock.collapse();
 | 
						|
  }
 | 
						|
  expandOppositeSidedock() {
 | 
						|
    const sideDock = this.oppositeSidedock;
 | 
						|
    if (sideDock === void 0) {
 | 
						|
      throw "[ERROR in Core Search Assistant] failed to expandOppositeSidedock: failed to fetch the opposite sidedock";
 | 
						|
    }
 | 
						|
    sideDock.expand();
 | 
						|
  }
 | 
						|
  collapseSidedock() {
 | 
						|
    const sideDock = this.sideDock;
 | 
						|
    if (sideDock === void 0) {
 | 
						|
      throw "[ERROR in Core Search Assistant] failed to collapseSidedock: failed to fetch the sidedock";
 | 
						|
    }
 | 
						|
    sideDock.collapse();
 | 
						|
  }
 | 
						|
  get sideDock() {
 | 
						|
    const leaf = this.searchLeaf;
 | 
						|
    if (leaf === void 0) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    const parent = leaf.getRoot();
 | 
						|
    if (parent instanceof import_obsidian16.WorkspaceSidedock) {
 | 
						|
      return parent;
 | 
						|
    } else {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  get oppositeSidedock() {
 | 
						|
    const leaf = this.searchLeaf;
 | 
						|
    if (leaf === void 0) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    const parent = leaf.getRoot();
 | 
						|
    if (parent === this.app.workspace.leftSplit) {
 | 
						|
      const opposite = this.app.workspace.rightSplit;
 | 
						|
      return opposite instanceof import_obsidian16.WorkspaceSidedock ? opposite : void 0;
 | 
						|
    } else if (parent === this.app.workspace.rightSplit) {
 | 
						|
      const opposite = this.app.workspace.leftSplit;
 | 
						|
      return opposite instanceof import_obsidian16.WorkspaceSidedock ? opposite : void 0;
 | 
						|
    } else {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
  }
 | 
						|
  createSortOrderEls() {
 | 
						|
    this.sortOrderContainerEl = createEl("div", {
 | 
						|
      cls: "search-info-container"
 | 
						|
    });
 | 
						|
    this.sortOrderContentEl = this.sortOrderContainerEl.createEl("div");
 | 
						|
    const view = this.searchView;
 | 
						|
    if (!view) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    this.sortOrderContainerEl.insertAfter(view.searchInfoEl);
 | 
						|
  }
 | 
						|
  get matchingCaseButtonEl() {
 | 
						|
    var _a;
 | 
						|
    return (_a = this.searchView) == null ? void 0 : _a.matchingCaseButtonEl;
 | 
						|
  }
 | 
						|
  get tabHeaderEl() {
 | 
						|
    var _a;
 | 
						|
    return (_a = this.searchLeaf) == null ? void 0 : _a.tabHeaderEl;
 | 
						|
  }
 | 
						|
  isBuiltInElementToOpenFile(el) {
 | 
						|
    const isFileNameContainerEl = el.tagName === "DIV" && el.hasClass("tree-item-inner");
 | 
						|
    const isMatchCountContainerEl = el.tagName === "DIV" && el.hasClass("tree-item-flair-outer");
 | 
						|
    const isMatchContainerEl = el.tagName === "DIV" && el.hasClass("search-result-file-match");
 | 
						|
    if (isFileNameContainerEl || isMatchContainerEl || isMatchCountContainerEl) {
 | 
						|
      return true;
 | 
						|
    }
 | 
						|
    const parentEl = el.parentElement;
 | 
						|
    if (parentEl === null) {
 | 
						|
      return false;
 | 
						|
    } else {
 | 
						|
      return this.isBuiltInElementToOpenFile(parentEl);
 | 
						|
    }
 | 
						|
  }
 | 
						|
  isShowMoreContextButton(el) {
 | 
						|
    return el.tagName === "DIV" && el.hasClass("search-result-hover-button");
 | 
						|
  }
 | 
						|
  get searchView() {
 | 
						|
    const leaf = this.searchLeaf;
 | 
						|
    if (!leaf) {
 | 
						|
      return void 0;
 | 
						|
    }
 | 
						|
    const view = leaf.view;
 | 
						|
    return isSearchView(view) ? view : void 0;
 | 
						|
  }
 | 
						|
  get searchLeaf() {
 | 
						|
    return this.app.workspace.getLeavesOfType("search")[0];
 | 
						|
  }
 | 
						|
  isRootSearchResult(el) {
 | 
						|
    return el.tagName === "DIV" && !el.hasClass("tree-item") && !el.hasClass("search-result");
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// src/main.ts
 | 
						|
var import_obsidian17 = __toModule(require("obsidian"));
 | 
						|
var CoreSearchAssistantPlugin = class extends import_obsidian17.Plugin {
 | 
						|
  onload() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      yield this.loadSettings();
 | 
						|
      this.events = new CoreSearchAssistantEvents();
 | 
						|
      this.searchInterface = this.addChild(new SearchComponentInterface(this.app, this, this.events));
 | 
						|
      this.controller = this.addChild(new Controller(this.app, this, this.events, this.searchInterface));
 | 
						|
      this.watchLayoutChange();
 | 
						|
      this.setSvelteStoreValues();
 | 
						|
      this.addSettingTab(new CoreSearchAssistantSettingTab(this.app, this));
 | 
						|
    });
 | 
						|
  }
 | 
						|
  loadSettings() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      this.settings = deepMerge(DEFAULT_SETTINGS, yield this.loadData());
 | 
						|
    });
 | 
						|
  }
 | 
						|
  saveSettings() {
 | 
						|
    return __async(this, null, function* () {
 | 
						|
      yield this.saveData(this.settings);
 | 
						|
    });
 | 
						|
  }
 | 
						|
  renewController() {
 | 
						|
    if (this.controller) {
 | 
						|
      this.removeChild(this.controller);
 | 
						|
    }
 | 
						|
    if (this.events === void 0) {
 | 
						|
      throw "[ERROR in Core Search Interface] failed to renewController: plugin.events = undefined";
 | 
						|
    }
 | 
						|
    if (this.searchInterface === void 0) {
 | 
						|
      throw "[ERROR in Core Search Interface] failed to renewController: plugin.searchInterface = undefined";
 | 
						|
    }
 | 
						|
    this.controller = this.addChild(new Controller(this.app, this, this.events, this.searchInterface));
 | 
						|
  }
 | 
						|
  watchLayoutChange() {
 | 
						|
    this.app.workspace.onLayoutReady(() => {
 | 
						|
      this.app.workspace.on("layout-change", () => __async(this, null, function* () {
 | 
						|
        var _a;
 | 
						|
        if (yield (_a = this.controller) == null ? void 0 : _a.layoutChanged()) {
 | 
						|
          this.renewController();
 | 
						|
        }
 | 
						|
      }));
 | 
						|
    });
 | 
						|
  }
 | 
						|
  setSvelteStoreValues() {
 | 
						|
    plugin.set(this);
 | 
						|
    app.set(this.app);
 | 
						|
  }
 | 
						|
};
 | 
						|
/*! *****************************************************************************
 | 
						|
Copyright (c) Microsoft Corporation.
 | 
						|
 | 
						|
Permission to use, copy, modify, and/or distribute this software for any
 | 
						|
purpose with or without fee is hereby granted.
 | 
						|
 | 
						|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 | 
						|
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 | 
						|
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 | 
						|
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 | 
						|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 | 
						|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
						|
PERFORMANCE OF THIS SOFTWARE.
 | 
						|
***************************************************************************** */
 |