{"version":3,"file":"keyboardUtil.mjs","sources":["../../../../src/utils/keyboardUtil.ts"],"sourcesContent":["import {\n    moveableMoveOffset, moveableResizeOffset,\n    removeSelectElement,\n    selectAllElement,\n    selectTabNext\n} from '@myprint/design/plugins/moveable/moveable';\nimport { redoPanel, undoPanel } from '@myprint/design/utils/historyUtil';\nimport { mitt } from '@myprint/design/utils/utils';\nimport { memoryClipboardUtil } from '@myprint/design/utils/memoryClipboardUtil';\n\n\nconst keyConvert = {\n    Ctrl: ['Meta', 'Ctrl']\n} as Record<string, Array<string>>;\n\ninterface keyListener {\n    keys: Array<string | ((event: KeyboardEvent) => boolean)>;\n    callback: () => void;\n}\n\nconst eventListeners: Array<keyListener> = [];\nconst downKeyList = {} as any;\n\nexport function mountedKeyboardEvent() {\n    addKeyboardEvent()\n        // macos\n        .subscribe([isCtrlShift, 'z'], () => {\n            // console.log('isCtrl+Shift+z 重做')\n            redoPanel();\n        })\n        // win\n        .subscribe([isCtrlShift, 'y'], () => {\n            // console.log('isCtrl+y 重做')\n            redoPanel();\n        })\n        .subscribe([isCtrl, 'z'], () => {\n            // console.log('isCtrl+z 撤销')\n            undoPanel();\n        })\n        .subscribe([isCtrl, 'a'], () => {\n            // console.log('isCtrl+a 全选');\n            selectAllElement();\n        })\n        .subscribe([isCtrl, 'c'], () => {\n            // console.log('isCtrl+c 复制')\n            memoryClipboardUtil.copy();\n        })\n        .subscribe([isCtrl, 'x'], () => {\n            // console.log('isCtrl+c 剪切')\n            memoryClipboardUtil.cut();\n        })\n        .subscribe([isCtrl, 'v'], () => {\n            // console.log('isCtrl+v 粘贴')\n            memoryClipboardUtil.paste();\n        })\n        .subscribe([isCtrl, 'd'], () => {\n            // console.log('isCtrl+d 副本')\n        })\n        .subscribe([isCtrl, 's'], () => {\n            // console.log('isCtrl+s 保存')\n            mitt.emit('saveTemplate', {} as any);\n        })\n\n        .subscribe(['Tab'], () => {\n            // console.log('Tab切换')\n            selectTabNext();\n        })\n\n        .subscribe([isCtrlShift, 'ArrowUp'], () => {\n            // console.log('ArrowUp')\n            moveableResizeOffset(0, -10);\n        })\n        .subscribe([isCtrlShift, 'ArrowDown'], () => {\n            // console.log('ArrowDown')\n            moveableResizeOffset(0, 10);\n        })\n        .subscribe([isCtrlShift, 'ArrowLeft'], () => {\n            // console.log('ArrowLeft')\n            moveableResizeOffset(-10, 0);\n        })\n        .subscribe([isCtrlShift, 'ArrowRight'], () => {\n            // console.log('ArrowRight')\n            moveableResizeOffset(10, 0);\n        })\n\n        .subscribe([isShift, 'ArrowUp'], () => {\n            // console.log('ArrowUp')\n            moveableMoveOffset(0, -10);\n        })\n        .subscribe([isShift, 'ArrowDown'], () => {\n            moveableMoveOffset(0, 10);\n        })\n        .subscribe([isShift, 'ArrowLeft'], () => {\n            moveableMoveOffset(-10, 0);\n        })\n        .subscribe([isShift, 'ArrowRight'], () => {\n            moveableMoveOffset(10, 0);\n        })\n\n        .subscribe([isCtrl, 'ArrowUp'], () => {\n            moveableResizeOffset(0, -1);\n        })\n        .subscribe([isCtrl, 'ArrowDown'], () => {\n            moveableResizeOffset(0, 1);\n        })\n        .subscribe([isCtrl, 'ArrowLeft'], () => {\n            moveableResizeOffset(-1, 0);\n        })\n        .subscribe([isCtrl, 'ArrowRight'], () => {\n            moveableResizeOffset(1, 0);\n        })\n\n        .subscribe(['ArrowUp'], () => {\n            moveableMoveOffset(0, -1);\n        })\n        .subscribe(['ArrowDown'], () => {\n            moveableMoveOffset(0, 1);\n        })\n        .subscribe(['ArrowLeft'], () => {\n            moveableMoveOffset(-1, 0);\n        })\n        .subscribe(['ArrowRight'], () => {\n            moveableMoveOffset(1, 0);\n        })\n\n        .subscribe([isDelete], () => {\n            // console.log('ArrowRight')\n            removeSelectElement();\n        });\n}\n\nexport function unMountedKeyboardEvent() {\n    removeKeyboardEvent();\n}\n\nexport function addKeyboardEvent() {\n    document.addEventListener('keydown', keyDown);\n    document.addEventListener('keyup', keyUp);\n\n    const handlers = {\n        subscribe(keys: Array<string | ((event: KeyboardEvent) => boolean)>, callback: () => void) {\n            eventListeners.push({\n                keys,\n                callback\n            });\n            return handlers;\n        }\n    };\n    return handlers;\n}\n\nexport function removeKeyboardEvent() {\n    document.removeEventListener('keydown', keyDown);\n    document.removeEventListener('keyup', keyUp);\n}\n\nfunction keyUp(event: KeyboardEvent) {\n    // console.log('up' + convertKey(event.key))\n    delete downKeyList[convertKey(event.key)];\n    // console.log(downKeyList)\n}\n\nfunction convertKey(key: string) {\n    for (let keyConvertKey in keyConvert) {\n        let convertList = keyConvert[keyConvertKey];\n        if (convertList.includes(key)) {\n            return keyConvertKey;\n        }\n    }\n    return key;\n}\n\nfunction keyDown(event: KeyboardEvent) {\n    // console.log(convertKey(event.key))\n    // downKeyList[convertKey(event.key)] = true\n    // console.log(downKeyList)\n    // console.log(event.key)\n    if ((event.target as HTMLElement).tagName === 'INPUT' || (event.target as HTMLElement).tagName === 'TEXTAREA') {\n        // console.log('This event is triggered by an input or textarea!');\n        return;\n    }\n\n    // const length = Object.getOwnPropertyNames(downKeyList).length\n    for (let eventListener of eventListeners) {\n        const { keys, callback } = eventListener;\n        let isTrigger = true;\n\n        // if (length !== keys.length) {\n        //     continue\n        // }\n\n        for (let key of keys) {\n            // console.log(key, event.key)\n            if (key instanceof Function) {\n                if (!key(event)) {\n                    isTrigger = false;\n                    break;\n                }\n            } else {\n                if (key != event.key) {\n                    isTrigger = false;\n                    break;\n                }\n            }\n\n            // if (!downKeyList[key]) {\n            //     isTrigger = false\n            //     break\n            // }\n        }\n        // console.log(isTrigger)\n        if (isTrigger) {\n            callback();\n            event.preventDefault();\n            event.stopPropagation();\n            break;\n        }\n    }\n\n\n    // if ((event.ctrlKey || event.metaKey) && event.key === 'z') {\n    //     console.log('Undo shortcut was pressed');\n    // }\n    // // 重做\n    // if ((event.ctrlKey || event.metaKey) && (event.key === 'y' || (event.shiftKey && event.key === 'z'))) {\n    //     console.log('Redo shortcut was pressed');\n    // }\n    // // 方向键\n    // if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {\n    //     console.log(`Arrow key was pressed: ${event.key}`);\n    // }\n}\n\n// 兼容macos & win\nexport function isCtrl(event: KeyboardEvent) {\n    return event.ctrlKey || event.metaKey;\n}\n\nexport function isShift(event: KeyboardEvent) {\n    return event.shiftKey;\n}\n\nexport function isCtrlShift(event: KeyboardEvent) {\n    // console.log(event)\n    return (event.ctrlKey || event.metaKey) && event.shiftKey;\n}\n\nexport function isDelete(event: KeyboardEvent) {\n    return event.key == 'Backspace';\n}\n"],"names":[],"mappings":"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"}