ngx-tethys 13.2.3 → 13.2.6

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.
Files changed (103) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/cascader/cascader-li.component.d.ts +7 -3
  3. package/cascader/cascader.component.d.ts +70 -74
  4. package/cascader/module.d.ts +3 -1
  5. package/cascader/styles/cascader.scss +3 -64
  6. package/core/color/color.d.ts +3 -0
  7. package/esm2020/cascader/cascader-li.component.mjs +36 -8
  8. package/esm2020/cascader/cascader.component.mjs +274 -173
  9. package/esm2020/cascader/module.mjs +31 -4
  10. package/esm2020/core/color/color.mjs +5 -1
  11. package/esm2020/image/preview/image-preview.component.mjs +2 -5
  12. package/esm2020/mention/mention.directive.mjs +4 -1
  13. package/esm2020/menu/group/menu-group.component.mjs +3 -3
  14. package/esm2020/property/module.mjs +6 -4
  15. package/esm2020/property/properties.component.mjs +46 -64
  16. package/esm2020/property/property-item.component.mjs +82 -9
  17. package/esm2020/shared/select/module.mjs +5 -5
  18. package/esm2020/shared/select/select-control/select-control.component.mjs +7 -10
  19. package/esm2020/tag/tag.component.mjs +3 -3
  20. package/esm2020/time-picker/time-picker-panel.component.mjs +15 -6
  21. package/esm2020/time-picker/time-picker.component.mjs +62 -25
  22. package/esm2020/typography/index.mjs +4 -0
  23. package/esm2020/typography/module.mjs +21 -0
  24. package/esm2020/typography/ngx-tethys-typography.mjs +5 -0
  25. package/esm2020/typography/text/text.component.mjs +23 -0
  26. package/esm2020/typography/text-color.directive.mjs +42 -0
  27. package/esm2020/version.mjs +2 -2
  28. package/fesm2015/ngx-tethys-cascader.mjs +340 -183
  29. package/fesm2015/ngx-tethys-cascader.mjs.map +1 -1
  30. package/fesm2015/ngx-tethys-core.mjs +5 -1
  31. package/fesm2015/ngx-tethys-core.mjs.map +1 -1
  32. package/fesm2015/ngx-tethys-image.mjs +1 -1
  33. package/fesm2015/ngx-tethys-image.mjs.map +1 -1
  34. package/fesm2015/ngx-tethys-mention.mjs +3 -0
  35. package/fesm2015/ngx-tethys-mention.mjs.map +1 -1
  36. package/fesm2015/ngx-tethys-menu.mjs +2 -2
  37. package/fesm2015/ngx-tethys-menu.mjs.map +1 -1
  38. package/fesm2015/ngx-tethys-property.mjs +128 -74
  39. package/fesm2015/ngx-tethys-property.mjs.map +1 -1
  40. package/fesm2015/ngx-tethys-shared.mjs +10 -13
  41. package/fesm2015/ngx-tethys-shared.mjs.map +1 -1
  42. package/fesm2015/ngx-tethys-tag.mjs +2 -2
  43. package/fesm2015/ngx-tethys-tag.mjs.map +1 -1
  44. package/fesm2015/ngx-tethys-time-picker.mjs +75 -29
  45. package/fesm2015/ngx-tethys-time-picker.mjs.map +1 -1
  46. package/fesm2015/ngx-tethys-typography.mjs +87 -0
  47. package/fesm2015/ngx-tethys-typography.mjs.map +1 -0
  48. package/fesm2015/ngx-tethys.mjs +1 -1
  49. package/fesm2015/ngx-tethys.mjs.map +1 -1
  50. package/fesm2020/ngx-tethys-cascader.mjs +338 -183
  51. package/fesm2020/ngx-tethys-cascader.mjs.map +1 -1
  52. package/fesm2020/ngx-tethys-core.mjs +5 -1
  53. package/fesm2020/ngx-tethys-core.mjs.map +1 -1
  54. package/fesm2020/ngx-tethys-image.mjs +1 -4
  55. package/fesm2020/ngx-tethys-image.mjs.map +1 -1
  56. package/fesm2020/ngx-tethys-mention.mjs +3 -0
  57. package/fesm2020/ngx-tethys-mention.mjs.map +1 -1
  58. package/fesm2020/ngx-tethys-menu.mjs +2 -2
  59. package/fesm2020/ngx-tethys-menu.mjs.map +1 -1
  60. package/fesm2020/ngx-tethys-property.mjs +126 -74
  61. package/fesm2020/ngx-tethys-property.mjs.map +1 -1
  62. package/fesm2020/ngx-tethys-shared.mjs +10 -13
  63. package/fesm2020/ngx-tethys-shared.mjs.map +1 -1
  64. package/fesm2020/ngx-tethys-tag.mjs +2 -2
  65. package/fesm2020/ngx-tethys-tag.mjs.map +1 -1
  66. package/fesm2020/ngx-tethys-time-picker.mjs +75 -29
  67. package/fesm2020/ngx-tethys-time-picker.mjs.map +1 -1
  68. package/fesm2020/ngx-tethys-typography.mjs +87 -0
  69. package/fesm2020/ngx-tethys-typography.mjs.map +1 -0
  70. package/fesm2020/ngx-tethys.mjs +1 -1
  71. package/fesm2020/ngx-tethys.mjs.map +1 -1
  72. package/form/styles/forms.scss +3 -3
  73. package/mention/mention.directive.d.ts +1 -0
  74. package/menu/examples/collapsed/collapsed.component.scss +7 -2
  75. package/menu/styles/collapsed.scss +13 -1
  76. package/menu/styles/menu.scss +3 -4
  77. package/menu/styles/theme.scss +1 -1
  78. package/package.json +9 -1
  79. package/property/module.d.ts +3 -1
  80. package/property/properties.component.d.ts +2 -4
  81. package/property/property-item.component.d.ts +29 -6
  82. package/property/styles/properties.scss +24 -13
  83. package/schematics/version.d.ts +1 -1
  84. package/schematics/version.js +1 -1
  85. package/shared/select/module.d.ts +2 -2
  86. package/shared/select/select-control/select-control.component.d.ts +2 -2
  87. package/shared/select/select-control/select-control.scss +5 -6
  88. package/shared/select/styles/select.mixin.scss +16 -1
  89. package/styles/index.scss +1 -0
  90. package/styles/mixins/index.scss +1 -0
  91. package/styles/variables.scss +17 -5
  92. package/tag/tag.component.d.ts +1 -1
  93. package/time-picker/styles/time-picker.scss +3 -0
  94. package/time-picker/time-picker-panel.component.d.ts +3 -2
  95. package/time-picker/time-picker.component.d.ts +6 -3
  96. package/typography/index.d.ts +3 -0
  97. package/typography/module.d.ts +10 -0
  98. package/typography/ngx-tethys-typography.d.ts +5 -0
  99. package/typography/package.json +10 -0
  100. package/typography/styles/mixin.scss +0 -0
  101. package/typography/styles/typography.scss +14 -0
  102. package/typography/text/text.component.d.ts +16 -0
  103. package/typography/text-color.directive.d.ts +17 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,51 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [13.2.6](https://github.com/atinc/ngx-tethys/compare/13.2.5...13.2.6) (2022-08-25)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **dialog:** import ThyCheckboxModule #INFR-4410 ([08ea36f](https://github.com/atinc/ngx-tethys/commit/08ea36f4e95dfac80bfb900ffed50324ce709c18)), closes [#INFR-4410](https://github.com/atinc/ngx-tethys/issues/INFR-4410)
11
+ * **property:** add thyFlexibleText for label text and add property-item-editor-offset for margin-left #INFR-4394 ([#2117](https://github.com/atinc/ngx-tethys/issues/2117)) ([7ab2c9e](https://github.com/atinc/ngx-tethys/commit/7ab2c9e6158684495950a9004e8034d06f33b7a5)), closes [#INFR-4394](https://github.com/atinc/ngx-tethys/issues/INFR-4394)
12
+ * **time-picker:** fix use origin value when input not valid date and improve test #INFR-4316 ([#2108](https://github.com/atinc/ngx-tethys/issues/2108)) ([153e7eb](https://github.com/atinc/ngx-tethys/commit/153e7ebc824c2f6ccc557dad8fe0869fc5032074)), closes [#INFR-4316](https://github.com/atinc/ngx-tethys/issues/INFR-4316)
13
+
14
+
15
+ ### Features
16
+
17
+ * **cascader:** add mulitple feature #INFR-2596 ([#2111](https://github.com/atinc/ngx-tethys/issues/2111)) ([8e745fb](https://github.com/atinc/ngx-tethys/commit/8e745fb29ff331d9b3bf3d0d4673e524be32b7cf)), closes [#INFR-2596](https://github.com/atinc/ngx-tethys/issues/INFR-2596)
18
+ * **mention:** add isOpened for mention directive #INFR-4414 ([e342745](https://github.com/atinc/ngx-tethys/commit/e3427458f0889f643bcadf38e04b037cc6333985)), closes [#INFR-4414](https://github.com/atinc/ngx-tethys/issues/INFR-4414)
19
+ * **property:** add thySpan for thy-property-item #INFR-4358 ([#2116](https://github.com/atinc/ngx-tethys/issues/2116)) ([d902859](https://github.com/atinc/ngx-tethys/commit/d902859d40b8695012ca2a802013b33e98ad9221)), closes [#INFR-4358](https://github.com/atinc/ngx-tethys/issues/INFR-4358)
20
+ * **property:** support property editing ([#2120](https://github.com/atinc/ngx-tethys/issues/2120)) ([20edd1a](https://github.com/atinc/ngx-tethys/commit/20edd1a5527c063feef824c6106f2dc9b9ce074c))
21
+ * **typography:** add typography module contains thy-text #INFR-4234 ([#2099](https://github.com/atinc/ngx-tethys/issues/2099)) ([16aa7ba](https://github.com/atinc/ngx-tethys/commit/16aa7ba4e099d44018ee08678efba5a92d72374a)), closes [#INFR-4234](https://github.com/atinc/ngx-tethys/issues/INFR-4234)
22
+
23
+
24
+
25
+ ## [13.2.5](https://github.com/atinc/ngx-tethys/compare/13.2.4...13.2.5) (2022-08-24)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **form:** fix label-required margin to 4px(#INFR-4338) ([#2107](https://github.com/atinc/ngx-tethys/issues/2107)) ([79d5bb5](https://github.com/atinc/ngx-tethys/commit/79d5bb59ae692d852b456eae7fdcc6d618e347ff)), closes [#INFR-4338](https://github.com/atinc/ngx-tethys/issues/INFR-4338)
31
+ * **property:** don't render item element when property item is null #INFR-4359 ([f8ad288](https://github.com/atinc/ngx-tethys/commit/f8ad288aa0a454b6b446e8ad14f78c795a0c05b7)), closes [#INFR-4359](https://github.com/atinc/ngx-tethys/issues/INFR-4359)
32
+ * **property:** optimize property editing #INFR-4361 #INFR-4363 ([#2109](https://github.com/atinc/ngx-tethys/issues/2109)) ([19153fd](https://github.com/atinc/ngx-tethys/commit/19153fd8e3f09b02bd77fec40165dccececa1872)), closes [#INFR-4361](https://github.com/atinc/ngx-tethys/issues/INFR-4361) [#INFR-4363](https://github.com/atinc/ngx-tethys/issues/INFR-4363)
33
+
34
+
35
+ ### Features
36
+
37
+ * **menu:** show group icon when thyCollapsed is true #INFR-4366 ([433dbb5](https://github.com/atinc/ngx-tethys/commit/433dbb510920516f53e994c33ce7e56cc55f6e53)), closes [#INFR-4366](https://github.com/atinc/ngx-tethys/issues/INFR-4366)
38
+
39
+
40
+
41
+ ## [13.2.4](https://github.com/atinc/ngx-tethys/compare/13.2.3...13.2.4) (2022-08-23)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * **image:** fix blob image preview error #INFR-4333 ([#2103](https://github.com/atinc/ngx-tethys/issues/2103)) ([2e8c34d](https://github.com/atinc/ngx-tethys/commit/2e8c34d72ed436ce6dee4eadf5ad997e72a719d5)), closes [#INFR-4333](https://github.com/atinc/ngx-tethys/issues/INFR-4333)
47
+
48
+
49
+
5
50
  ## [13.2.3](https://github.com/atinc/ngx-tethys/compare/13.2.2...13.2.3) (2022-08-19)
6
51
 
7
52
 
@@ -1,16 +1,20 @@
1
- import { OnInit } from '@angular/core';
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { CascaderOption } from './types';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class ThyCascaderOptionComponent implements OnInit {
5
5
  option: CascaderOption;
6
+ multiple: boolean;
7
+ isOnlySelectLeaf: boolean;
6
8
  item: boolean;
7
9
  active: boolean;
8
10
  get disabled(): boolean;
9
11
  get expand(): boolean;
10
- thyLabelProperty: string;
12
+ labelProperty: string;
13
+ toggleSelectChange: EventEmitter<boolean>;
11
14
  constructor();
12
15
  getOptionLabel(): any;
13
16
  ngOnInit(): void;
17
+ toggleOption(value: boolean): void;
14
18
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyCascaderOptionComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": "option"; "active": "active"; "thyLabelProperty": "thyLabelProperty"; }, {}, never, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderOptionComponent, "[thy-cascader-option]", never, { "option": "option"; "multiple": "multiple"; "isOnlySelectLeaf": "isOnlySelectLeaf"; "active": "active"; "labelProperty": "labelProperty"; }, { "toggleSelectChange": "toggleSelectChange"; }, never, never>;
16
20
  }
@@ -3,6 +3,8 @@ import { ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, OnInit, QueryLi
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import { UpdateHostClassService } from 'ngx-tethys/core';
5
5
  import { CascaderOption } from './types';
6
+ import { SelectControlSize, SelectOptionBase } from 'ngx-tethys/shared';
7
+ import { SelectionModel } from '@angular/cdk/collections';
6
8
  import * as i0 from "@angular/core";
7
9
  export declare type ThyCascaderTriggerType = 'click' | 'hover';
8
10
  export declare type ThyCascaderExpandTrigger = 'click' | 'hover';
@@ -11,101 +13,94 @@ export declare class ThyCascaderComponent implements ControlValueAccessor, OnIni
11
13
  private elementRef;
12
14
  private updateHostClassService;
13
15
  private viewPortRuler;
14
- private changeOnSelect;
15
- private showInput;
16
- prefixCls: string;
17
- private menuClassName;
18
- private columnClassName;
19
- private _menuColumnCls;
20
- private defaultValue;
21
- private readonly destroy$;
22
- dropDownPosition: string;
23
- menuVisible: boolean;
24
- isLoading: boolean;
25
- isOpening: boolean;
26
- showSearch: boolean;
27
- private _thySize;
28
- private _arrowCls;
29
- private _menuCls;
30
- private _labelCls;
31
- private _clearCls;
32
- private _inputCls;
33
- private labelRenderTpl;
34
- isLabelRenderTemplate: boolean;
35
- labelRenderText: string;
36
- labelRenderContext: any;
37
- onChange: any;
38
- onTouched: any;
39
- private cascaderPositon;
40
- positions: ConnectionPositionPair[];
41
- triggerRect: DOMRect;
42
- set thyLabelRender(value: TemplateRef<any>);
43
- get thyLabelRender(): TemplateRef<any>;
44
- private value;
45
- private selectedOptions;
46
- private activatedOptions;
47
- thyColumns: CascaderOption[][];
48
16
  thyValueProperty: string;
49
17
  thyLabelProperty: string;
50
- thyPlaceHolder: string;
51
- private _inputValue;
52
- get inputValue(): string;
53
- set inputValue(inputValue: string);
18
+ thyPlaceholder: string;
19
+ thySize: SelectControlSize;
20
+ set thyOptions(options: CascaderOption[] | null);
21
+ thyChangeOnSelect: boolean;
22
+ thyShowInput: boolean;
23
+ set thyLabelRender(value: TemplateRef<any>);
24
+ get thyLabelRender(): TemplateRef<any>;
54
25
  thyLoadData: (node: CascaderOption, index?: number) => PromiseLike<any>;
55
- set thyChangeOnSelect(value: boolean);
56
- get thyChangeOnSelect(): boolean;
57
- set thyShowInput(value: boolean);
58
- get thyShowInput(): boolean;
59
- searchWidthStyle: string;
60
- private oldColumnsHolder;
61
- private oldActivatedOptions;
62
- inSearch: boolean;
63
- emptyStateText: string;
64
26
  thyTriggerAction: ThyCascaderTriggerType | ThyCascaderTriggerType[];
65
27
  thyExpandTriggerAction: ThyCascaderExpandTrigger | ThyCascaderExpandTrigger[];
66
28
  thyMenuStyle: {
67
29
  [key: string]: string;
68
30
  };
69
- set thyOptions(options: CascaderOption[] | null);
70
31
  set thyMenuClassName(value: string);
71
32
  get thyMenuClassName(): string;
72
33
  set thyColumnClassName(value: string);
73
34
  get thyColumnClassName(): string;
74
35
  disabled: boolean;
75
- set thySize(v: string);
76
- get thySize(): string;
77
36
  set thyEmptyStateText(value: string);
37
+ set thyMultiple(value: boolean);
38
+ get thyMultiple(): boolean;
39
+ thyMaxTagCount: number;
40
+ thyIsOnlySelectLeaf: boolean;
41
+ thyChangeOn: (option: CascaderOption, level: number) => boolean;
78
42
  thyChange: EventEmitter<any[]>;
79
43
  thySelectionChange: EventEmitter<CascaderOption[]>;
80
44
  thySelect: EventEmitter<{
81
45
  option: CascaderOption;
82
46
  index: number;
83
47
  }>;
84
- thyChangeOn: (option: CascaderOption, level: number) => boolean;
48
+ thyDeselect: EventEmitter<{
49
+ option: CascaderOption;
50
+ index: number;
51
+ }>;
85
52
  thyClear: EventEmitter<void>;
86
- trigger: ElementRef<any>;
87
- input: ElementRef;
88
- menu: ElementRef;
89
53
  cascaderOptions: QueryList<ElementRef>;
90
54
  cascaderOptionContainers: QueryList<ElementRef>;
91
55
  cdkConnectedOverlay: CdkConnectedOverlay;
56
+ trigger: ElementRef<any>;
57
+ input: ElementRef;
58
+ menu: ElementRef;
59
+ dropDownPosition: string;
60
+ menuVisible: boolean;
61
+ isLoading: boolean;
62
+ showSearch: boolean;
63
+ labelRenderText: string;
64
+ labelRenderContext: any;
65
+ isLabelRenderTemplate: boolean;
66
+ triggerRect: DOMRect;
67
+ columns: CascaderOption[][];
68
+ emptyStateText: string;
69
+ selectionModel: SelectionModel<SelectOptionBase>;
70
+ private prefixCls;
71
+ private menuClassName;
72
+ private columnClassName;
73
+ private _menuColumnCls;
74
+ private defaultValue;
75
+ private readonly destroy$;
76
+ private _menuCls;
77
+ private _labelCls;
78
+ private labelRenderTpl;
79
+ onChange: any;
80
+ onTouched: any;
81
+ private cascaderPosition;
82
+ positions: ConnectionPositionPair[];
83
+ private value;
84
+ private selectedOptions;
85
+ private activatedOptions;
86
+ get selected(): SelectOptionBase | SelectOptionBase[];
87
+ private isMultiple;
92
88
  ngOnInit(): void;
89
+ private initSelectionModel;
93
90
  private initPosition;
94
91
  private initOptions;
95
92
  private activateOnInit;
96
93
  writeValue(value: any): void;
97
94
  afterWriteValue(): void;
95
+ private addSelectedState;
98
96
  registerOnChange(fn: (_: any) => {}): void;
99
97
  registerOnTouched(fn: () => {}): void;
100
- onPositionChange(position: ConnectedOverlayPositionChange): void;
98
+ positionChange(position: ConnectedOverlayPositionChange): void;
101
99
  private isLoaded;
102
100
  getOptionLabel(option: CascaderOption): any;
103
101
  getOptionValue(option: CascaderOption): any;
104
- private hasInput;
105
- private hasValue;
106
- get showPlaceholder(): boolean;
107
- isActivedOption(option: CascaderOption, index: number): boolean;
108
- onAttached(): void;
102
+ isActivatedOption(option: CascaderOption, index: number): boolean;
103
+ attached(): void;
109
104
  private findOption;
110
105
  private buildDisplayLabel;
111
106
  isMenuVisible(): boolean;
@@ -115,35 +110,36 @@ export declare class ThyCascaderComponent implements ControlValueAccessor, OnIni
115
110
  private setMenuClass;
116
111
  get menuColumnCls(): any;
117
112
  private setMenuColumnClass;
118
- get arrowCls(): any;
119
- private setArrowClass;
120
- get clearCls(): any;
121
- private setClearClass;
122
113
  get labelCls(): any;
123
114
  private setLabelClass;
124
- get inputCls(): any;
125
- private setInputClass;
126
115
  private setClassMap;
127
116
  private isClickTriggerAction;
128
117
  private isHoverTriggerAction;
129
118
  private isHoverExpandTriggerAction;
130
119
  toggleClick($event: Event): void;
131
120
  toggleHover($event: Event): void;
132
- onOptionClick(option: CascaderOption, index: number, event: Event): void;
133
- onOptionMouseover(option: CascaderOption, index: number, event: Event): void;
134
- onMenuMouseleave(event: Event): void;
121
+ clickOption(option: CascaderOption, index: number, event: Event): void;
122
+ mouseoverOption(option: CascaderOption, index: number, event: Event): void;
123
+ mouseleaveMenu(event: Event): void;
135
124
  closeMenu(): void;
136
125
  setActiveOption(option: CascaderOption, index: number, select: boolean, loadChildren?: boolean): void;
137
- private onSelectOption;
126
+ private selectOption;
127
+ removeSelectedItem(event: {
128
+ item: SelectOptionBase;
129
+ $eventOrigin: Event;
130
+ }): void;
131
+ private deselectOption;
138
132
  private shouldPerformSelection;
139
- private onValueChange;
133
+ private valueChange;
134
+ private getValues;
140
135
  clearSelection($event: Event): void;
141
- focus(): void;
136
+ private deselectAllSelected;
142
137
  private loadChildren;
143
138
  private setColumnData;
144
- getSubmitValue(): any[];
139
+ private getSubmitValue;
145
140
  constructor(cdr: ChangeDetectorRef, elementRef: ElementRef, updateHostClassService: UpdateHostClassService, viewPortRuler: ViewportRuler);
141
+ trackByFn(index: number, item: CascaderOption): any;
146
142
  ngOnDestroy(): void;
147
143
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyCascaderComponent, never>;
148
- static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderComponent, "thy-cascader,[thy-cascader]", never, { "thyLabelRender": "thyLabelRender"; "thyValueProperty": "thyValueProperty"; "thyLabelProperty": "thyLabelProperty"; "thyPlaceHolder": "thyPlaceHolder"; "thyLoadData": "thyLoadData"; "thyChangeOnSelect": "thyChangeOnSelect"; "thyShowInput": "thyShowInput"; "thyTriggerAction": "thyTriggerAction"; "thyExpandTriggerAction": "thyExpandTriggerAction"; "thyMenuStyle": "thyMenuStyle"; "thyOptions": "thyOptions"; "thyMenuClassName": "thyMenuClassName"; "thyColumnClassName": "thyColumnClassName"; "disabled": "disabled"; "thySize": "thySize"; "thyEmptyStateText": "thyEmptyStateText"; "thyChangeOn": "thyChangeOn"; }, { "thyChange": "thyChange"; "thySelectionChange": "thySelectionChange"; "thySelect": "thySelect"; "thyClear": "thyClear"; }, never, never>;
144
+ static ɵcmp: i0.ɵɵComponentDeclaration<ThyCascaderComponent, "thy-cascader,[thy-cascader]", never, { "thyValueProperty": "thyValueProperty"; "thyLabelProperty": "thyLabelProperty"; "thyPlaceholder": "thyPlaceholder"; "thySize": "thySize"; "thyOptions": "thyOptions"; "thyChangeOnSelect": "thyChangeOnSelect"; "thyShowInput": "thyShowInput"; "thyLabelRender": "thyLabelRender"; "thyLoadData": "thyLoadData"; "thyTriggerAction": "thyTriggerAction"; "thyExpandTriggerAction": "thyExpandTriggerAction"; "thyMenuStyle": "thyMenuStyle"; "thyMenuClassName": "thyMenuClassName"; "thyColumnClassName": "thyColumnClassName"; "disabled": "disabled"; "thyEmptyStateText": "thyEmptyStateText"; "thyMultiple": "thyMultiple"; "thyMaxTagCount": "thyMaxTagCount"; "thyIsOnlySelectLeaf": "thyIsOnlySelectLeaf"; "thyChangeOn": "thyChangeOn"; }, { "thyChange": "thyChange"; "thySelectionChange": "thySelectionChange"; "thySelect": "thySelect"; "thyDeselect": "thyDeselect"; "thyClear": "thyClear"; }, never, never>;
149
145
  }
@@ -7,8 +7,10 @@ import * as i5 from "@angular/cdk/overlay";
7
7
  import * as i6 from "ngx-tethys/input";
8
8
  import * as i7 from "ngx-tethys/icon";
9
9
  import * as i8 from "ngx-tethys/empty";
10
+ import * as i9 from "ngx-tethys/shared";
11
+ import * as i10 from "ngx-tethys/checkbox";
10
12
  export declare class ThyCascaderModule {
11
13
  static ɵfac: i0.ɵɵFactoryDeclaration<ThyCascaderModule, never>;
12
- static ɵmod: i0.ɵɵNgModuleDeclaration<ThyCascaderModule, [typeof i1.ThyCascaderComponent, typeof i2.ThyCascaderOptionComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.OverlayModule, typeof i6.ThyInputModule, typeof i7.ThyIconModule, typeof i8.ThyEmptyModule], [typeof i1.ThyCascaderComponent]>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ThyCascaderModule, [typeof i1.ThyCascaderComponent, typeof i2.ThyCascaderOptionComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i5.OverlayModule, typeof i6.ThyInputModule, typeof i7.ThyIconModule, typeof i8.ThyEmptyModule, typeof i9.ThySelectCommonModule, typeof i10.ThyCheckboxModule], [typeof i1.ThyCascaderComponent]>;
13
15
  static ɵinj: i0.ɵɵInjectorDeclaration<ThyCascaderModule>;
14
16
  }
@@ -3,74 +3,13 @@
3
3
  .thy-cascader {
4
4
  position: relative;
5
5
  display: inline-block;
6
- cursor: pointer;
7
- border: 1px solid variables.$gray-200;
8
- border-radius: variables.$input-border-radius-xs;
9
- &:hover:not(&-picker-disabled):not(.is-invalid) {
10
- border-color: variables.$primary;
11
- }
12
- &-input.form-control {
13
- border: none !important;
6
+
7
+ .form-control {
14
8
  cursor: pointer;
15
9
 
16
- &:disabled {
17
- cursor: default;
18
- }
19
- }
20
- &-xs,
21
- &-sm {
22
- font-size: 0.75rem;
23
- }
24
- &-picker {
25
- &-open {
26
- border-color: variables.$primary;
27
- }
28
- &-disabled {
29
- color: variables.$gray-600;
30
- border-color: 1px solid variables.$gray-400;
10
+ &.disabled {
31
11
  cursor: default;
32
12
  }
33
- &-label {
34
- position: absolute;
35
- left: 0;
36
- height: 20px;
37
- line-height: 20px;
38
- top: 50%;
39
- margin-top: -10px;
40
- white-space: nowrap;
41
- text-overflow: ellipsis;
42
- overflow: hidden;
43
- width: 100%;
44
- padding: 0 24px 0 12px;
45
- }
46
- &-arrow {
47
- color: variables.$gray-500;
48
- position: absolute;
49
- right: 12px;
50
- top: 50%;
51
- font-size: 1rem;
52
- margin-top: -8px;
53
- line-height: 1;
54
- transition: transform 0.2s;
55
- &-expand {
56
- transform: rotate(180deg);
57
- }
58
- }
59
- &-clear {
60
- opacity: 0;
61
- position: absolute;
62
- right: 13px;
63
- z-index: 2;
64
- background: variables.$white;
65
- top: 50%;
66
- font-size: 0.875rem;
67
- margin-top: -7px;
68
- line-height: 1;
69
- transition: color 0.3s ease, opacity 0.15s ease;
70
- }
71
- &:hover &-clear {
72
- opacity: 1;
73
- }
74
13
  }
75
14
  &-menus {
76
15
  font-size: 14px;
@@ -1,3 +1,6 @@
1
1
  export declare const presetThemeColors: readonly ["primary", "success", "info", "warning", "danger", "default", "light"];
2
2
  export declare type ThyThemeColor = typeof presetThemeColors[number];
3
3
  export declare function isThemeColor(color: ThyThemeColor | string): boolean;
4
+ export declare const presetTextColors: readonly ["secondary", "muted", "desc", "placeholder"];
5
+ export declare type ThyTextColor = typeof presetTextColors[number];
6
+ export declare function isTextColor(color: ThyTextColor | string): boolean;
@@ -1,11 +1,18 @@
1
- import { UpdateHostClassService } from 'ngx-tethys/core';
2
- import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewEncapsulation } from '@angular/core';
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { InputBoolean, UpdateHostClassService } from 'ngx-tethys/core';
3
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
3
4
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
+ import * as i1 from "ngx-tethys/checkbox";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/forms";
5
8
  export class ThyCascaderOptionComponent {
6
9
  constructor() {
10
+ this.multiple = false;
11
+ this.isOnlySelectLeaf = true;
7
12
  this.item = true;
8
13
  this.active = false;
14
+ this.labelProperty = 'label';
15
+ this.toggleSelectChange = new EventEmitter();
9
16
  }
10
17
  get disabled() {
11
18
  return this.option.disabled;
@@ -14,17 +21,36 @@ export class ThyCascaderOptionComponent {
14
21
  return this.option && !this.option.isLeaf;
15
22
  }
16
23
  getOptionLabel() {
17
- return this.option ? this.option[this.thyLabelProperty || 'label'] : '';
24
+ return this.option ? this.option[this.labelProperty] : '';
18
25
  }
19
26
  ngOnInit() { }
27
+ toggleOption(value) {
28
+ this.toggleSelectChange.emit(value);
29
+ }
20
30
  }
21
31
  ThyCascaderOptionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ThyCascaderOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
- ThyCascaderOptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ThyCascaderOptionComponent, selector: "[thy-cascader-option]", inputs: { option: "option", active: "active", thyLabelProperty: "thyLabelProperty" }, host: { properties: { "class.thy-cascader-menu-item": "this.item", "class.thy-cascader-menu-item-active": "this.active", "class.thy-cascader-menu-item-disabled": "this.disabled", "class.thy-cascader-menu-item-expand": "this.expand" } }, providers: [UpdateHostClassService], ngImport: i0, template: "<ng-container>\n {{ getOptionLabel() }}\n</ng-container>\n<span *ngIf=\"!option.isLeaf || option.children && option.children.length || option.loading\" class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
32
+ ThyCascaderOptionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.6", type: ThyCascaderOptionComponent, selector: "[thy-cascader-option]", inputs: { option: "option", multiple: "multiple", isOnlySelectLeaf: "isOnlySelectLeaf", active: "active", labelProperty: "labelProperty" }, outputs: { toggleSelectChange: "toggleSelectChange" }, host: { properties: { "class.thy-cascader-menu-item": "this.item", "class.thy-cascader-menu-item-active": "this.active", "class.thy-cascader-menu-item-disabled": "this.disabled", "class.thy-cascader-menu-item-expand": "this.expand" } }, providers: [UpdateHostClassService], ngImport: i0, template: "<ng-container>\n <span *ngIf=\"!multiple || !option.isLeaf\"> {{ getOptionLabel() }}</span>\n <ng-container *ngIf=\"multiple && option.isLeaf && isOnlySelectLeaf\">\n <label\n thyCheckbox\n [(ngModel)]=\"active\"\n (ngModelChange)=\"toggleOption(active)\"\n [name]=\"option.value || option._id\"\n [thyLabelText]=\"getOptionLabel()\"\n ></label>\n </ng-container>\n\n <span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\"\n >\n </span>\n</ng-container>\n", components: [{ type: i1.ThyCheckboxComponent, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
33
+ __decorate([
34
+ InputBoolean(),
35
+ __metadata("design:type", Object)
36
+ ], ThyCascaderOptionComponent.prototype, "multiple", void 0);
37
+ __decorate([
38
+ InputBoolean(),
39
+ __metadata("design:type", Object)
40
+ ], ThyCascaderOptionComponent.prototype, "isOnlySelectLeaf", void 0);
41
+ __decorate([
42
+ InputBoolean(),
43
+ __metadata("design:type", Boolean)
44
+ ], ThyCascaderOptionComponent.prototype, "active", void 0);
23
45
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImport: i0, type: ThyCascaderOptionComponent, decorators: [{
24
46
  type: Component,
25
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, selector: '[thy-cascader-option]', providers: [UpdateHostClassService], template: "<ng-container>\n {{ getOptionLabel() }}\n</ng-container>\n<span *ngIf=\"!option.isLeaf || option.children && option.children.length || option.loading\" class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\">\n</span>" }]
47
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, selector: '[thy-cascader-option]', providers: [UpdateHostClassService], template: "<ng-container>\n <span *ngIf=\"!multiple || !option.isLeaf\"> {{ getOptionLabel() }}</span>\n <ng-container *ngIf=\"multiple && option.isLeaf && isOnlySelectLeaf\">\n <label\n thyCheckbox\n [(ngModel)]=\"active\"\n (ngModelChange)=\"toggleOption(active)\"\n [name]=\"option.value || option._id\"\n [thyLabelText]=\"getOptionLabel()\"\n ></label>\n </ng-container>\n\n <span\n *ngIf=\"!option.isLeaf || (option.children && option.children.length) || option.loading\"\n class=\"wtf wtf-angle-right thy-cascader-menu-item-expand-icon\"\n >\n </span>\n</ng-container>\n" }]
26
48
  }], ctorParameters: function () { return []; }, propDecorators: { option: [{
27
49
  type: Input
50
+ }], multiple: [{
51
+ type: Input
52
+ }], isOnlySelectLeaf: [{
53
+ type: Input
28
54
  }], item: [{
29
55
  type: HostBinding,
30
56
  args: ['class.thy-cascader-menu-item']
@@ -39,7 +65,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.6", ngImpor
39
65
  }], expand: [{
40
66
  type: HostBinding,
41
67
  args: ['class.thy-cascader-menu-item-expand']
42
- }], thyLabelProperty: [{
68
+ }], labelProperty: [{
43
69
  type: Input
70
+ }], toggleSelectChange: [{
71
+ type: Output
44
72
  }] } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXItbGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci1saS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVlsSCxNQUFNLE9BQU8sMEJBQTBCO0lBcUJuQztRQWxCNkMsU0FBSSxHQUFHLElBQUksQ0FBQztRQUl6RCxXQUFNLEdBQUcsS0FBSyxDQUFDO0lBY0EsQ0FBQztJQVpoQixJQUNJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM5QyxDQUFDO0lBTU0sY0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELFFBQVEsS0FBSSxDQUFDOzt1SEEzQkosMEJBQTBCOzJHQUExQiwwQkFBMEIsbVhBRnhCLENBQUMsc0JBQXNCLENBQUMsMEJDWnZDLHVPQUlPOzJGRFVNLDBCQUEwQjtrQkFSdEMsU0FBUztzQ0FDVyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFlBRTNCLHVCQUF1QixhQUV0QixDQUFDLHNCQUFzQixDQUFDOzBFQUcxQixNQUFNO3NCQUFkLEtBQUs7Z0JBRXVDLElBQUk7c0JBQWhELFdBQVc7dUJBQUMsOEJBQThCO2dCQUkzQyxNQUFNO3NCQUZMLFdBQVc7dUJBQUMscUNBQXFDOztzQkFDakQsS0FBSztnQkFJRixRQUFRO3NCQURYLFdBQVc7dUJBQUMsdUNBQXVDO2dCQU1oRCxNQUFNO3NCQURULFdBQVc7dUJBQUMscUNBQXFDO2dCQUt6QyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcblxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENhc2NhZGVyT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1t0aHktY2FzY2FkZXItb3B0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlDYXNjYWRlck9wdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgb3B0aW9uOiBDYXNjYWRlck9wdGlvbjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbScpIGl0ZW0gPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktY2FzY2FkZXItbWVudS1pdGVtLWFjdGl2ZScpXG4gICAgQElucHV0KClcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1kaXNhYmxlZCcpXG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24uZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktY2FzY2FkZXItbWVudS1pdGVtLWV4cGFuZCcpXG4gICAgZ2V0IGV4cGFuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uICYmICF0aGlzLm9wdGlvbi5pc0xlYWY7XG4gICAgfVxuXG4gICAgQElucHV0KCkgdGh5TGFiZWxQcm9wZXJ0eTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgcHVibGljIGdldE9wdGlvbkxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24gPyB0aGlzLm9wdGlvblt0aGlzLnRoeUxhYmVsUHJvcGVydHkgfHwgJ2xhYmVsJ10gOiAnJztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG59XG4iLCI8bmctY29udGFpbmVyPlxuICAgIHt7IGdldE9wdGlvbkxhYmVsKCkgfX1cbjwvbmctY29udGFpbmVyPlxuPHNwYW4gKm5nSWY9XCIhb3B0aW9uLmlzTGVhZiB8fCBvcHRpb24uY2hpbGRyZW4gJiYgb3B0aW9uLmNoaWxkcmVuLmxlbmd0aCB8fCBvcHRpb24ubG9hZGluZ1wiIGNsYXNzPVwid3RmIHd0Zi1hbmdsZS1yaWdodCB0aHktY2FzY2FkZXItbWVudS1pdGVtLWV4cGFuZC1pY29uXCI+XG48L3NwYW4+Il19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXItbGkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2Nhc2NhZGVyL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jYXNjYWRlci9jYXNjYWRlci1saS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVd4SSxNQUFNLE9BQU8sMEJBQTBCO0lBZ0NuQztRQTNCQSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUVxQixTQUFJLEdBQUcsSUFBSSxDQUFDO1FBS3pELFdBQU0sR0FBWSxLQUFLLENBQUM7UUFZZixrQkFBYSxHQUFXLE9BQU8sQ0FBQztRQUUvQix1QkFBa0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUUxRCxDQUFDO0lBZGhCLElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQ0ksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzlDLENBQUM7SUFRTSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsUUFBUSxLQUFJLENBQUM7SUFFTixZQUFZLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O3VIQTFDUSwwQkFBMEI7MkdBQTFCLDBCQUEwQixnZUFGeEIsQ0FBQyxzQkFBc0IsQ0FBQywwQkNWdkMsa21CQWtCQTtBRERJO0lBREMsWUFBWSxFQUFFOzs0REFDRTtBQUlqQjtJQURDLFlBQVksRUFBRTs7b0VBQ1M7QUFPeEI7SUFEQyxZQUFZLEVBQUU7OzBEQUNTOzJGQWhCZiwwQkFBMEI7a0JBUnRDLFNBQVM7c0NBQ1csdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxZQUUzQix1QkFBdUIsYUFFdEIsQ0FBQyxzQkFBc0IsQ0FBQzswRUFHMUIsTUFBTTtzQkFBZCxLQUFLO2dCQUlOLFFBQVE7c0JBRlAsS0FBSztnQkFNTixnQkFBZ0I7c0JBRmYsS0FBSztnQkFJdUMsSUFBSTtzQkFBaEQsV0FBVzt1QkFBQyw4QkFBOEI7Z0JBSzNDLE1BQU07c0JBSEwsV0FBVzt1QkFBQyxxQ0FBcUM7O3NCQUNqRCxLQUFLO2dCQUtGLFFBQVE7c0JBRFgsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBTWhELE1BQU07c0JBRFQsV0FBVzt1QkFBQyxxQ0FBcUM7Z0JBS3pDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksa0JBQWtCO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhc2NhZGVyT3B0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1t0aHktY2FzY2FkZXItb3B0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhc2NhZGVyLWxpLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtVcGRhdGVIb3N0Q2xhc3NTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBUaHlDYXNjYWRlck9wdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgb3B0aW9uOiBDYXNjYWRlck9wdGlvbjtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgaXNPbmx5U2VsZWN0TGVhZiA9IHRydWU7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0nKSBpdGVtID0gdHJ1ZTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1hY3RpdmUnKVxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1jYXNjYWRlci1tZW51LWl0ZW0tZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uLmRpc2FibGVkO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LWNhc2NhZGVyLW1lbnUtaXRlbS1leHBhbmQnKVxuICAgIGdldCBleHBhbmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbiAmJiAhdGhpcy5vcHRpb24uaXNMZWFmO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxhYmVsUHJvcGVydHk6IHN0cmluZyA9ICdsYWJlbCc7XG5cbiAgICBAT3V0cHV0KCkgdG9nZ2xlU2VsZWN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBwdWJsaWMgZ2V0T3B0aW9uTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbiA/IHRoaXMub3B0aW9uW3RoaXMubGFiZWxQcm9wZXJ0eV0gOiAnJztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHt9XG5cbiAgICBwdWJsaWMgdG9nZ2xlT3B0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0Q2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250YWluZXI+XG4gIDxzcGFuICpuZ0lmPVwiIW11bHRpcGxlIHx8ICFvcHRpb24uaXNMZWFmXCI+IHt7IGdldE9wdGlvbkxhYmVsKCkgfX08L3NwYW4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJtdWx0aXBsZSAmJiBvcHRpb24uaXNMZWFmICYmIGlzT25seVNlbGVjdExlYWZcIj5cbiAgICA8bGFiZWxcbiAgICAgIHRoeUNoZWNrYm94XG4gICAgICBbKG5nTW9kZWwpXT1cImFjdGl2ZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVPcHRpb24oYWN0aXZlKVwiXG4gICAgICBbbmFtZV09XCJvcHRpb24udmFsdWUgfHwgb3B0aW9uLl9pZFwiXG4gICAgICBbdGh5TGFiZWxUZXh0XT1cImdldE9wdGlvbkxhYmVsKClcIlxuICAgID48L2xhYmVsPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8c3BhblxuICAgICpuZ0lmPVwiIW9wdGlvbi5pc0xlYWYgfHwgKG9wdGlvbi5jaGlsZHJlbiAmJiBvcHRpb24uY2hpbGRyZW4ubGVuZ3RoKSB8fCBvcHRpb24ubG9hZGluZ1wiXG4gICAgY2xhc3M9XCJ3dGYgd3RmLWFuZ2xlLXJpZ2h0IHRoeS1jYXNjYWRlci1tZW51LWl0ZW0tZXhwYW5kLWljb25cIlxuICA+XG4gIDwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuIl19