@xtctwins/tctwins-pdf-core 0.1.1 → 0.1.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/PdfViewer.d.ts +6 -2
- package/dist/PdfViewer.d.ts.map +1 -1
- package/dist/components/PdfViewer.d.ts +3 -3
- package/dist/components/PdfViewer.vue.d.ts +17 -8
- package/dist/components/PdfViewer.vue.d.ts.map +1 -1
- package/dist/components/useViewerLayout.d.ts +42 -24
- package/dist/components/useViewerLayout.d.ts.map +1 -1
- package/dist/core/ColorInverter.d.ts +70 -0
- package/dist/core/ColorInverter.d.ts.map +1 -0
- package/dist/core/PageCanvasRenderer.d.ts +190 -0
- package/dist/core/PageCanvasRenderer.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/pdf-core.js +749 -345
- package/dist/style.css +1 -1
- package/dist/types/components.d.ts +17 -0
- package/dist/types/components.d.ts.map +1 -1
- package/dist/vue/usePdfCore.d.ts +54 -0
- package/dist/vue/usePdfCore.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/PdfViewer.d.ts
CHANGED
|
@@ -3,8 +3,12 @@ import type { AnnotationItem } from "./types/annotations";
|
|
|
3
3
|
import type { ToolManager } from "./tools/ToolManager";
|
|
4
4
|
import type { MeasureSubType } from "./types/tools";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* 缩放档位阶梯(供工具栏按钮 / window.pdfViewer.zoomIn|zoomOut 使用)。
|
|
7
|
+
*
|
|
8
|
+
* 上限 12800%(128x),与 PageCanvasRenderer 的默认 maxZoom 保持一致。
|
|
9
|
+
* 旧注释里“最大 3200%、更高倍率会超 canvas 安全上限”是瓦片方案时代的限制:
|
|
10
|
+
* 现在只渲染「可见 region」,backing 恒为 ≈视口×DPR(与倍率无关),不再受限。
|
|
11
|
+
* 注:滚轮/双指捏合走的是连续倍率(1.12/档),不查这张表,但同样受 renderer 的 maxZoom 约束。
|
|
8
12
|
*/
|
|
9
13
|
export declare const ZOOM_LEVELS: number[];
|
|
10
14
|
export declare function getNextZoom(current: number, direction: "in" | "out"): number;
|
package/dist/PdfViewer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfViewer.d.ts","sourceRoot":"","sources":["../src/PdfViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD
|
|
1
|
+
{"version":3,"file":"PdfViewer.d.ts","sourceRoot":"","sources":["../src/PdfViewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,UAAgJ,CAAC;AAEzK,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,KAAK,GAAG,MAAM,CAK5E;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,IAAI,MAAM,CAAC;IACnB,cAAc,IAAI,WAAW,GAAG,IAAI,CAAC;IACrC,mBAAmB;IACnB,aAAa,IAAI,IAAI,CAAC;IACtB,2BAA2B;IAC3B,WAAW,IAAI,IAAI,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,SAAS;IACrB,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,YAAY,CAAe;IAInC,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,EAAE,2BAA2B,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAU7H,4CAA4C;IAC5C,uBAAuB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,QAAQ,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5H,+BAA+B;IAC/B,UAAU,IAAI,IAAI;IAUlB,mBAAmB;IACnB,cAAc,IAAI,IAAI;IAUtB,uCAAuC;IACvC,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIhD,eAAe;IACf,gBAAgB,IAAI,IAAI;IAKxB,aAAa;IACb,UAAU,IAAI,IAAI;IAUlB,eAAe;IACf,OAAO,IAAI,MAAM;IAMjB,WAAW;IACX,MAAM,IAAI,IAAI;IAQd,WAAW;IACX,OAAO,IAAI,IAAI;IAQf,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,eAAe;IACf,QAAQ,IAAI,MAAM;IAIlB,gBAAgB;IAChB,eAAe,IAAI,MAAM;IAIzB,WAAW;IACL,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC,2BAA2B;IAC3B,WAAW,IAAI,IAAI;IAMnB,aAAa;IACb,cAAc,IAAI,cAAc,EAAE;IAiBlC,aAAa;IACb,gBAAgB,IAAI,IAAI;IAMxB,cAAc;IACd,wBAAwB,IAAI,IAAI;IAKhC,WAAW;IACX,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAKzC,mBAAmB;IACnB,uBAAuB,IAAI,MAAM,GAAG,IAAI;IAMxC,6BAA6B;IAC7B,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,aAAa;IACb,cAAc;IAMd,oBAAoB;IACpB,QAAQ,IAAI,IAAI;IAOhB,cAAc;IACd,cAAc,IAAI,MAAM,GAAG,IAAI;CAG/B"}
|
|
@@ -25,7 +25,7 @@ export declare const PdfViewerComponent: import("vue").DefineComponent<import("v
|
|
|
25
25
|
};
|
|
26
26
|
}>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
27
27
|
[key: string]: any;
|
|
28
|
-
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("
|
|
28
|
+
}>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("error" | "loaded" | "annotation-added")[], "error" | "loaded" | "annotation-added", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
29
29
|
modelValue: {
|
|
30
30
|
type: any;
|
|
31
31
|
default: null;
|
|
@@ -56,9 +56,9 @@ export declare const PdfViewerComponent: import("vue").DefineComponent<import("v
|
|
|
56
56
|
"onAnnotation-added"?: ((...args: any[]) => any) | undefined;
|
|
57
57
|
}>, {
|
|
58
58
|
scale: number;
|
|
59
|
-
theme: string;
|
|
60
|
-
height: string | number;
|
|
61
59
|
width: string | number;
|
|
60
|
+
height: string | number;
|
|
61
|
+
theme: string;
|
|
62
62
|
modelValue: any;
|
|
63
63
|
toolbar: boolean;
|
|
64
64
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -6,38 +6,47 @@ declare const __VLS_export: import("vue").DefineComponent<PdfViewerProps, {
|
|
|
6
6
|
clearInteraction: () => void;
|
|
7
7
|
deleteSelectedAnnotation: () => void;
|
|
8
8
|
selectAnnotation: (id: string | null) => void;
|
|
9
|
+
/** 复位视图(回到内容中心) */
|
|
10
|
+
resetView: () => void;
|
|
11
|
+
/** 放大/缩小(连续倍率,1.25/步) */
|
|
12
|
+
zoomIn: () => Promise<void>;
|
|
13
|
+
zoomOut: () => Promise<void>;
|
|
9
14
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
15
|
+
error: (payload: {
|
|
16
|
+
message: string;
|
|
17
|
+
}) => any;
|
|
10
18
|
loaded: (payload: {
|
|
11
19
|
pageCount: number;
|
|
12
20
|
currentPage: number;
|
|
13
21
|
}) => any;
|
|
14
|
-
error: (payload: {
|
|
15
|
-
message: string;
|
|
16
|
-
}) => any;
|
|
17
22
|
"annotation-added": (payload: {
|
|
18
23
|
id: string;
|
|
19
24
|
kind: "measure" | "shape";
|
|
20
25
|
}) => any;
|
|
21
26
|
}, string, import("vue").PublicProps, Readonly<PdfViewerProps> & Readonly<{
|
|
27
|
+
onError?: ((payload: {
|
|
28
|
+
message: string;
|
|
29
|
+
}) => any) | undefined;
|
|
22
30
|
onLoaded?: ((payload: {
|
|
23
31
|
pageCount: number;
|
|
24
32
|
currentPage: number;
|
|
25
33
|
}) => any) | undefined;
|
|
26
|
-
onError?: ((payload: {
|
|
27
|
-
message: string;
|
|
28
|
-
}) => any) | undefined;
|
|
29
34
|
"onAnnotation-added"?: ((payload: {
|
|
30
35
|
id: string;
|
|
31
36
|
kind: "measure" | "shape";
|
|
32
37
|
}) => any) | undefined;
|
|
33
38
|
}>, {
|
|
34
39
|
scale: number;
|
|
40
|
+
width: string | number;
|
|
41
|
+
height: string | number;
|
|
35
42
|
zoomSpeed: number;
|
|
36
43
|
theme: "light" | "dark";
|
|
37
|
-
height: string | number;
|
|
38
|
-
width: string | number;
|
|
39
44
|
modelValue: ArrayBuffer | null;
|
|
40
45
|
toolbar: boolean;
|
|
46
|
+
invertDarkContent: boolean;
|
|
47
|
+
invertMode: "unblend" | "hue" | "all" | "achromatic";
|
|
48
|
+
invertThreshold: number;
|
|
49
|
+
maxZoom: number;
|
|
41
50
|
showConsole: boolean;
|
|
42
51
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
43
52
|
declare const _default: typeof __VLS_export;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PdfViewer.vue.d.ts","sourceRoot":"","sources":["../../src/components/PdfViewer.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PdfViewer.vue.d.ts","sourceRoot":"","sources":["../../src/components/PdfViewer.vue"],"names":[],"mappings":"AAiWA,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,qBAAqB,CAAC;AAqX1E,QAAA,MAAM,YAAY;mBA9LU,IAAI,GAAG,WAAW;;;;;;IA2F5C,mBAAmB;;IAEnB,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6EAsGzB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
|
|
@@ -4,48 +4,66 @@ export interface ViewerContainerStyle {
|
|
|
4
4
|
height: string;
|
|
5
5
|
background: string;
|
|
6
6
|
overflow: "hidden";
|
|
7
|
-
borderRadius: string;
|
|
8
|
-
border: string;
|
|
9
7
|
position: "relative";
|
|
10
8
|
touchAction: "none";
|
|
11
9
|
display: "block";
|
|
12
10
|
}
|
|
11
|
+
/** 交互层依赖的渲染器最小接口(由 PageCanvasRenderer 实现) */
|
|
12
|
+
export interface ViewportRendererLike {
|
|
13
|
+
zoom: number;
|
|
14
|
+
refreshStageBox(): void;
|
|
15
|
+
zoomAt(clientX: number, clientY: number, factor: number): boolean;
|
|
16
|
+
anchorAt(clientX: number, clientY: number, pt: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
}, zoom: number): void;
|
|
20
|
+
setDragOffset(dx: number, dy: number): void;
|
|
21
|
+
commitDrag(dx: number, dy: number): void;
|
|
22
|
+
screenToPt(clientX: number, clientY: number): {
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
};
|
|
26
|
+
centerOnContent(): void;
|
|
27
|
+
requestRender(): void;
|
|
28
|
+
setZoom(zoom: number): void;
|
|
29
|
+
}
|
|
13
30
|
export interface UseViewerLayoutOptions {
|
|
31
|
+
/** 视口容器(stage):overflow:hidden 的绝对定位基准 */
|
|
14
32
|
viewerRef: Ref<HTMLElement | null>;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
setScale: (scale: number) => Promise<void>;
|
|
33
|
+
/** 视口渲染器(可能尚未创建,故允许 null) */
|
|
34
|
+
renderer: Ref<ViewportRendererLike | null>;
|
|
35
|
+
/** 滚轮每格跳几档(1.12^zoomSpeed);旧 props 兼容,默认 1 */
|
|
19
36
|
zoomSpeed: number;
|
|
37
|
+
/** 主题(决定容器背景色) */
|
|
20
38
|
theme: Ref<"light" | "dark">;
|
|
21
|
-
|
|
22
|
-
|
|
39
|
+
/** 视图变化后的回调(同步标注画布等) */
|
|
40
|
+
onViewChanged?: () => void;
|
|
23
41
|
}
|
|
24
42
|
export interface UseViewerLayoutResult {
|
|
25
43
|
containerStyle: ComputedRef<ViewerContainerStyle>;
|
|
44
|
+
/** 重新布局(resetScroll=true 时回到内容中心并重渲染) */
|
|
26
45
|
adjustLayout: (resetScroll?: boolean) => void;
|
|
27
46
|
handleWheel: (event: WheelEvent) => void;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
handlePointerDown: (event: PointerEvent) => void;
|
|
48
|
+
handlePointerMove: (event: PointerEvent) => void;
|
|
49
|
+
handlePointerUp: (event: PointerEvent) => void;
|
|
50
|
+
handlePointerCancel: (event: PointerEvent) => void;
|
|
32
51
|
isMouseDragging: Ref<boolean>;
|
|
52
|
+
/** 清理指针状态(组件卸载时调用) */
|
|
33
53
|
cleanupMouseDrag: () => void;
|
|
34
54
|
}
|
|
35
55
|
/**
|
|
36
|
-
*
|
|
37
|
-
* tx/ty = wrapper 左上角在 viewer 视口内的像素偏移
|
|
38
|
-
* 内容像素点 = (视口坐标 - tx) ← 直接像素,pdfjs 已按 scale 渲染,无需再除
|
|
39
|
-
*
|
|
40
|
-
* 两阶段缩放防闪:
|
|
41
|
-
* Phase-1 (同步):CSS scale() 补偿,视觉即时响应
|
|
42
|
-
* Phase-2 (异步):pdfjs 真实渲染完成后撤销 CSS 补偿
|
|
56
|
+
* 视口交互 Composable —— 新模型:center(纸面 pt) + zoom,光标锚点,位图跟手。
|
|
43
57
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
58
|
+
* 旧实现(已删除)的两阶段 CSS 补偿、ZOOM_LEVELS 档位 snap、tx/ty 位移守恒公式全部不要了:
|
|
59
|
+
* · 缩放:以「已上屏映射」求光标下的纸面 pt,一步反推 center
|
|
60
|
+
* (center = pt - (光标屏位 - stage 中心) / nz)。与 region 尺寸、整页/分片切换无关,
|
|
61
|
+
* 所以不存在逐档累积的锚点漂移;步进 1.12/档连续,不 snap 到档位。
|
|
62
|
+
* · 平移:按下期间只做位图 CSS translate(GPU 合成,跟手且完全不重渲染),
|
|
63
|
+
* 松手才把整段屏幕位移一次折算成 pt 并触发渲染;旧位图保持拖后位置直到新图上屏,
|
|
64
|
+
* 中间不会“闪回原状”。
|
|
65
|
+
* · 指针统一:鼠标 / 触控笔 / 手指共用一套 pointer 事件(1 指平移、2 指捏合),
|
|
66
|
+
* 不再有 mousemove/mouseup 与 touchstart/touchmove 两套并行逻辑。
|
|
49
67
|
*/
|
|
50
68
|
export declare function useViewerLayout(options: UseViewerLayoutOptions): UseViewerLayoutResult;
|
|
51
69
|
//# sourceMappingURL=useViewerLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useViewerLayout.d.ts","sourceRoot":"","sources":["../../src/components/useViewerLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"useViewerLayout.d.ts","sourceRoot":"","sources":["../../src/components/useViewerLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAIhE,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,IAAI,IAAI,CAAC;IACxB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7F,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,eAAe,IAAI,IAAI,CAAC;IACxB,aAAa,IAAI,IAAI,CAAC;IACtB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACtC,0CAA0C;IAC1C,SAAS,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACnC,6BAA6B;IAC7B,QAAQ,EAAE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAC3C,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,KAAK,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IAC7B,wBAAwB;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACrC,cAAc,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAClD,yCAAyC;IACzC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,iBAAiB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACjD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,mBAAmB,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,sBAAsB;IACtB,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CA8KtF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 深色主题下的图纸颜色处理(白纸黑线 → 深纸浅线)。四种模式:
|
|
3
|
+
*
|
|
4
|
+
* "unblend"(默认,推荐)—— 覆盖度反解:
|
|
5
|
+
* 把像素看成 `墨 × α + 白纸 × (1-α)`,反解出 α 后按新纸色(黑)重新合成:
|
|
6
|
+
* · 灰度像素(色度 ≤ 阈值)→ 按亮度反色(黑线→白线、纸白→纸黑,灰阶抗锯齿平滑过渡)
|
|
7
|
+
* · 彩色像素 → `像素 - min(通道)` = 原墨色 × 覆盖度
|
|
8
|
+
* 效果:覆盖满的彩色像素 **保持原色原亮度**(黄依旧亮、青绿依旧清楚),
|
|
9
|
+
* 边缘像素按覆盖度自然变暗、与黑纸连成一片 → **既不改彩色、也没有白边**。
|
|
10
|
+
* 代价:多一次逐像素 pass(WebGL 实测 1.16MP≈4ms,降级逐像素 1.16MP≈6ms)。
|
|
11
|
+
* 注:对“本来就很淡、没有饱和通道”的浅色墨,该式会把它算成“低覆盖度”而偏暗——
|
|
12
|
+
* 但这等价于“保留它与纸的对比度”(浅色在白纸上本来也几乎看不见)。
|
|
13
|
+
*
|
|
14
|
+
* "hue" —— 整幅反明度、保色相(invert(1) hue-rotate(180deg)):0ms GPU 滤镜,
|
|
15
|
+
* 但彩色明度会翻(白底上最亮的黄/青/绿变暗),黄系会看不清。
|
|
16
|
+
* "all" —— 纯反色:彩色变互补色(红→青)。
|
|
17
|
+
* "achromatic" —— 只反黑白像素、彩色原样保留:颜色最正,但彩色图形边缘会留下一圈亮边。
|
|
18
|
+
*
|
|
19
|
+
* 两条实现路径(自动选):
|
|
20
|
+
* 1. WebGL 着色器(GPU):一次纹理上传 + 一次全屏 pass;
|
|
21
|
+
* 2. 逐像素降级(WebGL 不可用 / 上下文丢失):getImageData + 循环 + putImageData。
|
|
22
|
+
*
|
|
23
|
+
* 成本只发生在**渲染那一帧**(缩放提交 / 平移松手 / 翻页 / 主题切换),
|
|
24
|
+
* 拖拽跟手期间是位图 CSS translate,不经过这里。
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* 反色模式:
|
|
28
|
+
* "unblend" —— 覆盖度反解(默认):彩色保持原色原亮度,灰度翻明度,无白边
|
|
29
|
+
* "hue" —— 保色相反色:整幅反明度,彩色色相不变但明度会翻
|
|
30
|
+
* "all" —— 纯反色:彩色变互补色
|
|
31
|
+
* "achromatic" —— 只反黑白像素、彩色完全原样(代价:彩色边缘有亮边)
|
|
32
|
+
*/
|
|
33
|
+
export type InvertMode = "unblend" | "hue" | "all" | "achromatic";
|
|
34
|
+
/** 需要逐像素处理的模式(WebGL 着色器 / 逐像素降级) */
|
|
35
|
+
export type PerPixelInvertMode = "unblend" | "achromatic";
|
|
36
|
+
/** 纯反色滤镜(彩色变互补色) */
|
|
37
|
+
export declare const INVERT_FILTER_ALL = "invert(1)";
|
|
38
|
+
/** 保色相反色滤镜:黑色→白、白色→黑,彩色只翻明度不翻色相(不产生彩色边缘白边) */
|
|
39
|
+
export declare const INVERT_FILTER_HUE = "invert(1) hue-rotate(180deg)";
|
|
40
|
+
/** 默认黑白判定阈值:色度 ≤ 24(0~255)视为黑白像素 */
|
|
41
|
+
export declare const DEFAULT_ACHROMATIC_THRESHOLD = 24;
|
|
42
|
+
export declare class ColorInverter {
|
|
43
|
+
private glCanvas;
|
|
44
|
+
private gl;
|
|
45
|
+
private program;
|
|
46
|
+
private texture;
|
|
47
|
+
private thresholdLoc;
|
|
48
|
+
private unblendLoc;
|
|
49
|
+
/** null = 尚未尝试;false = 不可用(走逐像素降级) */
|
|
50
|
+
private webglReady;
|
|
51
|
+
/** 只打一次路径日志 */
|
|
52
|
+
private loggedPath;
|
|
53
|
+
/** 当前是否走 WebGL 快路径 */
|
|
54
|
+
get usingWebGL(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* 逐像素处理并写入 dstCtx(两者像素尺寸必须都是 w×h)。
|
|
57
|
+
* @param mode "unblend" = 彩色保原色 + 覆盖度合成到新纸色;"achromatic" = 彩色完全原样
|
|
58
|
+
* @returns true = WebGL 快路径;false = 逐像素降级
|
|
59
|
+
*/
|
|
60
|
+
presentPerPixel(srcCanvas: HTMLCanvasElement, srcCtx: CanvasRenderingContext2D, dstCtx: CanvasRenderingContext2D, w: number, h: number, mode?: PerPixelInvertMode, threshold?: number): boolean;
|
|
61
|
+
/** @deprecated 用 presentPerPixel(src, srcCtx, dst, w, h, "achromatic", threshold) */
|
|
62
|
+
presentAchromatic(srcCanvas: HTMLCanvasElement, srcCtx: CanvasRenderingContext2D, dstCtx: CanvasRenderingContext2D, w: number, h: number, threshold?: number): boolean;
|
|
63
|
+
dispose(): void;
|
|
64
|
+
private ensureWebGL;
|
|
65
|
+
private buildProgram;
|
|
66
|
+
private drawWithGL;
|
|
67
|
+
private disableWebGL;
|
|
68
|
+
private invertPixels;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=ColorInverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ColorInverter.d.ts","sourceRoot":"","sources":["../../src/core/ColorInverter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,YAAY,CAAC;AAElE,oCAAoC;AACpC,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,YAAY,CAAC;AAE1D,oBAAoB;AACpB,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,8CAA8C;AAC9C,eAAO,MAAM,iBAAiB,iCAAiC,CAAC;AAEhE,oCAAoC;AACpC,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAoC/C,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,EAAE,CAAsC;IAChD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,YAAY,CAAqC;IACzD,OAAO,CAAC,UAAU,CAAqC;IACvD,sCAAsC;IACtC,OAAO,CAAC,UAAU,CAAwB;IAC1C,eAAe;IACf,OAAO,CAAC,UAAU,CAAS;IAE3B,sBAAsB;IACtB,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,kBAA8B,EAAE,SAAS,SAA+B,GAAG,OAAO;IAuBhO,qFAAqF;IACrF,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,SAA+B,GAAG,OAAO;IAI5L,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,WAAW;IAuDnB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,YAAY;CAyBpB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 单画布视口渲染器 —— 替换旧的「瓦片虚拟化」方案(TileRenderer + TileCache 不再参与查看器渲染)。
|
|
3
|
+
*
|
|
4
|
+
* 模型(与 pdfview-new 已验证的交互核心一致):
|
|
5
|
+
* · 只有 1 张可见 canvas,另加 1 张复用的离屏 canvas 做双缓冲(零闪动);
|
|
6
|
+
* · 视图状态只有两个量:zoom(CSS px / pt) 与 center(纸面 pt,y 向下),
|
|
7
|
+
* 所有屏幕位置由它们反推 —— 没有 tx/ty + cssExtraScale 的“两阶段补偿”,
|
|
8
|
+
* 也就没有逐档累积的锚点漂移;
|
|
9
|
+
* · backing 超过 maxSide 时不再切 tile,而是只渲染「可见 region」,
|
|
10
|
+
* 于是 backing 尺寸恒为 ≈ 视口 × DPR(与 zoom 无关),深缩放不爆内存;
|
|
11
|
+
* · 每次渲染前 cancel 上一次未完成的渲染:滚轮连发不排队、不卡顿。
|
|
12
|
+
*
|
|
13
|
+
* 坐标系:
|
|
14
|
+
* pt —— PDF 页面坐标(scale=1 的 viewport 尺寸,y 向下)
|
|
15
|
+
* 屏幕 px —— client 坐标(用于滚轮锚点/拖拽位移)
|
|
16
|
+
* center —— 位于视口正中的纸面 pt 点,是唯一的位置真值
|
|
17
|
+
*
|
|
18
|
+
* DOM 约定(由 PdfViewer.vue 提供):
|
|
19
|
+
* stage(overflow:hidden, position:relative)> wrap(整页 CSS 尺寸的内容空间)> canvas(可见位图)
|
|
20
|
+
*/
|
|
21
|
+
import type { PDFDocumentProxy, PDFPageProxy } from "pdfjs-dist";
|
|
22
|
+
import { type InvertMode } from "./ColorInverter";
|
|
23
|
+
export interface PagePt {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
}
|
|
27
|
+
export interface PageSize {
|
|
28
|
+
wPt: number;
|
|
29
|
+
hPt: number;
|
|
30
|
+
}
|
|
31
|
+
/** 纸面 pt 矩形(region.tiled 表示这是分片渲染的可见块) */
|
|
32
|
+
export interface RenderRegion {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
w: number;
|
|
36
|
+
h: number;
|
|
37
|
+
tiled: boolean;
|
|
38
|
+
}
|
|
39
|
+
/** 当前「眼睛看到的那张图」的映射(锚点换算必须基于它,不能基于目标值) */
|
|
40
|
+
export interface PresentedMapping {
|
|
41
|
+
zoom: number;
|
|
42
|
+
center: PagePt;
|
|
43
|
+
region: RenderRegion;
|
|
44
|
+
/** 已应用在位图上的屏幕位移(拖拽跟手 + 已提交未上屏的平移) */
|
|
45
|
+
offset: PagePt;
|
|
46
|
+
}
|
|
47
|
+
export interface PageCanvasRendererOptions {
|
|
48
|
+
/** 可见位图 canvas */
|
|
49
|
+
canvas: HTMLCanvasElement;
|
|
50
|
+
/** 视口容器(overflow:hidden,绝对定位基准) */
|
|
51
|
+
stage: HTMLElement;
|
|
52
|
+
/** 内容空间容器:整页 CSS 尺寸(标注 overlay 挂在这里);可不传 */
|
|
53
|
+
wrap?: HTMLElement | null;
|
|
54
|
+
/** 渲染倍率,默认取 devicePixelRatio(1 个 backing px = 1 个设备 px) */
|
|
55
|
+
dpr?: () => number;
|
|
56
|
+
/** 页面背景色(主题切换时重绘) */
|
|
57
|
+
backgroundColor?: string;
|
|
58
|
+
/**
|
|
59
|
+
* 内容反色:CAD 导出的图纸多数是「白纸 + 黑线」,深色主题下只改底色会看不见内容。
|
|
60
|
+
* 开启后统一铺白再按 invert 上屏(纸变深、线变浅),标注层不受影响。
|
|
61
|
+
*/
|
|
62
|
+
invertColors?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* 反色模式:
|
|
65
|
+
* "unblend" —— 覆盖度反解(默认,推荐):灰度翻明度;彩色保持原色原亮度、
|
|
66
|
+
* 边缘按覆盖度自然变暗到新纸色 → 不改彩色、也没有白边(WebGL pass,4~19ms/帧)
|
|
67
|
+
* "hue" —— 保色相反色:0ms GPU 滤镜,但彩色明度会翻(黄/青/绿变暗)
|
|
68
|
+
* "all" —— 纯反色:彩色变互补色(红→青)
|
|
69
|
+
* "achromatic" —— 只反黑白、彩色完全原样(代价:彩色边缘有亮边)
|
|
70
|
+
*/
|
|
71
|
+
invertMode?: InvertMode;
|
|
72
|
+
/** "achromatic" 模式下的黑白判定阈值(色度 ≤ 该值视为黑白,默认 24) */
|
|
73
|
+
invertThreshold?: number;
|
|
74
|
+
/** 单边 backing 上限,超过则只渲染可见 region(默认 8192) */
|
|
75
|
+
maxSide?: number;
|
|
76
|
+
/** 分片时的预取边倍率(默认 1.25,即多渲染 25% 的边) */
|
|
77
|
+
prefetch?: number;
|
|
78
|
+
minZoom?: number;
|
|
79
|
+
maxZoom?: number;
|
|
80
|
+
/** 每帧新位图上屏后的回调(同步标注画布 / 上报状态用) */
|
|
81
|
+
onPresented?: (state: PresentedMapping) => void;
|
|
82
|
+
}
|
|
83
|
+
/** 兼容旧名:纯反色滤镜字符串 */
|
|
84
|
+
export declare const INVERT_FILTER = "invert(1)";
|
|
85
|
+
export declare class PageCanvasRenderer {
|
|
86
|
+
private readonly canvas;
|
|
87
|
+
private readonly stage;
|
|
88
|
+
private readonly wrap;
|
|
89
|
+
private readonly ctx;
|
|
90
|
+
private readonly off;
|
|
91
|
+
private readonly offCtx;
|
|
92
|
+
private readonly dprOf;
|
|
93
|
+
private readonly maxSide;
|
|
94
|
+
private readonly prefetch;
|
|
95
|
+
private minZoom;
|
|
96
|
+
private maxZoomValue;
|
|
97
|
+
private readonly onPresented;
|
|
98
|
+
private doc;
|
|
99
|
+
private page;
|
|
100
|
+
private pageW;
|
|
101
|
+
private pageH;
|
|
102
|
+
/** 图纸油墨中心(缩略图非白像素 bbox 中心),用于首次打开时不缩进空白纸面 */
|
|
103
|
+
private inkCenter;
|
|
104
|
+
private zoomValue;
|
|
105
|
+
private centerValue;
|
|
106
|
+
/** 上一次真正上屏的映射(= 用户眼睛看到的那张图) */
|
|
107
|
+
private presentedValue;
|
|
108
|
+
/** 已提交但尚未上屏的屏幕位移(拖拽松手后到新位图上屏之间) */
|
|
109
|
+
private unpresented;
|
|
110
|
+
/** 当前拖拽增量(屏幕 px,仅视觉,未提交) */
|
|
111
|
+
private dragExtra;
|
|
112
|
+
private seq;
|
|
113
|
+
private task;
|
|
114
|
+
private rafId;
|
|
115
|
+
private backgroundColor;
|
|
116
|
+
private invertColorsValue;
|
|
117
|
+
private invertModeValue;
|
|
118
|
+
private invertThresholdValue;
|
|
119
|
+
private readonly inverter;
|
|
120
|
+
private destroyed;
|
|
121
|
+
/** stage 内容区(client 尺寸 + 内容原点在 client 坐标里的位置) */
|
|
122
|
+
private stageBox;
|
|
123
|
+
constructor(options: PageCanvasRendererOptions);
|
|
124
|
+
get zoom(): number;
|
|
125
|
+
get center(): PagePt;
|
|
126
|
+
get size(): PageSize;
|
|
127
|
+
/** 眼睛看到的那张图(含尚未上屏的视觉位移) */
|
|
128
|
+
get presented(): PresentedMapping;
|
|
129
|
+
get pageRef(): PDFPageProxy | null;
|
|
130
|
+
/** 绑定文档并取第一页;返回页面 pt 尺寸 */
|
|
131
|
+
open(doc: PDFDocumentProxy): Promise<PageSize>;
|
|
132
|
+
/** 缩略图扫非白像素求油墨 bbox 中心(失败回落页面中心) */
|
|
133
|
+
private detectInkCenter;
|
|
134
|
+
destroy(): void;
|
|
135
|
+
/** 卸载当前文档(保留渲染器实例,供再次 load 复用) */
|
|
136
|
+
unload(): void;
|
|
137
|
+
/** 取消上一次未完成的渲染(滚轮连发/快速平移时必须调,否则排队卡顿) */
|
|
138
|
+
cancel(): void;
|
|
139
|
+
setBackgroundColor(color: string): void;
|
|
140
|
+
get invertColors(): boolean;
|
|
141
|
+
/** 反色模式(unblend = 覆盖度反解;hue = 保色相;all = 纯反色;achromatic = 彩色完全原样) */
|
|
142
|
+
get invertMode(): InvertMode;
|
|
143
|
+
/** 开关内容反色(深色主题下由上层跟随主题调用);变化时才重渲染 */
|
|
144
|
+
setInvertColors(on: boolean): void;
|
|
145
|
+
/** 切换反色模式(会重渲染) */
|
|
146
|
+
setInvertMode(mode: InvertMode, threshold?: number): void;
|
|
147
|
+
/** 当前智能反色是否走 WebGL 快路径(降级时为逐像素) */
|
|
148
|
+
get usingWebGLInvert(): boolean;
|
|
149
|
+
/** 当前最大倍率(默认 128x,可由上层随时调整) */
|
|
150
|
+
get maxZoom(): number;
|
|
151
|
+
/**
|
|
152
|
+
* 调整最大倍率(可运行时改:不同图纸类型给不同上限)。
|
|
153
|
+
* 若当前倍率已超新上限,会夹回新上限并重渲染。
|
|
154
|
+
*/
|
|
155
|
+
setMaxZoom(zoom: number): void;
|
|
156
|
+
/** 直接设定 zoom(以当前 center 为锚,即视口中心不动) */
|
|
157
|
+
setZoom(zoom: number): void;
|
|
158
|
+
/**
|
|
159
|
+
* 把纸面点 pt 钉在屏幕点 (clientX, clientY) 上,并同步设定 zoom。
|
|
160
|
+
* 显示层恒有「center 在 stage 中心、比例 = zoom」,故由光标屏位一步反推:
|
|
161
|
+
* center = pt - (光标屏位 - stage 中心) / zoom
|
|
162
|
+
* 与 region 尺寸、整页/分片切换完全无关 —— 这是旧实现逐档漂移的根治点。
|
|
163
|
+
*/
|
|
164
|
+
anchorAt(clientX: number, clientY: number, pt: PagePt, zoom: number): void;
|
|
165
|
+
/** 以屏幕点 (clientX, clientY) 为锚缩放:该点下的纸面 pt 在缩放前后保持不动 */
|
|
166
|
+
zoomAt(clientX: number, clientY: number, factor: number): boolean;
|
|
167
|
+
/** 拖拽中:只动位图(GPU 合成跟手),不重渲染 */
|
|
168
|
+
setDragOffset(dx: number, dy: number): void;
|
|
169
|
+
/** 松手:把整段屏幕位移一次折算成 pt 位移并提交渲染(位图保持拖后位置直到新图上屏) */
|
|
170
|
+
commitDrag(dx: number, dy: number): void;
|
|
171
|
+
/** 回到油墨中心(复位视图位置,不改 zoom) */
|
|
172
|
+
centerOnContent(): void;
|
|
173
|
+
private applyBitmapOffset;
|
|
174
|
+
/** 屏幕点 → 纸面 pt */
|
|
175
|
+
screenToPt(clientX: number, clientY: number): PagePt;
|
|
176
|
+
/** 纸面 pt → 屏幕点(用于把标注/工具锚到屏幕上) */
|
|
177
|
+
ptToScreen(pt: PagePt): PagePt;
|
|
178
|
+
/** 读取 stage 内容区几何(client 尺寸 + 内容原点在 client 坐标中的位置) */
|
|
179
|
+
refreshStageBox(): void;
|
|
180
|
+
private stageCenterOnScreen;
|
|
181
|
+
/** 需要分片时的可见 pt 矩形(含预取边);返回 null 表示整页可直接渲染 */
|
|
182
|
+
private computeRegion;
|
|
183
|
+
/** 把「位图 + 内容空间」摆到当前 zoom/center(上屏后调用) */
|
|
184
|
+
private layout;
|
|
185
|
+
/** rAF 合并渲染请求(连续滚轮/捏合时一帧只渲一次) */
|
|
186
|
+
requestRender(): void;
|
|
187
|
+
/** 立即渲染一帧(await 到上屏完成) */
|
|
188
|
+
render(): Promise<void>;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=PageCanvasRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PageCanvasRenderer.d.ts","sourceRoot":"","sources":["../../src/core/PageCanvasRenderer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { loadPDF, setPDFWorkerSrc, useDefaultWorker, type PDFLoadResult, type PDFLoadOptions } from "./core/PDFLoader";
|
|
2
|
+
export { PageCanvasRenderer, type PageCanvasRendererOptions, type PagePt, type PageSize, type RenderRegion, type PresentedMapping } from "./core/PageCanvasRenderer";
|
|
3
|
+
export { ColorInverter, DEFAULT_ACHROMATIC_THRESHOLD, INVERT_FILTER_ALL, INVERT_FILTER_HUE, type InvertMode, type PerPixelInvertMode } from "./core/ColorInverter";
|
|
2
4
|
export { TileLRUCache, type TileKey, type CachedTile } from "./core/TileCache";
|
|
3
5
|
export { renderPageTiledVirtual, type TileRenderOptions, type Tile, type TiledPage } from "./core/TileRenderer";
|
|
4
6
|
export { CoordTransformer } from "./core/coords/CoordTransformer";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,kBAAkB,EAAE,KAAK,yBAAyB,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrK,OAAO,EAAE,aAAa,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACnK,OAAO,EAAE,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/E,OAAO,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC7F,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtJ,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACN,WAAW,EACX,WAAW,EACX,WAAW,EACX,eAAe,EACf,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,MAAM,SAAS,CAAC"}
|