{"version":3,"file":"index.cjs","sources":["../../packages/directives/hover.ts","../../packages/utils/dom.ts","../../packages/components/OSContainer/index.vue","../../packages/components/OSContainer/index.ts","../../packages/components/Container/index.vue","../../packages/components/Container/index.ts","../../packages/components/Header/index.vue","../../packages/components/Header/index.ts","../../packages/components/Main/index.vue","../../packages/components/Main/index.ts","../../packages/components/Footer/index.vue","../../packages/components/Footer/index.ts","../../packages/components/ToolBar/index.vue","../../packages/components/ToolBar/index.ts","../../packages/components/TopBar/index.vue","../../packages/components/TopBar/index.ts","../../packages/components/Window/index.vue","../../packages/components/Window/index.ts","../../packages/components/Dock/index.vue","../../packages/components/Dock/index.ts","../../packages/index.ts"],"sourcesContent":["import { type Directive, onUnmounted } from 'vue';\n\n/**\n * 鼠标悬浮容器顶部或底部时触发\n */\nexport const hover: Directive = {\n    mounted: (el, binding) => {\n        let topBoundary = false;\n        let bottomBoundary = false;\n\n        const handleMouseEnter = (event: MouseEvent) => {\n            const rect = el.getBoundingClientRect();\n\n            if (event.clientY - rect.top < 10) {\n                // 调整10为合适的边界距离\n                topBoundary = true;\n                binding.value?.top?.(topBoundary); // 触发顶部事件\n            } else if (rect.bottom - event.clientY < 10) {\n                bottomBoundary = true;\n                binding.value?.bottom?.(bottomBoundary); // 触发底部事件\n            }\n        };\n\n        const handleMouseLeave = () => {\n            topBoundary = false;\n            bottomBoundary = false;\n        };\n\n        el.addEventListener('mouseenter', handleMouseEnter);\n        el.addEventListener('mouseleave', handleMouseLeave);\n\n        // 清理工作\n        onUnmounted(() => {\n            el.removeEventListener('mouseenter', handleMouseEnter);\n            el.removeEventListener('mouseleave', handleMouseLeave);\n        });\n    },\n};\n","export const $ = (el: string) => {\n    return document.querySelector(el) as HTMLElement | null;\n};\n\nexport const $$ = (el: string) => {\n    return document.querySelectorAll(el);\n};\n","<template>\n    <div class=\"i-os-container\">\n        <div\n            v-if=\"headerHover\"\n            class=\"i-os-header-hover\"\n            @mouseenter=\"top(false)\"\n        ></div>\n        <div\n            class=\"i-os-header\"\n            :style=\"{ height: headerHeight }\"\n            @mouseleave=\"top(true)\"\n        >\n            <slot name=\"header\"></slot>\n        </div>\n        <div class=\"i-os-main\">\n            <slot name=\"main\"></slot>\n        </div>\n        <div\n            class=\"i-os-footer\"\n            :style=\"{ height: footerHeight }\"\n            @mouseleave=\"bottom(true)\"\n        >\n            <slot name=\"footer\"></slot>\n        </div>\n        <div\n            v-if=\"footerHover\"\n            class=\"i-os-footer-hover\"\n            @mouseenter=\"bottom(false)\"\n        ></div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { watch, nextTick } from 'vue';\nimport { $ } from '@packages/utils/dom';\n\ntype IProps = {\n    headerHeight?: string;\n    headerHover?: boolean;\n    footerHeight?: string;\n    footerHover?: boolean;\n};\n\nconst {\n    headerHeight = '0px',\n    headerHover,\n    footerHeight = '0px',\n    footerHover,\n} = defineProps<IProps>();\n\n// 触顶\nconst top = (hide: boolean) => {\n    headerHover && hovers(hide, footerHover);\n};\n\n// 触底\nconst bottom = (hide: boolean) => {\n    footerHover && hovers(headerHover, hide);\n};\n\n// 悬浮\nconst hovers = (head: boolean, foot: boolean) => {\n    $('.i-os-header')!.style.transform = head\n        ? `translate(0px, -${headerHeight})`\n        : '';\n    $('.i-os-main')!.style.height =\n        `calc(100% - ${head ? '0px' : headerHeight} - ${foot ? '0px' : footerHeight})`;\n    $('.i-os-main')!.style.padding =\n        `${head ? '0px' : headerHeight} 0px ${foot ? '0px' : footerHeight}`;\n    $('.i-os-footer')!.style.transform = foot\n        ? `translate(0px, ${footerHeight})`\n        : '';\n};\n\n// 监听窗口hover状态\nwatch(\n    () => [headerHover, footerHover],\n    () => {\n        nextTick(() => {\n            hovers(headerHover, footerHover);\n        });\n    },\n    {\n        immediate: true,\n    },\n);\n</script>\n\n<style scoped lang=\"scss\">\n.i-os-container {\n    & {\n        position: relative;\n        overflow: hidden;\n    }\n\n    .i-os-header-hover {\n        position: fixed;\n        top: 0px;\n        height: 1.3px;\n        width: 100%;\n    }\n\n    .i-os-header {\n        position: absolute;\n        top: 0;\n        width: 100%;\n        transition: all 0.3s ease;\n    }\n\n    .i-os-main {\n        height: 100%;\n        transition: all 0.3s ease;\n    }\n\n    .i-os-footer {\n        position: absolute;\n        bottom: 0;\n        width: 100%;\n        transition: all 0.3s ease;\n    }\n\n    .i-os-footer-hover {\n        position: fixed;\n        bottom: 0px;\n        height: 1.3px;\n        width: 100%;\n    }\n}\n</style>\n","import type { App } from 'vue';\n\nimport IOSContainer from './index.vue';\n\nIOSContainer.name = 'IOSContainer';\n\nIOSContainer.install = (app: App) => {\n    app.component(`${IOSContainer.name}`, IOSContainer);\n    return app;\n};\n\nexport { IOSContainer };\n\nexport default IOSContainer;\n","<template>\n    <div class=\"i-container\">\n        <slot></slot>\n    </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\">\n.i-container {\n    position: relative;\n    overflow: hidden;\n}\n</style>\n","import type { App } from 'vue';\n\nimport IContainer from './index.vue';\n\nIContainer.name = 'IContainer';\n\nIContainer.install = (app: App) => {\n    app.component(`${IContainer.name}`, IContainer);\n    return app;\n};\n\nexport { IContainer };\n\nexport default IContainer;\n","<template>\n    <div class=\"i-header\">\n        <slot></slot>\n    </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\">\n.i-header {\n    position: absolute;\n    top: 0;\n}\n</style>\n","import type { App } from 'vue';\n\nimport IHeader from './index.vue';\n\nIHeader.name = 'IHeader';\n\nIHeader.install = (app: App) => {\n    app.component(`${IHeader.name}`, IHeader);\n    return app;\n};\n\nexport { IHeader };\n\nexport default IHeader;\n","<template>\n    <div class=\"i-main\">\n        <slot></slot>\n    </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\">\n.i-main {\n    height: 100%;\n}\n</style>\n","import type { App } from 'vue';\n\nimport IMain from './index.vue';\n\nIMain.name = 'IMain';\n\nIMain.install = (app: App) => {\n    app.component(`${IMain.name}`, IMain);\n    return app;\n};\n\nexport { IMain };\n\nexport default IMain;\n","<template>\n    <div class=\"i-footer\">\n        <slot></slot>\n    </div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\">\n.i-footer {\n    position: absolute;\n    bottom: 0;\n}\n</style>\n","import type { App } from 'vue';\n\nimport IFooter from './index.vue';\n\nIFooter.name = 'IFooter';\n\nIFooter.install = (app: App) => {\n    app.component(`${IFooter.name}`, IFooter);\n    return app;\n};\n\nexport { IFooter };\n\nexport default IFooter;\n","<template>\n    <div>ToolBar111</div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\"></style>\n","import type { App } from 'vue';\n\nimport IToolBar from './index.vue';\n\nIToolBar.name = 'IToolBar';\n\nIToolBar.install = (app: App) => {\n    app.component(`${IToolBar.name}`, IToolBar);\n    return app;\n};\n\nexport { IToolBar };\n\nexport default IToolBar;\n","<template>\n    <div\n        @mouseenter=\"handleHover\"\n        @touchstart=\"handleTouchStart\"\n        @touchend=\"handleTouchEnd\"\n        class=\"interactive-div\"\n    >\n        鼠标或触摸我\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nconst handleHover = (event: MouseEvent | TouchEvent) => {\n    // 处理鼠标移入或触摸开始\n    console.log('鼠标移入或触摸开始', event);\n};\nconst handleTouchStart = (event: TouchEvent) => {\n    // 阻止默认行为（如果需要）\n    event.preventDefault();\n    // 调用鼠标移入的处理函数\n    handleHover(event);\n};\nconst handleTouchEnd = (event: TouchEvent) => {\n    // 处理触摸结束，这里可能需要额外的逻辑来模拟鼠标移出\n    // 或者你可能不需要为touchend做特殊处理，除非有特定需求\n    console.log('触摸结束', event);\n};\n</script>\n\n<style scoped lang=\"scss\"></style>\n","import type { App } from 'vue';\n\nimport ITopBar from './index.vue';\n\nITopBar.name = 'ITopBar';\n\nITopBar.install = (app: App) => {\n    app.component(`${ITopBar.name}`, ITopBar);\n    return app;\n};\n\nexport { ITopBar };\n\nexport default ITopBar;\n","<template>\n    <div\n        ref=\"container\"\n        class=\"i-window-container\"\n        :style=\"{\n            width: `${win.width}px`,\n            height: `${win.height}px`,\n            minWidth: `${win.minWidth || 300}px`,\n            minHeight: `${win.minHeight || 200}px`,\n            zIndex: win.zIndex,\n            backdropFilter: `blur(${filter}px)`,\n            WebkitBackdropFilter: `blur(${filter}px)`,\n            borderRadius: `${radius}px`,\n            boxShadow: `0 10px 20px ${hexToRgba(shadowColor, '0.1')}, 0 6px 6px ${hexToRgba(shadowColor, '0.23')}`,\n            transform: translate,\n        }\"\n        @pointerdown=\"adjustOtherZIndex\"\n        @touchstart=\"adjustOtherZIndex\"\n    >\n        <div\n            class=\"i-window-drag\"\n            :style=\"{ height, cursor }\"\n            @pointerdown=\"startDrag\"\n            @touchstart=\"startDrag\"\n        ></div>\n        <div class=\"i-window-header\">\n            <slot name=\"header\" v-bind=\"{ min, max, restore, close }\"></slot>\n        </div>\n        <div class=\"i-window-content\">\n            <slot></slot>\n        </div>\n        <!-- resize -->\n        <div class=\"i-resize-handle i-top\"></div>\n        <div class=\"i-resize-handle i-right\"></div>\n        <div class=\"i-resize-handle i-top-right\"></div>\n        <div class=\"i-resize-handle i-bottom\"></div>\n        <div class=\"i-resize-handle i-bottom-left\"></div>\n        <div class=\"i-resize-handle i-left\"></div>\n        <div class=\"i-resize-handle i-bottom-right\"></div>\n    </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, reactive, ref } from 'vue';\nimport { $ } from '@packages/utils';\n\ntype IProps = {\n    win?: any;\n    wins?: Array<any>;\n    x?: number;\n    y?: number;\n    offset?: Array<number> | number;\n    height?: string;\n    filter?: number;\n    radius?: number;\n    shadowColor?: string;\n    fullTo?: string;\n    dragable?: boolean;\n    resizable?: boolean;\n    fullscreened?: boolean;\n    maximized?: boolean;\n    // minimized?: boolean;\n    cursor?: string;\n};\n\nconst {\n    win = {\n        width: 300,\n        height: 200,\n        minWidth: 300,\n        minHeight: 200,\n        zIndex: 1,\n    },\n    wins = [],\n    x = 0,\n    y = 0,\n    offset = 0,\n    height = '0px',\n    filter = 5,\n    radius = 6,\n    shadowColor = '#000000',\n    fullTo,\n    dragable = true,\n    resizable = true,\n    maximized = true,\n    // minimized = true,\n    cursor = 'auto',\n} = defineProps<IProps>();\n\n// 拖拽窗口\nconst dragging = ref(false);\nconst resizing = ref(false);\nconst initialX = ref(0);\nconst initialY = ref(0);\nconst initialClientX = ref(0);\nconst initialClientY = ref(0);\nconst container = ref<HTMLElement>();\nconst resizingTarget = ref<HTMLElement>();\nconst touchTime = ref(0);\nconst translate = computed(() => {\n    if (typeof offset === 'number') {\n        return `translate(${(x || window.innerWidth / 2 - win.width! / 2) + offset}px, ${(y || window.innerHeight / 2 - win.height! / 2) + offset}px)`;\n    } else {\n        return `translate(${(x || window.innerWidth / 2 - win.width! / 2) + offset[0]}px, ${(y || window.innerHeight / 2 - win.height! / 2) + offset[1]}px)`;\n    }\n});\nconst fullWinOpts = reactive({\n    width: '0px',\n    height: '0px',\n    transform: '',\n});\n// 是否全屏化\n// const isFullscreen = ref(false);\n// 是否最大化\nconst isMaximized = ref(false);\nconst isMaximizedDarg = ref(false);\n\n// 最小化\nconst min = () => {\n    container.value!.style.visibility = 'hidden';\n};\n\n// 最大化\nconst max = () => {\n    console.log('max');\n};\n\n// 还原\nconst restore = () => {\n    console.log('restore');\n};\n\n// 关闭\nconst close = () => {\n    console.log('close');\n};\n\n// 转换颜色16 to rgba\nconst hexToRgba = (hex: string, alpha: string) => {\n    // 移除#前缀\n    hex = hex.replace('#', '');\n    // 分离RGB值\n    const r = parseInt(hex.substring(0, 2), 16);\n    const g = parseInt(hex.substring(2, 4), 16);\n    const b = parseInt(hex.substring(4, 6), 16);\n    // 返回RGBA字符串\n    return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n};\n/**\n * 重置窗口层级\n */\nconst adjustOtherZIndex = () => {\n    if (wins.length === 0) return;\n    // 最大的层级\n    const maxZIndex = Math.max(...wins.map(win => win.zIndex!));\n    // 当前容器层级\n    const currentZIndex = +container.value!.style.zIndex;\n    // 其他容器\n    if (maxZIndex !== currentZIndex) {\n        // 将当前容器置顶\n        container.value!.style.zIndex = `${maxZIndex}`;\n        // 其他容器层级-1\n        const containers = document.querySelectorAll(\n            \"[class*='i-window-container']\",\n        );\n        containers.forEach(otherContainer => {\n            const other = otherContainer as HTMLElement;\n            if (\n                other !== container.value &&\n                +other.style.zIndex > currentZIndex\n            ) {\n                other.style.zIndex = `${+other.style.zIndex - 1}`;\n            }\n        });\n\n        return true;\n    }\n\n    return false;\n};\n\n/**\n * 开始拖拽窗口\n * @param event 鼠标事件\n */\nconst startDrag = (event: MouseEvent | TouchEvent) => {\n    event.preventDefault();\n    if ((dragable && dragging.value) || (resizable && resizing.value)) return;\n    isMaximizedDarg.value = false;\n    // mouse/touch事件双击事件\n    const now = Date.now();\n    if (now - touchTime.value < 300) {\n        // 双击事件--最大化/还原\n        toggleMaximized();\n        isMaximizedDarg.value = true;\n    }\n    touchTime.value = now;\n\n    // 如果是最大化操作，则终止拖拽\n    if (isMaximizedDarg.value) return;\n\n    // 拖拽\n    dragging.value = true;\n    const clientX =\n        event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n    const clientY =\n        event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n    initialClientX.value = isMaximized.value\n        ? container.value!.clientWidth / 4\n        : clientX;\n    initialClientY.value = clientY;\n    const style = window.getComputedStyle(container.value!);\n    const matrix = style.transform\n        ? style.transform.split('(')[1].split(')')[0].split(',')\n        : '';\n    initialX.value = matrix.length > 4 ? +matrix[4] : 0;\n    initialY.value = matrix.length > 4 ? +matrix[5] : 0;\n\n    // 拖拽范围-最大化区域\n    document.addEventListener('pointermove', drag);\n    document.addEventListener('pointerup', endDrag);\n    document.addEventListener('touchmove', drag);\n    document.addEventListener('touchend', endDrag);\n};\n\n/**\n * 窗口四边或四角拉伸\n */\nconst resizeContainer = (event: MouseEvent | TouchEvent, rect: DOMRect) => {\n    const clientX =\n        event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n    const clientY =\n        event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n\n    const dx = clientX - initialClientX.value;\n    const dy = clientY - initialClientY.value;\n\n    // 调整其他容器的层级\n    adjustOtherZIndex();\n\n    switch (resizingTarget.value?.classList[1]) {\n        case 'i-top':\n            // 保持顶部位置不变，减少高度\n            container.value!.style.height = `${rect.height - dy}px`;\n            container.value!.style.transform = `translate(${rect.left}px, ${rect.top + dy}px)`;\n            break;\n        case 'i-right':\n            container.value!.style.width = `${rect.width + dx}px`;\n            break;\n        case 'i-bottom':\n            container.value!.style.height = `${rect.height + dy}px`;\n            break;\n        case 'i-left':\n            container.value!.style.width = `${Math.max(0, rect.width - dx)}px`;\n            container.value!.style.transform = `translate(${rect.left + dx}px, ${rect.top}px)`;\n            break;\n        case 'i-top-left':\n            container.value!.style.width = `${Math.max(0, rect.width - dx)}px`;\n            container.value!.style.height = `${Math.max(0, rect.height - dy)}px`;\n            container.value!.style.transform = `translate(${rect.left + dx}px, ${rect.top + dy}px)`;\n            break;\n        case 'i-top-right':\n            container.value!.style.height = `${Math.max(0, rect.height - dy)}px`;\n            container.value!.style.width = `${rect.width + dx}px`;\n            container.value!.style.transform = `translate(${rect.left}px, ${rect.top + dy}px)`;\n            break;\n        case 'i-bottom-left':\n            container.value!.style.width = `${Math.max(0, rect.width - dx)}px`;\n            container.value!.style.height = `${rect.height + dy}px`;\n            container.value!.style.transform = `translate(${rect.left + dx}px, ${rect.top}px)`;\n            break;\n        case 'i-bottom-right':\n            container.value!.style.width = `${rect.width + dx}px`;\n            container.value!.style.height = `${rect.height + dy}px`;\n            break;\n    }\n};\n\n/**\n * 拖拽移动窗口ing\n * @param event 鼠标事件\n */\nconst drag = (event: MouseEvent | TouchEvent, rect?: DOMRect) => {\n    if (resizing.value) {\n        resizable && resizeContainer(event, rect!);\n    } else if (dragging.value) {\n        // 如果窗口最大化中，则窗口还原，否则不操作\n        if (isMaximized.value) {\n            toggleMaximized();\n        }\n\n        const clientX =\n            event instanceof MouseEvent\n                ? event.clientX\n                : event.touches[0].clientX;\n        const clientY =\n            event instanceof MouseEvent\n                ? event.clientY\n                : event.touches[0].clientY;\n        const left = initialX.value + clientX - initialClientX.value;\n        const top = initialY.value + clientY - initialClientY.value;\n        container.value!.style.transform = `translate(${left}px, ${top}px)`;\n    }\n};\n\n/**\n * 结束拖拽窗口\n */\nconst endDrag = () => {\n    dragging.value = false;\n    resizing.value = false;\n    document.removeEventListener('pointermove', drag);\n    document.removeEventListener('pointerup', endDrag);\n    document.removeEventListener('touchmove', drag);\n    document.removeEventListener('touchend', endDrag);\n};\n\n/**\n * 窗口拉伸\n * @param event 鼠标事件\n */\nconst startResize = (event: MouseEvent | TouchEvent) => {\n    if (dragging.value) return;\n    resizing.value = true;\n    const clientX =\n        event instanceof MouseEvent ? event.clientX : event.touches[0].clientX;\n    const clientY =\n        event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;\n    initialClientX.value = clientX;\n    initialClientY.value = clientY;\n    resizingTarget.value = event.target as HTMLElement;\n\n    // 当前窗口的参数\n    const rect = container.value!.getBoundingClientRect();\n\n    // 拖拽范围-最大化区域\n    document.addEventListener('pointermove', (event: MouseEvent) =>\n        drag(event, rect),\n    );\n    document.addEventListener('pointerup', endDrag);\n    document.addEventListener('touchmove', (event: TouchEvent) =>\n        drag(event, rect),\n    );\n    document.addEventListener('touchend', endDrag);\n};\n\n/**\n * 最大化/还原窗口\n */\nconst toggleMaximized = () => {\n    // fullscreened = true,\n    // maximized = true,\n    // minimized = true,\n    if (!maximized) return;\n    if (!isMaximized.value && fullTo) {\n        const fullDom = $(fullTo);\n        if (fullDom) {\n            // 最大化标识\n            isMaximized.value = !isMaximized.value;\n            container.value!.style.transform;\n            // 记录窗口信息\n            fullWinOpts.width = container.value!.style.width;\n            fullWinOpts.height = container.value!.style.height;\n            fullWinOpts.transform = container.value!.style.transform;\n            // 窗口最大化\n            container.value!.style.width = `${fullDom!.clientWidth}px`;\n            const padding = fullDom!.style.padding;\n            const pd = padding.split(' ');\n            const top = pd[0] === '0px' ? 0 : parseFloat(pd[0]);\n            const bottom =\n                pd.length === 1 ? 0 : pd[2] === '0px' ? 0 : parseFloat(pd[2]);\n            container.value!.style.height = `${fullDom!.clientHeight - top - bottom}px`;\n            container.value!.style.transform = `translate(${pd.length === 1 ? pd[0] : pd[1]}, ${pd[0] === '0px' ? '0px' : pd[0]})`;\n            // 强制去除圆角和阴影\n            container.value!.classList.add('i-no-radius-shadow');\n        }\n    } else if (isMaximized.value) {\n        isMaximized.value = !isMaximized.value;\n        // 退出窗口最大化\n        container.value!.style.width = fullWinOpts.width;\n        container.value!.style.height = fullWinOpts.height;\n        container.value!.style.transform = fullWinOpts.transform;\n        container.value!.classList.remove('i-no-radius-shadow');\n    }\n};\n\nonMounted(() => {\n    const handles = container.value!.querySelectorAll('.i-resize-handle');\n    handles.forEach((handle: any) => {\n        handle.addEventListener('mousedown', startResize);\n        handle.addEventListener('touchstart', startResize);\n    });\n\n    // 窗口最小化\n    const _thisWin: any = document.querySelector(`#win-${win.id}`);\n    _thisWin.addEventListener('click', () => {\n        // 调整窗口层级\n        const visibility = window.getComputedStyle(container.value!).visibility;\n        const flag = adjustOtherZIndex();\n        if (visibility === 'hidden') {\n            container.value!.style.visibility = 'visible';\n        } else {\n            if (!flag) {\n                container.value!.style.visibility = 'hidden';\n            }\n        }\n    });\n});\n</script>\n\n<style lang=\"scss\">\n.no-drag {\n    z-index: inherit;\n    position: relative;\n}\n</style>\n\n<style scoped lang=\"scss\">\n.i-window-container {\n    & {\n        position: fixed;\n        inset: 0;\n        display: flex;\n        flex-direction: column;\n        overflow: hidden;\n\n        &.i-no-radius-shadow {\n            box-shadow: none !important;\n            border-radius: 0 !important;\n        }\n    }\n\n    .i-window-drag {\n        position: absolute;\n        top: 0px;\n        width: 100%;\n        user-select: none;\n        -webkit-user-select: none;\n    }\n\n    .i-window-header {\n        user-select: none;\n        -webkit-user-select: none;\n    }\n\n    .i-window-content {\n        height: 100%;\n    }\n\n    .i-resize-handle {\n        position: absolute;\n        width: 2px;\n        height: 2px;\n        z-index: 2;\n        cursor: se-resize;\n    }\n\n    .i-top-left {\n        top: 0;\n        left: 0;\n        z-index: 3;\n        cursor: nw-resize;\n    }\n\n    .i-top-right {\n        top: 0;\n        right: 0;\n        z-index: 3;\n        cursor: ne-resize;\n    }\n\n    .i-bottom-left {\n        bottom: 0;\n        left: 0;\n        z-index: 3;\n        cursor: sw-resize;\n    }\n\n    .i-bottom-right {\n        bottom: 0;\n        right: 0;\n        z-index: 3;\n        cursor: se-resize;\n    }\n\n    .i-top {\n        top: 0;\n        width: 100%;\n        cursor: ns-resize;\n    }\n\n    .i-right {\n        top: 0;\n        right: 0;\n        height: 100%;\n        cursor: ew-resize;\n    }\n\n    .i-bottom {\n        bottom: 0;\n        width: 100%;\n        cursor: ns-resize;\n    }\n\n    .i-left {\n        top: 0;\n        left: 0;\n        height: 100%;\n        cursor: ew-resize;\n    }\n}\n</style>\n","import type { App } from 'vue';\n\nimport IWindow from './index.vue';\n\nIWindow.name = 'IWindow';\n\nIWindow.install = (app: App) => {\n    app.component(`${IWindow.name}`, IWindow);\n    return app;\n};\n\nexport { IWindow };\n\nexport default IWindow;\n","<template>\n    <div>Dock</div>\n</template>\n\n<script setup lang=\"ts\"></script>\n\n<style scoped lang=\"scss\"></style>\n","import type { App } from 'vue';\n\nimport IDock from './index.vue';\n\nIDock.name = 'IDock';\n\nIDock.install = (app: App) => {\n    app.component(`${IDock.name}`, IDock);\n    return app;\n};\n\nexport { IDock };\n\nexport default IDock;\n","import type { App } from 'vue';\n// 样式原子化\nimport 'virtual:uno.css';\n\n// 指令\nimport * as directives from './directives';\n// 组件\nimport * as components from './components';\n\nexport const install = function (app: App) {\n    const _directives = directives as any;\n    // 注入全部指令\n    Object.keys(directives).forEach(key => {\n        const directive = _directives[key];\n        app.directive(key, directive);\n    });\n\n    const _components = components as any;\n    // 注入全部组件--以插件的形式\n    Object.keys(components).forEach(key => {\n        const component = _components[key];\n        if (component.install) {\n            app.use(component);\n        }\n    });\n\n    return app;\n};\n\nexport default {\n    install,\n};\n"],"names":["onUnmounted","watch","nextTick","_sfc_render","_openBlock","_createElementBlock","_hoisted_1","ITopBar","ref","computed","reactive","event","onMounted"],"mappings":"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"}