@difizen/libro-search 0.1.14 → 0.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/es/index.less CHANGED
@@ -97,10 +97,10 @@
97
97
  }
98
98
 
99
99
  .libro-selectedtext {
100
- background-color: rgb(255, 225, 0);
100
+ background-color: rgb(168, 172, 149) !important;
101
101
 
102
102
  span {
103
- background-color: rgb(255, 225, 0);
103
+ background-color: rgb(168, 172, 149) !important;
104
104
  }
105
105
  }
106
106
 
@@ -89,6 +89,7 @@ export declare class GenericSearchProvider extends AbstractSearchProvider {
89
89
  * @returns A promise that resolves with a boolean indicating whether a replace occurred.
90
90
  */
91
91
  replaceAllMatches(newText: string): Promise<boolean>;
92
+ isMatchChanged(matches: HTMLSearchMatch[], newMatches: HTMLSearchMatch[]): boolean;
92
93
  /**
93
94
  * Initialize the search using the provided options. Should update the UI
94
95
  * to highlight all matches and "select" whatever the first match should be.
@@ -1 +1 @@
1
- {"version":3,"file":"libro-search-generic-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-generic-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAGL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,4BAA4B,GAAG,CACzC,MAAM,EAAE,oBAAoB,KACzB,qBAAqB,CAAC;AAC3B,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF;;GAEG;AACH,qBACa,qBAAsB,SAAQ,sBAAsB;IAC/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;IACnD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAE3C;IACF,SAAS,CAAC,UAAU,oBAAgC;IACpD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAI1C;;OAEG;IACH,IAAa,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEnD;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,eAAe,GAAG,SAAS,CAE9C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,eAAe,EAAE,CAM/B;IAED;;OAEG;IACH,IAAa,YAAY,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,QAAQ;gBAEe,MAAM,EAAE,oBAAoB;IAGtE;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;;;;;;;;OAUG;IACM,OAAO,IAAI,IAAI;IAWxB;;;;;;OAMG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAIzE;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7E;;;;;;;OAOG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5E;;;;;;OAMG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D;;;;;;OAMG;IACH,UAAU,UAAiB,MAAM,GAAG,IAAI,mBAAiB,QAAQ,IAAI,CAAC,CAuDpE;IAEF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;cA0CjE,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,EAAE,gBAAgB;CAO7B;AACD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAU1D"}
1
+ {"version":3,"file":"libro-search-generic-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-generic-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAGL,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,4BAA4B,GAAG,CACzC,MAAM,EAAE,oBAAoB,KACzB,qBAAqB,CAAC;AAC3B,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF;;GAEG;AACH,qBACa,qBAAsB,SAAQ,sBAAsB;IAC/D,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACrC,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;IACnD,SAAS,CAAC,iBAAiB,EAAE,gBAAgB,CAE3C;IACF,SAAS,CAAC,UAAU,oBAAgC;IACpD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO;IAI1C;;OAEG;IACH,IAAa,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEnD;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,eAAe,GAAG,SAAS,CAE9C;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,eAAe,EAAE,CAM/B;IAED;;OAEG;IACH,IAAa,YAAY,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED;;;;OAIG;IACH,QAAQ,CAAC,UAAU,QAAQ;gBAEe,MAAM,EAAE,oBAAoB;IAGtE;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;;;;;;;;OAUG;IACM,OAAO,IAAI,IAAI;IAWxB;;;;;;OAMG;IACG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAIzE;;;;;;OAMG;IACG,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7E;;;;;;;OAOG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5E;;;;;;OAMG;IACG,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK1D,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO;IAkBlF;;;;;;OAMG;IACH,UAAU,UAAiB,MAAM,GAAG,IAAI,mBAAiB,QAAQ,IAAI,CAAC,CA6DpE;IAEF;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/B,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI;cA0CjE,gBAAgB,CAC9B,SAAS,EAAE,cAAc,EAAE,EAC3B,QAAQ,EAAE,gBAAgB;CAO7B;AACD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAU1D"}
@@ -1,5 +1,5 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- var _dec, _dec2, _class, _class2, _descriptor;
2
+ var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
3
3
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
4
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
5
5
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -38,14 +38,15 @@ export var GenericSearchProviderFactory = Symbol('GenericSearchProviderFactory')
38
38
  /**
39
39
  * Generic DOM tree search provider.
40
40
  */
41
- export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractSearchProvid) {
41
+ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec3 = prop(), _dec(_class = (_class2 = /*#__PURE__*/function (_AbstractSearchProvid) {
42
42
  _inherits(GenericSearchProvider, _AbstractSearchProvid);
43
43
  var _super = _createSuper(GenericSearchProvider);
44
44
  function GenericSearchProvider(option) {
45
45
  var _this;
46
46
  _classCallCheck(this, GenericSearchProvider);
47
47
  _this = _super.call(this, option);
48
- _initializerDefineProperty(_this, "_matches", _descriptor, _assertThisInitialized(_this));
48
+ _initializerDefineProperty(_this, "_currentMatchIndex", _descriptor, _assertThisInitialized(_this));
49
+ _initializerDefineProperty(_this, "_matches", _descriptor2, _assertThisInitialized(_this));
49
50
  _this._mutationObserver = new MutationObserver(_this._onWidgetChanged.bind(_assertThisInitialized(_this)));
50
51
  _this._markNodes = new Array();
51
52
  /**
@@ -74,14 +75,14 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
74
75
  while (1) switch (_context2.prev = _context2.next) {
75
76
  case 0:
76
77
  filters = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};
77
- _context2.next = 3;
78
- return _this.endQuery();
79
- case 3:
80
78
  _this._query = query;
81
79
  if (!(query === null)) {
82
80
  _context2.next = 6;
83
81
  break;
84
82
  }
83
+ _context2.next = 5;
84
+ return _this.endQuery();
85
+ case 5:
85
86
  return _context2.abrupt("return", Promise.resolve());
86
87
  case 6:
87
88
  if (!((_this$view$container = _this.view.container) !== null && _this$view$container !== void 0 && _this$view$container.current)) {
@@ -98,6 +99,15 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
98
99
  _context2.t0 = [];
99
100
  case 13:
100
101
  matches = _context2.t0;
102
+ if (_this.isMatchChanged(_this.matches, matches)) {
103
+ _context2.next = 16;
104
+ break;
105
+ }
106
+ return _context2.abrupt("return", Promise.resolve());
107
+ case 16:
108
+ _context2.next = 18;
109
+ return _this.endQuery();
110
+ case 18:
101
111
  // Transform the DOM
102
112
  nodeIdx = 0;
103
113
  _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
@@ -132,16 +142,16 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
132
142
  }
133
143
  }, _loop);
134
144
  });
135
- case 16:
145
+ case 20:
136
146
  if (!(nodeIdx < matches.length)) {
137
- _context2.next = 20;
147
+ _context2.next = 24;
138
148
  break;
139
149
  }
140
- return _context2.delegateYield(_loop(), "t1", 18);
141
- case 18:
142
- _context2.next = 16;
150
+ return _context2.delegateYield(_loop(), "t1", 22);
151
+ case 22:
152
+ _context2.next = 20;
143
153
  break;
144
- case 20:
154
+ case 24:
145
155
  if ((_this$view$container3 = _this.view.container) !== null && _this$view$container3 !== void 0 && _this$view$container3.current) {
146
156
  // Watch for future changes:
147
157
  _this._mutationObserver.observe((_this$view$container4 = _this.view.container) === null || _this$view$container4 === void 0 ? void 0 : _this$view$container4.current,
@@ -154,7 +164,7 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
154
164
  });
155
165
  }
156
166
  _this._matches = matches;
157
- case 22:
167
+ case 26:
158
168
  case "end":
159
169
  return _context2.stop();
160
170
  }
@@ -356,6 +366,25 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
356
366
  }
357
367
  return replaceAllMatches;
358
368
  }())
369
+ }, {
370
+ key: "isMatchChanged",
371
+ value: function isMatchChanged(matches, newMatches) {
372
+ if (matches.length !== newMatches.length) {
373
+ return true;
374
+ }
375
+ for (var i = 0; i < matches.length; i++) {
376
+ if (matches[i].text !== newMatches[i].text) {
377
+ return true;
378
+ }
379
+ if (matches[i].position !== newMatches[i].position) {
380
+ return true;
381
+ }
382
+ if (matches[i].node !== newMatches[i].node) {
383
+ return true;
384
+ }
385
+ }
386
+ return false;
387
+ }
359
388
  }, {
360
389
  key: "endQuery",
361
390
  value: (
@@ -456,7 +485,12 @@ export var GenericSearchProvider = (_dec = transient(), _dec2 = prop(), _dec(_cl
456
485
  }
457
486
  }]);
458
487
  return GenericSearchProvider;
459
- }(AbstractSearchProvider), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_matches", [_dec2], {
488
+ }(AbstractSearchProvider), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_currentMatchIndex", [_dec2], {
489
+ configurable: true,
490
+ enumerable: true,
491
+ writable: true,
492
+ initializer: null
493
+ }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_matches", [_dec3], {
460
494
  configurable: true,
461
495
  enumerable: true,
462
496
  writable: true,
@@ -1 +1 @@
1
- {"version":3,"file":"libro-search-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libro-search-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-provider.ts"],"names":[],"mappings":"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"}
@@ -783,7 +783,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
783
783
  enumerable: true,
784
784
  writable: true,
785
785
  initializer: function initializer() {
786
- return true;
786
+ return false;
787
787
  }
788
788
  }), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "onlySearchSelectedCells", [_dec5], {
789
789
  configurable: true,
@@ -8,7 +8,8 @@ import type { LibroSearchProvider } from './libro-search-provider.js';
8
8
  import { LibroSearchProviderFactory } from './libro-search-provider.js';
9
9
  import { LibroSearchUtils } from './libro-search-utils.js';
10
10
  export declare const ReplaceToggle: () => import("react/jsx-runtime").JSX.Element;
11
- export declare const SearchIndex: () => import("react/jsx-runtime").JSX.Element;
11
+ export declare const SearchIndex: React.FC;
12
+ export declare const SearchIndexMemo: import("react").NamedExoticComponent<{}>;
12
13
  export declare const SearchContent: () => import("react/jsx-runtime").JSX.Element;
13
14
  export declare const SearchComponent: import("react").ForwardRefExoticComponent<import("react").RefAttributes<HTMLDivElement>>;
14
15
  export declare class LibroSearchView extends BaseView {
@@ -26,6 +27,7 @@ export declare class LibroSearchView extends BaseView {
26
27
  replaceStr: string;
27
28
  caseSensitive: boolean;
28
29
  useRegex: boolean;
30
+ isSearching: boolean;
29
31
  view: import("react").ForwardRefExoticComponent<import("react").RefAttributes<HTMLDivElement>>;
30
32
  get contentHeight(): number;
31
33
  get currentMatchIndex(): number | undefined;
@@ -33,12 +35,12 @@ export declare class LibroSearchView extends BaseView {
33
35
  onViewMount: () => void;
34
36
  onActiveCellChanged: () => void;
35
37
  onCellsChanged: () => void;
36
- onviewWillUnmount: () => Promise<void>;
38
+ onViewWillUnmount: () => Promise<void>;
37
39
  show: () => void;
38
40
  hide: () => void;
39
41
  onFocus: () => void;
40
42
  onBlur: (e: React.FocusEvent<HTMLDivElement>) => void;
41
- search: (hightlightNext?: boolean) => void;
43
+ search: (hightlightNext?: boolean) => Promise<void>;
42
44
  toggleReplace: () => void;
43
45
  toggleSetting: () => void;
44
46
  toggleCaseSensitive: () => void;
@@ -50,9 +52,8 @@ export declare class LibroSearchView extends BaseView {
50
52
  replaceAll: () => void;
51
53
  initialQuery: () => void;
52
54
  getHeaderHeight: () => number;
53
- nextMatch: (reverse: boolean) => void;
55
+ nextMatch: (reverse: boolean) => Promise<void>;
54
56
  handleKeydown: (e: KeyboardEvent) => void;
55
- protected doHandleFindChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
56
57
  handleFindChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
57
58
  handleReplaceChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
58
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"libro-search-view.d.ts","sourceRoot":"","sources":["../src/libro-search-view.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAIjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D,eAAO,MAAM,aAAa,+CAYzB,CAAC;AAEF,eAAO,MAAM,WAAW,+CAevB,CAAC;AAEF,eAAO,MAAM,aAAa,+CA+HzB,CAAC;AAEF,eAAO,MAAM,eAAe,0FAiB1B,CAAC;AAEH,qBAEa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACd,qBAAqB,EAAE,0BAA0B,CAAC;IACtF,KAAK,CAAC,EAAE,SAAS,CAAC;IACV,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,aAAa,UAAS;IAC9B,IAAI,cAAc,IAAI,OAAO,CAE5B;IACO,cAAc,UAAS;IACvB,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAa;IAChC,UAAU,SAAM;IAChB,aAAa,UAAS;IACtB,QAAQ,UAAS;IAEhB,IAAI,2FAAmB;IAEhC,IAAI,aAAa,WAShB;IACD,IAAI,iBAAiB,uBAMpB;IACD,IAAI,YAAY,uBAEf;IAEQ,WAAW,aAQlB;IAEF,mBAAmB,aAIjB;IAEF,cAAc,aAIZ;IAEF,iBAAiB,sBAGf;IAEF,IAAI,aAKF;IACF,IAAI,aAQF;IAEF,OAAO,aAEL;IAEF,MAAM,MAAO,gBAAgB,CAAC,cAAc,CAAC,UAI3C;IAEF,MAAM,qCAcJ;IACF,aAAa,aAKX;IAEF,aAAa,aAGX;IAEF,mBAAmB,aAGjB;IAEF,cAAc,aAGZ;IAEF,IAAI,aAEF;IAEF,QAAQ,aAEN;IAEF,sBAAsB,MAAO,mBAAmB,UAI9C;IAEF,OAAO,aAEL;IACF,UAAU,aAER;IACF,YAAY,aAMV;IACF,eAAe,eAUb;IAEF,SAAS,YAAa,OAAO,UAM3B;IAEF,aAAa,MAAO,aAAa,UAqB/B;IAEF,SAAS,CAAC,kBAAkB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAEpE;IAEF,gBAAgB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAKxD;IACF,mBAAmB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAE3D;CACH"}
1
+ {"version":3,"file":"libro-search-view.d.ts","sourceRoot":"","sources":["../src/libro-search-view.tsx"],"names":[],"mappings":";AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAIjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D,eAAO,MAAM,aAAa,+CAYzB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAgB/B,CAAC;AAEF,eAAO,MAAM,eAAe,0CAAoB,CAAC;AAEjD,eAAO,MAAM,aAAa,+CA+HzB,CAAC;AAEF,eAAO,MAAM,eAAe,0FAiB1B,CAAC;AAEH,qBAEa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,gBAAgB,CAAC;IACd,qBAAqB,EAAE,0BAA0B,CAAC;IACtF,KAAK,CAAC,EAAE,SAAS,CAAC;IACV,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC,aAAa,UAAS;IAC9B,IAAI,cAAc,IAAI,OAAO,CAE5B;IACO,cAAc,UAAS;IACvB,OAAO,CAAC,EAAE,MAAM,CAAa;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAa;IAChC,UAAU,SAAM;IAChB,aAAa,UAAS;IACtB,QAAQ,UAAS;IACjB,WAAW,UAAS;IAEnB,IAAI,2FAAmB;IAEhC,IAAI,aAAa,WAShB;IACD,IAAI,iBAAiB,uBAMpB;IACD,IAAI,YAAY,uBAEf;IAEQ,WAAW,aAQlB;IAEF,mBAAmB,aAIjB;IAEF,cAAc,aAIZ;IAEF,iBAAiB,sBAGf;IAEF,IAAI,aAKF;IACF,IAAI,aAQF;IAEF,OAAO,aAEL;IAEF,MAAM,MAAO,gBAAgB,CAAC,cAAc,CAAC,UAI3C;IAEF,MAAM,8CAgBJ;IACF,aAAa,aAKX;IAEF,aAAa,aAGX;IAEF,mBAAmB,aAGjB;IAEF,cAAc,aAGZ;IAEF,IAAI,aAEF;IAEF,QAAQ,aAEN;IAEF,sBAAsB,MAAO,mBAAmB,UAI9C;IAEF,OAAO,aAEL;IACF,UAAU,aAER;IACF,YAAY,aAMV;IACF,eAAe,eAUb;IAEF,SAAS,YAAmB,OAAO,mBAMjC;IAEF,aAAa,MAAO,aAAa,UAqB/B;IAEF,gBAAgB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAKxD;IAEF,mBAAmB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAE3D;CACH"}
@@ -1,5 +1,5 @@
1
1
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11;
2
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12;
3
3
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
4
4
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
5
5
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
@@ -20,16 +20,17 @@ function _applyDecoratedDescriptor(target, property, decorators, descriptor, con
20
20
  function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); }
21
21
  import { ArrowDownOutlined, ArrowUpOutlined, CloseOutlined, createFromIconfontCN, EllipsisOutlined, RightOutlined } from '@ant-design/icons';
22
22
  import { LirboContextKey } from '@difizen/libro-core';
23
- import { prop, useInject, watch } from '@difizen/mana-app';
23
+ import { prop, useInject, useObserve, watch } from '@difizen/mana-app';
24
24
  import { BaseView, view, ViewInstance } from '@difizen/mana-app';
25
25
  import { inject, transient } from '@difizen/mana-app';
26
26
  import { l10n } from '@difizen/mana-l10n';
27
27
  import { Button, Checkbox, Input, Tag } from 'antd';
28
28
  import classnames from 'classnames';
29
- import { forwardRef, useEffect, useRef } from 'react';
29
+ import { forwardRef, memo, useEffect, useRef } from 'react';
30
30
  import { LibroSearchProviderFactory } from "./libro-search-provider.js";
31
31
  import { LibroSearchUtils } from "./libro-search-utils.js";
32
32
  import { jsx as _jsx } from "react/jsx-runtime";
33
+ import { Fragment as _Fragment } from "react/jsx-runtime";
33
34
  import { jsxs as _jsxs } from "react/jsx-runtime";
34
35
  var IconFont = createFromIconfontCN({
35
36
  scriptUrl: '//at.alicdn.com/t/a/font_3381673_65wfctnq7rt.js'
@@ -49,16 +50,19 @@ export var ReplaceToggle = function ReplaceToggle() {
49
50
  };
50
51
  export var SearchIndex = function SearchIndex() {
51
52
  var instance = useInject(ViewInstance);
52
-
53
- // TODO: trigger update when current match index changed, matchesCount dont work
54
- useEffect(function () {
55
- //
56
- }, [instance.currentMatchIndex]);
53
+ var currentMatchIndex = useObserve(instance.currentMatchIndex);
54
+ var matchesCount = useObserve(instance.matchesCount);
55
+ if (instance.isSearching) {
56
+ return /*#__PURE__*/_jsx(_Fragment, {
57
+ children: "searching..."
58
+ });
59
+ }
57
60
  return /*#__PURE__*/_jsx("div", {
58
61
  className: "libro-search-index",
59
- children: instance.matchesCount !== undefined ? "".concat(instance.currentMatchIndex, "/").concat(instance.matchesCount) : '无结果'
62
+ children: instance.matchesCount !== undefined ? "".concat(currentMatchIndex !== null && currentMatchIndex !== void 0 ? currentMatchIndex : '-', "/").concat(matchesCount !== null && matchesCount !== void 0 ? matchesCount : ' -') : '无结果'
60
63
  });
61
64
  };
65
+ export var SearchIndexMemo = /*#__PURE__*/memo(SearchIndex);
62
66
  export var SearchContent = function SearchContent() {
63
67
  var _instance$searchProvi;
64
68
  var instance = useInject(ViewInstance);
@@ -116,7 +120,7 @@ export var SearchContent = function SearchContent() {
116
120
  })
117
121
  }), /*#__PURE__*/_jsxs("td", {
118
122
  className: "libro-search-action",
119
- children: [/*#__PURE__*/_jsx(SearchIndex, {}), /*#__PURE__*/_jsxs("div", {
123
+ children: [/*#__PURE__*/_jsx(SearchIndexMemo, {}), /*#__PURE__*/_jsxs("div", {
120
124
  children: [/*#__PURE__*/_jsx(Button, {
121
125
  title: "Previous Match",
122
126
  onClick: instance.previous,
@@ -200,7 +204,7 @@ export var SearchComponent = /*#__PURE__*/forwardRef(function SearchComponent(pr
200
204
  children: instance.searchVisible && /*#__PURE__*/_jsx(SearchContent, {})
201
205
  });
202
206
  });
203
- export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-view'), _dec3 = inject(LirboContextKey), _dec4 = inject(LibroSearchUtils), _dec5 = inject(LibroSearchProviderFactory), _dec6 = prop(), _dec7 = prop(), _dec8 = prop(), _dec9 = prop(), _dec10 = prop(), _dec11 = prop(), _dec12 = prop(), _dec13 = prop(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_BaseView) {
207
+ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-view'), _dec3 = inject(LirboContextKey), _dec4 = inject(LibroSearchUtils), _dec5 = inject(LibroSearchProviderFactory), _dec6 = prop(), _dec7 = prop(), _dec8 = prop(), _dec9 = prop(), _dec10 = prop(), _dec11 = prop(), _dec12 = prop(), _dec13 = prop(), _dec14 = prop(), _dec(_class = _dec2(_class = (_class2 = /*#__PURE__*/function (_BaseView) {
204
208
  _inherits(LibroSearchView, _BaseView);
205
209
  var _super = _createSuper(LibroSearchView);
206
210
  function LibroSearchView() {
@@ -221,6 +225,7 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
221
225
  _initializerDefineProperty(_this, "replaceStr", _descriptor9, _assertThisInitialized(_this));
222
226
  _initializerDefineProperty(_this, "caseSensitive", _descriptor10, _assertThisInitialized(_this));
223
227
  _initializerDefineProperty(_this, "useRegex", _descriptor11, _assertThisInitialized(_this));
228
+ _initializerDefineProperty(_this, "isSearching", _descriptor12, _assertThisInitialized(_this));
224
229
  _this.view = SearchComponent;
225
230
  _this.onViewMount = function () {
226
231
  if (!_this.searchProvider && _this.libro) {
@@ -245,7 +250,7 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
245
250
  (_this$searchProvider2 = _this.searchProvider) === null || _this$searchProvider2 === void 0 || _this$searchProvider2.onCellsChanged();
246
251
  }
247
252
  };
248
- _this.onviewWillUnmount = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
253
+ _this.onViewWillUnmount = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
249
254
  var _this$searchProvider3, _this$searchProvider4;
250
255
  return _regeneratorRuntime().wrap(function _callee$(_context) {
251
256
  while (1) switch (_context.prev = _context.next) {
@@ -286,20 +291,42 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
286
291
  _this.contextKey.enableCommandMode();
287
292
  }
288
293
  };
289
- _this.search = function () {
290
- var hightlightNext = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
291
- if (_this.searchProvider) {
292
- _this.lastSearch = _this.findStr;
293
- var query = _this.utils.parseQuery(_this.findStr || '', _this.caseSensitive, _this.useRegex);
294
- if (query) {
295
- var _this$searchProvider6;
296
- (_this$searchProvider6 = _this.searchProvider) === null || _this$searchProvider6 === void 0 || _this$searchProvider6.startQuery(query, undefined, hightlightNext);
297
- } else {
298
- var _this$searchProvider7;
299
- (_this$searchProvider7 = _this.searchProvider) === null || _this$searchProvider7 === void 0 || _this$searchProvider7.endQuery();
294
+ _this.search = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
295
+ var hightlightNext,
296
+ query,
297
+ _this$searchProvider6,
298
+ _this$searchProvider7,
299
+ _args2 = arguments;
300
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
301
+ while (1) switch (_context2.prev = _context2.next) {
302
+ case 0:
303
+ hightlightNext = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : true;
304
+ if (!_this.searchProvider) {
305
+ _context2.next = 13;
306
+ break;
307
+ }
308
+ _this.lastSearch = _this.findStr;
309
+ query = _this.utils.parseQuery(_this.findStr || '', _this.caseSensitive, _this.useRegex);
310
+ if (!query) {
311
+ _context2.next = 11;
312
+ break;
313
+ }
314
+ _this.isSearching = true;
315
+ _context2.next = 8;
316
+ return (_this$searchProvider6 = _this.searchProvider) === null || _this$searchProvider6 === void 0 ? void 0 : _this$searchProvider6.startQuery(query, undefined, hightlightNext);
317
+ case 8:
318
+ _this.isSearching = false;
319
+ _context2.next = 13;
320
+ break;
321
+ case 11:
322
+ _context2.next = 13;
323
+ return (_this$searchProvider7 = _this.searchProvider) === null || _this$searchProvider7 === void 0 ? void 0 : _this$searchProvider7.endQuery();
324
+ case 13:
325
+ case "end":
326
+ return _context2.stop();
300
327
  }
301
- }
302
- };
328
+ }, _callee2);
329
+ }));
303
330
  _this.toggleReplace = function () {
304
331
  if (_this.searchProvider) {
305
332
  _this.searchProvider.replaceMode = !_this.replaceVisible;
@@ -359,15 +386,34 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
359
386
  }
360
387
  return height;
361
388
  };
362
- _this.nextMatch = function (reverse) {
363
- if (reverse) {
364
- var _this$searchProvider13;
365
- (_this$searchProvider13 = _this.searchProvider) === null || _this$searchProvider13 === void 0 || _this$searchProvider13.highlightPrevious();
366
- } else {
367
- var _this$searchProvider14;
368
- (_this$searchProvider14 = _this.searchProvider) === null || _this$searchProvider14 === void 0 || _this$searchProvider14.highlightNext();
369
- }
370
- };
389
+ _this.nextMatch = /*#__PURE__*/function () {
390
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(reverse) {
391
+ var _this$searchProvider13, _this$searchProvider14;
392
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
393
+ while (1) switch (_context3.prev = _context3.next) {
394
+ case 0:
395
+ if (!reverse) {
396
+ _context3.next = 5;
397
+ break;
398
+ }
399
+ _context3.next = 3;
400
+ return (_this$searchProvider13 = _this.searchProvider) === null || _this$searchProvider13 === void 0 ? void 0 : _this$searchProvider13.highlightPrevious();
401
+ case 3:
402
+ _context3.next = 7;
403
+ break;
404
+ case 5:
405
+ _context3.next = 7;
406
+ return (_this$searchProvider14 = _this.searchProvider) === null || _this$searchProvider14 === void 0 ? void 0 : _this$searchProvider14.highlightNext();
407
+ case 7:
408
+ case "end":
409
+ return _context3.stop();
410
+ }
411
+ }, _callee3);
412
+ }));
413
+ return function (_x) {
414
+ return _ref3.apply(this, arguments);
415
+ };
416
+ }();
371
417
  _this.handleKeydown = function (e) {
372
418
  if (e.key === 'Escape') {
373
419
  e.stopPropagation();
@@ -390,9 +436,6 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
390
436
  return;
391
437
  }
392
438
  };
393
- _this.doHandleFindChange = function (e) {
394
- _this.findStr = e.target.value;
395
- };
396
439
  _this.handleFindChange = function (e) {
397
440
  _this.findStr = e.target.value;
398
441
  if (_this.findStr !== _this.lastSearch) {
@@ -509,4 +552,11 @@ export var LibroSearchView = (_dec = transient(), _dec2 = view('libro-search-vie
509
552
  initializer: function initializer() {
510
553
  return false;
511
554
  }
555
+ }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "isSearching", [_dec14], {
556
+ configurable: true,
557
+ enumerable: true,
558
+ writable: true,
559
+ initializer: function initializer() {
560
+ return false;
561
+ }
512
562
  })), _class2)) || _class) || _class);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@difizen/libro-search",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "libro",
@@ -36,9 +36,9 @@
36
36
  "@difizen/mana-app": "latest",
37
37
  "@difizen/mana-l10n": "latest",
38
38
  "@ant-design/icons": "^5.1.0",
39
- "@difizen/libro-common": "^0.1.14",
40
- "@difizen/libro-core": "^0.1.14",
41
- "@difizen/libro-code-editor": "^0.1.14",
39
+ "@difizen/libro-common": "^0.1.15",
40
+ "@difizen/libro-core": "^0.1.15",
41
+ "@difizen/libro-code-editor": "^0.1.15",
42
42
  "@types/lodash.debounce": "^4.0.7",
43
43
  "classnames": "^2.3.2",
44
44
  "lodash.debounce": "^4.0.8",
package/src/index.less CHANGED
@@ -97,10 +97,10 @@
97
97
  }
98
98
 
99
99
  .libro-selectedtext {
100
- background-color: rgb(255, 225, 0);
100
+ background-color: rgb(168, 172, 149) !important;
101
101
 
102
102
  span {
103
- background-color: rgb(255, 225, 0);
103
+ background-color: rgb(168, 172, 149) !important;
104
104
  }
105
105
  }
106
106
 
@@ -23,7 +23,7 @@ export const GenericSearchProviderFactory = Symbol('GenericSearchProviderFactory
23
23
  @transient()
24
24
  export class GenericSearchProvider extends AbstractSearchProvider {
25
25
  protected _query: RegExp | null;
26
- protected _currentMatchIndex: number;
26
+ @prop() protected _currentMatchIndex: number;
27
27
  @prop() protected _matches: HTMLSearchMatch[] = [];
28
28
  protected _mutationObserver: MutationObserver = new MutationObserver(
29
29
  this._onWidgetChanged.bind(this),
@@ -159,6 +159,24 @@ export class GenericSearchProvider extends AbstractSearchProvider {
159
159
  return Promise.resolve(false);
160
160
  }
161
161
 
162
+ isMatchChanged(matches: HTMLSearchMatch[], newMatches: HTMLSearchMatch[]): boolean {
163
+ if (matches.length !== newMatches.length) {
164
+ return true;
165
+ }
166
+ for (let i = 0; i < matches.length; i++) {
167
+ if (matches[i].text !== newMatches[i].text) {
168
+ return true;
169
+ }
170
+ if (matches[i].position !== newMatches[i].position) {
171
+ return true;
172
+ }
173
+ if (matches[i].node !== newMatches[i].node) {
174
+ return true;
175
+ }
176
+ }
177
+ return false;
178
+ }
179
+
162
180
  /**
163
181
  * Initialize the search using the provided options. Should update the UI
164
182
  * to highlight all matches and "select" whatever the first match should be.
@@ -167,10 +185,10 @@ export class GenericSearchProvider extends AbstractSearchProvider {
167
185
  * @param filters Filter parameters to pass to provider
168
186
  */
169
187
  startQuery = async (query: RegExp | null, filters = {}): Promise<void> => {
170
- await this.endQuery();
171
188
  this._query = query;
172
189
 
173
190
  if (query === null) {
191
+ await this.endQuery();
174
192
  return Promise.resolve();
175
193
  }
176
194
 
@@ -178,6 +196,12 @@ export class GenericSearchProvider extends AbstractSearchProvider {
178
196
  ? await searchInHTML(query, this.view.container?.current)
179
197
  : [];
180
198
 
199
+ if (!this.isMatchChanged(this.matches, matches)) {
200
+ return Promise.resolve();
201
+ }
202
+
203
+ await this.endQuery();
204
+
181
205
  // Transform the DOM
182
206
  let nodeIdx = 0;
183
207
  while (nodeIdx < matches.length) {
@@ -44,7 +44,7 @@ export class LibroSearchProvider extends AbstractSearchProvider {
44
44
 
45
45
  protected toDispose = new DisposableCollection();
46
46
  @prop() protected currentProviderIndex: number | undefined = undefined;
47
- @prop() searchCellOutput = true;
47
+ @prop() searchCellOutput = false;
48
48
  @prop() protected onlySearchSelectedCells = false;
49
49
  @prop() replaceMode = false;
50
50
 
@@ -8,7 +8,7 @@ import {
8
8
  } from '@ant-design/icons';
9
9
  import type { LibroView } from '@difizen/libro-core';
10
10
  import { LirboContextKey } from '@difizen/libro-core';
11
- import { prop, useInject, watch } from '@difizen/mana-app';
11
+ import { prop, useInject, useObserve, watch } from '@difizen/mana-app';
12
12
  import { BaseView, view, ViewInstance } from '@difizen/mana-app';
13
13
  import { inject, transient } from '@difizen/mana-app';
14
14
  import { l10n } from '@difizen/mana-l10n';
@@ -16,7 +16,7 @@ import { Button, Checkbox, Input, Tag } from 'antd';
16
16
  import type { CheckboxChangeEvent } from 'antd/es/checkbox';
17
17
  import type { InputRef } from 'antd/es/input';
18
18
  import classnames from 'classnames';
19
- import { forwardRef, useEffect, useRef } from 'react';
19
+ import { forwardRef, memo, useEffect, useRef } from 'react';
20
20
 
21
21
  import type { LibroSearchProvider } from './libro-search-provider.js';
22
22
  import { LibroSearchProviderFactory } from './libro-search-provider.js';
@@ -40,23 +40,26 @@ export const ReplaceToggle = () => {
40
40
  );
41
41
  };
42
42
 
43
- export const SearchIndex = () => {
43
+ export const SearchIndex: React.FC = () => {
44
44
  const instance = useInject<LibroSearchView>(ViewInstance);
45
+ const currentMatchIndex = useObserve(instance.currentMatchIndex);
46
+ const matchesCount = useObserve(instance.matchesCount);
45
47
 
46
- // TODO: trigger update when current match index changed, matchesCount dont work
47
- useEffect(() => {
48
- //
49
- }, [instance.currentMatchIndex]);
48
+ if (instance.isSearching) {
49
+ return <>searching...</>;
50
+ }
50
51
 
51
52
  return (
52
53
  <div className="libro-search-index">
53
54
  {instance.matchesCount !== undefined
54
- ? `${instance.currentMatchIndex}/${instance.matchesCount}`
55
+ ? `${currentMatchIndex ?? '-'}/${matchesCount ?? ' -'}`
55
56
  : '无结果'}
56
57
  </div>
57
58
  );
58
59
  };
59
60
 
61
+ export const SearchIndexMemo = memo(SearchIndex);
62
+
60
63
  export const SearchContent = () => {
61
64
  const instance = useInject<LibroSearchView>(ViewInstance);
62
65
  const findInputRef = useRef<InputRef>(null);
@@ -114,7 +117,7 @@ export const SearchContent = () => {
114
117
  />
115
118
  </td>
116
119
  <td className="libro-search-action">
117
- <SearchIndex />
120
+ <SearchIndexMemo />
118
121
  <div>
119
122
  <Button
120
123
  title="Previous Match"
@@ -224,6 +227,7 @@ export class LibroSearchView extends BaseView {
224
227
  @prop() replaceStr = '';
225
228
  @prop() caseSensitive = false;
226
229
  @prop() useRegex = false;
230
+ @prop() isSearching = false;
227
231
 
228
232
  override view = SearchComponent;
229
233
 
@@ -270,7 +274,7 @@ export class LibroSearchView extends BaseView {
270
274
  }
271
275
  };
272
276
 
273
- onviewWillUnmount = async () => {
277
+ onViewWillUnmount = async () => {
274
278
  await this.searchProvider?.endQuery();
275
279
  this.searchProvider?.dispose();
276
280
  };
@@ -301,7 +305,7 @@ export class LibroSearchView extends BaseView {
301
305
  }
302
306
  };
303
307
 
304
- search = (hightlightNext = true) => {
308
+ search = async (hightlightNext = true) => {
305
309
  if (this.searchProvider) {
306
310
  this.lastSearch = this.findStr;
307
311
  const query = this.utils.parseQuery(
@@ -310,9 +314,11 @@ export class LibroSearchView extends BaseView {
310
314
  this.useRegex,
311
315
  );
312
316
  if (query) {
313
- this.searchProvider?.startQuery(query, undefined, hightlightNext);
317
+ this.isSearching = true;
318
+ await this.searchProvider?.startQuery(query, undefined, hightlightNext);
319
+ this.isSearching = false;
314
320
  } else {
315
- this.searchProvider?.endQuery();
321
+ await this.searchProvider?.endQuery();
316
322
  }
317
323
  }
318
324
  };
@@ -377,11 +383,11 @@ export class LibroSearchView extends BaseView {
377
383
  return height;
378
384
  };
379
385
 
380
- nextMatch = (reverse: boolean) => {
386
+ nextMatch = async (reverse: boolean) => {
381
387
  if (reverse) {
382
- this.searchProvider?.highlightPrevious();
388
+ await this.searchProvider?.highlightPrevious();
383
389
  } else {
384
- this.searchProvider?.highlightNext();
390
+ await this.searchProvider?.highlightNext();
385
391
  }
386
392
  };
387
393
 
@@ -408,16 +414,13 @@ export class LibroSearchView extends BaseView {
408
414
  }
409
415
  };
410
416
 
411
- protected doHandleFindChange = (e: React.ChangeEvent<HTMLInputElement>) => {
412
- this.findStr = e.target.value;
413
- };
414
-
415
417
  handleFindChange = (e: React.ChangeEvent<HTMLInputElement>) => {
416
418
  this.findStr = e.target.value;
417
419
  if (this.findStr !== this.lastSearch) {
418
420
  this.search(false);
419
421
  }
420
422
  };
423
+
421
424
  handleReplaceChange = (e: React.ChangeEvent<HTMLInputElement>) => {
422
425
  this.replaceStr = e.target.value;
423
426
  };