@cadview/vue 0.1.0 → 0.2.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
@@ -22,6 +22,10 @@ var CadViewer = vue.defineComponent({
22
22
  options: {
23
23
  type: Object,
24
24
  default: () => ({})
25
+ },
26
+ formatConverters: {
27
+ type: Array,
28
+ default: void 0
25
29
  }
26
30
  },
27
31
  emits: ["select", "measure", "viewchange", "layers-loaded"],
@@ -33,6 +37,7 @@ var CadViewer = vue.defineComponent({
33
37
  const viewer = new core.CadViewer(canvasRef.value, {
34
38
  theme: props.theme,
35
39
  initialTool: props.tool,
40
+ formatConverters: props.formatConverters,
36
41
  ...props.options
37
42
  });
38
43
  viewerRef.value = viewer;
@@ -56,22 +61,30 @@ var CadViewer = vue.defineComponent({
56
61
  viewerRef.value?.setTool(newTool);
57
62
  }
58
63
  );
64
+ let loadCancelled = false;
59
65
  vue.watch(
60
66
  () => props.file,
61
67
  async (newFile) => {
62
68
  const viewer = viewerRef.value;
63
69
  if (!viewer || !newFile) return;
70
+ loadCancelled = true;
71
+ loadCancelled = false;
72
+ const wasCancelled = () => loadCancelled;
64
73
  try {
65
74
  if (newFile instanceof File) {
66
75
  await viewer.loadFile(newFile);
67
76
  } else if (newFile instanceof ArrayBuffer) {
68
- viewer.loadArrayBuffer(newFile);
77
+ await viewer.loadBuffer(newFile);
69
78
  } else if (typeof newFile === "string") {
70
79
  viewer.loadString(newFile);
71
80
  }
72
- emit("layers-loaded", viewer.getLayers());
81
+ if (!wasCancelled()) {
82
+ emit("layers-loaded", viewer.getLayers());
83
+ }
73
84
  } catch (err) {
74
- console.error("CadViewer: failed to load file", err);
85
+ if (!wasCancelled()) {
86
+ console.error("CadViewer: failed to load file", err);
87
+ }
75
88
  }
76
89
  }
77
90
  );
@@ -111,6 +124,12 @@ function useCadViewer(canvasRef, options) {
111
124
  layers.value = viewer.value.getLayers();
112
125
  isLoaded.value = true;
113
126
  };
127
+ const loadBuffer = async (buffer) => {
128
+ if (!viewer.value) return;
129
+ await viewer.value.loadBuffer(buffer);
130
+ layers.value = viewer.value.getLayers();
131
+ isLoaded.value = true;
132
+ };
114
133
  const loadString = (dxf) => {
115
134
  if (!viewer.value) return;
116
135
  viewer.value.loadString(dxf);
@@ -122,6 +141,7 @@ function useCadViewer(canvasRef, options) {
122
141
  layers,
123
142
  isLoaded,
124
143
  loadFile,
144
+ loadBuffer,
125
145
  loadString,
126
146
  fitToView: () => viewer.value?.fitToView(),
127
147
  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":";;;;;;AAqBO,IAAM,YAAYA,mBAAA,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,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,GAAYC,QAA8B,IAAI,CAAA;AACpD,IAAA,MAAM,SAAA,GAAYA,QAA0B,IAAI,CAAA;AAEhD,IAAAC,aAAA,CAAU,MAAM;AACd,MAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AAEtB,MAAA,MAAM,MAAA,GAAS,IAAIC,cAAA,CAAc,SAAA,CAAU,KAAA,EAAO;AAAA,QAChD,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,aAAa,KAAA,CAAM,IAAA;AAAA,QACnB,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,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAA,SAAA,CAAU,OAAO,OAAA,EAAQ;AACzB,MAAA,SAAA,CAAU,KAAA,GAAQ,IAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAAC,SAAA;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,IAAAA,SAAA;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,IAAI,aAAA,GAAgB,KAAA;AAEpB,IAAAA,SAAA;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,MACLC,KAAA;AAAA,MACE,KAAA;AAAA,MACA,EAAE,KAAA,EAAO,EAAE,UAAU,UAAA,EAAY,QAAA,EAAU,UAAS,EAAE;AAAA,MACtD;AAAA,QACEA,MAAE,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;AClIM,SAAS,YAAA,CACd,WACA,OAAA,EACA;AACA,EAAA,MAAM,MAAA,GAASL,QAAsB,IAAI,CAAA;AACzC,EAAA,MAAM,MAAA,GAASA,OAAAA,CAAgB,EAAE,CAAA;AACjC,EAAA,MAAM,QAAA,GAAWA,QAAI,KAAK,CAAA;AAE1B,EAAAC,cAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAU,KAAA,EAAO;AACtB,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAIK,cAAAA,CAAU,SAAA,CAAU,OAAO,OAAO,CAAA;AAAA,EACvD,CAAC,CAAA;AAED,EAAAH,gBAAY,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.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"]}
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, 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: {
@@ -21,6 +21,10 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
21
21
  type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
22
22
  default: () => {};
23
23
  };
24
+ formatConverters: {
25
+ type: PropType<FormatConverter[]>;
26
+ default: undefined;
27
+ };
24
28
  }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
25
29
  [key: string]: any;
26
30
  }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("select" | "measure" | "viewchange" | "layers-loaded")[], "select" | "measure" | "viewchange" | "layers-loaded", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
@@ -40,6 +44,10 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
40
44
  type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
41
45
  default: () => {};
42
46
  };
47
+ formatConverters: {
48
+ type: PropType<FormatConverter[]>;
49
+ default: undefined;
50
+ };
43
51
  }>> & Readonly<{
44
52
  onSelect?: ((...args: any[]) => any) | undefined;
45
53
  onMeasure?: ((...args: any[]) => any) | undefined;
@@ -47,6 +55,7 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
47
55
  "onLayers-loaded"?: ((...args: any[]) => any) | undefined;
48
56
  }>, {
49
57
  theme: Theme;
58
+ formatConverters: FormatConverter[];
50
59
  file: string | File | ArrayBuffer | null;
51
60
  tool: Tool;
52
61
  options: Omit<CadViewerOptions, "theme" | "initialTool">;
@@ -55,6 +64,8 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
55
64
  declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
56
65
  viewer: Ref<{
57
66
  loadFile: (file: File) => Promise<void>;
67
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
68
+ loadDocument: (doc: _cadview_core.DxfDocument) => void;
58
69
  loadString: (dxf: string) => void;
59
70
  loadArrayBuffer: (buffer: ArrayBuffer) => void;
60
71
  clearDocument: () => void;
@@ -84,6 +95,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
84
95
  handleMouseMove: (screenX: number, screenY: number) => void;
85
96
  } | null, CadViewer$1 | {
86
97
  loadFile: (file: File) => Promise<void>;
98
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
99
+ loadDocument: (doc: _cadview_core.DxfDocument) => void;
87
100
  loadString: (dxf: string) => void;
88
101
  loadArrayBuffer: (buffer: ArrayBuffer) => void;
89
102
  clearDocument: () => void;
@@ -135,6 +148,7 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
135
148
  }[]>;
136
149
  isLoaded: Ref<boolean, boolean>;
137
150
  loadFile: (file: File) => Promise<void>;
151
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
138
152
  loadString: (dxf: string) => void;
139
153
  fitToView: () => void | undefined;
140
154
  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, 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: {
@@ -21,6 +21,10 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
21
21
  type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
22
22
  default: () => {};
23
23
  };
24
+ formatConverters: {
25
+ type: PropType<FormatConverter[]>;
26
+ default: undefined;
27
+ };
24
28
  }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
25
29
  [key: string]: any;
26
30
  }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, ("select" | "measure" | "viewchange" | "layers-loaded")[], "select" | "measure" | "viewchange" | "layers-loaded", vue.PublicProps, Readonly<vue.ExtractPropTypes<{
@@ -40,6 +44,10 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
40
44
  type: PropType<Omit<CadViewerOptions, "theme" | "initialTool">>;
41
45
  default: () => {};
42
46
  };
47
+ formatConverters: {
48
+ type: PropType<FormatConverter[]>;
49
+ default: undefined;
50
+ };
43
51
  }>> & Readonly<{
44
52
  onSelect?: ((...args: any[]) => any) | undefined;
45
53
  onMeasure?: ((...args: any[]) => any) | undefined;
@@ -47,6 +55,7 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
47
55
  "onLayers-loaded"?: ((...args: any[]) => any) | undefined;
48
56
  }>, {
49
57
  theme: Theme;
58
+ formatConverters: FormatConverter[];
50
59
  file: string | File | ArrayBuffer | null;
51
60
  tool: Tool;
52
61
  options: Omit<CadViewerOptions, "theme" | "initialTool">;
@@ -55,6 +64,8 @@ declare const CadViewer: vue.DefineComponent<vue.ExtractPropTypes<{
55
64
  declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?: CadViewerOptions): {
56
65
  viewer: Ref<{
57
66
  loadFile: (file: File) => Promise<void>;
67
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
68
+ loadDocument: (doc: _cadview_core.DxfDocument) => void;
58
69
  loadString: (dxf: string) => void;
59
70
  loadArrayBuffer: (buffer: ArrayBuffer) => void;
60
71
  clearDocument: () => void;
@@ -84,6 +95,8 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
84
95
  handleMouseMove: (screenX: number, screenY: number) => void;
85
96
  } | null, CadViewer$1 | {
86
97
  loadFile: (file: File) => Promise<void>;
98
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
99
+ loadDocument: (doc: _cadview_core.DxfDocument) => void;
87
100
  loadString: (dxf: string) => void;
88
101
  loadArrayBuffer: (buffer: ArrayBuffer) => void;
89
102
  clearDocument: () => void;
@@ -135,6 +148,7 @@ declare function useCadViewer(canvasRef: Ref<HTMLCanvasElement | null>, options?
135
148
  }[]>;
136
149
  isLoaded: Ref<boolean, boolean>;
137
150
  loadFile: (file: File) => Promise<void>;
151
+ loadBuffer: (buffer: ArrayBuffer) => Promise<void>;
138
152
  loadString: (dxf: string) => void;
139
153
  fitToView: () => void | undefined;
140
154
  setLayerVisible: (name: string, visible: boolean) => void | undefined;
package/dist/index.js CHANGED
@@ -20,6 +20,10 @@ var CadViewer = defineComponent({
20
20
  options: {
21
21
  type: Object,
22
22
  default: () => ({})
23
+ },
24
+ formatConverters: {
25
+ type: Array,
26
+ default: void 0
23
27
  }
24
28
  },
25
29
  emits: ["select", "measure", "viewchange", "layers-loaded"],
@@ -31,6 +35,7 @@ var CadViewer = defineComponent({
31
35
  const viewer = new CadViewer$1(canvasRef.value, {
32
36
  theme: props.theme,
33
37
  initialTool: props.tool,
38
+ formatConverters: props.formatConverters,
34
39
  ...props.options
35
40
  });
36
41
  viewerRef.value = viewer;
@@ -54,22 +59,30 @@ var CadViewer = defineComponent({
54
59
  viewerRef.value?.setTool(newTool);
55
60
  }
56
61
  );
62
+ let loadCancelled = false;
57
63
  watch(
58
64
  () => props.file,
59
65
  async (newFile) => {
60
66
  const viewer = viewerRef.value;
61
67
  if (!viewer || !newFile) return;
68
+ loadCancelled = true;
69
+ loadCancelled = false;
70
+ const wasCancelled = () => loadCancelled;
62
71
  try {
63
72
  if (newFile instanceof File) {
64
73
  await viewer.loadFile(newFile);
65
74
  } else if (newFile instanceof ArrayBuffer) {
66
- viewer.loadArrayBuffer(newFile);
75
+ await viewer.loadBuffer(newFile);
67
76
  } else if (typeof newFile === "string") {
68
77
  viewer.loadString(newFile);
69
78
  }
70
- emit("layers-loaded", viewer.getLayers());
79
+ if (!wasCancelled()) {
80
+ emit("layers-loaded", viewer.getLayers());
81
+ }
71
82
  } catch (err) {
72
- console.error("CadViewer: failed to load file", err);
83
+ if (!wasCancelled()) {
84
+ console.error("CadViewer: failed to load file", err);
85
+ }
73
86
  }
74
87
  }
75
88
  );
@@ -109,6 +122,12 @@ function useCadViewer(canvasRef, options) {
109
122
  layers.value = viewer.value.getLayers();
110
123
  isLoaded.value = true;
111
124
  };
125
+ const loadBuffer = async (buffer) => {
126
+ if (!viewer.value) return;
127
+ await viewer.value.loadBuffer(buffer);
128
+ layers.value = viewer.value.getLayers();
129
+ isLoaded.value = true;
130
+ };
112
131
  const loadString = (dxf) => {
113
132
  if (!viewer.value) return;
114
133
  viewer.value.loadString(dxf);
@@ -120,6 +139,7 @@ function useCadViewer(canvasRef, options) {
120
139
  layers,
121
140
  isLoaded,
122
141
  loadFile,
142
+ loadBuffer,
123
143
  loadString,
124
144
  fitToView: () => viewer.value?.fitToView(),
125
145
  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":"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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"]}
package/package.json CHANGED
@@ -1,19 +1,11 @@
1
1
  {
2
2
  "name": "@cadview/vue",
3
- "version": "0.1.0",
3
+ "version": "0.2.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": [
9
- "cad",
10
- "dxf",
11
- "viewer",
12
- "vue",
13
- "vue3",
14
- "component",
15
- "canvas"
16
- ],
8
+ "keywords": ["cad", "dxf", "viewer", "vue", "vue3", "component", "canvas"],
17
9
  "repository": {
18
10
  "type": "git",
19
11
  "url": "git+https://github.com/wiscaksono/cadview.git",
@@ -41,26 +33,22 @@
41
33
  }
42
34
  }
43
35
  },
44
- "files": [
45
- "dist",
46
- "LICENSE",
47
- "README.md"
48
- ],
36
+ "files": ["dist", "LICENSE", "README.md"],
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "dev": "tsup --watch",
40
+ "typecheck": "vue-tsc --noEmit"
41
+ },
49
42
  "peerDependencies": {
50
- "vue": "^3.5.0",
51
- "@cadview/core": "0.1.0"
43
+ "@cadview/core": "workspace:*",
44
+ "vue": "^3.5.0"
52
45
  },
53
46
  "devDependencies": {
47
+ "@cadview/core": "workspace:*",
54
48
  "vue": "^3.5.0",
55
49
  "vue-tsc": "^2.0.0",
56
50
  "tsup": "^8.0.0",
57
- "typescript": "^5.7.0",
58
- "@cadview/core": "0.1.0"
51
+ "typescript": "^5.7.0"
59
52
  },
60
- "sideEffects": false,
61
- "scripts": {
62
- "build": "tsup",
63
- "dev": "tsup --watch",
64
- "typecheck": "vue-tsc --noEmit"
65
- }
66
- }
53
+ "sideEffects": false
54
+ }