@difizen/libro-search 0.1.0 → 0.1.2
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/abstract-search-provider.d.ts +2 -1
- package/es/abstract-search-provider.d.ts.map +1 -1
- package/es/index.less +10 -8
- package/es/libro-search-engine-text.d.ts +1 -1
- package/es/libro-search-generic-provider.d.ts +5 -4
- package/es/libro-search-generic-provider.d.ts.map +1 -1
- package/es/libro-search-generic-provider.js +11 -11
- package/es/libro-search-manager.d.ts +1 -1
- package/es/libro-search-manager.d.ts.map +1 -1
- package/es/libro-search-manager.js +3 -3
- package/es/libro-search-model.d.ts +4 -4
- package/es/libro-search-model.d.ts.map +1 -1
- package/es/libro-search-model.js +19 -9
- package/es/libro-search-protocol.d.ts +1 -13
- package/es/libro-search-protocol.d.ts.map +1 -1
- package/es/libro-search-protocol.js +0 -5
- package/es/libro-search-provider.d.ts +11 -7
- package/es/libro-search-provider.d.ts.map +1 -1
- package/es/libro-search-provider.js +70 -13
- package/es/libro-search-utils.d.ts +1 -1
- package/es/libro-search-utils.d.ts.map +1 -1
- package/es/libro-search-utils.js +11 -7
- package/es/libro-search-view.d.ts +11 -11
- package/es/libro-search-view.d.ts.map +1 -1
- package/es/libro-search-view.js +136 -79
- package/package.json +4 -3
- package/src/abstract-search-provider.ts +1 -2
- package/src/index.less +10 -8
- package/src/libro-search-engine-text.ts +1 -1
- package/src/libro-search-generic-provider.ts +6 -6
- package/src/libro-search-manager.ts +4 -3
- package/src/libro-search-model.ts +10 -11
- package/src/libro-search-protocol.ts +1 -16
- package/src/libro-search-provider.ts +88 -41
- package/src/libro-search-utils.spec.ts +2 -2
- package/src/libro-search-utils.ts +11 -9
- package/src/libro-search-view.tsx +63 -43
|
@@ -20,13 +20,17 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
|
|
|
20
20
|
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
21
21
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
22
22
|
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.'); }
|
|
23
|
-
import { LibroView } from '@difizen/libro-core';
|
|
24
|
-
import { inject, prop, transient,
|
|
23
|
+
import { EditorCellView, LibroView, VirtualizedManagerHelper } from '@difizen/libro-core';
|
|
24
|
+
import { inject, prop, transient, equals } from '@difizen/mana-app';
|
|
25
25
|
import { Deferred, DisposableCollection } from '@difizen/mana-app';
|
|
26
26
|
import { l10n } from '@difizen/mana-l10n';
|
|
27
27
|
import { AbstractSearchProvider } from "./abstract-search-provider.js";
|
|
28
28
|
import { LibroCellSearchProvider } from "./libro-cell-search-provider.js";
|
|
29
29
|
import { SearchProviderOption } from "./libro-search-protocol.js";
|
|
30
|
+
export function elementInViewport(el) {
|
|
31
|
+
var boundingClientRect = el.getBoundingClientRect();
|
|
32
|
+
return boundingClientRect.top >= 0 && boundingClientRect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && boundingClientRect.left >= 0 && boundingClientRect.right <= (window.innerWidth || document.documentElement.clientWidth);
|
|
33
|
+
}
|
|
30
34
|
export var LibroSearchProviderFactory = Symbol('LibroSearchProviderFactory');
|
|
31
35
|
/**
|
|
32
36
|
* Libro view search provider
|
|
@@ -37,7 +41,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
37
41
|
/**
|
|
38
42
|
* @param option Provide the view to search in
|
|
39
43
|
*/
|
|
40
|
-
function LibroSearchProvider(option) {
|
|
44
|
+
function LibroSearchProvider(option, virtualizedManagerHelper) {
|
|
41
45
|
var _this;
|
|
42
46
|
_classCallCheck(this, LibroSearchProvider);
|
|
43
47
|
_this = _super.call(this, option);
|
|
@@ -149,7 +153,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
149
153
|
*
|
|
150
154
|
*/
|
|
151
155
|
_this.startQuery = /*#__PURE__*/function () {
|
|
152
|
-
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(query,
|
|
156
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(query, filters) {
|
|
153
157
|
var _this$filters;
|
|
154
158
|
var highlightNext,
|
|
155
159
|
cells,
|
|
@@ -385,9 +389,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
385
389
|
case 0:
|
|
386
390
|
if (!_this.cellsChangeDeferred) {
|
|
387
391
|
_this.cellsChangeDeferred = new Deferred();
|
|
388
|
-
_this.cellsChangeDeferred.promise.then(_this.doCellsChanged).catch(
|
|
389
|
-
//
|
|
390
|
-
});
|
|
392
|
+
_this.cellsChangeDeferred.promise.then(_this.doCellsChanged).catch(console.error);
|
|
391
393
|
_this.cellsChangeDeferred.resolve();
|
|
392
394
|
}
|
|
393
395
|
case 1:
|
|
@@ -424,16 +426,64 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
424
426
|
reverse = _args12.length > 0 && _args12[0] !== undefined ? _args12[0] : false;
|
|
425
427
|
loop = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : false;
|
|
426
428
|
activateNewMatch = /*#__PURE__*/function () {
|
|
427
|
-
var _ref12 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
|
|
429
|
+
var _ref12 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(match) {
|
|
430
|
+
var _activeCell$container;
|
|
431
|
+
var activeCell, node, _activeCell$editor, line, editor;
|
|
428
432
|
return _regeneratorRuntime().wrap(function _callee11$(_context11) {
|
|
429
433
|
while (1) switch (_context11.prev = _context11.next) {
|
|
430
434
|
case 0:
|
|
435
|
+
if (_this.getActiveIndex() !== _this.currentProviderIndex) {
|
|
436
|
+
_this.selectCell(_this.currentProviderIndex);
|
|
437
|
+
}
|
|
438
|
+
activeCell = _this.view.activeCell;
|
|
439
|
+
if (activeCell) {
|
|
440
|
+
_context11.next = 4;
|
|
441
|
+
break;
|
|
442
|
+
}
|
|
443
|
+
return _context11.abrupt("return");
|
|
444
|
+
case 4:
|
|
445
|
+
node = (_activeCell$container = activeCell.container) === null || _activeCell$container === void 0 ? void 0 : _activeCell$container.current;
|
|
446
|
+
if (!elementInViewport(node)) {
|
|
447
|
+
try {
|
|
448
|
+
if (_this.view.activeCell) {
|
|
449
|
+
if (_this.virtualizedManager.isVirtualized) {
|
|
450
|
+
if (EditorCellView.is(activeCell)) {
|
|
451
|
+
line = (_activeCell$editor = activeCell.editor) === null || _activeCell$editor === void 0 || (_activeCell$editor = _activeCell$editor.getPositionAt(match.position)) === null || _activeCell$editor === void 0 ? void 0 : _activeCell$editor.line;
|
|
452
|
+
_this.view.model.scrollToCellView({
|
|
453
|
+
cellIndex: _this.view.activeCellIndex,
|
|
454
|
+
lineIndex: line
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
} else {
|
|
458
|
+
_this.view.model.scrollToView(_this.view.activeCell);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
} catch (error) {
|
|
462
|
+
// no-op
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
// Unhide cell
|
|
466
|
+
if (activeCell.hasInputHidden) {
|
|
467
|
+
activeCell.hasInputHidden = false;
|
|
468
|
+
}
|
|
469
|
+
if (elementInViewport(node)) {
|
|
470
|
+
_context11.next = 9;
|
|
471
|
+
break;
|
|
472
|
+
}
|
|
473
|
+
return _context11.abrupt("return");
|
|
474
|
+
case 9:
|
|
475
|
+
if (EditorCellView.is(activeCell)) {
|
|
476
|
+
// await activeCell.editor;
|
|
477
|
+
editor = activeCell.editor;
|
|
478
|
+
editor === null || editor === void 0 || editor.revealSelection(editor.getSelection());
|
|
479
|
+
}
|
|
480
|
+
case 10:
|
|
431
481
|
case "end":
|
|
432
482
|
return _context11.stop();
|
|
433
483
|
}
|
|
434
484
|
}, _callee11);
|
|
435
485
|
}));
|
|
436
|
-
return function activateNewMatch() {
|
|
486
|
+
return function activateNewMatch(_x6) {
|
|
437
487
|
return _ref12.apply(this, arguments);
|
|
438
488
|
};
|
|
439
489
|
}();
|
|
@@ -465,7 +515,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
465
515
|
break;
|
|
466
516
|
}
|
|
467
517
|
_context12.next = 19;
|
|
468
|
-
return activateNewMatch();
|
|
518
|
+
return activateNewMatch(match);
|
|
469
519
|
case 19:
|
|
470
520
|
return _context12.abrupt("return", match);
|
|
471
521
|
case 22:
|
|
@@ -516,7 +566,7 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
516
566
|
break;
|
|
517
567
|
}
|
|
518
568
|
_context12.next = 43;
|
|
519
|
-
return activateNewMatch();
|
|
569
|
+
return activateNewMatch(_match);
|
|
520
570
|
case 43:
|
|
521
571
|
return _context12.abrupt("return", _match);
|
|
522
572
|
case 44:
|
|
@@ -563,10 +613,10 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
563
613
|
}, _callee14);
|
|
564
614
|
}));
|
|
565
615
|
_this.view = option.view;
|
|
566
|
-
_this.
|
|
567
|
-
_this.toDispose.push(watch(_this.view.model, 'cells', _this.onCellsChanged));
|
|
616
|
+
_this.virtualizedManager = virtualizedManagerHelper.getOrCreate(_this.view.model);
|
|
568
617
|
return _this;
|
|
569
618
|
}
|
|
619
|
+
LibroSearchProvider = inject(VirtualizedManagerHelper)(LibroSearchProvider, undefined, 1) || LibroSearchProvider;
|
|
570
620
|
LibroSearchProvider = inject(SearchProviderOption)(LibroSearchProvider, undefined, 0) || LibroSearchProvider;
|
|
571
621
|
_createClass(LibroSearchProvider, [{
|
|
572
622
|
key: "filters",
|
|
@@ -693,6 +743,13 @@ export var LibroSearchProvider = (_dec = transient(), _dec2 = inject(LibroCellSe
|
|
|
693
743
|
}
|
|
694
744
|
};
|
|
695
745
|
}
|
|
746
|
+
}, {
|
|
747
|
+
key: "selectCell",
|
|
748
|
+
value: function selectCell(selectIndex) {
|
|
749
|
+
if (selectIndex >= 0 && selectIndex < this.view.model.cells.length - 1) {
|
|
750
|
+
this.view.model.selectCell(this.view.model.cells[selectIndex]);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
696
753
|
}], [{
|
|
697
754
|
key: "isApplicable",
|
|
698
755
|
value:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libro-search-utils.d.ts","sourceRoot":"","sources":["../src/libro-search-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"libro-search-utils.d.ts","sourceRoot":"","sources":["../src/libro-search-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D;;GAEG;AACH,qBACa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,QAAQ,CACN,OAAO,EAAE,WAAW,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAI,EACT,MAAM,SAAW,GAChB,MAAM,GAAG,SAAS;IA+BrB;;;;;;;OAOG;IACH,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,OAAO,EACtB,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,SAAS;CAoBtB"}
|
package/es/libro-search-utils.js
CHANGED
|
@@ -6,6 +6,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
6
6
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
7
7
|
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
8
8
|
import { singleton } from '@difizen/mana-app';
|
|
9
|
+
|
|
9
10
|
/**
|
|
10
11
|
* Search Utils
|
|
11
12
|
*/
|
|
@@ -70,15 +71,18 @@ export var LibroSearchUtils = (_dec = singleton(), _dec(_class = /*#__PURE__*/fu
|
|
|
70
71
|
var flag = caseSensitive ? 'g' : 'gi';
|
|
71
72
|
// escape regex characters in query if its a string search
|
|
72
73
|
var queryText = regex ? queryString : queryString.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&');
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
try {
|
|
75
|
+
var ret = new RegExp(queryText, flag);
|
|
76
|
+
// If the empty string is hit, the search logic will freeze the browser tab
|
|
77
|
+
// Trying /^/ or /$/ on the codemirror search demo, does not find anything.
|
|
78
|
+
// So this is a limitation of the editor.
|
|
79
|
+
if (ret.test('')) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
return ret;
|
|
83
|
+
} catch (error) {
|
|
79
84
|
return undefined;
|
|
80
85
|
}
|
|
81
|
-
return ret;
|
|
82
86
|
}
|
|
83
87
|
}]);
|
|
84
88
|
return LibroSearchUtils;
|
|
@@ -1,31 +1,28 @@
|
|
|
1
|
+
/// <reference types="react" resolution-mode="require"/>
|
|
1
2
|
import type { LibroView } from '@difizen/libro-core';
|
|
2
3
|
import { LirboContextKey } from '@difizen/libro-core';
|
|
3
4
|
import { BaseView } from '@difizen/mana-app';
|
|
4
5
|
import type { CheckboxChangeEvent } from 'antd/es/checkbox';
|
|
5
6
|
import type { InputRef } from 'antd/es/input';
|
|
6
|
-
import type { FC } from 'react';
|
|
7
7
|
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
|
-
export declare const ReplaceToggle:
|
|
11
|
-
export declare const SearchIndex:
|
|
12
|
-
export declare const SearchContent:
|
|
10
|
+
export declare const ReplaceToggle: () => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare const SearchIndex: () => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export declare const SearchContent: () => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
export declare const SearchComponent: import("react").ForwardRefExoticComponent<import("react").RefAttributes<HTMLDivElement>>;
|
|
14
14
|
export declare class LibroSearchView extends BaseView {
|
|
15
15
|
findInputRef?: React.RefObject<InputRef> | null;
|
|
16
16
|
contextKey: LirboContextKey;
|
|
17
17
|
utils: LibroSearchUtils;
|
|
18
18
|
searchProviderFactory: LibroSearchProviderFactory;
|
|
19
|
-
|
|
20
|
-
protected _libro?: LibroView;
|
|
21
|
-
get libro(): LibroView | undefined;
|
|
22
|
-
set libro(value: LibroView | undefined);
|
|
19
|
+
libro?: LibroView;
|
|
23
20
|
searchProvider?: LibroSearchProvider;
|
|
24
21
|
searchVisible: boolean;
|
|
25
22
|
get replaceVisible(): boolean;
|
|
26
23
|
settingVisible: boolean;
|
|
27
|
-
findStr?: string
|
|
28
|
-
lastSearch?: string
|
|
24
|
+
findStr?: string;
|
|
25
|
+
lastSearch?: string;
|
|
29
26
|
replaceStr: string;
|
|
30
27
|
caseSensitive: boolean;
|
|
31
28
|
useRegex: boolean;
|
|
@@ -33,7 +30,10 @@ export declare class LibroSearchView extends BaseView {
|
|
|
33
30
|
get contentHeight(): number;
|
|
34
31
|
get currentMatchIndex(): number | undefined;
|
|
35
32
|
get matchesCount(): number | undefined;
|
|
36
|
-
|
|
33
|
+
onViewMount: () => void;
|
|
34
|
+
onActiveCellChanged: () => void;
|
|
35
|
+
onCellsChanged: () => void;
|
|
36
|
+
onviewWillUnmount: () => Promise<void>;
|
|
37
37
|
show: () => void;
|
|
38
38
|
hide: () => void;
|
|
39
39
|
onFocus: () => void;
|
|
@@ -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;
|
|
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"}
|