|
@@ -21,14 +21,14 @@ import { Pos } from "@/utils/math.ts";
|
|
|
import { listener } from "@/utils/event.ts";
|
|
|
import { debounce, mergeFuns, onlyId } from "@/utils/shared.ts";
|
|
|
import { StoreData } from "../store/store.ts";
|
|
|
-import { rendererMap, rendererName } from "@/constant/index.ts";
|
|
|
+import { DomMountId, rendererMap, rendererName } from "@/constant/index.ts";
|
|
|
import { Shape, ShapeConfig } from "konva/lib/Shape";
|
|
|
import { ElLoading } from "element-plus";
|
|
|
import { PropertyDescribes } from "../html-mount/propertys/index.ts";
|
|
|
import { ShapeType } from "@/index.ts";
|
|
|
import { isEditableElement } from "@/utils/dom.ts";
|
|
|
|
|
|
-let getInstance = getCurrentInstance
|
|
|
+let getInstance = getCurrentInstance;
|
|
|
export const useRendererInstance = () => {
|
|
|
let instance = getInstance()!;
|
|
|
while (instance.type.name !== rendererName) {
|
|
@@ -68,16 +68,15 @@ export const installGlobalVar = <T>(
|
|
|
};
|
|
|
|
|
|
export const useRunHook = installGlobalVar(() => {
|
|
|
- const instance = getCurrentInstance()
|
|
|
+ const instance = getCurrentInstance();
|
|
|
return <R, T extends () => R = () => R>(hook: T): R => {
|
|
|
- const back = getInstance
|
|
|
- getInstance = () => instance
|
|
|
- const result = hook()
|
|
|
- getInstance = back
|
|
|
- return result
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
+ const back = getInstance;
|
|
|
+ getInstance = () => instance;
|
|
|
+ const result = hook();
|
|
|
+ getInstance = back;
|
|
|
+ return result;
|
|
|
+ };
|
|
|
+});
|
|
|
|
|
|
export type InstanceProps = {
|
|
|
id?: string;
|
|
@@ -207,17 +206,23 @@ export const usePointerPos = installGlobalVar(() => {
|
|
|
if (!$stage) return;
|
|
|
|
|
|
const mount = $stage.container().parentElement!;
|
|
|
+ const domMount = document.querySelector(`#${DomMountId}`) as HTMLDivElement;
|
|
|
pos.value = $stage.pointerPos;
|
|
|
+ const moveHandler = (ev: MouseEvent) => {
|
|
|
+ pos.value = $stage.pointerPos;
|
|
|
+ if (!replayIng) {
|
|
|
+ lastClient = {
|
|
|
+ clientX: ev.clientX,
|
|
|
+ clientY: ev.clientY,
|
|
|
+ };
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
onCleanup(
|
|
|
- listener(mount, "pointermove", (ev) => {
|
|
|
- pos.value = $stage.pointerPos;
|
|
|
- if (pos.value && !replayIng) {
|
|
|
- lastClient = {
|
|
|
- clientX: ev.clientX,
|
|
|
- clientY: ev.clientY,
|
|
|
- };
|
|
|
- }
|
|
|
- })
|
|
|
+ mergeFuns(
|
|
|
+ listener(mount, "pointermove", moveHandler),
|
|
|
+ listener(domMount, "pointermove", moveHandler)
|
|
|
+ )
|
|
|
);
|
|
|
});
|
|
|
|
|
@@ -275,25 +280,24 @@ export const useDownKeys = installGlobalVar(() => {
|
|
|
const keyKeys = reactive(new Set<string>());
|
|
|
const mouseKeys = reactive(new Set<string>());
|
|
|
const evHandler = (ev: KeyboardEvent | MouseEvent, keys: Set<string>) => {
|
|
|
- ev.shiftKey ? keys.add("Shift") : keys.delete("Shift");
|
|
|
- ev.altKey ? keys.add("Alt") : keys.delete("Alt");
|
|
|
- ev.metaKey ? keys.add("Meta") : keys.delete("Meta");
|
|
|
- ev.ctrlKey ? keys.add("Ctrl") : keys.delete("Ctrl");
|
|
|
-
|
|
|
- }
|
|
|
+ ev.shiftKey ? keys.add("Shift") : keys.delete("Shift");
|
|
|
+ ev.altKey ? keys.add("Alt") : keys.delete("Alt");
|
|
|
+ ev.metaKey ? keys.add("Meta") : keys.delete("Meta");
|
|
|
+ ev.ctrlKey ? keys.add("Ctrl") : keys.delete("Ctrl");
|
|
|
+ };
|
|
|
const cleanup = mergeFuns(
|
|
|
listener(window, "keydown", (ev) => {
|
|
|
if (!isEditableElement(ev.target as HTMLElement)) {
|
|
|
keyKeys.add(ev.key);
|
|
|
- evHandler(ev, keyKeys)
|
|
|
+ evHandler(ev, keyKeys);
|
|
|
}
|
|
|
}),
|
|
|
listener(window, "keyup", (ev) => {
|
|
|
keyKeys.delete(ev.key);
|
|
|
- evHandler(ev, keyKeys)
|
|
|
+ evHandler(ev, keyKeys);
|
|
|
}),
|
|
|
listener(window, "mousemove", (ev) => {
|
|
|
- evHandler(ev, mouseKeys)
|
|
|
+ evHandler(ev, mouseKeys);
|
|
|
})
|
|
|
);
|
|
|
const keys = reactive(new Set<string>());
|
|
@@ -361,69 +365,73 @@ export const useForciblyShowItemIds = installGlobalVar(() => {
|
|
|
return set;
|
|
|
}, Symbol("forciblyShowItemId"));
|
|
|
|
|
|
-export const useRendererDOM = installGlobalVar(() => ref<HTMLDivElement>())
|
|
|
+export const useRendererDOM = installGlobalVar(() => ref<HTMLDivElement>());
|
|
|
|
|
|
export const useTempStatus = installGlobalVar(() => {
|
|
|
const temp = ref(false);
|
|
|
const enterTemp = <T>(fn: () => T): T => {
|
|
|
- temp.value = !import.meta.env.DEV && true
|
|
|
- const result = fn()
|
|
|
+ temp.value = !import.meta.env.DEV && true;
|
|
|
+ const result = fn();
|
|
|
if (result instanceof Promise) {
|
|
|
- return result.then(async (data) => {
|
|
|
- temp.value = false
|
|
|
- await nextTick()
|
|
|
- return data;
|
|
|
- }).catch(r => {
|
|
|
- temp.value = false
|
|
|
- throw r
|
|
|
- }) as T
|
|
|
- } else {
|
|
|
- temp.value = false
|
|
|
return result
|
|
|
+ .then(async (data) => {
|
|
|
+ temp.value = false;
|
|
|
+ await nextTick();
|
|
|
+ return data;
|
|
|
+ })
|
|
|
+ .catch((r) => {
|
|
|
+ temp.value = false;
|
|
|
+ throw r;
|
|
|
+ }) as T;
|
|
|
+ } else {
|
|
|
+ temp.value = false;
|
|
|
+ return result;
|
|
|
}
|
|
|
- }
|
|
|
- const dom = useRendererDOM()
|
|
|
+ };
|
|
|
+ const dom = useRendererDOM();
|
|
|
watch(temp, (_a, _b, onCleanup) => {
|
|
|
if (temp.value && dom.value) {
|
|
|
- const instance = ElLoading.service({ fullscreen: true, target: dom.value })
|
|
|
- onCleanup(() => instance.close())
|
|
|
+ const instance = ElLoading.service({
|
|
|
+ fullscreen: true,
|
|
|
+ target: dom.value,
|
|
|
+ });
|
|
|
+ onCleanup(() => instance.close());
|
|
|
}
|
|
|
- })
|
|
|
-
|
|
|
+ });
|
|
|
|
|
|
- return { tempStatus: temp, enterTemp }
|
|
|
+ return { tempStatus: temp, enterTemp };
|
|
|
});
|
|
|
|
|
|
const getFilters = <T>() => {
|
|
|
- type Val = (d: T) => T
|
|
|
- const globalFilter = ref<{[key in ShapeType]?: Val[]}>({})
|
|
|
- const shapeFilter = ref<Record<string, Val[]>>({})
|
|
|
+ type Val = (d: T) => T;
|
|
|
+ const globalFilter = ref<{ [key in ShapeType]?: Val[] }>({});
|
|
|
+ const shapeFilter = ref<Record<string, Val[]>>({});
|
|
|
const setShapeFilter = (id: string, descs: Val) => {
|
|
|
if (shapeFilter.value[id]) {
|
|
|
- shapeFilter.value[id].push(descs)
|
|
|
+ shapeFilter.value[id].push(descs);
|
|
|
} else {
|
|
|
- shapeFilter.value[id] = [descs]
|
|
|
+ shapeFilter.value[id] = [descs];
|
|
|
}
|
|
|
return () => {
|
|
|
if (shapeFilter.value[id]) {
|
|
|
- const ndx = shapeFilter.value[id].indexOf(descs)
|
|
|
- shapeFilter.value[id].splice(ndx, 1)
|
|
|
+ const ndx = shapeFilter.value[id].indexOf(descs);
|
|
|
+ shapeFilter.value[id].splice(ndx, 1);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
+ };
|
|
|
+ };
|
|
|
const setFilter = (type: ShapeType, descs: Val) => {
|
|
|
if (globalFilter.value[type]) {
|
|
|
- globalFilter.value[type].push(descs)
|
|
|
+ globalFilter.value[type].push(descs);
|
|
|
} else {
|
|
|
- globalFilter.value[type] = [descs]
|
|
|
+ globalFilter.value[type] = [descs];
|
|
|
}
|
|
|
return () => {
|
|
|
if (globalFilter.value[type]) {
|
|
|
- const ndx = globalFilter.value[type].indexOf(descs)
|
|
|
- globalFilter.value[type].splice(ndx, 1)
|
|
|
+ const ndx = globalFilter.value[type].indexOf(descs);
|
|
|
+ globalFilter.value[type].splice(ndx, 1);
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
+ };
|
|
|
+ };
|
|
|
|
|
|
return {
|
|
|
setFilter,
|
|
@@ -432,38 +440,35 @@ const getFilters = <T>() => {
|
|
|
return (menus: T) => {
|
|
|
if (globalFilter.value[type]) {
|
|
|
for (const filter of globalFilter.value[type]) {
|
|
|
- menus = filter(menus)
|
|
|
+ menus = filter(menus);
|
|
|
}
|
|
|
}
|
|
|
if (shapeFilter.value[id]) {
|
|
|
for (const filter of shapeFilter.value[id]) {
|
|
|
- menus = filter(menus)
|
|
|
+ menus = filter(menus);
|
|
|
}
|
|
|
}
|
|
|
- return menus
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
+ return menus;
|
|
|
+ };
|
|
|
+ },
|
|
|
+ };
|
|
|
+};
|
|
|
|
|
|
export const useMountMenusFilter = installGlobalVar(() => {
|
|
|
- const menusFilter = getFilters<PropertyDescribes>()
|
|
|
+ const menusFilter = getFilters<PropertyDescribes>();
|
|
|
return {
|
|
|
setMenusFilter: menusFilter.setFilter,
|
|
|
setShapeMenusFilter: menusFilter.setShapeFilter,
|
|
|
- getFilter: menusFilter.getFilter
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-
|
|
|
+ getFilter: menusFilter.getFilter,
|
|
|
+ };
|
|
|
+});
|
|
|
|
|
|
export const useMouseMenusFilter = installGlobalVar(() => {
|
|
|
- type Menu = { icon?: any; label?: string; handler: () => void }
|
|
|
- const propsFilter = getFilters<Menu[]>()
|
|
|
+ type Menu = { icon?: any; label?: string; handler: () => void };
|
|
|
+ const propsFilter = getFilters<Menu[]>();
|
|
|
return {
|
|
|
setMenusFilter: propsFilter.setFilter,
|
|
|
setShapeMenusFilter: propsFilter.setShapeFilter,
|
|
|
- getFilter: propsFilter.getFilter
|
|
|
- }
|
|
|
-})
|
|
|
+ getFilter: propsFilter.getFilter,
|
|
|
+ };
|
|
|
+});
|