@servicetitan/dte-pdf-editor 1.77.0 → 1.79.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.
- package/dist/components/pdf-canvas/canvas-controls.d.ts +24 -0
- package/dist/components/pdf-canvas/canvas-controls.d.ts.map +1 -0
- package/dist/components/pdf-canvas/canvas-controls.js +22 -0
- package/dist/components/pdf-canvas/canvas-controls.js.map +1 -0
- package/dist/components/pdf-canvas/pdf-canvas.d.ts +1 -0
- package/dist/components/pdf-canvas/pdf-canvas.d.ts.map +1 -1
- package/dist/components/pdf-canvas/pdf-canvas.js +6 -3
- package/dist/components/pdf-canvas/pdf-canvas.js.map +1 -1
- package/dist/components/pdf-editor/pdf-editor.d.ts +1 -0
- package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
- package/dist/components/pdf-editor/pdf-editor.js +2 -2
- package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-fields-overlay.d.ts +1 -0
- package/dist/components/pdf-fields-overlay/pdf-fields-overlay.d.ts.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js +2 -2
- package/dist/components/pdf-fields-overlay/pdf-fields-overlay.js.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts +1 -0
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.d.ts.map +1 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js +4 -1
- package/dist/components/pdf-fields-overlay/pdf-overlay-field.js.map +1 -1
- package/dist/components/pdf-view/pdf-view-field-container.d.ts +1 -0
- package/dist/components/pdf-view/pdf-view-field-container.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view-field-container.js +5 -4
- package/dist/components/pdf-view/pdf-view-field-container.js.map +1 -1
- package/dist/components/pdf-view/pdf-view.d.ts +2 -0
- package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
- package/dist/components/pdf-view/pdf-view.js +32 -5
- package/dist/components/pdf-view/pdf-view.js.map +1 -1
- package/dist/constants/pdf-editor.constants.d.ts +4 -0
- package/dist/constants/pdf-editor.constants.d.ts.map +1 -1
- package/dist/constants/pdf-editor.constants.js +4 -0
- package/dist/constants/pdf-editor.constants.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useFieldDrag.d.ts +2 -1
- package/dist/hooks/useFieldDrag.d.ts.map +1 -1
- package/dist/hooks/useFieldDrag.js +7 -6
- package/dist/hooks/useFieldDrag.js.map +1 -1
- package/dist/hooks/useFieldResize.d.ts +2 -1
- package/dist/hooks/useFieldResize.d.ts.map +1 -1
- package/dist/hooks/useFieldResize.js +7 -3
- package/dist/hooks/useFieldResize.js.map +1 -1
- package/dist/hooks/useZoom.d.ts +11 -0
- package/dist/hooks/useZoom.d.ts.map +1 -0
- package/dist/hooks/useZoom.js +14 -0
- package/dist/hooks/useZoom.js.map +1 -0
- package/dist/styles/pdf-canvas.css +24 -5
- package/dist/styles/pdf-editor.css +1 -0
- package/dist/styles/pdf-field-overlay.css +14 -0
- package/dist/styles/variables.css +10 -1
- package/dist/utils/field/field-drag.utils.d.ts +4 -2
- package/dist/utils/field/field-drag.utils.d.ts.map +1 -1
- package/dist/utils/field/field-drag.utils.js +14 -10
- package/dist/utils/field/field-drag.utils.js.map +1 -1
- package/dist/utils/field/field-reading-order.utils.d.ts +15 -0
- package/dist/utils/field/field-reading-order.utils.d.ts.map +1 -0
- package/dist/utils/field/field-reading-order.utils.js +33 -0
- package/dist/utils/field/field-reading-order.utils.js.map +1 -0
- package/dist/utils/field/field-resize.utils.d.ts +4 -2
- package/dist/utils/field/field-resize.utils.d.ts.map +1 -1
- package/dist/utils/field/field-resize.utils.js +12 -10
- package/dist/utils/field/field-resize.utils.js.map +1 -1
- package/dist/utils/field/get-field-bounds-style.utils.d.ts +7 -0
- package/dist/utils/field/get-field-bounds-style.utils.d.ts.map +1 -1
- package/dist/utils/field/get-field-bounds-style.utils.js +5 -5
- package/dist/utils/field/get-field-bounds-style.utils.js.map +1 -1
- package/dist/utils/field/index.d.ts +1 -0
- package/dist/utils/field/index.d.ts.map +1 -1
- package/dist/utils/field/index.js +1 -0
- package/dist/utils/field/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/pdf-canvas/canvas-controls.tsx +183 -0
- package/src/components/pdf-canvas/pdf-canvas.tsx +64 -33
- package/src/components/pdf-editor/pdf-editor.tsx +12 -2
- package/src/components/pdf-fields-overlay/pdf-fields-overlay.tsx +3 -0
- package/src/components/pdf-fields-overlay/pdf-overlay-field.tsx +5 -0
- package/src/components/pdf-view/pdf-view-field-container.tsx +6 -2
- package/src/components/pdf-view/pdf-view.tsx +85 -5
- package/src/constants/pdf-editor.constants.ts +5 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useFieldDrag.ts +10 -5
- package/src/hooks/useFieldResize.ts +16 -2
- package/src/hooks/useZoom.ts +25 -0
- package/src/styles/pdf-canvas.css +24 -5
- package/src/styles/pdf-editor.css +1 -0
- package/src/styles/pdf-field-overlay.css +14 -0
- package/src/styles/variables.css +10 -1
- package/src/utils/field/__tests__/field-reading-order.utils.test.ts +62 -0
- package/src/utils/field/field-drag.utils.ts +14 -8
- package/src/utils/field/field-reading-order.utils.ts +43 -0
- package/src/utils/field/field-resize.utils.ts +12 -8
- package/src/utils/field/get-field-bounds-style.utils.ts +17 -5
- package/src/utils/field/index.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFieldDrag.js","sourceRoot":"","sources":["../../src/hooks/useFieldDrag.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9F,OAAO,EACH,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,oBAAoB,GACvB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useFieldDrag.js","sourceRoot":"","sources":["../../src/hooks/useFieldDrag.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { type PdfField } from '../interface/types';
|
|
|
3
3
|
interface UseFieldResizeOptions {
|
|
4
4
|
pdfWrapperRef: RefObject<HTMLDivElement>;
|
|
5
5
|
onFieldResize: (fieldId: string, newWidth: number, newHeight: number, pageNumber: number) => void;
|
|
6
|
+
zoom?: number;
|
|
6
7
|
}
|
|
7
8
|
export interface UseFieldResizeReturn {
|
|
8
9
|
isResizing: boolean;
|
|
@@ -12,6 +13,6 @@ export interface UseFieldResizeReturn {
|
|
|
12
13
|
* Custom hook for handling field resize operations
|
|
13
14
|
* Manages resize state and coordinates field resizing with proper cleanup
|
|
14
15
|
*/
|
|
15
|
-
export declare const useFieldResize: ({ onFieldResize, pdfWrapperRef, }: UseFieldResizeOptions) => UseFieldResizeReturn;
|
|
16
|
+
export declare const useFieldResize: ({ onFieldResize, pdfWrapperRef, zoom, }: UseFieldResizeOptions) => UseFieldResizeReturn;
|
|
16
17
|
export {};
|
|
17
18
|
//# sourceMappingURL=useFieldResize.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFieldResize.d.ts","sourceRoot":"","sources":["../../src/hooks/useFieldResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,UAAU,qBAAqB;IAC3B,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,aAAa,EAAE,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACjB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"useFieldResize.d.ts","sourceRoot":"","sources":["../../src/hooks/useFieldResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAA+B,MAAM,OAAO,CAAC;AAC3E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,UAAU,qBAAqB;IAC3B,aAAa,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACzC,aAAa,EAAE,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACjB,IAAI,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC/E;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,yCAI5B,qBAAqB,KAAG,oBAgF1B,CAAC"}
|
|
@@ -4,13 +4,17 @@ import { handleFieldResize, handleFieldResizeStart } from '../utils';
|
|
|
4
4
|
* Custom hook for handling field resize operations
|
|
5
5
|
* Manages resize state and coordinates field resizing with proper cleanup
|
|
6
6
|
*/
|
|
7
|
-
export const useFieldResize = ({ onFieldResize, pdfWrapperRef, }) => {
|
|
7
|
+
export const useFieldResize = ({ onFieldResize, pdfWrapperRef, zoom = 1, }) => {
|
|
8
8
|
const resizeStartDataRef = useRef(null);
|
|
9
9
|
const onFieldResizeRef = useRef(onFieldResize);
|
|
10
|
+
const zoomRef = useRef(zoom);
|
|
10
11
|
const [isResizing, setIsResizing] = useState(false);
|
|
11
12
|
useEffect(() => {
|
|
12
13
|
onFieldResizeRef.current = onFieldResize;
|
|
13
14
|
}, [onFieldResize]);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
zoomRef.current = zoom;
|
|
17
|
+
}, [zoom]);
|
|
14
18
|
useEffect(() => {
|
|
15
19
|
if (!isResizing) {
|
|
16
20
|
return;
|
|
@@ -22,7 +26,7 @@ export const useFieldResize = ({ onFieldResize, pdfWrapperRef, }) => {
|
|
|
22
26
|
return;
|
|
23
27
|
}
|
|
24
28
|
const { field, ...resizeStartData } = resizeStartDataRef.current;
|
|
25
|
-
handleFieldResize(e, field, resizeStartData, pdfWrapperRef, onFieldResizeRef.current);
|
|
29
|
+
handleFieldResize(e, field, resizeStartData, pdfWrapperRef, onFieldResizeRef.current, zoomRef.current);
|
|
26
30
|
};
|
|
27
31
|
const handleMouseUp = () => {
|
|
28
32
|
if (signal.aborted) {
|
|
@@ -41,7 +45,7 @@ export const useFieldResize = ({ onFieldResize, pdfWrapperRef, }) => {
|
|
|
41
45
|
const handleResizeStart = (e, field) => {
|
|
42
46
|
e.stopPropagation();
|
|
43
47
|
e.preventDefault();
|
|
44
|
-
const resizeStartData = handleFieldResizeStart(e, field, pdfWrapperRef);
|
|
48
|
+
const resizeStartData = handleFieldResizeStart(e, field, pdfWrapperRef, zoom);
|
|
45
49
|
if (resizeStartData) {
|
|
46
50
|
resizeStartDataRef.current = {
|
|
47
51
|
field,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFieldResize.js","sourceRoot":"","sources":["../../src/hooks/useFieldResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useFieldResize.js","sourceRoot":"","sources":["../../src/hooks/useFieldResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAkBrE;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC3B,aAAa,EACb,aAAa,EACb,IAAI,GAAG,CAAC,GACY,EAAwB,EAAE;IAC9C,MAAM,kBAAkB,GAAG,MAAM,CAOvB,IAAI,CAAC,CAAC;IAChB,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,SAAS,CAAC,GAAG,EAAE;QACX,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAC;IAC7C,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,SAAS,CAAC,GAAG,EAAE;QACX,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAC3B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;QAEnC,MAAM,eAAe,GAAG,CAAC,CAAwB,EAAE,EAAE;YACjD,IAAI,CAAC,kBAAkB,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBAChD,OAAO;YACX,CAAC;YAED,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC;YACjE,iBAAiB,CACb,CAAC,EACD,KAAK,EACL,eAAe,EACf,aAAa,EACb,gBAAgB,CAAC,OAAO,EACxB,OAAO,CAAC,OAAO,CAClB,CAAC;QACN,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACvB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACX,CAAC;YACD,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,eAAe,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC,CAAC;QAEF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhE,OAAO,GAAG,EAAE;YACR,eAAe,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC,CAAC;IACN,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAEhC,MAAM,iBAAiB,GAAG,CAAC,CAA6B,EAAE,KAAe,EAAE,EAAE;QACzE,CAAC,CAAC,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,MAAM,eAAe,GAAG,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;QAC9E,IAAI,eAAe,EAAE,CAAC;YAClB,kBAAkB,CAAC,OAAO,GAAG;gBACzB,KAAK;gBACL,GAAG,eAAe;aACrB,CAAC;YACF,aAAa,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACH,UAAU;QACV,iBAAiB;KACpB,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface UseZoomReturn {
|
|
2
|
+
zoom: number;
|
|
3
|
+
zoomIn(): void;
|
|
4
|
+
zoomOut(): void;
|
|
5
|
+
resetZoom(): void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Manages a page zoom factor (1 = 100%), clamped to [ZOOM_MIN, ZOOM_MAX] in ZOOM_STEP increments.
|
|
9
|
+
*/
|
|
10
|
+
export declare const useZoom: (initialZoom?: number) => UseZoomReturn;
|
|
11
|
+
//# sourceMappingURL=useZoom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useZoom.d.ts","sourceRoot":"","sources":["../../src/hooks/useZoom.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,IAAI,IAAI,CAAC;IACf,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,IAAI,IAAI,CAAC;CACrB;AAKD;;GAEG;AACH,eAAO,MAAM,OAAO,GAAI,cAAa,MAAqB,KAAG,aAQ5D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import { ZOOM_DEFAULT, ZOOM_MAX, ZOOM_MIN, ZOOM_STEP } from '../constants';
|
|
3
|
+
const clampZoom = (value) => Math.min(ZOOM_MAX, Math.max(ZOOM_MIN, Math.round(value * 100) / 100));
|
|
4
|
+
/**
|
|
5
|
+
* Manages a page zoom factor (1 = 100%), clamped to [ZOOM_MIN, ZOOM_MAX] in ZOOM_STEP increments.
|
|
6
|
+
*/
|
|
7
|
+
export const useZoom = (initialZoom = ZOOM_DEFAULT) => {
|
|
8
|
+
const [zoom, setZoom] = useState(initialZoom);
|
|
9
|
+
const zoomIn = useCallback(() => setZoom(prev => clampZoom(prev + ZOOM_STEP)), []);
|
|
10
|
+
const zoomOut = useCallback(() => setZoom(prev => clampZoom(prev - ZOOM_STEP)), []);
|
|
11
|
+
const resetZoom = useCallback(() => setZoom(ZOOM_DEFAULT), []);
|
|
12
|
+
return { zoom, zoomIn, zoomOut, resetZoom };
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=useZoom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useZoom.js","sourceRoot":"","sources":["../../src/hooks/useZoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAS3E,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,EAAE,CAChC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,cAAsB,YAAY,EAAiB,EAAE;IACzE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAS,WAAW,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -1,11 +1,30 @@
|
|
|
1
|
-
.dte-pdf-canvas-container {
|
|
2
|
-
overflow: auto;
|
|
3
|
-
position: relative;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
1
|
.dte-pdf-wrapper {
|
|
7
2
|
position: relative;
|
|
8
3
|
width: 100%;
|
|
9
4
|
margin-inline-start: auto;
|
|
10
5
|
margin-inline-end: auto;
|
|
11
6
|
}
|
|
7
|
+
|
|
8
|
+
.dte-pdf-canvas-controls {
|
|
9
|
+
z-index: 1;
|
|
10
|
+
position: sticky;
|
|
11
|
+
top: 0;
|
|
12
|
+
left: 0;
|
|
13
|
+
background: var(--bg-color-main, #fafafa);
|
|
14
|
+
box-shadow: 0 2px 4px rgb(0 0 0 / 15%);
|
|
15
|
+
padding: var(--spacing-half) var(--spacing-1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.dte-pdf-zoom-controls-value {
|
|
19
|
+
min-width: 44px;
|
|
20
|
+
text-align: center;
|
|
21
|
+
cursor: pointer;
|
|
22
|
+
user-select: none;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.dte-pdf-zoom-controls,
|
|
26
|
+
.dte-pdf-field-navigation-controls {
|
|
27
|
+
border-radius: var(--radius-1, 4px);
|
|
28
|
+
padding: var(--spacing-half);
|
|
29
|
+
background-color: var(--bg-color-secondary, #eeeeee);
|
|
30
|
+
}
|
|
@@ -101,6 +101,15 @@
|
|
|
101
101
|
line-height: 1;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
.dte-pdf-field-content input[type='checkbox']:focus,
|
|
105
|
+
.dte-pdf-field-content input[type='checkbox']:active,
|
|
106
|
+
.dte-pdf-field-content input[type='radio']:active,
|
|
107
|
+
.dte-pdf-field-content input[type='radio']:focus {
|
|
108
|
+
box-shadow:
|
|
109
|
+
0 0 0 2px var(--border-color-active, #2270ee) inset,
|
|
110
|
+
0 0 0 3px var(--color-neutral-0, #ffffff) inset;
|
|
111
|
+
}
|
|
112
|
+
|
|
104
113
|
/*
|
|
105
114
|
* Printed PDF text modes (no ellipsis — hard clip like PdfSharp).
|
|
106
115
|
*/
|
|
@@ -169,6 +178,11 @@
|
|
|
169
178
|
resize: none;
|
|
170
179
|
}
|
|
171
180
|
|
|
181
|
+
.dte-pdf-field-fillable:focus {
|
|
182
|
+
outline: 2px solid var(--border-color-active, #2270ee);
|
|
183
|
+
outline-offset: 2px;
|
|
184
|
+
}
|
|
185
|
+
|
|
172
186
|
.dte-pdf-field-generic-table {
|
|
173
187
|
padding: var(--spacing-0, 0);
|
|
174
188
|
margin: var(--spacing-0, 0);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
@import '@servicetitan/tokens/dist/tokens.css';
|
|
2
2
|
|
|
3
|
-
.dte-pdf-editor {
|
|
3
|
+
.dte-pdf-editor-theme {
|
|
4
4
|
--menu-active-color: var(--color-blue-400, #2270ee);
|
|
5
5
|
--menu-active-bg-light-color: var(--color-blue-100, #e0f2ff);
|
|
6
6
|
--menu-hover-color: var(--color-neutral-100, #606162);
|
|
@@ -16,14 +16,23 @@
|
|
|
16
16
|
--spacing-2: 16px;
|
|
17
17
|
--spacing-3: 24px;
|
|
18
18
|
|
|
19
|
+
/* Radius */
|
|
20
|
+
--radius-0: 0;
|
|
21
|
+
--radius-1: 4px;
|
|
22
|
+
--radius-2: 8px;
|
|
23
|
+
|
|
19
24
|
/* Colors - Neutral */
|
|
20
25
|
--color-neutral-0: var(--color-neutral-0, #ffffff);
|
|
26
|
+
--color-neutral-30: var(--color-neutral-30, #f7f7f7);
|
|
27
|
+
--color-neutral-50: var(--color-neutral-50, #eeeeee);
|
|
21
28
|
--color-neutral-70: var(--color-neutral-70, #737475);
|
|
22
29
|
--color-neutral-200: var(--color-neutral-200, #6c6d70);
|
|
23
30
|
--color-neutral-300: var(--color-neutral-300, #2d2e31);
|
|
24
31
|
|
|
25
32
|
/* Background colors */
|
|
26
33
|
--bg-color-light: var(--color-neutral-0, #ffffff);
|
|
34
|
+
--bg-color-main: var(--color-neutral-20, #fafafa);
|
|
35
|
+
--bg-color-secondary: var(--color-neutral-50, #eeeeee);
|
|
27
36
|
--bg-color: var(--color-neutral-200, #f5f5f5);
|
|
28
37
|
--bg-color-hover: #eaeaea;
|
|
29
38
|
|
|
@@ -11,9 +11,10 @@ interface DragOffset {
|
|
|
11
11
|
* @param e - The drag event
|
|
12
12
|
* @param field - The field being dragged
|
|
13
13
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
14
|
+
* @param zoom - The current zoom level of the PDF
|
|
14
15
|
* @returns The drag offset object or null if wrapper is not available
|
|
15
16
|
*/
|
|
16
|
-
export declare const handleFieldDragStart: (e: DragEvent<HTMLDivElement>, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement
|
|
17
|
+
export declare const handleFieldDragStart: (e: DragEvent<HTMLDivElement>, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement>, zoom?: number) => DragOffset | null;
|
|
17
18
|
/**
|
|
18
19
|
* Handles the drag event for a PDF field
|
|
19
20
|
* Calculates new position and clamps it to page boundaries
|
|
@@ -22,7 +23,8 @@ export declare const handleFieldDragStart: (e: DragEvent<HTMLDivElement>, field:
|
|
|
22
23
|
* @param dragOffset - The drag offset from drag start
|
|
23
24
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
24
25
|
* @param onFieldMove - Callback to update field position
|
|
26
|
+
* @param zoom - The current zoom level of the PDF
|
|
25
27
|
*/
|
|
26
|
-
export declare const handleFieldDrag: (e: DragEvent<HTMLDivElement>, field: PdfField, dragOffset: DragOffset, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldMove: (fieldId: string, newX: number, newY: number, pageNumber: number) => void) => void;
|
|
28
|
+
export declare const handleFieldDrag: (e: DragEvent<HTMLDivElement>, field: PdfField, dragOffset: DragOffset, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldMove: (fieldId: string, newX: number, newY: number, pageNumber: number) => void, zoom?: number) => void;
|
|
27
29
|
export {};
|
|
28
30
|
//# sourceMappingURL=field-drag.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-drag.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/field-drag.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,UAAU,UAAU;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"field-drag.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/field-drag.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,UAAU,UAAU;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAC7B,GAAG,SAAS,CAAC,cAAc,CAAC,EAC5B,OAAO,QAAQ,EACf,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,aAAQ,KACT,UAAU,GAAG,IAqCf,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GACxB,GAAG,SAAS,CAAC,cAAc,CAAC,EAC5B,OAAO,QAAQ,EACf,YAAY,UAAU,EACtB,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,EACtF,aAAQ,KACT,IA2BF,CAAC"}
|
|
@@ -5,19 +5,22 @@ import { getPageDimensions, getPageNumberFromClientY, getPagePosition } from '..
|
|
|
5
5
|
* @param e - The drag event
|
|
6
6
|
* @param field - The field being dragged
|
|
7
7
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
8
|
+
* @param zoom - The current zoom level of the PDF
|
|
8
9
|
* @returns The drag offset object or null if wrapper is not available
|
|
9
10
|
*/
|
|
10
|
-
export const handleFieldDragStart = (e, field, pdfWrapperRef) => {
|
|
11
|
+
export const handleFieldDragStart = (e, field, pdfWrapperRef, zoom = 1) => {
|
|
11
12
|
if (!pdfWrapperRef.current) {
|
|
12
13
|
return null;
|
|
13
14
|
}
|
|
14
15
|
/*
|
|
15
|
-
* Calculate drag offset in page-relative coordinates
|
|
16
|
+
* Calculate drag offset in page-relative coordinates.
|
|
17
|
+
* DOM measurements reflect the current zoom, so divide by zoom to bring
|
|
18
|
+
* them into the same unzoomed reference space as the stored field.x/y.
|
|
16
19
|
*/
|
|
17
20
|
const startPagePos = getPagePosition(field.page, pdfWrapperRef);
|
|
18
21
|
const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
|
|
19
|
-
const cursorXInPage = e.clientX - wrapperRect.left - startPagePos.left;
|
|
20
|
-
const cursorYInPage = e.clientY - wrapperRect.top - startPagePos.top;
|
|
22
|
+
const cursorXInPage = (e.clientX - wrapperRect.left - startPagePos.left) / zoom;
|
|
23
|
+
const cursorYInPage = (e.clientY - wrapperRect.top - startPagePos.top) / zoom;
|
|
21
24
|
const dragOffset = {
|
|
22
25
|
x: cursorXInPage - field.x,
|
|
23
26
|
y: cursorYInPage - field.y,
|
|
@@ -46,8 +49,9 @@ export const handleFieldDragStart = (e, field, pdfWrapperRef) => {
|
|
|
46
49
|
* @param dragOffset - The drag offset from drag start
|
|
47
50
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
48
51
|
* @param onFieldMove - Callback to update field position
|
|
52
|
+
* @param zoom - The current zoom level of the PDF
|
|
49
53
|
*/
|
|
50
|
-
export const handleFieldDrag = (e, field, dragOffset, pdfWrapperRef, onFieldMove) => {
|
|
54
|
+
export const handleFieldDrag = (e, field, dragOffset, pdfWrapperRef, onFieldMove, zoom = 1) => {
|
|
51
55
|
if (!pdfWrapperRef.current || e.clientX === 0 || e.clientY === 0) {
|
|
52
56
|
return;
|
|
53
57
|
}
|
|
@@ -55,17 +59,17 @@ export const handleFieldDrag = (e, field, dragOffset, pdfWrapperRef, onFieldMove
|
|
|
55
59
|
const currentPagePos = getPagePosition(currentPage, pdfWrapperRef);
|
|
56
60
|
const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
|
|
57
61
|
const pageDimensions = getPageDimensions(currentPage, pdfWrapperRef);
|
|
58
|
-
// Calculate position in page coordinates
|
|
59
|
-
const x = e.clientX - wrapperRect.left - currentPagePos.left - dragOffset.x;
|
|
60
|
-
const y = e.clientY - wrapperRect.top - currentPagePos.top - dragOffset.y;
|
|
62
|
+
// Calculate position in page (unzoomed reference) coordinates
|
|
63
|
+
const x = (e.clientX - wrapperRect.left - currentPagePos.left) / zoom - dragOffset.x;
|
|
64
|
+
const y = (e.clientY - wrapperRect.top - currentPagePos.top) / zoom - dragOffset.y;
|
|
61
65
|
/*
|
|
62
66
|
* Clamp x and y to stay within page boundaries.
|
|
63
67
|
* Account for field width and height to prevent dragging outside.
|
|
64
68
|
*/
|
|
65
69
|
const minX = 0;
|
|
66
70
|
const minY = 0;
|
|
67
|
-
const maxX = Math.max(0, pageDimensions.width - field.width);
|
|
68
|
-
const maxY = Math.max(0, pageDimensions.height - field.height);
|
|
71
|
+
const maxX = Math.max(0, pageDimensions.width / zoom - field.width);
|
|
72
|
+
const maxY = Math.max(0, pageDimensions.height / zoom - field.height);
|
|
69
73
|
const clampedX = Math.max(minX, Math.min(maxX, x));
|
|
70
74
|
const clampedY = Math.max(minY, Math.min(maxY, y));
|
|
71
75
|
onFieldMove(field.id, clampedX, clampedY, currentPage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-drag.utils.js","sourceRoot":"","sources":["../../../src/utils/field/field-drag.utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAQtF
|
|
1
|
+
{"version":3,"file":"field-drag.utils.js","sourceRoot":"","sources":["../../../src/utils/field/field-drag.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface ReadingOrderField {
|
|
2
|
+
page: number;
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
height: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Orders fields the way a person visually scans a page: top row first,
|
|
9
|
+
* left-to-right within a row, then down to the next row - rather than a
|
|
10
|
+
* strict y-then-x sort, which misorders fields that sit on the same visual
|
|
11
|
+
* row but don't share an exact y coordinate.
|
|
12
|
+
*/
|
|
13
|
+
export declare const sortFieldsByReadingOrder: <T extends ReadingOrderField>(fields: T[]) => T[];
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=field-reading-order.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-reading-order.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/field-reading-order.utils.ts"],"names":[],"mappings":"AAAA,UAAU,iBAAiB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,iBAAiB,EAAE,QAAQ,CAAC,EAAE,KAAG,CAAC,EA6BpF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orders fields the way a person visually scans a page: top row first,
|
|
3
|
+
* left-to-right within a row, then down to the next row - rather than a
|
|
4
|
+
* strict y-then-x sort, which misorders fields that sit on the same visual
|
|
5
|
+
* row but don't share an exact y coordinate.
|
|
6
|
+
*/
|
|
7
|
+
export const sortFieldsByReadingOrder = (fields) => {
|
|
8
|
+
const byPosition = [...fields].sort((a, b) => a.page - b.page || a.y - b.y || a.x - b.x);
|
|
9
|
+
const rows = [];
|
|
10
|
+
let currentRow = [];
|
|
11
|
+
let currentPage = NaN;
|
|
12
|
+
let rowBottom = -Infinity;
|
|
13
|
+
for (const field of byPosition) {
|
|
14
|
+
const startsNewRow = field.page !== currentPage || field.y >= rowBottom;
|
|
15
|
+
if (startsNewRow) {
|
|
16
|
+
if (currentRow.length) {
|
|
17
|
+
rows.push(currentRow);
|
|
18
|
+
}
|
|
19
|
+
currentRow = [field];
|
|
20
|
+
currentPage = field.page;
|
|
21
|
+
rowBottom = field.y + field.height;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
currentRow.push(field);
|
|
25
|
+
rowBottom = Math.max(rowBottom, field.y + field.height);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (currentRow.length) {
|
|
29
|
+
rows.push(currentRow);
|
|
30
|
+
}
|
|
31
|
+
return rows.flatMap(row => row.sort((a, b) => a.x - b.x));
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=field-reading-order.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-reading-order.utils.js","sourceRoot":"","sources":["../../../src/utils/field/field-reading-order.utils.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAA8B,MAAW,EAAO,EAAE;IACtF,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,IAAI,GAAU,EAAE,CAAC;IACvB,IAAI,UAAU,GAAQ,EAAE,CAAC;IACzB,IAAI,WAAW,GAAG,GAAG,CAAC;IACtB,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;IAE1B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC;QAExE,IAAI,YAAY,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YACD,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC;YACrB,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YACzB,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -12,12 +12,13 @@ interface ResizeStartData {
|
|
|
12
12
|
* @param e - Mouse event
|
|
13
13
|
* @param field - The field being resized
|
|
14
14
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
15
|
+
* @param zoom - The current zoom level of the PDF
|
|
15
16
|
* @returns Resize start data or null if calculation fails
|
|
16
17
|
*/
|
|
17
18
|
export declare const handleFieldResizeStart: (e: {
|
|
18
19
|
clientX: number;
|
|
19
20
|
clientY: number;
|
|
20
|
-
}, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement
|
|
21
|
+
}, field: PdfField, pdfWrapperRef: RefObject<HTMLDivElement>, zoom?: number) => ResizeStartData | null;
|
|
21
22
|
/**
|
|
22
23
|
* Handles the resize event for a PDF field from bottom-right corner
|
|
23
24
|
* Only changes width and height, keeping x and y coordinates unchanged
|
|
@@ -26,10 +27,11 @@ export declare const handleFieldResizeStart: (e: {
|
|
|
26
27
|
* @param resizeStartData - Data from resize start
|
|
27
28
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
28
29
|
* @param onFieldResize - Callback to update field dimensions
|
|
30
|
+
* @param zoom - The current zoom level of the PDF
|
|
29
31
|
*/
|
|
30
32
|
export declare const handleFieldResize: (e: {
|
|
31
33
|
clientX: number;
|
|
32
34
|
clientY: number;
|
|
33
|
-
}, field: PdfField, resizeStartData: ResizeStartData, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldResize: (fieldId: string, newWidth: number, newHeight: number, pageNumber: number) => void) => void;
|
|
35
|
+
}, field: PdfField, resizeStartData: ResizeStartData, pdfWrapperRef: RefObject<HTMLDivElement>, onFieldResize: (fieldId: string, newWidth: number, newHeight: number, pageNumber: number) => void, zoom?: number) => void;
|
|
34
36
|
export {};
|
|
35
37
|
//# sourceMappingURL=field-resize.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-resize.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/field-resize.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,UAAU,eAAe;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"field-resize.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/field-resize.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,UAAU,eAAe;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAC/B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,QAAQ,EACf,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,aAAQ,KACT,eAAe,GAAG,IAmBpB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAC1B,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,QAAQ,EACf,iBAAiB,eAAe,EAChC,eAAe,SAAS,CAAC,cAAc,CAAC,EACxC,eAAe,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,KACjB,IAAI,EACT,aAAQ,KACT,IA8CF,CAAC"}
|
|
@@ -5,17 +5,18 @@ import { getPageDimensions, getPagePosition } from '../pdf';
|
|
|
5
5
|
* @param e - Mouse event
|
|
6
6
|
* @param field - The field being resized
|
|
7
7
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
8
|
+
* @param zoom - The current zoom level of the PDF
|
|
8
9
|
* @returns Resize start data or null if calculation fails
|
|
9
10
|
*/
|
|
10
|
-
export const handleFieldResizeStart = (e, field, pdfWrapperRef) => {
|
|
11
|
+
export const handleFieldResizeStart = (e, field, pdfWrapperRef, zoom = 1) => {
|
|
11
12
|
if (!pdfWrapperRef.current) {
|
|
12
13
|
return null;
|
|
13
14
|
}
|
|
14
15
|
const pagePos = getPagePosition(field.page, pdfWrapperRef);
|
|
15
16
|
const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
|
|
16
|
-
// Calculate mouse position relative to the page
|
|
17
|
-
const startX = e.clientX - wrapperRect.left - pagePos.left;
|
|
18
|
-
const startY = e.clientY - wrapperRect.top - pagePos.top;
|
|
17
|
+
// Calculate mouse position relative to the page, in unzoomed reference coordinates
|
|
18
|
+
const startX = (e.clientX - wrapperRect.left - pagePos.left) / zoom;
|
|
19
|
+
const startY = (e.clientY - wrapperRect.top - pagePos.top) / zoom;
|
|
19
20
|
return {
|
|
20
21
|
startX,
|
|
21
22
|
startY,
|
|
@@ -32,8 +33,9 @@ export const handleFieldResizeStart = (e, field, pdfWrapperRef) => {
|
|
|
32
33
|
* @param resizeStartData - Data from resize start
|
|
33
34
|
* @param pdfWrapperRef - Reference to the PDF wrapper element
|
|
34
35
|
* @param onFieldResize - Callback to update field dimensions
|
|
36
|
+
* @param zoom - The current zoom level of the PDF
|
|
35
37
|
*/
|
|
36
|
-
export const handleFieldResize = (e, field, resizeStartData, pdfWrapperRef, onFieldResize) => {
|
|
38
|
+
export const handleFieldResize = (e, field, resizeStartData, pdfWrapperRef, onFieldResize, zoom = 1) => {
|
|
37
39
|
var _a, _b;
|
|
38
40
|
if (!pdfWrapperRef.current) {
|
|
39
41
|
return;
|
|
@@ -41,9 +43,9 @@ export const handleFieldResize = (e, field, resizeStartData, pdfWrapperRef, onFi
|
|
|
41
43
|
const pageDimensions = getPageDimensions(resizeStartData.page, pdfWrapperRef);
|
|
42
44
|
const pagePos = getPagePosition(resizeStartData.page, pdfWrapperRef);
|
|
43
45
|
const wrapperRect = pdfWrapperRef.current.getBoundingClientRect();
|
|
44
|
-
// Calculate mouse position relative to the page
|
|
45
|
-
const mouseX = e.clientX - wrapperRect.left - pagePos.left;
|
|
46
|
-
const mouseY = e.clientY - wrapperRect.top - pagePos.top;
|
|
46
|
+
// Calculate mouse position relative to the page, in unzoomed reference coordinates
|
|
47
|
+
const mouseX = (e.clientX - wrapperRect.left - pagePos.left) / zoom;
|
|
48
|
+
const mouseY = (e.clientY - wrapperRect.top - pagePos.top) / zoom;
|
|
47
49
|
// Calculate delta from the start position
|
|
48
50
|
const deltaX = mouseX - resizeStartData.startX;
|
|
49
51
|
const deltaY = mouseY - resizeStartData.startY;
|
|
@@ -65,8 +67,8 @@ export const handleFieldResize = (e, field, resizeStartData, pdfWrapperRef, onFi
|
|
|
65
67
|
newWidth = Math.max(FIELD_CONSTANTS.minWidth, newWidth);
|
|
66
68
|
newHeight = Math.max(FIELD_CONSTANTS.minHeight, newHeight);
|
|
67
69
|
// Clamp to page boundaries (ensure the field doesn't go outside the page)
|
|
68
|
-
const maxWidth = pageDimensions.width - field.x;
|
|
69
|
-
const maxHeight = pageDimensions.height - field.y;
|
|
70
|
+
const maxWidth = pageDimensions.width / zoom - field.x;
|
|
71
|
+
const maxHeight = pageDimensions.height / zoom - field.y;
|
|
70
72
|
newWidth = Math.min(newWidth, maxWidth);
|
|
71
73
|
newHeight = Math.min(newHeight, maxHeight);
|
|
72
74
|
onFieldResize(field.id, newWidth, newHeight, resizeStartData.page);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-resize.utils.js","sourceRoot":"","sources":["../../../src/utils/field/field-resize.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAU5D
|
|
1
|
+
{"version":3,"file":"field-resize.utils.js","sourceRoot":"","sources":["../../../src/utils/field/field-resize.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAU5D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,CAAuC,EACvC,KAAe,EACf,aAAwC,EACxC,IAAI,GAAG,CAAC,EACc,EAAE;IACxB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAElE,mFAAmF;IACnF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAElE,OAAO;QACH,MAAM;QACN,MAAM;QACN,UAAU,EAAE,KAAK,CAAC,KAAK;QACvB,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,IAAI,EAAE,KAAK,CAAC,IAAI;KACnB,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,CAAuC,EACvC,KAAe,EACf,eAAgC,EAChC,aAAwC,EACxC,aAKS,EACT,IAAI,GAAG,CAAC,EACJ,EAAE;;IACN,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QACzB,OAAO;IACX,CAAC;IAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,eAAe,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAElE,mFAAmF;IACnF,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAElE,0CAA0C;IAC1C,MAAM,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;IAE/C;;;OAGG;IACH,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,MAAA,MAAA,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,0CAC3E,KAAK,CAAC,OAAQ,CACjB,mCAAI;QACD,iBAAiB,EAAE,KAAK;QACxB,eAAe,EAAE,KAAK;KACzB,CAAC;IAEF,IAAI,QAAQ,GAAG,iBAAiB;QAC5B,CAAC,CAAC,eAAe,CAAC,UAAU;QAC5B,CAAC,CAAC,eAAe,CAAC,UAAU,GAAG,MAAM,CAAC;IAC1C,IAAI,SAAS,GAAG,eAAe;QAC3B,CAAC,CAAC,eAAe,CAAC,WAAW;QAC7B,CAAC,CAAC,eAAe,CAAC,WAAW,GAAG,MAAM,CAAC;IAE3C,8BAA8B;IAC9B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3D,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IACzD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACxC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3C,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC,CAAC"}
|
|
@@ -7,6 +7,13 @@ interface FieldBoundsStyleOptions {
|
|
|
7
7
|
};
|
|
8
8
|
backgroundColor?: string;
|
|
9
9
|
borderColor?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Current page zoom factor (1 = 100%). Field `x/y/width/height` are stored
|
|
12
|
+
* relative to the unzoomed reference page width, so they must be scaled by
|
|
13
|
+
* zoom for display while `pageOffset` (read live from the DOM) already
|
|
14
|
+
* reflects the zoomed page.
|
|
15
|
+
*/
|
|
16
|
+
zoom?: number;
|
|
10
17
|
}
|
|
11
18
|
/**
|
|
12
19
|
* Shared absolute-position style for PDF field overlays.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-field-bounds-style.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/get-field-bounds-style.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAiB,KAAK,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAG3F,UAAU,uBAAuB;IAC7B,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"get-field-bounds-style.utils.d.ts","sourceRoot":"","sources":["../../../src/utils/field/get-field-bounds-style.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAiB,KAAK,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAG3F,UAAU,uBAAuB;IAC7B,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAsBD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC5B,OAAO,QAAQ,EACf,UAAU,uBAAuB,KAClC,aA6BF,CAAC"}
|
|
@@ -27,13 +27,13 @@ const getFieldTypeSpecificStyle = (field) => {
|
|
|
27
27
|
* and shared typography (font size / family / weight).
|
|
28
28
|
*/
|
|
29
29
|
export const getFieldBoundsStyle = (field, options) => {
|
|
30
|
-
const { backgroundColor, borderColor, pageOffset = { left: 0, top: 0 } } = options !== null && options !== void 0 ? options : {};
|
|
30
|
+
const { backgroundColor, borderColor, pageOffset = { left: 0, top: 0 }, zoom = 1, } = options !== null && options !== void 0 ? options : {};
|
|
31
31
|
return {
|
|
32
32
|
position: 'absolute',
|
|
33
|
-
left: pageOffset.left + field.x,
|
|
34
|
-
top: pageOffset.top + field.y,
|
|
35
|
-
width: field.width,
|
|
36
|
-
height: field.height,
|
|
33
|
+
left: pageOffset.left + field.x * zoom,
|
|
34
|
+
top: pageOffset.top + field.y * zoom,
|
|
35
|
+
width: field.width * zoom,
|
|
36
|
+
height: field.height * zoom,
|
|
37
37
|
display: 'flex',
|
|
38
38
|
alignItems: 'flex-start',
|
|
39
39
|
justifyContent: 'flex-start',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-field-bounds-style.utils.js","sourceRoot":"","sources":["../../../src/utils/field/get-field-bounds-style.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-field-bounds-style.utils.js","sourceRoot":"","sources":["../../../src/utils/field/get-field-bounds-style.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAuC,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAevE,MAAM,yBAAyB,GAAG,CAAC,KAAe,EAAiB,EAAE;;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG;QACX,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;YACtB,QAAQ,EAAE;gBACN,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;aAClB;YACD,KAAK,EAAE;gBACH,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;aAClB;SACJ;KAC6D,CAAC;IAEnE,OAAO,MAAA,MAAA,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,0CAAG,KAAK,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,KAAe,EACf,OAAiC,EACpB,EAAE;IACf,MAAM,EACF,eAAe,EACf,WAAW,EACX,UAAU,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAChC,IAAI,GAAG,CAAC,GACX,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;IAElB,OAAO;QACH,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI;QACtC,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI;QACpC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI;QACzB,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI;QAC3B,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,YAAY;QACxB,cAAc,EAAE,YAAY;QAC5B,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,CAAC;QACb,GAAG,yBAAyB,CAAC,KAAK,CAAC;QACnC,GAAG,uBAAuB,CAAC,KAAK,CAAC;QACjC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -3,6 +3,7 @@ export * from './field-background-color.utils';
|
|
|
3
3
|
export * from './field-coordinates.utils';
|
|
4
4
|
export * from './field-drag.utils';
|
|
5
5
|
export * from './field-placeholder-text.utils';
|
|
6
|
+
export * from './field-reading-order.utils';
|
|
6
7
|
export * from './field-resize.utils';
|
|
7
8
|
export * from './get-field-bounds-style.utils';
|
|
8
9
|
export * from './get-field-font-size.utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|
|
@@ -3,6 +3,7 @@ export * from './field-background-color.utils';
|
|
|
3
3
|
export * from './field-coordinates.utils';
|
|
4
4
|
export * from './field-drag.utils';
|
|
5
5
|
export * from './field-placeholder-text.utils';
|
|
6
|
+
export * from './field-reading-order.utils';
|
|
6
7
|
export * from './field-resize.utils';
|
|
7
8
|
export * from './get-field-bounds-style.utils';
|
|
8
9
|
export * from './get-field-font-size.utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/field/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC"}
|