@acorex/components 7.8.1 → 7.8.3

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 (76) hide show
  1. package/common/lib/classes/datasource.class.d.ts +2 -2
  2. package/esm2022/button/lib/button.component.mjs +2 -2
  3. package/esm2022/common/lib/classes/datasource.class.mjs +13 -12
  4. package/esm2022/common/lib/components/selection-base.component.class.mjs +3 -2
  5. package/esm2022/common/lib/components/value-component.class.mjs +2 -3
  6. package/esm2022/dropdown/lib/dropdown-box.component.mjs +2 -1
  7. package/esm2022/list/lib/list.component.mjs +14 -11
  8. package/esm2022/list/lib/list.module.mjs +4 -3
  9. package/esm2022/otp/lib/otp.component.mjs +2 -2
  10. package/esm2022/popover/lib/popover.component.mjs +6 -3
  11. package/esm2022/progress-bar/lib/progress-bar.component.mjs +2 -2
  12. package/esm2022/range-slider/lib/range-slider.component.mjs +4 -4
  13. package/esm2022/select-box/lib/select-box.component.mjs +11 -8
  14. package/esm2022/tabs/lib/tabs.component.mjs +2 -2
  15. package/fesm2022/acorex-components-button.mjs +2 -2
  16. package/fesm2022/acorex-components-button.mjs.map +1 -1
  17. package/fesm2022/acorex-components-common.mjs +15 -15
  18. package/fesm2022/acorex-components-common.mjs.map +1 -1
  19. package/fesm2022/acorex-components-dropdown.mjs +1 -0
  20. package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
  21. package/fesm2022/acorex-components-list.mjs +16 -12
  22. package/fesm2022/acorex-components-list.mjs.map +1 -1
  23. package/fesm2022/acorex-components-otp.mjs +2 -2
  24. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  25. package/fesm2022/acorex-components-popover.mjs +5 -2
  26. package/fesm2022/acorex-components-popover.mjs.map +1 -1
  27. package/fesm2022/acorex-components-progress-bar.mjs +2 -2
  28. package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
  29. package/fesm2022/acorex-components-range-slider.mjs +3 -3
  30. package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
  31. package/fesm2022/acorex-components-select-box.mjs +10 -8
  32. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  33. package/fesm2022/acorex-components-tabs.mjs +2 -2
  34. package/fesm2022/acorex-components-tabs.mjs.map +1 -1
  35. package/list/lib/list.component.d.ts +1 -2
  36. package/list/lib/list.module.d.ts +2 -1
  37. package/package.json +1 -7
  38. package/select-box/lib/select-box.component.d.ts +1 -1
  39. package/esm2022/mixin/acorex-components-mixin.mjs +0 -5
  40. package/esm2022/mixin/index.mjs +0 -17
  41. package/esm2022/mixin/lib/base-components.class.mjs +0 -110
  42. package/esm2022/mixin/lib/base-menu-mixin.class.mjs +0 -137
  43. package/esm2022/mixin/lib/button-mixin.class.mjs +0 -66
  44. package/esm2022/mixin/lib/clickable-mixin.class.mjs +0 -24
  45. package/esm2022/mixin/lib/color-look-mixing.class.mjs +0 -43
  46. package/esm2022/mixin/lib/constratctor.mjs +0 -2
  47. package/esm2022/mixin/lib/datalist-component.class.mjs +0 -155
  48. package/esm2022/mixin/lib/datalist.class.mjs +0 -46
  49. package/esm2022/mixin/lib/dropdown-mixin.class.mjs +0 -95
  50. package/esm2022/mixin/lib/interactive-mixin.class.mjs +0 -84
  51. package/esm2022/mixin/lib/mixin.class.mjs +0 -26
  52. package/esm2022/mixin/lib/page-component.class.mjs +0 -11
  53. package/esm2022/mixin/lib/selection-component.class.mjs +0 -180
  54. package/esm2022/mixin/lib/sizable-mixin.class.mjs +0 -16
  55. package/esm2022/mixin/lib/textbox-mixin.class.mjs +0 -67
  56. package/esm2022/mixin/lib/value-mixin.class.mjs +0 -227
  57. package/fesm2022/acorex-components-mixin.mjs +0 -1268
  58. package/fesm2022/acorex-components-mixin.mjs.map +0 -1
  59. package/mixin/README.md +0 -3
  60. package/mixin/index.d.ts +0 -16
  61. package/mixin/lib/base-components.class.d.ts +0 -84
  62. package/mixin/lib/base-menu-mixin.class.d.ts +0 -53
  63. package/mixin/lib/button-mixin.class.d.ts +0 -53
  64. package/mixin/lib/clickable-mixin.class.d.ts +0 -36
  65. package/mixin/lib/color-look-mixing.class.d.ts +0 -42
  66. package/mixin/lib/constratctor.d.ts +0 -4
  67. package/mixin/lib/datalist-component.class.d.ts +0 -59
  68. package/mixin/lib/datalist.class.d.ts +0 -49
  69. package/mixin/lib/dropdown-mixin.class.d.ts +0 -47
  70. package/mixin/lib/interactive-mixin.class.d.ts +0 -63
  71. package/mixin/lib/mixin.class.d.ts +0 -680
  72. package/mixin/lib/page-component.class.d.ts +0 -28
  73. package/mixin/lib/selection-component.class.d.ts +0 -61
  74. package/mixin/lib/sizable-mixin.class.d.ts +0 -34
  75. package/mixin/lib/textbox-mixin.class.d.ts +0 -66
  76. package/mixin/lib/value-mixin.class.d.ts +0 -64
@@ -1,11 +0,0 @@
1
- export function _PageComponenetMixin(Base) {
2
- return class extends Base {
3
- /**
4
- * @ignore
5
- */
6
- constructor(...args) {
7
- super(...args.slice(0, 2));
8
- }
9
- };
10
- }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1jb21wb25lbnQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWl4aW4vc3JjL2xpYi9wYWdlLWNvbXBvbmVudC5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsb0JBQW9CLENBQTZDLElBQVc7SUFDMUYsT0FBTyxLQUFNLFNBQVEsSUFBSTtRQUN2Qjs7V0FFRztRQUNILFlBQVksR0FBRyxJQUFXO1lBQ3hCLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLWNvbXBvbmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cmF0Y3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBfUGFnZUNvbXBvbmVuZXRNaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPEFYQmFzZUNvbXBvbmVudD4+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2Uge1xuICAgIC8qKlxuICAgICAqICBAaWdub3JlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3Muc2xpY2UoMCwgMikpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
@@ -1,180 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { EventEmitter } from '@angular/core';
3
- import { clone } from 'lodash-es';
4
- export function _SelectionComponenetMixin(Base) {
5
- return class extends Base {
6
- /**
7
- * Defines the primary text to show inside the button.
8
- */
9
- get items() {
10
- return [];
11
- }
12
- get displayItems() {
13
- return [];
14
- }
15
- get flatItems() {
16
- return [];
17
- }
18
- constructor(...args) {
19
- super(...args);
20
- this.valueField = 'id';
21
- this.textField = 'text';
22
- this.disabledField = 'disabled';
23
- this.multiple = false;
24
- this.selectionMode = 'value';
25
- this.valueChange = new EventEmitter();
26
- this.onValueChanged = new EventEmitter();
27
- }
28
- _onInternalInit() {
29
- super._onInternalInit();
30
- }
31
- get value() {
32
- return this._value;
33
- }
34
- set value(v) {
35
- v = this._internalSetValue(v);
36
- if (v !== this._value) {
37
- const oldValue = clone(this._value);
38
- if (this.multiple) {
39
- this._value = Array.isArray(v) ? v : v ? [v] : [];
40
- }
41
- else {
42
- this._value = Array.isArray(v) ? v[0] : v;
43
- }
44
- this._renderSelection();
45
- this.valueChange.emit(this._value);
46
- this.onValueChanged.emit({
47
- component: this,
48
- htmlElement: this._getHostElement(),
49
- isUserInteraction: false,
50
- oldValue,
51
- value: this._value,
52
- selectedKeys: this.selectedItems.map((c) => c[this.valueField]),
53
- selectedItems: this.selectedItems.slice(),
54
- });
55
- if (v == null || v == undefined || v == '') {
56
- this._setState('clear');
57
- }
58
- else {
59
- if (this._isInited) {
60
- this.validate();
61
- }
62
- }
63
- }
64
- }
65
- get selectedItems() {
66
- return this._selectedItems || [];
67
- }
68
- _renderSelection() {
69
- const func = () => {
70
- if (this.value == null || this.value == undefined) {
71
- return [];
72
- }
73
- const items = this.flatItems;
74
- if (items.length > 0) {
75
- return items.filter((i) => {
76
- if (Array.isArray(this.value)) {
77
- return this.value.some((ii) => {
78
- if (typeof ii === 'object') {
79
- return i[this.valueField] === ii[this.valueField];
80
- }
81
- else {
82
- return i[this.valueField] === ii;
83
- }
84
- });
85
- }
86
- else {
87
- if (typeof this.value === 'object') {
88
- return i[this.valueField] === this.value[this.valueField];
89
- }
90
- else {
91
- return i[this.valueField] === this.value;
92
- }
93
- }
94
- });
95
- }
96
- if (Array.isArray(this.value)) {
97
- return this.value.map((ii) => {
98
- if (typeof ii === 'object') {
99
- return ii;
100
- }
101
- else {
102
- const fake = {};
103
- fake[this.valueField] = this.value;
104
- fake[this.textField] = this.value;
105
- return fake;
106
- }
107
- });
108
- }
109
- else {
110
- if (typeof this.value === 'object') {
111
- return [this.value];
112
- }
113
- else {
114
- const fake = {};
115
- fake[this.valueField] = this.value;
116
- fake[this.textField] = this.value;
117
- return [fake];
118
- }
119
- }
120
- };
121
- this._selectedItems = func();
122
- }
123
- _getItemByDataMode(item) {
124
- return this.selectionMode === 'item' ? item : item[this.valueField];
125
- }
126
- _getItemValue(item) {
127
- return typeof item === 'object' ? item[this.valueField] : item;
128
- }
129
- unselectItems(...items) {
130
- if (!items || items.length === 0) {
131
- this.value = null;
132
- }
133
- else if (Array.isArray(this.value)) {
134
- this.value = this.value.filter((c) => !items.some((d) => this._getItemValue(c) === this._getItemValue(d)));
135
- }
136
- else {
137
- this.value = null;
138
- }
139
- }
140
- selectItems(...items) {
141
- if (items && items.length) {
142
- if (this.multiple) {
143
- this.value = (this.value || []).concat(items.map((c) => this._getItemByDataMode(c)));
144
- }
145
- else {
146
- this.value = this._getItemByDataMode(items[0]);
147
- }
148
- }
149
- }
150
- toggleSelect(...items) {
151
- if (items && items.length) {
152
- items.forEach((item) => {
153
- if (this.multiple) {
154
- this.isItemSelected(item) ? this.unselectItems(item) : this.selectItems(item);
155
- }
156
- else {
157
- this.selectItems(item);
158
- }
159
- });
160
- }
161
- }
162
- isItemSelected(item) {
163
- return this.selectedItems.some((c) => c[this.valueField] === item[this.valueField]);
164
- }
165
- isItemDisabled(item) {
166
- return (coerceBooleanProperty(item[this.disabledField]) === true ||
167
- (this.disabledCallback ? this.disabledCallback({ item, index: -1 }) : false));
168
- }
169
- };
170
- }
171
- export const SELECTION_INPUTS = [
172
- 'valueField',
173
- 'textField',
174
- 'disabledField',
175
- 'disabledCallback',
176
- 'multiple',
177
- 'selectionMode',
178
- ];
179
- export const SELECTION_OUTPUT = ['onValueChanged', 'valueChanged'];
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWNvbXBvbmVudC5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9taXhpbi9zcmMvbGliL3NlbGVjdGlvbi1jb21wb25lbnQuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSWxDLE1BQU0sVUFBVSx5QkFBeUIsQ0FBNkMsSUFBVztJQUMvRixPQUFPLEtBQU0sU0FBUSxJQUFJO1FBUXZCOztXQUVHO1FBQ0gsSUFBSSxLQUFLO1lBQ1AsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxZQUFZO1lBQ2QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBSSxTQUFTO1lBQ1gsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBTUQsWUFBWSxHQUFHLElBQVc7WUFDeEIsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7WUEzQmpCLGVBQVUsR0FBVyxJQUFJLENBQUM7WUFDMUIsY0FBUyxHQUFXLE1BQU0sQ0FBQztZQUMzQixrQkFBYSxHQUFXLFVBQVUsQ0FBQztZQUVuQyxhQUFRLEdBQVksS0FBSyxDQUFDO1lBQzFCLGtCQUFhLEdBQXFCLE9BQU8sQ0FBQztZQWlCbkMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztZQUN6RCxtQkFBYyxHQUNuQixJQUFJLFlBQVksRUFBZ0MsQ0FBQztRQUluRCxDQUFDO1FBRVEsZUFBZTtZQUN0QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUdELElBQUksS0FBSztZQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFD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QUM7UUFDdEYsQ0FBQztRQUVELGNBQWMsQ0FBQyxJQUFTO1lBQ3RCLE9BQU8sQ0FDTCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssSUFBSTtnQkFDeEQsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FDN0UsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLFlBQVk7SUFDWixXQUFXO0lBQ1gsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsZUFBZTtDQUNoQixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYU2VsZWN0aW9uVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYmFzZS1jb21wb25lbnRzLmNsYXNzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSAnLi9jb25zdHJhdGN0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gX1NlbGVjdGlvbkNvbXBvbmVuZXRNaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPEFYQmFzZUNvbXBvbmVudD4+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2Uge1xuICAgIHZhbHVlRmllbGQ6IHN0cmluZyA9ICdpZCc7XG4gICAgdGV4dEZpZWxkOiBzdHJpbmcgPSAndGV4dCc7XG4gICAgZGlzYWJsZWRGaWVsZDogc3RyaW5nID0gJ2Rpc2FibGVkJztcbiAgICBkaXNhYmxlZENhbGxiYWNrOiAoZTogeyBpdGVtOiBhbnk7IGluZGV4OiBudW1iZXIgfSkgPT4gYm9vbGVhbjtcbiAgICBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbk1vZGU6ICd2YWx1ZScgfCAnaXRlbScgPSAndmFsdWUnO1xuXG4gICAgLyoqXG4gICAgICogIERlZmluZXMgdGhlIHByaW1hcnkgdGV4dCB0byBzaG93IGluc2lkZSB0aGUgYnV0dG9uLlxuICAgICAqL1xuICAgIGdldCBpdGVtcygpOiBhbnlbXSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlJdGVtcygpOiBhbnlbXSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2V0IGZsYXRJdGVtcygpOiBhbnlbXSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIHB1YmxpYyBvblZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0aW9uVmFsdWVDaGFuZ2VkRXZlbnQ+ID1cbiAgICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhTZWxlY3Rpb25WYWx1ZUNoYW5nZWRFdmVudD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBfb25JbnRlcm5hbEluaXQoKSB7XG4gICAgICBzdXBlci5fb25JbnRlcm5hbEluaXQoKTtcbiAgICB9XG5cbiAgICBfdmFsdWU6IGFueSB8IGFueVtdO1xuICAgIGdldCB2YWx1ZSgpOiBhbnkgfCBhbnlbXSB7XG4gICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2OiBhbnkgfCBhbnlbXSkge1xuICAgICAgdiA9ICh0aGlzIGFzIGFueSkuX2ludGVybmFsU2V0VmFsdWUodik7XG4gICAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBjbG9uZSh0aGlzLl92YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy5fdmFsdWUgPSBBcnJheS5pc0FycmF5KHYpID8gdiA6IHYgPyBbdl0gOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl92YWx1ZSA9IEFycmF5LmlzQXJyYXkodikgPyB2WzBdIDogdjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZW5kZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMuX2dldEhvc3RFbGVtZW50KCksXG4gICAgICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGZhbHNlLFxuICAgICAgICAgIG9sZFZhbHVlLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLl92YWx1ZSxcbiAgICAgICAgICBzZWxlY3RlZEtleXM6IHRoaXMuc2VsZWN0ZWRJdGVtcy5tYXAoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSksXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtczogdGhpcy5zZWxlY3RlZEl0ZW1zLnNsaWNlKCksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodiA9PSBudWxsIHx8IHYgPT0gdW5kZWZpbmVkIHx8IHYgPT0gJycpIHtcbiAgICAgICAgICAodGhpcyBhcyBhbnkpLl9zZXRTdGF0ZSgnY2xlYXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5faXNJbml0ZWQpIHtcbiAgICAgICAgICAgICh0aGlzIGFzIGFueSkudmFsaWRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBfc2VsZWN0ZWRJdGVtczogYW55W107XG4gICAgZ2V0IHNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMgfHwgW107XG4gICAgfVxuXG4gICAgX3JlbmRlclNlbGVjdGlvbigpIHtcbiAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwgfHwgdGhpcy52YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmZsYXRJdGVtcztcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5zb21lKChpaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaVt0aGlzLnZhbHVlRmllbGRdID09PSBpaVt0aGlzLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaVt0aGlzLnZhbHVlRmllbGRdID09PSBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMudmFsdWVbdGhpcy52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaVt0aGlzLnZhbHVlRmllbGRdID09PSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS5tYXAoKGlpKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBmYWtlOiBhbnkgPSB7fTtcbiAgICAgICAgICAgICAgZmFrZVt0aGlzLnZhbHVlRmllbGRdID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgZmFrZVt0aGlzLnRleHRGaWVsZF0gPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICByZXR1cm4gZmFrZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMudmFsdWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmYWtlOiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGZha2VbdGhpcy52YWx1ZUZpZWxkXSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICBmYWtlW3RoaXMudGV4dEZpZWxkXSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gW2Zha2VdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSBmdW5jKCk7XG4gICAgfVxuXG4gICAgX2dldEl0ZW1CeURhdGFNb2RlKGl0ZW06IGFueSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2l0ZW0nID8gaXRlbSA6IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXTtcbiAgICB9XG5cbiAgICBfZ2V0SXRlbVZhbHVlKGl0ZW06IGFueSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSA6IGl0ZW07XG4gICAgfVxuXG4gICAgdW5zZWxlY3RJdGVtcyguLi5pdGVtczogYW55W10pIHtcbiAgICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLmZpbHRlcihcbiAgICAgICAgICAoYykgPT4gIWl0ZW1zLnNvbWUoKGQpID0+IHRoaXMuX2dldEl0ZW1WYWx1ZShjKSA9PT0gdGhpcy5fZ2V0SXRlbVZhbHVlKGQpKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEl0ZW1zKC4uLml0ZW1zOiBhbnlbXSkge1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAodGhpcy52YWx1ZSB8fCBbXSkuY29uY2F0KGl0ZW1zLm1hcCgoYykgPT4gdGhpcy5fZ2V0SXRlbUJ5RGF0YU1vZGUoYykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fZ2V0SXRlbUJ5RGF0YU1vZGUoaXRlbXNbMF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0KC4uLml0ZW1zOiBhbnlbXSkge1xuICAgICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkgPyB0aGlzLnVuc2VsZWN0SXRlbXMoaXRlbSkgOiB0aGlzLnNlbGVjdEl0ZW1zKGl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW1zKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXNJdGVtU2VsZWN0ZWQoaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gaXRlbVt0aGlzLnZhbHVlRmllbGRdKTtcbiAgICB9XG5cbiAgICBpc0l0ZW1EaXNhYmxlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShpdGVtW3RoaXMuZGlzYWJsZWRGaWVsZF0pID09PSB0cnVlIHx8XG4gICAgICAgICh0aGlzLmRpc2FibGVkQ2FsbGJhY2sgPyB0aGlzLmRpc2FibGVkQ2FsbGJhY2soeyBpdGVtLCBpbmRleDogLTEgfSkgOiBmYWxzZSlcbiAgICAgICk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgU0VMRUNUSU9OX0lOUFVUUyA9IFtcbiAgJ3ZhbHVlRmllbGQnLFxuICAndGV4dEZpZWxkJyxcbiAgJ2Rpc2FibGVkRmllbGQnLFxuICAnZGlzYWJsZWRDYWxsYmFjaycsXG4gICdtdWx0aXBsZScsXG4gICdzZWxlY3Rpb25Nb2RlJyxcbl07XG5leHBvcnQgY29uc3QgU0VMRUNUSU9OX09VVFBVVCA9IFsnb25WYWx1ZUNoYW5nZWQnLCAndmFsdWVDaGFuZ2VkJ107XG4iXX0=
@@ -1,16 +0,0 @@
1
- export function _SizableComponenetMixin(Base) {
2
- return class extends Base {
3
- /**
4
- * @ignore
5
- */
6
- constructor(...args) {
7
- super(...args.slice(0, 2));
8
- }
9
- _onInternalInit() {
10
- super._onInternalInit();
11
- }
12
- };
13
- }
14
- export const SIZABLE_INPUTS = ['size'];
15
- export const SIZABLE_OUTPUT = [];
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6YWJsZS1taXhpbi5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9taXhpbi9zcmMvbGliL3NpemFibGUtbWl4aW4uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLHVCQUF1QixDQUE2QyxJQUFXO0lBQzdGLE9BQU8sS0FBTSxTQUFRLElBQUk7UUFNdkI7O1dBRUc7UUFDSCxZQUFZLEdBQUcsSUFBVztZQUN4QixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFUSxlQUFlO1lBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50LCBBWEVsZW1lbnRTaXplIH0gZnJvbSAnLi9iYXNlLWNvbXBvbmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cmF0Y3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBfU2l6YWJsZUNvbXBvbmVuZXRNaXhpbjxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPEFYQmFzZUNvbXBvbmVudD4+KEJhc2U6IFRCYXNlKSB7XG4gIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2Uge1xuICAgIC8qKlxuICAgICAqICBBIHRva2VuIHRoYXQgc3BlY2lmaWVzIHRoZSBzaXplIG9mIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBzaXplOiBBWEVsZW1lbnRTaXplO1xuXG4gICAgLyoqXG4gICAgICogIEBpZ25vcmVcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncy5zbGljZSgwLCAyKSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgX29uSW50ZXJuYWxJbml0KCkge1xuICAgICAgc3VwZXIuX29uSW50ZXJuYWxJbml0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgU0laQUJMRV9JTlBVVFMgPSBbJ3NpemUnXTtcbmV4cG9ydCBjb25zdCBTSVpBQkxFX09VVFBVVCA9IFtdO1xuIl19
@@ -1,67 +0,0 @@
1
- import { EventEmitter } from '@angular/core';
2
- export function _TextboxComponenetMixin(Base) {
3
- return class extends Base {
4
- _emitOnKeydownEvent(e) {
5
- this.onKeyDown.emit({
6
- component: this,
7
- nativeEvent: e,
8
- });
9
- this._setUserInteraction();
10
- }
11
- _emitOnKeyupEvent(e) {
12
- this.onKeyUp.emit({
13
- component: this,
14
- nativeEvent: e,
15
- });
16
- this._setUserInteraction();
17
- }
18
- _emitOnKeypressEvent(e) {
19
- this.onKeyPress.emit({
20
- component: this,
21
- nativeEvent: e,
22
- });
23
- this._setUserInteraction();
24
- }
25
- /**
26
- * @ignore
27
- */
28
- constructor(...args) {
29
- super(...args.slice(0, 2));
30
- /**
31
- * A string value that specifies the type of text box.
32
- */
33
- this.type = 'text';
34
- /**
35
- * A string value that specifies the placeholder of text box.
36
- */
37
- this.placeholder = '';
38
- /**
39
- * Fires each time the user press a key.
40
- * @event
41
- */
42
- this.onKeyDown = new EventEmitter();
43
- /**
44
- * Fires each time the user press a key.
45
- * @event
46
- */
47
- this.onKeyUp = new EventEmitter();
48
- /**
49
- * Fires each time the user press a key.
50
- * @event
51
- */
52
- this.onKeyPress = new EventEmitter();
53
- }
54
- };
55
- }
56
- export const TEXTBOX_INPUTS = [
57
- 'placeholder',
58
- 'maxLength',
59
- 'allowNull',
60
- 'type',
61
- 'autoComplete',
62
- 'readonly',
63
- 'value',
64
- 'name',
65
- ];
66
- export const TEXTBOX_OUTPUT = ['valueChange', 'onValueChanged'];
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGJveC1taXhpbi5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9taXhpbi9zcmMvbGliL3RleHRib3gtbWl4aW4uY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUk3QyxNQUFNLFVBQVUsdUJBQXVCLENBQTZDLElBQVc7SUFDN0YsT0FBTyxLQUFNLFNBQVEsSUFBSTtRQXVDdkIsbUJBQW1CLENBQUMsQ0FBZ0I7WUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFdBQVcsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1lBQ0YsSUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELGlCQUFpQixDQUFDLENBQWdCO1lBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNoQixTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsQ0FBQzthQUNmLENBQUMsQ0FBQztZQUNGLElBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFFRCxvQkFBb0IsQ0FBQyxDQUFnQjtZQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLENBQUM7YUFDZixDQUFDLENBQUM7WUFDRixJQUFZLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN0QyxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxZQUFZLEdBQUcsSUFBVztZQUN4QixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBbEU3Qjs7ZUFFRztZQUNILFNBQUksR0FBRyxNQUFNLENBQUM7WUFFZDs7ZUFFRztZQUNILGdCQUFXLEdBQVcsRUFBRSxDQUFDO1lBWXpCOzs7ZUFHRztZQUNILGNBQVMsR0FBNkMsSUFBSSxZQUFZLEVBQThCLENBQUM7WUFFckc7OztlQUdHO1lBQ0gsWUFBTyxHQUE2QyxJQUFJLFlBQVksRUFBOEIsQ0FBQztZQUVuRzs7O2VBR0c7WUFDSCxlQUFVLEdBQTZDLElBQUksWUFBWSxFQUE4QixDQUFDO1FBK0J0RyxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsYUFBYTtJQUNiLFdBQVc7SUFDWCxXQUFXO0lBQ1gsTUFBTTtJQUNOLGNBQWM7SUFDZCxVQUFVO0lBQ1YsT0FBTztJQUNQLE1BQU07Q0FDUCxDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEh0bWxFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtY29tcG9uZW50cy5jbGFzcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3RvciB9IGZyb20gJy4vY29uc3RyYXRjdG9yJztcblxuZXhwb3J0IGZ1bmN0aW9uIF9UZXh0Ym94Q29tcG9uZW5ldE1peGluPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I8QVhCYXNlQ29tcG9uZW50Pj4oQmFzZTogVEJhc2UpIHtcbiAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQmFzZSB7XG4gICAgLyoqXG4gICAgICogIEEgc3RyaW5nIHZhbHVlIHRoYXQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRleHQgYm94LlxuICAgICAqL1xuICAgIHR5cGUgPSAndGV4dCc7XG5cbiAgICAvKipcbiAgICAgKiAgQSBzdHJpbmcgdmFsdWUgdGhhdCBzcGVjaWZpZXMgdGhlIHBsYWNlaG9sZGVyIG9mIHRleHQgYm94LlxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKlxuICAgICAqICBBIG51bWJlciB2YWx1ZSB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBjaGFyYWN0ZXJzIG9mIHRleHQgYm94LlxuICAgICAqL1xuICAgIG1heExlbmd0aDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogIFNwZWNpZmllcyB0aGF0IGF1dG9jb21wbGV0ZSBpcyBvbiBvciBvZmYuXG4gICAgICovXG4gICAgYXV0b0NvbXBsZXRlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzIGEga2V5LlxuICAgICAqICBAZXZlbnRcbiAgICAgKi9cbiAgICBvbktleURvd246IEV2ZW50RW1pdHRlcjxBWEh0bWxFdmVudDxLZXlib2FyZEV2ZW50Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYSHRtbEV2ZW50PEtleWJvYXJkRXZlbnQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBwcmVzcyBhIGtleS5cbiAgICAgKiAgQGV2ZW50XG4gICAgICovXG4gICAgb25LZXlVcDogRXZlbnRFbWl0dGVyPEFYSHRtbEV2ZW50PEtleWJvYXJkRXZlbnQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhIdG1sRXZlbnQ8S2V5Ym9hcmRFdmVudD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzIGEga2V5LlxuICAgICAqICBAZXZlbnRcbiAgICAgKi9cbiAgICBvbktleVByZXNzOiBFdmVudEVtaXR0ZXI8QVhIdG1sRXZlbnQ8S2V5Ym9hcmRFdmVudD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxBWEh0bWxFdmVudDxLZXlib2FyZEV2ZW50Pj4oKTtcblxuICAgIF9lbWl0T25LZXlkb3duRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgdGhpcy5vbktleURvd24uZW1pdCh7XG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICB9KTtcbiAgICAgICh0aGlzIGFzIGFueSkuX3NldFVzZXJJbnRlcmFjdGlvbigpO1xuICAgIH1cblxuICAgIF9lbWl0T25LZXl1cEV2ZW50KGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgIHRoaXMub25LZXlVcC5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICBuYXRpdmVFdmVudDogZSxcbiAgICAgIH0pO1xuICAgICAgKHRoaXMgYXMgYW55KS5fc2V0VXNlckludGVyYWN0aW9uKCk7XG4gICAgfVxuXG4gICAgX2VtaXRPbktleXByZXNzRXZlbnQoZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgdGhpcy5vbktleVByZXNzLmVtaXQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgfSk7XG4gICAgICAodGhpcyBhcyBhbnkpLl9zZXRVc2VySW50ZXJhY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQGlnbm9yZVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICBzdXBlciguLi5hcmdzLnNsaWNlKDAsIDIpKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBURVhUQk9YX0lOUFVUUyA9IFtcbiAgJ3BsYWNlaG9sZGVyJyxcbiAgJ21heExlbmd0aCcsXG4gICdhbGxvd051bGwnLFxuICAndHlwZScsXG4gICdhdXRvQ29tcGxldGUnLFxuICAncmVhZG9ubHknLFxuICAndmFsdWUnLFxuICAnbmFtZScsXG5dO1xuZXhwb3J0IGNvbnN0IFRFWFRCT1hfT1VUUFVUID0gWyd2YWx1ZUNoYW5nZScsICdvblZhbHVlQ2hhbmdlZCddO1xuIl19
@@ -1,227 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { EventEmitter } from '@angular/core';
3
- import { clone } from 'lodash-es';
4
- export function _ValueComponenetMixin(Base) {
5
- return class extends Base {
6
- #readonly;
7
- /**
8
- * If set to true, user cannot change the value of component.
9
- */
10
- get readonly() {
11
- return this.#readonly;
12
- }
13
- set readonly(value) {
14
- this.#readonly = coerceBooleanProperty(value);
15
- }
16
- #allowNull;
17
- get allowNull() {
18
- return this.#allowNull;
19
- }
20
- set allowNull(value) {
21
- this.#allowNull = coerceBooleanProperty(value);
22
- }
23
- #name;
24
- get name() {
25
- return this.#name;
26
- }
27
- set name(value) {
28
- this.#name = value;
29
- }
30
- #isUserInteraction;
31
- get isUserInteraction() {
32
- return this.#isUserInteraction;
33
- }
34
- #value;
35
- get value() {
36
- return this._internalGetValue();
37
- }
38
- set value(v) {
39
- v = this._internalSetValue(v);
40
- //if (!this._isInited ) {
41
- const old = clone(this.value);
42
- // TODO: check real equality
43
- if (v != old) {
44
- this.#value = v;
45
- this._emitOnValueChangedEvent(old, this.value);
46
- this._cdr.markForCheck();
47
- if (v == null || v == undefined || v == '' || (Array.isArray(v) && v.length == 0)) {
48
- this._setState('clear');
49
- }
50
- // else {
51
- // if (this._isInited) {
52
- // this.validate();
53
- // }
54
- // }
55
- }
56
- this.#isUserInteraction = false;
57
- //}
58
- }
59
- #state;
60
- get state() {
61
- return this.#state;
62
- }
63
- set state(value) {
64
- this._setState(value);
65
- this.stateChange.emit(value);
66
- }
67
- _emitOnValueChangedEvent(oldValue, newValue) {
68
- this.valueChange.emit(newValue);
69
- this.onValueChanged.emit({
70
- component: this,
71
- value: newValue,
72
- oldValue: oldValue,
73
- name: this.name,
74
- isUserInteraction: this.isUserInteraction,
75
- });
76
- this._onValueChanged(oldValue, this.#value);
77
- this.#isUserInteraction = false;
78
- }
79
- _internalSetValue(value) {
80
- return this._setValue(value);
81
- }
82
- _internalGetValue() {
83
- return this._getValue(this.#value);
84
- }
85
- _setValue(value) {
86
- return value;
87
- }
88
- _getValue(value) {
89
- return value;
90
- }
91
- _setUserInteraction() {
92
- this.#isUserInteraction = true;
93
- }
94
- setUserInteraction() {
95
- this.#isUserInteraction = true;
96
- }
97
- _onValueChanged(oldValue, newValue) { }
98
- _onInternalInit() {
99
- this._getHostElement().setAttribute('ax-form-input', 'true');
100
- super._onInternalInit();
101
- }
102
- _onInternalViewInit() {
103
- this._checkRequired();
104
- super._onInternalViewInit();
105
- }
106
- _onInternalDestroy() {
107
- super.onDestroy();
108
- }
109
- clear() {
110
- this.value = null;
111
- }
112
- _checkRequired() {
113
- const isRequired = Array.from(this._getHostElement().querySelectorAll('ax-validation-rule')).some((c) => c.__axContext__.enabled && c.__axContext__.rule == 'required');
114
- //
115
- if (isRequired) {
116
- const container = this._getHostElement().classList.contains('ax-editor-container')
117
- ? this._getHostElement()
118
- : this._getHostElement().querySelector('.ax-editor-container');
119
- const formField = container?.closest('.ax-form-field');
120
- const label = formField?.querySelector('ax-label')?.__axContext__;
121
- if (label)
122
- label.required = true;
123
- }
124
- }
125
- validate() {
126
- const rules = Array.from(this._getHostElement().querySelectorAll('ax-validation-rule')).filter((c) => c.__axContext__.enabled);
127
- //
128
- if (!rules || rules.length === 0) {
129
- this._setState('clear');
130
- return Promise.resolve({
131
- result: true,
132
- value: this.value,
133
- name: this.name,
134
- id: this.id,
135
- });
136
- }
137
- return new Promise((resolve) => {
138
- Promise.all(rules
139
- .filter((c) => typeof c?.validate === 'function')
140
- .map((c) => {
141
- return c.validate(this.value);
142
- })).then((d) => {
143
- const error = d.find((c) => c.result === false);
144
- if (error) {
145
- this._setState('error', error.message);
146
- resolve({
147
- result: false,
148
- value: this.value,
149
- message: error.message,
150
- name: this.name,
151
- id: this.id,
152
- });
153
- }
154
- else {
155
- this._setState('success');
156
- resolve({
157
- result: true,
158
- value: this.value,
159
- name: this.name,
160
- id: this.id,
161
- });
162
- }
163
- });
164
- });
165
- }
166
- /**
167
- * @ignore
168
- */
169
- constructor(...args) {
170
- super(...args);
171
- /**
172
- * Fires each time the user press a key.
173
- * @event
174
- */
175
- this.onValueChanged = new EventEmitter();
176
- this.valueChange = new EventEmitter();
177
- this.stateChange = new EventEmitter();
178
- this.#readonly = false;
179
- this.#allowNull = true;
180
- this.#isUserInteraction = false;
181
- this.#state = 'clear';
182
- }
183
- _setState(state, ...args) {
184
- const container = this._getHostElement().classList.contains('ax-editor-container')
185
- ? this._getHostElement()
186
- : this._getHostElement().querySelector('.ax-editor-container');
187
- const formField = container?.closest('.ax-form-field');
188
- const label = formField?.querySelector('ax-label') || formField?.querySelector('label');
189
- let target = container || this._getInnerElement();
190
- if (target?.querySelector('.ax-error-container')) {
191
- target = target.querySelector('.ax-error-container');
192
- }
193
- const parent = target?.parentElement;
194
- if (!target || !parent)
195
- return;
196
- switch (state) {
197
- case 'clear':
198
- this.#state = 'clear';
199
- if (parent.querySelector('span.ax-error-message')) {
200
- parent.removeChild(parent.querySelector('span.ax-error-message'));
201
- }
202
- label?.classList.remove('ax-state-error');
203
- target.classList.remove('ax-state-error', 'ax-state-success');
204
- break;
205
- case 'success':
206
- this._setState('clear');
207
- target.classList.add('ax-state-success');
208
- this.#state = 'success';
209
- break;
210
- case 'error':
211
- this._setState('clear');
212
- if (args[0]) {
213
- const span = document.createElement('span');
214
- span.innerText = args[0];
215
- span.classList.add('ax-error-message');
216
- parent.appendChild(span);
217
- }
218
- label?.classList.add('ax-state-error');
219
- target.classList.add('ax-state-error');
220
- this.#state = 'error';
221
- break;
222
- }
223
- this._cdr.markForCheck();
224
- }
225
- };
226
- }
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtbWl4aW4uY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWl4aW4vc3JjL2xpYi92YWx1ZS1taXhpbi5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJbEMsTUFBTSxVQUFVLHFCQUFxQixDQUE2QyxJQUFXO0lBQzNGLE9BQU8sS0FBTSxTQUFRLElBQUk7UUFVdkIsU0FBUyxDQUFrQjtRQUUzQjs7V0FFRztRQUNILElBQUksUUFBUTtZQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsS0FBYztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxVQUFVLENBQWlCO1FBQzNCLElBQUksU0FBUztZQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBYztZQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELENBQUM7UUFFRCxLQUFLLENBQVM7UUFDZCxJQUFJLElBQUk7WUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLEtBQWE7WUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsQ0FBQztRQUVELGtCQUFrQixDQUFrQjtRQUVwQyxJQUFJLGlCQUFpQjtZQUNuQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztR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QU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO29CQUN4QixNQUFNO2dCQUNSLEtBQUssT0FBTztvQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDWCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDMUI7b0JBQ0QsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07YUFDVDtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhCYXNlQ29tcG9uZW50LCBBWENvbXBvbmVudFN0YXRlIH0gZnJvbSAnLi9iYXNlLWNvbXBvbmVudHMuY2xhc3MnO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tICcuL2NvbnN0cmF0Y3Rvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBfVmFsdWVDb21wb25lbmV0TWl4aW48VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxBWEJhc2VDb21wb25lbnQ+PihCYXNlOiBUQmFzZSkge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlIHtcbiAgICAvKipcbiAgICAgKiAgRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHByZXNzIGEga2V5LlxuICAgICAqICBAZXZlbnRcbiAgICAgKi9cbiAgICBvblZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYVmFsdWVDaGFuZ2VkRXZlbnQ8YW55Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYVmFsdWVDaGFuZ2VkRXZlbnQ8YW55Pj4oKTtcblxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhDb21wb25lbnRTdGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYQ29tcG9uZW50U3RhdGU+KCk7XG5cbiAgICAjcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBJZiBzZXQgdG8gdHJ1ZSwgdXNlciBjYW5ub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiBjb21wb25lbnQuXG4gICAgICovXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuI3JlYWRvbmx5O1xuICAgIH1cbiAgICBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHRoaXMuI3JlYWRvbmx5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAjYWxsb3dOdWxsOiBib29sZWFuID0gdHJ1ZTtcbiAgICBnZXQgYWxsb3dOdWxsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuI2FsbG93TnVsbDtcbiAgICB9XG4gICAgc2V0IGFsbG93TnVsbCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgdGhpcy4jYWxsb3dOdWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAjbmFtZTogc3RyaW5nO1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuI25hbWU7XG4gICAgfVxuICAgIHNldCBuYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgIHRoaXMuI25hbWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAjaXNVc2VySW50ZXJhY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGdldCBpc1VzZXJJbnRlcmFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLiNpc1VzZXJJbnRlcmFjdGlvbjtcbiAgICB9XG5cbiAgICAjdmFsdWU6IGFueTtcbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbEdldFZhbHVlKCk7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICAgIHYgPSB0aGlzLl9pbnRlcm5hbFNldFZhbHVlKHYpO1xuICAgICAgLy9pZiAoIXRoaXMuX2lzSW5pdGVkICkge1xuICAgICAgY29uc3Qgb2xkID0gY2xvbmUodGhpcy52YWx1ZSk7XG4gICAgICAvLyBUT0RPOiBjaGVjayByZWFsIGVxdWFsaXR5XG4gICAgICBpZiAodiAhPSBvbGQpIHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSB2O1xuICAgICAgICB0aGlzLl9lbWl0T25WYWx1ZUNoYW5nZWRFdmVudChvbGQsIHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGlmICh2ID09IG51bGwgfHwgdiA9PSB1bmRlZmluZWQgfHwgdiA9PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA9PSAwKSkge1xuICAgICAgICAgIHRoaXMuX3NldFN0YXRlKCdjbGVhcicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgIGlmICh0aGlzLl9pc0luaXRlZCkge1xuICAgICAgICAvLyAgICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgICAgdGhpcy4jaXNVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICAgIC8vfVxuICAgIH1cblxuICAgICNzdGF0ZTogQVhDb21wb25lbnRTdGF0ZSA9ICdjbGVhcic7XG5cbiAgICBnZXQgc3RhdGUoKTogQVhDb21wb25lbnRTdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy4jc3RhdGU7XG4gICAgfVxuXG4gICAgc2V0IHN0YXRlKHZhbHVlOiBBWENvbXBvbmVudFN0YXRlKSB7XG4gICAgICB0aGlzLl9zZXRTdGF0ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIH1cblxuICAgIF9lbWl0T25WYWx1ZUNoYW5nZWRFdmVudChvbGRWYWx1ZT86IGFueSwgbmV3VmFsdWU/OiBhbnkpIHtcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0aGlzLmlzVXNlckludGVyYWN0aW9uLFxuICAgICAgfSk7XG4gICAgICB0aGlzLl9vblZhbHVlQ2hhbmdlZChvbGRWYWx1ZSwgdGhpcy4jdmFsdWUpO1xuICAgICAgdGhpcy4jaXNVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBfaW50ZXJuYWxTZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIF9pbnRlcm5hbEdldFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFZhbHVlKHRoaXMuI3ZhbHVlKTtcbiAgICB9XG5cbiAgICBfc2V0VmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIF9nZXRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgX3NldFVzZXJJbnRlcmFjdGlvbigpIHtcbiAgICAgIHRoaXMuI2lzVXNlckludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzZXRVc2VySW50ZXJhY3Rpb24oKSB7XG4gICAgICB0aGlzLiNpc1VzZXJJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgX29uVmFsdWVDaGFuZ2VkKG9sZFZhbHVlOiBhbnksIG5ld1ZhbHVlOiBhbnkpOiB2b2lkIHt9XG5cbiAgICBvdmVycmlkZSBfb25JbnRlcm5hbEluaXQoKSB7XG4gICAgICB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYXgtZm9ybS1pbnB1dCcsICd0cnVlJyk7XG4gICAgICBzdXBlci5fb25JbnRlcm5hbEluaXQoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBfb25JbnRlcm5hbFZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgdGhpcy5fY2hlY2tSZXF1aXJlZCgpO1xuICAgICAgc3VwZXIuX29uSW50ZXJuYWxWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIF9vbkludGVybmFsRGVzdHJveSgpIHtcbiAgICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIGNsZWFyKCkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgX2NoZWNrUmVxdWlyZWQoKSB7XG4gICAgICBjb25zdCBpc1JlcXVpcmVkID0gQXJyYXkuZnJvbSh0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2F4LXZhbGlkYXRpb24tcnVsZScpKS5zb21lKFxuICAgICAgICAoYykgPT4gKGMgYXMgYW55KS5fX2F4Q29udGV4dF9fLmVuYWJsZWQgJiYgKGMgYXMgYW55KS5fX2F4Q29udGV4dF9fLnJ1bGUgPT0gJ3JlcXVpcmVkJyxcbiAgICAgICk7XG4gICAgICAvL1xuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoJ2F4LWVkaXRvci1jb250YWluZXInKVxuICAgICAgICAgID8gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKVxuICAgICAgICAgIDogdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcuYXgtZWRpdG9yLWNvbnRhaW5lcicpO1xuICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBjb250YWluZXI/LmNsb3Nlc3QoJy5heC1mb3JtLWZpZWxkJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gKGZvcm1GaWVsZD8ucXVlcnlTZWxlY3RvcignYXgtbGFiZWwnKSBhcyBhbnkpPy5fX2F4Q29udGV4dF9fO1xuICAgICAgICBpZiAobGFiZWwpIGxhYmVsLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgY29uc3QgcnVsZXMgPSBBcnJheS5mcm9tKHRoaXMuX2dldEhvc3RFbGVtZW50KCkucXVlcnlTZWxlY3RvckFsbCgnYXgtdmFsaWRhdGlvbi1ydWxlJykpLmZpbHRlcihcbiAgICAgICAgKGMpID0+IChjIGFzIGFueSkuX19heENvbnRleHRfXy5lbmFibGVkLFxuICAgICAgKTtcbiAgICAgIC8vXG4gICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9zZXRTdGF0ZSgnY2xlYXInKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgcmVzdWx0OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIFByb21pc2UuYWxsKFxuICAgICAgICAgIHJ1bGVzXG4gICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB0eXBlb2YgKGMgYXMgYW55KT8udmFsaWRhdGUgPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoYyBhcyBhbnkpLnZhbGlkYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICkudGhlbigoZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gZC5maW5kKChjKSA9PiBjLnJlc3VsdCA9PT0gZmFsc2UpO1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3RhdGUoJ2Vycm9yJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgcmVzdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0U3RhdGUoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBAaWdub3JlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIF9zZXRTdGF0ZShzdGF0ZTogQVhDb21wb25lbnRTdGF0ZSwgLi4uYXJncykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoJ2F4LWVkaXRvci1jb250YWluZXInKVxuICAgICAgICA/IHRoaXMuX2dldEhvc3RFbGVtZW50KClcbiAgICAgICAgOiB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLnF1ZXJ5U2VsZWN0b3IoJy5heC1lZGl0b3ItY29udGFpbmVyJyk7XG4gICAgICBjb25zdCBmb3JtRmllbGQgPSBjb250YWluZXI/LmNsb3Nlc3QoJy5heC1mb3JtLWZpZWxkJyk7XG4gICAgICBjb25zdCBsYWJlbCA9IGZvcm1GaWVsZD8ucXVlcnlTZWxlY3RvcignYXgtbGFiZWwnKSB8fCBmb3JtRmllbGQ/LnF1ZXJ5U2VsZWN0b3IoJ2xhYmVsJyk7XG4gICAgICBsZXQgdGFyZ2V0ID0gY29udGFpbmVyIHx8IHRoaXMuX2dldElubmVyRWxlbWVudCgpO1xuICAgICAgaWYgKHRhcmdldD8ucXVlcnlTZWxlY3RvcignLmF4LWVycm9yLWNvbnRhaW5lcicpKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCcuYXgtZXJyb3ItY29udGFpbmVyJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXQ/LnBhcmVudEVsZW1lbnQ7XG4gICAgICBpZiAoIXRhcmdldCB8fCAhcGFyZW50KSByZXR1cm47XG5cbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgY2FzZSAnY2xlYXInOlxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gJ2NsZWFyJztcbiAgICAgICAgICBpZiAocGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4uYXgtZXJyb3ItbWVzc2FnZScpKSB7XG4gICAgICAgICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4uYXgtZXJyb3ItbWVzc2FnZScpISk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPy5jbGFzc0xpc3QucmVtb3ZlKCdheC1zdGF0ZS1lcnJvcicpO1xuICAgICAgICAgIHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCdheC1zdGF0ZS1lcnJvcicsICdheC1zdGF0ZS1zdWNjZXNzJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICAgIHRoaXMuX3NldFN0YXRlKCdjbGVhcicpO1xuICAgICAgICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKCdheC1zdGF0ZS1zdWNjZXNzJyk7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSAnc3VjY2Vzcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICB0aGlzLl9zZXRTdGF0ZSgnY2xlYXInKTtcbiAgICAgICAgICBpZiAoYXJnc1swXSkge1xuICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIHNwYW4uaW5uZXJUZXh0ID0gYXJnc1swXTtcbiAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgnYXgtZXJyb3ItbWVzc2FnZScpO1xuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsYWJlbD8uY2xhc3NMaXN0LmFkZCgnYXgtc3RhdGUtZXJyb3InKTtcbiAgICAgICAgICB0YXJnZXQuY2xhc3NMaXN0LmFkZCgnYXgtc3RhdGUtZXJyb3InKTtcblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gJ2Vycm9yJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH07XG59XG4iXX0=