@embedpdf/plugin-interaction-manager 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +11 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/preact/index.cjs +84 -17
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.d.cts +15 -5
- package/dist/preact/index.d.ts +15 -5
- package/dist/preact/index.js +79 -12
- package/dist/preact/index.js.map +1 -1
- package/dist/react/index.cjs +77 -9
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.d.cts +15 -5
- package/dist/react/index.d.ts +15 -5
- package/dist/react/index.js +78 -10
- package/dist/react/index.js.map +1 -1
- package/package.json +6 -5
package/dist/preact/index.d.ts
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
import { JSX, ComponentChildren } from 'preact';
|
|
2
2
|
import { Position } from '@embedpdf/models';
|
|
3
3
|
import * as _embedpdf_plugin_interaction_manager from '@embedpdf/plugin-interaction-manager';
|
|
4
|
-
import { InteractionManagerPlugin, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
4
|
+
import { InteractionManagerPlugin, InteractionManagerState, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
5
5
|
|
|
6
6
|
/** @jsxImportSource preact */
|
|
7
7
|
|
|
8
8
|
interface GlobalPointerProviderProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
9
9
|
children: ComponentChildren;
|
|
10
|
+
style?: JSX.CSSProperties;
|
|
10
11
|
}
|
|
11
|
-
declare const GlobalPointerProvider: ({ children, ...props }: GlobalPointerProviderProps) => JSX.Element;
|
|
12
|
+
declare const GlobalPointerProvider: ({ children, style, ...props }: GlobalPointerProviderProps) => JSX.Element;
|
|
12
13
|
|
|
13
14
|
/** @jsxImportSource preact */
|
|
14
15
|
|
|
15
16
|
interface PagePointerProviderProps extends JSX.HTMLAttributes<HTMLDivElement> {
|
|
16
17
|
children: ComponentChildren;
|
|
17
18
|
pageIndex: number;
|
|
19
|
+
pageWidth: number;
|
|
20
|
+
pageHeight: number;
|
|
21
|
+
rotation: number;
|
|
22
|
+
scale: number;
|
|
23
|
+
style?: JSX.CSSProperties;
|
|
18
24
|
convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;
|
|
19
25
|
}
|
|
20
|
-
declare const PagePointerProvider: ({ pageIndex, children, convertEventToPoint, ...props }: PagePointerProviderProps) => JSX.Element;
|
|
26
|
+
declare const PagePointerProvider: ({ pageIndex, children, pageWidth, pageHeight, rotation, scale, convertEventToPoint, style, ...props }: PagePointerProviderProps) => JSX.Element;
|
|
21
27
|
|
|
22
|
-
declare const
|
|
28
|
+
declare const useInteractionManagerPlugin: () => {
|
|
23
29
|
plugin: InteractionManagerPlugin | null;
|
|
24
30
|
isLoading: boolean;
|
|
25
31
|
ready: Promise<void>;
|
|
@@ -29,6 +35,10 @@ declare const useInteractionManagerCapability: () => {
|
|
|
29
35
|
isLoading: boolean;
|
|
30
36
|
ready: Promise<void>;
|
|
31
37
|
};
|
|
38
|
+
declare function useInteractionManager(): {
|
|
39
|
+
provides: Readonly<_embedpdf_plugin_interaction_manager.InteractionManagerCapability> | null;
|
|
40
|
+
state: InteractionManagerState;
|
|
41
|
+
};
|
|
32
42
|
declare function useCursor(): {
|
|
33
43
|
setCursor: (token: string, cursor: string, prio?: number) => void;
|
|
34
44
|
removeCursor: (token: string) => void;
|
|
@@ -42,4 +52,4 @@ declare function usePointerHandlers({ modeId, pageIndex }: UsePointerHandlersOpt
|
|
|
42
52
|
};
|
|
43
53
|
declare function useIsPageExclusive(): boolean;
|
|
44
54
|
|
|
45
|
-
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useIsPageExclusive, usePointerHandlers };
|
|
55
|
+
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useInteractionManagerPlugin, useIsPageExclusive, usePointerHandlers };
|
package/dist/preact/index.js
CHANGED
|
@@ -8,12 +8,26 @@ import { useEffect as useEffect2, useRef } from "preact/hooks";
|
|
|
8
8
|
// src/preact/hooks/use-interaction-manager.ts
|
|
9
9
|
import { useCapability, usePlugin } from "@embedpdf/core/preact";
|
|
10
10
|
import {
|
|
11
|
+
initialState,
|
|
11
12
|
InteractionManagerPlugin
|
|
12
13
|
} from "@embedpdf/plugin-interaction-manager";
|
|
13
|
-
import { useState } from "preact/hooks";
|
|
14
|
-
|
|
15
|
-
var useInteractionManager = () => usePlugin(InteractionManagerPlugin.id);
|
|
14
|
+
import { useState, useEffect } from "preact/hooks";
|
|
15
|
+
var useInteractionManagerPlugin = () => usePlugin(InteractionManagerPlugin.id);
|
|
16
16
|
var useInteractionManagerCapability = () => useCapability(InteractionManagerPlugin.id);
|
|
17
|
+
function useInteractionManager() {
|
|
18
|
+
const { provides } = useInteractionManagerCapability();
|
|
19
|
+
const [state, setState] = useState(initialState);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (!provides) return;
|
|
22
|
+
return provides.onStateChange((state2) => {
|
|
23
|
+
setState(state2);
|
|
24
|
+
});
|
|
25
|
+
}, [provides]);
|
|
26
|
+
return {
|
|
27
|
+
provides,
|
|
28
|
+
state
|
|
29
|
+
};
|
|
30
|
+
}
|
|
17
31
|
function useCursor() {
|
|
18
32
|
const { provides } = useInteractionManagerCapability();
|
|
19
33
|
return {
|
|
@@ -52,41 +66,93 @@ function useIsPageExclusive() {
|
|
|
52
66
|
|
|
53
67
|
// src/preact/components/global-pointer-provider.tsx
|
|
54
68
|
import { jsx } from "preact/jsx-runtime";
|
|
55
|
-
var GlobalPointerProvider = ({
|
|
69
|
+
var GlobalPointerProvider = ({
|
|
70
|
+
children,
|
|
71
|
+
style,
|
|
72
|
+
...props
|
|
73
|
+
}) => {
|
|
56
74
|
const ref = useRef(null);
|
|
57
75
|
const { provides: cap } = useInteractionManagerCapability();
|
|
58
76
|
useEffect2(() => {
|
|
59
77
|
if (!cap || !ref.current) return;
|
|
60
78
|
return createPointerProvider(cap, { type: "global" }, ref.current);
|
|
61
79
|
}, [cap]);
|
|
62
|
-
return /* @__PURE__ */ jsx(
|
|
80
|
+
return /* @__PURE__ */ jsx(
|
|
81
|
+
"div",
|
|
82
|
+
{
|
|
83
|
+
ref,
|
|
84
|
+
style: {
|
|
85
|
+
width: "100%",
|
|
86
|
+
height: "100%",
|
|
87
|
+
...style
|
|
88
|
+
},
|
|
89
|
+
...props,
|
|
90
|
+
children
|
|
91
|
+
}
|
|
92
|
+
);
|
|
63
93
|
};
|
|
64
94
|
|
|
65
95
|
// src/preact/components/page-pointer-provider.tsx
|
|
66
|
-
import { useEffect as useEffect3, useRef as useRef2 } from "preact/hooks";
|
|
96
|
+
import { useCallback, useEffect as useEffect3, useRef as useRef2 } from "preact/hooks";
|
|
97
|
+
import { restorePosition } from "@embedpdf/models";
|
|
67
98
|
import { jsx as jsx2, jsxs } from "preact/jsx-runtime";
|
|
68
99
|
var PagePointerProvider = ({
|
|
69
100
|
pageIndex,
|
|
70
101
|
children,
|
|
102
|
+
pageWidth,
|
|
103
|
+
pageHeight,
|
|
104
|
+
rotation,
|
|
105
|
+
scale,
|
|
71
106
|
convertEventToPoint,
|
|
107
|
+
style,
|
|
72
108
|
...props
|
|
73
109
|
}) => {
|
|
74
110
|
const ref = useRef2(null);
|
|
75
111
|
const { provides: cap } = useInteractionManagerCapability();
|
|
76
112
|
const isPageExclusive = useIsPageExclusive();
|
|
113
|
+
const defaultConvertEventToPoint = useCallback(
|
|
114
|
+
(event, element) => {
|
|
115
|
+
const rect = element.getBoundingClientRect();
|
|
116
|
+
const displayPoint = {
|
|
117
|
+
x: event.clientX - rect.left,
|
|
118
|
+
y: event.clientY - rect.top
|
|
119
|
+
};
|
|
120
|
+
return restorePosition(
|
|
121
|
+
{ width: pageWidth, height: pageHeight },
|
|
122
|
+
displayPoint,
|
|
123
|
+
rotation,
|
|
124
|
+
scale
|
|
125
|
+
);
|
|
126
|
+
},
|
|
127
|
+
[pageWidth, pageHeight, rotation, scale]
|
|
128
|
+
);
|
|
77
129
|
useEffect3(() => {
|
|
78
130
|
if (!cap || !ref.current) return;
|
|
79
131
|
return createPointerProvider(
|
|
80
132
|
cap,
|
|
81
133
|
{ type: "page", pageIndex },
|
|
82
134
|
ref.current,
|
|
83
|
-
convertEventToPoint
|
|
135
|
+
convertEventToPoint || defaultConvertEventToPoint
|
|
84
136
|
);
|
|
85
|
-
}, [cap, pageIndex, convertEventToPoint]);
|
|
86
|
-
return /* @__PURE__ */ jsxs(
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
137
|
+
}, [cap, pageIndex, convertEventToPoint, defaultConvertEventToPoint]);
|
|
138
|
+
return /* @__PURE__ */ jsxs(
|
|
139
|
+
"div",
|
|
140
|
+
{
|
|
141
|
+
ref,
|
|
142
|
+
style: {
|
|
143
|
+
position: "absolute",
|
|
144
|
+
inset: 0,
|
|
145
|
+
mixBlendMode: "multiply",
|
|
146
|
+
isolation: "isolate",
|
|
147
|
+
...style
|
|
148
|
+
},
|
|
149
|
+
...props,
|
|
150
|
+
children: [
|
|
151
|
+
children,
|
|
152
|
+
isPageExclusive && /* @__PURE__ */ jsx2("div", { style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 } })
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
);
|
|
90
156
|
};
|
|
91
157
|
export {
|
|
92
158
|
GlobalPointerProvider,
|
|
@@ -94,6 +160,7 @@ export {
|
|
|
94
160
|
useCursor,
|
|
95
161
|
useInteractionManager,
|
|
96
162
|
useInteractionManagerCapability,
|
|
163
|
+
useInteractionManagerPlugin,
|
|
97
164
|
useIsPageExclusive,
|
|
98
165
|
usePointerHandlers
|
|
99
166
|
};
|
package/dist/preact/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/preact/components/global-pointer-provider.tsx","../../src/preact/hooks/use-interaction-manager.ts","../../src/preact/components/page-pointer-provider.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { ComponentChildren, JSX } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability } from '../hooks';\n\ninterface GlobalPointerProviderProps extends JSX.HTMLAttributes<HTMLDivElement> {\n children: ComponentChildren;\n}\n\nexport const GlobalPointerProvider = ({
|
|
1
|
+
{"version":3,"sources":["../../src/preact/components/global-pointer-provider.tsx","../../src/preact/hooks/use-interaction-manager.ts","../../src/preact/components/page-pointer-provider.tsx"],"sourcesContent":["/** @jsxImportSource preact */\nimport { ComponentChildren, JSX } from 'preact';\nimport { useEffect, useRef } from 'preact/hooks';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability } from '../hooks';\n\ninterface GlobalPointerProviderProps extends JSX.HTMLAttributes<HTMLDivElement> {\n children: ComponentChildren;\n style?: JSX.CSSProperties;\n}\n\nexport const GlobalPointerProvider = ({\n children,\n style,\n ...props\n}: GlobalPointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(cap, { type: 'global' }, ref.current);\n }, [cap]);\n\n return (\n <div\n ref={ref}\n style={{\n width: '100%',\n height: '100%',\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n","import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport {\n initialState,\n InteractionManagerPlugin,\n InteractionManagerState,\n PointerEventHandlers,\n} from '@embedpdf/plugin-interaction-manager';\nimport { useState, useEffect } from 'preact/hooks';\n\nexport const useInteractionManagerPlugin = () =>\n usePlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id);\nexport const useInteractionManagerCapability = () =>\n useCapability<InteractionManagerPlugin>(InteractionManagerPlugin.id);\n\nexport function useInteractionManager() {\n const { provides } = useInteractionManagerCapability();\n const [state, setState] = useState<InteractionManagerState>(initialState);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onStateChange((state) => {\n setState(state);\n });\n }, [provides]);\n\n return {\n provides,\n state,\n };\n}\n\nexport function useCursor() {\n const { provides } = useInteractionManagerCapability();\n return {\n setCursor: (token: string, cursor: string, prio = 0) => {\n provides?.setCursor(token, cursor, prio);\n },\n removeCursor: (token: string) => {\n provides?.removeCursor(token);\n },\n };\n}\n\ninterface UsePointerHandlersOptions {\n modeId?: string;\n pageIndex?: number;\n}\n\nexport function usePointerHandlers({ modeId, pageIndex }: UsePointerHandlersOptions) {\n const { provides } = useInteractionManagerCapability();\n return {\n register: modeId\n ? (handlers: PointerEventHandlers) =>\n provides?.registerHandlers({ modeId, handlers, pageIndex })\n : (handlers: PointerEventHandlers) =>\n provides?.registerAlways({\n scope: pageIndex !== undefined ? { type: 'page', pageIndex } : { type: 'global' },\n handlers,\n }),\n };\n}\n\nexport function useIsPageExclusive() {\n const { provides: cap } = useInteractionManagerCapability();\n\n const [isPageExclusive, setIsPageExclusive] = useState<boolean>(() => {\n const m = cap?.getActiveInteractionMode();\n return m?.scope === 'page' && !!m.exclusive;\n });\n\n useEffect(() => {\n if (!cap) return;\n\n return cap.onModeChange(() => {\n const mode = cap.getActiveInteractionMode();\n setIsPageExclusive(mode?.scope === 'page' && !!mode?.exclusive);\n });\n }, [cap]);\n\n return isPageExclusive;\n}\n","/** @jsxImportSource preact */\nimport { ComponentChildren, JSX } from 'preact';\nimport { useCallback, useEffect, useRef } from 'preact/hooks';\nimport { Position, restorePosition } from '@embedpdf/models';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability, useIsPageExclusive } from '../hooks';\n\ninterface PagePointerProviderProps extends JSX.HTMLAttributes<HTMLDivElement> {\n children: ComponentChildren;\n pageIndex: number;\n pageWidth: number;\n pageHeight: number;\n rotation: number;\n scale: number;\n style?: JSX.CSSProperties;\n convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;\n}\n\nexport const PagePointerProvider = ({\n pageIndex,\n children,\n pageWidth,\n pageHeight,\n rotation,\n scale,\n convertEventToPoint,\n style,\n ...props\n}: PagePointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n const isPageExclusive = useIsPageExclusive();\n\n const defaultConvertEventToPoint = useCallback(\n (event: PointerEvent, element: HTMLElement): Position => {\n const rect = element.getBoundingClientRect();\n const displayPoint = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n return restorePosition(\n { width: pageWidth, height: pageHeight },\n displayPoint,\n rotation,\n scale,\n );\n },\n [pageWidth, pageHeight, rotation, scale],\n );\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(\n cap,\n { type: 'page', pageIndex },\n ref.current,\n convertEventToPoint || defaultConvertEventToPoint,\n );\n }, [cap, pageIndex, convertEventToPoint, defaultConvertEventToPoint]);\n\n return (\n <div\n ref={ref}\n style={{\n position: 'absolute',\n inset: 0,\n mixBlendMode: 'multiply',\n isolation: 'isolate',\n ...style,\n }}\n {...props}\n >\n {children}\n {isPageExclusive && (\n <div style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }} />\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["useEffect","state","useEffect","useEffect","useRef","jsx","useRef","useEffect"]}
|
package/dist/react/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(react_exports, {
|
|
|
25
25
|
useCursor: () => useCursor,
|
|
26
26
|
useInteractionManager: () => useInteractionManager,
|
|
27
27
|
useInteractionManagerCapability: () => useInteractionManagerCapability,
|
|
28
|
+
useInteractionManagerPlugin: () => useInteractionManagerPlugin,
|
|
28
29
|
useIsPageExclusive: () => useIsPageExclusive,
|
|
29
30
|
usePointerHandlers: () => usePointerHandlers
|
|
30
31
|
});
|
|
@@ -34,8 +35,22 @@ module.exports = __toCommonJS(react_exports);
|
|
|
34
35
|
var import_react = require("@embedpdf/core/react");
|
|
35
36
|
var import_plugin_interaction_manager = require("@embedpdf/plugin-interaction-manager");
|
|
36
37
|
var import_react2 = require("react");
|
|
37
|
-
var
|
|
38
|
+
var useInteractionManagerPlugin = () => (0, import_react.usePlugin)(import_plugin_interaction_manager.InteractionManagerPlugin.id);
|
|
38
39
|
var useInteractionManagerCapability = () => (0, import_react.useCapability)(import_plugin_interaction_manager.InteractionManagerPlugin.id);
|
|
40
|
+
function useInteractionManager() {
|
|
41
|
+
const { provides } = useInteractionManagerCapability();
|
|
42
|
+
const [state, setState] = (0, import_react2.useState)(import_plugin_interaction_manager.initialState);
|
|
43
|
+
(0, import_react2.useEffect)(() => {
|
|
44
|
+
if (!provides) return;
|
|
45
|
+
return provides.onStateChange((state2) => {
|
|
46
|
+
setState(state2);
|
|
47
|
+
});
|
|
48
|
+
}, [provides]);
|
|
49
|
+
return {
|
|
50
|
+
provides,
|
|
51
|
+
state
|
|
52
|
+
};
|
|
53
|
+
}
|
|
39
54
|
function useCursor() {
|
|
40
55
|
const { provides } = useInteractionManagerCapability();
|
|
41
56
|
return {
|
|
@@ -135,41 +150,93 @@ function createPointerProvider(cap, scope, element, convertEventToPoint) {
|
|
|
135
150
|
|
|
136
151
|
// src/react/components/global-pointer-provider.tsx
|
|
137
152
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
138
|
-
var GlobalPointerProvider = ({
|
|
153
|
+
var GlobalPointerProvider = ({
|
|
154
|
+
children,
|
|
155
|
+
style,
|
|
156
|
+
...props
|
|
157
|
+
}) => {
|
|
139
158
|
const ref = (0, import_react3.useRef)(null);
|
|
140
159
|
const { provides: cap } = useInteractionManagerCapability();
|
|
141
160
|
(0, import_react3.useEffect)(() => {
|
|
142
161
|
if (!cap || !ref.current) return;
|
|
143
162
|
return createPointerProvider(cap, { type: "global" }, ref.current);
|
|
144
163
|
}, [cap]);
|
|
145
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
165
|
+
"div",
|
|
166
|
+
{
|
|
167
|
+
ref,
|
|
168
|
+
style: {
|
|
169
|
+
width: "100%",
|
|
170
|
+
height: "100%",
|
|
171
|
+
...style
|
|
172
|
+
},
|
|
173
|
+
...props,
|
|
174
|
+
children
|
|
175
|
+
}
|
|
176
|
+
);
|
|
146
177
|
};
|
|
147
178
|
|
|
148
179
|
// src/react/components/page-pointer-provider.tsx
|
|
149
180
|
var import_react4 = require("react");
|
|
181
|
+
var import_models = require("@embedpdf/models");
|
|
150
182
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
151
183
|
var PagePointerProvider = ({
|
|
152
184
|
pageIndex,
|
|
153
185
|
children,
|
|
186
|
+
pageWidth,
|
|
187
|
+
pageHeight,
|
|
188
|
+
rotation,
|
|
189
|
+
scale,
|
|
154
190
|
convertEventToPoint,
|
|
191
|
+
style,
|
|
155
192
|
...props
|
|
156
193
|
}) => {
|
|
157
194
|
const ref = (0, import_react4.useRef)(null);
|
|
158
195
|
const { provides: cap } = useInteractionManagerCapability();
|
|
159
196
|
const isPageExclusive = useIsPageExclusive();
|
|
197
|
+
const defaultConvertEventToPoint = (0, import_react4.useCallback)(
|
|
198
|
+
(event, element) => {
|
|
199
|
+
const rect = element.getBoundingClientRect();
|
|
200
|
+
const displayPoint = {
|
|
201
|
+
x: event.clientX - rect.left,
|
|
202
|
+
y: event.clientY - rect.top
|
|
203
|
+
};
|
|
204
|
+
return (0, import_models.restorePosition)(
|
|
205
|
+
{ width: pageWidth, height: pageHeight },
|
|
206
|
+
displayPoint,
|
|
207
|
+
rotation,
|
|
208
|
+
scale
|
|
209
|
+
);
|
|
210
|
+
},
|
|
211
|
+
[pageWidth, pageHeight, rotation, scale]
|
|
212
|
+
);
|
|
160
213
|
(0, import_react4.useEffect)(() => {
|
|
161
214
|
if (!cap || !ref.current) return;
|
|
162
215
|
return createPointerProvider(
|
|
163
216
|
cap,
|
|
164
217
|
{ type: "page", pageIndex },
|
|
165
218
|
ref.current,
|
|
166
|
-
convertEventToPoint
|
|
219
|
+
convertEventToPoint || defaultConvertEventToPoint
|
|
167
220
|
);
|
|
168
|
-
}, [cap, pageIndex, convertEventToPoint]);
|
|
169
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
221
|
+
}, [cap, pageIndex, convertEventToPoint, defaultConvertEventToPoint]);
|
|
222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
ref,
|
|
226
|
+
style: {
|
|
227
|
+
position: "absolute",
|
|
228
|
+
inset: 0,
|
|
229
|
+
mixBlendMode: "multiply",
|
|
230
|
+
isolation: "isolate",
|
|
231
|
+
...style
|
|
232
|
+
},
|
|
233
|
+
...props,
|
|
234
|
+
children: [
|
|
235
|
+
children,
|
|
236
|
+
isPageExclusive && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 } })
|
|
237
|
+
]
|
|
238
|
+
}
|
|
239
|
+
);
|
|
173
240
|
};
|
|
174
241
|
// Annotate the CommonJS export names for ESM import in node:
|
|
175
242
|
0 && (module.exports = {
|
|
@@ -178,6 +245,7 @@ var PagePointerProvider = ({
|
|
|
178
245
|
useCursor,
|
|
179
246
|
useInteractionManager,
|
|
180
247
|
useInteractionManagerCapability,
|
|
248
|
+
useInteractionManagerPlugin,
|
|
181
249
|
useIsPageExclusive,
|
|
182
250
|
usePointerHandlers
|
|
183
251
|
});
|
package/dist/react/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/index.ts","../../src/react/hooks/use-interaction-manager.ts","../../src/react/components/global-pointer-provider.tsx","../../src/shared/utils.ts","../../src/react/components/page-pointer-provider.tsx"],"sourcesContent":["export * from './hooks';\nexport * from './components';\n","import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport {\n InteractionManagerPlugin,\n PointerEventHandlers,\n} from '@embedpdf/plugin-interaction-manager';\nimport { useState, useEffect } from 'react';\n\nexport const useInteractionManager = () =>\n usePlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id);\nexport const useInteractionManagerCapability = () =>\n useCapability<InteractionManagerPlugin>(InteractionManagerPlugin.id);\n\nexport function useCursor() {\n const { provides } = useInteractionManagerCapability();\n return {\n setCursor: (token: string, cursor: string, prio = 0) => {\n provides?.setCursor(token, cursor, prio);\n },\n removeCursor: (token: string) => {\n provides?.removeCursor(token);\n },\n };\n}\n\ninterface UsePointerHandlersOptions {\n modeId?: string;\n pageIndex?: number;\n}\n\nexport function usePointerHandlers({ modeId, pageIndex }: UsePointerHandlersOptions) {\n const { provides } = useInteractionManagerCapability();\n return {\n register: modeId\n ? (handlers: PointerEventHandlers) =>\n provides?.registerHandlers({ modeId, handlers, pageIndex })\n : (handlers: PointerEventHandlers) =>\n provides?.registerAlways({\n scope: pageIndex !== undefined ? { type: 'page', pageIndex } : { type: 'global' },\n handlers,\n }),\n };\n}\n\nexport function useIsPageExclusive() {\n const { provides: cap } = useInteractionManagerCapability();\n\n const [isPageExclusive, setIsPageExclusive] = useState<boolean>(() => {\n const m = cap?.getActiveInteractionMode();\n return m?.scope === 'page' && !!m.exclusive;\n });\n\n useEffect(() => {\n if (!cap) return;\n\n return cap.onModeChange(() => {\n const mode = cap.getActiveInteractionMode();\n setIsPageExclusive(mode?.scope === 'page' && !!mode?.exclusive);\n });\n }, [cap]);\n\n return isPageExclusive;\n}\n","import { ReactNode, useEffect, useRef } from 'react';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability } from '../hooks';\n\ninterface GlobalPointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n}\n\nexport const GlobalPointerProvider = ({ children, ...props }: GlobalPointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(cap, { type: 'global' }, ref.current);\n }, [cap]);\n\n return (\n <div ref={ref} {...props}>\n {children}\n </div>\n );\n};\n","import { Position } from '@embedpdf/models';\nimport type {\n InteractionManagerCapability,\n InteractionScope,\n PointerEventHandlers,\n} from '@embedpdf/plugin-interaction-manager';\n\n/**\n * Hook one DOM element into the interaction-manager.\n * – keeps handlers & cursor in-sync with the current mode\n * – returns a teardown fn for React/Preact effects\n */\nexport function createPointerProvider(\n cap: InteractionManagerCapability,\n scope: InteractionScope,\n element: HTMLElement,\n convertEventToPoint?: (evt: PointerEvent, host: HTMLElement) => Position,\n) {\n /* ------------------------------------------------------------------ */\n /* active handler set – hot-swapped on every mode change */\n /* ------------------------------------------------------------------ */\n let active: PointerEventHandlers | null = cap.getHandlersForScope(scope);\n\n const stopMode = cap.onModeChange(() => {\n if (scope.type === 'global') {\n const mode = cap.getActiveInteractionMode();\n element.style.cursor = mode?.scope === 'global' ? (mode.cursor ?? 'auto') : 'auto';\n }\n active = cap.getHandlersForScope(scope);\n });\n\n const stopHandler = cap.onHandlerChange(() => {\n active = cap.getHandlersForScope(scope);\n });\n\n /* ------------------------------------------------------------------ */\n /* cursor */\n /* ------------------------------------------------------------------ */\n const modeNow = cap.getActiveInteractionMode();\n const cursorNow = cap.getCurrentCursor();\n\n /** initial cursor -------------------------------------------------- */\n if (scope.type === 'global') {\n // global wrapper only shows the cursor while a *global* mode is active\n element.style.cursor = modeNow?.scope === 'global' ? cursorNow : 'auto';\n } else {\n // page wrappers always mirror the latest cursor\n element.style.cursor = cursorNow;\n }\n\n const stopCursor = cap.onCursorChange((c) => {\n /** ❖ Propagation rule\n * ─────────────────\n * • global provider updates its cursor *only* while the active\n * mode itself is ‘global’.\n * • page providers always sync (so they show the cursor during\n * a global mode as well). */\n if (scope.type === 'global') {\n const isGlobalMode = cap.getActiveInteractionMode()?.scope === 'global';\n if (!isGlobalMode) return; // active mode is page-scoped → ignore\n }\n element.style.cursor = c;\n });\n\n /* ------------------------------------------------------------------ */\n /* event wiring */\n /* ------------------------------------------------------------------ */\n type K = keyof PointerEventHandlers;\n const domEvent: Record<K, keyof HTMLElementEventMap> = {\n onPointerDown: 'pointerdown',\n onPointerUp: 'pointerup',\n onPointerMove: 'pointermove',\n onPointerEnter: 'pointerenter',\n onPointerLeave: 'pointerleave',\n onPointerCancel: 'pointercancel',\n };\n\n /* one stable EventListener per key -> needed for removeEventListener */\n const listeners: Partial<Record<K, EventListener>> = {};\n\n const toPos = (e: PointerEvent, host: HTMLElement): Position => {\n if (convertEventToPoint) return convertEventToPoint(e, host);\n const r = host.getBoundingClientRect();\n return { x: e.clientX - r.left, y: e.clientY - r.top };\n };\n\n (Object.keys(domEvent) as K[]).forEach((k) => {\n listeners[k] = (evt: Event) => {\n const pe = evt as PointerEvent; // safe – we only attach to pointer*\n active?.[k]?.(toPos(pe, element), pe);\n /* if you need to stop default behaviour when no handler is active:\n * if (!active?.[k]) pe.preventDefault(); */\n };\n element.addEventListener(domEvent[k], listeners[k]!);\n });\n\n /* ------------------------------------------------------------------ */\n /* teardown */\n /* ------------------------------------------------------------------ */\n return () => {\n (Object.keys(domEvent) as K[]).forEach((k) =>\n element.removeEventListener(domEvent[k], listeners[k]!),\n );\n stopMode();\n stopCursor();\n stopHandler();\n };\n}\n","import { ReactNode, useEffect, useRef } from 'react';\nimport { Position } from '@embedpdf/models';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability, useIsPageExclusive } from '../hooks';\n\ninterface PagePointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n pageIndex: number;\n convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;\n}\n\nexport const PagePointerProvider = ({\n pageIndex,\n children,\n convertEventToPoint,\n ...props\n}: PagePointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n const isPageExclusive = useIsPageExclusive();\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(\n cap,\n { type: 'page', pageIndex },\n ref.current,\n convertEventToPoint,\n );\n }, [cap, pageIndex, convertEventToPoint]);\n\n return (\n <div ref={ref} {...props}>\n {children}\n {isPageExclusive && (\n <div style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }} />\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/index.ts","../../src/react/hooks/use-interaction-manager.ts","../../src/react/components/global-pointer-provider.tsx","../../src/shared/utils.ts","../../src/react/components/page-pointer-provider.tsx"],"sourcesContent":["export * from './hooks';\nexport * from './components';\n","import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport {\n initialState,\n InteractionManagerPlugin,\n InteractionManagerState,\n PointerEventHandlers,\n} from '@embedpdf/plugin-interaction-manager';\nimport { useState, useEffect } from 'react';\n\nexport const useInteractionManagerPlugin = () =>\n usePlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id);\nexport const useInteractionManagerCapability = () =>\n useCapability<InteractionManagerPlugin>(InteractionManagerPlugin.id);\n\nexport function useInteractionManager() {\n const { provides } = useInteractionManagerCapability();\n const [state, setState] = useState<InteractionManagerState>(initialState);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onStateChange((state) => {\n setState(state);\n });\n }, [provides]);\n\n return {\n provides,\n state,\n };\n}\n\nexport function useCursor() {\n const { provides } = useInteractionManagerCapability();\n return {\n setCursor: (token: string, cursor: string, prio = 0) => {\n provides?.setCursor(token, cursor, prio);\n },\n removeCursor: (token: string) => {\n provides?.removeCursor(token);\n },\n };\n}\n\ninterface UsePointerHandlersOptions {\n modeId?: string;\n pageIndex?: number;\n}\n\nexport function usePointerHandlers({ modeId, pageIndex }: UsePointerHandlersOptions) {\n const { provides } = useInteractionManagerCapability();\n return {\n register: modeId\n ? (handlers: PointerEventHandlers) =>\n provides?.registerHandlers({ modeId, handlers, pageIndex })\n : (handlers: PointerEventHandlers) =>\n provides?.registerAlways({\n scope: pageIndex !== undefined ? { type: 'page', pageIndex } : { type: 'global' },\n handlers,\n }),\n };\n}\n\nexport function useIsPageExclusive() {\n const { provides: cap } = useInteractionManagerCapability();\n\n const [isPageExclusive, setIsPageExclusive] = useState<boolean>(() => {\n const m = cap?.getActiveInteractionMode();\n return m?.scope === 'page' && !!m.exclusive;\n });\n\n useEffect(() => {\n if (!cap) return;\n\n return cap.onModeChange(() => {\n const mode = cap.getActiveInteractionMode();\n setIsPageExclusive(mode?.scope === 'page' && !!mode?.exclusive);\n });\n }, [cap]);\n\n return isPageExclusive;\n}\n","import { ReactNode, useEffect, useRef } from 'react';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability } from '../hooks';\n\ninterface GlobalPointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nexport const GlobalPointerProvider = ({\n children,\n style,\n ...props\n}: GlobalPointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(cap, { type: 'global' }, ref.current);\n }, [cap]);\n\n return (\n <div\n ref={ref}\n style={{\n width: '100%',\n height: '100%',\n ...style,\n }}\n {...props}\n >\n {children}\n </div>\n );\n};\n","import { Position } from '@embedpdf/models';\nimport type {\n InteractionManagerCapability,\n InteractionScope,\n PointerEventHandlers,\n} from '@embedpdf/plugin-interaction-manager';\n\n/**\n * Hook one DOM element into the interaction-manager.\n * – keeps handlers & cursor in-sync with the current mode\n * – returns a teardown fn for React/Preact effects\n */\nexport function createPointerProvider(\n cap: InteractionManagerCapability,\n scope: InteractionScope,\n element: HTMLElement,\n convertEventToPoint?: (evt: PointerEvent, host: HTMLElement) => Position,\n) {\n /* ------------------------------------------------------------------ */\n /* active handler set – hot-swapped on every mode change */\n /* ------------------------------------------------------------------ */\n let active: PointerEventHandlers | null = cap.getHandlersForScope(scope);\n\n const stopMode = cap.onModeChange(() => {\n if (scope.type === 'global') {\n const mode = cap.getActiveInteractionMode();\n element.style.cursor = mode?.scope === 'global' ? (mode.cursor ?? 'auto') : 'auto';\n }\n active = cap.getHandlersForScope(scope);\n });\n\n const stopHandler = cap.onHandlerChange(() => {\n active = cap.getHandlersForScope(scope);\n });\n\n /* ------------------------------------------------------------------ */\n /* cursor */\n /* ------------------------------------------------------------------ */\n const modeNow = cap.getActiveInteractionMode();\n const cursorNow = cap.getCurrentCursor();\n\n /** initial cursor -------------------------------------------------- */\n if (scope.type === 'global') {\n // global wrapper only shows the cursor while a *global* mode is active\n element.style.cursor = modeNow?.scope === 'global' ? cursorNow : 'auto';\n } else {\n // page wrappers always mirror the latest cursor\n element.style.cursor = cursorNow;\n }\n\n const stopCursor = cap.onCursorChange((c) => {\n /** ❖ Propagation rule\n * ─────────────────\n * • global provider updates its cursor *only* while the active\n * mode itself is ‘global’.\n * • page providers always sync (so they show the cursor during\n * a global mode as well). */\n if (scope.type === 'global') {\n const isGlobalMode = cap.getActiveInteractionMode()?.scope === 'global';\n if (!isGlobalMode) return; // active mode is page-scoped → ignore\n }\n element.style.cursor = c;\n });\n\n /* ------------------------------------------------------------------ */\n /* event wiring */\n /* ------------------------------------------------------------------ */\n type K = keyof PointerEventHandlers;\n const domEvent: Record<K, keyof HTMLElementEventMap> = {\n onPointerDown: 'pointerdown',\n onPointerUp: 'pointerup',\n onPointerMove: 'pointermove',\n onPointerEnter: 'pointerenter',\n onPointerLeave: 'pointerleave',\n onPointerCancel: 'pointercancel',\n };\n\n /* one stable EventListener per key -> needed for removeEventListener */\n const listeners: Partial<Record<K, EventListener>> = {};\n\n const toPos = (e: PointerEvent, host: HTMLElement): Position => {\n if (convertEventToPoint) return convertEventToPoint(e, host);\n const r = host.getBoundingClientRect();\n return { x: e.clientX - r.left, y: e.clientY - r.top };\n };\n\n (Object.keys(domEvent) as K[]).forEach((k) => {\n listeners[k] = (evt: Event) => {\n const pe = evt as PointerEvent; // safe – we only attach to pointer*\n active?.[k]?.(toPos(pe, element), pe);\n /* if you need to stop default behaviour when no handler is active:\n * if (!active?.[k]) pe.preventDefault(); */\n };\n element.addEventListener(domEvent[k], listeners[k]!);\n });\n\n /* ------------------------------------------------------------------ */\n /* teardown */\n /* ------------------------------------------------------------------ */\n return () => {\n (Object.keys(domEvent) as K[]).forEach((k) =>\n element.removeEventListener(domEvent[k], listeners[k]!),\n );\n stopMode();\n stopCursor();\n stopHandler();\n };\n}\n","import { ReactNode, useEffect, useRef, useCallback } from 'react';\nimport { Position, restorePosition } from '@embedpdf/models';\nimport { createPointerProvider } from '../../shared/utils';\n\nimport { useInteractionManagerCapability, useIsPageExclusive } from '../hooks';\n\ninterface PagePointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n pageIndex: number;\n pageWidth: number;\n pageHeight: number;\n rotation: number;\n scale: number;\n style?: React.CSSProperties;\n convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;\n}\n\nexport const PagePointerProvider = ({\n pageIndex,\n children,\n pageWidth,\n pageHeight,\n rotation,\n scale,\n convertEventToPoint,\n style,\n ...props\n}: PagePointerProviderProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { provides: cap } = useInteractionManagerCapability();\n const isPageExclusive = useIsPageExclusive();\n\n // Memoize the default conversion function\n const defaultConvertEventToPoint = useCallback(\n (event: PointerEvent, element: HTMLElement): Position => {\n const rect = element.getBoundingClientRect();\n const displayPoint = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n };\n return restorePosition(\n { width: pageWidth, height: pageHeight },\n displayPoint,\n rotation,\n scale,\n );\n },\n [pageWidth, pageHeight, rotation, scale],\n );\n\n useEffect(() => {\n if (!cap || !ref.current) return;\n\n return createPointerProvider(\n cap,\n { type: 'page', pageIndex },\n ref.current,\n convertEventToPoint || defaultConvertEventToPoint,\n );\n }, [cap, pageIndex, convertEventToPoint, defaultConvertEventToPoint]);\n\n return (\n <div\n ref={ref}\n style={{\n position: 'absolute',\n inset: 0,\n mixBlendMode: 'multiply',\n isolation: 'isolate',\n ...style,\n }}\n {...props}\n >\n {children}\n {isPageExclusive && (\n <div style={{ position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 }} />\n )}\n </div>\n );\n};\n"],"mappings":"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","names":["import_react","state","import_react","import_react","import_jsx_runtime"]}
|
package/dist/react/index.d.cts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as _embedpdf_plugin_interaction_manager from '@embedpdf/plugin-interaction-manager';
|
|
2
|
-
import { InteractionManagerPlugin, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
2
|
+
import { InteractionManagerPlugin, InteractionManagerState, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
import { Position } from '@embedpdf/models';
|
|
6
6
|
|
|
7
|
-
declare const
|
|
7
|
+
declare const useInteractionManagerPlugin: () => {
|
|
8
8
|
plugin: InteractionManagerPlugin | null;
|
|
9
9
|
isLoading: boolean;
|
|
10
10
|
ready: Promise<void>;
|
|
@@ -14,6 +14,10 @@ declare const useInteractionManagerCapability: () => {
|
|
|
14
14
|
isLoading: boolean;
|
|
15
15
|
ready: Promise<void>;
|
|
16
16
|
};
|
|
17
|
+
declare function useInteractionManager(): {
|
|
18
|
+
provides: Readonly<_embedpdf_plugin_interaction_manager.InteractionManagerCapability> | null;
|
|
19
|
+
state: InteractionManagerState;
|
|
20
|
+
};
|
|
17
21
|
declare function useCursor(): {
|
|
18
22
|
setCursor: (token: string, cursor: string, prio?: number) => void;
|
|
19
23
|
removeCursor: (token: string) => void;
|
|
@@ -29,14 +33,20 @@ declare function useIsPageExclusive(): boolean;
|
|
|
29
33
|
|
|
30
34
|
interface GlobalPointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
31
35
|
children: ReactNode;
|
|
36
|
+
style?: React.CSSProperties;
|
|
32
37
|
}
|
|
33
|
-
declare const GlobalPointerProvider: ({ children, ...props }: GlobalPointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
38
|
+
declare const GlobalPointerProvider: ({ children, style, ...props }: GlobalPointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
34
39
|
|
|
35
40
|
interface PagePointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
36
41
|
children: ReactNode;
|
|
37
42
|
pageIndex: number;
|
|
43
|
+
pageWidth: number;
|
|
44
|
+
pageHeight: number;
|
|
45
|
+
rotation: number;
|
|
46
|
+
scale: number;
|
|
47
|
+
style?: React.CSSProperties;
|
|
38
48
|
convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;
|
|
39
49
|
}
|
|
40
|
-
declare const PagePointerProvider: ({ pageIndex, children, convertEventToPoint, ...props }: PagePointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
50
|
+
declare const PagePointerProvider: ({ pageIndex, children, pageWidth, pageHeight, rotation, scale, convertEventToPoint, style, ...props }: PagePointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
41
51
|
|
|
42
|
-
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useIsPageExclusive, usePointerHandlers };
|
|
52
|
+
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useInteractionManagerPlugin, useIsPageExclusive, usePointerHandlers };
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as _embedpdf_plugin_interaction_manager from '@embedpdf/plugin-interaction-manager';
|
|
2
|
-
import { InteractionManagerPlugin, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
2
|
+
import { InteractionManagerPlugin, InteractionManagerState, PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
import { Position } from '@embedpdf/models';
|
|
6
6
|
|
|
7
|
-
declare const
|
|
7
|
+
declare const useInteractionManagerPlugin: () => {
|
|
8
8
|
plugin: InteractionManagerPlugin | null;
|
|
9
9
|
isLoading: boolean;
|
|
10
10
|
ready: Promise<void>;
|
|
@@ -14,6 +14,10 @@ declare const useInteractionManagerCapability: () => {
|
|
|
14
14
|
isLoading: boolean;
|
|
15
15
|
ready: Promise<void>;
|
|
16
16
|
};
|
|
17
|
+
declare function useInteractionManager(): {
|
|
18
|
+
provides: Readonly<_embedpdf_plugin_interaction_manager.InteractionManagerCapability> | null;
|
|
19
|
+
state: InteractionManagerState;
|
|
20
|
+
};
|
|
17
21
|
declare function useCursor(): {
|
|
18
22
|
setCursor: (token: string, cursor: string, prio?: number) => void;
|
|
19
23
|
removeCursor: (token: string) => void;
|
|
@@ -29,14 +33,20 @@ declare function useIsPageExclusive(): boolean;
|
|
|
29
33
|
|
|
30
34
|
interface GlobalPointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
31
35
|
children: ReactNode;
|
|
36
|
+
style?: React.CSSProperties;
|
|
32
37
|
}
|
|
33
|
-
declare const GlobalPointerProvider: ({ children, ...props }: GlobalPointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
38
|
+
declare const GlobalPointerProvider: ({ children, style, ...props }: GlobalPointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
34
39
|
|
|
35
40
|
interface PagePointerProviderProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
36
41
|
children: ReactNode;
|
|
37
42
|
pageIndex: number;
|
|
43
|
+
pageWidth: number;
|
|
44
|
+
pageHeight: number;
|
|
45
|
+
rotation: number;
|
|
46
|
+
scale: number;
|
|
47
|
+
style?: React.CSSProperties;
|
|
38
48
|
convertEventToPoint?: (event: PointerEvent, element: HTMLElement) => Position;
|
|
39
49
|
}
|
|
40
|
-
declare const PagePointerProvider: ({ pageIndex, children, convertEventToPoint, ...props }: PagePointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
50
|
+
declare const PagePointerProvider: ({ pageIndex, children, pageWidth, pageHeight, rotation, scale, convertEventToPoint, style, ...props }: PagePointerProviderProps) => react_jsx_runtime.JSX.Element;
|
|
41
51
|
|
|
42
|
-
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useIsPageExclusive, usePointerHandlers };
|
|
52
|
+
export { GlobalPointerProvider, PagePointerProvider, useCursor, useInteractionManager, useInteractionManagerCapability, useInteractionManagerPlugin, useIsPageExclusive, usePointerHandlers };
|