qms-angular 1.1.23 → 1.1.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,4 +13,5 @@ export declare class QMSFlatNodeTree {
13
13
  itemMatIcon?: string;
14
14
  isGroup?: boolean;
15
15
  groupId?: string;
16
+ isLoading?: boolean;
16
17
  }
@@ -14,6 +14,7 @@ export interface QMSTreeNode {
14
14
  tooltip?: string;
15
15
  isGroup?: boolean;
16
16
  groupId?: string;
17
+ expandable?: boolean;
17
18
  }
18
19
  export declare class QMSTreeModel implements QMSTreeNode {
19
20
  id: string;
@@ -19,8 +19,12 @@ export declare class SelectDepartmentComponent implements OnInit, OnDestroy, Aft
19
19
  popupData: SelectDepartmentPopupData;
20
20
  resultSelected: QMSTreeNode[];
21
21
  onSearchEvent: EventEmitter<string>;
22
+ onCheckNodeEvent: EventEmitter<QMSFlatNodeTree>;
23
+ onExpandNodeEvent: EventEmitter<QMSFlatNodeTree>;
24
+ onLoadMoreEvent: EventEmitter<void>;
22
25
  resultSearch: QMSFlatNodeTree[];
23
26
  isActiveViewSearch: boolean;
27
+ get isIncludeChild(): boolean;
24
28
  constructor(cdRef: ChangeDetectorRef, dialogRef: MatDialogRef<SelectDepartmentComponent>, data: SelectDepartmentPopupData, trans: TranslateLibraryService);
25
29
  ngAfterViewInit(): void;
26
30
  onCloseDialog(): void;
@@ -34,4 +38,19 @@ export declare class SelectDepartmentComponent implements OnInit, OnDestroy, Aft
34
38
  generateTootip(node: QMSTreeNode): string;
35
39
  updateResultSearch(data: QMSDepartmentPagingModel<QMSFlatNodeTree>): void;
36
40
  private formatString;
41
+ /**
42
+ * This function use for lazy load children of node
43
+ * @param node node update. if node is null data auto insert as roots
44
+ * @param data list children to update node.
45
+ * @param mode default is update that replace current list children by new list children , if mode = 'insert' will insert new value to list children existed before.
46
+ */
47
+ updateChildOfNode(node: QMSFlatNodeTree, data: QMSTreeNode[], mode?: 'insert' | 'update'): void;
48
+ addRootTree(data?: QMSTreeNode[]): void;
49
+ /**
50
+ * This function handle check node of tree
51
+ * @param node node of tree
52
+ * @param callback do something before handle check node
53
+ * @returns
54
+ */
55
+ handleCheckNode(node: QMSFlatNodeTree, callback?: (node: QMSFlatNodeTree) => Promise<void>): void;
37
56
  }
@@ -19,5 +19,7 @@ export declare class QMSSelectDepartmentTreeConfig {
19
19
  };
20
20
  activeSelectAllNode: boolean;
21
21
  modeView: ModeDepartmentTreeeViewEnum;
22
+ isMobile: boolean;
23
+ lazy: boolean;
22
24
  constructor();
23
25
  }
@@ -1,6 +1,8 @@
1
1
  import { SelectionModel } from '@angular/cdk/collections';
2
+ import { Overlay } from '@angular/cdk/overlay';
3
+ import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
2
4
  import { FlatTreeControl } from '@angular/cdk/tree';
3
- import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnInit } from '@angular/core';
5
+ import { AfterContentInit, AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnInit, ViewContainerRef } from '@angular/core';
4
6
  import { FormControl } from '@angular/forms';
5
7
  import { MatIconRegistry } from '@angular/material/icon';
6
8
  import { PageEvent } from '@angular/material/paginator';
@@ -27,7 +29,10 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
27
29
  private eleRef;
28
30
  trans: TranslateLibraryService;
29
31
  private treeDepartmentGlobalService;
32
+ overlay: Overlay;
33
+ viewContainerRef: ViewContainerRef;
30
34
  LANG: any;
35
+ spinnerArr: any[];
31
36
  arrSkeleton: any[];
32
37
  set rowsSkeleton(value: number);
33
38
  height: string;
@@ -38,18 +43,22 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
38
43
  get isIndeterminateCheckboxAllTree(): boolean;
39
44
  onSearchEvent: EventEmitter<string>;
40
45
  onPagingSearchEvent: EventEmitter<PageEvent>;
46
+ onValueChangeEvent: EventEmitter<QMSTreeNode[]>;
47
+ selectionNodeChangeEvent: EventEmitter<ISelectionNodeChange<QMSTreeNode>>;
48
+ onCheckNodeEvent: EventEmitter<QMSFlatNodeTree>;
49
+ onExpandNodeEvent: EventEmitter<QMSFlatNodeTree>;
50
+ onLoadMoreEvent: EventEmitter<void>;
51
+ cdkVirtualScrollViewport: CdkVirtualScrollViewport;
52
+ paginatorSearch: QMSPaginatorComponent;
41
53
  MODE_VIEW_ENUM: typeof ModeDepartmentTreeeViewEnum;
54
+ ITEM_SIZE: number;
42
55
  ngUnsubscribe: Subject<void>;
43
- isLoaded: boolean;
44
56
  resultSearchSelected: QMSTreeNode[];
45
57
  resultSelected: QMSTreeNode[];
46
- get currentTreeData(): QMSTreeNode[];
47
58
  getDataTree$: BehaviorSubject<QMSTreeNode[]>;
48
- onValueChangeEvent: EventEmitter<QMSTreeNode[]>;
49
- selectionNodeChangeEvent: EventEmitter<ISelectionNodeChange<QMSTreeNode>>;
50
59
  searchDepartment$: BehaviorSubject<QMSDepartmentPagingModel<QMSFlatNodeTree>>;
51
- paginatorSearch: QMSPaginatorComponent;
52
60
  resultSearch: DepartmentSearchResultModel[];
61
+ get currentTreeData(): QMSTreeNode[];
53
62
  get isSelectAllResultSearch(): boolean;
54
63
  get indeterminateSearchResult(): boolean;
55
64
  indexView: number;
@@ -68,6 +77,8 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
68
77
  dataSourceTreeSearch: MatTreeFlatDataSource<QMSTreeNode, QMSFlatNodeTree>;
69
78
  formSearchControl: FormControl;
70
79
  getLoading$: BehaviorSubject<boolean>;
80
+ getLoadingMore$: BehaviorSubject<boolean>;
81
+ afterOnCheckNode: Subject<QMSFlatNodeTree>;
71
82
  textResultSearch: string;
72
83
  itemIconType: typeof ItemIconType;
73
84
  _transformer: (node: QMSTreeNode, level: number) => QMSFlatNodeTree;
@@ -75,12 +86,13 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
75
86
  private _getChild;
76
87
  private isExpandable;
77
88
  hasChild: (_: number, node: QMSFlatNodeTree) => boolean;
78
- constructor(cdRef: ChangeDetectorRef, domSanitizer: DomSanitizer, appIconService: QMSIconRegistryService, iconRegistry: MatIconRegistry, eleRef: ElementRef, trans: TranslateLibraryService, treeDepartmentGlobalService: QMSSelectDepartmentTreeGlobalService);
89
+ constructor(cdRef: ChangeDetectorRef, domSanitizer: DomSanitizer, appIconService: QMSIconRegistryService, iconRegistry: MatIconRegistry, eleRef: ElementRef, trans: TranslateLibraryService, treeDepartmentGlobalService: QMSSelectDepartmentTreeGlobalService, overlay: Overlay, viewContainerRef: ViewContainerRef);
79
90
  ngAfterContentInit(): void;
80
91
  ngAfterViewInit(): void;
81
92
  ngOnInit(): void;
82
93
  ngOnDestroy(): void;
83
94
  private _initTreeData;
95
+ _convertToTreeData(data: QMSTreeNode[]): QMSTreeNode[];
84
96
  private _initCheckListSelected;
85
97
  private _handleItemSelectionChanged;
86
98
  private _onSelectionNodeChangeEvent;
@@ -96,7 +108,13 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
96
108
  onRemoveNode(nodeId: string): void;
97
109
  isIndeterminate(node: QMSFlatNodeTree): boolean;
98
110
  isCheckAll(node: QMSFlatNodeTree): boolean;
99
- private _handleCheckNode;
111
+ /**
112
+ * This function handle check node of tree
113
+ * @param node node of tree
114
+ * @param callback do something before handle check node
115
+ * @returns
116
+ */
117
+ handleCheckNode(node: QMSFlatNodeTree, callback?: (node: QMSFlatNodeTree) => Promise<void>): Promise<void>;
100
118
  private resetNode;
101
119
  isSelectedNode(node: QMSFlatNodeTree): boolean;
102
120
  getChildrenSelected(node: QMSFlatNodeTree): QMSFlatNodeTree[];
@@ -125,4 +143,13 @@ export declare class SelectDepartmentTreeComponent implements OnInit, AfterViewI
125
143
  getHeightStyleRefNode(nodeId: string): string;
126
144
  private getSelectedNodeStorage;
127
145
  private setSelectedNodeStorage;
146
+ trackBy(index: number, item: QMSFlatNodeTree): QMSFlatNodeTree;
147
+ /**
148
+ * This function use for lazy load children of node
149
+ * @param node node update. if node is null data auto insert as roots
150
+ * @param data list children to update node.
151
+ * @param mode default is update that replace current list children by new list children , if mode = 'insert' will insert new value to list children existed before.
152
+ */
153
+ updateChildOfNode(node: QMSFlatNodeTree, data?: QMSTreeNode[], mode?: 'insert' | 'update'): void;
154
+ addRootTree(data?: QMSTreeNode[]): void;
128
155
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qms-angular",
3
- "version": "1.1.23",
3
+ "version": "1.1.25",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },
@@ -137,17 +137,24 @@
137
137
 
138
138
 
139
139
  span.related__item__content_name {
140
- display: inline-block;
141
140
  min-width: calc(100% - 13px);
142
- white-space: nowrap;
143
- overflow: hidden;
144
- text-overflow: ellipsis;
145
- max-width: 220px;
141
+ max-width: 250px;
142
+ display: flex;
143
+ align-items: center;
144
+ & > span:nth-child(1){
145
+ display: inline-block;
146
+ margin-right: 4px;
147
+ white-space: nowrap;
148
+ overflow: hidden;
149
+ text-overflow: ellipsis;
150
+ max-width: 200px;
151
+ }
146
152
 
147
153
  .select__include-children__count {
148
154
  font-size: 0.75rem;
149
155
  color: black(0.5);
150
156
  font-weight: 600;
157
+ line-height: 16px;
151
158
  }
152
159
  }
153
160
  }
@@ -201,3 +208,16 @@
201
208
  color: unset !important;
202
209
  }
203
210
  }
211
+
212
+ @media screen and (max-width: 600px) {
213
+ ::ng-deep .cdk-global-overlay-wrapper{
214
+ justify-content: center !important;
215
+ width: 100vw;
216
+ }
217
+ .header-title{
218
+ font-size: 14px;
219
+ }
220
+ .related__item__content_name{
221
+ font-size: 12px !important;
222
+ }
223
+ }
@@ -3,7 +3,6 @@
3
3
  @import "../../../themes/theme/mixins";
4
4
  @import "../../../themes/qms-icon-font";
5
5
 
6
-
7
6
  .qms-select-department-tree-container {
8
7
  .mr10 {
9
8
  margin-right: 10px;
@@ -85,6 +84,8 @@
85
84
  font-weight: 500;
86
85
  color: theme-apply($ws-text-primary);
87
86
  font-size: 16px;
87
+ display: flex;
88
+ align-items: center;
88
89
  .header-view{
89
90
  padding: 4px 0;
90
91
  }
@@ -106,12 +107,10 @@
106
107
  }
107
108
 
108
109
  .tree-department-wrapper {
109
- height: 375px;
110
110
  padding-right: 4px;
111
- overflow-y: auto;
112
- overflow-x: hidden;
111
+ overflow: hidden;
113
112
  position: relative;
114
- transition: height .1s ease-in-out;
113
+ transition: height .3s ease-in-out;
115
114
  .tree-view{
116
115
  &.active-mode-external-view{
117
116
  width: 100%;
@@ -142,7 +141,7 @@
142
141
  .external-list-item-container{
143
142
  .node-external{
144
143
  overflow: hidden;
145
- transition: .1s ease-in-out;
144
+ transition: all .1s ease-in-out;
146
145
  .node-external-content {
147
146
  padding: 5px 15px 5px 15px;
148
147
  height: calc(100% - 2px);
@@ -163,104 +162,131 @@
163
162
  }
164
163
  }
165
164
 
166
- // Tree
167
- .mat-tree.select-department-tree {
165
+ .mask-overlay{
166
+ z-index: 1000;
167
+ background-color: rgba(0,0,0,0.1);
168
+ position: absolute;
169
+ top: 0;
170
+ left: 0;
171
+ width: 100%;
168
172
  height: 100%;
169
- &.has-checkbox-all{
170
- max-height: calc(100% - 47px);
171
- overflow-y: auto;
172
- }
173
- .mat-tree-node {
174
- border-radius: 4px;
175
- &:hover {
176
- background: black(0.08);
177
- }
178
-
179
- &:active {
180
- background: black(0.12);
181
- }
182
-
183
- &.active {
184
- color: theme-apply($primary);
185
- background: theme-apply($primary-light-6-opacity);
186
-
187
- &:active {
188
- background: theme-apply($primary-light-12-opacity);
173
+ border-radius: 4px;
174
+ overflow: hidden;
175
+ display: grid;
176
+ place-items: center;
177
+ &> .qms-load-more-row {
178
+ // height: 0;
179
+ line-height: 35px;
180
+ text-align: center;
181
+ display: flex;
182
+ justify-content: center;
183
+ align-items: center;
184
+ gap: 4px;
185
+ transform: translateY(-15px);
186
+ span {
187
+ display: inline-block;
188
+ width: 10px;
189
+ height: 10px;
190
+ background: theme-apply($primary-light-12-opacity);
191
+ border-radius: 50px;
192
+ animation: up-down-animate 0.5s ease-in-out infinite alternate;
193
+ &:nth-child(2) {
194
+ background: theme-apply($primary-light-24-opacity);
195
+ animation-delay: 0.16s;
189
196
  }
190
-
191
- button,
192
- .mat-icon-rtl-mirror,
193
- .type-icon,
194
- .text-name {
195
- color: theme-apply($primary);
197
+ &:nth-child(3) {
198
+ background: theme-apply($primary-light-32-opacity);
199
+ animation-delay: 0.32s;
196
200
  }
197
- }
198
- }
199
-
200
- .mat-tree-node.collapse-node:not(.selected-theme) {
201
- &.active {
202
- button,
203
- .mat-icon-rtl-mirror,
204
- .type-icon,
205
- .text-name {
206
- color: theme-apply($primary);
201
+ &:nth-child(4) {
202
+ background: theme-apply($primary-light-38-opacity);
203
+ animation-delay: 0.48s;
207
204
  }
208
-
209
- &:hover {
210
- background: theme-apply($primary-light-6-opacity);
205
+ }
206
+ @keyframes up-down-animate {
207
+ 0% {
208
+ transform: translateY(-8px);
211
209
  }
212
210
 
213
- &:active {
214
- background: theme-apply($primary-light-12-opacity);
211
+ 100% {
212
+ transform: translateY(8px);
215
213
  }
216
214
  }
217
215
  }
218
-
219
- .mat-tree-node.selected-theme{
220
- background: theme-apply($primary-light-12-opacity);
216
+ }
217
+ //Custom tree
218
+ .select-department-tree{
219
+ & > .cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{
220
+ padding: 0 4px !important;
221
221
  }
222
-
223
- .mat-tree-node.expand-node {
224
- color: theme-apply($primary);
225
-
226
- button,
227
- .mat-icon-rtl-mirror,
228
- .type-icon,
229
- .text-name {
230
- color: theme-apply($primary);
222
+ .qms-tree-node{
223
+ display: flex;
224
+ align-items: center;
225
+ border-radius: 4px;
226
+ &:hover{
227
+ background-color: rgba(0,0,0,.08);
231
228
  }
232
-
233
- &:hover {
229
+ &> .node-expand-area{
230
+ width: 48px;
231
+ height: 48px;
232
+ position: relative;
233
+ }
234
+ &.active-external-view{
235
+ .mat-checkbox.qms-group-options{
236
+ width: calc(100% - 250px) ;
237
+ }
238
+ }
239
+ &.node-loading{
234
240
  background: theme-apply($primary-light-6-opacity);
235
241
  }
242
+ &> .external-view-node{
243
+ flex-basis: 200px;
244
+ overflow: hidden;
245
+ .node-external{
246
+ overflow: hidden;
247
+ transition: all .1s ease-in-out;
248
+ display: block;
249
+ .node-external-content {
250
+ padding: 5px 15px 5px 15px;
251
+ height: calc(100% - 2px);
252
+ color: theme-apply($default-color);
253
+ font-size: 14px;
254
+ display: flex;
255
+ align-items: center;
256
+ span{
257
+ overflow: hidden;
258
+ text-overflow: ellipsis;
259
+ white-space: nowrap;
260
+ }
261
+ }
262
+ }
263
+ }
264
+ &.expand-node {
265
+ color: theme-apply($primary);
266
+ &:hover {
267
+ background: theme-apply($primary-light-6-opacity);
268
+ }
236
269
 
237
- &:active {
270
+ &:active {
271
+ background: theme-apply($primary-light-12-opacity);
272
+ }
273
+ }
274
+ .node-without-checkbox{
275
+ cursor: pointer;
276
+ width: 100%;
277
+ display: flex;
278
+ justify-content: space-between;
279
+ align-items: center;
280
+ .mat-icon{
281
+ color: theme-apply($primary);
282
+ margin-right: 4px;
283
+ }
284
+ }
285
+ &.selected-theme{
238
286
  background: theme-apply($primary-light-12-opacity);
239
287
  }
240
- }
241
-
242
- .type-icon {
243
- margin-right: 5px;
244
- color: theme-apply($ws-action-active);
245
- }
246
-
247
- .text-name {
248
- color: theme-apply($default-color);
249
- }
250
288
 
251
- .mat-icon-rtl-mirror {
252
- color: black(0.6);
253
- }
254
-
255
- .mat-icon-button.btn-toggle {
256
- width: 35px;
257
- height: 35px;
258
- line-height: 35px;
259
- }
260
-
261
-
262
- .mat-tree-node {
263
- &.mat-tree-node-disabled-all {
289
+ &.mat-tree-node-disabled-all {
264
290
  cursor: default !important;
265
291
  pointer-events: none;
266
292
  user-select: none;
@@ -284,66 +310,8 @@
284
310
  background-color: transparent;
285
311
  }
286
312
  }
287
-
288
- &.mat-tree-node-disabled {
289
-
290
- button.mat-button-disabled,
291
- .type-icon {
292
- color: black(0.38);
293
- }
294
-
295
- .text-name {
296
- &.disabled {
297
- color: black(0.38);
298
- cursor: default !important;
299
- pointer-events: none;
300
- user-select: none;
301
- }
302
- }
303
-
304
- &.active,
305
- &:hover,
306
- &:active,
307
- &.expand-node:hover,
308
- &.expand-node:active {
309
- background-color: transparent;
310
- }
311
- }
312
-
313
- .node-without-checkbox{
314
- cursor: pointer;
315
- width: 100%;
316
- display: flex;
317
- justify-content: space-between;
318
- align-items: center;
319
- .mat-icon{
320
- color: theme-apply($primary);
321
- margin-right: 4px;
322
- }
323
- }
324
-
325
- &>.node-content-wraper {
326
- width: fit-content;
327
- position: relative;
328
- display: flex;
329
- justify-content: center;
330
- align-items: center;
331
-
332
- &>.mat-progress-bar {
333
- height: 3px;
334
- width: 100%;
335
- position: absolute;
336
- bottom: 0;
337
- left: 10px;
338
-
339
- .mat-progress-bar-fill::after {
340
- background: theme-apply($primary);
341
- }
342
- }
343
- }
344
313
  }
345
314
  }
346
-
347
315
  .text-name {
348
316
  position: relative;
349
317
  overflow: hidden;
@@ -377,7 +345,6 @@
377
345
  }
378
346
 
379
347
  .qms-view-search-result{
380
- height: 100%;
381
348
  width: 100%;
382
349
  overflow: hidden;
383
350
  .result {
@@ -556,4 +523,160 @@
556
523
  }
557
524
  }
558
525
  }
526
+
527
+ .qms-spinner {
528
+ font-size: 20px;
529
+ position: relative;
530
+ display: inline-block;
531
+ width: 1em;
532
+ height: 1em;
533
+ &.center {
534
+ position: absolute;
535
+ left: 0;
536
+ right: 0;
537
+ top: 0;
538
+ bottom: 0;
539
+ margin: auto;
540
+ }
541
+ &> .qms-spinner-blade {
542
+ position: absolute;
543
+ left: 0.4629em;
544
+ bottom: 0;
545
+ width: 0.074em;
546
+ height: 0.2777em;
547
+ border-radius: 0.0555em;
548
+ background-color: transparent;
549
+ -webkit-transform-origin: center -0.2222em;
550
+ -ms-transform-origin: center -0.2222em;
551
+ transform-origin: center -0.2222em;
552
+ animation: spinner-animation 1s infinite linear;
553
+ &:nth-child(1) {
554
+ -webkit-animation-delay: 0s;
555
+ animation-delay: 0s;
556
+ -webkit-transform: rotate(0deg);
557
+ -ms-transform: rotate(0deg);
558
+ transform: rotate(0deg);
559
+ }
560
+ &:nth-child(2) {
561
+ -webkit-animation-delay: 0.083s;
562
+ animation-delay: 0.083s;
563
+ -webkit-transform: rotate(30deg);
564
+ -ms-transform: rotate(30deg);
565
+ transform: rotate(30deg);
566
+ }
567
+ &:nth-child(3) {
568
+ -webkit-animation-delay: 0.166s;
569
+ animation-delay: 0.166s;
570
+ -webkit-transform: rotate(60deg);
571
+ -ms-transform: rotate(60deg);
572
+ transform: rotate(60deg);
573
+ }
574
+ &:nth-child(4) {
575
+ -webkit-animation-delay: 0.249s;
576
+ animation-delay: 0.249s;
577
+ -webkit-transform: rotate(90deg);
578
+ -ms-transform: rotate(90deg);
579
+ transform: rotate(90deg);
580
+ }
581
+ &:nth-child(5) {
582
+ -webkit-animation-delay: 0.332s;
583
+ animation-delay: 0.332s;
584
+ -webkit-transform: rotate(120deg);
585
+ -ms-transform: rotate(120deg);
586
+ transform: rotate(120deg);
587
+ }
588
+ &:nth-child(6) {
589
+ -webkit-animation-delay: 0.415s;
590
+ animation-delay: 0.415s;
591
+ -webkit-transform: rotate(150deg);
592
+ -ms-transform: rotate(150deg);
593
+ transform: rotate(150deg);
594
+ }
595
+ &:nth-child(7) {
596
+ -webkit-animation-delay: 0.498s;
597
+ animation-delay: 0.498s;
598
+ -webkit-transform: rotate(180deg);
599
+ -ms-transform: rotate(180deg);
600
+ transform: rotate(180deg);
601
+ }
602
+ &:nth-child(8) {
603
+ -webkit-animation-delay: 0.581s;
604
+ animation-delay: 0.581s;
605
+ -webkit-transform: rotate(210deg);
606
+ -ms-transform: rotate(210deg);
607
+ transform: rotate(210deg);
608
+ }
609
+ &:nth-child(9) {
610
+ -webkit-animation-delay: 0.664s;
611
+ animation-delay: 0.664s;
612
+ -webkit-transform: rotate(240deg);
613
+ -ms-transform: rotate(240deg);
614
+ transform: rotate(240deg);
615
+ }
616
+ &:nth-child(10) {
617
+ -webkit-animation-delay: 0.747s;
618
+ animation-delay: 0.747s;
619
+ -webkit-transform: rotate(270deg);
620
+ -ms-transform: rotate(270deg);
621
+ transform: rotate(270deg);
622
+ }
623
+ &:nth-child(11) {
624
+ -webkit-animation-delay: 0.83s;
625
+ animation-delay: 0.83s;
626
+ -webkit-transform: rotate(300deg);
627
+ -ms-transform: rotate(300deg);
628
+ transform: rotate(300deg);
629
+ }
630
+ &:nth-child(12) {
631
+ -webkit-animation-delay: 0.913s;
632
+ animation-delay: 0.913s;
633
+ -webkit-transform: rotate(330deg);
634
+ -ms-transform: rotate(330deg);
635
+ transform: rotate(330deg);
636
+ }
637
+ @keyframes spinner-animation {
638
+ 0% {
639
+ background-color: theme-apply($primary-light-32-opacity);
640
+ }
641
+
642
+ 100% {
643
+ background-color: transparent;
644
+ }
645
+ }
646
+ }
647
+ }
648
+ // Responsive
649
+ @media screen and (max-width: 600px) {
650
+ .external-view-node {
651
+ flex-basis: 65px !important;
652
+ }
653
+
654
+ .qms-tree-node.active-external-view .mat-checkbox.qms-group-options {
655
+ width: calc(100% - 110px)!important ;
656
+ }
657
+
658
+ .header-view-tree {
659
+ grid-template-columns: 1fr 80px !important;
660
+ }
661
+
662
+ ::ng-deep .cdk-virtual-scroll-content-wrapper{
663
+ right: 0 !important;
664
+ }
665
+ .header-title{
666
+ font-size: 14px !important;
667
+ }
668
+ .text-name, .node-external, .text-label, .text-label+span{
669
+ font-size: 12px;
670
+ }
671
+ .node-expand-area{
672
+ width: 30px !important;
673
+ height: 30px !important;
674
+ .qms-btn-icon{
675
+ width: 30px;
676
+ height: 30px;
677
+ line-height: 30px;
678
+ }
679
+ }
680
+ }
559
681
  }
682
+