@embedpdf/plugin-search 1.0.11 → 1.0.12
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/dist/index.cjs +2 -306
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -231
- package/dist/index.js +16 -26
- package/dist/index.js.map +1 -1
- package/dist/lib/actions.d.ts +47 -0
- package/dist/lib/index.d.ts +10 -0
- package/dist/lib/manifest.d.ts +4 -0
- package/dist/lib/reducer.d.ts +5 -0
- package/dist/lib/search-plugin.d.ts +33 -0
- package/dist/{index.d.cts → lib/types.d.ts} +6 -85
- package/dist/preact/adapter.d.ts +5 -0
- package/dist/preact/core.d.ts +1 -0
- package/dist/preact/index.cjs +2 -116
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.d.ts +1 -31
- package/dist/preact/index.js +12 -15
- package/dist/preact/index.js.map +1 -1
- package/dist/react/adapter.d.ts +2 -0
- package/dist/react/core.d.ts +1 -0
- package/dist/react/index.cjs +2 -116
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.ts +1 -29
- package/dist/react/index.js +11 -15
- package/dist/react/index.js.map +1 -1
- package/dist/shared-preact/components/index.d.ts +1 -0
- package/dist/shared-preact/components/search-layer.d.ts +10 -0
- package/dist/shared-preact/hooks/index.d.ts +1 -0
- package/dist/shared-preact/hooks/use-search.d.ts +15 -0
- package/dist/shared-preact/index.d.ts +2 -0
- package/dist/shared-react/components/index.d.ts +1 -0
- package/dist/shared-react/components/search-layer.d.ts +10 -0
- package/dist/shared-react/hooks/index.d.ts +1 -0
- package/dist/shared-react/hooks/use-search.d.ts +15 -0
- package/dist/shared-react/index.d.ts +2 -0
- package/package.json +14 -13
- package/dist/preact/index.d.cts +0 -31
- package/dist/react/index.d.cts +0 -29
package/dist/index.cjs
CHANGED
|
@@ -1,306 +1,2 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
SEARCH_PLUGIN_ID: () => SEARCH_PLUGIN_ID,
|
|
24
|
-
SearchPlugin: () => SearchPlugin,
|
|
25
|
-
SearchPluginPackage: () => SearchPluginPackage,
|
|
26
|
-
initialState: () => initialState,
|
|
27
|
-
manifest: () => manifest
|
|
28
|
-
});
|
|
29
|
-
module.exports = __toCommonJS(index_exports);
|
|
30
|
-
|
|
31
|
-
// src/lib/search-plugin.ts
|
|
32
|
-
var import_core = require("@embedpdf/core");
|
|
33
|
-
|
|
34
|
-
// src/lib/actions.ts
|
|
35
|
-
var START_SEARCH_SESSION = "START_SEARCH_SESSION";
|
|
36
|
-
var STOP_SEARCH_SESSION = "STOP_SEARCH_SESSION";
|
|
37
|
-
var SET_SEARCH_FLAGS = "SET_SEARCH_FLAGS";
|
|
38
|
-
var SET_SHOW_ALL_RESULTS = "SET_SHOW_ALL_RESULTS";
|
|
39
|
-
var START_SEARCH = "START_SEARCH";
|
|
40
|
-
var SET_SEARCH_RESULTS = "SET_SEARCH_RESULTS";
|
|
41
|
-
var SET_ACTIVE_RESULT_INDEX = "SET_ACTIVE_RESULT_INDEX";
|
|
42
|
-
function startSearchSession() {
|
|
43
|
-
return { type: START_SEARCH_SESSION };
|
|
44
|
-
}
|
|
45
|
-
function stopSearchSession() {
|
|
46
|
-
return { type: STOP_SEARCH_SESSION };
|
|
47
|
-
}
|
|
48
|
-
function setSearchFlags(flags) {
|
|
49
|
-
return { type: SET_SEARCH_FLAGS, payload: flags };
|
|
50
|
-
}
|
|
51
|
-
function setShowAllResults(showAll) {
|
|
52
|
-
return { type: SET_SHOW_ALL_RESULTS, payload: showAll };
|
|
53
|
-
}
|
|
54
|
-
function startSearch(query) {
|
|
55
|
-
return { type: START_SEARCH, payload: query };
|
|
56
|
-
}
|
|
57
|
-
function setSearchResults(results, total, activeResultIndex) {
|
|
58
|
-
return { type: SET_SEARCH_RESULTS, payload: { results, total, activeResultIndex } };
|
|
59
|
-
}
|
|
60
|
-
function setActiveResultIndex(index) {
|
|
61
|
-
return { type: SET_ACTIVE_RESULT_INDEX, payload: index };
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// src/lib/search-plugin.ts
|
|
65
|
-
var SearchPlugin = class extends import_core.BasePlugin {
|
|
66
|
-
constructor(id, registry, engine) {
|
|
67
|
-
super(id, registry);
|
|
68
|
-
this.searchStop$ = (0, import_core.createBehaviorEmitter)();
|
|
69
|
-
this.searchStart$ = (0, import_core.createBehaviorEmitter)();
|
|
70
|
-
this.searchResult$ = (0, import_core.createBehaviorEmitter)();
|
|
71
|
-
this.searchActiveResultChange$ = (0, import_core.createBehaviorEmitter)();
|
|
72
|
-
this.searchResultState$ = (0, import_core.createBehaviorEmitter)();
|
|
73
|
-
this.searchState$ = (0, import_core.createBehaviorEmitter)();
|
|
74
|
-
this.engine = engine;
|
|
75
|
-
this.loader = this.registry.getPlugin("loader").provides();
|
|
76
|
-
this.loader.onDocumentLoaded(this.handleDocumentLoaded.bind(this));
|
|
77
|
-
this.loader.onLoaderEvent(this.handleLoaderEvent.bind(this));
|
|
78
|
-
}
|
|
79
|
-
handleDocumentLoaded(doc) {
|
|
80
|
-
this.currentDocument = doc;
|
|
81
|
-
if (this.state.active) {
|
|
82
|
-
this.startSearchSession();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
handleLoaderEvent(event) {
|
|
86
|
-
if (event.type === "error" || event.type === "start" && this.currentDocument) {
|
|
87
|
-
if (this.state.active) {
|
|
88
|
-
this.stopSearchSession();
|
|
89
|
-
}
|
|
90
|
-
this.currentDocument = void 0;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
async initialize(config) {
|
|
94
|
-
this.dispatch(setSearchFlags(config.flags || []));
|
|
95
|
-
this.dispatch(
|
|
96
|
-
setShowAllResults(config.showAllResults !== void 0 ? config.showAllResults : true)
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
onStoreUpdated(_prevState, newState) {
|
|
100
|
-
this.searchResultState$.emit({
|
|
101
|
-
results: newState.results,
|
|
102
|
-
activeResultIndex: newState.activeResultIndex,
|
|
103
|
-
showAllResults: newState.showAllResults,
|
|
104
|
-
active: newState.active
|
|
105
|
-
});
|
|
106
|
-
this.searchState$.emit(newState);
|
|
107
|
-
}
|
|
108
|
-
buildCapability() {
|
|
109
|
-
return {
|
|
110
|
-
startSearch: this.startSearchSession.bind(this),
|
|
111
|
-
stopSearch: this.stopSearchSession.bind(this),
|
|
112
|
-
searchAllPages: this.searchAllPages.bind(this),
|
|
113
|
-
nextResult: this.nextResult.bind(this),
|
|
114
|
-
previousResult: this.previousResult.bind(this),
|
|
115
|
-
goToResult: this.goToResult.bind(this),
|
|
116
|
-
setShowAllResults: (showAll) => this.dispatch(setShowAllResults(showAll)),
|
|
117
|
-
getShowAllResults: () => this.state.showAllResults,
|
|
118
|
-
onSearchResult: this.searchResult$.on,
|
|
119
|
-
onSearchStart: this.searchStart$.on,
|
|
120
|
-
onSearchStop: this.searchStop$.on,
|
|
121
|
-
onActiveResultChange: this.searchActiveResultChange$.on,
|
|
122
|
-
onSearchResultStateChange: this.searchResultState$.on,
|
|
123
|
-
onStateChange: this.searchState$.on,
|
|
124
|
-
getFlags: () => this.state.flags,
|
|
125
|
-
setFlags: (flags) => this.setFlags(flags),
|
|
126
|
-
getState: () => this.state
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
setFlags(flags) {
|
|
130
|
-
this.dispatch(setSearchFlags(flags));
|
|
131
|
-
if (this.state.active) {
|
|
132
|
-
this.searchAllPages(this.state.query, true);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
notifySearchStart() {
|
|
136
|
-
this.searchStart$.emit();
|
|
137
|
-
}
|
|
138
|
-
notifySearchStop() {
|
|
139
|
-
this.searchStop$.emit();
|
|
140
|
-
}
|
|
141
|
-
notifyActiveResultChange(index) {
|
|
142
|
-
this.searchActiveResultChange$.emit(index);
|
|
143
|
-
}
|
|
144
|
-
startSearchSession() {
|
|
145
|
-
if (!this.currentDocument) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
this.dispatch(startSearchSession());
|
|
149
|
-
this.notifySearchStart();
|
|
150
|
-
}
|
|
151
|
-
stopSearchSession() {
|
|
152
|
-
if (!this.currentDocument || !this.getState().active) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.dispatch(stopSearchSession());
|
|
156
|
-
this.notifySearchStop();
|
|
157
|
-
}
|
|
158
|
-
async searchAllPages(keyword, force = false) {
|
|
159
|
-
const trimmedKeyword = keyword.trim();
|
|
160
|
-
if (this.state.query === trimmedKeyword && !force) {
|
|
161
|
-
return { results: this.state.results, total: this.state.total };
|
|
162
|
-
}
|
|
163
|
-
this.dispatch(startSearch(trimmedKeyword));
|
|
164
|
-
if (!trimmedKeyword) {
|
|
165
|
-
this.dispatch(setSearchResults([], 0, -1));
|
|
166
|
-
return { results: [], total: 0 };
|
|
167
|
-
}
|
|
168
|
-
if (!this.currentDocument) {
|
|
169
|
-
this.dispatch(setSearchResults([], 0, -1));
|
|
170
|
-
return { results: [], total: 0 };
|
|
171
|
-
}
|
|
172
|
-
if (!this.state.active) {
|
|
173
|
-
this.startSearchSession();
|
|
174
|
-
}
|
|
175
|
-
return new Promise((resolve) => {
|
|
176
|
-
this.engine.searchAllPages(this.currentDocument, trimmedKeyword, this.state.flags).wait(
|
|
177
|
-
(results) => {
|
|
178
|
-
const activeResultIndex = results.total > 0 ? 0 : -1;
|
|
179
|
-
this.dispatch(setSearchResults(results.results, results.total, activeResultIndex));
|
|
180
|
-
this.searchResult$.emit(results);
|
|
181
|
-
if (results.total > 0) {
|
|
182
|
-
this.notifyActiveResultChange(0);
|
|
183
|
-
}
|
|
184
|
-
resolve(results);
|
|
185
|
-
},
|
|
186
|
-
(error) => {
|
|
187
|
-
console.error("Error during search:", error);
|
|
188
|
-
this.dispatch(setSearchResults([], 0, -1));
|
|
189
|
-
resolve({ results: [], total: 0 });
|
|
190
|
-
}
|
|
191
|
-
);
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
nextResult() {
|
|
195
|
-
if (this.state.results.length === 0) {
|
|
196
|
-
return -1;
|
|
197
|
-
}
|
|
198
|
-
const nextIndex = this.state.activeResultIndex >= this.state.results.length - 1 ? 0 : this.state.activeResultIndex + 1;
|
|
199
|
-
return this.goToResult(nextIndex);
|
|
200
|
-
}
|
|
201
|
-
previousResult() {
|
|
202
|
-
if (this.state.results.length === 0) {
|
|
203
|
-
return -1;
|
|
204
|
-
}
|
|
205
|
-
const prevIndex = this.state.activeResultIndex <= 0 ? this.state.results.length - 1 : this.state.activeResultIndex - 1;
|
|
206
|
-
return this.goToResult(prevIndex);
|
|
207
|
-
}
|
|
208
|
-
goToResult(index) {
|
|
209
|
-
if (this.state.results.length === 0 || index < 0 || index >= this.state.results.length) {
|
|
210
|
-
return -1;
|
|
211
|
-
}
|
|
212
|
-
this.dispatch(setActiveResultIndex(index));
|
|
213
|
-
this.notifyActiveResultChange(index);
|
|
214
|
-
return index;
|
|
215
|
-
}
|
|
216
|
-
async destroy() {
|
|
217
|
-
if (this.state.active && this.currentDocument) {
|
|
218
|
-
this.stopSearchSession();
|
|
219
|
-
}
|
|
220
|
-
this.searchResult$.clear();
|
|
221
|
-
this.searchStart$.clear();
|
|
222
|
-
this.searchStop$.clear();
|
|
223
|
-
this.searchActiveResultChange$.clear();
|
|
224
|
-
this.searchResultState$.clear();
|
|
225
|
-
this.searchState$.clear();
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
SearchPlugin.id = "search";
|
|
229
|
-
|
|
230
|
-
// src/lib/manifest.ts
|
|
231
|
-
var SEARCH_PLUGIN_ID = "search";
|
|
232
|
-
var manifest = {
|
|
233
|
-
id: SEARCH_PLUGIN_ID,
|
|
234
|
-
name: "Search Plugin",
|
|
235
|
-
version: "1.0.0",
|
|
236
|
-
provides: ["search"],
|
|
237
|
-
requires: ["loader"],
|
|
238
|
-
optional: [],
|
|
239
|
-
defaultConfig: {
|
|
240
|
-
enabled: true,
|
|
241
|
-
flags: []
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
// src/lib/reducer.ts
|
|
246
|
-
var initialState = {
|
|
247
|
-
flags: [],
|
|
248
|
-
results: [],
|
|
249
|
-
total: 0,
|
|
250
|
-
activeResultIndex: -1,
|
|
251
|
-
showAllResults: true,
|
|
252
|
-
query: "",
|
|
253
|
-
loading: false,
|
|
254
|
-
active: false
|
|
255
|
-
};
|
|
256
|
-
var searchReducer = (state = initialState, action) => {
|
|
257
|
-
switch (action.type) {
|
|
258
|
-
case START_SEARCH_SESSION:
|
|
259
|
-
return { ...state, active: true };
|
|
260
|
-
case STOP_SEARCH_SESSION:
|
|
261
|
-
return {
|
|
262
|
-
...state,
|
|
263
|
-
results: [],
|
|
264
|
-
total: 0,
|
|
265
|
-
activeResultIndex: -1,
|
|
266
|
-
query: "",
|
|
267
|
-
loading: false,
|
|
268
|
-
active: false
|
|
269
|
-
};
|
|
270
|
-
case SET_SEARCH_FLAGS:
|
|
271
|
-
return { ...state, flags: action.payload };
|
|
272
|
-
case SET_SHOW_ALL_RESULTS:
|
|
273
|
-
return { ...state, showAllResults: action.payload };
|
|
274
|
-
case START_SEARCH:
|
|
275
|
-
return { ...state, loading: true, query: action.payload };
|
|
276
|
-
case SET_SEARCH_RESULTS:
|
|
277
|
-
return {
|
|
278
|
-
...state,
|
|
279
|
-
results: action.payload.results,
|
|
280
|
-
total: action.payload.total,
|
|
281
|
-
activeResultIndex: action.payload.activeResultIndex,
|
|
282
|
-
loading: false
|
|
283
|
-
};
|
|
284
|
-
case SET_ACTIVE_RESULT_INDEX:
|
|
285
|
-
return { ...state, activeResultIndex: action.payload };
|
|
286
|
-
default:
|
|
287
|
-
return state;
|
|
288
|
-
}
|
|
289
|
-
};
|
|
290
|
-
|
|
291
|
-
// src/lib/index.ts
|
|
292
|
-
var SearchPluginPackage = {
|
|
293
|
-
manifest,
|
|
294
|
-
create: (registry, engine) => new SearchPlugin(SEARCH_PLUGIN_ID, registry, engine),
|
|
295
|
-
reducer: searchReducer,
|
|
296
|
-
initialState
|
|
297
|
-
};
|
|
298
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
299
|
-
0 && (module.exports = {
|
|
300
|
-
SEARCH_PLUGIN_ID,
|
|
301
|
-
SearchPlugin,
|
|
302
|
-
SearchPluginPackage,
|
|
303
|
-
initialState,
|
|
304
|
-
manifest
|
|
305
|
-
});
|
|
306
|
-
//# sourceMappingURL=index.cjs.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@embedpdf/core"),e="START_SEARCH_SESSION",s="STOP_SEARCH_SESSION",a="SET_SEARCH_FLAGS",i="SET_SHOW_ALL_RESULTS",r="START_SEARCH",h="SET_SEARCH_RESULTS",l="SET_ACTIVE_RESULT_INDEX";function n(t){return{type:a,payload:t}}function o(t){return{type:i,payload:t}}function c(t,e,s){return{type:h,payload:{results:t,total:e,activeResultIndex:s}}}const u=class extends t.BasePlugin{constructor(e,s,a){super(e,s),this.searchStop$=t.createBehaviorEmitter(),this.searchStart$=t.createBehaviorEmitter(),this.searchResult$=t.createBehaviorEmitter(),this.searchActiveResultChange$=t.createBehaviorEmitter(),this.searchResultState$=t.createBehaviorEmitter(),this.searchState$=t.createBehaviorEmitter(),this.engine=a,this.loader=this.registry.getPlugin("loader").provides(),this.loader.onDocumentLoaded(this.handleDocumentLoaded.bind(this)),this.loader.onLoaderEvent(this.handleLoaderEvent.bind(this))}handleDocumentLoaded(t){this.currentDocument=t,this.state.active&&this.startSearchSession()}handleLoaderEvent(t){("error"===t.type||"start"===t.type&&this.currentDocument)&&(this.state.active&&this.stopSearchSession(),this.currentDocument=void 0)}async initialize(t){this.dispatch(n(t.flags||[])),this.dispatch(o(void 0===t.showAllResults||t.showAllResults))}onStoreUpdated(t,e){this.searchResultState$.emit({results:e.results,activeResultIndex:e.activeResultIndex,showAllResults:e.showAllResults,active:e.active}),this.searchState$.emit(e)}buildCapability(){return{startSearch:this.startSearchSession.bind(this),stopSearch:this.stopSearchSession.bind(this),searchAllPages:this.searchAllPages.bind(this),nextResult:this.nextResult.bind(this),previousResult:this.previousResult.bind(this),goToResult:this.goToResult.bind(this),setShowAllResults:t=>this.dispatch(o(t)),getShowAllResults:()=>this.state.showAllResults,onSearchResult:this.searchResult$.on,onSearchStart:this.searchStart$.on,onSearchStop:this.searchStop$.on,onActiveResultChange:this.searchActiveResultChange$.on,onSearchResultStateChange:this.searchResultState$.on,onStateChange:this.searchState$.on,getFlags:()=>this.state.flags,setFlags:t=>this.setFlags(t),getState:()=>this.state}}setFlags(t){this.dispatch(n(t)),this.state.active&&this.searchAllPages(this.state.query,!0)}notifySearchStart(){this.searchStart$.emit()}notifySearchStop(){this.searchStop$.emit()}notifyActiveResultChange(t){this.searchActiveResultChange$.emit(t)}startSearchSession(){this.currentDocument&&(this.dispatch({type:e}),this.notifySearchStart())}stopSearchSession(){this.currentDocument&&this.getState().active&&(this.dispatch({type:s}),this.notifySearchStop())}async searchAllPages(t,e=!1){const s=t.trim();return this.state.query!==s||e?(this.dispatch({type:r,payload:s}),s&&this.currentDocument?(this.state.active||this.startSearchSession(),new Promise((t=>{this.engine.searchAllPages(this.currentDocument,s,this.state.flags).wait((e=>{const s=e.total>0?0:-1;this.dispatch(c(e.results,e.total,s)),this.searchResult$.emit(e),e.total>0&&this.notifyActiveResultChange(0),t(e)}),(e=>{console.error("Error during search:",e),this.dispatch(c([],0,-1)),t({results:[],total:0})}))}))):(this.dispatch(c([],0,-1)),{results:[],total:0})):{results:this.state.results,total:this.state.total}}nextResult(){if(0===this.state.results.length)return-1;const t=this.state.activeResultIndex>=this.state.results.length-1?0:this.state.activeResultIndex+1;return this.goToResult(t)}previousResult(){if(0===this.state.results.length)return-1;const t=this.state.activeResultIndex<=0?this.state.results.length-1:this.state.activeResultIndex-1;return this.goToResult(t)}goToResult(t){return 0===this.state.results.length||t<0||t>=this.state.results.length?-1:(this.dispatch(function(t){return{type:l,payload:t}}(t)),this.notifyActiveResultChange(t),t)}async destroy(){this.state.active&&this.currentDocument&&this.stopSearchSession(),this.searchResult$.clear(),this.searchStart$.clear(),this.searchStop$.clear(),this.searchActiveResultChange$.clear(),this.searchResultState$.clear(),this.searchState$.clear()}};u.id="search";let S=u;const d="search",p={id:d,name:"Search Plugin",version:"1.0.0",provides:["search"],requires:["loader"],optional:[],defaultConfig:{enabled:!0,flags:[]}},R={flags:[],results:[],total:0,activeResultIndex:-1,showAllResults:!0,query:"",loading:!1,active:!1},g={manifest:p,create:(t,e)=>new S(d,t,e),reducer:(t=R,n)=>{switch(n.type){case e:return{...t,active:!0};case s:return{...t,results:[],total:0,activeResultIndex:-1,query:"",loading:!1,active:!1};case a:return{...t,flags:n.payload};case i:return{...t,showAllResults:n.payload};case r:return{...t,loading:!0,query:n.payload};case h:return{...t,results:n.payload.results,total:n.payload.total,activeResultIndex:n.payload.activeResultIndex,loading:!1};case l:return{...t,activeResultIndex:n.payload};default:return t}},initialState:R};exports.SEARCH_PLUGIN_ID=d,exports.SearchPlugin=S,exports.SearchPluginPackage=g,exports.initialState=R,exports.manifest=p;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/lib/search-plugin.ts","../src/lib/actions.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["export * from './lib';\n","import { BasePlugin, createBehaviorEmitter, PluginRegistry } from '@embedpdf/core';\nimport {\n MatchFlag,\n PdfDocumentObject,\n SearchAllPagesResult,\n TaskError,\n PdfEngine,\n} from '@embedpdf/models';\nimport { SearchPluginConfig, SearchCapability, SearchState, SearchResultState } from './types';\nimport { LoaderCapability, LoaderEvent, LoaderPlugin } from '@embedpdf/plugin-loader';\nimport {\n startSearchSession,\n stopSearchSession,\n setSearchFlags,\n setShowAllResults,\n startSearch,\n setSearchResults,\n setActiveResultIndex,\n SearchAction,\n} from './actions';\n\nexport class SearchPlugin extends BasePlugin<\n SearchPluginConfig,\n SearchCapability,\n SearchState,\n SearchAction\n> {\n static readonly id = 'search' as const;\n private loader: LoaderCapability;\n private currentDocument?: PdfDocumentObject;\n private engine: PdfEngine;\n\n private readonly searchStop$ = createBehaviorEmitter();\n private readonly searchStart$ = createBehaviorEmitter();\n private readonly searchResult$ = createBehaviorEmitter<SearchAllPagesResult>();\n private readonly searchActiveResultChange$ = createBehaviorEmitter<number>();\n private readonly searchResultState$ = createBehaviorEmitter<SearchResultState>();\n private readonly searchState$ = createBehaviorEmitter<SearchState>();\n\n constructor(id: string, registry: PluginRegistry, engine: PdfEngine) {\n super(id, registry);\n this.engine = engine;\n this.loader = this.registry.getPlugin<LoaderPlugin>('loader')!.provides();\n\n this.loader.onDocumentLoaded(this.handleDocumentLoaded.bind(this));\n this.loader.onLoaderEvent(this.handleLoaderEvent.bind(this));\n }\n\n private handleDocumentLoaded(doc: PdfDocumentObject): void {\n this.currentDocument = doc;\n if (this.state.active) {\n this.startSearchSession();\n }\n }\n\n private handleLoaderEvent(event: LoaderEvent): void {\n if (event.type === 'error' || (event.type === 'start' && this.currentDocument)) {\n if (this.state.active) {\n this.stopSearchSession();\n }\n this.currentDocument = undefined;\n }\n }\n\n async initialize(config: SearchPluginConfig): Promise<void> {\n this.dispatch(setSearchFlags(config.flags || []));\n this.dispatch(\n setShowAllResults(config.showAllResults !== undefined ? config.showAllResults : true),\n );\n }\n\n override onStoreUpdated(_prevState: SearchState, newState: SearchState): void {\n this.searchResultState$.emit({\n results: newState.results,\n activeResultIndex: newState.activeResultIndex,\n showAllResults: newState.showAllResults,\n active: newState.active,\n });\n this.searchState$.emit(newState);\n }\n\n protected buildCapability(): SearchCapability {\n return {\n startSearch: this.startSearchSession.bind(this),\n stopSearch: this.stopSearchSession.bind(this),\n searchAllPages: this.searchAllPages.bind(this),\n nextResult: this.nextResult.bind(this),\n previousResult: this.previousResult.bind(this),\n goToResult: this.goToResult.bind(this),\n setShowAllResults: (showAll) => this.dispatch(setShowAllResults(showAll)),\n getShowAllResults: () => this.state.showAllResults,\n onSearchResult: this.searchResult$.on,\n onSearchStart: this.searchStart$.on,\n onSearchStop: this.searchStop$.on,\n onActiveResultChange: this.searchActiveResultChange$.on,\n onSearchResultStateChange: this.searchResultState$.on,\n onStateChange: this.searchState$.on,\n getFlags: () => this.state.flags,\n setFlags: (flags) => this.setFlags(flags),\n getState: () => this.state,\n };\n }\n\n private setFlags(flags: MatchFlag[]): void {\n this.dispatch(setSearchFlags(flags));\n if (this.state.active) {\n this.searchAllPages(this.state.query, true);\n }\n }\n\n private notifySearchStart(): void {\n this.searchStart$.emit();\n }\n\n private notifySearchStop(): void {\n this.searchStop$.emit();\n }\n\n private notifyActiveResultChange(index: number): void {\n this.searchActiveResultChange$.emit(index);\n }\n\n private startSearchSession(): void {\n if (!this.currentDocument) {\n return;\n }\n this.dispatch(startSearchSession());\n this.notifySearchStart();\n }\n\n private stopSearchSession(): void {\n if (!this.currentDocument || !this.getState().active) {\n return;\n }\n this.dispatch(stopSearchSession());\n this.notifySearchStop();\n }\n\n private async searchAllPages(\n keyword: string,\n force: boolean = false,\n ): Promise<SearchAllPagesResult> {\n const trimmedKeyword = keyword.trim();\n\n if (this.state.query === trimmedKeyword && !force) {\n return { results: this.state.results, total: this.state.total };\n }\n\n this.dispatch(startSearch(trimmedKeyword));\n\n if (!trimmedKeyword) {\n this.dispatch(setSearchResults([], 0, -1));\n return { results: [], total: 0 };\n }\n if (!this.currentDocument) {\n this.dispatch(setSearchResults([], 0, -1));\n return { results: [], total: 0 };\n }\n\n if (!this.state.active) {\n this.startSearchSession();\n }\n\n return new Promise<SearchAllPagesResult>((resolve) => {\n this.engine.searchAllPages(this.currentDocument!, trimmedKeyword, this.state.flags).wait(\n (results) => {\n const activeResultIndex = results.total > 0 ? 0 : -1;\n this.dispatch(setSearchResults(results.results, results.total, activeResultIndex));\n this.searchResult$.emit(results);\n if (results.total > 0) {\n this.notifyActiveResultChange(0);\n }\n resolve(results);\n },\n (error: TaskError<any>) => {\n console.error('Error during search:', error);\n this.dispatch(setSearchResults([], 0, -1));\n resolve({ results: [], total: 0 });\n },\n );\n });\n }\n\n private nextResult(): number {\n if (this.state.results.length === 0) {\n return -1;\n }\n const nextIndex =\n this.state.activeResultIndex >= this.state.results.length - 1\n ? 0\n : this.state.activeResultIndex + 1;\n return this.goToResult(nextIndex);\n }\n\n private previousResult(): number {\n if (this.state.results.length === 0) {\n return -1;\n }\n const prevIndex =\n this.state.activeResultIndex <= 0\n ? this.state.results.length - 1\n : this.state.activeResultIndex - 1;\n return this.goToResult(prevIndex);\n }\n\n private goToResult(index: number): number {\n if (this.state.results.length === 0 || index < 0 || index >= this.state.results.length) {\n return -1;\n }\n this.dispatch(setActiveResultIndex(index));\n this.notifyActiveResultChange(index);\n return index;\n }\n\n async destroy(): Promise<void> {\n if (this.state.active && this.currentDocument) {\n this.stopSearchSession();\n }\n this.searchResult$.clear();\n this.searchStart$.clear();\n this.searchStop$.clear();\n this.searchActiveResultChange$.clear();\n this.searchResultState$.clear();\n this.searchState$.clear();\n }\n}\n","import { Action } from '@embedpdf/core';\nimport { MatchFlag, SearchResult } from '@embedpdf/models';\n\n// Action Types\nexport const START_SEARCH_SESSION = 'START_SEARCH_SESSION';\nexport const STOP_SEARCH_SESSION = 'STOP_SEARCH_SESSION';\nexport const SET_SEARCH_FLAGS = 'SET_SEARCH_FLAGS';\nexport const SET_SHOW_ALL_RESULTS = 'SET_SHOW_ALL_RESULTS';\nexport const START_SEARCH = 'START_SEARCH';\nexport const SET_SEARCH_RESULTS = 'SET_SEARCH_RESULTS';\nexport const SET_ACTIVE_RESULT_INDEX = 'SET_ACTIVE_RESULT_INDEX';\n\n// Action Interfaces\nexport interface StartSearchSessionAction extends Action {\n type: typeof START_SEARCH_SESSION;\n}\n\nexport interface StopSearchSessionAction extends Action {\n type: typeof STOP_SEARCH_SESSION;\n}\n\nexport interface SetSearchFlagsAction extends Action {\n type: typeof SET_SEARCH_FLAGS;\n payload: MatchFlag[];\n}\n\nexport interface SetShowAllResultsAction extends Action {\n type: typeof SET_SHOW_ALL_RESULTS;\n payload: boolean;\n}\n\nexport interface StartSearchAction extends Action {\n type: typeof START_SEARCH;\n payload: string;\n}\n\nexport interface SetSearchResultsAction extends Action {\n type: typeof SET_SEARCH_RESULTS;\n payload: {\n results: SearchResult[];\n total: number;\n activeResultIndex: number;\n };\n}\n\nexport interface SetActiveResultIndexAction extends Action {\n type: typeof SET_ACTIVE_RESULT_INDEX;\n payload: number;\n}\n\n// Union Type for All Actions\nexport type SearchAction =\n | StartSearchSessionAction\n | StopSearchSessionAction\n | SetSearchFlagsAction\n | SetShowAllResultsAction\n | StartSearchAction\n | SetSearchResultsAction\n | SetActiveResultIndexAction;\n\n// Action Creators\nexport function startSearchSession(): StartSearchSessionAction {\n return { type: START_SEARCH_SESSION };\n}\n\nexport function stopSearchSession(): StopSearchSessionAction {\n return { type: STOP_SEARCH_SESSION };\n}\n\nexport function setSearchFlags(flags: MatchFlag[]): SetSearchFlagsAction {\n return { type: SET_SEARCH_FLAGS, payload: flags };\n}\n\nexport function setShowAllResults(showAll: boolean): SetShowAllResultsAction {\n return { type: SET_SHOW_ALL_RESULTS, payload: showAll };\n}\n\nexport function startSearch(query: string): StartSearchAction {\n return { type: START_SEARCH, payload: query };\n}\n\nexport function setSearchResults(\n results: SearchResult[],\n total: number,\n activeResultIndex: number,\n): SetSearchResultsAction {\n return { type: SET_SEARCH_RESULTS, payload: { results, total, activeResultIndex } };\n}\n\nexport function setActiveResultIndex(index: number): SetActiveResultIndexAction {\n return { type: SET_ACTIVE_RESULT_INDEX, payload: index };\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { SearchPluginConfig } from './types';\n\nexport const SEARCH_PLUGIN_ID = 'search';\n\nexport const manifest: PluginManifest<SearchPluginConfig> = {\n id: SEARCH_PLUGIN_ID,\n name: 'Search Plugin',\n version: '1.0.0',\n provides: ['search'],\n requires: ['loader'],\n optional: [],\n defaultConfig: {\n enabled: true,\n flags: [],\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { SearchState } from './types';\nimport {\n START_SEARCH_SESSION,\n STOP_SEARCH_SESSION,\n SET_SEARCH_FLAGS,\n SET_SHOW_ALL_RESULTS,\n START_SEARCH,\n SET_SEARCH_RESULTS,\n SET_ACTIVE_RESULT_INDEX,\n SearchAction,\n} from './actions';\n\nexport const initialState: SearchState = {\n flags: [],\n results: [],\n total: 0,\n activeResultIndex: -1,\n showAllResults: true,\n query: '',\n loading: false,\n active: false,\n};\n\nexport const searchReducer: Reducer<SearchState, SearchAction> = (state = initialState, action) => {\n switch (action.type) {\n case START_SEARCH_SESSION:\n return { ...state, active: true };\n\n case STOP_SEARCH_SESSION:\n return {\n ...state,\n results: [],\n total: 0,\n activeResultIndex: -1,\n query: '',\n loading: false,\n active: false,\n };\n\n case SET_SEARCH_FLAGS:\n return { ...state, flags: action.payload };\n\n case SET_SHOW_ALL_RESULTS:\n return { ...state, showAllResults: action.payload };\n\n case START_SEARCH:\n return { ...state, loading: true, query: action.payload };\n\n case SET_SEARCH_RESULTS:\n return {\n ...state,\n results: action.payload.results,\n total: action.payload.total,\n activeResultIndex: action.payload.activeResultIndex,\n loading: false,\n };\n\n case SET_ACTIVE_RESULT_INDEX:\n return { ...state, activeResultIndex: action.payload };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { SearchPlugin } from './search-plugin';\nimport { manifest, SEARCH_PLUGIN_ID } from './manifest';\nimport { SearchPluginConfig, SearchState } from './types';\nimport { searchReducer, initialState } from './reducer';\nimport { SearchAction } from './actions';\n\nexport const SearchPluginPackage: PluginPackage<\n SearchPlugin,\n SearchPluginConfig,\n SearchState,\n SearchAction\n> = {\n manifest,\n create: (registry, engine) => new SearchPlugin(SEARCH_PLUGIN_ID, registry, engine),\n reducer: searchReducer,\n initialState,\n};\n\nexport * from './search-plugin';\nexport * from './types';\nexport * from './manifest';\nexport { initialState };\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/lib/actions.ts","../src/lib/search-plugin.ts","../src/lib/manifest.ts","../src/lib/reducer.ts","../src/lib/index.ts"],"sourcesContent":["import { Action } from '@embedpdf/core';\nimport { MatchFlag, SearchResult } from '@embedpdf/models';\n\n// Action Types\nexport const START_SEARCH_SESSION = 'START_SEARCH_SESSION';\nexport const STOP_SEARCH_SESSION = 'STOP_SEARCH_SESSION';\nexport const SET_SEARCH_FLAGS = 'SET_SEARCH_FLAGS';\nexport const SET_SHOW_ALL_RESULTS = 'SET_SHOW_ALL_RESULTS';\nexport const START_SEARCH = 'START_SEARCH';\nexport const SET_SEARCH_RESULTS = 'SET_SEARCH_RESULTS';\nexport const SET_ACTIVE_RESULT_INDEX = 'SET_ACTIVE_RESULT_INDEX';\n\n// Action Interfaces\nexport interface StartSearchSessionAction extends Action {\n type: typeof START_SEARCH_SESSION;\n}\n\nexport interface StopSearchSessionAction extends Action {\n type: typeof STOP_SEARCH_SESSION;\n}\n\nexport interface SetSearchFlagsAction extends Action {\n type: typeof SET_SEARCH_FLAGS;\n payload: MatchFlag[];\n}\n\nexport interface SetShowAllResultsAction extends Action {\n type: typeof SET_SHOW_ALL_RESULTS;\n payload: boolean;\n}\n\nexport interface StartSearchAction extends Action {\n type: typeof START_SEARCH;\n payload: string;\n}\n\nexport interface SetSearchResultsAction extends Action {\n type: typeof SET_SEARCH_RESULTS;\n payload: {\n results: SearchResult[];\n total: number;\n activeResultIndex: number;\n };\n}\n\nexport interface SetActiveResultIndexAction extends Action {\n type: typeof SET_ACTIVE_RESULT_INDEX;\n payload: number;\n}\n\n// Union Type for All Actions\nexport type SearchAction =\n | StartSearchSessionAction\n | StopSearchSessionAction\n | SetSearchFlagsAction\n | SetShowAllResultsAction\n | StartSearchAction\n | SetSearchResultsAction\n | SetActiveResultIndexAction;\n\n// Action Creators\nexport function startSearchSession(): StartSearchSessionAction {\n return { type: START_SEARCH_SESSION };\n}\n\nexport function stopSearchSession(): StopSearchSessionAction {\n return { type: STOP_SEARCH_SESSION };\n}\n\nexport function setSearchFlags(flags: MatchFlag[]): SetSearchFlagsAction {\n return { type: SET_SEARCH_FLAGS, payload: flags };\n}\n\nexport function setShowAllResults(showAll: boolean): SetShowAllResultsAction {\n return { type: SET_SHOW_ALL_RESULTS, payload: showAll };\n}\n\nexport function startSearch(query: string): StartSearchAction {\n return { type: START_SEARCH, payload: query };\n}\n\nexport function setSearchResults(\n results: SearchResult[],\n total: number,\n activeResultIndex: number,\n): SetSearchResultsAction {\n return { type: SET_SEARCH_RESULTS, payload: { results, total, activeResultIndex } };\n}\n\nexport function setActiveResultIndex(index: number): SetActiveResultIndexAction {\n return { type: SET_ACTIVE_RESULT_INDEX, payload: index };\n}\n","import { BasePlugin, createBehaviorEmitter, PluginRegistry } from '@embedpdf/core';\nimport {\n MatchFlag,\n PdfDocumentObject,\n SearchAllPagesResult,\n TaskError,\n PdfEngine,\n} from '@embedpdf/models';\nimport { SearchPluginConfig, SearchCapability, SearchState, SearchResultState } from './types';\nimport { LoaderCapability, LoaderEvent, LoaderPlugin } from '@embedpdf/plugin-loader';\nimport {\n startSearchSession,\n stopSearchSession,\n setSearchFlags,\n setShowAllResults,\n startSearch,\n setSearchResults,\n setActiveResultIndex,\n SearchAction,\n} from './actions';\n\nexport class SearchPlugin extends BasePlugin<\n SearchPluginConfig,\n SearchCapability,\n SearchState,\n SearchAction\n> {\n static readonly id = 'search' as const;\n private loader: LoaderCapability;\n private currentDocument?: PdfDocumentObject;\n private engine: PdfEngine;\n\n private readonly searchStop$ = createBehaviorEmitter();\n private readonly searchStart$ = createBehaviorEmitter();\n private readonly searchResult$ = createBehaviorEmitter<SearchAllPagesResult>();\n private readonly searchActiveResultChange$ = createBehaviorEmitter<number>();\n private readonly searchResultState$ = createBehaviorEmitter<SearchResultState>();\n private readonly searchState$ = createBehaviorEmitter<SearchState>();\n\n constructor(id: string, registry: PluginRegistry, engine: PdfEngine) {\n super(id, registry);\n this.engine = engine;\n this.loader = this.registry.getPlugin<LoaderPlugin>('loader')!.provides();\n\n this.loader.onDocumentLoaded(this.handleDocumentLoaded.bind(this));\n this.loader.onLoaderEvent(this.handleLoaderEvent.bind(this));\n }\n\n private handleDocumentLoaded(doc: PdfDocumentObject): void {\n this.currentDocument = doc;\n if (this.state.active) {\n this.startSearchSession();\n }\n }\n\n private handleLoaderEvent(event: LoaderEvent): void {\n if (event.type === 'error' || (event.type === 'start' && this.currentDocument)) {\n if (this.state.active) {\n this.stopSearchSession();\n }\n this.currentDocument = undefined;\n }\n }\n\n async initialize(config: SearchPluginConfig): Promise<void> {\n this.dispatch(setSearchFlags(config.flags || []));\n this.dispatch(\n setShowAllResults(config.showAllResults !== undefined ? config.showAllResults : true),\n );\n }\n\n override onStoreUpdated(_prevState: SearchState, newState: SearchState): void {\n this.searchResultState$.emit({\n results: newState.results,\n activeResultIndex: newState.activeResultIndex,\n showAllResults: newState.showAllResults,\n active: newState.active,\n });\n this.searchState$.emit(newState);\n }\n\n protected buildCapability(): SearchCapability {\n return {\n startSearch: this.startSearchSession.bind(this),\n stopSearch: this.stopSearchSession.bind(this),\n searchAllPages: this.searchAllPages.bind(this),\n nextResult: this.nextResult.bind(this),\n previousResult: this.previousResult.bind(this),\n goToResult: this.goToResult.bind(this),\n setShowAllResults: (showAll) => this.dispatch(setShowAllResults(showAll)),\n getShowAllResults: () => this.state.showAllResults,\n onSearchResult: this.searchResult$.on,\n onSearchStart: this.searchStart$.on,\n onSearchStop: this.searchStop$.on,\n onActiveResultChange: this.searchActiveResultChange$.on,\n onSearchResultStateChange: this.searchResultState$.on,\n onStateChange: this.searchState$.on,\n getFlags: () => this.state.flags,\n setFlags: (flags) => this.setFlags(flags),\n getState: () => this.state,\n };\n }\n\n private setFlags(flags: MatchFlag[]): void {\n this.dispatch(setSearchFlags(flags));\n if (this.state.active) {\n this.searchAllPages(this.state.query, true);\n }\n }\n\n private notifySearchStart(): void {\n this.searchStart$.emit();\n }\n\n private notifySearchStop(): void {\n this.searchStop$.emit();\n }\n\n private notifyActiveResultChange(index: number): void {\n this.searchActiveResultChange$.emit(index);\n }\n\n private startSearchSession(): void {\n if (!this.currentDocument) {\n return;\n }\n this.dispatch(startSearchSession());\n this.notifySearchStart();\n }\n\n private stopSearchSession(): void {\n if (!this.currentDocument || !this.getState().active) {\n return;\n }\n this.dispatch(stopSearchSession());\n this.notifySearchStop();\n }\n\n private async searchAllPages(\n keyword: string,\n force: boolean = false,\n ): Promise<SearchAllPagesResult> {\n const trimmedKeyword = keyword.trim();\n\n if (this.state.query === trimmedKeyword && !force) {\n return { results: this.state.results, total: this.state.total };\n }\n\n this.dispatch(startSearch(trimmedKeyword));\n\n if (!trimmedKeyword) {\n this.dispatch(setSearchResults([], 0, -1));\n return { results: [], total: 0 };\n }\n if (!this.currentDocument) {\n this.dispatch(setSearchResults([], 0, -1));\n return { results: [], total: 0 };\n }\n\n if (!this.state.active) {\n this.startSearchSession();\n }\n\n return new Promise<SearchAllPagesResult>((resolve) => {\n this.engine.searchAllPages(this.currentDocument!, trimmedKeyword, this.state.flags).wait(\n (results) => {\n const activeResultIndex = results.total > 0 ? 0 : -1;\n this.dispatch(setSearchResults(results.results, results.total, activeResultIndex));\n this.searchResult$.emit(results);\n if (results.total > 0) {\n this.notifyActiveResultChange(0);\n }\n resolve(results);\n },\n (error: TaskError<any>) => {\n console.error('Error during search:', error);\n this.dispatch(setSearchResults([], 0, -1));\n resolve({ results: [], total: 0 });\n },\n );\n });\n }\n\n private nextResult(): number {\n if (this.state.results.length === 0) {\n return -1;\n }\n const nextIndex =\n this.state.activeResultIndex >= this.state.results.length - 1\n ? 0\n : this.state.activeResultIndex + 1;\n return this.goToResult(nextIndex);\n }\n\n private previousResult(): number {\n if (this.state.results.length === 0) {\n return -1;\n }\n const prevIndex =\n this.state.activeResultIndex <= 0\n ? this.state.results.length - 1\n : this.state.activeResultIndex - 1;\n return this.goToResult(prevIndex);\n }\n\n private goToResult(index: number): number {\n if (this.state.results.length === 0 || index < 0 || index >= this.state.results.length) {\n return -1;\n }\n this.dispatch(setActiveResultIndex(index));\n this.notifyActiveResultChange(index);\n return index;\n }\n\n async destroy(): Promise<void> {\n if (this.state.active && this.currentDocument) {\n this.stopSearchSession();\n }\n this.searchResult$.clear();\n this.searchStart$.clear();\n this.searchStop$.clear();\n this.searchActiveResultChange$.clear();\n this.searchResultState$.clear();\n this.searchState$.clear();\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { SearchPluginConfig } from './types';\n\nexport const SEARCH_PLUGIN_ID = 'search';\n\nexport const manifest: PluginManifest<SearchPluginConfig> = {\n id: SEARCH_PLUGIN_ID,\n name: 'Search Plugin',\n version: '1.0.0',\n provides: ['search'],\n requires: ['loader'],\n optional: [],\n defaultConfig: {\n enabled: true,\n flags: [],\n },\n};\n","import { Reducer } from '@embedpdf/core';\nimport { SearchState } from './types';\nimport {\n START_SEARCH_SESSION,\n STOP_SEARCH_SESSION,\n SET_SEARCH_FLAGS,\n SET_SHOW_ALL_RESULTS,\n START_SEARCH,\n SET_SEARCH_RESULTS,\n SET_ACTIVE_RESULT_INDEX,\n SearchAction,\n} from './actions';\n\nexport const initialState: SearchState = {\n flags: [],\n results: [],\n total: 0,\n activeResultIndex: -1,\n showAllResults: true,\n query: '',\n loading: false,\n active: false,\n};\n\nexport const searchReducer: Reducer<SearchState, SearchAction> = (state = initialState, action) => {\n switch (action.type) {\n case START_SEARCH_SESSION:\n return { ...state, active: true };\n\n case STOP_SEARCH_SESSION:\n return {\n ...state,\n results: [],\n total: 0,\n activeResultIndex: -1,\n query: '',\n loading: false,\n active: false,\n };\n\n case SET_SEARCH_FLAGS:\n return { ...state, flags: action.payload };\n\n case SET_SHOW_ALL_RESULTS:\n return { ...state, showAllResults: action.payload };\n\n case START_SEARCH:\n return { ...state, loading: true, query: action.payload };\n\n case SET_SEARCH_RESULTS:\n return {\n ...state,\n results: action.payload.results,\n total: action.payload.total,\n activeResultIndex: action.payload.activeResultIndex,\n loading: false,\n };\n\n case SET_ACTIVE_RESULT_INDEX:\n return { ...state, activeResultIndex: action.payload };\n\n default:\n return state;\n }\n};\n","import { PluginPackage } from '@embedpdf/core';\nimport { SearchPlugin } from './search-plugin';\nimport { manifest, SEARCH_PLUGIN_ID } from './manifest';\nimport { SearchPluginConfig, SearchState } from './types';\nimport { searchReducer, initialState } from './reducer';\nimport { SearchAction } from './actions';\n\nexport const SearchPluginPackage: PluginPackage<\n SearchPlugin,\n SearchPluginConfig,\n SearchState,\n SearchAction\n> = {\n manifest,\n create: (registry, engine) => new SearchPlugin(SEARCH_PLUGIN_ID, registry, engine),\n reducer: searchReducer,\n initialState,\n};\n\nexport * from './search-plugin';\nexport * from './types';\nexport * from './manifest';\nexport { initialState };\n"],"names":["START_SEARCH_SESSION","STOP_SEARCH_SESSION","SET_SEARCH_FLAGS","SET_SHOW_ALL_RESULTS","START_SEARCH","SET_SEARCH_RESULTS","SET_ACTIVE_RESULT_INDEX","setSearchFlags","flags","type","payload","setShowAllResults","showAll","setSearchResults","results","total","activeResultIndex","_SearchPlugin","BasePlugin","constructor","id","registry","engine","super","this","searchStop$","createBehaviorEmitter","searchStart$","searchResult$","searchActiveResultChange$","searchResultState$","searchState$","loader","getPlugin","provides","onDocumentLoaded","handleDocumentLoaded","bind","onLoaderEvent","handleLoaderEvent","doc","currentDocument","state","active","startSearchSession","event","stopSearchSession","initialize","config","dispatch","showAllResults","onStoreUpdated","_prevState","newState","emit","buildCapability","startSearch","stopSearch","searchAllPages","nextResult","previousResult","goToResult","getShowAllResults","onSearchResult","on","onSearchStart","onSearchStop","onActiveResultChange","onSearchResultStateChange","onStateChange","getFlags","setFlags","getState","query","notifySearchStart","notifySearchStop","notifyActiveResultChange","index","keyword","force","trimmedKeyword","trim","Promise","resolve","wait","error","console","length","nextIndex","prevIndex","setActiveResultIndex","destroy","clear","SearchPlugin","SEARCH_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","enabled","initialState","loading","SearchPluginPackage","create","reducer","action"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,231 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { MatchFlag, SearchAllPagesResult, SearchResult, PdfEngine } from '@embedpdf/models';
|
|
3
|
-
|
|
4
|
-
interface SearchPluginConfig extends BasePluginConfig {
|
|
5
|
-
flags?: MatchFlag[];
|
|
6
|
-
/**
|
|
7
|
-
* Whether to show all search results or only the active one
|
|
8
|
-
* @default true
|
|
9
|
-
*/
|
|
10
|
-
showAllResults?: boolean;
|
|
11
|
-
}
|
|
12
|
-
interface SearchResultState {
|
|
13
|
-
/**
|
|
14
|
-
* Current search results from last search operation
|
|
15
|
-
*/
|
|
16
|
-
results: SearchResult[];
|
|
17
|
-
/**
|
|
18
|
-
* Current active result index (0-based)
|
|
19
|
-
*/
|
|
20
|
-
activeResultIndex: number;
|
|
21
|
-
/**
|
|
22
|
-
* Whether to show all search results or only the active one
|
|
23
|
-
*/
|
|
24
|
-
showAllResults: boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Whether search is currently active
|
|
27
|
-
*/
|
|
28
|
-
active: boolean;
|
|
29
|
-
}
|
|
30
|
-
interface SearchState {
|
|
31
|
-
flags: MatchFlag[];
|
|
32
|
-
/**
|
|
33
|
-
* Current search results from last search operation
|
|
34
|
-
*/
|
|
35
|
-
results: SearchResult[];
|
|
36
|
-
/**
|
|
37
|
-
* Total number of search results
|
|
38
|
-
*/
|
|
39
|
-
total: number;
|
|
40
|
-
/**
|
|
41
|
-
* Current active result index (0-based)
|
|
42
|
-
*/
|
|
43
|
-
activeResultIndex: number;
|
|
44
|
-
/**
|
|
45
|
-
* Whether to show all search results or only the active one
|
|
46
|
-
*/
|
|
47
|
-
showAllResults: boolean;
|
|
48
|
-
/**
|
|
49
|
-
* Current search query
|
|
50
|
-
*/
|
|
51
|
-
query: string;
|
|
52
|
-
/**
|
|
53
|
-
* Whether a search operation is in progress
|
|
54
|
-
*/
|
|
55
|
-
loading: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* Whether search is currently active
|
|
58
|
-
*/
|
|
59
|
-
active: boolean;
|
|
60
|
-
}
|
|
61
|
-
interface SearchCapability {
|
|
62
|
-
/**
|
|
63
|
-
* Start a search session
|
|
64
|
-
*/
|
|
65
|
-
startSearch: () => void;
|
|
66
|
-
/**
|
|
67
|
-
* Stop the active search session
|
|
68
|
-
*/
|
|
69
|
-
stopSearch: () => void;
|
|
70
|
-
/**
|
|
71
|
-
* Search for all occurrences of the keyword throughout the document
|
|
72
|
-
* @param keyword - Text to search for
|
|
73
|
-
* @returns Promise that resolves to all search results or empty result if none found
|
|
74
|
-
*/
|
|
75
|
-
searchAllPages: (keyword: string) => Promise<SearchAllPagesResult>;
|
|
76
|
-
/**
|
|
77
|
-
* Navigate to the next search result
|
|
78
|
-
* @returns The new active result index
|
|
79
|
-
*/
|
|
80
|
-
nextResult: () => number;
|
|
81
|
-
/**
|
|
82
|
-
* Navigate to the previous search result
|
|
83
|
-
* @returns The new active result index
|
|
84
|
-
*/
|
|
85
|
-
previousResult: () => number;
|
|
86
|
-
/**
|
|
87
|
-
* Go to a specific search result by index
|
|
88
|
-
* @param index - The index of the result to go to
|
|
89
|
-
* @returns The new active result index
|
|
90
|
-
*/
|
|
91
|
-
goToResult: (index: number) => number;
|
|
92
|
-
/**
|
|
93
|
-
* Toggle visibility of all search results
|
|
94
|
-
* @param showAll - Whether to show all results or only the active one
|
|
95
|
-
*/
|
|
96
|
-
setShowAllResults: (showAll: boolean) => void;
|
|
97
|
-
/**
|
|
98
|
-
* Get current state of search results visibility
|
|
99
|
-
* @returns Whether all results are visible
|
|
100
|
-
*/
|
|
101
|
-
getShowAllResults: () => boolean;
|
|
102
|
-
/**
|
|
103
|
-
* Subscribe to search results
|
|
104
|
-
* @param handler - Handler function to receive search results
|
|
105
|
-
* @returns Function to unsubscribe the handler
|
|
106
|
-
*/
|
|
107
|
-
onSearchResult: EventHook<SearchAllPagesResult>;
|
|
108
|
-
/**
|
|
109
|
-
* Subscribe to search session start events
|
|
110
|
-
* @param handler - Handler function called when search session starts
|
|
111
|
-
* @returns Function to unsubscribe the handler
|
|
112
|
-
*/
|
|
113
|
-
onSearchStart: EventHook;
|
|
114
|
-
/**
|
|
115
|
-
* Subscribe to search session stop events
|
|
116
|
-
* @param handler - Handler function called when search session stops
|
|
117
|
-
* @returns Function to unsubscribe the handler
|
|
118
|
-
*/
|
|
119
|
-
onSearchStop: EventHook;
|
|
120
|
-
/**
|
|
121
|
-
* Subscribe to active result change events
|
|
122
|
-
* @param handler - Handler function called when active result changes
|
|
123
|
-
* @returns Function to unsubscribe the handler
|
|
124
|
-
*/
|
|
125
|
-
onActiveResultChange: EventHook<number>;
|
|
126
|
-
/**
|
|
127
|
-
* Subscribe to search result state change events
|
|
128
|
-
* @param handler - Handler function called when search state changes
|
|
129
|
-
* @returns Function to unsubscribe the handler
|
|
130
|
-
*/
|
|
131
|
-
onSearchResultStateChange: EventHook<SearchResultState>;
|
|
132
|
-
/**
|
|
133
|
-
* Get the current search flags
|
|
134
|
-
* @returns Array of active search flags
|
|
135
|
-
*/
|
|
136
|
-
getFlags: () => MatchFlag[];
|
|
137
|
-
/**
|
|
138
|
-
* Set the search flags
|
|
139
|
-
* @param flags - Array of search flags to use
|
|
140
|
-
*/
|
|
141
|
-
setFlags: (flags: MatchFlag[]) => void;
|
|
142
|
-
/**
|
|
143
|
-
* Subscribe to state change events
|
|
144
|
-
* @param handler - Handler function called when state changes
|
|
145
|
-
* @returns Function to unsubscribe the handler
|
|
146
|
-
*/
|
|
147
|
-
onStateChange: EventHook<SearchState>;
|
|
148
|
-
/**
|
|
149
|
-
* Get the current search state
|
|
150
|
-
* @returns The current search state
|
|
151
|
-
*/
|
|
152
|
-
getState: () => SearchState;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
declare const START_SEARCH_SESSION = "START_SEARCH_SESSION";
|
|
156
|
-
declare const STOP_SEARCH_SESSION = "STOP_SEARCH_SESSION";
|
|
157
|
-
declare const SET_SEARCH_FLAGS = "SET_SEARCH_FLAGS";
|
|
158
|
-
declare const SET_SHOW_ALL_RESULTS = "SET_SHOW_ALL_RESULTS";
|
|
159
|
-
declare const START_SEARCH = "START_SEARCH";
|
|
160
|
-
declare const SET_SEARCH_RESULTS = "SET_SEARCH_RESULTS";
|
|
161
|
-
declare const SET_ACTIVE_RESULT_INDEX = "SET_ACTIVE_RESULT_INDEX";
|
|
162
|
-
interface StartSearchSessionAction extends Action {
|
|
163
|
-
type: typeof START_SEARCH_SESSION;
|
|
164
|
-
}
|
|
165
|
-
interface StopSearchSessionAction extends Action {
|
|
166
|
-
type: typeof STOP_SEARCH_SESSION;
|
|
167
|
-
}
|
|
168
|
-
interface SetSearchFlagsAction extends Action {
|
|
169
|
-
type: typeof SET_SEARCH_FLAGS;
|
|
170
|
-
payload: MatchFlag[];
|
|
171
|
-
}
|
|
172
|
-
interface SetShowAllResultsAction extends Action {
|
|
173
|
-
type: typeof SET_SHOW_ALL_RESULTS;
|
|
174
|
-
payload: boolean;
|
|
175
|
-
}
|
|
176
|
-
interface StartSearchAction extends Action {
|
|
177
|
-
type: typeof START_SEARCH;
|
|
178
|
-
payload: string;
|
|
179
|
-
}
|
|
180
|
-
interface SetSearchResultsAction extends Action {
|
|
181
|
-
type: typeof SET_SEARCH_RESULTS;
|
|
182
|
-
payload: {
|
|
183
|
-
results: SearchResult[];
|
|
184
|
-
total: number;
|
|
185
|
-
activeResultIndex: number;
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
interface SetActiveResultIndexAction extends Action {
|
|
189
|
-
type: typeof SET_ACTIVE_RESULT_INDEX;
|
|
190
|
-
payload: number;
|
|
191
|
-
}
|
|
192
|
-
type SearchAction = StartSearchSessionAction | StopSearchSessionAction | SetSearchFlagsAction | SetShowAllResultsAction | StartSearchAction | SetSearchResultsAction | SetActiveResultIndexAction;
|
|
193
|
-
|
|
194
|
-
declare class SearchPlugin extends BasePlugin<SearchPluginConfig, SearchCapability, SearchState, SearchAction> {
|
|
195
|
-
static readonly id: "search";
|
|
196
|
-
private loader;
|
|
197
|
-
private currentDocument?;
|
|
198
|
-
private engine;
|
|
199
|
-
private readonly searchStop$;
|
|
200
|
-
private readonly searchStart$;
|
|
201
|
-
private readonly searchResult$;
|
|
202
|
-
private readonly searchActiveResultChange$;
|
|
203
|
-
private readonly searchResultState$;
|
|
204
|
-
private readonly searchState$;
|
|
205
|
-
constructor(id: string, registry: PluginRegistry, engine: PdfEngine);
|
|
206
|
-
private handleDocumentLoaded;
|
|
207
|
-
private handleLoaderEvent;
|
|
208
|
-
initialize(config: SearchPluginConfig): Promise<void>;
|
|
209
|
-
onStoreUpdated(_prevState: SearchState, newState: SearchState): void;
|
|
210
|
-
protected buildCapability(): SearchCapability;
|
|
211
|
-
private setFlags;
|
|
212
|
-
private notifySearchStart;
|
|
213
|
-
private notifySearchStop;
|
|
214
|
-
private notifyActiveResultChange;
|
|
215
|
-
private startSearchSession;
|
|
216
|
-
private stopSearchSession;
|
|
217
|
-
private searchAllPages;
|
|
218
|
-
private nextResult;
|
|
219
|
-
private previousResult;
|
|
220
|
-
private goToResult;
|
|
221
|
-
destroy(): Promise<void>;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
declare const initialState: SearchState;
|
|
225
|
-
|
|
226
|
-
declare const SEARCH_PLUGIN_ID = "search";
|
|
227
|
-
declare const manifest: PluginManifest<SearchPluginConfig>;
|
|
228
|
-
|
|
229
|
-
declare const SearchPluginPackage: PluginPackage<SearchPlugin, SearchPluginConfig, SearchState, SearchAction>;
|
|
230
|
-
|
|
231
|
-
export { SEARCH_PLUGIN_ID, type SearchCapability, SearchPlugin, type SearchPluginConfig, SearchPluginPackage, type SearchResultState, type SearchState, initialState, manifest };
|
|
1
|
+
export * from './lib';
|