@cadview/vue 0.1.0 → 0.3.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/index.cjs +36 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -5
- package/dist/index.d.ts +32 -5
- package/dist/index.js +36 -3
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -19,9 +19,17 @@ var CadViewer = vue.defineComponent({
|
|
|
19
19
|
type: String,
|
|
20
20
|
default: "pan"
|
|
21
21
|
},
|
|
22
|
+
debug: {
|
|
23
|
+
type: [Boolean, Object],
|
|
24
|
+
default: void 0
|
|
25
|
+
},
|
|
22
26
|
options: {
|
|
23
27
|
type: Object,
|
|
24
28
|
default: () => ({})
|
|
29
|
+
},
|
|
30
|
+
formatConverters: {
|
|
31
|
+
type: Array,
|
|
32
|
+
default: void 0
|
|
25
33
|
}
|
|
26
34
|
},
|
|
27
35
|
emits: ["select", "measure", "viewchange", "layers-loaded"],
|
|
@@ -33,6 +41,8 @@ var CadViewer = vue.defineComponent({
|
|
|
33
41
|
const viewer = new core.CadViewer(canvasRef.value, {
|
|
34
42
|
theme: props.theme,
|
|
35
43
|
initialTool: props.tool,
|
|
44
|
+
debug: props.debug,
|
|
45
|
+
formatConverters: props.formatConverters,
|
|
36
46
|
...props.options
|
|
37
47
|
});
|
|
38
48
|
viewerRef.value = viewer;
|
|
@@ -56,22 +66,38 @@ var CadViewer = vue.defineComponent({
|
|
|
56
66
|
viewerRef.value?.setTool(newTool);
|
|
57
67
|
}
|
|
58
68
|
);
|
|
69
|
+
vue.watch(
|
|
70
|
+
() => props.debug,
|
|
71
|
+
(newDebug) => {
|
|
72
|
+
if (newDebug !== void 0) {
|
|
73
|
+
viewerRef.value?.setDebug(newDebug);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
let loadCancelled = false;
|
|
59
78
|
vue.watch(
|
|
60
79
|
() => props.file,
|
|
61
80
|
async (newFile) => {
|
|
62
81
|
const viewer = viewerRef.value;
|
|
63
82
|
if (!viewer || !newFile) return;
|
|
83
|
+
loadCancelled = true;
|
|
84
|
+
loadCancelled = false;
|
|
85
|
+
const wasCancelled = () => loadCancelled;
|
|
64
86
|
try {
|
|
65
87
|
if (newFile instanceof File) {
|
|
66
88
|
await viewer.loadFile(newFile);
|
|
67
89
|
} else if (newFile instanceof ArrayBuffer) {
|
|
68
|
-
viewer.
|
|
90
|
+
await viewer.loadBuffer(newFile);
|
|
69
91
|
} else if (typeof newFile === "string") {
|
|
70
92
|
viewer.loadString(newFile);
|
|
71
93
|
}
|
|
72
|
-
|
|
94
|
+
if (!wasCancelled()) {
|
|
95
|
+
emit("layers-loaded", viewer.getLayers());
|
|
96
|
+
}
|
|
73
97
|
} catch (err) {
|
|
74
|
-
|
|
98
|
+
if (!wasCancelled()) {
|
|
99
|
+
console.error("CadViewer: failed to load file", err);
|
|
100
|
+
}
|
|
75
101
|
}
|
|
76
102
|
}
|
|
77
103
|
);
|
|
@@ -111,6 +137,12 @@ function useCadViewer(canvasRef, options) {
|
|
|
111
137
|
layers.value = viewer.value.getLayers();
|
|
112
138
|
isLoaded.value = true;
|
|
113
139
|
};
|
|
140
|
+
const loadBuffer = async (buffer) => {
|
|
141
|
+
if (!viewer.value) return;
|
|
142
|
+
await viewer.value.loadBuffer(buffer);
|
|
143
|
+
layers.value = viewer.value.getLayers();
|
|
144
|
+
isLoaded.value = true;
|
|
145
|
+
};
|
|
114
146
|
const loadString = (dxf) => {
|
|
115
147
|
if (!viewer.value) return;
|
|
116
148
|
viewer.value.loadString(dxf);
|
|
@@ -122,6 +154,7 @@ function useCadViewer(canvasRef, options) {
|
|
|
122
154
|
layers,
|
|
123
155
|
isLoaded,
|
|
124
156
|
loadFile,
|
|
157
|
+
loadBuffer,
|
|
125
158
|
loadString,
|
|
126
159
|
fitToView: () => viewer.value?.fitToView(),
|
|
127
160
|
setLayerVisible: (name, visible) => viewer.value?.setLayerVisible(name, visible),
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CadViewer.tsx","../src/useCadViewer.ts"],"names":["defineComponent","ref","onMounted","CoreCadViewer","onUnmounted","watch","h","CadViewer"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onUnmounted,\n watch,\n h,\n type PropType,\n} from 'vue';\nimport {\n CadViewer as CoreCadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type SelectEvent,\n type MeasureEvent,\n type ViewTransform,\n type Tool,\n type Theme,\n} from '@cadview/core';\n\nexport const CadViewer = defineComponent({\n name: 'CadViewer',\n\n props: {\n file: {\n type: [File, ArrayBuffer, String] as PropType<File | ArrayBuffer | string | null>,\n default: null,\n },\n theme: {\n type: String as PropType<Theme>,\n default: 'dark',\n },\n tool: {\n type: String as PropType<Tool>,\n default: 'pan',\n },\n options: {\n type: Object as PropType<Omit<CadViewerOptions, 'theme' | 'initialTool'>>,\n default: () => ({}),\n },\n },\n\n emits: ['select', 'measure', 'viewchange', 'layers-loaded'],\n\n setup(props, { emit, expose }) {\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const viewerRef = ref<CoreCadViewer | null>(null);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const viewer = new CoreCadViewer(canvasRef.value, {\n theme: props.theme,\n initialTool: props.tool,\n ...props.options,\n });\n viewerRef.value = viewer;\n\n viewer.on('select', (e: SelectEvent) => emit('select', e));\n viewer.on('measure', (e: MeasureEvent) => emit('measure', e));\n viewer.on('viewchange', (vt: ViewTransform) => emit('viewchange', vt));\n });\n\n onUnmounted(() => {\n viewerRef.value?.destroy();\n viewerRef.value = null;\n });\n\n watch(\n () => props.theme,\n (newTheme) => {\n viewerRef.value?.setTheme(newTheme);\n },\n );\n\n watch(\n () => props.tool,\n (newTool) => {\n viewerRef.value?.setTool(newTool);\n },\n );\n\n watch(\n () => props.file,\n async (newFile) => {\n const viewer = viewerRef.value;\n if (!viewer || !newFile) return;\n\n try {\n if (newFile instanceof File) {\n await viewer.loadFile(newFile);\n } else if (newFile instanceof ArrayBuffer) {\n viewer.loadArrayBuffer(newFile);\n } else if (typeof newFile === 'string') {\n viewer.loadString(newFile);\n }\n\n emit('layers-loaded', viewer.getLayers() as DxfLayer[]);\n } catch (err) {\n console.error('CadViewer: failed to load file', err);\n }\n },\n );\n\n expose({\n getViewer: () => viewerRef.value,\n fitToView: () => viewerRef.value?.fitToView(),\n getLayers: () => viewerRef.value?.getLayers() ?? [],\n setLayerVisible: (name: string, visible: boolean) =>\n viewerRef.value?.setLayerVisible(name, visible),\n });\n\n return () =>\n h(\n 'div',\n { style: { position: 'relative', overflow: 'hidden' } },\n [\n h('canvas', {\n ref: canvasRef,\n style: { display: 'block', width: '100%', height: '100%' },\n }),\n ],\n );\n },\n});\n","import { ref, onMounted, onUnmounted, type Ref } from 'vue';\nimport {\n CadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type Theme,\n type Tool,\n} from '@cadview/core';\n\nexport function useCadViewer(\n canvasRef: Ref<HTMLCanvasElement | null>,\n options?: CadViewerOptions,\n) {\n const viewer = ref<CadViewer | null>(null);\n const layers = ref<DxfLayer[]>([]);\n const isLoaded = ref(false);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n viewer.value = new CadViewer(canvasRef.value, options);\n });\n\n onUnmounted(() => {\n viewer.value?.destroy();\n viewer.value = null;\n });\n\n const loadFile = async (file: File) => {\n if (!viewer.value) return;\n await viewer.value.loadFile(file);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadString = (dxf: string) => {\n if (!viewer.value) return;\n viewer.value.loadString(dxf);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n return {\n viewer,\n layers,\n isLoaded,\n loadFile,\n loadString,\n fitToView: () => viewer.value?.fitToView(),\n setLayerVisible: (name: string, visible: boolean) =>\n viewer.value?.setLayerVisible(name, visible),\n setTheme: (theme: Theme) => viewer.value?.setTheme(theme),\n setTool: (tool: Tool) => viewer.value?.setTool(tool),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/CadViewer.tsx","../src/useCadViewer.ts"],"names":["defineComponent","ref","onMounted","CoreCadViewer","onUnmounted","watch","h","CadViewer"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onUnmounted,\n watch,\n h,\n type PropType,\n} from 'vue';\nimport {\n CadViewer as CoreCadViewer,\n type CadViewerOptions,\n type FormatConverter,\n type DebugOptions,\n type DxfLayer,\n type SelectEvent,\n type MeasureEvent,\n type ViewTransform,\n type Tool,\n type Theme,\n} from '@cadview/core';\n\nexport const CadViewer = defineComponent({\n name: 'CadViewer',\n\n props: {\n file: {\n type: [File, ArrayBuffer, String] as PropType<File | ArrayBuffer | string | null>,\n default: null,\n },\n theme: {\n type: String as PropType<Theme>,\n default: 'dark',\n },\n tool: {\n type: String as PropType<Tool>,\n default: 'pan',\n },\n debug: {\n type: [Boolean, Object] as PropType<boolean | DebugOptions>,\n default: undefined,\n },\n options: {\n type: Object as PropType<Omit<CadViewerOptions, 'theme' | 'initialTool' | 'debug'>>,\n default: () => ({}),\n },\n formatConverters: {\n type: Array as PropType<FormatConverter[]>,\n default: undefined,\n },\n },\n\n emits: ['select', 'measure', 'viewchange', 'layers-loaded'],\n\n setup(props, { emit, expose }) {\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const viewerRef = ref<CoreCadViewer | null>(null);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const viewer = new CoreCadViewer(canvasRef.value, {\n theme: props.theme,\n initialTool: props.tool,\n debug: props.debug,\n formatConverters: props.formatConverters,\n ...props.options,\n });\n viewerRef.value = viewer;\n\n viewer.on('select', (e: SelectEvent) => emit('select', e));\n viewer.on('measure', (e: MeasureEvent) => emit('measure', e));\n viewer.on('viewchange', (vt: ViewTransform) => emit('viewchange', vt));\n });\n\n onUnmounted(() => {\n viewerRef.value?.destroy();\n viewerRef.value = null;\n });\n\n watch(\n () => props.theme,\n (newTheme) => {\n viewerRef.value?.setTheme(newTheme);\n },\n );\n\n watch(\n () => props.tool,\n (newTool) => {\n viewerRef.value?.setTool(newTool);\n },\n );\n\n watch(\n () => props.debug,\n (newDebug) => {\n if (newDebug !== undefined) {\n viewerRef.value?.setDebug(newDebug);\n }\n },\n );\n\n let loadCancelled = false;\n\n watch(\n () => props.file,\n async (newFile) => {\n const viewer = viewerRef.value;\n if (!viewer || !newFile) return;\n loadCancelled = true; // cancel any in-flight load\n loadCancelled = false;\n const wasCancelled = () => loadCancelled;\n\n try {\n if (newFile instanceof File) {\n await viewer.loadFile(newFile);\n } else if (newFile instanceof ArrayBuffer) {\n await viewer.loadBuffer(newFile);\n } else if (typeof newFile === 'string') {\n viewer.loadString(newFile);\n }\n\n if (!wasCancelled()) {\n emit('layers-loaded', viewer.getLayers() as DxfLayer[]);\n }\n } catch (err) {\n if (!wasCancelled()) {\n console.error('CadViewer: failed to load file', err);\n }\n }\n },\n );\n\n expose({\n getViewer: () => viewerRef.value,\n fitToView: () => viewerRef.value?.fitToView(),\n getLayers: () => viewerRef.value?.getLayers() ?? [],\n setLayerVisible: (name: string, visible: boolean) =>\n viewerRef.value?.setLayerVisible(name, visible),\n });\n\n return () =>\n h(\n 'div',\n { style: { position: 'relative', overflow: 'hidden' } },\n [\n h('canvas', {\n ref: canvasRef,\n style: { display: 'block', width: '100%', height: '100%' },\n }),\n ],\n );\n },\n});\n","import { ref, onMounted, onUnmounted, type Ref } from 'vue';\nimport {\n CadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type Theme,\n type Tool,\n} from '@cadview/core';\n\nexport function useCadViewer(\n canvasRef: Ref<HTMLCanvasElement | null>,\n options?: CadViewerOptions,\n) {\n const viewer = ref<CadViewer | null>(null);\n const layers = ref<DxfLayer[]>([]);\n const isLoaded = ref(false);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n viewer.value = new CadViewer(canvasRef.value, options);\n });\n\n onUnmounted(() => {\n viewer.value?.destroy();\n viewer.value = null;\n });\n\n const loadFile = async (file: File) => {\n if (!viewer.value) return;\n await viewer.value.loadFile(file);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadBuffer = async (buffer: ArrayBuffer) => {\n if (!viewer.value) return;\n await viewer.value.loadBuffer(buffer);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadString = (dxf: string) => {\n if (!viewer.value) return;\n viewer.value.loadString(dxf);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n return {\n viewer,\n layers,\n isLoaded,\n loadFile,\n loadBuffer,\n loadString,\n fitToView: () => viewer.value?.fitToView(),\n setLayerVisible: (name: string, visible: boolean) =>\n viewer.value?.setLayerVisible(name, visible),\n setTheme: (theme: Theme) => viewer.value?.setTheme(theme),\n setTool: (tool: Tool) => viewer.value?.setTool(tool),\n };\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { PropType, Ref } from 'vue';
|
|
3
3
|
import * as _cadview_core from '@cadview/core';
|
|
4
|
-
import { Theme, Tool, CadViewerOptions, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
|
|
5
|
-
export { CadViewerOptions, DxfDocument, DxfEntity, DxfLayer, MeasureEvent, SelectEvent, Theme, Tool, ViewTransform } from '@cadview/core';
|
|
4
|
+
import { Theme, Tool, DebugOptions, CadViewerOptions, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
|
|
5
|
+
export { CadViewerOptions, DxfDocument, DxfEntity, DxfLayer, FormatConverter, MeasureEvent, SelectEvent, Theme, Tool, ViewTransform } from '@cadview/core';
|
|
6
6
|
|
|
7
7
|
declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
8
8
|
file: {
|
|
@@ -17,10 +17,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
17
17
|
type: PropType<Tool>;
|
|
18
18
|
default: string;
|
|
19
19
|
};
|
|
20
|
+
debug: {
|
|
21
|
+
type: PropType<boolean | DebugOptions>;
|
|
22
|
+
default: undefined;
|
|
23
|
+
};
|
|
20
24
|
options: {
|
|
21
|
-
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
|
|
25
|
+
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
|
|
22
26
|
default: () => {};
|
|
23
27
|
};
|
|
28
|
+
formatConverters: {
|
|
29
|
+
type: PropType<FormatConverter[]>;
|
|
30
|
+
default: undefined;
|
|
31
|
+
};
|
|
24
32
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
25
33
|
[key: string]: any;
|
|
26
34
|
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("select" | "measure" | "viewchange" | "layers-loaded")[], "select" | "measure" | "viewchange" | "layers-loaded", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
@@ -36,10 +44,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
36
44
|
type: PropType<Tool>;
|
|
37
45
|
default: string;
|
|
38
46
|
};
|
|
47
|
+
debug: {
|
|
48
|
+
type: PropType<boolean | DebugOptions>;
|
|
49
|
+
default: undefined;
|
|
50
|
+
};
|
|
39
51
|
options: {
|
|
40
|
-
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
|
|
52
|
+
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
|
|
41
53
|
default: () => {};
|
|
42
54
|
};
|
|
55
|
+
formatConverters: {
|
|
56
|
+
type: PropType<FormatConverter[]>;
|
|
57
|
+
default: undefined;
|
|
58
|
+
};
|
|
43
59
|
}>> & Readonly<{
|
|
44
60
|
onSelect?: ((...args: any[]) => any) | undefined;
|
|
45
61
|
onMeasure?: ((...args: any[]) => any) | undefined;
|
|
@@ -47,14 +63,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
47
63
|
"onLayers-loaded"?: ((...args: any[]) => any) | undefined;
|
|
48
64
|
}>, {
|
|
49
65
|
theme: Theme;
|
|
66
|
+
debug: boolean | DebugOptions;
|
|
67
|
+
formatConverters: FormatConverter[];
|
|
50
68
|
file: string | File | ArrayBuffer | null;
|
|
51
69
|
tool: Tool;
|
|
52
|
-
options: Omit<CadViewerOptions, "theme" | "initialTool">;
|
|
70
|
+
options: Omit<CadViewerOptions, "theme" | "initialTool" | "debug">;
|
|
53
71
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
54
72
|
|
|
55
73
|
declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
|
|
56
74
|
viewer: Ref<{
|
|
57
75
|
loadFile: (file: File) => Promise<void>;
|
|
76
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
77
|
+
loadDocument: (doc: _cadview_core.DxfDocument) => void;
|
|
58
78
|
loadString: (dxf: string) => void;
|
|
59
79
|
loadArrayBuffer: (buffer: ArrayBuffer) => void;
|
|
60
80
|
clearDocument: () => void;
|
|
@@ -78,12 +98,16 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
78
98
|
resize: () => void;
|
|
79
99
|
destroy: () => void;
|
|
80
100
|
requestRender: () => void;
|
|
101
|
+
setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
|
|
102
|
+
getDebugStats: () => _cadview_core.DebugStats | null;
|
|
81
103
|
handlePan: (dx: number, dy: number) => void;
|
|
82
104
|
handleZoom: (screenX: number, screenY: number, factor: number) => void;
|
|
83
105
|
handleClick: (screenX: number, screenY: number) => void;
|
|
84
106
|
handleMouseMove: (screenX: number, screenY: number) => void;
|
|
85
107
|
} | null, CadViewer$1 | {
|
|
86
108
|
loadFile: (file: File) => Promise<void>;
|
|
109
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
110
|
+
loadDocument: (doc: _cadview_core.DxfDocument) => void;
|
|
87
111
|
loadString: (dxf: string) => void;
|
|
88
112
|
loadArrayBuffer: (buffer: ArrayBuffer) => void;
|
|
89
113
|
clearDocument: () => void;
|
|
@@ -107,6 +131,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
107
131
|
resize: () => void;
|
|
108
132
|
destroy: () => void;
|
|
109
133
|
requestRender: () => void;
|
|
134
|
+
setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
|
|
135
|
+
getDebugStats: () => _cadview_core.DebugStats | null;
|
|
110
136
|
handlePan: (dx: number, dy: number) => void;
|
|
111
137
|
handleZoom: (screenX: number, screenY: number, factor: number) => void;
|
|
112
138
|
handleClick: (screenX: number, screenY: number) => void;
|
|
@@ -135,6 +161,7 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
135
161
|
}[]>;
|
|
136
162
|
isLoaded: Ref<boolean, boolean>;
|
|
137
163
|
loadFile: (file: File) => Promise<void>;
|
|
164
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
138
165
|
loadString: (dxf: string) => void;
|
|
139
166
|
fitToView: () => void | undefined;
|
|
140
167
|
setLayerVisible: (name: string, visible: boolean) => void | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { PropType, Ref } from 'vue';
|
|
3
3
|
import * as _cadview_core from '@cadview/core';
|
|
4
|
-
import { Theme, Tool, CadViewerOptions, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
|
|
5
|
-
export { CadViewerOptions, DxfDocument, DxfEntity, DxfLayer, MeasureEvent, SelectEvent, Theme, Tool, ViewTransform } from '@cadview/core';
|
|
4
|
+
import { Theme, Tool, DebugOptions, CadViewerOptions, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
|
|
5
|
+
export { CadViewerOptions, DxfDocument, DxfEntity, DxfLayer, FormatConverter, MeasureEvent, SelectEvent, Theme, Tool, ViewTransform } from '@cadview/core';
|
|
6
6
|
|
|
7
7
|
declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
8
8
|
file: {
|
|
@@ -17,10 +17,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
17
17
|
type: PropType<Tool>;
|
|
18
18
|
default: string;
|
|
19
19
|
};
|
|
20
|
+
debug: {
|
|
21
|
+
type: PropType<boolean | DebugOptions>;
|
|
22
|
+
default: undefined;
|
|
23
|
+
};
|
|
20
24
|
options: {
|
|
21
|
-
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
|
|
25
|
+
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
|
|
22
26
|
default: () => {};
|
|
23
27
|
};
|
|
28
|
+
formatConverters: {
|
|
29
|
+
type: PropType<FormatConverter[]>;
|
|
30
|
+
default: undefined;
|
|
31
|
+
};
|
|
24
32
|
}>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
|
|
25
33
|
[key: string]: any;
|
|
26
34
|
}>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("select" | "measure" | "viewchange" | "layers-loaded")[], "select" | "measure" | "viewchange" | "layers-loaded", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
@@ -36,10 +44,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
36
44
|
type: PropType<Tool>;
|
|
37
45
|
default: string;
|
|
38
46
|
};
|
|
47
|
+
debug: {
|
|
48
|
+
type: PropType<boolean | DebugOptions>;
|
|
49
|
+
default: undefined;
|
|
50
|
+
};
|
|
39
51
|
options: {
|
|
40
|
-
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
|
|
52
|
+
type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
|
|
41
53
|
default: () => {};
|
|
42
54
|
};
|
|
55
|
+
formatConverters: {
|
|
56
|
+
type: PropType<FormatConverter[]>;
|
|
57
|
+
default: undefined;
|
|
58
|
+
};
|
|
43
59
|
}>> & Readonly<{
|
|
44
60
|
onSelect?: ((...args: any[]) => any) | undefined;
|
|
45
61
|
onMeasure?: ((...args: any[]) => any) | undefined;
|
|
@@ -47,14 +63,18 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
47
63
|
"onLayers-loaded"?: ((...args: any[]) => any) | undefined;
|
|
48
64
|
}>, {
|
|
49
65
|
theme: Theme;
|
|
66
|
+
debug: boolean | DebugOptions;
|
|
67
|
+
formatConverters: FormatConverter[];
|
|
50
68
|
file: string | File | ArrayBuffer | null;
|
|
51
69
|
tool: Tool;
|
|
52
|
-
options: Omit<CadViewerOptions, "theme" | "initialTool">;
|
|
70
|
+
options: Omit<CadViewerOptions, "theme" | "initialTool" | "debug">;
|
|
53
71
|
}, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
|
|
54
72
|
|
|
55
73
|
declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
|
|
56
74
|
viewer: Ref<{
|
|
57
75
|
loadFile: (file: File) => Promise<void>;
|
|
76
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
77
|
+
loadDocument: (doc: _cadview_core.DxfDocument) => void;
|
|
58
78
|
loadString: (dxf: string) => void;
|
|
59
79
|
loadArrayBuffer: (buffer: ArrayBuffer) => void;
|
|
60
80
|
clearDocument: () => void;
|
|
@@ -78,12 +98,16 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
78
98
|
resize: () => void;
|
|
79
99
|
destroy: () => void;
|
|
80
100
|
requestRender: () => void;
|
|
101
|
+
setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
|
|
102
|
+
getDebugStats: () => _cadview_core.DebugStats | null;
|
|
81
103
|
handlePan: (dx: number, dy: number) => void;
|
|
82
104
|
handleZoom: (screenX: number, screenY: number, factor: number) => void;
|
|
83
105
|
handleClick: (screenX: number, screenY: number) => void;
|
|
84
106
|
handleMouseMove: (screenX: number, screenY: number) => void;
|
|
85
107
|
} | null, CadViewer$1 | {
|
|
86
108
|
loadFile: (file: File) => Promise<void>;
|
|
109
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
110
|
+
loadDocument: (doc: _cadview_core.DxfDocument) => void;
|
|
87
111
|
loadString: (dxf: string) => void;
|
|
88
112
|
loadArrayBuffer: (buffer: ArrayBuffer) => void;
|
|
89
113
|
clearDocument: () => void;
|
|
@@ -107,6 +131,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
107
131
|
resize: () => void;
|
|
108
132
|
destroy: () => void;
|
|
109
133
|
requestRender: () => void;
|
|
134
|
+
setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
|
|
135
|
+
getDebugStats: () => _cadview_core.DebugStats | null;
|
|
110
136
|
handlePan: (dx: number, dy: number) => void;
|
|
111
137
|
handleZoom: (screenX: number, screenY: number, factor: number) => void;
|
|
112
138
|
handleClick: (screenX: number, screenY: number) => void;
|
|
@@ -135,6 +161,7 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
|
|
|
135
161
|
}[]>;
|
|
136
162
|
isLoaded: Ref<boolean, boolean>;
|
|
137
163
|
loadFile: (file: File) => Promise<void>;
|
|
164
|
+
loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
|
|
138
165
|
loadString: (dxf: string) => void;
|
|
139
166
|
fitToView: () => void | undefined;
|
|
140
167
|
setLayerVisible: (name: string, visible: boolean) => void | undefined;
|
package/dist/index.js
CHANGED
|
@@ -17,9 +17,17 @@ var CadViewer = defineComponent({
|
|
|
17
17
|
type: String,
|
|
18
18
|
default: "pan"
|
|
19
19
|
},
|
|
20
|
+
debug: {
|
|
21
|
+
type: [Boolean, Object],
|
|
22
|
+
default: void 0
|
|
23
|
+
},
|
|
20
24
|
options: {
|
|
21
25
|
type: Object,
|
|
22
26
|
default: () => ({})
|
|
27
|
+
},
|
|
28
|
+
formatConverters: {
|
|
29
|
+
type: Array,
|
|
30
|
+
default: void 0
|
|
23
31
|
}
|
|
24
32
|
},
|
|
25
33
|
emits: ["select", "measure", "viewchange", "layers-loaded"],
|
|
@@ -31,6 +39,8 @@ var CadViewer = defineComponent({
|
|
|
31
39
|
const viewer = new CadViewer$1(canvasRef.value, {
|
|
32
40
|
theme: props.theme,
|
|
33
41
|
initialTool: props.tool,
|
|
42
|
+
debug: props.debug,
|
|
43
|
+
formatConverters: props.formatConverters,
|
|
34
44
|
...props.options
|
|
35
45
|
});
|
|
36
46
|
viewerRef.value = viewer;
|
|
@@ -54,22 +64,38 @@ var CadViewer = defineComponent({
|
|
|
54
64
|
viewerRef.value?.setTool(newTool);
|
|
55
65
|
}
|
|
56
66
|
);
|
|
67
|
+
watch(
|
|
68
|
+
() => props.debug,
|
|
69
|
+
(newDebug) => {
|
|
70
|
+
if (newDebug !== void 0) {
|
|
71
|
+
viewerRef.value?.setDebug(newDebug);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
let loadCancelled = false;
|
|
57
76
|
watch(
|
|
58
77
|
() => props.file,
|
|
59
78
|
async (newFile) => {
|
|
60
79
|
const viewer = viewerRef.value;
|
|
61
80
|
if (!viewer || !newFile) return;
|
|
81
|
+
loadCancelled = true;
|
|
82
|
+
loadCancelled = false;
|
|
83
|
+
const wasCancelled = () => loadCancelled;
|
|
62
84
|
try {
|
|
63
85
|
if (newFile instanceof File) {
|
|
64
86
|
await viewer.loadFile(newFile);
|
|
65
87
|
} else if (newFile instanceof ArrayBuffer) {
|
|
66
|
-
viewer.
|
|
88
|
+
await viewer.loadBuffer(newFile);
|
|
67
89
|
} else if (typeof newFile === "string") {
|
|
68
90
|
viewer.loadString(newFile);
|
|
69
91
|
}
|
|
70
|
-
|
|
92
|
+
if (!wasCancelled()) {
|
|
93
|
+
emit("layers-loaded", viewer.getLayers());
|
|
94
|
+
}
|
|
71
95
|
} catch (err) {
|
|
72
|
-
|
|
96
|
+
if (!wasCancelled()) {
|
|
97
|
+
console.error("CadViewer: failed to load file", err);
|
|
98
|
+
}
|
|
73
99
|
}
|
|
74
100
|
}
|
|
75
101
|
);
|
|
@@ -109,6 +135,12 @@ function useCadViewer(canvasRef, options) {
|
|
|
109
135
|
layers.value = viewer.value.getLayers();
|
|
110
136
|
isLoaded.value = true;
|
|
111
137
|
};
|
|
138
|
+
const loadBuffer = async (buffer) => {
|
|
139
|
+
if (!viewer.value) return;
|
|
140
|
+
await viewer.value.loadBuffer(buffer);
|
|
141
|
+
layers.value = viewer.value.getLayers();
|
|
142
|
+
isLoaded.value = true;
|
|
143
|
+
};
|
|
112
144
|
const loadString = (dxf) => {
|
|
113
145
|
if (!viewer.value) return;
|
|
114
146
|
viewer.value.loadString(dxf);
|
|
@@ -120,6 +152,7 @@ function useCadViewer(canvasRef, options) {
|
|
|
120
152
|
layers,
|
|
121
153
|
isLoaded,
|
|
122
154
|
loadFile,
|
|
155
|
+
loadBuffer,
|
|
123
156
|
loadString,
|
|
124
157
|
fitToView: () => viewer.value?.fitToView(),
|
|
125
158
|
setLayerVisible: (name, visible) => viewer.value?.setLayerVisible(name, visible),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/CadViewer.tsx","../src/useCadViewer.ts"],"names":["CoreCadViewer","ref","onMounted","CadViewer","onUnmounted"],"mappings":"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","file":"index.js","sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onUnmounted,\n watch,\n h,\n type PropType,\n} from 'vue';\nimport {\n CadViewer as CoreCadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type SelectEvent,\n type MeasureEvent,\n type ViewTransform,\n type Tool,\n type Theme,\n} from '@cadview/core';\n\nexport const CadViewer = defineComponent({\n name: 'CadViewer',\n\n props: {\n file: {\n type: [File, ArrayBuffer, String] as PropType<File | ArrayBuffer | string | null>,\n default: null,\n },\n theme: {\n type: String as PropType<Theme>,\n default: 'dark',\n },\n tool: {\n type: String as PropType<Tool>,\n default: 'pan',\n },\n options: {\n type: Object as PropType<Omit<CadViewerOptions, 'theme' | 'initialTool'>>,\n default: () => ({}),\n },\n },\n\n emits: ['select', 'measure', 'viewchange', 'layers-loaded'],\n\n setup(props, { emit, expose }) {\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const viewerRef = ref<CoreCadViewer | null>(null);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const viewer = new CoreCadViewer(canvasRef.value, {\n theme: props.theme,\n initialTool: props.tool,\n ...props.options,\n });\n viewerRef.value = viewer;\n\n viewer.on('select', (e: SelectEvent) => emit('select', e));\n viewer.on('measure', (e: MeasureEvent) => emit('measure', e));\n viewer.on('viewchange', (vt: ViewTransform) => emit('viewchange', vt));\n });\n\n onUnmounted(() => {\n viewerRef.value?.destroy();\n viewerRef.value = null;\n });\n\n watch(\n () => props.theme,\n (newTheme) => {\n viewerRef.value?.setTheme(newTheme);\n },\n );\n\n watch(\n () => props.tool,\n (newTool) => {\n viewerRef.value?.setTool(newTool);\n },\n );\n\n watch(\n () => props.file,\n async (newFile) => {\n const viewer = viewerRef.value;\n if (!viewer || !newFile) return;\n\n try {\n if (newFile instanceof File) {\n await viewer.loadFile(newFile);\n } else if (newFile instanceof ArrayBuffer) {\n viewer.loadArrayBuffer(newFile);\n } else if (typeof newFile === 'string') {\n viewer.loadString(newFile);\n }\n\n emit('layers-loaded', viewer.getLayers() as DxfLayer[]);\n } catch (err) {\n console.error('CadViewer: failed to load file', err);\n }\n },\n );\n\n expose({\n getViewer: () => viewerRef.value,\n fitToView: () => viewerRef.value?.fitToView(),\n getLayers: () => viewerRef.value?.getLayers() ?? [],\n setLayerVisible: (name: string, visible: boolean) =>\n viewerRef.value?.setLayerVisible(name, visible),\n });\n\n return () =>\n h(\n 'div',\n { style: { position: 'relative', overflow: 'hidden' } },\n [\n h('canvas', {\n ref: canvasRef,\n style: { display: 'block', width: '100%', height: '100%' },\n }),\n ],\n );\n },\n});\n","import { ref, onMounted, onUnmounted, type Ref } from 'vue';\nimport {\n CadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type Theme,\n type Tool,\n} from '@cadview/core';\n\nexport function useCadViewer(\n canvasRef: Ref<HTMLCanvasElement | null>,\n options?: CadViewerOptions,\n) {\n const viewer = ref<CadViewer | null>(null);\n const layers = ref<DxfLayer[]>([]);\n const isLoaded = ref(false);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n viewer.value = new CadViewer(canvasRef.value, options);\n });\n\n onUnmounted(() => {\n viewer.value?.destroy();\n viewer.value = null;\n });\n\n const loadFile = async (file: File) => {\n if (!viewer.value) return;\n await viewer.value.loadFile(file);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadString = (dxf: string) => {\n if (!viewer.value) return;\n viewer.value.loadString(dxf);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n return {\n viewer,\n layers,\n isLoaded,\n loadFile,\n loadString,\n fitToView: () => viewer.value?.fitToView(),\n setLayerVisible: (name: string, visible: boolean) =>\n viewer.value?.setLayerVisible(name, visible),\n setTheme: (theme: Theme) => viewer.value?.setTheme(theme),\n setTool: (tool: Tool) => viewer.value?.setTool(tool),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/CadViewer.tsx","../src/useCadViewer.ts"],"names":["CoreCadViewer","ref","onMounted","CadViewer","onUnmounted"],"mappings":";;;;AAsBO,IAAM,YAAY,eAAA,CAAgB;AAAA,EACvC,IAAA,EAAM,WAAA;AAAA,EAEN,KAAA,EAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,CAAC,IAAA,EAAM,WAAA,EAAa,MAAM,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,MACtB,OAAA,EAAS;AAAA,KACX;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,OAAO,EAAC;AAAA,KACnB;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,IAAA,EAAM,KAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EAEA,KAAA,EAAO,CAAC,QAAA,EAAU,SAAA,EAAW,cAAc,eAAe,CAAA;AAAA,EAE1D,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,QAAO,EAAG;AAC7B,IAAA,MAAM,SAAA,GAAY,IAA8B,IAAI,CAAA;AACpD,IAAA,MAAM,SAAA,GAAY,IAA0B,IAAI,CAAA;AAEhD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AAEtB,MAAA,MAAM,MAAA,GAAS,IAAIA,WAAA,CAAc,SAAA,CAAU,KAAA,EAAO;AAAA,QAChD,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,aAAa,KAAA,CAAM,IAAA;AAAA,QACnB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,kBAAkB,KAAA,CAAM,gBAAA;AAAA,QACxB,GAAG,KAAA,CAAM;AAAA,OACV,CAAA;AACD,MAAA,SAAA,CAAU,KAAA,GAAQ,MAAA;AAElB,MAAA,MAAA,CAAO,GAAG,QAAA,EAAU,CAAC,MAAmB,IAAA,CAAK,QAAA,EAAU,CAAC,CAAC,CAAA;AACzD,MAAA,MAAA,CAAO,GAAG,SAAA,EAAW,CAAC,MAAoB,IAAA,CAAK,SAAA,EAAW,CAAC,CAAC,CAAA;AAC5D,MAAA,MAAA,CAAO,GAAG,YAAA,EAAc,CAAC,OAAsB,IAAA,CAAK,YAAA,EAAc,EAAE,CAAC,CAAA;AAAA,IACvE,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,MAAM;AAChB,MAAA,SAAA,CAAU,OAAO,OAAA,EAAQ;AACzB,MAAA,SAAA,CAAU,KAAA,GAAQ,IAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,CAAC,QAAA,KAAa;AACZ,QAAA,SAAA,CAAU,KAAA,EAAO,SAAS,QAAQ,CAAA;AAAA,MACpC;AAAA,KACF;AAEA,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,CAAC,OAAA,KAAY;AACX,QAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,OAAO,CAAA;AAAA,MAClC;AAAA,KACF;AAEA,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,CAAC,QAAA,KAAa;AACZ,QAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,UAAA,SAAA,CAAU,KAAA,EAAO,SAAS,QAAQ,CAAA;AAAA,QACpC;AAAA,MACF;AAAA,KACF;AAEA,IAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,IAAA,KAAA;AAAA,MACE,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,OAAA,KAAY;AACjB,QAAA,MAAM,SAAS,SAAA,CAAU,KAAA;AACzB,QAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS;AACzB,QAAA,aAAA,GAAgB,IAAA;AAChB,QAAA,aAAA,GAAgB,KAAA;AAChB,QAAA,MAAM,eAAe,MAAM,aAAA;AAE3B,QAAA,IAAI;AACF,UAAA,IAAI,mBAAmB,IAAA,EAAM;AAC3B,YAAA,MAAM,MAAA,CAAO,SAAS,OAAO,CAAA;AAAA,UAC/B,CAAA,MAAA,IAAW,mBAAmB,WAAA,EAAa;AACzC,YAAA,MAAM,MAAA,CAAO,WAAW,OAAO,CAAA;AAAA,UACjC,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AACtC,YAAA,MAAA,CAAO,WAAW,OAAO,CAAA;AAAA,UAC3B;AAEA,UAAA,IAAI,CAAC,cAAa,EAAG;AACnB,YAAA,IAAA,CAAK,eAAA,EAAiB,MAAA,CAAO,SAAA,EAAyB,CAAA;AAAA,UACxD;AAAA,QACF,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,CAAC,cAAa,EAAG;AACnB,YAAA,OAAA,CAAQ,KAAA,CAAM,kCAAkC,GAAG,CAAA;AAAA,UACrD;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAEA,IAAA,MAAA,CAAO;AAAA,MACL,SAAA,EAAW,MAAM,SAAA,CAAU,KAAA;AAAA,MAC3B,SAAA,EAAW,MAAM,SAAA,CAAU,KAAA,EAAO,SAAA,EAAU;AAAA,MAC5C,WAAW,MAAM,SAAA,CAAU,KAAA,EAAO,SAAA,MAAe,EAAC;AAAA,MAClD,eAAA,EAAiB,CAAC,IAAA,EAAc,OAAA,KAC9B,UAAU,KAAA,EAAO,eAAA,CAAgB,MAAM,OAAO;AAAA,KACjD,CAAA;AAED,IAAA,OAAO,MACL,CAAA;AAAA,MACE,KAAA;AAAA,MACA,EAAE,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,QAAA,EAAU,UAAS,EAAE;AAAA,MACtD;AAAA,QACE,EAAE,QAAA,EAAU;AAAA,UACV,GAAA,EAAK,SAAA;AAAA,UACL,OAAO,EAAE,OAAA,EAAS,SAAS,KAAA,EAAO,MAAA,EAAQ,QAAQ,MAAA;AAAO,SAC1D;AAAA;AACH,KACF;AAAA,EACJ;AACF,CAAC;ACjJM,SAAS,YAAA,CACd,WACA,OAAA,EACA;AACA,EAAA,MAAM,MAAA,GAASC,IAAsB,IAAI,CAAA;AACzC,EAAA,MAAM,MAAA,GAASA,GAAAA,CAAgB,EAAE,CAAA;AACjC,EAAA,MAAM,QAAA,GAAWA,IAAI,KAAK,CAAA;AAE1B,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AACtB,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAIC,WAAAA,CAAU,SAAA,CAAU,OAAO,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AAED,EAAAC,YAAY,MAAM;AAChB,IAAA,MAAA,CAAO,OAAO,OAAA,EAAQ;AACtB,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAe;AACrC,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACnB,IAAA,MAAM,MAAA,CAAO,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAChC,IAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,SAAA,EAAU;AACtC,IAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,MAAA,KAAwB;AAChD,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACnB,IAAA,MAAM,MAAA,CAAO,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AACpC,IAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,SAAA,EAAU;AACtC,IAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAgB;AAClC,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACnB,IAAA,MAAA,CAAO,KAAA,CAAM,WAAW,GAAG,CAAA;AAC3B,IAAA,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,SAAA,EAAU;AACtC,IAAA,QAAA,CAAS,KAAA,GAAQ,IAAA;AAAA,EACnB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA,EAAW,MAAM,MAAA,CAAO,KAAA,EAAO,SAAA,EAAU;AAAA,IACzC,eAAA,EAAiB,CAAC,IAAA,EAAc,OAAA,KAC9B,OAAO,KAAA,EAAO,eAAA,CAAgB,MAAM,OAAO,CAAA;AAAA,IAC7C,UAAU,CAAC,KAAA,KAAiB,MAAA,CAAO,KAAA,EAAO,SAAS,KAAK,CAAA;AAAA,IACxD,SAAS,CAAC,IAAA,KAAe,MAAA,CAAO,KAAA,EAAO,QAAQ,IAAI;AAAA,GACrD;AACF","file":"index.js","sourcesContent":["import {\n defineComponent,\n ref,\n onMounted,\n onUnmounted,\n watch,\n h,\n type PropType,\n} from 'vue';\nimport {\n CadViewer as CoreCadViewer,\n type CadViewerOptions,\n type FormatConverter,\n type DebugOptions,\n type DxfLayer,\n type SelectEvent,\n type MeasureEvent,\n type ViewTransform,\n type Tool,\n type Theme,\n} from '@cadview/core';\n\nexport const CadViewer = defineComponent({\n name: 'CadViewer',\n\n props: {\n file: {\n type: [File, ArrayBuffer, String] as PropType<File | ArrayBuffer | string | null>,\n default: null,\n },\n theme: {\n type: String as PropType<Theme>,\n default: 'dark',\n },\n tool: {\n type: String as PropType<Tool>,\n default: 'pan',\n },\n debug: {\n type: [Boolean, Object] as PropType<boolean | DebugOptions>,\n default: undefined,\n },\n options: {\n type: Object as PropType<Omit<CadViewerOptions, 'theme' | 'initialTool' | 'debug'>>,\n default: () => ({}),\n },\n formatConverters: {\n type: Array as PropType<FormatConverter[]>,\n default: undefined,\n },\n },\n\n emits: ['select', 'measure', 'viewchange', 'layers-loaded'],\n\n setup(props, { emit, expose }) {\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const viewerRef = ref<CoreCadViewer | null>(null);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const viewer = new CoreCadViewer(canvasRef.value, {\n theme: props.theme,\n initialTool: props.tool,\n debug: props.debug,\n formatConverters: props.formatConverters,\n ...props.options,\n });\n viewerRef.value = viewer;\n\n viewer.on('select', (e: SelectEvent) => emit('select', e));\n viewer.on('measure', (e: MeasureEvent) => emit('measure', e));\n viewer.on('viewchange', (vt: ViewTransform) => emit('viewchange', vt));\n });\n\n onUnmounted(() => {\n viewerRef.value?.destroy();\n viewerRef.value = null;\n });\n\n watch(\n () => props.theme,\n (newTheme) => {\n viewerRef.value?.setTheme(newTheme);\n },\n );\n\n watch(\n () => props.tool,\n (newTool) => {\n viewerRef.value?.setTool(newTool);\n },\n );\n\n watch(\n () => props.debug,\n (newDebug) => {\n if (newDebug !== undefined) {\n viewerRef.value?.setDebug(newDebug);\n }\n },\n );\n\n let loadCancelled = false;\n\n watch(\n () => props.file,\n async (newFile) => {\n const viewer = viewerRef.value;\n if (!viewer || !newFile) return;\n loadCancelled = true; // cancel any in-flight load\n loadCancelled = false;\n const wasCancelled = () => loadCancelled;\n\n try {\n if (newFile instanceof File) {\n await viewer.loadFile(newFile);\n } else if (newFile instanceof ArrayBuffer) {\n await viewer.loadBuffer(newFile);\n } else if (typeof newFile === 'string') {\n viewer.loadString(newFile);\n }\n\n if (!wasCancelled()) {\n emit('layers-loaded', viewer.getLayers() as DxfLayer[]);\n }\n } catch (err) {\n if (!wasCancelled()) {\n console.error('CadViewer: failed to load file', err);\n }\n }\n },\n );\n\n expose({\n getViewer: () => viewerRef.value,\n fitToView: () => viewerRef.value?.fitToView(),\n getLayers: () => viewerRef.value?.getLayers() ?? [],\n setLayerVisible: (name: string, visible: boolean) =>\n viewerRef.value?.setLayerVisible(name, visible),\n });\n\n return () =>\n h(\n 'div',\n { style: { position: 'relative', overflow: 'hidden' } },\n [\n h('canvas', {\n ref: canvasRef,\n style: { display: 'block', width: '100%', height: '100%' },\n }),\n ],\n );\n },\n});\n","import { ref, onMounted, onUnmounted, type Ref } from 'vue';\nimport {\n CadViewer,\n type CadViewerOptions,\n type DxfLayer,\n type Theme,\n type Tool,\n} from '@cadview/core';\n\nexport function useCadViewer(\n canvasRef: Ref<HTMLCanvasElement | null>,\n options?: CadViewerOptions,\n) {\n const viewer = ref<CadViewer | null>(null);\n const layers = ref<DxfLayer[]>([]);\n const isLoaded = ref(false);\n\n onMounted(() => {\n if (!canvasRef.value) return;\n viewer.value = new CadViewer(canvasRef.value, options);\n });\n\n onUnmounted(() => {\n viewer.value?.destroy();\n viewer.value = null;\n });\n\n const loadFile = async (file: File) => {\n if (!viewer.value) return;\n await viewer.value.loadFile(file);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadBuffer = async (buffer: ArrayBuffer) => {\n if (!viewer.value) return;\n await viewer.value.loadBuffer(buffer);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n const loadString = (dxf: string) => {\n if (!viewer.value) return;\n viewer.value.loadString(dxf);\n layers.value = viewer.value.getLayers();\n isLoaded.value = true;\n };\n\n return {\n viewer,\n layers,\n isLoaded,\n loadFile,\n loadBuffer,\n loadString,\n fitToView: () => viewer.value?.fitToView(),\n setLayerVisible: (name: string, visible: boolean) =>\n viewer.value?.setLayerVisible(name, visible),\n setTheme: (theme: Theme) => viewer.value?.setTheme(theme),\n setTool: (tool: Tool) => viewer.value?.setTool(tool),\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cadview/vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Vue 3 wrapper for @cadview/core — CAD/DXF file viewer component",
|
|
@@ -48,14 +48,14 @@
|
|
|
48
48
|
],
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"vue": "^3.5.0",
|
|
51
|
-
"@cadview/core": "0.
|
|
51
|
+
"@cadview/core": "0.3.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"vue": "^3.5.0",
|
|
55
55
|
"vue-tsc": "^2.0.0",
|
|
56
56
|
"tsup": "^8.0.0",
|
|
57
57
|
"typescript": "^5.7.0",
|
|
58
|
-
"@cadview/core": "0.
|
|
58
|
+
"@cadview/core": "0.3.0"
|
|
59
59
|
},
|
|
60
60
|
"sideEffects": false,
|
|
61
61
|
"scripts": {
|