This commit is contained in:
richard-loafle 2020-02-12 17:25:11 +09:00
commit 6f4c450b33
36 changed files with 239 additions and 433 deletions

View File

@ -554,10 +554,12 @@ ipcMain.on(
if (!err) {
event.returnValue = savePath;
} else {
log.info('SaveFile err', err);
event.returnValue = undefined;
}
});
} catch (error) {
log.info('SaveFile error', error);
event.returnValue = undefined;
}
}

View File

@ -76,13 +76,6 @@
}
}
/*::ng-deep .ps {
.ps-content {
position: relative;
width: 100%;
height: 100%;
}
}*/
// perfect-scrollbar right로 2px이동
::ng-deep .ps__rail-y {
& > .ps__thumb-y {

View File

@ -16,7 +16,9 @@
class="left-side-tabs-contents"
[style.display]="MainMenu.Chat === currentTabLable ? 'block' : 'none'"
>
<app-layout-chat-left-sidenav-chat></app-layout-chat-left-sidenav-chat>
<app-layout-chat-left-sidenav-chat
[isVisible]="currentTabLable === MainMenu.Chat"
></app-layout-chat-left-sidenav-chat>
</div>
<div
#tabs

View File

@ -32,10 +32,3 @@
width: 100%;
height: 100%;
}
/*::ng-deep .cdk-virtual-scroll-orientation-vertical {
.cdk-virtual-scroll-content-wrapper {
width: 100%;
height: 100%;
contain: unset;
}
}*/

View File

@ -37,6 +37,7 @@ import { FormGroup, FormBuilder } from '@angular/forms';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { PerfectScrollbarDirective } from 'ngx-perfect-scrollbar';
import { TranslateService } from '@ngx-translate/core';
import { VirtualScrollerComponent } from 'ngx-virtual-scroller';
@Component({
selector: 'app-layout-chat-left-sidenav-chat',
@ -48,8 +49,8 @@ export class ChatComponent implements OnInit, OnDestroy, AfterViewChecked {
@Input()
isVisible = true;
@ViewChild('cvsvChatList', { static: false })
cvsvChatList: CdkVirtualScrollViewport;
@ViewChild('vsChatRoomList', { static: false })
private vsChatRoomList: VirtualScrollerComponent;
@ViewChild(PerfectScrollbarDirective, { static: false })
psDirectiveRef?: PerfectScrollbarDirective;
@ -192,14 +193,18 @@ export class ChatComponent implements OnInit, OnDestroy, AfterViewChecked {
ngAfterViewChecked(): void {
if (
!!this.cvsvChatList &&
!!this.vsChatRoomList &&
!!this.roomList &&
this.roomList.length > 0 &&
!this.isInitList &&
this.isVisible
) {
this.isInitList = true;
this.cvsvChatList.checkViewportSize();
this.vsChatRoomList.refresh();
if (!!this.psDirectiveRef) {
this.psDirectiveRef.update();
}
}
}

View File

@ -32,10 +32,7 @@
}
}
}
/*::ng-deep .mat-tab-body-content {
height: 100%;
overflow: unset;
}*/
.mat-menu-item {
display: flex;
align-items: center;

View File

@ -298,6 +298,7 @@ export class OrganizationComponent
this.isVisible
) {
this.isInitList = true;
this.vsDeptUser.refresh();
}
}

View File

@ -22,65 +22,5 @@ $tablet-s-width: 768px;
width: 50%;
min-width: 50%;
}
.mat-tab-header-pagination {
display: none;
}
}
}
::ng-deep .footer-fix {
position: absolute;
bottom: 0;
min-height: 40px;
width: 100%;
flex-direction: column;
box-sizing: border-box;
display: flex;
border-top: 1px solid #dddddd;
.btn-box {
height: 50px;
padding-bottom: 10px;
width: 100%;
background-color: #ffffff;
button {
margin: 5px;
font-size: 0.9em;
padding: 0 12px;
}
}
.mat-paginator-page-size {
@media screen and (max-width: #{$tablet-s-width}), (max-height: 800px) {
display: none;
}
}
}
/*right-drawer tab 레이아웃
::ng-deep .rightDrawer-tab {
.mat-tab-labels {
display: flex;
width: 100%;
border-bottom: 2px solid #dddddd;
flex: 1 1 auto;
justify-content: space-around;
width: 100%;
padding: 0;
min-width: 0 !important;
.mat-tab-label {
width: 50%;
}
}
.mat-tab-header-pagination.mat-tab-header-pagination-disabled {
display: none !important;
}
.message-tab {
position: relative;
height: 100%;
& > .mat-tab-header {
width: 100%;
.mat-tab-label {
min-width: 33%;
}
}
}*/

View File

@ -100,6 +100,7 @@
</div>
<div class="search-list">
<perfect-scrollbar class="album-scrollbar">
<div class="albumlist-content">
<div
*ngFor="let fileInfo of filteredList"
class="img-item"
@ -160,6 +161,7 @@
</dd>
</dl>
</div>
</div>
</perfect-scrollbar>
</div>
<div

View File

@ -115,30 +115,25 @@ $tablet-s-width: 768px;
}
}
::ng-deep .album-scrollbar {
.ps {
.ps-content {
display: flex;
flex-flow: wrap;
height: auto;
justify-content: stretch;
align-content: space-between;
width: 100%;
.albumlist-content {
display: flex;
flex-flow: wrap;
height: auto;
justify-content: stretch;
align-content: space-between;
width: 100%;
.img-item {
cursor: pointer;
margin-bottom: 10px;
position: relative;
width: 32%;
margin-right: 2%;
&:nth-child(3n + 0) {
margin-right: 0;
}
}
}
.img-item {
cursor: pointer;
margin-bottom: 10px;
position: relative;
width: 32%;
margin-right: 2%;
&:nth-child(3n + 0) {
margin-right: 0;
}
}
.preview-image,
.preview-video {
max-height: 140px;

View File

@ -148,6 +148,32 @@ $tablet-s-width: 768px;
font-size: 1em;
}
}
.footer-fix {
position: absolute;
bottom: 0;
min-height: 40px;
width: 100%;
flex-direction: column;
box-sizing: border-box;
display: flex;
border-top: 1px solid #dddddd;
.btn-box {
height: 50px;
padding-bottom: 10px;
width: 100%;
background-color: #ffffff;
button {
margin: 5px;
font-size: 0.9em;
padding: 0 12px;
}
}
.mat-paginator-page-size {
@media screen and (max-width: #{$tablet-s-width}), (max-height: 800px) {
display: none;
}
}
}
.mat-paginator-container {
display: flex;

View File

@ -95,27 +95,6 @@
}
}
/*::ng-deep .mat-paginator {
.mat-paginator-container {
justify-content: center;
}
.mat-paginator-navigation-first {
order: 1;
}
.mat-paginator-navigation-previous {
order: 2;
}
// override material paginator page switch
.mat-paginator-range-label {
order: 3;
}
.mat-paginator-navigation-next {
order: 4;
}
.mat-paginator-navigation-last {
order: 5;
}
}*/
.mat-form-field-appearance-legacy {
.mat-form-field-infix {
padding: 6px;

View File

@ -1,131 +1,3 @@
/*.clipboard-frame {
padding: 16px;
height: 100%;
min-width: 500px;
position: relative;
.mat-dialog-container {
position: relative;
}
.mat-card-header {
position: relative;
width: 100%;
border-bottom: 1px solid #dddddd;
margin-bottom: 12px;
.btn-dialog-close {
font-size: 20px;
display: flex;
margin-left: auto;
align-self: flex-start;
color: #444444;
}
}
.mat-card-content {
flex: 0 0 auto;
display: flex;
align-items: flex-start;
height: calc(100% - 100px);
border-bottom: 1px solid #dddddd;
.setting-tab {
position: relative;
width: 100%;
height: 100%;
.title-text {
padding-left: 5px;
}
.mat-tab-group {
flex-direction: row;
.mat-tab-header {
width: 160px;
.mat-tab-labels {
flex-direction: column;
.mat-tab-label {
padding: 0 10px;
align-content: flex-start;
text-align: left;
align-items: self-start;
justify-content: flex-start;
}
}
.mat-ink-bar {
display: none;
}
}
}
}
}
.button-farm {
text-align: right;
position: absolute;
width: 100%;
bottom: 10px;
.mat-primary {
margin-left: 4px;
}
}
}
::ng-deep .clipboard-tab {
.mat-tab-group {
position: relative;
height: 100%;
width: 100%;
.mat-tab-header {
width: 170px;
flex-flow: column;
border-right: 1px solid #dddddd;
.mat-tab-label-container {
.mat-tab-list {
.mat-tab-labels {
border-bottom: 0;
//padding-right: 10px;
.mat-tab-label {
padding: 0 10px;
}
}
}
}
}
.mat-tab-body-wrapper {
.mat-tab-body {
.mat-tab-body-conten {
position: relative;
width: 100%;
height: 100%;
.mat-list-base {
position: relative;
}
}
}
}
}
}
::ng-deep .setting-category {
.mat-list-base {
position: relative;
.mat-list-item {
font-size: 15px;
.mat-tab-header {
border-right: none;
}
}
.mat-divider {
//margin-top: 10px;
}
.mat-subheader {
font-weight: 600;
}
}
}
*/
.clipboard-frame {
padding: 16px;
height: 100%;

View File

@ -156,7 +156,7 @@
}
}
:ng-deep .dialog-creat-chat {
/*:ng-deep .dialog-creat-chat {
& > .mat-tab-body-wrapper {
.mat-tab-body {
height: 380px;
@ -170,8 +170,4 @@
}
}
}
/*::ng-deep .ps-content {
.cdk-virtual-scroll-viewport {
height: 100%;
}
}*/
*/

View File

@ -16,6 +16,7 @@
<mat-icon>add</mat-icon>
<span class="mat-fab__label">{{ 'group.addNew' | translate }}</span>
</button>
<div *ngIf="isShowAddGroupField" class="input-groupname-box">
<form name="inputForm" [formGroup]="inputForm" novalidate>
<mat-form-field
@ -33,7 +34,6 @@
value=""
formControlName="groupName"
/>
<button
mat-button
matSuffix
@ -43,10 +43,22 @@
>
<mat-icon>close</mat-icon>
</button>
<mat-hint align="end"
>{{ inputGroupName.value?.length || 0 }}/20</mat-hint
>
<mat-error
*ngIf="inputForm.get('groupName').hasError('groupNameBanned')"
>
{{
'group.errors.bannedWords'
| translate: { bannedWords: bannedWords.join(',') }
}}
</mat-error>
<mat-error
*ngIf="inputForm.get('groupName').hasError('groupNameSamed')"
>
{{ 'group.errors.sameNameExist' | translate }}
</mat-error>
</mat-form-field>
</form>

View File

@ -33,6 +33,7 @@
width: 40px;
height: 40px;
line-height: 40px;
margin-top: -8px;
}
.mat-fab__label {
color: #212121;
@ -71,7 +72,3 @@
}
}
}
::ng-deep .mat-mini-fab .mat-button-wrapper {
padding: 0;
}

View File

@ -5,7 +5,7 @@ import {
MatSelectionList,
MatSelectionListChange
} from '@angular/material';
import { Observable, combineLatest } from 'rxjs';
import { Observable, combineLatest, Subscription } from 'rxjs';
import { Store, select } from '@ngrx/store';
import { map, take } from 'rxjs/operators';
@ -20,8 +20,14 @@ import {
} from '@ucap-webmessenger/ui';
import { GroupDetailData, UserInfo } from '@ucap-webmessenger/protocol-sync';
import { environment } from '../../../../../environments/environment';
import { TranslateService } from '@ngx-translate/core';
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
import { TranslateService, TranslateParser } from '@ngx-translate/core';
import {
FormGroup,
FormBuilder,
Validators,
ValidatorFn,
AbstractControl
} from '@angular/forms';
import { StringUtil } from '@ucap-webmessenger/core';
export interface SelectGroupDialogData {
@ -43,6 +49,10 @@ export class SelectGroupDialogComponent implements OnInit {
groupName: string;
inputForm: FormGroup;
bannedWords: string[] = [];
groupListSubscription: Subscription;
groupList: GroupDetailData[];
constructor(
public dialogRef: MatDialogRef<
SelectGroupDialogData,
@ -52,8 +62,34 @@ export class SelectGroupDialogComponent implements OnInit {
private store: Store<any>,
private dialogService: DialogService,
private translateService: TranslateService,
private translateParser: TranslateParser,
private formBuilder: FormBuilder
) {}
) {
const banKeys: string[] = [
'group.nameFavorite',
'group.nameMyDept',
'group.nameDefault'
];
const langs = ['ko', 'en'];
langs.forEach(lang => {
this.translateService
.getTranslation(lang)
.pipe(take(1))
.subscribe(
translation => {
banKeys.forEach(banKey => {
this.bannedWords.push(
this.translateParser.getValue(translation, banKey)
);
});
},
error => {},
() => {}
);
});
}
@ViewChild('groups', { static: true }) groups: MatSelectionList;
groupBuddyList$: Observable<
@ -64,7 +100,15 @@ export class SelectGroupDialogComponent implements OnInit {
ngOnInit(): void {
this.inputForm = this.formBuilder.group({
groupName: ['', [Validators.required, StringUtil.checkSpecialCharacter()]]
groupName: [
'',
[
Validators.required,
StringUtil.checkSpecialCharacter(),
this.checkBanWords(),
this.checkSameName()
]
]
});
this.groups.selectionChange.subscribe((s: MatSelectionListChange) => {
@ -82,6 +126,8 @@ export class SelectGroupDialogComponent implements OnInit {
)
]).pipe(
map(([buddyList, groupList]) => {
this.groupList = groupList;
// sort..
if (!!groupList && groupList.length > 0) {
const tempOrderArr: GroupDetailData[] = [];
@ -214,4 +260,31 @@ export class SelectGroupDialogComponent implements OnInit {
}
return false;
}
checkBanWords(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
if (!control || !control.value) {
return null;
}
const ban =
-1 < this.bannedWords.indexOf((control.value as string).trim());
return ban ? { groupNameBanned: { value: control.value } } : null;
};
}
checkSameName(): ValidatorFn {
return (control: AbstractControl): { [key: string]: any } | null => {
if (
!control ||
!control.value ||
!this.groupList ||
0 === this.groupList.length
) {
return null;
}
const v = (control.value as string).trim();
const ban = -1 < this.groupList.findIndex(g => g.name === v);
return ban ? { groupNameSamed: { value: control.value } } : null;
};
}
}

View File

@ -23,10 +23,6 @@
}
}
::ng-deep .mat-mini-fab .mat-button-wrapper {
padding: 0;
}
.contents {
height: 380px;
.message-contents {
@ -46,7 +42,7 @@
}
}
::ng-deep .message-container {
.message-container {
background-color: #ffffff !important;
.message-info {
/*.profile {

View File

@ -151,7 +151,9 @@ export class IntegratedSearchDialogComponent implements OnInit, OnDestroy {
const response = res as DeptUserResponse;
// 검색 결과 처리.
this.searchUserInfos = searchUserInfos;
this.searchUserInfos = searchUserInfos.sort((a, b) =>
a.name < b.name ? -1 : a.name > b.name ? 1 : 0
);
this.totalCount = response.pageTotalCount;
this.pageCurrent = response.pageCurrent;

View File

@ -68,6 +68,9 @@
text-align: left;
align-items: center;
justify-content: flex-start;
&.mat-tab-label-active {
opacity: 1;
}
}
}
.mat-ink-bar {
@ -80,57 +83,3 @@
border-left: 1px solid #dddddd;
}
}
/*::ng-deep .setting-tab {
.mat-tab-group {
.mat-tab-header {
width: 160px;
flex-flow: column;
flex: 0 0 auto;
border-right: 1px solid #dddddd;
.mat-tab-label-container {
.mat-tab-list {
.mat-tab-labels {
border-bottom: 0;
//padding-right: 10px;
.mat-tab-label {
padding: 0 10px;
}
}
}
}
}
.mat-tab-body-wrapper {
.mat-tab-body {
.mat-tab-body-conten {
position: relative;
width: 100%;
height: 100%;
.mat-list-base {
position: relative;
}
}
}
}
}
}
::ng-deep .setting-category {
.mat-list-base {
position: relative;
.mat-list-item {
font-size: 15px;
.mat-tab-header {
border-right: none;
}
}
.mat-divider {
//margin-top: 10px;
}
.mat-subheader {
font-weight: 600;
}
}
}
*/

View File

@ -6,6 +6,7 @@
<div class="btn-area">
<ucap-integrated-search-form
*ngIf="!!loginRes"
[searchWord]="integratedSearchWord"
(search)="onIntegratedSearch($event)"
class="input-lineless integrated-search"
>

View File

@ -42,6 +42,7 @@
height: 100%;
display: inline-flex;
align-items: center;
margin-right: 10px;
}
.app-layout-native-title-bar-link {
@ -54,7 +55,7 @@
overflow: hidden;
white-space: nowrap;
align-items: center;
height:100%;
height: 100%;
.button {
-webkit-app-region: no-drag;
outline: 0;

View File

@ -125,6 +125,8 @@ export class TopBarComponent implements OnInit, OnDestroy {
@ViewChild('profileMenu', { static: true })
profileMenu: MatMenu;
integratedSearchWord = '';
constructor(
private store: Store<any>,
@Inject(UCAP_NATIVE_SERVICE) private nativeService: NativeService,
@ -570,19 +572,24 @@ export class TopBarComponent implements OnInit, OnDestroy {
);
}
onIntegratedSearch(keyword: string) {
async onIntegratedSearch(keyword: string) {
if (!keyword || keyword.trim().length === 0) {
return;
}
this.dialogService.open<
this.integratedSearchWord = keyword;
const result = await this.dialogService.open<
IntegratedSearchDialogComponent,
IntegratedSearchDialogData,
IntegratedSearchDialogResult
>(IntegratedSearchDialogComponent, {
data: {
keyword
}
},
restoreFocus: false
});
this.integratedSearchWord = '';
}
}

View File

@ -82,7 +82,7 @@ export const reducer = createReducer(
// tslint:disable-next-line: forin
for (const key in state.room.entities) {
const value = state.room.entities[key];
unReadCount += value.noReadCnt;
unReadCount += isNaN(value.noReadCnt) ? 0 : value.noReadCnt;
}
action.roomList.map(item => (unReadCount += item.noReadCnt));
@ -304,7 +304,7 @@ export const reducer = createReducer(
for (const key in state.room.entities) {
if (key !== action.roomSeq) {
const value = state.room.entities[key];
unReadCount += value.noReadCnt;
unReadCount += isNaN(value.noReadCnt) ? 0 : value.noReadCnt;
}
}
} else {

View File

@ -89,7 +89,7 @@ export const decodeInfoData: ProtocolDecoder<InfoData> = (
finalEventMessage: info[4],
finalEventDate: info[5],
joinUserCount: Number(info[6]),
noReadCnt: Number(info[7]),
noReadCnt: isNaN(info[7]) ? 0 : Number(info[7]),
receiveAlarm: info[8] !== 'N' ? true : false,
isJoinRoom: info[9] === 'Y' ? true : false,
expiredFileStdSeq: Number(info[10]),

View File

@ -83,7 +83,7 @@ export const decodeRoomData: ProtocolDecoder<RoomData> = (
finalEventMessage: info[4],
finalEventDate: info[5],
joinUserCount: Number(info[6]),
noReadCnt: Number(info[7]),
noReadCnt: isNaN(info[7]) ? 0 : Number(info[7]),
receiveAlarm: info[8] !== 'N' ? true : false,
isJoinRoom: info[9] === 'Y' ? true : false,
expiredFileStdSeq: Number(info[10]),

View File

@ -27,7 +27,6 @@
(click)="onClickStickerSelector()"
matTooltip="{{ 'chat.btnSticker' | translate }}"
>
<!--<mat-icon>sentiment_satisfied_alt</mat-icon>-->
<i class="mid mdi-emoticon-happy-outline"></i>
</button>
@ -37,16 +36,6 @@
(click)="onClickTranslation()"
matTooltip="{{ 'chat.btnTranslate' | translate }}"
>
<!--<mat-icon>g_translate</mat-icon>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
>
<path
d="M7.41 9l2.24 2.24-.83 2L6 10.4l-3.3 3.3-1.4-1.42L4.58 9l-.88-.88c-.53-.53-1-1.3-1.3-2.12h2.2c.15.28.33.53.51.7l.89.9.88-.88C7.48 6.1 8 4.84 8 4H0V2h5V0h2v2h5v2h-2c0 1.37-.74 3.15-1.7 4.12L7.4 9zm3.84 8L10 20H8l5-12h2l5 12h-2l-1.25-3h-5.5zm.83-2h3.84L14 10.4 12.08 15z"
/>
</svg>-->
<svg
id="레이어_1"
data-name="레이어 1"
@ -112,24 +101,12 @@
</mat-form-field>
<button
class="send-message-button bg-accent-darkest"
class="send-message-button icon-button bg-accent-darkest"
mat-icon-button
type="submit"
aria-label="Send message"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="20"
height="20"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="butt"
stroke-linejoin="round"
>
<path d="M12 19V6M5 12l7-7 7 7" />
</svg>
<i class="mid mid-30 mdi-arrow-up"></i>
</button>
</form>
</div>

View File

@ -57,23 +57,19 @@ textarea[name='message'] {
padding-top: 0;
}
::ng-deep .send-message-button {
.send-message-button {
margin-left: 20px;
line-height: unset;
@media screen and (max-width: #{$tablet-l-width}), (max-height: 800px) {
margin-left: 6px;
}
.mat-button-wrapper {
display: flex;
justify-content: center;
justify-items: center;
}
i {
display: inline-block;
width: 40px;
height: 40px;
border-radius: 50%;
line-height: 40px;
font-size: 20px;
font-size: 24px;
color: #ffffff;
&:hover {
opacity: 0.8;

View File

@ -178,6 +178,13 @@ export class MessagesComponent implements OnInit, OnDestroy {
this.loginRes = loginRes;
});
this.roomInfoSubscription = this.roomInfo$.subscribe(roomInfo => {
if (
!this.roomInfo ||
(!!this.roomInfo && this.roomInfo.roomSeq !== roomInfo.roomSeq)
) {
this.baseEventSeq = 0;
}
this.roomInfo = roomInfo;
this.showMore = false;
@ -196,7 +203,6 @@ export class MessagesComponent implements OnInit, OnDestroy {
!this.roomInfo ||
(!!this.roomInfo && this.roomInfo.roomSeq !== roomInfo.roomSeq)
) {
this.baseEventSeq = 0;
this.initEventMore();
}
});

View File

@ -49,14 +49,24 @@
</span>
</dt>
<dd>
<mat-icon
<span
*ngIf="!!message.resType && message.resType === ContentType.Image"
class="icon-img"
><i class="mid mid-18 mdi-image-outline"></i
></span>
<span
*ngIf="!!message.resType && message.resType === ContentType.AttachFile"
class="icon-img"
><i class="mid mid-18 mdi-floppy"></i
></span>
<!--<mat-icon
*ngIf="!!message.resType && message.resType === ContentType.Image"
>image</mat-icon
>
<mat-icon
*ngIf="!!message.resType && message.resType === ContentType.AttachFile"
>attach_file</mat-icon
>
>-->
<span class="final-message">{{ message.title }}</span>
</dd>
</dl>

View File

@ -26,8 +26,8 @@
width: 100%;
position: relative;
justify-items: center;
.mat-icon{
font-size:18px;
.icon-img {
margin-right: 6px;
}
.final-message {
white-space: nowrap;

View File

@ -91,7 +91,7 @@
}
}
::ng-deep .ucap-message-write {
.ucap-message-write {
padding: 0;
.add-row {
display: flex;
@ -100,19 +100,18 @@
margin-bottom: 10px;
border-bottom: 1px solid #dddddd;
.mat-mini-fab {
.mat-button-wrapper {
padding: 0;
.mat-icon {
width: 40px;
height: 40px;
line-height: 40px;
}
.mat-fab__label {
color: #212121;
margin-left: 10px;
}
.mat-icon {
width: 40px;
height: 40px;
line-height: 40px;
margin-top: -8px;
}
.mat-fab__label {
color: #212121;
margin-left: 10px;
}
}
.receiver-sum {
margin-left: auto;
}

View File

@ -1,47 +1,3 @@
/*::ng-deep .mat-list-base {
.theme-select.mat-list-item {
position: relative;
height: 160px;
.mat-list-item-content {
flex-direction: column;
}
}
}
::ng-deep .theme-list {
position: relative;
display: flex;
flex-flow: row;
width: 100%;
margin: 10px;
height: auto !important;
.mat-tab-header {
position: relative;
width: 100% !important;
.mat-tab-labels {
position: relative;
width: 100%;
flex-flow: row !important;
.mat-tab-label {
width: 140px;
height: 120px;
.mat-tab-label-content {
position: relative;
flex-flow: column;
width: 100%;
}
}
}
.mat-ink-bar {
display: none;
}
}
.mat-tab-body-wrapper {
border-left: none;
}
}
*/
.mat-list-item {
margin-bottom: 10px;
}
@ -77,6 +33,9 @@
.mat-tab-label {
width: 140px;
height: 120px;
&.mat-tab-label-active {
opacity: 1;
}
.mat-tab-label-content {
position: relative;
flex-flow: column;

View File

@ -54,6 +54,12 @@ mat-icon {
height: 24px;
line-height: 24px;
}
&-30 {
font-size: 30px;
width: 30px;
height: 30px;
line-height: 30px;
}
}
&:before {
display: inline-block;
@ -69,3 +75,6 @@ mat-icon {
opacity: 0.7;
}
}
.circle-button {
border-radius: 50%;
}

View File

@ -3,11 +3,19 @@
display: flex;
flex-flow: row;
align-items: center;
width: 250px;
max-width: 250px;
width: 240px;
max-width: 240px;
color: #ffffff;
font-size: 0.9em;
font-size: 0.88rem;
color: #2d3a4a;
background-color: #ffffff;
padding: 4px 10px;
border-radius: 3px;
.icon-img {
flex: 0 0 auto;
}
.mat-form-field {
font-size: 0.88rem;
color: #333333;
}
}

View File

@ -21,6 +21,7 @@ $tablet-s-width: 768px;
}
}
}
.sticker-item-box {
flex-wrap: wrap;
padding: 10px 20px 0;