@embedpdf/plugin-search 1.5.0 → 2.0.0-next.1

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.
Files changed (38) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +324 -199
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/actions.d.ts +58 -22
  6. package/dist/lib/index.d.ts +2 -2
  7. package/dist/lib/reducer.d.ts +2 -1
  8. package/dist/lib/search-plugin.d.ts +8 -8
  9. package/dist/lib/types.d.ts +76 -63
  10. package/dist/preact/adapter.d.ts +1 -1
  11. package/dist/preact/index.cjs +1 -1
  12. package/dist/preact/index.cjs.map +1 -1
  13. package/dist/preact/index.js +49 -18
  14. package/dist/preact/index.js.map +1 -1
  15. package/dist/react/adapter.d.ts +1 -1
  16. package/dist/react/index.cjs +1 -1
  17. package/dist/react/index.cjs.map +1 -1
  18. package/dist/react/index.js +49 -18
  19. package/dist/react/index.js.map +1 -1
  20. package/dist/shared/components/search-layer.d.ts +3 -2
  21. package/dist/shared/hooks/use-search.d.ts +4 -4
  22. package/dist/shared-preact/components/search-layer.d.ts +3 -2
  23. package/dist/shared-preact/hooks/use-search.d.ts +4 -4
  24. package/dist/shared-react/components/search-layer.d.ts +3 -2
  25. package/dist/shared-react/hooks/use-search.d.ts +4 -4
  26. package/dist/svelte/components/SearchLayer.svelte.d.ts +4 -3
  27. package/dist/svelte/hooks/use-search.svelte.d.ts +11 -5
  28. package/dist/svelte/index.cjs +1 -1
  29. package/dist/svelte/index.cjs.map +1 -1
  30. package/dist/svelte/index.js +69 -35
  31. package/dist/svelte/index.js.map +1 -1
  32. package/dist/vue/components/search-layer.vue.d.ts +4 -2
  33. package/dist/vue/hooks/use-search.d.ts +9 -64
  34. package/dist/vue/index.cjs +1 -1
  35. package/dist/vue/index.cjs.map +1 -1
  36. package/dist/vue/index.js +77 -32
  37. package/dist/vue/index.js.map +1 -1
  38. package/package.json +4 -6
@@ -1,77 +1,111 @@
1
1
  import * as $ from "svelte/internal/client";
2
- import { usePlugin, useCapability } from "@embedpdf/core/svelte";
3
- import { SearchPlugin, initialState } from "@embedpdf/plugin-search";
2
+ import { usePlugin, useCapability, useDocumentState } from "@embedpdf/core/svelte";
3
+ import { SearchPlugin, initialSearchDocumentState } from "@embedpdf/plugin-search";
4
4
  export * from "@embedpdf/plugin-search";
5
5
  import "svelte/internal/disclose-version";
6
6
  const useSearchPlugin = () => usePlugin(SearchPlugin.id);
7
7
  const useSearchCapability = () => useCapability(SearchPlugin.id);
8
- const useSearch = () => {
8
+ const useSearch = (getDocumentId) => {
9
9
  const capability = useSearchCapability();
10
- const state = $.proxy({
11
- get provides() {
12
- return capability.provides;
13
- },
14
- state: initialState
15
- });
10
+ let searchState = $.state($.proxy(initialSearchDocumentState));
11
+ const documentId = $.derived(getDocumentId);
12
+ const scopedProvides = $.derived(() => capability.provides && $.get(documentId) ? capability.provides.forDocument($.get(documentId)) : null);
16
13
  $.user_effect(() => {
17
- if (!capability.provides) return;
18
- return capability.provides.onStateChange((newState) => {
19
- state.state = newState;
14
+ const provides = capability.provides;
15
+ const docId = $.get(documentId);
16
+ if (!provides || !docId) {
17
+ $.set(searchState, initialSearchDocumentState, true);
18
+ return;
19
+ }
20
+ const scope = provides.forDocument(docId);
21
+ $.set(searchState, scope.getState(), true);
22
+ return scope.onStateChange((state) => {
23
+ $.set(searchState, state, true);
20
24
  });
21
25
  });
22
- return state;
26
+ return {
27
+ get provides() {
28
+ return $.get(scopedProvides);
29
+ },
30
+ get state() {
31
+ return $.get(searchState);
32
+ }
33
+ };
23
34
  };
24
35
  var root_3 = $.from_html(`<div></div>`);
25
36
  var root_1 = $.from_html(`<div></div>`);
26
37
  function SearchLayer($$anchor, $$props) {
27
38
  $.push($$props, true);
28
- const highlightColor = $.prop($$props, "highlightColor", 3, "#FFFF00"), activeHighlightColor = $.prop($$props, "activeHighlightColor", 3, "#FFBF00"), divProps = $.rest_props($$props, [
39
+ let highlightColor = $.prop($$props, "highlightColor", 3, "#FFFF00"), activeHighlightColor = $.prop($$props, "activeHighlightColor", 3, "#FFBF00"), divProps = $.rest_props($$props, [
29
40
  "$$slots",
30
41
  "$$events",
31
42
  "$$legacy",
43
+ "documentId",
32
44
  "pageIndex",
33
45
  "scale",
34
46
  "highlightColor",
35
47
  "activeHighlightColor"
36
48
  ]);
37
49
  const searchCapability = useSearchCapability();
50
+ const documentState = useDocumentState(() => $$props.documentId);
38
51
  let searchResultState = $.state(null);
52
+ const scope = $.derived(() => {
53
+ var _a;
54
+ return ((_a = searchCapability.provides) == null ? void 0 : _a.forDocument($$props.documentId)) ?? null;
55
+ });
56
+ const actualScale = $.derived(() => {
57
+ var _a;
58
+ return $$props.scale !== void 0 ? $$props.scale : ((_a = documentState.current) == null ? void 0 : _a.scale) ?? 1;
59
+ });
39
60
  $.user_effect(() => {
40
- if (!searchCapability.provides) return;
41
- return searchCapability.provides.onSearchResultStateChange((state) => {
61
+ if (!$.get(scope)) {
62
+ $.set(searchResultState, null);
63
+ return;
64
+ }
65
+ const currentState = $.get(scope).getState();
66
+ $.set(
67
+ searchResultState,
68
+ {
69
+ results: currentState.results,
70
+ activeResultIndex: currentState.activeResultIndex,
71
+ showAllResults: currentState.showAllResults,
72
+ active: currentState.active
73
+ },
74
+ true
75
+ );
76
+ return $.get(scope).onSearchResultStateChange((state) => {
42
77
  $.set(searchResultState, state, true);
43
78
  });
44
79
  });
45
80
  const pageResults = $.derived(() => $.get(searchResultState) ? $.get(searchResultState).results.map((result, originalIndex) => ({ result, originalIndex })).filter(({ result }) => result.pageIndex === $$props.pageIndex) : []);
81
+ const resultsToShow = $.derived(() => $.get(searchResultState) ? $.get(pageResults).filter(({ originalIndex }) => $.get(searchResultState).showAllResults || originalIndex === $.get(searchResultState).activeResultIndex) : []);
46
82
  var fragment = $.comment();
47
83
  var node = $.first_child(fragment);
48
84
  {
49
85
  var consequent = ($$anchor2) => {
50
86
  var div = root_1();
51
- $.attribute_effect(div, () => ({ ...divProps }));
52
- $.each(div, 21, () => $.get(pageResults), $.index, ($$anchor3, $$item) => {
87
+ $.attribute_effect(div, () => ({ ...divProps, [$.STYLE]: { "pointer-events": "none" } }));
88
+ $.each(div, 23, () => $.get(resultsToShow), ({ result, originalIndex }, idx) => `result-${idx}`, ($$anchor3, $$item, idx) => {
53
89
  let result = () => $.get($$item).result;
54
90
  let originalIndex = () => $.get($$item).originalIndex;
55
91
  var fragment_1 = $.comment();
56
92
  var node_1 = $.first_child(fragment_1);
57
- $.each(node_1, 17, () => result().rects, $.index, ($$anchor4, rect) => {
93
+ $.each(node_1, 19, () => result().rects, (rect, rectIdx) => `rect-${$.get(idx)}-${rectIdx}`, ($$anchor4, rect) => {
58
94
  var div_1 = root_3();
59
95
  let styles;
60
- $.template_effect(($0) => styles = $.set_style(div_1, "", styles, $0), [
61
- () => ({
62
- position: "absolute",
63
- top: `${$.get(rect).origin.y * $$props.scale}px`,
64
- left: `${$.get(rect).origin.x * $$props.scale}px`,
65
- width: `${$.get(rect).size.width * $$props.scale}px`,
66
- height: `${$.get(rect).size.height * $$props.scale}px`,
67
- "background-color": originalIndex() === $.get(searchResultState).activeResultIndex ? activeHighlightColor() : highlightColor(),
68
- "mix-blend-mode": "multiply",
69
- transform: "scale(1.02)",
70
- "transform-origin": "center",
71
- transition: "opacity .3s ease-in-out",
72
- opacity: "1"
73
- })
74
- ]);
96
+ $.template_effect(() => styles = $.set_style(div_1, "", styles, {
97
+ position: "absolute",
98
+ top: `${$.get(rect).origin.y * $.get(actualScale)}px`,
99
+ left: `${$.get(rect).origin.x * $.get(actualScale)}px`,
100
+ width: `${$.get(rect).size.width * $.get(actualScale)}px`,
101
+ height: `${$.get(rect).size.height * $.get(actualScale)}px`,
102
+ "background-color": originalIndex() === $.get(searchResultState).activeResultIndex ? activeHighlightColor() : highlightColor(),
103
+ "mix-blend-mode": "multiply",
104
+ transform: "scale(1.02)",
105
+ "transform-origin": "center",
106
+ transition: "opacity .3s ease-in-out",
107
+ opacity: "1"
108
+ }));
75
109
  $.append($$anchor4, div_1);
76
110
  });
77
111
  $.append($$anchor3, fragment_1);
@@ -80,7 +114,7 @@ function SearchLayer($$anchor, $$props) {
80
114
  $.append($$anchor2, div);
81
115
  };
82
116
  $.if(node, ($$render) => {
83
- if ($.get(searchResultState)) $$render(consequent);
117
+ if ($.get(searchResultState) && $.get(searchResultState).active) $$render(consequent);
84
118
  });
85
119
  }
86
120
  $.append($$anchor, fragment);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/svelte/hooks/use-search.svelte.ts","../../src/svelte/components/SearchLayer.svelte"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport { initialState, SearchPlugin, SearchState } from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\nexport const useSearch = () => {\n const capability = useSearchCapability();\n\n const state = $state({\n get provides() {\n return capability.provides;\n },\n state: initialState as SearchState,\n });\n\n $effect(() => {\n if (!capability.provides) return;\n return capability.provides.onStateChange((newState) => {\n state.state = newState;\n });\n });\n\n return state;\n};\n","<script lang=\"ts\">\n import type { SearchResultState } from '@embedpdf/plugin-search';\n import { useSearchCapability } from '../hooks';\n import type { HTMLAttributes } from 'svelte/elements';\n\n interface Props extends HTMLAttributes<HTMLDivElement> {\n pageIndex: number;\n scale: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n }\n\n const {\n pageIndex,\n scale,\n highlightColor = '#FFFF00',\n activeHighlightColor = '#FFBF00',\n ...divProps\n }: Props = $props();\n\n const searchCapability = useSearchCapability();\n let searchResultState = $state<SearchResultState | null>(null);\n\n $effect(() => {\n if (!searchCapability.provides) return;\n return searchCapability.provides.onSearchResultStateChange((state) => {\n searchResultState = state;\n });\n });\n\n const pageResults = $derived(\n searchResultState\n ? searchResultState.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === pageIndex)\n : [],\n );\n</script>\n\n{#if searchResultState}\n <div {...divProps}>\n {#each pageResults as { result, originalIndex }}\n {#each result.rects as rect}\n <div\n style:position=\"absolute\"\n style:top=\"{rect.origin.y * scale}px\"\n style:left=\"{rect.origin.x * scale}px\"\n style:width=\"{rect.size.width * scale}px\"\n style:height=\"{rect.size.height * scale}px\"\n style:background-color={originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor}\n style:mix-blend-mode=\"multiply\"\n style:transform=\"scale(1.02)\"\n style:transform-origin=\"center\"\n style:transition=\"opacity .3s ease-in-out\"\n style:opacity=\"1\"\n ></div>\n {/each}\n {/each}\n </div>\n{/if}\n"],"names":["$$anchor"],"mappings":";;;;;AAGa,MAAA,kBAAwB,MAAA,UAAwB,aAAa,EAAE;AAC/D,MAAA,sBAA4B,MAAA,cAA4B,aAAa,EAAE;AAEvE,MAAA,kBAAkB;AACvB,QAAA,aAAa,oBAAoB;QAEjC;IACA,IAAA,WAAW;AACN,aAAA,WAAW;AAAA,IACpB;AAAA,IACA,OAAO;AAAA;AAGT,IAAA,kBAAc;AACP,QAAA,CAAA,WAAW,SAAU;AACnB,WAAA,WAAW,SAAS,cAAe,CAAA,aAAa;AACrD,YAAM,QAAQ;AAAA,KACf;AAAA,GACF;SAEM;AACT;;;wCCxBA;;AAeI,QAAA,sDAAiB,SAAS,GAC1B,kEAAuB,SAAS,GAC7B,WAAO,EAAA,WAAA,SAAA;AAAA;;;;;;;;AAGN,QAAA,mBAAmB,oBAAmB;AACxC,MAAA,4BAAqD,IAAI;AAE7D,IAAA,YAAc,MAAA;AACP,QAAA,CAAA,iBAAiB,SAAQ;AACvB,WAAA,iBAAiB,SAAS,0BAAyB,CAAE,UAAU;AACpE,QAAA,IAAA,mBAAoB,OAAK,IAAA;AAAA,KAC1B;AAAA,GACF;AAEK,QAAA,oCACJ,iBAAgB,IACZ,EAAA,IAAA,iBAAiB,EAAC,QACf,IAAK,CAAA,QAAQ,mBAAa,EAAQ,QAAQ,kBAC1C,OAAM,CAAA,EAAI,OAAM,MAAO,OAAO,cAAS,QAAA,SAAA;;;;;;0CAMvC,SAAQ,EAAA;kCACR,WAAW,GAAA,EAAA,OAAA,CAAAA,WAAA,WAAA;AAAO,YAAA,6BAAA;AAAQ,YAAA,oCAAA;;;iCACxB,OAAM,EAAC,OAAK,EAAA,OAAA,CAAAA,WAAI,SAAI;;;;;;4BAGX,IAAI,EAAC,OAAO,IAAC,QAAA,KAAA;AAAA,6BACZ,IAAI,EAAC,OAAO,IAAC,QAAA,KAAA;AAAA,8BACZ,IAAI,EAAC,KAAK,QAAK,QAAA,KAAA;AAAA,+BACd,IAAI,EAAC,KAAK,SAAM,QAAA,KAAA;AAAA,cACP,oBAAA,0BAAkB,iBAAiB,EAAC,oBACxD,yBACA,eAAc;AAAA;;;;;;;;;;;;;;;gBAZvB,iBAAiB,EAAA,UAAA,UAAA;AAAA;;;;AAFtB;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/svelte/hooks/use-search.svelte.ts","../../src/svelte/components/SearchLayer.svelte"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport {\n SearchPlugin,\n SearchDocumentState,\n SearchScope,\n initialSearchDocumentState,\n} from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UseSearchReturn {\n provides: SearchScope | null;\n state: SearchDocumentState;\n}\n\n/**\n * Hook for search state for a specific document\n * @param getDocumentId Function that returns the document ID\n */\nexport const useSearch = (getDocumentId: () => string | null): UseSearchReturn => {\n const capability = useSearchCapability();\n\n let searchState = $state<SearchDocumentState>(initialSearchDocumentState);\n\n // Reactive documentId\n const documentId = $derived(getDocumentId());\n\n // Scoped capability for current docId\n const scopedProvides = $derived(\n capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n );\n\n $effect(() => {\n const provides = capability.provides;\n const docId = documentId;\n\n if (!provides || !docId) {\n searchState = initialSearchDocumentState;\n return;\n }\n\n const scope = provides.forDocument(docId);\n\n // Set initial state\n searchState = scope.getState();\n\n // Subscribe to changes\n return scope.onStateChange((state) => {\n searchState = state;\n });\n });\n\n return {\n get provides() {\n return scopedProvides;\n },\n get state() {\n return searchState;\n },\n };\n};\n","<script lang=\"ts\">\n import type { SearchResultState } from '@embedpdf/plugin-search';\n import { useDocumentState } from '@embedpdf/core/svelte';\n import { useSearchCapability } from '../hooks';\n import type { HTMLAttributes } from 'svelte/elements';\n\n interface SearchLayerProps extends HTMLAttributes<HTMLDivElement> {\n documentId: string;\n pageIndex: number;\n scale?: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n }\n\n let {\n documentId,\n pageIndex,\n scale: scaleOverride,\n highlightColor = '#FFFF00',\n activeHighlightColor = '#FFBF00',\n ...divProps\n }: SearchLayerProps = $props();\n\n const searchCapability = useSearchCapability();\n const documentState = useDocumentState(() => documentId);\n\n let searchResultState = $state<SearchResultState | null>(null);\n\n const scope = $derived(searchCapability.provides?.forDocument(documentId) ?? null);\n\n const actualScale = $derived(\n scaleOverride !== undefined ? scaleOverride : (documentState.current?.scale ?? 1),\n );\n\n $effect(() => {\n if (!scope) {\n searchResultState = null;\n return;\n }\n\n // Set initial state\n const currentState = scope.getState();\n searchResultState = {\n results: currentState.results,\n activeResultIndex: currentState.activeResultIndex,\n showAllResults: currentState.showAllResults,\n active: currentState.active,\n };\n\n // Subscribe to changes\n return scope.onSearchResultStateChange((state) => {\n searchResultState = state;\n });\n });\n\n // Filter results for current page while preserving original indices\n const pageResults = $derived(\n searchResultState\n ? searchResultState.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === pageIndex)\n : [],\n );\n\n // Decide which results to show\n const resultsToShow = $derived(\n searchResultState\n ? pageResults.filter(\n ({ originalIndex }) =>\n searchResultState!.showAllResults ||\n originalIndex === searchResultState!.activeResultIndex,\n )\n : [],\n );\n</script>\n\n{#if searchResultState && searchResultState.active}\n <div style:pointer-events=\"none\" {...divProps}>\n {#each resultsToShow as { result, originalIndex }, idx (`result-${idx}`)}\n {#each result.rects as rect, rectIdx (`rect-${idx}-${rectIdx}`)}\n <div\n style:position=\"absolute\"\n style:top=\"{rect.origin.y * actualScale}px\"\n style:left=\"{rect.origin.x * actualScale}px\"\n style:width=\"{rect.size.width * actualScale}px\"\n style:height=\"{rect.size.height * actualScale}px\"\n style:background-color={originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor}\n style:mix-blend-mode=\"multiply\"\n style:transform=\"scale(1.02)\"\n style:transform-origin=\"center\"\n style:transition=\"opacity .3s ease-in-out\"\n style:opacity=\"1\"\n ></div>\n {/each}\n {/each}\n </div>\n{/if}\n"],"names":["$$anchor"],"mappings":";;;;;AAQa,MAAA,kBAAA,MAAwB,UAAwB,aAAa,EAAE;AAC/D,MAAA,sBAAA,MAA4B,cAA4B,aAAa,EAAE;MAYvE,YAAA,CAAa,kBAAwD;AAC1E,QAAA,aAAa,oBAAA;AAEf,MAAA,8BAA0C,0BAA0B,CAAA;AAGlE,QAAA,uBAAsB,aAAA;AAGtB,QAAA,iBAAA,EAAA,QAAA,MACJ,WAAW,kBAAY,UAAA,IAAa,WAAW,SAAS,kBAAY,UAAU,CAAA,IAAI,IAAA;AAGpF,IAAA,kBAAc;UACN,WAAW,WAAW;AACtB,UAAA,cAAQ,UAAA;SAET,YAAA,CAAa,OAAO;AACvB,QAAA,IAAA,aAAc,4BAAA,IAAA;;IAEhB;AAEM,UAAA,QAAQ,SAAS,YAAY,KAAK;UAGxC,aAAc,MAAM,SAAA,GAAA,IAAA;AAGb,WAAA,MAAM,cAAA,CAAe,UAAU;AACpC,QAAA,IAAA,aAAc,OAAA,IAAA;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;;IAGK,IAAA,WAAW;mBACN,cAAA;AAAA,IACT;AAAA,IACI,IAAA,QAAQ;mBACH,WAAA;AAAA,IACT;AAAA;AAEJ;;;wCC9DA;;AAkBI,MAAA,sDAAiB,SAAS,GAC1B,kEAAuB,SAAS,GAC7B,WAAO,EAAA,WAAA,SAAA;AAAA;;;;;;;;;AAGN,QAAA,mBAAmB,oBAAmB;AACtC,QAAA,gBAAgB,iBAAgB,MAAA,QAAA,UAAA;AAElC,MAAA,4BAAqD,IAAI;AAEvD,QAAA;;AAAiB,mCAAiB,aAAjB,mBAA2B,oCAA2B;AAAA,GAAI;QAE3E,cAAW,EAAA,QAAA,MAAA;;AAAA,mBAAA,UACG,SAAS,QAAA,UAAoB,mBAAc,YAAd,mBAAuB,UAAS;AAAA,GAAC;AAGlF,IAAA,YAAO,MAAO;AACP,QAAA,CAAA,EAAA,IAAA,KAAK,GAAE;AACV,QAAA,IAAA,mBAAoB,IAAI;;IAE1B;UAGM,eAAY,EAAA,IAAG,KAAK,EAAC,SAAQ;;MACnC;AAAA;QACE,SAAS,aAAa;AAAA,QACtB,mBAAmB,aAAa;AAAA,QAChC,gBAAgB,aAAa;AAAA,QAC7B,QAAQ,aAAa;AAAA;;;AAIhB,WAAA,EAAA,IAAA,KAAK,EAAC,0BAAyB,CAAE,UAAU;AAChD,QAAA,IAAA,mBAAoB,OAAK,IAAA;AAAA,IAC3B,CAAC;AAAA,EACH,CAAC;AAGK,QAAA,oCACJ,iBAAgB,IACZ,EAAA,IAAA,iBAAiB,EAAC,QACf,IAAG,CAAE,QAAQ,mBAAa,EAAQ,QAAQ,kBAC1C,OAAM,CAAA,EAAI,OAAM,MAAO,OAAO,cAAS,QAAA,SAAA;AAK1C,QAAA,sCACJ,iBAAgB,IACZ,EAAA,IAAA,WAAW,EAAC,OAAM,CAAA,EACb,cAAa,MAAA,EAAA,IACd,iBAAiB,EAAE,kBACnB,kBAAa,EAAA,IAAK,iBAAiB,EAAE,iBAAiB;;;;;;0CAO3B,UAAQ,CAAA,EAAA,KAAA,GAAA,EAAA,kBAAA,OAAA,EAAA,EAAA;AACpC,QAAA,KAAA,KAAA,IAAA,MAAA,EAAA,IAAA,aAAa,GAAA,CAAA,EAAO,QAAQ,mCAA+B,GAAG,IAAA,CAAAA,WAAA,QAAA,QAAA;AAA1C,YAAA,6BAAA;AAAQ,YAAA,oCAAA;;;iCAC1B,SAAO,OAAK,CAAI,gCAAuB,GAAG,CAAA,IAAI,OAAO,IAAA,CAAAA,WAArC,SAAI;;;;;YAGX,KAAA,GAAA,EAAA,IAAA,IAAI,EAAC,OAAO,UAAI,WAAW,CAAA;AAAA,YAC1B,MAAA,GAAA,EAAA,IAAA,IAAI,EAAC,OAAO,UAAI,WAAW,CAAA;AAAA,YAC1B,OAAA,GAAA,EAAA,IAAA,IAAI,EAAC,KAAK,cAAQ,WAAW,CAAA;AAAA,YAC5B,QAAA,GAAA,EAAA,IAAA,IAAI,EAAC,KAAK,eAAS,WAAW,CAAA;AAAA,YACrB,oBAAA,0BAAkB,iBAAiB,EAAC,oBACxD,qBAAmB,IACnB,eAAc;AAAA;;;;;;;;;;;;;;gBAZvB,iBAAiB,KAAA,EAAA,IAAI,iBAAiB,EAAC,OAAM,UAAA,UAAA;AAAA;;;;AAFlD;"}
@@ -1,11 +1,13 @@
1
1
  interface SearchLayerProps {
2
+ documentId: string;
2
3
  pageIndex: number;
3
- scale: number;
4
+ scale?: number;
4
5
  highlightColor?: string;
5
6
  activeHighlightColor?: string;
6
7
  }
7
- declare const _default: import('vue').DefineComponent<SearchLayerProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SearchLayerProps> & Readonly<{}>, {
8
+ declare const __VLS_export: import('vue').DefineComponent<SearchLayerProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<SearchLayerProps> & Readonly<{}>, {
8
9
  highlightColor: string;
9
10
  activeHighlightColor: string;
10
11
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
12
+ declare const _default: typeof __VLS_export;
11
13
  export default _default;
@@ -1,67 +1,12 @@
1
- import { SearchPlugin, SearchState } from '../../lib/index.ts';
1
+ import { MaybeRefOrGetter, Ref, ComputedRef } from 'vue';
2
+ import { SearchPlugin, SearchDocumentState, SearchScope } from '../../lib/index.ts';
2
3
  export declare const useSearchPlugin: () => import('@embedpdf/core/vue').PluginState<SearchPlugin>;
3
4
  export declare const useSearchCapability: () => import('@embedpdf/core/vue').CapabilityState<Readonly<import('../../lib/index.ts').SearchCapability>>;
4
- export declare const useSearch: () => {
5
- state: import('vue').Ref<{
6
- flags: import('@embedpdf/models').MatchFlag[];
7
- results: {
8
- pageIndex: number;
9
- charIndex: number;
10
- charCount: number;
11
- rects: {
12
- origin: {
13
- x: number;
14
- y: number;
15
- };
16
- size: {
17
- width: number;
18
- height: number;
19
- };
20
- }[];
21
- context: {
22
- before: string;
23
- match: string;
24
- after: string;
25
- truncatedLeft: boolean;
26
- truncatedRight: boolean;
27
- };
28
- }[];
29
- total: number;
30
- activeResultIndex: number;
31
- showAllResults: boolean;
32
- query: string;
33
- loading: boolean;
34
- active: boolean;
35
- }, SearchState | {
36
- flags: import('@embedpdf/models').MatchFlag[];
37
- results: {
38
- pageIndex: number;
39
- charIndex: number;
40
- charCount: number;
41
- rects: {
42
- origin: {
43
- x: number;
44
- y: number;
45
- };
46
- size: {
47
- width: number;
48
- height: number;
49
- };
50
- }[];
51
- context: {
52
- before: string;
53
- match: string;
54
- after: string;
55
- truncatedLeft: boolean;
56
- truncatedRight: boolean;
57
- };
58
- }[];
59
- total: number;
60
- activeResultIndex: number;
61
- showAllResults: boolean;
62
- query: string;
63
- loading: boolean;
64
- active: boolean;
65
- }>;
66
- provides: import('vue').Ref<Readonly<import('../../lib/index.ts').SearchCapability> | null, Readonly<import('../../lib/index.ts').SearchCapability> | null>;
5
+ /**
6
+ * Hook for search state for a specific document
7
+ * @param documentId Document ID (can be ref, computed, getter, or plain value)
8
+ */
9
+ export declare const useSearch: (documentId: MaybeRefOrGetter<string>) => {
10
+ state: Ref<SearchDocumentState>;
11
+ provides: ComputedRef<SearchScope | null>;
67
12
  };
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),t=require("@embedpdf/core/vue"),r=require("@embedpdf/plugin-search"),l=()=>t.useCapability(r.SearchPlugin.id),o=e.defineComponent({__name:"search-layer",props:{pageIndex:{},scale:{},highlightColor:{default:"#FFFF00"},activeHighlightColor:{default:"#FFBF00"}},setup(t){const r=t,{provides:o}=l(),n=e.ref(null),a=e.computed((()=>n.value?n.value.results.map(((e,t)=>({result:e,originalIndex:t}))).filter((({result:e})=>e.pageIndex===r.pageIndex)):[]));let i;return e.onMounted((()=>{o.value&&(i=o.value.onSearchResultStateChange((e=>{n.value=e})))})),e.onUnmounted((()=>{null==i||i()})),(t,r)=>n.value?(e.openBlock(),e.createElementBlock("div",e.normalizeProps(e.mergeProps({key:0},t.$attrs)),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,(({result:r,originalIndex:l},o)=>(e.openBlock(),e.createElementBlock("div",{key:`result-${o}`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.rects,((r,a)=>(e.openBlock(),e.createElementBlock("div",{key:`rect-${o}-${a}`,style:e.normalizeStyle({position:"absolute",top:r.origin.y*t.scale+"px",left:r.origin.x*t.scale+"px",width:r.size.width*t.scale+"px",height:r.size.height*t.scale+"px",backgroundColor:l===n.value.activeResultIndex?t.activeHighlightColor:t.highlightColor,mixBlendMode:"multiply",transform:"scale(1.02)",transformOrigin:"center",transition:"opacity .3s ease-in-out",opacity:1})},null,4)))),128))])))),128))],16)):e.createCommentVNode("",!0)}});exports.SearchLayer=o,exports.useSearch=()=>{const{provides:t}=l(),o=e.ref(r.initialState);return e.onMounted((()=>{if(!t.value)return;const r=t.value.onStateChange((e=>{o.value=e}));e.onUnmounted((()=>{r()}))})),{state:o,provides:t}},exports.useSearchCapability=l,exports.useSearchPlugin=()=>t.usePlugin(r.SearchPlugin.id),Object.keys(r).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>r[e]})}));
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),t=require("@embedpdf/core/vue"),l=require("@embedpdf/plugin-search"),a=()=>t.useCapability(l.SearchPlugin.id),r=e.defineComponent({__name:"search-layer",props:{documentId:{},pageIndex:{},scale:{},highlightColor:{default:"#FFFF00"},activeHighlightColor:{default:"#FFBF00"}},setup(l){const r=l,{provides:o}=a(),n=t.useDocumentState(()=>r.documentId),u=e.ref(null),i=e.computed(()=>{var e;return(null==(e=o.value)?void 0:e.forDocument(r.documentId))??null}),c=e.computed(()=>{var e;return void 0!==r.scale?r.scale:(null==(e=n.value)?void 0:e.scale)??1});e.watch(i,(e,t,l)=>{if(!e)return void(u.value=null);const a=e.getState();u.value={results:a.results,activeResultIndex:a.activeResultIndex,showAllResults:a.showAllResults,active:a.active};l(e.onSearchResultStateChange(e=>{u.value=e}))},{immediate:!0});const s=e.computed(()=>u.value?u.value.results.map((e,t)=>({result:e,originalIndex:t})).filter(({result:e})=>e.pageIndex===r.pageIndex):[]),d=e.computed(()=>u.value?s.value.filter(({originalIndex:e})=>u.value.showAllResults||e===u.value.activeResultIndex):[]);return(t,a)=>u.value&&u.value.active?(e.openBlock(),e.createElementBlock("div",e.mergeProps({key:0,style:{pointerEvents:"none"}},t.$attrs),[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,({result:t,originalIndex:a},r)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`result-${r}`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.rects,(t,o)=>(e.openBlock(),e.createElementBlock("div",{key:`rect-${r}-${o}`,style:e.normalizeStyle({position:"absolute",top:t.origin.y*c.value+"px",left:t.origin.x*c.value+"px",width:t.size.width*c.value+"px",height:t.size.height*c.value+"px",backgroundColor:a===u.value.activeResultIndex?l.activeHighlightColor:l.highlightColor,mixBlendMode:"multiply",transform:"scale(1.02)",transformOrigin:"center",transition:"opacity .3s ease-in-out",opacity:1})},null,4))),128))],64))),128))],16)):e.createCommentVNode("",!0)}});exports.SearchLayer=r,exports.useSearch=t=>{const{provides:r}=a(),o=e.ref(l.initialSearchDocumentState);e.watch([r,()=>e.toValue(t)],([e,t],a,r)=>{if(!e)return void(o.value=l.initialSearchDocumentState);const n=e.forDocument(t);o.value=n.getState();r(n.onStateChange(e=>{o.value=e}))},{immediate:!0});const n=e.computed(()=>{var l;const a=e.toValue(t);return(null==(l=r.value)?void 0:l.forDocument(a))??null});return{state:o,provides:n}},exports.useSearchCapability=a,exports.useSearchPlugin=()=>t.usePlugin(l.SearchPlugin.id),Object.keys(l).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>l[e]})});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-search.ts","../../src/vue/components/search-layer.vue"],"sourcesContent":["import { ref, onMounted, onUnmounted } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { initialState, SearchPlugin, SearchState } from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\nexport const useSearch = () => {\n const { provides } = useSearchCapability();\n const searchState = ref<SearchState>(initialState);\n\n onMounted(() => {\n if (!provides.value) return;\n\n const unsubscribe = provides.value.onStateChange((state) => {\n searchState.value = state;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n });\n\n return {\n state: searchState,\n provides,\n };\n};\n","<template>\n <div v-if=\"searchResultState\" v-bind=\"$attrs\">\n <div v-for=\"({ result, originalIndex }, idx) in pageResults\" :key=\"`result-${idx}`\">\n <div\n v-for=\"(rect, rectIdx) in result.rects\"\n :key=\"`rect-${idx}-${rectIdx}`\"\n :style=\"{\n position: 'absolute',\n top: `${rect.origin.y * scale}px`,\n left: `${rect.origin.x * scale}px`,\n width: `${rect.size.width * scale}px`,\n height: `${rect.size.height * scale}px`,\n backgroundColor:\n originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor,\n mixBlendMode: 'multiply',\n transform: 'scale(1.02)',\n transformOrigin: 'center',\n transition: 'opacity .3s ease-in-out',\n opacity: 1,\n }\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\nimport type { SearchResultState } from '@embedpdf/plugin-search';\nimport { useSearchCapability } from '../hooks/use-search';\n\ninterface SearchLayerProps {\n pageIndex: number;\n scale: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n}\n\nconst props = withDefaults(defineProps<SearchLayerProps>(), {\n highlightColor: '#FFFF00',\n activeHighlightColor: '#FFBF00',\n});\n\nconst { provides: searchProvides } = useSearchCapability();\nconst searchResultState = ref<SearchResultState | null>(null);\n\n// Filter results for current page while preserving original indices\nconst pageResults = computed(() => {\n if (!searchResultState.value) return [];\n\n return searchResultState.value.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === props.pageIndex);\n});\n\nlet unsubscribe: (() => void) | undefined;\n\nonMounted(() => {\n if (!searchProvides.value) return;\n\n unsubscribe = searchProvides.value.onSearchResultStateChange((state) => {\n searchResultState.value = state;\n });\n});\n\nonUnmounted(() => {\n unsubscribe?.();\n});\n</script>\n"],"names":["useSearchCapability","useCapability","SearchPlugin","id","props","__props","provides","searchProvides","searchResultState","ref","pageResults","computed","value","results","map","result","originalIndex","filter","pageIndex","unsubscribe","onMounted","onSearchResultStateChange","state","onUnmounted","_openBlock","openBlock","_createElementBlock","$attrs","_Fragment","idx","createElementBlock","key","rects","rect","rectIdx","style","_normalizeStyle","top","origin","y","scale","left","x","width","size","height","activeResultIndex","activeHighlightColor","highlightColor","searchState","initialState","onStateChange","usePlugin"],"mappings":"4KAKaA,EAAsB,IAAMC,gBAA4BC,EAAAA,aAAaC,kKCkClF,MAAMC,EAAQC,GAKNC,SAAUC,GAAmBP,IAC/BQ,EAAoBC,MAA8B,MAGlDC,EAAcC,EAAAA,UAAS,IACtBH,EAAkBI,MAEhBJ,EAAkBI,MAAMC,QAC5BC,KAAI,CAACC,EAAQC,KAAA,CAAqBD,SAAQC,oBAC1CC,QAAO,EAAGF,YAAaA,EAAOG,YAAcd,EAAMc,YAJhB,KAOnC,IAAAC,SAEJC,EAAAA,WAAU,KACHb,EAAeK,QAEpBO,EAAcZ,EAAeK,MAAMS,2BAA2BC,IAC5Dd,EAAkBI,MAAQU,CAAA,IAC3B,IAGHC,EAAAA,aAAY,KACI,MAAAJ,GAAAA,GAAA,WAlEHX,EAAiBI,OAA5BY,EAAAC,YAAAC,EAAAA,mBAuBM,4CAvBgCC,EAAMA,SAAA,EAC1CH,EAAAA,WAAA,GAAAE,qBAqBME,EAAAA,2BArB0ClB,EAAWE,OAAA,EAA5CG,SAAQC,iBAAiBa,mBAAxCH,EAAAI,mBAqBM,MAAA,CArBwDC,cAAeF,OAC3EL,EAAAA,WAAA,GAAAE,EAmBEI,mBAAAF,6BAlB0Bb,EAAOiB,OAAzB,CAAAC,EAAMC,mBADhBR,EAAAI,mBAmBE,MAAA,CAjBCC,IAAG,QAAUF,KAAOK,IACpBC,MAAKC,EAAAA,eAAA,qBAAsDC,IAAAJ,EAAKK,OAAOC,EAAIC,EAAKA,MAArB,KAA8CC,KAAAR,EAAKK,OAAOI,EAAIF,EAAKA,MAArB,KAA+CG,MAAAV,EAAKW,KAAKD,MAAQH,EAAKA,MAAvB,KAAkDK,OAAAZ,EAAKW,KAAKC,OAASL,EAAKA,MAAxB,qBAAqExB,IAAkBR,EAAiBI,MAACkC,kBAAkCC,EAAoBA,qBAAiBC,EAAcA,mPDCxX,KACjB,MAAA1C,SAAEA,GAAaN,IACfiD,EAAcxC,MAAiByC,gBAc9B,OAZP9B,EAAAA,WAAU,KACJ,IAACd,EAASM,MAAO,OAErB,MAAMO,EAAcb,EAASM,MAAMuC,eAAe7B,IAChD2B,EAAYrC,MAAQU,CAAA,IAGtBC,EAAAA,aAAY,KACEJ,GAAA,GACb,IAGI,CACLG,MAAO2B,EACP3C,WACF,wDAtB6B,IAAM8C,YAAwBlD,EAAAA,aAAaC"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-search.ts","../../src/vue/components/search-layer.vue"],"sourcesContent":["import { ref, watch, computed, toValue, type MaybeRefOrGetter, Ref, ComputedRef } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport {\n SearchPlugin,\n SearchDocumentState,\n SearchScope,\n initialSearchDocumentState,\n} from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\n/**\n * Hook for search state for a specific document\n * @param documentId Document ID (can be ref, computed, getter, or plain value)\n */\nexport const useSearch = (\n documentId: MaybeRefOrGetter<string>,\n): {\n state: Ref<SearchDocumentState>;\n provides: ComputedRef<SearchScope | null>;\n} => {\n const { provides } = useSearchCapability();\n const searchState = ref<SearchDocumentState>(initialSearchDocumentState);\n\n watch(\n [provides, () => toValue(documentId)],\n ([providesValue, docId], _, onCleanup) => {\n if (!providesValue) {\n searchState.value = initialSearchDocumentState;\n return;\n }\n\n const scope = providesValue.forDocument(docId);\n\n // Set initial state\n searchState.value = scope.getState();\n\n // Subscribe to changes\n const unsubscribe = scope.onStateChange((state) => {\n searchState.value = state;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n );\n\n const scopedProvides = computed(() => {\n const docId = toValue(documentId);\n return provides.value?.forDocument(docId) ?? null;\n });\n\n return {\n state: searchState,\n provides: scopedProvides,\n };\n};\n","<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport type { SearchResultState } from '@embedpdf/plugin-search';\nimport { useSearchCapability } from '../hooks/use-search';\n\ninterface SearchLayerProps {\n documentId: string;\n pageIndex: number;\n scale?: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n}\n\nconst props = withDefaults(defineProps<SearchLayerProps>(), {\n highlightColor: '#FFFF00',\n activeHighlightColor: '#FFBF00',\n});\n\nconst { provides: searchProvides } = useSearchCapability();\nconst documentState = useDocumentState(() => props.documentId);\nconst searchResultState = ref<SearchResultState | null>(null);\n\nconst scope = computed(() => searchProvides.value?.forDocument(props.documentId) ?? null);\n\nconst actualScale = computed(() => {\n if (props.scale !== undefined) return props.scale;\n return documentState.value?.scale ?? 1;\n});\n\nwatch(\n scope,\n (scopeValue, _, onCleanup) => {\n if (!scopeValue) {\n searchResultState.value = null;\n return;\n }\n\n // Set initial state\n const currentState = scopeValue.getState();\n searchResultState.value = {\n results: currentState.results,\n activeResultIndex: currentState.activeResultIndex,\n showAllResults: currentState.showAllResults,\n active: currentState.active,\n };\n\n // Subscribe to changes\n const unsubscribe = scopeValue.onSearchResultStateChange((state) => {\n searchResultState.value = state;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n);\n\n// Filter results for current page while preserving original indices\nconst pageResults = computed(() => {\n if (!searchResultState.value) return [];\n\n return searchResultState.value.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === props.pageIndex);\n});\n\n// Decide which results to show\nconst resultsToShow = computed(() => {\n if (!searchResultState.value) return [];\n\n return pageResults.value.filter(\n ({ originalIndex }) =>\n searchResultState.value!.showAllResults ||\n originalIndex === searchResultState.value!.activeResultIndex,\n );\n});\n</script>\n\n<template>\n <div\n v-if=\"searchResultState && searchResultState.active\"\n :style=\"{\n pointerEvents: 'none',\n }\"\n v-bind=\"$attrs\"\n >\n <template v-for=\"({ result, originalIndex }, idx) in resultsToShow\" :key=\"`result-${idx}`\">\n <div\n v-for=\"(rect, rectIdx) in result.rects\"\n :key=\"`rect-${idx}-${rectIdx}`\"\n :style=\"{\n position: 'absolute',\n top: `${rect.origin.y * actualScale}px`,\n left: `${rect.origin.x * actualScale}px`,\n width: `${rect.size.width * actualScale}px`,\n height: `${rect.size.height * actualScale}px`,\n backgroundColor:\n originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor,\n mixBlendMode: 'multiply',\n transform: 'scale(1.02)',\n transformOrigin: 'center',\n transition: 'opacity .3s ease-in-out',\n opacity: 1,\n }\"\n />\n </template>\n </div>\n</template>\n"],"names":["useSearchCapability","useCapability","SearchPlugin","id","props","__props","provides","searchProvides","documentState","useDocumentState","documentId","searchResultState","ref","scope","computed","_a","value","forDocument","actualScale","scale","watch","scopeValue","_","onCleanup","currentState","getState","results","activeResultIndex","showAllResults","active","onSearchResultStateChange","state","immediate","pageResults","map","result","originalIndex","filter","pageIndex","resultsToShow","_openBlock","_createElementBlock","_mergeProps","style","$attrs","_Fragment","idx","rects","rect","rectIdx","key","_normalizeStyle","top","origin","y","left","x","width","size","height","activeHighlightColor","highlightColor","searchState","initialSearchDocumentState","toValue","providesValue","docId","onStateChange","scopedProvides","usePlugin"],"mappings":"4KAUaA,EAAsB,IAAMC,gBAA4BC,EAAAA,aAAaC,gLCIlF,MAAMC,EAAQC,GAKNC,SAAUC,GAAmBP,IAC/BQ,EAAgBC,EAAAA,iBAAiB,IAAML,EAAMM,YAC7CC,EAAoBC,EAAAA,IAA8B,MAElDC,EAAQC,WAAS,WAAM,OAAA,OAAAC,EAAAR,EAAeS,YAAf,EAAAD,EAAsBE,YAAYb,EAAMM,cAAe,OAE9EQ,EAAcJ,EAAAA,SAAS,WAC3B,YAAoB,IAAhBV,EAAMe,MAA4Bf,EAAMe,OACrC,OAAAJ,EAAAP,EAAcQ,YAAd,EAAAD,EAAqBI,QAAS,IAGvCC,EAAAA,MACEP,EACA,CAACQ,EAAYC,EAAGC,KACd,IAAKF,EAEH,YADAV,EAAkBK,MAAQ,MAK5B,MAAMQ,EAAeH,EAAWI,WAChCd,EAAkBK,MAAQ,CACxBU,QAASF,EAAaE,QACtBC,kBAAmBH,EAAaG,kBAChCC,eAAgBJ,EAAaI,eAC7BC,OAAQL,EAAaK,QAQvBN,EAJoBF,EAAWS,0BAA2BC,IACxDpB,EAAkBK,MAAQe,MAK9B,CAAEC,WAAW,IAIf,MAAMC,EAAcnB,EAAAA,SAAS,IACtBH,EAAkBK,MAEhBL,EAAkBK,MAAMU,QAC5BQ,IAAI,CAACC,EAAQC,KAAA,CAAqBD,SAAQC,mBAC1CC,OAAO,EAAGF,YAAaA,EAAOG,YAAclC,EAAMkC,WAJhB,IAQjCC,EAAgBzB,EAAAA,SAAS,IACxBH,EAAkBK,MAEhBiB,EAAYjB,MAAMqB,OACvB,EAAGD,mBACDzB,EAAkBK,MAAOY,gBACzBQ,IAAkBzB,EAAkBK,MAAOW,mBALV,iBAY7BhB,EAAAK,OAAqBL,EAAAK,MAAkBa,QAD/CW,EAAAA,YAAAC,EAAAA,mBA6BM,MA7BNC,aA6BM,OA3BHC,MAAO,wBAGAC,EAAAA,QAAM,EAEdJ,EAAAA,WAAA,GAAAC,qBAqBWI,EAAAA,2BArB0CN,EAAAvB,MAAa,EAA9CmB,SAAQC,iBAAiBU,kEAAuCA,OAClFN,EAAAA,WAAA,GAAAC,EAAAA,mBAmBEI,6BAlB0BV,EAAOY,MAAK,CAA9BC,EAAMC,mBADhBR,EAAAA,mBAmBE,MAAA,CAjBCS,IAAG,QAAUJ,KAAOG,IACpBN,MAAKQ,EAAAA,eAAA,qBAAsDC,IAAAJ,EAAKK,OAAOC,EAAIpC,EAAAF,MAAhB,KAAoDuC,KAAAP,EAAKK,OAAOG,EAAItC,EAAAF,MAAhB,KAAqDyC,MAAAT,EAAKU,KAAKD,MAAQvC,EAAAF,MAAlB,KAAwD2C,OAAAX,EAAKU,KAAKC,OAASzC,EAAAF,MAAnB,qBAA2EoB,IAAkBzB,EAAAK,MAAkBW,kBAAkCtB,EAAAuD,qBAAqCvD,EAAAwD,oPDzEzZnD,IAKA,MAAMJ,SAAEA,GAAaN,IACf8D,EAAclD,EAAAA,IAAyBmD,8BAE7C3C,EAAAA,MACE,CAACd,EAAU,IAAM0D,UAAQtD,IACzB,EAAEuD,EAAeC,GAAQ5C,EAAGC,KAC1B,IAAK0C,EAEH,YADAH,EAAY9C,MAAQ+C,EAAAA,4BAItB,MAAMlD,EAAQoD,EAAchD,YAAYiD,GAGxCJ,EAAY9C,MAAQH,EAAMY,WAO1BF,EAJoBV,EAAMsD,cAAepC,IACvC+B,EAAY9C,MAAQe,MAKxB,CAAEC,WAAW,IAGf,MAAMoC,EAAiBtD,EAAAA,SAAS,WAC9B,MAAMoD,EAAQF,EAAAA,QAAQtD,GACtB,OAAO,OAAAK,EAAAT,EAASU,YAAT,EAAAD,EAAgBE,YAAYiD,KAAU,OAG/C,MAAO,CACLnC,MAAO+B,EACPxD,SAAU8D,0DA9CiB,IAAMC,YAAwBnE,EAAAA,aAAaC"}
package/dist/vue/index.js CHANGED
@@ -1,29 +1,42 @@
1
- import { ref, onMounted, onUnmounted, defineComponent, computed, createElementBlock, createCommentVNode, openBlock, normalizeProps, mergeProps, Fragment, renderList, normalizeStyle } from "vue";
2
- import { usePlugin, useCapability } from "@embedpdf/core/vue";
3
- import { SearchPlugin, initialState } from "@embedpdf/plugin-search";
1
+ import { ref, watch, toValue, computed, defineComponent, createElementBlock, createCommentVNode, openBlock, mergeProps, Fragment, renderList, normalizeStyle } from "vue";
2
+ import { usePlugin, useCapability, useDocumentState } from "@embedpdf/core/vue";
3
+ import { SearchPlugin, initialSearchDocumentState } from "@embedpdf/plugin-search";
4
4
  export * from "@embedpdf/plugin-search";
5
5
  const useSearchPlugin = () => usePlugin(SearchPlugin.id);
6
6
  const useSearchCapability = () => useCapability(SearchPlugin.id);
7
- const useSearch = () => {
7
+ const useSearch = (documentId) => {
8
8
  const { provides } = useSearchCapability();
9
- const searchState = ref(initialState);
10
- onMounted(() => {
11
- if (!provides.value) return;
12
- const unsubscribe = provides.value.onStateChange((state) => {
13
- searchState.value = state;
14
- });
15
- onUnmounted(() => {
16
- unsubscribe();
17
- });
9
+ const searchState = ref(initialSearchDocumentState);
10
+ watch(
11
+ [provides, () => toValue(documentId)],
12
+ ([providesValue, docId], _, onCleanup) => {
13
+ if (!providesValue) {
14
+ searchState.value = initialSearchDocumentState;
15
+ return;
16
+ }
17
+ const scope = providesValue.forDocument(docId);
18
+ searchState.value = scope.getState();
19
+ const unsubscribe = scope.onStateChange((state) => {
20
+ searchState.value = state;
21
+ });
22
+ onCleanup(unsubscribe);
23
+ },
24
+ { immediate: true }
25
+ );
26
+ const scopedProvides = computed(() => {
27
+ var _a;
28
+ const docId = toValue(documentId);
29
+ return ((_a = provides.value) == null ? void 0 : _a.forDocument(docId)) ?? null;
18
30
  });
19
31
  return {
20
32
  state: searchState,
21
- provides
33
+ provides: scopedProvides
22
34
  };
23
35
  };
24
36
  const _sfc_main = /* @__PURE__ */ defineComponent({
25
37
  __name: "search-layer",
26
38
  props: {
39
+ documentId: {},
27
40
  pageIndex: {},
28
41
  scale: {},
29
42
  highlightColor: { default: "#FFFF00" },
@@ -32,25 +45,57 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
32
45
  setup(__props) {
33
46
  const props = __props;
34
47
  const { provides: searchProvides } = useSearchCapability();
48
+ const documentState = useDocumentState(() => props.documentId);
35
49
  const searchResultState = ref(null);
50
+ const scope = computed(() => {
51
+ var _a;
52
+ return ((_a = searchProvides.value) == null ? void 0 : _a.forDocument(props.documentId)) ?? null;
53
+ });
54
+ const actualScale = computed(() => {
55
+ var _a;
56
+ if (props.scale !== void 0) return props.scale;
57
+ return ((_a = documentState.value) == null ? void 0 : _a.scale) ?? 1;
58
+ });
59
+ watch(
60
+ scope,
61
+ (scopeValue, _, onCleanup) => {
62
+ if (!scopeValue) {
63
+ searchResultState.value = null;
64
+ return;
65
+ }
66
+ const currentState = scopeValue.getState();
67
+ searchResultState.value = {
68
+ results: currentState.results,
69
+ activeResultIndex: currentState.activeResultIndex,
70
+ showAllResults: currentState.showAllResults,
71
+ active: currentState.active
72
+ };
73
+ const unsubscribe = scopeValue.onSearchResultStateChange((state) => {
74
+ searchResultState.value = state;
75
+ });
76
+ onCleanup(unsubscribe);
77
+ },
78
+ { immediate: true }
79
+ );
36
80
  const pageResults = computed(() => {
37
81
  if (!searchResultState.value) return [];
38
82
  return searchResultState.value.results.map((result, originalIndex) => ({ result, originalIndex })).filter(({ result }) => result.pageIndex === props.pageIndex);
39
83
  });
40
- let unsubscribe;
41
- onMounted(() => {
42
- if (!searchProvides.value) return;
43
- unsubscribe = searchProvides.value.onSearchResultStateChange((state) => {
44
- searchResultState.value = state;
45
- });
46
- });
47
- onUnmounted(() => {
48
- unsubscribe == null ? void 0 : unsubscribe();
84
+ const resultsToShow = computed(() => {
85
+ if (!searchResultState.value) return [];
86
+ return pageResults.value.filter(
87
+ ({ originalIndex }) => searchResultState.value.showAllResults || originalIndex === searchResultState.value.activeResultIndex
88
+ );
49
89
  });
50
90
  return (_ctx, _cache) => {
51
- return searchResultState.value ? (openBlock(), createElementBlock("div", normalizeProps(mergeProps({ key: 0 }, _ctx.$attrs)), [
52
- (openBlock(true), createElementBlock(Fragment, null, renderList(pageResults.value, ({ result, originalIndex }, idx) => {
53
- return openBlock(), createElementBlock("div", {
91
+ return searchResultState.value && searchResultState.value.active ? (openBlock(), createElementBlock("div", mergeProps({
92
+ key: 0,
93
+ style: {
94
+ pointerEvents: "none"
95
+ }
96
+ }, _ctx.$attrs), [
97
+ (openBlock(true), createElementBlock(Fragment, null, renderList(resultsToShow.value, ({ result, originalIndex }, idx) => {
98
+ return openBlock(), createElementBlock(Fragment, {
54
99
  key: `result-${idx}`
55
100
  }, [
56
101
  (openBlock(true), createElementBlock(Fragment, null, renderList(result.rects, (rect, rectIdx) => {
@@ -58,11 +103,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
103
  key: `rect-${idx}-${rectIdx}`,
59
104
  style: normalizeStyle({
60
105
  position: "absolute",
61
- top: `${rect.origin.y * _ctx.scale}px`,
62
- left: `${rect.origin.x * _ctx.scale}px`,
63
- width: `${rect.size.width * _ctx.scale}px`,
64
- height: `${rect.size.height * _ctx.scale}px`,
65
- backgroundColor: originalIndex === searchResultState.value.activeResultIndex ? _ctx.activeHighlightColor : _ctx.highlightColor,
106
+ top: `${rect.origin.y * actualScale.value}px`,
107
+ left: `${rect.origin.x * actualScale.value}px`,
108
+ width: `${rect.size.width * actualScale.value}px`,
109
+ height: `${rect.size.height * actualScale.value}px`,
110
+ backgroundColor: originalIndex === searchResultState.value.activeResultIndex ? __props.activeHighlightColor : __props.highlightColor,
66
111
  mixBlendMode: "multiply",
67
112
  transform: "scale(1.02)",
68
113
  transformOrigin: "center",
@@ -71,7 +116,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
71
116
  })
72
117
  }, null, 4);
73
118
  }), 128))
74
- ]);
119
+ ], 64);
75
120
  }), 128))
76
121
  ], 16)) : createCommentVNode("", true);
77
122
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-search.ts","../../src/vue/components/search-layer.vue"],"sourcesContent":["import { ref, onMounted, onUnmounted } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { initialState, SearchPlugin, SearchState } from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\nexport const useSearch = () => {\n const { provides } = useSearchCapability();\n const searchState = ref<SearchState>(initialState);\n\n onMounted(() => {\n if (!provides.value) return;\n\n const unsubscribe = provides.value.onStateChange((state) => {\n searchState.value = state;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n });\n\n return {\n state: searchState,\n provides,\n };\n};\n","<template>\n <div v-if=\"searchResultState\" v-bind=\"$attrs\">\n <div v-for=\"({ result, originalIndex }, idx) in pageResults\" :key=\"`result-${idx}`\">\n <div\n v-for=\"(rect, rectIdx) in result.rects\"\n :key=\"`rect-${idx}-${rectIdx}`\"\n :style=\"{\n position: 'absolute',\n top: `${rect.origin.y * scale}px`,\n left: `${rect.origin.x * scale}px`,\n width: `${rect.size.width * scale}px`,\n height: `${rect.size.height * scale}px`,\n backgroundColor:\n originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor,\n mixBlendMode: 'multiply',\n transform: 'scale(1.02)',\n transformOrigin: 'center',\n transition: 'opacity .3s ease-in-out',\n opacity: 1,\n }\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\nimport type { SearchResultState } from '@embedpdf/plugin-search';\nimport { useSearchCapability } from '../hooks/use-search';\n\ninterface SearchLayerProps {\n pageIndex: number;\n scale: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n}\n\nconst props = withDefaults(defineProps<SearchLayerProps>(), {\n highlightColor: '#FFFF00',\n activeHighlightColor: '#FFBF00',\n});\n\nconst { provides: searchProvides } = useSearchCapability();\nconst searchResultState = ref<SearchResultState | null>(null);\n\n// Filter results for current page while preserving original indices\nconst pageResults = computed(() => {\n if (!searchResultState.value) return [];\n\n return searchResultState.value.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === props.pageIndex);\n});\n\nlet unsubscribe: (() => void) | undefined;\n\nonMounted(() => {\n if (!searchProvides.value) return;\n\n unsubscribe = searchProvides.value.onSearchResultStateChange((state) => {\n searchResultState.value = state;\n });\n});\n\nonUnmounted(() => {\n unsubscribe?.();\n});\n</script>\n"],"names":["_openBlock","_createElementBlock","$attrs","_Fragment","_normalizeStyle","scale","activeHighlightColor","highlightColor"],"mappings":";;;;AAIO,MAAM,kBAAkB,MAAM,UAAwB,aAAa,EAAE;AACrE,MAAM,sBAAsB,MAAM,cAA4B,aAAa,EAAE;AAE7E,MAAM,YAAY,MAAM;AACvB,QAAA,EAAE,SAAS,IAAI,oBAAoB;AACnC,QAAA,cAAc,IAAiB,YAAY;AAEjD,YAAU,MAAM;AACV,QAAA,CAAC,SAAS,MAAO;AAErB,UAAM,cAAc,SAAS,MAAM,cAAc,CAAC,UAAU;AAC1D,kBAAY,QAAQ;AAAA,IAAA,CACrB;AAED,gBAAY,MAAM;AACJ,kBAAA;AAAA,IAAA,CACb;AAAA,EAAA,CACF;AAEM,SAAA;AAAA,IACL,OAAO;AAAA,IACP;AAAA,EACF;AACF;;;;;;;;;;ACYA,UAAM,QAAQ;AAKd,UAAM,EAAE,UAAU,eAAe,IAAI,oBAAoB;AACnD,UAAA,oBAAoB,IAA8B,IAAI;AAGtD,UAAA,cAAc,SAAS,MAAM;AACjC,UAAI,CAAC,kBAAkB,MAAO,QAAO,CAAC;AAE/B,aAAA,kBAAkB,MAAM,QAC5B,IAAI,CAAC,QAAQ,mBAAmB,EAAE,QAAQ,gBAAgB,EAC1D,OAAO,CAAC,EAAE,OAAA,MAAa,OAAO,cAAc,MAAM,SAAS;AAAA,IAAA,CAC/D;AAEG,QAAA;AAEJ,cAAU,MAAM;AACV,UAAA,CAAC,eAAe,MAAO;AAE3B,oBAAc,eAAe,MAAM,0BAA0B,CAAC,UAAU;AACtE,0BAAkB,QAAQ;AAAA,MAAA,CAC3B;AAAA,IAAA,CACF;AAED,gBAAY,MAAM;AACF;AAAA,IAAA,CACf;;aAnEY,kBAAiB,SAA5BA,UAAA,GAAAC,mBAuBM,6CAvBgCC,KAAM,MAAA,CAAA,GAAA;AAAA,SAC1CF,UAAA,IAAA,GAAAC,mBAqBME,2BArB0C,YAAW,OAAA,CAAA,EAA5C,QAAQ,cAAA,GAAiB,QAAG;8BAA3CF,mBAqBM,OAAA;AAAA,YArBwD,eAAe,GAAG;AAAA,UAAA;aAC9ED,UAAA,IAAA,GAAAC,mBAmBEE,2BAlB0B,OAAO,OAAzB,CAAA,MAAM,YAAO;kCADvBF,mBAmBE,OAAA;AAAA,gBAjBC,KAAG,QAAU,GAAG,IAAI,OAAO;AAAA,gBAC3B,OAAKG,eAAA;AAAA;kBAAsD,KAAA,GAAA,KAAK,OAAO,IAAIC,KAAK,KAAA;AAAA,kBAAyB,MAAA,GAAA,KAAK,OAAO,IAAIA,KAAK,KAAA;AAAA,kBAA0B,OAAA,GAAA,KAAK,KAAK,QAAQA,KAAK,KAAA;AAAA,kBAA2B,QAAA,GAAA,KAAK,KAAK,SAASA,KAAK,KAAA;AAAA,mCAA6C,kBAAkB,kBAAiB,MAAC,oBAAkCC,KAAoB,uBAAiBC,KAAc;AAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-search.ts","../../src/vue/components/search-layer.vue"],"sourcesContent":["import { ref, watch, computed, toValue, type MaybeRefOrGetter, Ref, ComputedRef } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport {\n SearchPlugin,\n SearchDocumentState,\n SearchScope,\n initialSearchDocumentState,\n} from '@embedpdf/plugin-search';\n\nexport const useSearchPlugin = () => usePlugin<SearchPlugin>(SearchPlugin.id);\nexport const useSearchCapability = () => useCapability<SearchPlugin>(SearchPlugin.id);\n\n/**\n * Hook for search state for a specific document\n * @param documentId Document ID (can be ref, computed, getter, or plain value)\n */\nexport const useSearch = (\n documentId: MaybeRefOrGetter<string>,\n): {\n state: Ref<SearchDocumentState>;\n provides: ComputedRef<SearchScope | null>;\n} => {\n const { provides } = useSearchCapability();\n const searchState = ref<SearchDocumentState>(initialSearchDocumentState);\n\n watch(\n [provides, () => toValue(documentId)],\n ([providesValue, docId], _, onCleanup) => {\n if (!providesValue) {\n searchState.value = initialSearchDocumentState;\n return;\n }\n\n const scope = providesValue.forDocument(docId);\n\n // Set initial state\n searchState.value = scope.getState();\n\n // Subscribe to changes\n const unsubscribe = scope.onStateChange((state) => {\n searchState.value = state;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n );\n\n const scopedProvides = computed(() => {\n const docId = toValue(documentId);\n return provides.value?.forDocument(docId) ?? null;\n });\n\n return {\n state: searchState,\n provides: scopedProvides,\n };\n};\n","<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport { useDocumentState } from '@embedpdf/core/vue';\nimport type { SearchResultState } from '@embedpdf/plugin-search';\nimport { useSearchCapability } from '../hooks/use-search';\n\ninterface SearchLayerProps {\n documentId: string;\n pageIndex: number;\n scale?: number;\n highlightColor?: string;\n activeHighlightColor?: string;\n}\n\nconst props = withDefaults(defineProps<SearchLayerProps>(), {\n highlightColor: '#FFFF00',\n activeHighlightColor: '#FFBF00',\n});\n\nconst { provides: searchProvides } = useSearchCapability();\nconst documentState = useDocumentState(() => props.documentId);\nconst searchResultState = ref<SearchResultState | null>(null);\n\nconst scope = computed(() => searchProvides.value?.forDocument(props.documentId) ?? null);\n\nconst actualScale = computed(() => {\n if (props.scale !== undefined) return props.scale;\n return documentState.value?.scale ?? 1;\n});\n\nwatch(\n scope,\n (scopeValue, _, onCleanup) => {\n if (!scopeValue) {\n searchResultState.value = null;\n return;\n }\n\n // Set initial state\n const currentState = scopeValue.getState();\n searchResultState.value = {\n results: currentState.results,\n activeResultIndex: currentState.activeResultIndex,\n showAllResults: currentState.showAllResults,\n active: currentState.active,\n };\n\n // Subscribe to changes\n const unsubscribe = scopeValue.onSearchResultStateChange((state) => {\n searchResultState.value = state;\n });\n\n onCleanup(unsubscribe);\n },\n { immediate: true },\n);\n\n// Filter results for current page while preserving original indices\nconst pageResults = computed(() => {\n if (!searchResultState.value) return [];\n\n return searchResultState.value.results\n .map((result, originalIndex) => ({ result, originalIndex }))\n .filter(({ result }) => result.pageIndex === props.pageIndex);\n});\n\n// Decide which results to show\nconst resultsToShow = computed(() => {\n if (!searchResultState.value) return [];\n\n return pageResults.value.filter(\n ({ originalIndex }) =>\n searchResultState.value!.showAllResults ||\n originalIndex === searchResultState.value!.activeResultIndex,\n );\n});\n</script>\n\n<template>\n <div\n v-if=\"searchResultState && searchResultState.active\"\n :style=\"{\n pointerEvents: 'none',\n }\"\n v-bind=\"$attrs\"\n >\n <template v-for=\"({ result, originalIndex }, idx) in resultsToShow\" :key=\"`result-${idx}`\">\n <div\n v-for=\"(rect, rectIdx) in result.rects\"\n :key=\"`rect-${idx}-${rectIdx}`\"\n :style=\"{\n position: 'absolute',\n top: `${rect.origin.y * actualScale}px`,\n left: `${rect.origin.x * actualScale}px`,\n width: `${rect.size.width * actualScale}px`,\n height: `${rect.size.height * actualScale}px`,\n backgroundColor:\n originalIndex === searchResultState.activeResultIndex\n ? activeHighlightColor\n : highlightColor,\n mixBlendMode: 'multiply',\n transform: 'scale(1.02)',\n transformOrigin: 'center',\n transition: 'opacity .3s ease-in-out',\n opacity: 1,\n }\"\n />\n </template>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_mergeProps","$attrs","_Fragment","_normalizeStyle"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/plugin-search",
3
- "version": "1.5.0",
3
+ "version": "2.0.0-next.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.cjs",
@@ -34,14 +34,13 @@
34
34
  }
35
35
  },
36
36
  "dependencies": {
37
- "@embedpdf/models": "1.5.0"
37
+ "@embedpdf/models": "2.0.0-next.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/react": "^18.2.0",
41
41
  "typescript": "^5.0.0",
42
42
  "@embedpdf/build": "1.1.0",
43
- "@embedpdf/core": "1.5.0",
44
- "@embedpdf/plugin-loader": "1.5.0"
43
+ "@embedpdf/core": "2.0.0-next.1"
45
44
  },
46
45
  "peerDependencies": {
47
46
  "react": ">=16.8.0",
@@ -49,8 +48,7 @@
49
48
  "preact": "^10.26.4",
50
49
  "vue": ">=3.2.0",
51
50
  "svelte": ">=5 <6",
52
- "@embedpdf/core": "1.5.0",
53
- "@embedpdf/plugin-loader": "1.5.0"
51
+ "@embedpdf/core": "2.0.0-next.1"
54
52
  },
55
53
  "files": [
56
54
  "dist",