@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 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.loadArrayBuffer(newFile);
90
+ await viewer.loadBuffer(newFile);
69
91
  } else if (typeof newFile === "string") {
70
92
  viewer.loadString(newFile);
71
93
  }
72
- emit("layers-loaded", viewer.getLayers());
94
+ if (!wasCancelled()) {
95
+ emit("layers-loaded", viewer.getLayers());
96
+ }
73
97
  } catch (err) {
74
- console.error("CadViewer: failed to load file", err);
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),
@@ -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.loadArrayBuffer(newFile);
88
+ await viewer.loadBuffer(newFile);
67
89
  } else if (typeof newFile === "string") {
68
90
  viewer.loadString(newFile);
69
91
  }
70
- emit("layers-loaded", viewer.getLayers());
92
+ if (!wasCancelled()) {
93
+ emit("layers-loaded", viewer.getLayers());
94
+ }
71
95
  } catch (err) {
72
- console.error("CadViewer: failed to load file", err);
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.1.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.1.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.1.0"
58
+ "@cadview/core": "0.3.0"
59
59
  },
60
60
  "sideEffects": false,
61
61
  "scripts": {