@cadview/vue 0.2.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,6 +19,10 @@ 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: () => ({})
@@ -37,6 +41,7 @@ var CadViewer = vue.defineComponent({
37
41
  const viewer = new core.CadViewer(canvasRef.value, {
38
42
  theme: props.theme,
39
43
  initialTool: props.tool,
44
+ debug: props.debug,
40
45
  formatConverters: props.formatConverters,
41
46
  ...props.options
42
47
  });
@@ -61,6 +66,14 @@ var CadViewer = vue.defineComponent({
61
66
  viewerRef.value?.setTool(newTool);
62
67
  }
63
68
  );
69
+ vue.watch(
70
+ () => props.debug,
71
+ (newDebug) => {
72
+ if (newDebug !== void 0) {
73
+ viewerRef.value?.setDebug(newDebug);
74
+ }
75
+ }
76
+ );
64
77
  let loadCancelled = false;
65
78
  vue.watch(
66
79
  () => props.file,
@@ -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 FormatConverter,\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 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 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 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"]}
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,7 +1,7 @@
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, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
4
+ import { Theme, Tool, DebugOptions, CadViewerOptions, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
5
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<{
@@ -17,8 +17,12 @@ 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
  };
24
28
  formatConverters: {
@@ -40,8 +44,12 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
40
44
  type: PropType<Tool>;
41
45
  default: string;
42
46
  };
47
+ debug: {
48
+ type: PropType<boolean | DebugOptions>;
49
+ default: undefined;
50
+ };
43
51
  options: {
44
- type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
52
+ type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
45
53
  default: () => {};
46
54
  };
47
55
  formatConverters: {
@@ -55,10 +63,11 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
55
63
  "onLayers-loaded"?: ((...args: any[]) => any) | undefined;
56
64
  }>, {
57
65
  theme: Theme;
66
+ debug: boolean | DebugOptions;
58
67
  formatConverters: FormatConverter[];
59
68
  file: string | File | ArrayBuffer | null;
60
69
  tool: Tool;
61
- options: Omit<CadViewerOptions, "theme" | "initialTool">;
70
+ options: Omit<CadViewerOptions, "theme" | "initialTool" | "debug">;
62
71
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
63
72
 
64
73
  declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
@@ -89,6 +98,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
89
98
  resize: () => void;
90
99
  destroy: () => void;
91
100
  requestRender: () => void;
101
+ setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
102
+ getDebugStats: () => _cadview_core.DebugStats | null;
92
103
  handlePan: (dx: number, dy: number) => void;
93
104
  handleZoom: (screenX: number, screenY: number, factor: number) => void;
94
105
  handleClick: (screenX: number, screenY: number) => void;
@@ -120,6 +131,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
120
131
  resize: () => void;
121
132
  destroy: () => void;
122
133
  requestRender: () => void;
134
+ setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
135
+ getDebugStats: () => _cadview_core.DebugStats | null;
123
136
  handlePan: (dx: number, dy: number) => void;
124
137
  handleZoom: (screenX: number, screenY: number, factor: number) => void;
125
138
  handleClick: (screenX: number, screenY: number) => void;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
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, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
4
+ import { Theme, Tool, DebugOptions, CadViewerOptions, FormatConverter, DxfLayer, CadViewer as CadViewer$1 } from '@cadview/core';
5
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<{
@@ -17,8 +17,12 @@ 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
  };
24
28
  formatConverters: {
@@ -40,8 +44,12 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
40
44
  type: PropType<Tool>;
41
45
  default: string;
42
46
  };
47
+ debug: {
48
+ type: PropType<boolean | DebugOptions>;
49
+ default: undefined;
50
+ };
43
51
  options: {
44
- type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
52
+ type: PropType<Omit<CadViewerOptions, "theme" | "initialTool" | "debug">>;
45
53
  default: () => {};
46
54
  };
47
55
  formatConverters: {
@@ -55,10 +63,11 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
55
63
  "onLayers-loaded"?: ((...args: any[]) => any) | undefined;
56
64
  }>, {
57
65
  theme: Theme;
66
+ debug: boolean | DebugOptions;
58
67
  formatConverters: FormatConverter[];
59
68
  file: string | File | ArrayBuffer | null;
60
69
  tool: Tool;
61
- options: Omit<CadViewerOptions, "theme" | "initialTool">;
70
+ options: Omit<CadViewerOptions, "theme" | "initialTool" | "debug">;
62
71
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
63
72
 
64
73
  declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
@@ -89,6 +98,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
89
98
  resize: () => void;
90
99
  destroy: () => void;
91
100
  requestRender: () => void;
101
+ setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
102
+ getDebugStats: () => _cadview_core.DebugStats | null;
92
103
  handlePan: (dx: number, dy: number) => void;
93
104
  handleZoom: (screenX: number, screenY: number, factor: number) => void;
94
105
  handleClick: (screenX: number, screenY: number) => void;
@@ -120,6 +131,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
120
131
  resize: () => void;
121
132
  destroy: () => void;
122
133
  requestRender: () => void;
134
+ setDebug: (debug: boolean | _cadview_core.DebugOptions) => void;
135
+ getDebugStats: () => _cadview_core.DebugStats | null;
123
136
  handlePan: (dx: number, dy: number) => void;
124
137
  handleZoom: (screenX: number, screenY: number, factor: number) => void;
125
138
  handleClick: (screenX: number, screenY: number) => void;
package/dist/index.js CHANGED
@@ -17,6 +17,10 @@ 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: () => ({})
@@ -35,6 +39,7 @@ var CadViewer = defineComponent({
35
39
  const viewer = new CadViewer$1(canvasRef.value, {
36
40
  theme: props.theme,
37
41
  initialTool: props.tool,
42
+ debug: props.debug,
38
43
  formatConverters: props.formatConverters,
39
44
  ...props.options
40
45
  });
@@ -59,6 +64,14 @@ var CadViewer = defineComponent({
59
64
  viewerRef.value?.setTool(newTool);
60
65
  }
61
66
  );
67
+ watch(
68
+ () => props.debug,
69
+ (newDebug) => {
70
+ if (newDebug !== void 0) {
71
+ viewerRef.value?.setDebug(newDebug);
72
+ }
73
+ }
74
+ );
62
75
  let loadCancelled = false;
63
76
  watch(
64
77
  () => props.file,
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 FormatConverter,\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 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 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 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"]}
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,11 +1,19 @@
1
1
  {
2
2
  "name": "@cadview/vue",
3
- "version": "0.2.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",
7
7
  "author": "Wisnu Wicaksono",
8
- "keywords": ["cad", "dxf", "viewer", "vue", "vue3", "component", "canvas"],
8
+ "keywords": [
9
+ "cad",
10
+ "dxf",
11
+ "viewer",
12
+ "vue",
13
+ "vue3",
14
+ "component",
15
+ "canvas"
16
+ ],
9
17
  "repository": {
10
18
  "type": "git",
11
19
  "url": "git+https://github.com/wiscaksono/cadview.git",
@@ -33,22 +41,26 @@
33
41
  }
34
42
  }
35
43
  },
36
- "files": ["dist", "LICENSE", "README.md"],
37
- "scripts": {
38
- "build": "tsup",
39
- "dev": "tsup --watch",
40
- "typecheck": "vue-tsc --noEmit"
41
- },
44
+ "files": [
45
+ "dist",
46
+ "LICENSE",
47
+ "README.md"
48
+ ],
42
49
  "peerDependencies": {
43
- "@cadview/core": "workspace:*",
44
- "vue": "^3.5.0"
50
+ "vue": "^3.5.0",
51
+ "@cadview/core": "0.3.0"
45
52
  },
46
53
  "devDependencies": {
47
- "@cadview/core": "workspace:*",
48
54
  "vue": "^3.5.0",
49
55
  "vue-tsc": "^2.0.0",
50
56
  "tsup": "^8.0.0",
51
- "typescript": "^5.7.0"
57
+ "typescript": "^5.7.0",
58
+ "@cadview/core": "0.3.0"
52
59
  },
53
- "sideEffects": false
54
- }
60
+ "sideEffects": false,
61
+ "scripts": {
62
+ "build": "tsup",
63
+ "dev": "tsup --watch",
64
+ "typecheck": "vue-tsc --noEmit"
65
+ }
66
+ }