Merge branch 'develop' into localDevelop

This commit is contained in:
X1627315083
2024-05-20 13:09:06 +08:00
8 changed files with 211 additions and 16 deletions

View File

@@ -1227,6 +1227,10 @@ i {
opacity: 0.5; opacity: 0.5;
transform: scale(0.9); transform: scale(0.9);
} }
textarea:focus {
outline: none;
/* 清除默认焦点样式 */
}
.collection_modal_body .input_border, .collection_modal_body .input_border,
.design_detail_modal_component .input_border, .design_detail_modal_component .input_border,
.library_page .input_border { .library_page .input_border {
@@ -1288,6 +1292,38 @@ i {
.library_page .input_border input.forbidden { .library_page .input_border input.forbidden {
cursor: no-drop; cursor: no-drop;
} }
.collection_modal_body .input_border .icon-xiala,
.design_detail_modal_component .input_border .icon-xiala,
.library_page .input_border .icon-xiala {
margin-left: 1rem;
display: inline-block;
cursor: pointer;
transition: all 0.3s;
}
.collection_modal_body .input_border .icon-xiala.active,
.design_detail_modal_component .input_border .icon-xiala.active,
.library_page .input_border .icon-xiala.active {
transform: rotate(180deg);
}
.collection_modal_body .input_border .icon-xiala.forbidden,
.design_detail_modal_component .input_border .icon-xiala.forbidden,
.library_page .input_border .icon-xiala.forbidden {
cursor: no-drop;
}
.collection_modal_body .input_border .search_textarea,
.design_detail_modal_component .input_border .search_textarea,
.library_page .input_border .search_textarea {
z-index: 3;
height: auto;
position: absolute;
left: 0;
font-size: calc(1.6rem*1.2);
width: 70%;
border-radius: 4px;
height: 20rem;
top: 0.2rem;
border: 1px solid #dcdfe6;
}
.collection_modal_body .input_border span, .collection_modal_body .input_border span,
.design_detail_modal_component .input_border span, .design_detail_modal_component .input_border span,
.library_page .input_border span { .library_page .input_border span {

View File

@@ -1326,6 +1326,9 @@ i{
transform: scale(.9); transform: scale(.9);
} }
textarea:focus{
outline: none; /* 清除默认焦点样式 */
}
//设计input和上传按钮样式 //设计input和上传按钮样式
.collection_modal_body,.design_detail_modal_component,.library_page{ .collection_modal_body,.design_detail_modal_component,.library_page{
.input_border{ .input_border{
@@ -1376,6 +1379,31 @@ i{
cursor: no-drop; cursor: no-drop;
} }
} }
.icon-xiala{
margin-left:1rem;
display: inline-block;
cursor: pointer;
transition: all .3s;
&.active{
transform: rotate(180deg);
}
&.forbidden{
cursor: no-drop;
}
}
.search_textarea{
z-index:3;
height: auto;
position: absolute;
left: 0;
font-size: calc(1.6rem*1.2);
// width: 30rem;
width: 70%;
border-radius: 4px;
height: 20rem;
top: .2rem;
border: 1px solid #dcdfe6;
}
span{ span{
position: absolute; position: absolute;
// bottom: calc(0rem*1.2); // bottom: calc(0rem*1.2);

View File

@@ -90,13 +90,18 @@
<a-slider id="system_silder" <a-slider id="system_silder"
v-model:value="workspaceItem.systemDesignerPercentage" v-model:value="workspaceItem.systemDesignerPercentage"
@afterChange="systemDesigner" @afterChange="systemDesigner"
:tooltip-visible="openType.slider"
:tip-formatter="formatter" :tip-formatter="formatter"
> >
</a-slider> </a-slider>
<div class="habit_System_Designer_text_max"> <div class="habit_System_Designer_text_max">
<div class="habit_System_Designer_text">{{ $t('Habit.System') }}</div> <div class="habit_System_Designer_text">
<div class="habit_System_Designer_text">{{ $t('Habit.Designer') }}</div>
{{ $t('Habit.System') }}<span>(100%)</span>
</div>
<div class="habit_System_Designer_text">
{{ $t('Habit.Designer') }}<span>(100%)</span>
</div>
</div> </div>
</div> </div>
<div class="habit_model" :class="[driver__.index == 3?driver__.driver?'Guide_active':'':'']"> <div class="habit_model" :class="[driver__.index == 3?driver__.driver?'Guide_active':'':'']">
@@ -615,7 +620,8 @@ export default defineComponent({
this.workspaceItem.systemDesignerPercentage = num this.workspaceItem.systemDesignerPercentage = num
}, },
formatter(value: number) { formatter(value: number) {
return `${value}%`; let num = Math.abs((value-50)*2)
return `${num}%`;
}, },
//根据id设置当前参数 //根据id设置当前参数
@@ -915,7 +921,14 @@ export default defineComponent({
.habit_System_Designer_text_max { .habit_System_Designer_text_max {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
text-align: center;
.habit_System_Designer_text { .habit_System_Designer_text {
>span{
font-size: 1.2rem;
font-weight: 600;
color: #2d2e76;
}
} }
} }
} }

View File

@@ -54,7 +54,7 @@
<div v-if="item[0] && key == 'colorBoards'" class="exportCanvasBox_intro">Color</div> <div v-if="item[0] && key == 'colorBoards'" class="exportCanvasBox_intro">Color</div>
<div v-if="item[0] && key == 'sketchboardFiles'" class="exportCanvasBox_intro">Sketch</div> <div v-if="item[0] && key == 'sketchboardFiles'" class="exportCanvasBox_intro">Sketch</div>
<div v-if="item[0] && key == 'likeDesignCollectionList'" class="exportCanvasBox_intro">Selected Design</div> <div v-if="item[0] && key == 'likeDesignCollectionList'" class="exportCanvasBox_intro">Selected Design</div>
<div class="exportCanvasBox_item_color" v-if="key == 'colorBoards'" v-for="colorItem in item" draggable="true" @dragstart="onDragstart(key,colorItem)"> <div class="exportCanvasBox_item_color" v-if="key == 'colorBoards'" v-for="colorItem in item" :class="{active:colorItem.checked}" draggable="true" @dragstart="onDragstart(key,colorItem)" @click="isMoible?setDragstart(key,colorItem):''">
<img src="" alt=""> <img src="" alt="">
<div class="exportCanvasBox_item_BGcolor" :style="{'background-color': 'rgb('+colorItem.rgbValue.r+','+colorItem.rgbValue.g+','+colorItem.rgbValue.b+')'}"></div> <div class="exportCanvasBox_item_BGcolor" :style="{'background-color': 'rgb('+colorItem.rgbValue.r+','+colorItem.rgbValue.g+','+colorItem.rgbValue.b+')'}"></div>
<div>{{colorItem.tcx}}</div> <div>{{colorItem.tcx}}</div>
@@ -63,10 +63,11 @@
<div <div
class="exportCanvasBox_item" class="exportCanvasBox_item"
:class="[key == 'disposeMoodboard'?'exportCanvasBox_item_dispose':'']"
v-for="imgItem in item" v-for="imgItem in item"
:class="[key == 'disposeMoodboard'?'exportCanvasBox_item_dispose':'',imgItem?.checked?'active':'']"
draggable draggable
@dragstart="onDragstart(key,imgItem)" @dragstart="onDragstart(key,imgItem)"
@click="isMoible?setDragstart(key,imgItem):''"
> >
<div class="exportCanvasBox_img"> <div class="exportCanvasBox_img">
<!-- <div v-if="key == 'likeDesignCollectionList'">{{ imgItem.designOutfitUrl }}</div> --> <!-- <div v-if="key == 'likeDesignCollectionList'">{{ imgItem.designOutfitUrl }}</div> -->
@@ -806,6 +807,18 @@ export default defineComponent({
currentType.value.type = type currentType.value.type = type
currentType.value.data = imgItem currentType.value.data = imgItem
} }
let present = {}
let setDragstart = (type,imgItem)=>{
currentType.value.type = type
present.checked = false
present = {}
if(imgItem.checked){
}else{
imgItem.checked = true
present = imgItem
}
currentType.value.data = imgItem
}
let canvasOnDrop = ()=>{ let canvasOnDrop = ()=>{
canvas.on('drop', (opt)=> { canvas.on('drop', (opt)=> {
let offset = { let offset = {
@@ -1357,7 +1370,27 @@ export default defineComponent({
} }
//设置再画布上按下 //设置再画布上按下
let setCanvasDown = (event)=>{ let setCanvasDown = (event)=>{
//设置移动端按下添加元素
if(isMoible && present.checked){
present.checked = false
present = {}
let pointerVpt = canvas.restorePointerVpt(event.pointer)
switch (currentType.value.type) {
case 'colorBoards':
let rect = setGroup(currentType.value.data)
setCanvasColor(pointerVpt.y, pointerVpt.x,rect)
break
case 'moodboardFiles':
createImage(pointerVpt.y, pointerVpt.x,currentType.value.type)
break
default :
createImage(pointerVpt.y, pointerVpt.x,currentType.value.type)
break
}
// 创建完元素,把当前操作的元素类型设置回 null
currentType.value.type = null
currentType.value.data = null
}
downPoint = event.absolutePointer downPoint = event.absolutePointer
let arr = ['rect','line','circle','triangle','ellipse','fold'] let arr = ['rect','line','circle','triangle','ellipse','fold']
if(arr.indexOf(operation.value) > -1){ if(arr.indexOf(operation.value) > -1){
@@ -1634,6 +1667,7 @@ export default defineComponent({
setCloseNav,//给图片导航或者工具收起来或者展开 setCloseNav,//给图片导航或者工具收起来或者展开
multiselect,//获取整体高度 multiselect,//获取整体高度
onDragstart,//拖拽函数 onDragstart,//拖拽函数
setDragstart,//的移动端拖拽改为按下
historyState,//执行撤回或者反撤回 historyState,//执行撤回或者反撤回
operation,//设置当前鼠标状态绘画或者矩形或者移动 operation,//设置当前鼠标状态绘画或者矩形或者移动
operationMode,//设置矩形是边框还是填充 operationMode,//设置矩形是边框还是填充
@@ -1894,6 +1928,10 @@ export default defineComponent({
max-height: 100%; max-height: 100%;
} }
} }
.active{
opacity: .5;
transform: scale(.9);
}
} }
} }
.exportCanvasBox_left_tool{ .exportCanvasBox_left_tool{

View File

@@ -53,6 +53,15 @@
v-model="searchPictureName" v-model="searchPictureName"
@keydown.enter="getgenerate()" @keydown.enter="getgenerate()"
/> />
<i class="icon iconfont icon-xiala" :class="{active:isTextarea}" @click.stop="setTextareaShow"></i>
<textarea
v-show="isTextarea"
class="search_textarea "
@input="ifMaximumLength"
:maxlength='inputShow?0:9999'
@keydown.enter="getgenerate()"
v-model="searchPictureName"
></textarea>
<!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('Generate.Generate') }}</div> --> <!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('Generate.Generate') }}</div> -->
<div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate"> <div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate">
{{ $t('Generate.Generate') }} {{ $t('Generate.Generate') }}
@@ -302,6 +311,7 @@ export default defineComponent({
type2: prop.msg, type2: prop.msg,
}, },
workspaceCom:{}, workspaceCom:{},
isTextarea:false
}; };
}, },
@@ -504,7 +514,7 @@ export default defineComponent({
// } // }
if(this.searchPictureName){ if(this.searchPictureName){
let arr = this.searchPictureName.split(/\s+/).length let arr = this.searchPictureName.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('Generate.jsContent4') this.t('Generate.jsContent4')
); );
@@ -638,6 +648,9 @@ export default defineComponent({
}); });
} }
}, },
setTextareaShow(){
this.isTextarea = !this.isTextarea
},
ifMaximumLength(){ ifMaximumLength(){
clearTimeout(this.inputTime) clearTimeout(this.inputTime)
let inputBox = document.getElementsByClassName('generate')[0].getElementsByClassName('input_box')[0] let inputBox = document.getElementsByClassName('generate')[0].getElementsByClassName('input_box')[0]

View File

@@ -106,6 +106,9 @@
<div class="input_border"> <div class="input_border">
<div class="Guide_1_2_8 input_box" :class="[inputShow?'active':'',driver__.driver?'showEvents':'']"> <div class="Guide_1_2_8 input_box" :class="[inputShow?'active':'',driver__.driver?'showEvents':'']">
<input class="search_input" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" :placeholder="$t('PrintboardUpload.inputContent1')" v-model="captionGeneration"> <input class="search_input" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" :placeholder="$t('PrintboardUpload.inputContent1')" v-model="captionGeneration">
<i class="icon iconfont icon-xiala" :class="{active:isTextarea,forbidden:generateCheckbox}" @click.stop="setTextareaShow"></i>
<textarea class="search_textarea" v-show="isTextarea && !generateCheckbox" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" v-model="captionGeneration">
</textarea>
<!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('PrintboardUpload.Generate') }}</div> --> <!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('PrintboardUpload.Generate') }}</div> -->
<!-- <div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate"> <!-- <div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate">
{{ $t('PrintboardUpload.Generate') }} {{ $t('PrintboardUpload.Generate') }}
@@ -290,7 +293,8 @@ export default defineComponent({
printboardList:computed(()=>{ printboardList:computed(()=>{
return useStore().state.UploadFilesModule.printboard return useStore().state.UploadFilesModule.printboard
}), }),
source:axios.CancelToken.source() source:axios.CancelToken.source(),
isTextarea:false,
} }
}, },
@@ -661,6 +665,10 @@ export default defineComponent({
getgenerateCheckbox(value:any){ getgenerateCheckbox(value:any){
this.generateCheckbox = value this.generateCheckbox = value
}, },
setTextareaShow(){
if(this.generateCheckbox) return
this.isTextarea = !this.isTextarea
},
ifMaximumLength(){ ifMaximumLength(){
this.inputTime = setTimeout(()=>{ this.inputTime = setTimeout(()=>{
if(this.captionGeneration?.split(/\s+/).length > 75){ if(this.captionGeneration?.split(/\s+/).length > 75){
@@ -723,7 +731,7 @@ export default defineComponent({
// this.beforeUpload(false) // this.beforeUpload(false)
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('PrintboardUpload.jsContent5') this.t('PrintboardUpload.jsContent5')
); );
@@ -740,7 +748,7 @@ export default defineComponent({
if(this.useGenerate.imgId){ if(this.useGenerate.imgId){
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('PrintboardUpload.jsContent5') this.t('PrintboardUpload.jsContent5')
); );

View File

@@ -140,6 +140,9 @@
<div class="input_border"> <div class="input_border">
<div class="Guide_1_9_2 input_box" :class="[inputShow?'active':'',driver__.driver?'showEvents':'']"> <div class="Guide_1_9_2 input_box" :class="[inputShow?'active':'',driver__.driver?'showEvents':'']">
<input class="search_input" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" :placeholder="$t('PrintboardUpload.inputContent1')" v-model="captionGeneration"> <input class="search_input" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" :placeholder="$t('PrintboardUpload.inputContent1')" v-model="captionGeneration">
<i class="icon iconfont icon-xiala" :class="{active:isTextarea,forbidden:generateCheckbox}" @click.stop="setTextareaShow"></i>
<textarea class="search_textarea" v-show="isTextarea && !generateCheckbox" @input="ifMaximumLength" @keydown.enter="getgenerate" :maxlength='inputShow?0:9999' :class="{forbidden:generateCheckbox}" :readonly="generateCheckbox" v-model="captionGeneration">
</textarea>
<!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('PrintboardUpload.Generate') }}</div> --> <!-- <div class="generage_btn started_btn" @click.stop="getgenerate">{{ $t('PrintboardUpload.Generate') }}</div> -->
<div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate"> <div v-show="!isGenerate" class="generage_btn started_btn" @click.stop="getgenerate">
{{ $t('LibraryPage.Generate') }} {{ $t('LibraryPage.Generate') }}
@@ -294,7 +297,8 @@ export default defineComponent({
token: "", token: "",
uploadUrl: "", uploadUrl: "",
captionGeneration:'', captionGeneration:'',
workspaceCom:{} workspaceCom:{},
isTextarea:false,
}; };
}, },
computed: { computed: {
@@ -509,6 +513,10 @@ export default defineComponent({
} }
return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE; return (isJpgOrPng && isLt2M) || Upload.LIST_IGNORE;
}, },
setTextareaShow(){
if(this.generateCheckbox) return
this.isTextarea = !this.isTextarea
},
ifMaximumLength(){ ifMaximumLength(){
clearTimeout(this.inputTime) clearTimeout(this.inputTime)
let inputBox = document.getElementsByClassName('sketchboard_upload_modal')[0].getElementsByClassName('input_box')[0] let inputBox = document.getElementsByClassName('sketchboard_upload_modal')[0].getElementsByClassName('input_box')[0]
@@ -686,7 +694,7 @@ export default defineComponent({
// this.beforeUpload(false) // this.beforeUpload(false)
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('PrintboardUpload.jsContent5') this.t('PrintboardUpload.jsContent5')
); );
@@ -703,7 +711,7 @@ export default defineComponent({
if(this.useGenerate.imgId){ if(this.useGenerate.imgId){
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('PrintboardUpload.jsContent5') this.t('PrintboardUpload.jsContent5')
); );

View File

@@ -213,6 +213,15 @@
@keydown.enter="getgenerate" :readonly="checkbox[0].type && selectCode != 'Moodboard'" @keydown.enter="getgenerate" :readonly="checkbox[0].type && selectCode != 'Moodboard'"
:placeholder="$t('LibraryPage.inputContent2')" :placeholder="$t('LibraryPage.inputContent2')"
v-model="captionGeneration"> v-model="captionGeneration">
<i class="icon iconfont icon-xiala" :class="{active:isTextarea, forbidden:checkbox[0].type&& selectCode != 'Moodboard'}" @click.stop="setTextareaShow"></i>
<textarea
v-show="isTextarea "
class="search_textarea "
@input="ifMaximumLength"
:maxlength='inputShow?0:9999'
@keydown.enter="getgenerate" :readonly="checkbox[0].type && selectCode != 'Moodboard'"
v-model="captionGeneration"
></textarea>
<div v-show="!isGenerate[selectCode]" class="generage_btn started_btn" @click.stop="getgenerate"> <div v-show="!isGenerate[selectCode]" class="generage_btn started_btn" @click.stop="getgenerate">
{{ $t('LibraryPage.Generate') }} {{ $t('LibraryPage.Generate') }}
<!-- <div v-show="isGenerate"><a-spin size="large" /></div> --> <!-- <div v-show="isGenerate"><a-spin size="large" /></div> -->
@@ -490,6 +499,7 @@ export default defineComponent({
value:'id', value:'id',
label:'classificationName', label:'classificationName',
} }
let isTextarea = ref(false)
return { return {
menuList, menuList,
selectImgList, selectImgList,
@@ -531,6 +541,7 @@ export default defineComponent({
getLibraryListInputTime, getLibraryListInputTime,
props, props,
options, options,
isTextarea,
} }
}, },
data(this_) { data(this_) {
@@ -660,6 +671,7 @@ export default defineComponent({
// this.sex = 'Female', // this.sex = 'Female',
// this.designType = 'Outwear', // this.designType = 'Outwear',
this.selectImgList = [] this.selectImgList = []
this.isTextarea = false
this.value.labelValue = [] this.value.labelValue = []
this.getLibraryList('') this.getLibraryList('')
this.getClass() this.getClass()
@@ -1033,6 +1045,10 @@ export default defineComponent({
} }
}) })
}, },
setTextareaShow(){
if(this.checkbox[0].type && this.selectCode != 'Moodboard') return
this.isTextarea = !this.isTextarea
},
ifMaximumLength(){ ifMaximumLength(){
clearTimeout(this.inputTime) clearTimeout(this.inputTime)
this.inputTime = setTimeout(()=>{ this.inputTime = setTimeout(()=>{
@@ -1152,7 +1168,7 @@ export default defineComponent({
// this.beforeUpload(false) // this.beforeUpload(false)
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('LibraryPage.jsContent6') this.t('LibraryPage.jsContent6')
); );
@@ -1170,7 +1186,7 @@ export default defineComponent({
if(generageImg?.id){ if(generageImg?.id){
if(this.captionGeneration){ if(this.captionGeneration){
let arr = this.captionGeneration.split(/\s+/).length let arr = this.captionGeneration.split(/\s+/).length
if(arr > 75){ if(arr > 250){
message.info( message.info(
this.t('LibraryPage.jsContent6') this.t('LibraryPage.jsContent6')
); );
@@ -1192,6 +1208,7 @@ export default defineComponent({
} }
// this.isShowMark = true // this.isShowMark = true
this.isGenerate[selectCodeStr] = true this.isGenerate[selectCodeStr] = true
this.isTextarea = false
Https.axiosPost(Https.httpUrls.generatePrepare, data).then( Https.axiosPost(Https.httpUrls.generatePrepare, data).then(
(rv) => { (rv) => {
if(data.isTestUser){ if(data.isTestUser){
@@ -1528,6 +1545,7 @@ export default defineComponent({
color: #C2C2C2; color: #C2C2C2;
} }
} }
.search_cascader{ .search_cascader{
// width: 53%; // width: 53%;
width: 38rem; width: 38rem;
@@ -1681,8 +1699,15 @@ export default defineComponent({
padding: 0; padding: 0;
.input_box{ .input_box{
background:initial; background:initial;
position: relative;
padding: 1.5rem 0; padding: 1.5rem 0;
padding: 0; padding: 0;
// &:hover{
// .search_textarea{
// display: block
// }
// }
input{ input{
width: 30rem; width: 30rem;
height: 3rem; height: 3rem;
@@ -1690,6 +1715,32 @@ export default defineComponent({
cursor: no-drop; cursor: no-drop;
} }
} }
.icon-xiala{
display: inline-block;
cursor: pointer;
transition: all .3s;
&.active{
transform: rotate(180deg);
}
&.forbidden{
cursor: no-drop;
}
}
.search_textarea{
z-index:3;
height: auto;
position: absolute;
left: 0;
width: 30rem;
border-radius: 4px;
height: 20rem;
top: .5rem;
border: 1px solid #dcdfe6;
&.forbidden{
cursor: no-drop;
}
}
.started_btn{ .started_btn{
} }