@embedpdf/plugin-capture 1.5.0 → 2.0.0-next.0

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 (36) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +215 -35
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/actions.d.ts +33 -0
  6. package/dist/lib/capture-plugin.d.ts +12 -3
  7. package/dist/lib/index.d.ts +5 -2
  8. package/dist/lib/reducer.d.ts +6 -0
  9. package/dist/lib/types.d.ts +27 -2
  10. package/dist/preact/index.cjs +1 -1
  11. package/dist/preact/index.cjs.map +1 -1
  12. package/dist/preact/index.js +25 -16
  13. package/dist/preact/index.js.map +1 -1
  14. package/dist/react/index.cjs +1 -1
  15. package/dist/react/index.cjs.map +1 -1
  16. package/dist/react/index.js +25 -16
  17. package/dist/react/index.js.map +1 -1
  18. package/dist/shared/components/marquee-capture.d.ts +4 -2
  19. package/dist/shared/hooks/use-capture.d.ts +8 -4
  20. package/dist/shared-preact/components/marquee-capture.d.ts +4 -2
  21. package/dist/shared-preact/hooks/use-capture.d.ts +8 -4
  22. package/dist/shared-react/components/marquee-capture.d.ts +4 -2
  23. package/dist/shared-react/hooks/use-capture.d.ts +8 -4
  24. package/dist/svelte/components/MarqueeCapture.svelte.d.ts +3 -1
  25. package/dist/svelte/hooks/use-capture.svelte.d.ts +11 -5
  26. package/dist/svelte/index.cjs +1 -1
  27. package/dist/svelte/index.cjs.map +1 -1
  28. package/dist/svelte/index.js +54 -35
  29. package/dist/svelte/index.js.map +1 -1
  30. package/dist/vue/components/marquee-capture.vue.d.ts +5 -2
  31. package/dist/vue/hooks/use-capture.d.ts +13 -4
  32. package/dist/vue/index.cjs +1 -1
  33. package/dist/vue/index.cjs.map +1 -1
  34. package/dist/vue/index.js +53 -34
  35. package/dist/vue/index.js.map +1 -1
  36. package/package.json +9 -9
@@ -1,18 +1,27 @@
1
1
  import { BasePlugin, PluginRegistry } from '@embedpdf/core';
2
- import { CaptureCapability, CapturePluginConfig, RegisterMarqueeOnPageOptions } from './types';
3
- export declare class CapturePlugin extends BasePlugin<CapturePluginConfig, CaptureCapability> {
2
+ import { CaptureCapability, CapturePluginConfig, RegisterMarqueeOnPageOptions, CaptureState } from './types';
3
+ import { CaptureAction } from './actions';
4
+ export declare class CapturePlugin extends BasePlugin<CapturePluginConfig, CaptureCapability, CaptureState, CaptureAction> {
4
5
  static readonly id: "capture";
5
6
  private captureArea$;
6
- private marqueeCaptureActive$;
7
+ private state$;
7
8
  private renderCapability;
8
9
  private interactionManagerCapability;
9
10
  private config;
10
11
  constructor(id: string, registry: PluginRegistry, config: CapturePluginConfig);
12
+ protected onDocumentLoadingStarted(documentId: string): void;
13
+ protected onDocumentClosed(documentId: string): void;
11
14
  initialize(_: CapturePluginConfig): Promise<void>;
12
15
  protected buildCapability(): CaptureCapability;
16
+ private createCaptureScope;
17
+ private getDocumentState;
18
+ private getDocumentStateOrThrow;
13
19
  registerMarqueeOnPage(opts: RegisterMarqueeOnPageOptions): () => void;
14
20
  private captureArea;
15
21
  private enableMarqueeCapture;
16
22
  private disableMarqueeCapture;
17
23
  private toggleMarqueeCapture;
24
+ private isMarqueeCaptureActive;
25
+ onStoreUpdated(prevState: CaptureState, newState: CaptureState): void;
26
+ destroy(): Promise<void>;
18
27
  }
@@ -1,7 +1,10 @@
1
1
  import { PluginPackage } from '@embedpdf/core';
2
- import { CapturePluginConfig } from './types';
2
+ import { CapturePluginConfig, CaptureState } from './types';
3
3
  import { CapturePlugin } from './capture-plugin';
4
- export declare const CapturePluginPackage: PluginPackage<CapturePlugin, CapturePluginConfig>;
4
+ import { CaptureAction } from './actions';
5
+ export declare const CapturePluginPackage: PluginPackage<CapturePlugin, CapturePluginConfig, CaptureState, CaptureAction>;
5
6
  export * from './capture-plugin';
6
7
  export * from './types';
7
8
  export * from './manifest';
9
+ export * from './actions';
10
+ export * from './reducer';
@@ -0,0 +1,6 @@
1
+ import { Reducer } from '@embedpdf/core';
2
+ import { CaptureAction } from './actions';
3
+ import { CaptureState, CaptureDocumentState } from './types';
4
+ export declare const initialDocumentState: CaptureDocumentState;
5
+ export declare const initialState: CaptureState;
6
+ export declare const captureReducer: Reducer<CaptureState, CaptureAction>;
@@ -6,6 +6,7 @@ export interface CapturePluginConfig extends BasePluginConfig {
6
6
  withAnnotations?: boolean;
7
7
  }
8
8
  export interface CaptureAreaEvent {
9
+ documentId: string;
9
10
  pageIndex: number;
10
11
  rect: Rect;
11
12
  blob: Blob;
@@ -13,22 +14,46 @@ export interface CaptureAreaEvent {
13
14
  scale: number;
14
15
  withAnnotations: boolean;
15
16
  }
17
+ export interface StateChangeEvent {
18
+ documentId: string;
19
+ state: CaptureDocumentState;
20
+ }
16
21
  export interface MarqueeCaptureCallback {
17
22
  onPreview?: (rect: Rect | null) => void;
18
23
  onCommit?: (rect: Rect) => void;
19
24
  }
20
25
  export interface RegisterMarqueeOnPageOptions {
26
+ documentId: string;
21
27
  pageIndex: number;
22
28
  scale: number;
23
29
  callback: MarqueeCaptureCallback;
24
30
  }
25
- export interface CaptureCapability {
31
+ export interface CaptureDocumentState {
32
+ isMarqueeCaptureActive: boolean;
33
+ }
34
+ export interface CaptureScope {
35
+ captureArea(pageIndex: number, rect: Rect): void;
36
+ enableMarqueeCapture(): void;
37
+ disableMarqueeCapture(): void;
38
+ toggleMarqueeCapture(): void;
39
+ isMarqueeCaptureActive(): boolean;
40
+ getState(): CaptureDocumentState;
26
41
  onCaptureArea: EventHook<CaptureAreaEvent>;
27
- onMarqueeCaptureActiveChange: EventHook<boolean>;
42
+ onStateChange: EventHook<CaptureDocumentState>;
43
+ }
44
+ export interface CaptureCapability {
28
45
  captureArea(pageIndex: number, rect: Rect): void;
29
46
  enableMarqueeCapture: () => void;
30
47
  disableMarqueeCapture: () => void;
31
48
  toggleMarqueeCapture: () => void;
32
49
  isMarqueeCaptureActive: () => boolean;
50
+ getState(): CaptureDocumentState;
51
+ forDocument(documentId: string): CaptureScope;
33
52
  registerMarqueeOnPage: (opts: RegisterMarqueeOnPageOptions) => () => void;
53
+ onCaptureArea: EventHook<CaptureAreaEvent>;
54
+ onStateChange: EventHook<StateChangeEvent>;
55
+ }
56
+ export interface CaptureState {
57
+ documents: Record<string, CaptureDocumentState>;
58
+ activeDocumentId: string | null;
34
59
  }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core/preact"),r=require("@embedpdf/plugin-capture"),t=require("preact/hooks"),i=require("preact/jsx-runtime"),a=()=>e.useCapability(r.CapturePlugin.id);exports.MarqueeCapture=({pageIndex:e,scale:r,className:s,stroke:u="rgba(33,150,243,0.8)",fill:o="rgba(33,150,243,0.15)"})=>{const{provides:p}=a(),[n,l]=t.useState(null);return t.useEffect((()=>{if(p)return p.registerMarqueeOnPage({pageIndex:e,scale:r,callback:{onPreview:l}})}),[p,e,r]),n?i.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:n.origin.x*r,top:n.origin.y*r,width:n.size.width*r,height:n.size.height*r,border:`1px solid ${u}`,background:o,boxSizing:"border-box"},className:s}):null},exports.useCapture=()=>{const{provides:e}=a(),[r,i]=t.useState(!1);return t.useEffect((()=>{if(e)return e.onMarqueeCaptureActiveChange((e=>{i(e)}))}),[e]),{provides:e,isMarqueeCaptureActive:r}},exports.useCaptureCapability=a,exports.useCapturePlugin=()=>e.usePlugin(r.CapturePlugin.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("@embedpdf/core/preact"),t=require("@embedpdf/plugin-capture"),r=require("preact/hooks"),o=require("preact/jsx-runtime"),u=()=>e.useCapability(t.CapturePlugin.id);exports.MarqueeCapture=({documentId:t,pageIndex:i,scale:s,className:a,stroke:n="rgba(33,150,243,0.8)",fill:l="rgba(33,150,243,0.15)"})=>{const{provides:p}=u(),c=e.useDocumentState(t),[d,g]=r.useState(null),b=r.useMemo(()=>void 0!==s?s:(null==c?void 0:c.scale)??1,[s,null==c?void 0:c.scale]);return r.useEffect(()=>{if(p)return p.registerMarqueeOnPage({documentId:t,pageIndex:i,scale:b,callback:{onPreview:g}})},[p,t,i,b]),d?o.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:d.origin.x*b,top:d.origin.y*b,width:d.size.width*b,height:d.size.height*b,border:`1px solid ${n}`,background:l,boxSizing:"border-box"},className:a}):null},exports.useCapture=e=>{const{provides:o}=u(),[i,s]=r.useState(t.initialDocumentState);return r.useEffect(()=>{if(!o)return;const t=o.forDocument(e);return s(t.getState()),t.onStateChange(e=>{s(e)})},[o,e]),{state:i,provides:(null==o?void 0:o.forDocument(e))??null}},exports.useCaptureCapability=u,exports.useCapturePlugin=()=>e.usePlugin(t.CapturePlugin.id),Object.keys(t).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { CapturePlugin } from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\nexport const useCapture = () => {\n const { provides } = useCaptureCapability();\n const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive) => {\n setIsMarqueeCaptureActive(isMarqueeCaptureActive);\n });\n }, [provides]);\n\n return {\n provides,\n isMarqueeCaptureActive,\n };\n};\n","import { useEffect, useState } from '@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const [rect, setRect] = useState<Rect | null>(null);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n pageIndex,\n scale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, pageIndex, scale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * scale,\n top: rect.origin.y * scale,\n width: rect.size.width * scale,\n height: rect.size.height * scale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["useCaptureCapability","useCapability","CapturePlugin","id","pageIndex","scale","className","stroke","fill","provides","capturePlugin","rect","setRect","useState","useEffect","registerMarqueeOnPage","callback","onPreview","jsxRuntime","jsx","style","position","pointerEvents","left","origin","x","top","y","width","size","height","border","background","boxSizing","isMarqueeCaptureActive","setIsMarqueeCaptureActive","onMarqueeCaptureActiveChange","usePlugin"],"mappings":"yNAIaA,EAAuB,IAAMC,gBAA6BC,EAAAA,cAAcC,2BCavD,EAC5BC,YACAC,QACAC,YACAC,SAAS,uBACTC,OAAO,4BAEP,MAAQC,SAAUC,GAAkBV,KAC7BW,EAAMC,GAAWC,EAAAA,SAAsB,MAa1C,OAXJC,EAAAA,WAAU,KACR,GAAKJ,EACL,OAAOA,EAAcK,sBAAsB,CACzCX,YACAC,QACAW,SAAU,CACRC,UAAWL,IAEd,GACA,CAACF,EAAeN,EAAWC,IAEzBM,EAGHO,EAAAC,IAAC,MAAA,CACCC,MAAO,CACLC,SAAU,WACVC,cAAe,OACfC,KAAMZ,EAAKa,OAAOC,EAAIpB,EACtBqB,IAAKf,EAAKa,OAAOG,EAAItB,EACrBuB,MAAOjB,EAAKkB,KAAKD,MAAQvB,EACzByB,OAAQnB,EAAKkB,KAAKC,OAASzB,EAC3B0B,OAAQ,aAAaxB,IACrByB,WAAYxB,EACZyB,UAAW,cAEb3B,cAfc,IAgBhB,qBD/CsB,KAClB,MAAAG,SAAEA,GAAaT,KACdkC,EAAwBC,GAA6BtB,EAAAA,UAAS,GAS9D,OAPPC,EAAAA,WAAU,KACR,GAAKL,EACE,OAAAA,EAAS2B,8BAA8BF,IAC5CC,EAA0BD,EAAsB,GACjD,GACA,CAACzB,IAEG,CACLA,WACAyB,yBACF,0DAhB8B,IAAMG,YAAyBnC,EAAAA,cAAcC"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport {\n CapturePlugin,\n CaptureDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\n/**\n * Hook for capture state for a specific document\n * @param documentId Document ID\n */\nexport const useCapture = (documentId: string) => {\n const { provides } = useCaptureCapability();\n const [state, setState] = useState<CaptureDocumentState>(initialDocumentState);\n\n useEffect(() => {\n if (!provides) return;\n\n const scope = provides.forDocument(documentId);\n\n // Get initial state\n setState(scope.getState());\n\n // Subscribe to state changes\n return scope.onStateChange((newState) => {\n setState(newState);\n });\n }, [provides, documentId]);\n\n return {\n state,\n provides: provides?.forDocument(documentId) ?? null,\n };\n};\n","import { useEffect, useMemo, useState } from '@framework';\nimport { useDocumentState } from '@embedpdf/core/@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Document ID */\n documentId: string;\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale?: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n documentId,\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const documentState = useDocumentState(documentId);\n const [rect, setRect] = useState<Rect | null>(null);\n\n const actualScale = useMemo(() => {\n if (scale !== undefined) return scale;\n return documentState?.scale ?? 1;\n }, [scale, documentState?.scale]);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n documentId,\n pageIndex,\n scale: actualScale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, documentId, pageIndex, actualScale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * actualScale,\n top: rect.origin.y * actualScale,\n width: rect.size.width * actualScale,\n height: rect.size.height * actualScale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["useCaptureCapability","useCapability","CapturePlugin","id","documentId","pageIndex","scale","className","stroke","fill","provides","capturePlugin","documentState","useDocumentState","rect","setRect","useState","actualScale","useMemo","useEffect","registerMarqueeOnPage","callback","onPreview","jsx","style","position","pointerEvents","left","origin","x","top","y","width","size","height","border","background","boxSizing","state","setState","initialDocumentState","scope","forDocument","getState","onStateChange","newState","usePlugin"],"mappings":"yNAQaA,EAAuB,IAAMC,gBAA6BC,EAAAA,cAAcC,2BCYvD,EAC5BC,aACAC,YACAC,QACAC,YACAC,SAAS,uBACTC,OAAO,4BAEP,MAAQC,SAAUC,GAAkBX,IAC9BY,EAAgBC,EAAAA,iBAAiBT,IAChCU,EAAMC,GAAWC,EAAAA,SAAsB,MAExCC,EAAcC,EAAAA,QAAQ,SACZ,IAAVZ,EAA4BA,SACzBM,WAAeN,QAAS,EAC9B,CAACA,EAAO,MAAAM,OAAA,EAAAA,EAAeN,QAc1B,OAZAa,EAAAA,UAAU,KACR,GAAKR,EACL,OAAOA,EAAcS,sBAAsB,CACzChB,aACAC,YACAC,MAAOW,EACPI,SAAU,CACRC,UAAWP,MAGd,CAACJ,EAAeP,EAAYC,EAAWY,IAErCH,EAGHS,EAAAA,IAAC,MAAA,CACCC,MAAO,CACLC,SAAU,WACVC,cAAe,OACfC,KAAMb,EAAKc,OAAOC,EAAIZ,EACtBa,IAAKhB,EAAKc,OAAOG,EAAId,EACrBe,MAAOlB,EAAKmB,KAAKD,MAAQf,EACzBiB,OAAQpB,EAAKmB,KAAKC,OAASjB,EAC3BkB,OAAQ,aAAa3B,IACrB4B,WAAY3B,EACZ4B,UAAW,cAEb9B,cAfc,yBDlCOH,IACzB,MAAMM,SAAEA,GAAaV,KACdsC,EAAOC,GAAYvB,EAAAA,SAA+BwB,EAAAA,sBAgBzD,OAdArB,EAAAA,UAAU,KACR,IAAKT,EAAU,OAEf,MAAM+B,EAAQ/B,EAASgC,YAAYtC,GAMnC,OAHAmC,EAASE,EAAME,YAGRF,EAAMG,cAAeC,IAC1BN,EAASM,MAEV,CAACnC,EAAUN,IAEP,CACLkC,QACA5B,UAAU,MAAAA,OAAA,EAAAA,EAAUgC,YAAYtC,KAAe,+DA1BnB,IAAM0C,YAAyB5C,EAAAA,cAAcC"}
@@ -1,25 +1,28 @@
1
- import { useCapability, usePlugin } from "@embedpdf/core/preact";
2
- import { CapturePlugin } from "@embedpdf/plugin-capture";
1
+ import { useCapability, usePlugin, useDocumentState } from "@embedpdf/core/preact";
2
+ import { CapturePlugin, initialDocumentState } from "@embedpdf/plugin-capture";
3
3
  export * from "@embedpdf/plugin-capture";
4
- import { useState, useEffect } from "preact/hooks";
4
+ import { useState, useEffect, useMemo } from "preact/hooks";
5
5
  import { jsx } from "preact/jsx-runtime";
6
6
  const useCaptureCapability = () => useCapability(CapturePlugin.id);
7
7
  const useCapturePlugin = () => usePlugin(CapturePlugin.id);
8
- const useCapture = () => {
8
+ const useCapture = (documentId) => {
9
9
  const { provides } = useCaptureCapability();
10
- const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);
10
+ const [state, setState] = useState(initialDocumentState);
11
11
  useEffect(() => {
12
12
  if (!provides) return;
13
- return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive2) => {
14
- setIsMarqueeCaptureActive(isMarqueeCaptureActive2);
13
+ const scope = provides.forDocument(documentId);
14
+ setState(scope.getState());
15
+ return scope.onStateChange((newState) => {
16
+ setState(newState);
15
17
  });
16
- }, [provides]);
18
+ }, [provides, documentId]);
17
19
  return {
18
- provides,
19
- isMarqueeCaptureActive
20
+ state,
21
+ provides: (provides == null ? void 0 : provides.forDocument(documentId)) ?? null
20
22
  };
21
23
  };
22
24
  const MarqueeCapture = ({
25
+ documentId,
23
26
  pageIndex,
24
27
  scale,
25
28
  className,
@@ -27,17 +30,23 @@ const MarqueeCapture = ({
27
30
  fill = "rgba(33,150,243,0.15)"
28
31
  }) => {
29
32
  const { provides: capturePlugin } = useCaptureCapability();
33
+ const documentState = useDocumentState(documentId);
30
34
  const [rect, setRect] = useState(null);
35
+ const actualScale = useMemo(() => {
36
+ if (scale !== void 0) return scale;
37
+ return (documentState == null ? void 0 : documentState.scale) ?? 1;
38
+ }, [scale, documentState == null ? void 0 : documentState.scale]);
31
39
  useEffect(() => {
32
40
  if (!capturePlugin) return;
33
41
  return capturePlugin.registerMarqueeOnPage({
42
+ documentId,
34
43
  pageIndex,
35
- scale,
44
+ scale: actualScale,
36
45
  callback: {
37
46
  onPreview: setRect
38
47
  }
39
48
  });
40
- }, [capturePlugin, pageIndex, scale]);
49
+ }, [capturePlugin, documentId, pageIndex, actualScale]);
41
50
  if (!rect) return null;
42
51
  return /* @__PURE__ */ jsx(
43
52
  "div",
@@ -45,10 +54,10 @@ const MarqueeCapture = ({
45
54
  style: {
46
55
  position: "absolute",
47
56
  pointerEvents: "none",
48
- left: rect.origin.x * scale,
49
- top: rect.origin.y * scale,
50
- width: rect.size.width * scale,
51
- height: rect.size.height * scale,
57
+ left: rect.origin.x * actualScale,
58
+ top: rect.origin.y * actualScale,
59
+ width: rect.size.width * actualScale,
60
+ height: rect.size.height * actualScale,
52
61
  border: `1px solid ${stroke}`,
53
62
  background: fill,
54
63
  boxSizing: "border-box"
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { CapturePlugin } from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\nexport const useCapture = () => {\n const { provides } = useCaptureCapability();\n const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive) => {\n setIsMarqueeCaptureActive(isMarqueeCaptureActive);\n });\n }, [provides]);\n\n return {\n provides,\n isMarqueeCaptureActive,\n };\n};\n","import { useEffect, useState } from '@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const [rect, setRect] = useState<Rect | null>(null);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n pageIndex,\n scale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, pageIndex, scale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * scale,\n top: rect.origin.y * scale,\n width: rect.size.width * scale,\n height: rect.size.height * scale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["isMarqueeCaptureActive"],"mappings":";;;;;AAIO,MAAM,uBAAuB,MAAM,cAA6B,cAAc,EAAE;AAChF,MAAM,mBAAmB,MAAM,UAAyB,cAAc,EAAE;AAExE,MAAM,aAAa,MAAM;AACxB,QAAA,EAAE,SAAS,IAAI,qBAAqB;AAC1C,QAAM,CAAC,wBAAwB,yBAAyB,IAAI,SAAS,KAAK;AAE1E,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACR,WAAA,SAAS,6BAA6B,CAACA,4BAA2B;AACvE,gCAA0BA,uBAAsB;AAAA,IAAA,CACjD;AAAA,EAAA,GACA,CAAC,QAAQ,CAAC;AAEN,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACLO,MAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT,MAA2B;AACzB,QAAM,EAAE,UAAU,cAAc,IAAI,qBAAqB;AACzD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAElD,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,WAAO,cAAc,sBAAsB;AAAA,MACzC;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EACA,GAAA,CAAC,eAAe,WAAW,KAAK,CAAC;AAEhC,MAAA,CAAC,KAAa,QAAA;AAGhB,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,MAAM,KAAK,OAAO,IAAI;AAAA,QACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACrB,OAAO,KAAK,KAAK,QAAQ;AAAA,QACzB,QAAQ,KAAK,KAAK,SAAS;AAAA,QAC3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport {\n CapturePlugin,\n CaptureDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\n/**\n * Hook for capture state for a specific document\n * @param documentId Document ID\n */\nexport const useCapture = (documentId: string) => {\n const { provides } = useCaptureCapability();\n const [state, setState] = useState<CaptureDocumentState>(initialDocumentState);\n\n useEffect(() => {\n if (!provides) return;\n\n const scope = provides.forDocument(documentId);\n\n // Get initial state\n setState(scope.getState());\n\n // Subscribe to state changes\n return scope.onStateChange((newState) => {\n setState(newState);\n });\n }, [provides, documentId]);\n\n return {\n state,\n provides: provides?.forDocument(documentId) ?? null,\n };\n};\n","import { useEffect, useMemo, useState } from '@framework';\nimport { useDocumentState } from '@embedpdf/core/@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Document ID */\n documentId: string;\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale?: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n documentId,\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const documentState = useDocumentState(documentId);\n const [rect, setRect] = useState<Rect | null>(null);\n\n const actualScale = useMemo(() => {\n if (scale !== undefined) return scale;\n return documentState?.scale ?? 1;\n }, [scale, documentState?.scale]);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n documentId,\n pageIndex,\n scale: actualScale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, documentId, pageIndex, actualScale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * actualScale,\n top: rect.origin.y * actualScale,\n width: rect.size.width * actualScale,\n height: rect.size.height * actualScale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAQO,MAAM,uBAAuB,MAAM,cAA6B,cAAc,EAAE;AAChF,MAAM,mBAAmB,MAAM,UAAyB,cAAc,EAAE;AAMxE,MAAM,aAAa,CAAC,eAAuB;AAChD,QAAM,EAAE,SAAA,IAAa,qBAAA;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA+B,oBAAoB;AAE7E,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,UAAM,QAAQ,SAAS,YAAY,UAAU;AAG7C,aAAS,MAAM,UAAU;AAGzB,WAAO,MAAM,cAAc,CAAC,aAAa;AACvC,eAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,SAAO;AAAA,IACL;AAAA,IACA,WAAU,qCAAU,YAAY,gBAAe;AAAA,EAAA;AAEnD;ACjBO,MAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT,MAA2B;AACzB,QAAM,EAAE,UAAU,cAAA,IAAkB,qBAAA;AACpC,QAAM,gBAAgB,iBAAiB,UAAU;AACjD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAElD,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,UAAU,OAAW,QAAO;AAChC,YAAO,+CAAe,UAAS;AAAA,EACjC,GAAG,CAAC,OAAO,+CAAe,KAAK,CAAC;AAEhC,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,WAAO,cAAc,sBAAsB;AAAA,MACzC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EACH,GAAG,CAAC,eAAe,YAAY,WAAW,WAAW,CAAC;AAEtD,MAAI,CAAC,KAAM,QAAO;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,MAAM,KAAK,OAAO,IAAI;AAAA,QACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACrB,OAAO,KAAK,KAAK,QAAQ;AAAA,QACzB,QAAQ,KAAK,KAAK,SAAS;AAAA,QAC3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core/react"),r=require("@embedpdf/plugin-capture"),t=require("react"),i=require("react/jsx-runtime"),a=()=>e.useCapability(r.CapturePlugin.id);exports.MarqueeCapture=({pageIndex:e,scale:r,className:u,stroke:s="rgba(33,150,243,0.8)",fill:o="rgba(33,150,243,0.15)"})=>{const{provides:n}=a(),[p,l]=t.useState(null);return t.useEffect((()=>{if(n)return n.registerMarqueeOnPage({pageIndex:e,scale:r,callback:{onPreview:l}})}),[n,e,r]),p?i.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:p.origin.x*r,top:p.origin.y*r,width:p.size.width*r,height:p.size.height*r,border:`1px solid ${s}`,background:o,boxSizing:"border-box"},className:u}):null},exports.useCapture=()=>{const{provides:e}=a(),[r,i]=t.useState(!1);return t.useEffect((()=>{if(e)return e.onMarqueeCaptureActiveChange((e=>{i(e)}))}),[e]),{provides:e,isMarqueeCaptureActive:r}},exports.useCaptureCapability=a,exports.useCapturePlugin=()=>e.usePlugin(r.CapturePlugin.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("@embedpdf/core/react"),t=require("@embedpdf/plugin-capture"),r=require("react"),o=require("react/jsx-runtime"),u=()=>e.useCapability(t.CapturePlugin.id);exports.MarqueeCapture=({documentId:t,pageIndex:i,scale:a,className:s,stroke:n="rgba(33,150,243,0.8)",fill:l="rgba(33,150,243,0.15)"})=>{const{provides:c}=u(),p=e.useDocumentState(t),[d,g]=r.useState(null),b=r.useMemo(()=>void 0!==a?a:(null==p?void 0:p.scale)??1,[a,null==p?void 0:p.scale]);return r.useEffect(()=>{if(c)return c.registerMarqueeOnPage({documentId:t,pageIndex:i,scale:b,callback:{onPreview:g}})},[c,t,i,b]),d?o.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:d.origin.x*b,top:d.origin.y*b,width:d.size.width*b,height:d.size.height*b,border:`1px solid ${n}`,background:l,boxSizing:"border-box"},className:s}):null},exports.useCapture=e=>{const{provides:o}=u(),[i,a]=r.useState(t.initialDocumentState);return r.useEffect(()=>{if(!o)return;const t=o.forDocument(e);return a(t.getState()),t.onStateChange(e=>{a(e)})},[o,e]),{state:i,provides:(null==o?void 0:o.forDocument(e))??null}},exports.useCaptureCapability=u,exports.useCapturePlugin=()=>e.usePlugin(t.CapturePlugin.id),Object.keys(t).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { CapturePlugin } from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\nexport const useCapture = () => {\n const { provides } = useCaptureCapability();\n const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive) => {\n setIsMarqueeCaptureActive(isMarqueeCaptureActive);\n });\n }, [provides]);\n\n return {\n provides,\n isMarqueeCaptureActive,\n };\n};\n","import { useEffect, useState } from '@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const [rect, setRect] = useState<Rect | null>(null);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n pageIndex,\n scale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, pageIndex, scale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * scale,\n top: rect.origin.y * scale,\n width: rect.size.width * scale,\n height: rect.size.height * scale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["useCaptureCapability","useCapability","CapturePlugin","id","pageIndex","scale","className","stroke","fill","provides","capturePlugin","rect","setRect","useState","useEffect","registerMarqueeOnPage","callback","onPreview","jsxRuntime","jsx","style","position","pointerEvents","left","origin","x","top","y","width","size","height","border","background","boxSizing","isMarqueeCaptureActive","setIsMarqueeCaptureActive","onMarqueeCaptureActiveChange","usePlugin"],"mappings":"gNAIaA,EAAuB,IAAMC,gBAA6BC,EAAAA,cAAcC,2BCavD,EAC5BC,YACAC,QACAC,YACAC,SAAS,uBACTC,OAAO,4BAEP,MAAQC,SAAUC,GAAkBV,KAC7BW,EAAMC,GAAWC,EAAAA,SAAsB,MAa1C,OAXJC,EAAAA,WAAU,KACR,GAAKJ,EACL,OAAOA,EAAcK,sBAAsB,CACzCX,YACAC,QACAW,SAAU,CACRC,UAAWL,IAEd,GACA,CAACF,EAAeN,EAAWC,IAEzBM,EAGHO,EAAAC,IAAC,MAAA,CACCC,MAAO,CACLC,SAAU,WACVC,cAAe,OACfC,KAAMZ,EAAKa,OAAOC,EAAIpB,EACtBqB,IAAKf,EAAKa,OAAOG,EAAItB,EACrBuB,MAAOjB,EAAKkB,KAAKD,MAAQvB,EACzByB,OAAQnB,EAAKkB,KAAKC,OAASzB,EAC3B0B,OAAQ,aAAaxB,IACrByB,WAAYxB,EACZyB,UAAW,cAEb3B,cAfc,IAgBhB,qBD/CsB,KAClB,MAAAG,SAAEA,GAAaT,KACdkC,EAAwBC,GAA6BtB,EAAAA,UAAS,GAS9D,OAPPC,EAAAA,WAAU,KACR,GAAKL,EACE,OAAAA,EAAS2B,8BAA8BF,IAC5CC,EAA0BD,EAAsB,GACjD,GACA,CAACzB,IAEG,CACLA,WACAyB,yBACF,0DAhB8B,IAAMG,YAAyBnC,EAAAA,cAAcC"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport {\n CapturePlugin,\n CaptureDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\n/**\n * Hook for capture state for a specific document\n * @param documentId Document ID\n */\nexport const useCapture = (documentId: string) => {\n const { provides } = useCaptureCapability();\n const [state, setState] = useState<CaptureDocumentState>(initialDocumentState);\n\n useEffect(() => {\n if (!provides) return;\n\n const scope = provides.forDocument(documentId);\n\n // Get initial state\n setState(scope.getState());\n\n // Subscribe to state changes\n return scope.onStateChange((newState) => {\n setState(newState);\n });\n }, [provides, documentId]);\n\n return {\n state,\n provides: provides?.forDocument(documentId) ?? null,\n };\n};\n","import { useEffect, useMemo, useState } from '@framework';\nimport { useDocumentState } from '@embedpdf/core/@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Document ID */\n documentId: string;\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale?: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n documentId,\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const documentState = useDocumentState(documentId);\n const [rect, setRect] = useState<Rect | null>(null);\n\n const actualScale = useMemo(() => {\n if (scale !== undefined) return scale;\n return documentState?.scale ?? 1;\n }, [scale, documentState?.scale]);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n documentId,\n pageIndex,\n scale: actualScale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, documentId, pageIndex, actualScale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * actualScale,\n top: rect.origin.y * actualScale,\n width: rect.size.width * actualScale,\n height: rect.size.height * actualScale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["useCaptureCapability","useCapability","CapturePlugin","id","documentId","pageIndex","scale","className","stroke","fill","provides","capturePlugin","documentState","useDocumentState","rect","setRect","useState","actualScale","useMemo","useEffect","registerMarqueeOnPage","callback","onPreview","jsx","style","position","pointerEvents","left","origin","x","top","y","width","size","height","border","background","boxSizing","state","setState","initialDocumentState","scope","forDocument","getState","onStateChange","newState","usePlugin"],"mappings":"gNAQaA,EAAuB,IAAMC,gBAA6BC,EAAAA,cAAcC,2BCYvD,EAC5BC,aACAC,YACAC,QACAC,YACAC,SAAS,uBACTC,OAAO,4BAEP,MAAQC,SAAUC,GAAkBX,IAC9BY,EAAgBC,EAAAA,iBAAiBT,IAChCU,EAAMC,GAAWC,EAAAA,SAAsB,MAExCC,EAAcC,EAAAA,QAAQ,SACZ,IAAVZ,EAA4BA,SACzBM,WAAeN,QAAS,EAC9B,CAACA,EAAO,MAAAM,OAAA,EAAAA,EAAeN,QAc1B,OAZAa,EAAAA,UAAU,KACR,GAAKR,EACL,OAAOA,EAAcS,sBAAsB,CACzChB,aACAC,YACAC,MAAOW,EACPI,SAAU,CACRC,UAAWP,MAGd,CAACJ,EAAeP,EAAYC,EAAWY,IAErCH,EAGHS,EAAAA,IAAC,MAAA,CACCC,MAAO,CACLC,SAAU,WACVC,cAAe,OACfC,KAAMb,EAAKc,OAAOC,EAAIZ,EACtBa,IAAKhB,EAAKc,OAAOG,EAAId,EACrBe,MAAOlB,EAAKmB,KAAKD,MAAQf,EACzBiB,OAAQpB,EAAKmB,KAAKC,OAASjB,EAC3BkB,OAAQ,aAAa3B,IACrB4B,WAAY3B,EACZ4B,UAAW,cAEb9B,cAfc,yBDlCOH,IACzB,MAAMM,SAAEA,GAAaV,KACdsC,EAAOC,GAAYvB,EAAAA,SAA+BwB,EAAAA,sBAgBzD,OAdArB,EAAAA,UAAU,KACR,IAAKT,EAAU,OAEf,MAAM+B,EAAQ/B,EAASgC,YAAYtC,GAMnC,OAHAmC,EAASE,EAAME,YAGRF,EAAMG,cAAeC,IAC1BN,EAASM,MAEV,CAACnC,EAAUN,IAEP,CACLkC,QACA5B,UAAU,MAAAA,OAAA,EAAAA,EAAUgC,YAAYtC,KAAe,+DA1BnB,IAAM0C,YAAyB5C,EAAAA,cAAcC"}
@@ -1,25 +1,28 @@
1
- import { useCapability, usePlugin } from "@embedpdf/core/react";
2
- import { CapturePlugin } from "@embedpdf/plugin-capture";
1
+ import { useCapability, usePlugin, useDocumentState } from "@embedpdf/core/react";
2
+ import { CapturePlugin, initialDocumentState } from "@embedpdf/plugin-capture";
3
3
  export * from "@embedpdf/plugin-capture";
4
- import { useState, useEffect } from "react";
4
+ import { useState, useEffect, useMemo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  const useCaptureCapability = () => useCapability(CapturePlugin.id);
7
7
  const useCapturePlugin = () => usePlugin(CapturePlugin.id);
8
- const useCapture = () => {
8
+ const useCapture = (documentId) => {
9
9
  const { provides } = useCaptureCapability();
10
- const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);
10
+ const [state, setState] = useState(initialDocumentState);
11
11
  useEffect(() => {
12
12
  if (!provides) return;
13
- return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive2) => {
14
- setIsMarqueeCaptureActive(isMarqueeCaptureActive2);
13
+ const scope = provides.forDocument(documentId);
14
+ setState(scope.getState());
15
+ return scope.onStateChange((newState) => {
16
+ setState(newState);
15
17
  });
16
- }, [provides]);
18
+ }, [provides, documentId]);
17
19
  return {
18
- provides,
19
- isMarqueeCaptureActive
20
+ state,
21
+ provides: (provides == null ? void 0 : provides.forDocument(documentId)) ?? null
20
22
  };
21
23
  };
22
24
  const MarqueeCapture = ({
25
+ documentId,
23
26
  pageIndex,
24
27
  scale,
25
28
  className,
@@ -27,17 +30,23 @@ const MarqueeCapture = ({
27
30
  fill = "rgba(33,150,243,0.15)"
28
31
  }) => {
29
32
  const { provides: capturePlugin } = useCaptureCapability();
33
+ const documentState = useDocumentState(documentId);
30
34
  const [rect, setRect] = useState(null);
35
+ const actualScale = useMemo(() => {
36
+ if (scale !== void 0) return scale;
37
+ return (documentState == null ? void 0 : documentState.scale) ?? 1;
38
+ }, [scale, documentState == null ? void 0 : documentState.scale]);
31
39
  useEffect(() => {
32
40
  if (!capturePlugin) return;
33
41
  return capturePlugin.registerMarqueeOnPage({
42
+ documentId,
34
43
  pageIndex,
35
- scale,
44
+ scale: actualScale,
36
45
  callback: {
37
46
  onPreview: setRect
38
47
  }
39
48
  });
40
- }, [capturePlugin, pageIndex, scale]);
49
+ }, [capturePlugin, documentId, pageIndex, actualScale]);
41
50
  if (!rect) return null;
42
51
  return /* @__PURE__ */ jsx(
43
52
  "div",
@@ -45,10 +54,10 @@ const MarqueeCapture = ({
45
54
  style: {
46
55
  position: "absolute",
47
56
  pointerEvents: "none",
48
- left: rect.origin.x * scale,
49
- top: rect.origin.y * scale,
50
- width: rect.size.width * scale,
51
- height: rect.size.height * scale,
57
+ left: rect.origin.x * actualScale,
58
+ top: rect.origin.y * actualScale,
59
+ width: rect.size.width * actualScale,
60
+ height: rect.size.height * actualScale,
52
61
  border: `1px solid ${stroke}`,
53
62
  background: fill,
54
63
  boxSizing: "border-box"
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { CapturePlugin } from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\nexport const useCapture = () => {\n const { provides } = useCaptureCapability();\n const [isMarqueeCaptureActive, setIsMarqueeCaptureActive] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onMarqueeCaptureActiveChange((isMarqueeCaptureActive) => {\n setIsMarqueeCaptureActive(isMarqueeCaptureActive);\n });\n }, [provides]);\n\n return {\n provides,\n isMarqueeCaptureActive,\n };\n};\n","import { useEffect, useState } from '@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const [rect, setRect] = useState<Rect | null>(null);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n pageIndex,\n scale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, pageIndex, scale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * scale,\n top: rect.origin.y * scale,\n width: rect.size.width * scale,\n height: rect.size.height * scale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":["isMarqueeCaptureActive"],"mappings":";;;;;AAIO,MAAM,uBAAuB,MAAM,cAA6B,cAAc,EAAE;AAChF,MAAM,mBAAmB,MAAM,UAAyB,cAAc,EAAE;AAExE,MAAM,aAAa,MAAM;AACxB,QAAA,EAAE,SAAS,IAAI,qBAAqB;AAC1C,QAAM,CAAC,wBAAwB,yBAAyB,IAAI,SAAS,KAAK;AAE1E,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACR,WAAA,SAAS,6BAA6B,CAACA,4BAA2B;AACvE,gCAA0BA,uBAAsB;AAAA,IAAA,CACjD;AAAA,EAAA,GACA,CAAC,QAAQ,CAAC;AAEN,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACLO,MAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT,MAA2B;AACzB,QAAM,EAAE,UAAU,cAAc,IAAI,qBAAqB;AACzD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAElD,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,WAAO,cAAc,sBAAsB;AAAA,MACzC;AAAA,MACA;AAAA,MACA,UAAU;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EACA,GAAA,CAAC,eAAe,WAAW,KAAK,CAAC;AAEhC,MAAA,CAAC,KAAa,QAAA;AAGhB,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,MAAM,KAAK,OAAO,IAAI;AAAA,QACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACrB,OAAO,KAAK,KAAK,QAAQ;AAAA,QACzB,QAAQ,KAAK,KAAK,SAAS;AAAA,QAC3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-capture.ts","../../src/shared/components/marquee-capture.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport {\n CapturePlugin,\n CaptureDocumentState,\n initialDocumentState,\n} from '@embedpdf/plugin-capture';\nimport { useState, useEffect } from '@framework';\n\nexport const useCaptureCapability = () => useCapability<CapturePlugin>(CapturePlugin.id);\nexport const useCapturePlugin = () => usePlugin<CapturePlugin>(CapturePlugin.id);\n\n/**\n * Hook for capture state for a specific document\n * @param documentId Document ID\n */\nexport const useCapture = (documentId: string) => {\n const { provides } = useCaptureCapability();\n const [state, setState] = useState<CaptureDocumentState>(initialDocumentState);\n\n useEffect(() => {\n if (!provides) return;\n\n const scope = provides.forDocument(documentId);\n\n // Get initial state\n setState(scope.getState());\n\n // Subscribe to state changes\n return scope.onStateChange((newState) => {\n setState(newState);\n });\n }, [provides, documentId]);\n\n return {\n state,\n provides: provides?.forDocument(documentId) ?? null,\n };\n};\n","import { useEffect, useMemo, useState } from '@framework';\nimport { useDocumentState } from '@embedpdf/core/@framework';\nimport { Rect } from '@embedpdf/models';\n\nimport { useCaptureCapability } from '../hooks/use-capture';\n\ninterface MarqueeCaptureProps {\n /** Document ID */\n documentId: string;\n /** Index of the page this layer lives on */\n pageIndex: number;\n /** Scale of the page */\n scale?: number;\n /** Optional CSS class applied to the marquee rectangle */\n className?: string;\n /** Stroke / fill colours (defaults below) */\n stroke?: string;\n fill?: string;\n}\n\nexport const MarqueeCapture = ({\n documentId,\n pageIndex,\n scale,\n className,\n stroke = 'rgba(33,150,243,0.8)',\n fill = 'rgba(33,150,243,0.15)',\n}: MarqueeCaptureProps) => {\n const { provides: capturePlugin } = useCaptureCapability();\n const documentState = useDocumentState(documentId);\n const [rect, setRect] = useState<Rect | null>(null);\n\n const actualScale = useMemo(() => {\n if (scale !== undefined) return scale;\n return documentState?.scale ?? 1;\n }, [scale, documentState?.scale]);\n\n useEffect(() => {\n if (!capturePlugin) return;\n return capturePlugin.registerMarqueeOnPage({\n documentId,\n pageIndex,\n scale: actualScale,\n callback: {\n onPreview: setRect,\n },\n });\n }, [capturePlugin, documentId, pageIndex, actualScale]);\n\n if (!rect) return null;\n\n return (\n <div\n style={{\n position: 'absolute',\n pointerEvents: 'none',\n left: rect.origin.x * actualScale,\n top: rect.origin.y * actualScale,\n width: rect.size.width * actualScale,\n height: rect.size.height * actualScale,\n border: `1px solid ${stroke}`,\n background: fill,\n boxSizing: 'border-box',\n }}\n className={className}\n />\n );\n};\n"],"names":[],"mappings":";;;;;AAQO,MAAM,uBAAuB,MAAM,cAA6B,cAAc,EAAE;AAChF,MAAM,mBAAmB,MAAM,UAAyB,cAAc,EAAE;AAMxE,MAAM,aAAa,CAAC,eAAuB;AAChD,QAAM,EAAE,SAAA,IAAa,qBAAA;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA+B,oBAAoB;AAE7E,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AAEf,UAAM,QAAQ,SAAS,YAAY,UAAU;AAG7C,aAAS,MAAM,UAAU;AAGzB,WAAO,MAAM,cAAc,CAAC,aAAa;AACvC,eAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,SAAO;AAAA,IACL;AAAA,IACA,WAAU,qCAAU,YAAY,gBAAe;AAAA,EAAA;AAEnD;ACjBO,MAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,OAAO;AACT,MAA2B;AACzB,QAAM,EAAE,UAAU,cAAA,IAAkB,qBAAA;AACpC,QAAM,gBAAgB,iBAAiB,UAAU;AACjD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAElD,QAAM,cAAc,QAAQ,MAAM;AAChC,QAAI,UAAU,OAAW,QAAO;AAChC,YAAO,+CAAe,UAAS;AAAA,EACjC,GAAG,CAAC,OAAO,+CAAe,KAAK,CAAC;AAEhC,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,WAAO,cAAc,sBAAsB;AAAA,MACzC;AAAA,MACA;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,QACR,WAAW;AAAA,MAAA;AAAA,IACb,CACD;AAAA,EACH,GAAG,CAAC,eAAe,YAAY,WAAW,WAAW,CAAC;AAEtD,MAAI,CAAC,KAAM,QAAO;AAElB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,MAAM,KAAK,OAAO,IAAI;AAAA,QACtB,KAAK,KAAK,OAAO,IAAI;AAAA,QACrB,OAAO,KAAK,KAAK,QAAQ;AAAA,QACzB,QAAQ,KAAK,KAAK,SAAS;AAAA,QAC3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,13 +1,15 @@
1
1
  interface MarqueeCaptureProps {
2
+ /** Document ID */
3
+ documentId: string;
2
4
  /** Index of the page this layer lives on */
3
5
  pageIndex: number;
4
6
  /** Scale of the page */
5
- scale: number;
7
+ scale?: number;
6
8
  /** Optional CSS class applied to the marquee rectangle */
7
9
  className?: string;
8
10
  /** Stroke / fill colours (defaults below) */
9
11
  stroke?: string;
10
12
  fill?: string;
11
13
  }
12
- export declare const MarqueeCapture: ({ pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("react/jsx-runtime").JSX.Element | null;
14
+ export declare const MarqueeCapture: ({ documentId, pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("react/jsx-runtime").JSX.Element | null;
13
15
  export {};
@@ -1,4 +1,4 @@
1
- import { CapturePlugin } from '../../index.ts';
1
+ import { CapturePlugin, CaptureDocumentState } from '../../index.ts';
2
2
  export declare const useCaptureCapability: () => {
3
3
  provides: Readonly<import('../../index.ts').CaptureCapability> | null;
4
4
  isLoading: boolean;
@@ -9,7 +9,11 @@ export declare const useCapturePlugin: () => {
9
9
  isLoading: boolean;
10
10
  ready: Promise<void>;
11
11
  };
12
- export declare const useCapture: () => {
13
- provides: Readonly<import('../../index.ts').CaptureCapability> | null;
14
- isMarqueeCaptureActive: boolean;
12
+ /**
13
+ * Hook for capture state for a specific document
14
+ * @param documentId Document ID
15
+ */
16
+ export declare const useCapture: (documentId: string) => {
17
+ state: CaptureDocumentState;
18
+ provides: import('../../index.ts').CaptureScope | null;
15
19
  };
@@ -1,13 +1,15 @@
1
1
  interface MarqueeCaptureProps {
2
+ /** Document ID */
3
+ documentId: string;
2
4
  /** Index of the page this layer lives on */
3
5
  pageIndex: number;
4
6
  /** Scale of the page */
5
- scale: number;
7
+ scale?: number;
6
8
  /** Optional CSS class applied to the marquee rectangle */
7
9
  className?: string;
8
10
  /** Stroke / fill colours (defaults below) */
9
11
  stroke?: string;
10
12
  fill?: string;
11
13
  }
12
- export declare const MarqueeCapture: ({ pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("preact").JSX.Element | null;
14
+ export declare const MarqueeCapture: ({ documentId, pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("preact").JSX.Element | null;
13
15
  export {};
@@ -1,4 +1,4 @@
1
- import { CapturePlugin } from '../../lib/index.ts';
1
+ import { CapturePlugin, CaptureDocumentState } from '../../lib/index.ts';
2
2
  export declare const useCaptureCapability: () => {
3
3
  provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
4
4
  isLoading: boolean;
@@ -9,7 +9,11 @@ export declare const useCapturePlugin: () => {
9
9
  isLoading: boolean;
10
10
  ready: Promise<void>;
11
11
  };
12
- export declare const useCapture: () => {
13
- provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
14
- isMarqueeCaptureActive: boolean;
12
+ /**
13
+ * Hook for capture state for a specific document
14
+ * @param documentId Document ID
15
+ */
16
+ export declare const useCapture: (documentId: string) => {
17
+ state: CaptureDocumentState;
18
+ provides: import('../../lib/index.ts').CaptureScope | null;
15
19
  };
@@ -1,13 +1,15 @@
1
1
  interface MarqueeCaptureProps {
2
+ /** Document ID */
3
+ documentId: string;
2
4
  /** Index of the page this layer lives on */
3
5
  pageIndex: number;
4
6
  /** Scale of the page */
5
- scale: number;
7
+ scale?: number;
6
8
  /** Optional CSS class applied to the marquee rectangle */
7
9
  className?: string;
8
10
  /** Stroke / fill colours (defaults below) */
9
11
  stroke?: string;
10
12
  fill?: string;
11
13
  }
12
- export declare const MarqueeCapture: ({ pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("react/jsx-runtime").JSX.Element | null;
14
+ export declare const MarqueeCapture: ({ documentId, pageIndex, scale, className, stroke, fill, }: MarqueeCaptureProps) => import("react/jsx-runtime").JSX.Element | null;
13
15
  export {};
@@ -1,4 +1,4 @@
1
- import { CapturePlugin } from '../../lib/index.ts';
1
+ import { CapturePlugin, CaptureDocumentState } from '../../lib/index.ts';
2
2
  export declare const useCaptureCapability: () => {
3
3
  provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
4
4
  isLoading: boolean;
@@ -9,7 +9,11 @@ export declare const useCapturePlugin: () => {
9
9
  isLoading: boolean;
10
10
  ready: Promise<void>;
11
11
  };
12
- export declare const useCapture: () => {
13
- provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
14
- isMarqueeCaptureActive: boolean;
12
+ /**
13
+ * Hook for capture state for a specific document
14
+ * @param documentId Document ID
15
+ */
16
+ export declare const useCapture: (documentId: string) => {
17
+ state: CaptureDocumentState;
18
+ provides: import('../../lib/index.ts').CaptureScope | null;
15
19
  };
@@ -1,8 +1,10 @@
1
1
  interface MarqueeCaptureProps {
2
+ /** Document ID */
3
+ documentId: string;
2
4
  /** Index of the page this layer lives on */
3
5
  pageIndex: number;
4
6
  /** Scale of the page */
5
- scale: number;
7
+ scale?: number;
6
8
  /** Optional CSS class applied to the marquee rectangle */
7
9
  class?: string;
8
10
  /** Stroke / fill colours (defaults below) */
@@ -1,4 +1,4 @@
1
- import { CapturePlugin } from '../../lib/index.ts';
1
+ import { CapturePlugin, CaptureDocumentState, CaptureScope } from '../../lib/index.ts';
2
2
  export declare const useCaptureCapability: () => {
3
3
  provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
4
4
  isLoading: boolean;
@@ -9,7 +9,13 @@ export declare const useCapturePlugin: () => {
9
9
  isLoading: boolean;
10
10
  ready: Promise<void>;
11
11
  };
12
- export declare const useCapture: () => {
13
- readonly provides: Readonly<import('../../lib/index.ts').CaptureCapability> | null;
14
- isMarqueeCaptureActive: boolean;
15
- };
12
+ interface UseCaptureReturn {
13
+ provides: CaptureScope | null;
14
+ state: CaptureDocumentState;
15
+ }
16
+ /**
17
+ * Hook for capture state for a specific document
18
+ * @param getDocumentId Function that returns the document ID
19
+ */
20
+ export declare const useCapture: (getDocumentId: () => string | null) => UseCaptureReturn;
21
+ export {};
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal/client"),t=require("@embedpdf/plugin-capture"),r=require("@embedpdf/core/svelte");function i(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const r in e)if("default"!==r){const i=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:()=>e[r]})}return t.default=e,Object.freeze(t)}require("svelte/internal/disclose-version");const s=i(e),o=()=>r.useCapability(t.CapturePlugin.id);var a=s.from_html("<div></div>");exports.MarqueeCapture=function(e,t){s.push(t,!0);let r=s.prop(t,"stroke",3,"rgba(33,150,243,0.8)"),i=s.prop(t,"fill",3,"rgba(33,150,243,0.15)");const n=o();let p=s.state(null);s.user_effect((()=>{if(n.provides)return n.provides.registerMarqueeOnPage({pageIndex:t.pageIndex,scale:t.scale,callback:{onPreview:e=>s.set(p,e,!0)}})}));var l=s.comment(),u=s.first_child(l),c=e=>{var o=a();let n;s.template_effect((e=>{s.set_class(o,1,s.clsx(t.class)),n=s.set_style(o,"",n,e)}),[()=>({position:"absolute","pointer-events":"none",left:s.get(p).origin.x*t.scale+"px",top:s.get(p).origin.y*t.scale+"px",width:s.get(p).size.width*t.scale+"px",height:s.get(p).size.height*t.scale+"px",border:`1px solid ${r()}`,background:i(),"box-sizing":"border-box"})]),s.append(e,o)};s.if(u,(e=>{s.get(p)&&e(c)})),s.append(e,l),s.pop()},exports.useCapture=()=>{const e=o(),t=s.proxy({get provides(){return e.provides},isMarqueeCaptureActive:!1});return s.user_effect((()=>{var r;return null==(r=e.provides)?void 0:r.onMarqueeCaptureActiveChange((e=>{t.isMarqueeCaptureActive=e}))})),t},exports.useCaptureCapability=o,exports.useCapturePlugin=()=>r.usePlugin(t.CapturePlugin.id),Object.keys(t).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})}));
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("svelte/internal/client"),t=require("@embedpdf/core/svelte"),r=require("@embedpdf/plugin-capture");function o(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const r in e)if("default"!==r){const o=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,o.get?o:{enumerable:!0,get:()=>e[r]})}return t.default=e,Object.freeze(t)}require("svelte/internal/disclose-version");const n=o(e),i=()=>t.useCapability(r.CapturePlugin.id);var s=n.from_html("<div></div>");exports.MarqueeCapture=function(e,r){n.push(r,!0);let o=n.prop(r,"stroke",3,"rgba(33,150,243,0.8)"),u=n.prop(r,"fill",3,"rgba(33,150,243,0.15)");const a=i(),l=t.useDocumentState(()=>r.documentId);let p=n.state(null);const c=n.derived(()=>{var e;return void 0!==r.scale?r.scale:(null==(e=l.current)?void 0:e.scale)??1});n.user_effect(()=>{if(n.set(p,null),a.provides)return a.provides.registerMarqueeOnPage({documentId:r.documentId,pageIndex:r.pageIndex,scale:n.get(c),callback:{onPreview:e=>{n.set(p,e,!0)}}})});var d=n.comment(),g=n.first_child(d),f=e=>{var t=s();let i;n.template_effect(()=>{n.set_class(t,1,n.clsx(r.class)),i=n.set_style(t,"",i,{position:"absolute","pointer-events":"none",left:n.get(p).origin.x*n.get(c)+"px",top:n.get(p).origin.y*n.get(c)+"px",width:n.get(p).size.width*n.get(c)+"px",height:n.get(p).size.height*n.get(c)+"px",border:`1px solid ${o()}`,background:u(),"box-sizing":"border-box"})}),n.append(e,t)};n.if(g,e=>{n.get(p)&&e(f)}),n.append(e,d),n.pop()},exports.useCapture=e=>{const t=i();let o=n.state(n.proxy(r.initialDocumentState));const s=n.derived(e),u=n.derived(()=>t.provides&&n.get(s)?t.provides.forDocument(n.get(s)):null);return n.user_effect(()=>{const e=t.provides,i=n.get(s);if(!e||!i)return void n.set(o,r.initialDocumentState,!0);const u=e.forDocument(i);return n.set(o,u.getState(),!0),u.onStateChange(e=>{n.set(o,e,!0)})}),{get provides(){return n.get(u)},get state(){return n.get(o)}}},exports.useCaptureCapability=i,exports.useCapturePlugin=()=>t.usePlugin(r.CapturePlugin.id),Object.keys(r).forEach(e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>r[e]})});
2
2
  //# sourceMappingURL=index.cjs.map