@bwp-web/canvas 0.8.2 → 0.8.3
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/context/EditCanvasContext.d.ts +19 -3
- package/dist/context/EditCanvasContext.d.ts.map +1 -1
- package/dist/context/ViewCanvasContext.d.ts +19 -4
- package/dist/context/ViewCanvasContext.d.ts.map +1 -1
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/useCanvasRef.d.ts +13 -0
- package/dist/context/useCanvasRef.d.ts.map +1 -0
- package/dist/hooks/useCanvasClick.d.ts +14 -0
- package/dist/hooks/useCanvasClick.d.ts.map +1 -1
- package/dist/hooks/useCanvasEvents.d.ts +13 -0
- package/dist/hooks/useCanvasEvents.d.ts.map +1 -1
- package/dist/hooks/useCanvasTooltip.d.ts +13 -0
- package/dist/hooks/useCanvasTooltip.d.ts.map +1 -1
- package/dist/hooks/useEditCanvas.d.ts +28 -3
- package/dist/hooks/useEditCanvas.d.ts.map +1 -1
- package/dist/hooks/useViewCanvas.d.ts +22 -0
- package/dist/hooks/useViewCanvas.d.ts.map +1 -1
- package/dist/index.cjs +341 -188
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +345 -193
- package/dist/index.js.map +1 -1
- package/dist/overlay/FixedSizeContent.d.ts +1 -1
- package/dist/overlay/ObjectOverlay.d.ts +16 -3
- package/dist/overlay/ObjectOverlay.d.ts.map +1 -1
- package/dist/overlay/OverlayBadge.d.ts +1 -1
- package/dist/overlay/OverlayContent.d.ts +1 -1
- package/package.json +1 -1
|
@@ -12,12 +12,23 @@ export interface EditCanvasProviderProps {
|
|
|
12
12
|
* to all descendants via React context.
|
|
13
13
|
*
|
|
14
14
|
* Use {@link useEditCanvasContext} in any descendant to access `canvasRef`,
|
|
15
|
-
* `isDirty`, `
|
|
16
|
-
*
|
|
15
|
+
* `isDirty`, `objects`, `isLoading`, `lockLightMode`, `viewport`,
|
|
16
|
+
* `setMode`, `setBackground`, and every other value that `useEditCanvas`
|
|
17
|
+
* returns — without prop drilling or bridge contexts.
|
|
18
|
+
*
|
|
19
|
+
* Descendant components can also use {@link ObjectOverlay},
|
|
20
|
+
* {@link useCanvasEvents}, {@link useCanvasTooltip}, and
|
|
21
|
+
* {@link useCanvasClick} without passing `canvasRef` explicitly — they
|
|
22
|
+
* read it from the nearest provider automatically.
|
|
17
23
|
*
|
|
18
24
|
* @example
|
|
19
25
|
* ```tsx
|
|
20
|
-
* <EditCanvasProvider options={{
|
|
26
|
+
* <EditCanvasProvider options={{
|
|
27
|
+
* canvasData: savedJson,
|
|
28
|
+
* invertBackground: isDarkMode,
|
|
29
|
+
* trackChanges: true,
|
|
30
|
+
* history: true,
|
|
31
|
+
* }}>
|
|
21
32
|
* <MyCanvas />
|
|
22
33
|
* <MySidebar />
|
|
23
34
|
* <MyToolbar />
|
|
@@ -42,4 +53,9 @@ export declare function EditCanvasProvider({ options, children, }: EditCanvasPro
|
|
|
42
53
|
* Throws if called outside of a provider.
|
|
43
54
|
*/
|
|
44
55
|
export declare function useEditCanvasContext(): EditCanvasContextValue;
|
|
56
|
+
/**
|
|
57
|
+
* Like {@link useEditCanvasContext} but returns `null` instead of throwing
|
|
58
|
+
* when called outside of an {@link EditCanvasProvider}.
|
|
59
|
+
*/
|
|
60
|
+
export declare function useEditCanvasContextSafe(): EditCanvasContextValue | null;
|
|
45
61
|
//# sourceMappingURL=EditCanvasContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditCanvasContext.d.ts","sourceRoot":"","sources":["../../src/context/EditCanvasContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAItE,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"EditCanvasContext.d.ts","sourceRoot":"","sources":["../../src/context/EditCanvasContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAItE,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,GACT,EAAE,uBAAuB,2CAOzB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,sBAAsB,GAAG,IAAI,CAExE"}
|
|
@@ -12,18 +12,28 @@ export interface ViewCanvasProviderProps {
|
|
|
12
12
|
* to all descendants via React context.
|
|
13
13
|
*
|
|
14
14
|
* Use {@link useViewCanvasContext} in any descendant to access `canvasRef`,
|
|
15
|
-
* `viewport`, `setObjectStyle`, and every other
|
|
16
|
-
* returns — without prop drilling or bridge
|
|
15
|
+
* `viewport`, `objects`, `isLoading`, `setObjectStyle`, and every other
|
|
16
|
+
* value that `useViewCanvas` returns — without prop drilling or bridge
|
|
17
|
+
* contexts.
|
|
18
|
+
*
|
|
19
|
+
* Descendant components can also use {@link ObjectOverlay},
|
|
20
|
+
* {@link useCanvasEvents}, {@link useCanvasTooltip}, and
|
|
21
|
+
* {@link useCanvasClick} without passing `canvasRef` explicitly — they
|
|
22
|
+
* read it from the nearest provider automatically.
|
|
17
23
|
*
|
|
18
24
|
* @example
|
|
19
25
|
* ```tsx
|
|
20
|
-
* <ViewCanvasProvider options={{
|
|
26
|
+
* <ViewCanvasProvider options={{
|
|
27
|
+
* canvasData: savedJson,
|
|
28
|
+
* invertBackground: isDarkMode,
|
|
29
|
+
* scaledStrokes: true,
|
|
30
|
+
* }}>
|
|
21
31
|
* <MyCanvas />
|
|
22
32
|
* <MyToolbar />
|
|
23
33
|
* </ViewCanvasProvider>
|
|
24
34
|
*
|
|
25
35
|
* function MyCanvas() {
|
|
26
|
-
* const { onReady } = useViewCanvasContext();
|
|
36
|
+
* const { onReady, objects, isLoading } = useViewCanvasContext();
|
|
27
37
|
* return <Canvas onReady={onReady} />;
|
|
28
38
|
* }
|
|
29
39
|
*
|
|
@@ -41,4 +51,9 @@ export declare function ViewCanvasProvider({ options, children, }: ViewCanvasPro
|
|
|
41
51
|
* Throws if called outside of a provider.
|
|
42
52
|
*/
|
|
43
53
|
export declare function useViewCanvasContext(): ViewCanvasContextValue;
|
|
54
|
+
/**
|
|
55
|
+
* Like {@link useViewCanvasContext} but returns `null` instead of throwing
|
|
56
|
+
* when called outside of a {@link ViewCanvasProvider}.
|
|
57
|
+
*/
|
|
58
|
+
export declare function useViewCanvasContextSafe(): ViewCanvasContextValue | null;
|
|
44
59
|
//# sourceMappingURL=ViewCanvasContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewCanvasContext.d.ts","sourceRoot":"","sources":["../../src/context/ViewCanvasContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAItE,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"ViewCanvasContext.d.ts","sourceRoot":"","sources":["../../src/context/ViewCanvasContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,2EAA2E;AAC3E,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAItE,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,GACT,EAAE,uBAAuB,2CAOzB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,sBAAsB,CAQ7D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,sBAAsB,GAAG,IAAI,CAExE"}
|
package/dist/context/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export { EditCanvasProvider, useEditCanvasContext } from './EditCanvasContext';
|
|
|
2
2
|
export type { EditCanvasProviderProps, EditCanvasContextValue, } from './EditCanvasContext';
|
|
3
3
|
export { ViewCanvasProvider, useViewCanvasContext } from './ViewCanvasContext';
|
|
4
4
|
export type { ViewCanvasProviderProps, ViewCanvasContextValue, } from './ViewCanvasContext';
|
|
5
|
+
export { useCanvasRef } from './useCanvasRef';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
import type { Canvas as FabricCanvas } from 'fabric';
|
|
3
|
+
/**
|
|
4
|
+
* Read `canvasRef` from the nearest {@link ViewCanvasProvider} or
|
|
5
|
+
* {@link EditCanvasProvider}.
|
|
6
|
+
*
|
|
7
|
+
* Returns `null` if neither provider is present in the tree.
|
|
8
|
+
*
|
|
9
|
+
* Both context hooks are called unconditionally (Rules-of-Hooks compliant).
|
|
10
|
+
* In practice only one provider will be active at a time.
|
|
11
|
+
*/
|
|
12
|
+
export declare function useCanvasRef(): RefObject<FabricCanvas | null> | null;
|
|
13
|
+
//# sourceMappingURL=useCanvasRef.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCanvasRef.d.ts","sourceRoot":"","sources":["../../src/context/useCanvasRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAC;AAIrD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,CAIpE"}
|
|
@@ -6,6 +6,20 @@ export interface UseCanvasClickOptions {
|
|
|
6
6
|
/** Maximum duration in milliseconds for the gesture to count as a click. Default: 300. */
|
|
7
7
|
maxDuration?: number;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Distinguish clicks from pan gestures on a canvas, using the `canvasRef`
|
|
11
|
+
* from the nearest {@link ViewCanvasProvider} or {@link EditCanvasProvider}.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* useCanvasClick((target) => {
|
|
16
|
+
* if (target?.data?.id) {
|
|
17
|
+
* navigate(`/locations/${target.data.id}`);
|
|
18
|
+
* }
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useCanvasClick(onClick: (target: FabricObject | undefined) => void, options?: UseCanvasClickOptions): void;
|
|
9
23
|
/**
|
|
10
24
|
* Distinguish clicks from pan gestures on a canvas.
|
|
11
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasClick.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasClick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EAEtB,YAAY,EACb,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"useCanvasClick.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasClick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EAEtB,YAAY,EACb,MAAM,QAAQ,CAAC;AAGhB,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC;AACR;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,OAAO,EAAE,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,EACnD,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAAC"}
|
|
@@ -15,6 +15,19 @@ import type { Canvas as FabricCanvas, CanvasEvents } from 'fabric';
|
|
|
15
15
|
export type CanvasEventHandlers = {
|
|
16
16
|
[K in keyof CanvasEvents]?: (event: CanvasEvents[K]) => void;
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Subscribe to Fabric canvas events using the `canvasRef` from the nearest
|
|
20
|
+
* {@link ViewCanvasProvider} or {@link EditCanvasProvider}.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* useCanvasEvents({
|
|
25
|
+
* 'mouse:wheel': hideTooltip,
|
|
26
|
+
* 'object:moving': hideTooltip,
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function useCanvasEvents(events: CanvasEventHandlers): void;
|
|
18
31
|
/**
|
|
19
32
|
* Subscribe to Fabric canvas events with automatic cleanup.
|
|
20
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"useCanvasEvents.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGnE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,mBAAmB,GAAG;KAC/B,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CAC7D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;AACnE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAAC"}
|
|
@@ -15,6 +15,19 @@ export interface CanvasTooltipState<T> {
|
|
|
15
15
|
y: number;
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Track mouse hover over canvas objects and return tooltip state, using the
|
|
20
|
+
* `canvasRef` from the nearest {@link ViewCanvasProvider} or
|
|
21
|
+
* {@link EditCanvasProvider}.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* const tooltip = useCanvasTooltip({
|
|
26
|
+
* getContent: (obj) => obj.data ? { id: obj.data.id, type: obj.data.type } : null,
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function useCanvasTooltip<T>(options: UseCanvasTooltipOptions<T>): CanvasTooltipState<T>;
|
|
18
31
|
/**
|
|
19
32
|
* Track mouse hover over canvas objects and return tooltip state.
|
|
20
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasTooltip.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EAEtB,YAAY,EACb,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"useCanvasTooltip.d.ts","sourceRoot":"","sources":["../../src/hooks/useCanvasTooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EAEtB,YAAY,EACb,MAAM,QAAQ,CAAC;AAGhB,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,wFAAwF;IACxF,UAAU,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,CAAC,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC;IACjB,4EAA4E;IAC5E,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;IAClB,gFAAgF;IAChF,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAClC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACzB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,SAAS,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EACzC,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAClC,kBAAkB,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -4,7 +4,7 @@ import { type ObjectAlignmentOptions, type RotationSnapOptions } from '../alignm
|
|
|
4
4
|
import { type VertexEditOptions } from '../interactions';
|
|
5
5
|
import { type ResizeImageOptions } from '../background';
|
|
6
6
|
import { type HistoryOptions } from '../history';
|
|
7
|
-
import type { ModeSetup } from '../types';
|
|
7
|
+
import type { ModeSetup, CanvasJSON } from '../types';
|
|
8
8
|
export interface UseEditCanvasOptions {
|
|
9
9
|
/** Configure pan and zoom. Pass `false` to disable, or options to customize. Default: enabled. */
|
|
10
10
|
panAndZoom?: boolean | PanAndZoomOptions;
|
|
@@ -59,7 +59,7 @@ export interface UseEditCanvasOptions {
|
|
|
59
59
|
* Listens for `object:added`, `object:removed`, `object:modified`, and
|
|
60
60
|
* `background:modified` events. Call `resetDirty()` after a successful
|
|
61
61
|
* save to clear the flag, or `markDirty()` to set it manually.
|
|
62
|
-
* Default:
|
|
62
|
+
* Pass `false` to disable. Default: enabled.
|
|
63
63
|
*/
|
|
64
64
|
trackChanges?: boolean;
|
|
65
65
|
/**
|
|
@@ -73,6 +73,23 @@ export interface UseEditCanvasOptions {
|
|
|
73
73
|
* Default: disabled.
|
|
74
74
|
*/
|
|
75
75
|
history?: boolean | HistoryOptions;
|
|
76
|
+
/**
|
|
77
|
+
* Canvas data to load automatically after initialisation.
|
|
78
|
+
* When provided, `loadCanvas` is called internally before the user's
|
|
79
|
+
* `onReady` callback, and the resulting objects are available via the
|
|
80
|
+
* returned `objects` array.
|
|
81
|
+
*/
|
|
82
|
+
canvasData?: CanvasJSON | object;
|
|
83
|
+
/**
|
|
84
|
+
* Filter function for loaded objects. Passed to `loadCanvas` as
|
|
85
|
+
* `options.filter`. Only relevant when `canvasData` is provided.
|
|
86
|
+
*/
|
|
87
|
+
filter?: (obj: FabricObject) => boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Whether the background image should have an Invert filter applied.
|
|
90
|
+
* Reactive — changes are applied automatically without remounting.
|
|
91
|
+
*/
|
|
92
|
+
invertBackground?: boolean;
|
|
76
93
|
}
|
|
77
94
|
/**
|
|
78
95
|
* Hook that provides a batteries-included canvas experience with full
|
|
@@ -103,6 +120,10 @@ export declare function useEditCanvas(options?: UseEditCanvasOptions): {
|
|
|
103
120
|
canvasRef: import("react").RefObject<FabricCanvas | null>;
|
|
104
121
|
/** Current zoom level (reactive). */
|
|
105
122
|
zoom: number;
|
|
123
|
+
/** Loaded objects (reactive). Populated when `canvasData` is provided. */
|
|
124
|
+
objects: FabricObject<Partial<import("fabric").FabricObjectProps>, import("fabric").SerializedObjectProps, import("fabric").ObjectEvents>[];
|
|
125
|
+
/** Whether canvas data is currently being loaded. */
|
|
126
|
+
isLoading: boolean;
|
|
106
127
|
/** Currently selected objects (reactive). */
|
|
107
128
|
selected: FabricObject<Partial<import("fabric").FabricObjectProps>, import("fabric").SerializedObjectProps, import("fabric").ObjectEvents>[];
|
|
108
129
|
/** Viewport controls. */
|
|
@@ -151,7 +172,7 @@ export declare function useEditCanvas(options?: UseEditCanvasOptions): {
|
|
|
151
172
|
setBackground: (url: string, bgOpts?: {
|
|
152
173
|
preserveContrast?: boolean;
|
|
153
174
|
}) => Promise<import("fabric").FabricImage<Partial<import("fabric").ImageProps>, import("fabric").SerializedImageProps, import("fabric").ObjectEvents>>;
|
|
154
|
-
/** Whether the canvas has been modified since the last `resetDirty()` call.
|
|
175
|
+
/** Whether the canvas has been modified since the last `resetDirty()` call. Enabled by default (disable via `trackChanges: false`). */
|
|
155
176
|
isDirty: boolean;
|
|
156
177
|
/** Reset the dirty flag (e.g., after a successful save). */
|
|
157
178
|
resetDirty: () => void;
|
|
@@ -165,5 +186,9 @@ export declare function useEditCanvas(options?: UseEditCanvasOptions): {
|
|
|
165
186
|
canUndo: boolean;
|
|
166
187
|
/** Whether a redo operation is available (reactive). Requires `history: true`. */
|
|
167
188
|
canRedo: boolean;
|
|
189
|
+
/** Whether the canvas is locked to light mode. Read from loaded canvas data. */
|
|
190
|
+
lockLightMode: boolean | undefined;
|
|
191
|
+
/** Update lockLightMode on both the canvas instance and React state. */
|
|
192
|
+
setLockLightMode: (value: boolean) => void;
|
|
168
193
|
};
|
|
169
194
|
//# sourceMappingURL=useEditCanvas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEditCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"useEditCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useEditCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAW,MAAM,QAAQ,CAAC;AAC5E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAIL,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtD,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC,mIAAmI;IACnI,SAAS,CAAC,EAAE,OAAO,GAAG,sBAAsB,CAAC;IAC7C;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAC7C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;IAChD;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,cAAc,CAAC;IACnC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;IACxC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IAqXtD,8CAA8C;sBAnSvC,YAAY;IAqSnB,oDAAoD;;IAEpD,qCAAqC;;IAErC,0EAA0E;;IAE1E,qDAAqD;;IAErD,6CAA6C;;IAE7C,yBAAyB;;QAtFzB,wCAAwC;;QAExC,wDAAwD;wBAbjB,YAAY;QAenD,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;QAEvD,6DAA6D;;;IA4E7D,+DAA+D;;IAE/D;;;;;;;;;;;;;;OAcG;qBA1W6B,SAAS,GAAG,IAAI;IA4WhD;;;;;;;OAOG;yBAnEO,MAAM,WAAW;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE;IAqEzD,uIAAuI;;IAEvI,4DAA4D;;IAE5D,oGAAoG;;IAEpG,sDAAsD;;IAEtD,iEAAiE;;IAEjE,mFAAmF;;IAEnF,kFAAkF;;IAElF,gFAAgF;;IAEhF,wEAAwE;8BAtJ/B,OAAO;EAwKrD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Canvas as FabricCanvas, type FabricObject } from 'fabric';
|
|
2
2
|
import { type PanAndZoomOptions } from '../viewport';
|
|
3
|
+
import type { CanvasJSON } from '../types';
|
|
3
4
|
/** Visual properties that can be updated on view-canvas objects. */
|
|
4
5
|
export interface ViewObjectStyle {
|
|
5
6
|
fill?: string;
|
|
@@ -30,6 +31,23 @@ export interface UseViewCanvasOptions {
|
|
|
30
31
|
* Pass a number to customize (default: 4), or `false` to disable.
|
|
31
32
|
*/
|
|
32
33
|
borderRadius?: number | false;
|
|
34
|
+
/**
|
|
35
|
+
* Canvas data to load automatically after initialisation.
|
|
36
|
+
* When provided, `loadCanvas` is called internally before the user's
|
|
37
|
+
* `onReady` callback, and the resulting objects are available via the
|
|
38
|
+
* returned `objects` array.
|
|
39
|
+
*/
|
|
40
|
+
canvasData?: CanvasJSON | object;
|
|
41
|
+
/**
|
|
42
|
+
* Filter function for loaded objects. Passed to `loadCanvas` as
|
|
43
|
+
* `options.filter`. Only relevant when `canvasData` is provided.
|
|
44
|
+
*/
|
|
45
|
+
filter?: (obj: FabricObject) => boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the background image should have an Invert filter applied.
|
|
48
|
+
* Reactive — changes are applied automatically without remounting.
|
|
49
|
+
*/
|
|
50
|
+
invertBackground?: boolean;
|
|
33
51
|
}
|
|
34
52
|
/**
|
|
35
53
|
* Hook that provides a view-only canvas experience.
|
|
@@ -52,6 +70,10 @@ export declare function useViewCanvas(options?: UseViewCanvasOptions): {
|
|
|
52
70
|
canvasRef: import("react").RefObject<FabricCanvas | null>;
|
|
53
71
|
/** Current zoom level (reactive). */
|
|
54
72
|
zoom: number;
|
|
73
|
+
/** Loaded objects (reactive). Populated when `canvasData` is provided. */
|
|
74
|
+
objects: FabricObject<Partial<import("fabric").FabricObjectProps>, import("fabric").SerializedObjectProps, import("fabric").ObjectEvents>[];
|
|
75
|
+
/** Whether canvas data is currently being loaded. */
|
|
76
|
+
isLoading: boolean;
|
|
55
77
|
/** Viewport controls. */
|
|
56
78
|
viewport: {
|
|
57
79
|
/** Reset viewport to default (no pan, zoom = 1), or fit to background if one is set. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AASrB,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"useViewCanvas.d.ts","sourceRoot":"","sources":["../../src/hooks/useViewCanvas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AASrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,oEAAoE;AACpE,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,GAAG,iBAAiB,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qEAAqE;IACrE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;IACxC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAUD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB;IA0KtD,8CAA8C;sBA/JvC,YAAY;IAiKnB,oDAAoD;;IAEpD,qCAAqC;;IAErC,0EAA0E;;IAE1E,qDAAqD;;IAErD,yBAAyB;;QAjFzB,wFAAwF;;QAExF,2DAA2D;;QAE3D,0DAA0D;;QAE1D,uDAAuD;;QAEvD,6DAA6D;;;IA2E7D,8DAA8D;yBA7D1B,MAAM,SAAS,eAAe;IA+DlE,sFAAsF;8BAtD/E,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;IAwDtC,qEAAqE;iCAjChE,MAAM,SAAS,eAAe;EAwCxC"}
|