import { IconRotate , IconMove} from "@/assets/icons";
import { CompToolbars } from "@/modules/editor/objects/Toolbars";
import { css } from "@linaria/core";
import { defineComponent, onMounted, onUnmounted, ref, nextTick } from "vue";
import { useEditor } from "../../../..";
export const SelectTransfer = defineComponent({
setup() {
const editor = useEditor();
const { controls, store } = editor;
const { selectCtrl } = controls;
const { transferStyle } = selectCtrl;
return () => {
let toolbarOpts = CompToolbars.default;
let comp: any = null;
if (selectCtrl.selected.length == 1) {
comp = selectCtrl.selected[0].comp;
//@ts-ignore
toolbarOpts = CompToolbars[comp.compKey] || toolbarOpts;
} else {
toolbarOpts = CompToolbars.MultiSelector;
}
const w = selectCtrl.objContainer?.getBound();
const isTextEdit = selectCtrl.selected.length == 1 && selectCtrl.selected[0].comp.compKey == "Text";
return (
{
toolbarOpts.map((item) => {
return item.getVisible.call(editor, comp) ? (
item.onClick.call(editor, comp)}
/>
) : null;
})
}
<>
{
!isTextEdit &&
}
{
!isTextEdit &&
}
{
!isTextEdit &&
}
{
!isTextEdit &&
}
{transferStyle.showOrthScale && !isTextEdit && (
)}
{transferStyle.showOrthScale && !isTextEdit && (
)}
{transferStyle.showOrthScale && (
)}
{transferStyle.showOrthScale && (
)}
>
);
};
},
});
const selctRectStyle = css`
pointer-events: none;
`;
const showgizmo = css`
display: block;
left: 0;
top: 0;
/* pointer-events: none; */
`;
const hideGizmo = css`
display: none;
`;
const borderStyle = css`
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 999;
`;
const borderContentStyle = css`
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
outline: 2px solid @inf-primary-color;
`
const resizeStyle = css`
position: absolute;
width: 16px;
height: 16px;
border-radius: 50%;
background-color: #fff;
z-index: 999;
transform: translate(50%, 50%);
pointer-events: auto;
box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.2);
cursor: nwse-resize;
&:hover {
border-color: @inf-primary-color;
}
`;
const scaleBottomRightStyle = css`
bottom: -8px;
right: -8px;
`;
const scaleBottomLeftStyle = css`
bottom: -8px;
left: -8px;
`;
const scaleTopLeftStyle = css`
top: -8px;
left: -8px;
`;
const scaleTopRightStyle = css`
top: -8px;
right: -8px;
`;
const transformBtnsStyle = css`
@apply space-x-10px whitespace-nowrap;
position: absolute;
bottom: 0px;
left:calc(50% - 32px);
font-size: 16px;
z-index: 999;
pointer-events: auto;
transform-origin: 50% 100%;
pointer-events: none;
`;
const transBtnStyle = css`
display: inline-block;
width: 28px;
height: 28px;
border-radius: 50%;
background-color: #fff;
text-align: center;
line-height: 28px;
font-size: 16px;
color: #333;
position: relative;
top: 50px;
@apply shadow cursor-move;
pointer-events: auto;
&:hover {
color: #fff;
background-color: @inf-primary-color;
}
`;
const toolbarStyle = css`
@apply bg-white shadow rounded space-x-4px p-4px whitespace-nowrap;
position: absolute;
top: 0;
left: 50%;
transform: translate(0%, -60px);
z-index: 999;
`;
const resizeHeightBtnCls = css`
position: absolute;
width: 30px;
height: 8px;
border-radius: 4px;
left: 50%;
transform: translate(-50%, -4px);
pointer-events: auto;
cursor: ns-resize;
background: rgba(255, 255, 255, 0.3);
&:hover {
background: @inf-primary-color;
}
@apply shadow;
z-index: 999;
`;
const scaleTopCls = css`
top: -4px;
left: calc(50% - 15px);
`;
const scaleBottomCls = css`
bottom:-4px;
left: calc(50% - 15px);
`;
const resizeWidthBtnCls = css`
position: absolute;
width: 8px;
height: 30px;
border-radius: 4px;
pointer-events: auto;
cursor: ew-resize;
background: rgba(255, 255, 255, 0.3);
&:hover {
background: @inf-primary-color;
}
@apply shadow;
z-index: 999;
`;
const scaleRightCls = css`
right: -4px;
top: calc(50% - 15px);
`;
const scaleLeftCls = css`
left: -4px;
top: calc(50% - 15px);
`;